←2021-06-16 2021-06-17 2021-06-18→ ↑2021 ↑all
00:00:40 <Guest86> very simple benchmark show that BIPLAN seems around 3 times slower than python, considering BIPLAN much simpler, it must be less efficient.
00:01:15 <zzo38> I mean that this is not a very good way to design P-code format, since that makes it less efficient. You can design it to be simple and more efficient, but not needing parsing; do the parsing at compile time
00:01:19 <Guest86> although a month ago was 9 times slower than python :)
00:02:03 <Guest86> I did not consider that, you are right, I could make some of the work at compile time
00:02:57 <esolangs> [[Tower]] M https://esolangs.org/w/index.php?diff=84615&oldid=84278 * PythonshellDebugwindow * (+67) /* Examples */ Categories
00:03:40 <Guest86> I probably reached a point in which the implementation is more optimized than the p-code format, yes
00:04:12 <zzo38> I have done P-code stuff (such as Free Hero Mesh and ZZ Zero)
00:05:17 <Guest86> very intriguing stuff, I am really enjoying this experiment
00:05:35 <Guest86> Free Hero Mesh looks really cool
00:07:18 <Guest86> Why you have used big numbers for the P-codes?
00:08:05 <Guest86> I mean why you avoid most values between 10 and 32768
00:09:03 <esolangs> [[User:Salpynx/n-Genus Graph Embedding]] N https://esolangs.org/w/index.php?oldid=84616 * Salpynx * (+4585) trying to test for n-genus embedding in source code, like wire-crossing problem. Experimental idea.
00:09:18 <zzo38> They aren't avoided; they are used for constants and stuff. I suppose you are looking at instruc.h
00:09:32 <Guest86> yes
00:10:05 <Guest86> I will read it don't want to waste your time explaining something I can undestand
00:10:35 -!- spirgel has joined.
00:10:50 <zzo38> See internals.doc for the list of opcode ranges that are used
00:11:13 <Guest86> thank you
00:12:15 <zzo38> For example, opcode 0x4001 pushes class 1 to the stack, and opcode 0x0200 pushes the INIT message to the stack.
00:12:59 <Guest86> the big difference is that I do not have a stack, this for sure
00:15:08 <Guest86> do you think the gain in portability and simplicity of tooling obtained by an ASCII p-code values the performance loss?
00:15:34 -!- spirgel has quit (Ping timeout: 268 seconds).
00:15:50 <Guest86> it is very handy to have the program as a string, it can be easily transmitted whatever is the medium, potentially even via SMS
00:15:54 <esolangs> [[User:Salpynx/n-Genus Graph Embedding]] M https://esolangs.org/w/index.php?diff=84617&oldid=84616 * Salpynx * (+0) /* Desargues graph */ typ0
00:16:06 <zzo38> It depends on the application, probably. Sometimes it is useful, other times not
00:16:40 <Guest86> this is not the first project in which I apply this pattern, which is probably as old as programming languages:
00:17:02 <Guest86> https://github.com/gioblu/BIPLAN/tree/master/src/interfaces
00:17:16 <Guest86> I have interfaces which abstract system calls, the thing can easily run more or less everywhere
00:17:28 <Guest86> Arduino Mega -> Linux
00:17:29 <zzo38> Using a stack makes it easier to parse and makes it unnecessary to deal with precedence, too
00:18:12 <Guest86> the usecase is fit a simple VM I can understand in a very limited machine
00:18:31 <Guest86> and have the chance to inspect it / run it everywhere I need
00:19:27 <zzo38> Yes, although it is still possible to improve it in many ways, although other than that it does seem a good idea for what you seem to be trying to do.
00:19:49 <Guest86> https://www.youtube.com/watch?v=yD2hqngGI6U&feature=emb_title
00:19:51 <Guest86> check this out
00:20:27 <Guest86> it can be re-programmed using the arduino toolchain, I could fit in there a more modern language than tinybasic and write my own applications directly in there
00:20:54 <Guest86> I built some arduino BASIC computers, very cool, but the language sucks
00:21:28 <Guest86> the arduino boards need a very slick impl, even micropython does not fit
00:21:56 <Guest86> so I wrote BIPLAN
00:23:02 <Guest86> I would be very happy to improve it, if you have any idea and will to share it I would be happy to try to implement them
00:27:32 <zzo38> Having separate instruction for print character, print string, and print number, also would be better I think, than using such things as "print index"
00:29:11 -!- spirgel has joined.
00:30:26 <zzo38> Forth is another alternative to BASIC
00:30:37 <Guest86> true, print does not look nice, specially because I have to carry the information of the type
00:30:50 <Guest86> from the bottom of the parser
00:31:23 <Guest86> yes, for sure better than BASIC, although I cannot work productively with that
00:32:10 <oerjan> `? forth
00:32:12 <HackEso> Since Biblical times, Forth has been the go-to language for multiplication.
00:32:48 <Guest86> yes, although it for sure looks intriguing
00:33:17 <keegan> hehehe
00:33:27 -!- salpynx has quit (Ping timeout: 268 seconds).
00:34:04 -!- spirgel has quit (Ping timeout: 268 seconds).
00:34:11 <Guest86> I really miss a computer that does not need minutes to boot, and additional stuff to be able to be used for general purpose computation
00:36:36 <Guest86> I think the smart response, being arduino compatible is for sure a good base, with a language like BIPLAN a lot of stuff could be done, the code editor itself could be written in BIPLAN
00:37:38 <Guest86> I will see what happens having dedicated p-codes for the print function, thank you
00:42:04 <zzo38> I agree about missing a computer that does not need minutes to boot and that stuff. I also had idea of new computer system, that has BIOS and Forth in ROM, so it can just load right away and does not need a separate operating system
00:42:57 <Guest86> you could do that with the smart response if you have familiarity with the arduino toolchain
00:43:41 <Guest86> for sure is a limited machine, but that is portable and very nice :)
00:45:24 <Guest86> I enjoy coding since the 2000s but I still see forth a little scary, although I have probably never jumped into it or had the necessity to use it.
00:46:34 -!- spirgel has joined.
00:51:05 -!- spirgel has quit (Ping timeout: 244 seconds).
01:03:06 -!- spruit11 has quit (Ping timeout: 240 seconds).
01:04:33 -!- spirgel has joined.
01:09:18 -!- spirgel has quit (Ping timeout: 264 seconds).
01:11:46 -!- delta23 has joined.
01:21:32 -!- spirgel has joined.
01:26:29 -!- spirgel has quit (Ping timeout: 268 seconds).
01:27:54 <imode> forth is neat. needs more abstractions.
01:31:39 -!- spruit11 has joined.
01:36:38 -!- spruit11 has quit (Ping timeout: 252 seconds).
01:36:51 -!- salpynx has joined.
01:42:17 -!- spirgel has joined.
01:46:57 -!- spirgel has quit (Ping timeout: 268 seconds).
01:47:18 -!- cd has changed nick to moon.
02:00:05 -!- spirgel has joined.
02:04:43 -!- spirgel has quit (Ping timeout: 268 seconds).
02:18:32 -!- spruit11 has joined.
02:23:20 -!- spruit11 has quit (Ping timeout: 268 seconds).
02:25:13 <pikhq> forth is pretty clever, but it's not really done as a language for big systems. it's done as one that works decently _while being small)
02:26:50 <imode> one wonders what scaling that up might look like.
02:27:57 <imode> like, think "clojure, but for forth".
02:29:28 -!- spirgel has joined.
02:33:41 <moon> FORTH is my favorite choice for small embedded systems
02:33:42 <moon> like
02:33:54 -!- spirgel has quit (Ping timeout: 244 seconds).
02:33:56 <moon> my Propeller 2 has a FORTH in about ~12KiB of it's 16KiB ROM and it's pretty much full featured
02:35:28 <imode> in all my workings with concatenative languages, the split between "you're just using a stack machine" and "this is a lisp using reverse polish notation" gets wider and weirder the more you look around.
02:35:53 <imode> in Forth you've got a pretty explicit memory model.
02:35:57 <imode> in PostScript you don't.
02:36:03 <imode> (afaiui)
02:36:22 <imode> but you can build things out of lists/quotations in PostScript.
02:36:34 <imode> you have to decide how to build things using Forth.
02:36:45 <imode> does PostScript have stuff like Forth's "immediate words"?
02:37:20 <imode> i.e can I fit an "infix expression parser" into PostScript and use it as a DSL, I wonder.
02:38:01 <Corbin> I just want a categorical concatenative language. No variables or stack effects, just composition.
02:38:29 <imode> you kinda need stack effects to do any kind of expression reordering.
02:39:21 <Corbin> It can be done with algebra alone. Also, maybe expressions aren't a good unit of code; I want arrows/morphisms instead.
02:39:21 <imode> I guess.. what do you mean by "stack effects".
02:40:07 <imode> do you have maybe some sample of how that'd differ from an existing concatenative language? or what it'd look like syntactically and behave like semantically?
02:40:21 <imode> "categorical concatenative language" doesn't really conjure many concrete feelings for me.
02:40:29 <Corbin> e.g. the typical Forth has `dup`, which copies the top of stack and pushes that copy. Meanwhile, the typical Cartesian closed category has `dup : A -> (A, A)` which takes a value and returns a pair of that value, duplicated.
02:41:39 <imode> I mean, you'd then need to add things to destructure those pairs.
02:42:05 <imode> `dup first` would be equivalent to the stack effect, I guess. how do you deal with expressions that deal with multiple items at a time.
02:42:07 <HackEso> dup? No such file or directory
02:42:10 <imode> sorry hackeso.
02:42:15 <Corbin> Yes. Here's an example abomination syntax: https://bpa.st/4EXQ
02:42:41 <Corbin> Currying and uncurrying is the standard answer.
02:42:41 <imode> I don't understand any of that.
02:42:59 <imode> can you de-jargon that.
02:45:00 <Corbin> If you have a function that's applied like f(x, y) then there's an altered version f' which is called like f'(x)(y). We say that f' is the "curried" form of f, or that f is the "uncurried" form of f'.
02:45:21 <Corbin> This is the standard way that Cartesian closed categories deal with multiple arguments simultaneously.
02:45:52 <imode> right, I get what currying is.
02:46:06 -!- spirgel has joined.
02:46:20 <imode> you still... need a stack, though.
02:46:39 <shachaf> Surely to be a "curried" form it should include some cumin, turmeric, etc.?
02:46:41 <imode> like, by definition. you need to hold at least two items: the "structure" you want to work on and the operand.
02:47:41 <Corbin> That's just a pair. There's an arrow ([X, Y], X) -> Y for evaluation.
02:48:20 <imode> that.. doesn't really address my concern, though.
02:48:25 <imode> how are you "evaluating" this.
02:48:31 <Corbin> The concatenative language need not mirror the opcodes of a low-level stack machine. That's mixing language design with runtime design.
02:48:57 <Corbin> I dunno, I was going to throw it all into RPython and generate a JIT. I'm pretty lazy.
02:49:10 <imode> that I'll agree with, but "stack operations" map prety well to the very high-level requirements of "re-ordering data".
02:49:31 <imode> you need to be able to duplicate, erase, and re-order things.
02:49:31 -!- hendursaga has quit (Ping timeout: 252 seconds).
02:49:43 <imode> and you need to be able to handle multiple of those things at once, so where are you storing your "data".
02:49:48 <Corbin> I guess I don't understand the split of "you're just using a stack machine" and "this is a Lisp using RPN"; a categorical arrow is neither.
02:50:38 <imode> it's the difference between "I'm manipulating a linked list and blocks of memory" and "I'm manipulating abstract lists of symbols using a small base of primitives".
02:50:41 <Corbin> All of the immediate parallelism is done with pairs. This is the "monoidal" approach. It is a little silly and reductive at first, but it does work.
02:50:57 <imode> parallelism?
02:50:58 -!- spirgel has quit (Ping timeout: 268 seconds).
02:51:27 <Corbin> Like, multiple things at once.
02:51:29 -!- hendursaga has joined.
02:51:52 <imode> so, humor me for a second.
02:52:08 <imode> what is the equivalent of, say, 1 2 + 3 4 + * in your language.
02:52:48 <imode> and something like `dup *`, or the quadratic formula.
02:53:15 <imode> the last one usually strains people.
02:53:31 <Corbin> It could be as simple as `*(+(1, 2), +(3, 4))`. They're applicative trees.
02:53:44 <imode> so.. you're talking about a lisp, then.
02:53:58 <Corbin> Maybe? I thought that Lisps usually had names and lambdas.
02:54:06 <imode> that's not really concatenative, the syntax doesn't form a monoid.
02:54:07 <Corbin> I'm kind of sick of both of those things.
02:54:13 -!- spruit11 has joined.
02:54:15 <imode> yeah you and me both.
02:54:53 <Corbin> All categories form monoids under composition. My example syntax (both here and in the abomination writeup) goes from left to right. If I write `fg`, imagine it as `comp(f, g)`.
02:55:31 <imode> can you write that in a manner that doesn't involve explicit bracketed delimiters.
02:56:43 <imode> the point of a concatenative language is that you can stitch arbitrary program fragments together.
02:56:54 <imode> and slice them apart at any point.
02:58:42 -!- spruit11 has quit (Ping timeout: 240 seconds).
02:59:04 <Corbin> Stitch, yes; slice, no. Indeed I know of no Forth or concatenative language with the second property.
02:59:16 <imode> well y'do now. :P
02:59:21 <imode> mine.
02:59:45 <Corbin> How do you handle quotations? Definitions?
02:59:54 <imode> defining them via composition and quotation.
03:00:03 <imode> one sec, I can go into this more after a dog walk.
03:04:40 -!- spirgel has joined.
03:09:02 -!- spirgel has quit (Ping timeout: 244 seconds).
03:17:02 <salpynx> Culex looks interesting, and the formalism is nice to have. If there was an interpreter I'd play with it to make sure I understood it. The S and K definitions make sense (but the visible backticks in that view are distracting and breaking my concentration :)
03:22:21 <Corbin> It's not good, IMO. I have been frustrated the past few weeks by the fact that the last language that wanted to be categorical without names was Hagino's Categorical Programming Language.
03:23:47 <Corbin> I'm so tired of syntax. I hate typing. I don't understand why I have to write out the same programs that we've been writing for decades, but in Yet Another New Syntax every time.
03:24:54 <imode> back.
03:25:00 <imode> Corbin: you'd looooooove Feather.
03:25:27 <imode> lemme show you some samples! that don't work because I'm an idiot and made a destructive change to the interpreter (that salpynx is helping me unwind), but used to work.
03:26:10 <imode> https://bpa.st/ASOQ
03:27:49 <Corbin> Nifty. Not sure if I believe the slicing property, but I can see how it's approached.
03:28:08 <imode> the brackets are simply pieces of code.
03:28:19 <imode> rather, "words" in forth parlance.
03:28:42 <imode> [ pushes a delimiter, ] composes everything until it hits that delimiter.
03:28:42 <j-bot> imode: |spelling error
03:28:42 <j-bot> imode: | pushes a delimiter, ] composes everything until it hits that delimiter.
03:28:42 <j-bot> imode: | ^
03:28:46 <imode> sorry j-bot.
03:29:25 <imode> every piece of syntax in that file can be sliced apart to yield a valid program.
03:30:18 <imode> the primitives are thin: dup swap drop left right compose quote apply !
03:30:42 <imode> you build quotations (without any prior definitions) via compose and quote.
03:31:16 <Corbin> How's that first line work then? Doesn't it have `.` and `define` as primitives? Do tokens change behavior depending on context?
03:31:35 -!- spirgel has joined.
03:31:39 <imode> "define" is a primitive. "." is defined as a shorthand for "compose".
03:32:01 <imode> "define"s effect is simply "take a thing, and a symbol, and put it in the global environment".
03:32:11 <imode> it's just some shorthand.
03:33:18 <Corbin> I see, cool. Hope you get your interpreter working again.
03:33:30 <imode> will post it if I do.
03:33:35 <imode> it's neat to see it in action.
03:34:09 <imode> for example, just typing out 'if' in this case will plop a giant set of quotations onto the "stack".
03:34:41 <imode> that can be terminated by a "then", and actually does checks for valid syntax.
03:35:08 <imode> the if ... then ... else ... end syntax is defined on lines 161 through 194 of that file.
03:35:22 -!- Lord_of_Life has quit (Ping timeout: 268 seconds).
03:35:33 -!- Lord_of_Life_ has joined.
03:36:36 -!- spirgel has quit (Ping timeout: 268 seconds).
03:36:45 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
03:44:06 <zzo38> Are you able to set up the log on the IRC channel I have set up for my projects too now (in a different directory, but with the same raw logs formats)?
03:45:24 <zzo38> (I forgot who it was, but whoever it is if they agree to set it up I will grant the +t permission for them)
03:48:05 -!- spirgel has joined.
03:52:38 -!- spirgel has quit (Ping timeout: 268 seconds).
03:55:31 -!- spruit11 has joined.
04:00:37 -!- spruit11 has quit (Ping timeout: 272 seconds).
04:03:59 -!- oerjan has quit (Quit: Nite).
04:16:23 -!- spirgel has joined.
04:21:18 -!- spirgel has quit (Ping timeout: 264 seconds).
04:32:46 -!- spirgel has joined.
04:33:24 <esolangs> [[User:Salpynx/n-Genus Graph Embedding]] M https://esolangs.org/w/index.php?diff=84618&oldid=84617 * Salpynx * (+0) /* Specific embeddings to demonstrate genus */ the other English
04:36:29 <zzo38> imode: PostScript doesn't have something like Forth's "immediate words", although it does have that you can write // to immediately replace a name by what it refers to rather than waiting for being executed
04:37:06 -!- spirgel has quit (Ping timeout: 240 seconds).
04:38:21 <zzo38> However, procedures are just executable arrays and can be manipulated like any other arrays, so you can do what you want with them
04:39:44 <imode> fair.
04:47:35 <zzo38> You can probably use it as a DSL.
04:48:40 -!- spirgel has joined.
04:52:53 -!- spirgel has quit (Ping timeout: 244 seconds).
05:06:13 -!- spirgel has joined.
05:10:18 -!- spirgel has quit (Ping timeout: 240 seconds).
05:35:09 -!- spirgel has joined.
05:39:56 -!- spirgel has quit (Ping timeout: 268 seconds).
05:52:41 -!- spirgel has joined.
06:11:06 -!- spirgel has quit (Ping timeout: 264 seconds).
06:13:03 -!- spirgel has joined.
06:14:06 <esolangs> [[Special:Log/newusers]] create * Rphii * New user account
06:26:50 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=84619&oldid=84603 * Rphii * (+77) ~~~~
06:27:22 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=84620&oldid=84619 * Rphii * (+74) /* Introductions */
06:28:45 -!- tromp has joined.
06:30:02 -!- salpynx has quit (Quit: Connection closed).
06:30:22 <esolangs> [[User:Rphii]] N https://esolangs.org/w/index.php?oldid=84621 * Rphii * (+64) First steps
06:44:02 <esolangs> [[Tiltedc]] N https://esolangs.org/w/index.php?oldid=84622 * Rphii * (+272) Created
06:44:05 -!- Trieste has quit (Ping timeout: 252 seconds).
06:44:33 <esolangs> [[Language list]] https://esolangs.org/w/index.php?diff=84623&oldid=84608 * Rphii * (+14) /* Non-alphabetic */
06:45:37 -!- Trieste has joined.
06:47:38 <esolangs> [[Language list]] M https://esolangs.org/w/index.php?diff=84624&oldid=84623 * Rphii * (+14) /* Tiltedc */
06:57:37 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
07:08:10 -!- riv has joined.
07:14:08 -!- Guest86 has quit (Ping timeout: 250 seconds).
07:27:52 -!- spirgel has quit.
07:45:34 -!- spruit11 has joined.
07:50:06 -!- spruit11 has quit (Ping timeout: 244 seconds).
07:51:03 -!- riv has quit (Quit: Leaving).
08:06:53 -!- hendursa1 has joined.
08:10:10 -!- hendursaga has quit (Ping timeout: 252 seconds).
08:14:57 -!- Sgeo has quit (Read error: Connection reset by peer).
08:19:15 -!- spruit11 has joined.
08:24:18 -!- spruit11 has quit (Ping timeout: 264 seconds).
08:41:14 -!- Guest86 has joined.
08:46:42 -!- Trieste has quit (Ping timeout: 240 seconds).
08:48:45 -!- Trieste has joined.
08:50:53 -!- tromp has joined.
08:51:20 <esolangs> [[Language list]] M https://esolangs.org/w/index.php?diff=84625&oldid=84624 * VilgotanL * (-14) remove duplicate
08:52:19 -!- spruit11 has joined.
08:57:11 -!- spruit11 has quit (Ping timeout: 252 seconds).
08:58:04 <esolangs> [[Tiltedc]] https://esolangs.org/w/index.php?diff=84626&oldid=84622 * Rphii * (+8) added return value for cleaner C code
09:10:42 -!- Guest86 has quit (Ping timeout: 250 seconds).
09:39:07 -!- imode has quit (Ping timeout: 244 seconds).
09:51:46 -!- spruit11 has joined.
09:54:09 <esolangs> [[Tiltedc]] https://esolangs.org/w/index.php?diff=84627&oldid=84626 * Rphii * (+34) adjusted description
11:18:01 -!- spruit11 has quit (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.).
11:21:01 -!- fizzie[m] has joined.
11:27:54 -!- spruit11 has joined.
11:28:59 <esolangs> [[Esolang:Community portal]] M https://esolangs.org/w/index.php?diff=84628&oldid=84571 * Fizzie * (-65) /* IRC */ Make Matrix note less tentative, since it apparently works.
11:29:07 <esolangs> [[-]] N https://esolangs.org/w/index.php?oldid=84629 * Grs * (+480) Created page with "- is a joke esoteric programming language by ~~~. The language will deny everything the programmer tells it to do, except... == Command == {| class="wikitable" |+ Command |- !..."
11:30:23 <esolangs> [[User:Grs]] https://esolangs.org/w/index.php?diff=84630&oldid=84548 * Grs * (+7)
11:48:39 -!- Trieste has quit (Ping timeout: 272 seconds).
11:51:41 -!- Trieste has joined.
11:59:11 -!- tech_exorcist has joined.
12:14:57 -!- delta23 has quit (Quit: Leaving).
12:21:16 <esolangs> [[Column]] M https://esolangs.org/w/index.php?diff=84631&oldid=84427 * PythonshellDebugwindow * (+28) /* Interpreter */ See also
12:26:18 <jedb> Corbin: have you ever heard of Joy?
12:27:19 * jedb makes a note to ask imode too when he gets back online
12:32:10 <esolangs> [[Tiltedc]] M https://esolangs.org/w/index.php?diff=84632&oldid=84627 * PythonshellDebugwindow * (+163) See also/ext. res.
12:35:36 <esolangs> [[-]] M https://esolangs.org/w/index.php?diff=84633&oldid=84629 * PythonshellDebugwindow * (+241) /* Implementation (there is none yet) */ Implement cats
12:37:06 <fizzie[m]> Heh, apparently in-order delivery of messages is still a hard problem: https://zem.fi/tmp/order.png
12:37:07 <Corbin> Yeah. Also Cat and Kitten. Cool ideas for sure.
12:39:09 <esolangs> [[Python is Magic]] M https://esolangs.org/w/index.php?diff=84634&oldid=84454 * PythonshellDebugwindow * (+48) /* Implementation */ Cats
12:42:10 -!- arseniiv has joined.
12:42:31 -!- spruit11 has quit (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.).
12:44:28 -!- wib_jonas has joined.
12:45:55 <jedb> just wanted to ask because that immediately comes to mind when you see some people talking about the gap between Forth and Lisp
13:17:05 <wib_jonas> I'm logreading. sorry, but "I am working since 2017 to some sort of esoteric language, I was wondering if this is not off topic" makes me laugh
13:17:34 <wib_jonas> I guess the topic now says "esoteric programming proselytization, propagation, and pronunciation" so it's not that obvious
13:19:07 * jedb tends to be more interested in obscure research languages rather than outright esoterica
13:19:38 <jedb> except for TURKEY BOMB
13:19:43 <jedb> that one will always remain my favourite
13:26:50 <wib_jonas> anyway, Guest86 who is working on https://github.com/gioblu/BIPLAN : yes, this is on topic enough on this channel that you can definitely ask about it on this channel. \
13:28:27 <wib_jonas> I don't care too much about programming on devices with little RAM, but from what I understand there's a distinction that you have to make here. BASIC and Forth was used on old personal computers (and later programmable calculators) for when you want to write the program directly on that device, you don't have a different computer with more RAM to
13:28:28 <wib_jonas> compile on. they make more sense for that, though even then some parts of BASIC are outdated.
13:29:12 <wib_jonas> you seem to want a language that you compile to a bytecode on a separate computer with more RAM. that's a good thing, and it makes sense that you want something better than BASIC for that.
13:30:30 <wib_jonas> in such a language, you can afford real named local variables, long identifiers for every label, subroutine, variable, since the names don't end up in the RAM, a structured syntax that is parsed on the computer and possibly some jumps turned to jumps with byte offsets embedded in the byte code, etc.
13:30:43 -!- Guest86 has joined.
13:30:51 <wib_jonas> I don't know what existing tools are available for this, again because I don't work on such computers, and everything has a lot of RAM these days.
13:31:35 <Guest86> which computers?
13:31:39 <wib_jonas> I just have the one complaint that "I really miss a computer that does not need minutes to boot" is an unfair comment if you are compiling the code on a separate computer. how quickly can you boot and transfer the compiled program to your small device?
13:32:01 <wib_jonas> Guest86: on the computers with 16K or 64K RAM, the ones you want to target here. I don't work on those.
13:33:22 <wib_jonas> well, except for the part where I would still like to find out how the heck Game Boy games implement animated tiles, because from what I know the hardware isn't capable of that, e.g. is there special address translation logic for it on the cart or something, but so far I haven't found the right person to ask this.
13:34:27 <Guest86> wib_jonas I do not compile the program on a separate computer, the whole point of BIPLAN is to have a virtual machine able to run in small computers, that uses a modern programming language
13:34:44 <wib_jonas> I have written a few programs on a BASIC-programmable calculator with exactly 2K RAM, but that was like 20 years ago.
13:34:49 <Guest86> both compiler and interpreter can fit in the same arduino micrococontroller
13:35:10 <wib_jonas> Guest86: oh? the compiler is on the arduino and you enter the source code form there? ok, then I want to see the details
13:35:17 <Guest86> :)
13:35:38 <Guest86> you saw the video I linked?
13:35:53 <wib_jonas> I'd prefer to read than to watch video, but I might look at it later
13:36:04 <Guest86> https://www.youtube.com/watch?v=yD2hqngGI6U
13:36:15 <Guest86> this is my preferable target, with the addition of networking
13:36:51 <Guest86> BIPLAN runs also on linux because I did it to be portable, development would have been a real PITA on the arduino
13:37:34 <wib_jonas> also runs on linux => sure, you can port it to a computer with much more RAM
13:37:43 <Guest86> see also what rob kai does with simple arduino boards and tinybasic: https://www.youtube.com/watch?v=C66ceBc0ne8
13:38:15 <Guest86> imagine that thing running BIPLAN, which by far more modern, with a simple editor like nano
13:38:46 <wib_jonas> that "SMART Response XE" calculator, how much RAM does it have?
13:39:42 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
13:40:16 <Guest86> ATmega128RFA1 processor with 128k RAM, 4k EEPROM, and external 1Mbit memory chip.
13:40:33 <Guest86> you can imagine what you can do with that? that is very very cool
13:41:20 <wib_jonas> 128K of ram. that's much better.
13:41:33 <wib_jonas> and an external 1M memory chip, much better
13:41:47 <Guest86> I could write the compiler in BIPLAN and store it in the memory chip
13:42:18 <Guest86> and there would be a lot of space for user defined apps/programs
13:42:47 <Guest86> that could also be just BIPLAN
13:42:49 <wib_jonas> sure, but it's 1 megabyte. I have run Windows and compilers on 1 megabyte. that's much easier.
13:43:00 <wib_jonas> it's a bit tight for all that, I admit
13:43:08 <Guest86> no that's mega BITS sadly
13:43:17 <wib_jonas> oh, 1 megabit? then no
13:43:36 <wib_jonas> that's only 128 kilobytes
13:43:48 <wib_jonas> so only as much as the built-in memory
13:44:18 <wib_jonas> well yes, it makes sense if you want to build some kind of bytecode compiler for conveniently programming that
13:44:40 <wib_jonas> especially since that device has a keyboard that looks nice (I can't tell how usable it is) and enough keys
13:45:12 <Guest86> it also has 128k of internal flash memory where I could store the compiler and the interpreter
13:46:57 <Guest86> so all in all there is 128k of flash and 128k of external memory chip
13:47:16 <Guest86> BIPLAN already gets translated in byte-code or p-code
13:47:31 -!- Sgeo has joined.
13:47:33 <Guest86> so, the compiled program does not occupy a lot of space, for sure better than plain basic
13:47:48 -!- Sgeo|web has joined.
13:47:51 -!- Sgeo|web has left.
13:48:34 <Guest86> for now BIPLAN looks around 2.5 times slower than python and an order of magnitude faster than tinybasic
13:49:37 <Guest86> I agree about the keyboard.
13:50:18 <Guest86> I would be happy to be able to compute stuff with my own language in an air-gapped machine I can more or less fully understand.
13:52:35 <wib_jonas> these small devices are cool, I just can't keep up the enthusiasm when I have a compact camera with hundreds of megabytes of RAM in it (admittedly it also costs about as many euros as it has megabytes of RAM), a computer with 32 gigabytes of RAM at home (that one was proportionally cheaper), and a computer with 16 gigabytes of RAM at work.
13:53:34 <wib_jonas> Guest86: "does not occupy a lot of space" => but can you then debug and edit that compiled program even if you don't have the source form?
13:54:06 <wib_jonas> because if you do have to keep the source form, then there's not much point for the space reduction, or you can't claim that it's programmed on that device, one of that.
13:54:25 <Guest86> I think the best way to do that is to keep both versions
13:54:29 <wib_jonas> but you can have space reductions if you can compress it in a way that still lets you edit, like storing each identifier name only once and a special editor
13:54:39 <wib_jonas> (also compressing all the keywords obviously)
13:54:46 <Guest86> that is a better idea I agree
13:54:57 <wib_jonas> if you keep both versions, that's fine if you have enough RAM for that, but it doesn't really save you space.
13:55:17 <wib_jonas> compiling can still makes sense if you can run the program easier with precomputed jumps, admittedly
13:55:20 <Guest86> the compilation process is mostly done to gain speed, more than space
13:55:26 <wib_jonas> and precomputed lexical variable addresses
13:55:28 <wib_jonas> yes
13:55:38 <Guest86> but yes, I agree with you
13:55:48 <Guest86> the source does not need to be in ram
13:55:54 <Guest86> the bytecode yes
13:56:16 <Guest86> I mean, when the interpreter reads the byte-code, it must be in ram when the source is compiled for sure
13:56:26 <wib_jonas> you could perhaps even do both, with a specialized source editor, it might still make sense if you only have 128KB or twice 128KB of ram
13:56:47 <Guest86> I think it may have sense I agree
13:57:13 <Guest86> for now I do not see many computers of this sort with the features I described
13:57:21 <Guest86> I would have bought it :)
13:58:42 <Guest86> what you describe looks like a sort of de-compiler?
13:59:48 <Guest86> then user defined apps (calculator, games, messanging, ecc.) could be recalled by the buttons around the screen,
14:00:12 <Guest86> or by a keyword
14:00:31 <Guest86> those could be themself be written in BIPLAN in the same machine that will run it
14:00:42 <Guest86> that's the whole point :)
14:01:23 <Guest86> I teach at youngsters how to code, a thing of this sort would make them interested I think.
14:02:19 <Guest86> also, being the byte-code just an ascii string, it will be easy to transmit/share that even if the machines are very different
14:03:02 <Guest86> and also they could just ready the byte-code as a text file, without additional tooling, that was very handy for me while making BIPLAN
14:03:34 <wib_jonas> Guest86: not quite a decompiler. at least I don't think it's called a decompiler but you can call it that. the difference is that you'd deliberately make the compiled form usable for re-editing, eg. you would store the name of every local variable name (possibly compressed, and only once)
14:03:55 <Guest86> yes, that is a very good idea
14:04:17 <wib_jonas> "I teach at youngsters how to code" => that's another different scope, you might want a simpler but not that good system for that, and it can be worth to waste RAM for it
14:04:41 <wib_jonas> the youngsters these days can learn coding on a computer with gigabyte sized RAM, even if the program they write could fit on a simpler system
14:04:55 <Guest86> I have been able to spark some interest in them for VMs I also have made BIPLAN with them in some lessons
14:05:37 <Guest86> in my opinion removing complexity under the carpet and show them a very radical and simple construct makes them more aware of what effectively they are looking at
14:06:07 <fizzie[m]> IIRC, TI-BASIC (which definitely won't win any performance awards) gets stored in a mildly tokenized but still editable form by the built-in editor. I think that's pretty common for BASIC implementations?
14:06:36 <Guest86> ciao fizzie, yes, I think at the time was called tokenization if I am not mistaken
14:07:08 <fizzie[m]> And fungot's brainfuck interpreter generates an intermediate form with +-<> run-length-encoded and [] jump targets pre-calculated, which the ^show command then reverses.
14:07:09 <fungot> fizzie[m]: uh. except that the bf functions aren't in memory. a list of categories to categorize each language ( sorry for only tangentially being on-topic) ' ( for-syntax fnord)) fnord))
14:08:14 <Guest86> more or less in BIPLAN happens more or less the same:
14:08:18 <wib_jonas> ... I don't think fungot's bf interpreter would be the best example for how to use a small device with a keyboard to write cool programs on it, or to teach programming to youngsters, but maybe I'm closed minded and traditional
14:08:18 <fungot> wib_jonas: please read thi. it's incredible what can be done,,,and everything else is just being lame and scheme48 got it right
14:08:26 <tech_exorcist> `coins
14:08:33 <HackEso> thrcoin befcerecoin heracoin orcystacoin gemorseyecoin entumcoin adecoin ferricoin cycliccoin myxosomniacoin blakkarnajord!cpucoin cramocoin heatecoin gracoin lighflcoin karcoin troncoin rceceivecoin luidcoin yamcoin
14:08:46 <Guest86> print fibonacci(40)
14:08:46 <Guest86> stop
14:08:47 <Guest86> function fibonacci($n)
14:08:47 <Guest86> $a = 0
14:08:48 <Guest86> $b = 1
14:08:48 <Guest86> $next = 0
14:08:49 <Guest86> for $r = 0 to $n - 1
14:08:49 <Guest86> $a = $b
14:08:50 <Guest86> $b = $next
14:08:50 <Guest86> $next = $a + $b
14:08:51 <Guest86> next
14:08:51 <Guest86> return $next
14:09:03 <Guest86> compiled in:
14:09:05 <Guest86> p~#(40)xf#($$)$%0$&1$#0@$'0,$$-1$%$&$&$#$#$%+$&nr$#
14:09:47 <wib_jonas> fungоt: no, it's not incredible what can be done, and nobody does anything interesting with *your* brainfuck interpreter. the befunge interpreter that you run on might be a better example.
14:10:25 <wib_jonas> Geust86: yes, we can read the example from https://github.com/gioblu/BIPLAN , please don't paste the whole thing here
14:10:48 <Guest86> sorry
14:10:51 <wib_jonas> unless perhaps you run an interpreter bot on IRC, in which case still please avoid pasting many line long code
14:11:34 <Guest86> are the rules of the chat available somewhere so I can avoid breaking some again ?
14:12:51 <fizzie[m]> As for small devices and teaching youngsters, there was that BBC micro:bit project as a modern spin of that. But I think as far as languages go it was "by default" just MicroPython, boringly enough.
14:13:41 <Guest86> my students love BASIC, but hate python, they even prefer to that C or javascript
14:13:43 <Guest86> O_O
14:13:45 <wib_jonas> rules for IRC? not really, it's all a silly traditional community that doesn't tell about its own rules. the only definite rule is that if you make full logs of a channel that you want to publish, you have to advertise that in advance. which we do advertise on this channel, in the topic.
14:14:15 <nakilon> 17:13:41 <Guest86> my students love BASIC, but hate python
14:14:17 <nakilon> good students
14:14:25 <wib_jonas> Guest86: do they hate real python or the micropython thing?
14:14:32 <Guest86> real python
14:14:38 <Guest86> I have not used micropython still
14:14:41 <Guest86> to teach them
14:14:54 <nakilon> don't teach them bad languages
14:15:03 <nakilon> I see they are already willing to learn languages
14:15:10 <nakilon> let them chose
14:15:22 <Guest86> they go mad because of the many versions of the same language, and struggle finding the right docs
14:15:33 <Guest86> about python
14:15:39 <wib_jonas> well I for one want my user-defined structured data, and a library function to sort data on any key, and the BASICs that I occasionally program make both of those really hard
14:15:59 <nakilon> even finding specific version docs won'thelp them, since those docs are awful
14:16:00 <jedb> Guest86: show them all the many versions of BASIC
14:16:03 -!- tromp has joined.
14:16:05 <wib_jonas> even pushing data into an array looks ugly in the BASICs that I use
14:16:26 <jedb> Guest86: instil in them an early appreciation for language standards!
14:16:28 <wib_jonas> "struggle finding the right docs about python" => can they read English?
14:16:39 <Guest86> I agree BASIC is not the right way to teach the how to think algorithmically, considering the presence of line numbers and vast use of gotos
14:16:53 <wib_jonas> Guest86: we have done away with the line numbers long ago
14:17:08 <wib_jonas> nor do we have to use gotos, we have proper structured while and if blocks now
14:17:10 <nakilon> doesn't basic have functions?
14:17:12 <wib_jonas> we don't live in the nineties
14:17:16 <wib_jonas> functions too, yes
14:17:17 <jedb> nothing wrong with a well placed goto
14:17:30 <nakilon> true too
14:17:36 <wib_jonas> it's structured data that basic still haven't really learned how to handle
14:17:59 <wib_jonas> if your students have a BASIC where it's easy to sort an array of pairs of numbers, then it's fine that they love it
14:18:09 <wib_jonas> there are BASIC dialects that are sane enough for that
14:18:20 <Guest86> yes there are functions, but for many of them goto is a simpler concept to understand, and they end up always using it, and I must fight it in most cases
14:18:22 <wib_jonas> though I'd prefer if pushing into an array was also easy enough
14:19:15 <wib_jonas> Guest86: yes, I have an example task that tries to teach you to use functions. it doesn't work, students don't realize that it's supposed to teach that. I should try to be less subtle.
14:19:16 <Guest86> I end up designing with them how array work in BIPLAN, they for sure learned how it works, they participated to the design
14:19:21 <nakilon> let them learn
14:19:57 <nakilon> by writing code in whatever style/way/instructions they want to
14:20:14 <nakilon> until they see in practice how they all compare to each other
14:20:20 <wib_jonas> I might tell you some of those tasks just to see what you think of them
14:20:21 <Guest86> yes, I agree that is fundamental, although many of them are super disorganized and forget syntax heheh
14:20:38 <wib_jonas> Guest86: forgetting syntax is not a problem, that's what computers are for, remembering stupid stuff
14:20:42 <wib_jonas> you learn it if you use it enough
14:20:54 <Guest86> yes, that is for sure true
14:21:19 <wib_jonas> as long as you have a sane language where it's not easy to get a silently wrong program or misleading error message if you think the syntax is slightly different from what it actually is
14:21:28 <Guest86> I must say, they are smart, they understood closures in one lesson (using javascript)
14:22:16 <Guest86> the course is almost finished, we are now doing closures in the BIPLAN interpreter implementation
14:22:42 <wib_jonas> I am traditional, I don't think closures are all that important in the practical sense. I do use them occasionally, but rarely in a way where they outlive the scope of their outvalues.
14:23:03 <Guest86> they are working on enabling the interpreter to find a function definition and jump until the call is found... although they still have not seen they need a end function symbol to achieve that, I hope they will notice it before running the impl
14:24:37 <Guest86> I agree with you about closures, I thought it could have been a good way to let them work on their internal abstract thought engine
14:26:06 <Guest86> I come from development, but really enjoy to teach, this is the second year, by far the best job I did for now, very refreshing
14:29:35 <wib_jonas> how young are the youngsters?
14:30:04 <wib_jonas> wait, have I already asked that?
14:30:08 <Guest86> 14-18
14:30:42 <wib_jonas> no, I asked if they can read English instead
14:31:05 <wib_jonas> thanks
14:31:10 <Guest86> obviously who is 14 reads english less good
14:32:14 <Guest86> BASIC works well for classes of very young people, javascript and c are liked by the older ones
14:32:46 <Guest86> none of them like python, I have tried lisp with the oldest without any success
14:33:16 <wib_jonas> you teach C to 18 year olds? isn't that considered a bad idea?
14:33:25 <Guest86> why?
14:34:37 <wib_jonas> well I already mentioned the array sort thing, but also it's useful to have automatic checks for out of bound indexes. which, by the way, javascript is also terrible at, but at least it just silently returns the wrong thing instead of possibly overwriting memory that doesn't belong to the array in the worst case.
14:35:40 <Guest86> I insist a lot on the bounds' consistency of their algorithms, I hope I will spare them the time I lost myself
14:36:15 <wib_jonas> python is sort of better, though it's also not perfect in this respect, because it will still silently tell me the wrong value for small negative indexes
14:36:21 <Guest86> some of them are pretty good at c, one of the students is already working part-time using c in the afternoon, I must say, that is nice to see
14:36:23 <wib_jonas> why can't languages still get this right?
14:36:54 <Guest86> BIPLAN throws an error if you go out of bound hehe
14:37:42 <Guest86> I agree with you, being that just an experiment is crazy to see that stuff in production we use daily still does not do so
14:37:56 <wib_jonas> Guest86: ok, but again the sort thing. most programs I write do either a lot of array sorts or dictionary lookup. you can reduce some of those, but if you don't have a convenient way neither for sorting nor for dictionary lookups (and yes, I can do both in C if I really want to, but it's not so easy as in a high level language) then it does suffer
14:37:56 <wib_jonas> for an educational language.
14:38:02 <nakilon> here in Russia current generation is raised by people who lived in a country that was leading in half of technology fields, had own computers, etc. not all people needed to know Englsh because our own school was good enough; but after the collapse the free education is gone, the culture of respecting knowledge and science is gone, people have no
14:38:03 <nakilon> way to keep up with new techonologies on their own but the old tradition that "knowing only Russian language is enough" remains -- people fool themselves
14:39:16 <wib_jonas> naklion: well, the computer designs were cloned from the West and so lagged behind, so I don't think "leading in half of the technology fields" is that appropriate, but sure
14:39:25 <Guest86> wib_jonas I may see what you mean, you miss in BIPLAN the concept of a list or the iterators python exposes?
14:39:38 <Guest86> nakilon, I have a couple of Delta CA
14:40:05 <Guest86> those are by far the best z80 based computers I have ever used.
14:40:33 <Guest86> the keyboard and the editor are pure sci-fi if compared to the spectrum or the msx
14:40:36 <nakilon> b_jonas we even had ternary computer though
14:41:28 <wib_jonas> Guest86: heck no, not iterators in particular. I just want an easy way to create a new array, push new items into an array, possibly sort the array on the keys of my choice and possibly backwards on some keys, and then look up items by index or iterate on items or search by sorted key, and all this if the values can be structured with multiple
14:41:29 <wib_jonas> fields, some of which can be varible length arrays or strings.
14:41:49 <Guest86> incredible what you were able to do, it must have helped to be on the other side, reverse engineering must have been a daily job in many sectors of IT at the time of gorbachev
14:42:40 <wib_jonas> I can do all of that in C if I really want to, but I don't want to spend my time on that, so I use languages that make this easy; and most of the time I write code where the execution time isn't critical, so I can live with less efficient design, but in the few cases when I know I need my code to run fast, I do also know how to optimize it
14:43:37 <wib_jonas> and if I do an out of bounds access, I want my program to die with an error message with source code location
14:43:42 <wib_jonas> and then I fix my code
14:43:58 <wib_jonas> same on all the assertion checks that I sprinkle my code with
14:44:27 <wib_jonas> half of my code is checking the other half because that helps me develop programs better, I don't have to handle all cases that might be in the data, the rest can give an error and then I can write the code for the cases that actually occur in my data
14:44:30 <nakilon> students have to implement this stuff at least once to then use some higher languages of their choise but knowing what's under the hood
14:44:31 <wib_jonas> occurr
14:44:55 <wib_jonas> no, "occur "was right
14:45:00 <wib_jonas> drat
14:45:21 <wib_jonas> it's "occur" but "occurrence"
14:45:38 <Guest86> BIPLAN is all statically defined, strings, variables and arrays are just very big indexed registers
14:45:53 <wib_jonas> nakilon: no, I don't see the point of students starting with implementing the low level stuff like that. they can learn how it's done later.
14:45:55 <Guest86> very difficult to implement the first part of your suggestion
14:46:06 <Guest86> I don't agree jonas
14:46:10 <nakilon> they won't learn later
14:46:12 <Guest86> I have a friend in SAP
14:46:21 <Guest86> yesterday was here, I showed him BIPLAN
14:46:28 <wib_jonas> nakilon: most of them don't *have* to learn later, most won't have a work where they write programs
14:46:34 <nakilon> they'll keep living with flawed understanding of how computers work and will refuse to learn the truth, it's psychological
14:46:35 <Guest86> he was not able to visualize how C code could execute BIPLAN and what was doing what
14:46:47 <Guest86> my students are able to visualize that, it took some lessons, but now they are able
14:46:47 <wib_jonas> we teach the basics to lots of people because we don't know which ones of them will want to program, and they don't know yet either
14:47:43 <Guest86> I mean, they know that the python keyword in the console is a c program that does the same we did with BIPLAN, they know about the python bytecode
14:47:58 <Guest86> my friend that works in the industry doesn't, and uses python every day
14:47:59 <nakilon> if someone won't code in future then it would be nothing bad in teaching them low level anyway
14:48:08 <wib_jonas> nakilon: what I do want to teach, to all the students, even the ones who won't end up programming, is to understand what a computer can do and what it can't do or can perhaps do but it's hard, in case they might want to ask someone else to program something, so they have an idea for whether they're asking easy or hard things
14:48:37 <wib_jonas> so that they can ask early to automate the things that they spend lots of work on doing manually even though they would be easy to automate
14:48:43 <Guest86> for sure thsat is important wib, I agree
14:48:48 <wib_jonas> most people who work with computers don't seem to understand that
14:48:53 <nakilon> you won't understand what computers can and can't do, and what approaches are effectiev or not, if you don't teach the low level
14:48:59 <wib_jonas> and that's why they can't help me in my work, where I'm the guy who automates things
14:49:13 <wib_jonas> so I end up having to ask them what they are doing and tell them which parts would be how easy or hard to automate
14:49:19 <wib_jonas> and then automate the easy parts
14:49:22 <wib_jonas> it saves time
14:49:55 <wib_jonas> nakilon: that might depend on what you mean by "low level".
14:50:16 <Guest86> in any case BIPLAN is just a caricature of what python does, it is just a couple of thousands lines, compiler and interpreter
14:50:32 <nakilon> managers who were not taught how computers work today are throwing gygabytes of RAM and a block of 4 videocards to just solve a single quadratic equation that can be solved within a nanosecond
14:50:51 <wib_jonas> actually implementing a sorting algorithm or lookup in a sorted list is not a useful thing to have these people spend their time on; making them understand that you can search quickly in a telephone book or find matching names or missing names between two sorted telephone books is useful
14:50:59 <Guest86> but I think is for sure educational, I have tried to show them inside cpython, they asked, but it was impossible to exctract much from looking inside, their attention span is small
14:51:46 <wib_jonas> nakilon: "throwing gigabytes of RAM" => those are the people who do write programs. that's an important challenge too, but not really my target here.
14:51:54 <Guest86> for sure it is scary to see how slow is python, I mean, how can BIPLAN be in the same order of magnitude?
14:53:04 <Guest86> I mean I call atoi on numeric values, they are written in as strings, how can that be approaching python performance?
14:53:39 -!- spruit11 has joined.
14:53:50 <nakilon> "language runtime speed "comparison is what matters the least
14:54:14 <Guest86> nakilon what you mean?
14:54:36 <nakilon> with minimal edits you can reimplement almost any language in any another lagnauge changing the perfomance by magnitudes
14:54:44 <Guest86> that must be a term to estimate the performance envelope
14:54:59 <nakilon> programmer shouldn't care about his language speed
14:55:03 <Guest86> I am implementing BIPLAN in c, and comparing in to the C python interpreter
14:55:34 <nakilon> the only speed that matters is how quickly he can get things done
14:55:57 <Guest86> you mean the coder who uses the language? heheh
14:56:10 <nakilon> and tehre he struggles with shitty docs, shitty syntaxes, shity stdlib, shitty sommunity, etc.
14:57:33 <nakilon> also you implement pieces of your application in different langauges
14:58:13 <Guest86> wib_jonas I understand your point, that for sure is a big part of the role of a teacher. And I agree the teacher must not fall in love with implementation detail or they will get bored
14:58:37 <Guest86> you mean that the compiler is c++ and the interpreter is c?
14:59:59 -!- imode has joined.
15:02:21 -!- immibis has quit (Read error: Connection reset by peer).
15:02:43 -!- immibis_ has joined.
15:03:09 <nakilon> Guest86 if that's a question on my last line then no, I mean the whole product of any kind usually is made of pieces written in different languages
15:03:24 <Guest86> ah sorry
15:03:55 <Guest86> for sure the industry is a very complex ecosystem of different languages and implementations
15:05:31 <Guest86> I read the story of this chat and the whole recent mess, it looks to have no sense, very strange.
15:52:51 <wib_jonas> Guest86: yes, welcome to #esolangs
15:53:06 <wib_jonas> `welcome Guest86
15:53:08 <HackEso> Guest86: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: <https://esolangs.org/>. (For the other kind of esoterica, try #esoteric on EFnet or DALnet.)
15:53:29 <wib_jonas> Guest86: also you might want to choose a more expressive nick than Guest86.
15:53:48 <wib_jonas> You can use the /nick command to change your nick, or choose a nick when you start the webchat client
15:55:11 -!- wib_jonas has quit (Quit: Client closed).
16:14:10 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
16:20:36 -!- tromp has joined.
16:28:45 <esolangs> [[User:Majorcob]] https://esolangs.org/w/index.php?diff=84635&oldid=84595 * Majorcob * (+7) /* Truth-machine */
16:28:53 <esolangs> [[School]] https://esolangs.org/w/index.php?diff=84636&oldid=84610 * AceKiron * (+219)
16:32:30 -!- Guest86 has changed nick to [O_O].
16:32:51 <[O_O]> this really reminds me my childwood
16:33:13 <[O_O]> when people was fighting to find the weirdest nick on iirc
16:35:23 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
16:52:06 <fizzie[m]> These newfangled networks with all their fancy "services" make IRC wars completely different though. It used to be all about channel takeovers, and expending a lot of effort trying to get clients and/or bots on as many servers as possible, at least where I was.
16:52:56 <esolangs> [[User:ZippyMagician/Ideas]] M https://esolangs.org/w/index.php?diff=84637&oldid=76438 * ZippyMagician * (+68) Change ideas
16:57:57 <esolangs> [[Language list]] https://esolangs.org/w/index.php?diff=84638&oldid=84625 * ZippyMagician * (+53) Add two esolangs I forgot to add before
17:00:31 <esolangs> [[Arsm]] M https://esolangs.org/w/index.php?diff=84639&oldid=80680 * PythonshellDebugwindow * (+13) Lower
17:01:21 <esolangs> [[Arsm]] M https://esolangs.org/w/index.php?diff=84640&oldid=84639 * PythonshellDebugwindow * (-2) Fix name
17:03:29 -!- tromp has joined.
17:04:15 <[O_O]> one question
17:04:27 <[O_O]> is this implementation approach of the function call in an interpreter sane?
17:04:28 <[O_O]> https://github.com/gioblu/BIPLAN/blob/master/src/BIPLAN.c#L514
17:05:19 <[O_O]> I mean, I recursively call bip_expression that may be another function, so the overhead that would have gone in the vm stack (which BIPLAN does not have) is pushed on the stack of the real machine
17:06:20 <[O_O]> I do not see a better way to do it for now without adding a lot of complexity
17:13:46 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
17:17:38 -!- Guest20 has joined.
17:18:19 -!- Guest20 has quit (Client Quit).
17:20:37 <b_jonas> fizzie[m]: yeah, right now I'm trying to figure out how you're even supposed to give anyone channel ops without a race condition if there are no service. do you have to set a ban on their nick!user@host, then wait until that propagates to every server, then give them channel ops with a full nick!user@host, then remove the ban?
17:21:39 <b_jonas> or are channel ops only supposed to connect from IP addresses that they use alone or control the identd so that nobody else can fake their hostmask? but I don't think the serviceless IRC servers care about their identd.
17:24:42 -!- immibis_ has quit (Remote host closed the connection).
17:25:07 -!- immibis_ has joined.
17:29:43 <esolangs> [[Qoibl]] M https://esolangs.org/w/index.php?diff=84641&oldid=84563 * Toxinite * (+90)
17:52:06 -!- tromp has joined.
18:02:07 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
18:06:20 -!- Guest5 has joined.
18:07:56 -!- Guest5 has quit (Client Quit).
18:13:24 <fizzie[m]> b_jonas: IME, I feel mostly that was dealt with by per-channel bots that handled giving ops in response to a password (sent via private messages).
18:14:15 <fizzie[m]> IRCnet does do the "~ in username means no identd" thing.
18:14:58 <fizzie[m]> And a lot of people did connect using Unix shell accounts hosted by either an ISP or a university, where spoofing identd would have been tricky.
18:16:28 <fizzie[m]> I seem to recall I had a runaway ircII script temporarily DoS the shell server of one of the smaller Finnish dialup ISPs, because they didn't really have any enforced resource limits on it.
18:18:37 -!- tromp has joined.
18:30:27 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
18:31:43 <esolangs> [[FolderCode]] M https://esolangs.org/w/index.php?diff=84642&oldid=84428 * Dominicentek * (+18)
18:32:08 <esolangs> [[Column]] M https://esolangs.org/w/index.php?diff=84643&oldid=84631 * Dominicentek * (+18)
18:33:19 <esolangs> [[School]] https://esolangs.org/w/index.php?diff=84644&oldid=84636 * AceKiron * (-46) /* Functionality */
18:33:48 -!- tromp has joined.
18:34:48 <esolangs> [[Special:Log/newusers]] create * CodyNinja1 * New user account
18:35:21 -!- tromp has quit (Client Quit).
18:36:11 <b_jonas> fizzie[m]: yes, but how do the ops give channel op to anyone withotu a face condition?
18:36:30 <b_jonas> if there is an identd for the whole public IP, then yes, then that works
18:37:04 <b_jonas> but I don't think that eg. my employer's NAT has an identd... I have never really tested it, I admit
18:39:12 <esolangs> [[School]] https://esolangs.org/w/index.php?diff=84645&oldid=84644 * AceKiron * (+526) /* Functionality */
18:39:38 <b_jonas> and yes, I know NATs weren't so common back when IRC was invented, and nobody used cryptography etc
18:43:52 <esolangs> [[School]] https://esolangs.org/w/index.php?diff=84646&oldid=84645 * AceKiron * (+110) /* Functionality */
18:43:56 <int-e> good old IoT... Internet of Trust
18:44:23 <int-e> `grWp freenode
18:44:25 <HackEso> advertisement:Advertisement starts: have you heard about this hip and froopy 'net place called #esoteric? It is on freenode. Brought to you by The Board of Timeskewed Advertiesements. \ e:e is a freenode admin. e is not known to be an Agora player. \ freenode:The Realm of Freenode is our homeland. The Chännel dwells in it since... Uhm... Quite a few years ago?
18:45:19 <int-e> somehow, that entry on `e` is again true...
18:51:17 <int-e> `learn Libera has always been our homeland. The Chännel has been dwelling in it since the beginning of time. Any rumors about another network called "freenode" are compleetely bogus.
18:51:21 <HackEso> Relearned 'libera': Libera has always been our homeland. The Chännel has been dwelling in it since the beginning of time. Any rumors about another network called "freenode" are compleetely bogus.
18:52:21 <int-e> `slwd freenode//s=is=used to be=;s=dwells=dwelled=
18:52:24 <HackEso> freenode//The Realm of Freenode used to be our homeland. The Chännel dwelled in it since... Uhm... Quite a few years ago?
18:53:00 <int-e> `rm ../wisdom/e
18:53:02 <HackEso> No output.
18:53:34 <int-e> any guess whether "Advertiesements" is an intentional typo?
18:57:23 -!- brainfunnel has joined.
19:09:40 <fizzie[m]> I think identd in general used to be much more prevalent. At least the shell servers I had accounts on were running it.
19:10:35 <fizzie[m]> Also, you were incentivized to run an identd by getting more permissive I:lines from ircds.
19:16:25 <fizzie[m]> Interesting, looks like at least two Finnish ISPs are still running (IRCnet) IRC servers; irc.elisa.fi and irc.nebula.fi.
19:23:19 -!- tromp has joined.
19:23:55 <b_jonas> fizzie[m]: hmm yes, that's true, I think I saw a MOTD on ircnet that says multi-user shell servers are allowed only if they run identd.
19:24:22 <b_jonas> I will check my employer's ipv4 NAT when I'm in there, but I don't think they run identd
19:24:24 <fizzie[m]> int-e: My guess is it's an unintentional typo, but I don't know for sure.
19:24:38 <pikhq> i know irccloud runs an identd, but i imagine they're one of the few places that actually does
19:25:13 <b_jonas> pikhq: yes, but they're specifically a massive IRC proxy, not a generic NAT for the employees on which most people don't use IRC
19:25:27 <fizzie[m]> I no longer have an account on any shell server other than VPSes I personally administer. Feels slightly odd. :/
19:25:49 <pikhq> yeah -- it's one of the use cases that identd still makes _some_ sense for
19:27:59 <fizzie[m]> This Matrix/Libera bridge app server doesn't seem to run an identd, so everyone's got a ~ on it.
19:28:30 <b_jonas> I mean I don't see how they could even run a meaningful identd, when they have a single wifi password
19:29:32 <b_jonas> they can know the identity of my work laptop, because that's a laptop owned by the employer, but anyone can also connect to the wifi from any other computer, and even the ethernet, ethernet just needs a bit more physical proximity
19:29:57 <fizzie[m]> You can have a forwarding identd setup (oidentd at least supports that) for a NAT, but that's stretching the definition of "meaningful".
19:30:01 <b_jonas> I normally connect through ethernet because I'm old-style, but I have used the wifi a few times
19:30:20 <b_jonas> fizzie[m]: yes, but then I can run an identd on my own laptop that lies anything, and so can the attacker
19:30:28 <b_jonas> the attacker who wants to get the same hostmask that is
19:31:12 <fizzie[m]> I've got fungot running on a (virtual) system that has a dedicated public IPv6 address but a NAT'd IPv4 one, so it's fungot!~fungot@... when connecting over IPv4 but fungot!fungot@... when connecting over IPv6.
19:31:12 <fungot> fizzie[m]: python's module system wreaks havoc with static compilation and doesn't have much practical value, and no registers, it has own scheme dialect which supports optional types. similar to dylan.
19:31:32 <fizzie[m]> (Because I run it at home, and my ISP only gives out a single IPv4 address, unsurprisingly.)
19:32:18 <b_jonas> also I just talked to the sysadmin about how their SVN proxy is broken and doesn't forward file copies to the internal network, and it turns out the machine that handles that proxying runs some simple software that they can't configure to do the kind of URL rewriting that has two URLs in the same query
19:32:33 <b_jonas> I'm actually kind of surprised that commits even work through that proxy
19:33:09 <b_jonas> so I sort of don't think that they would do identd forwarding, that would also require specific protocol parsing
19:33:32 <b_jonas> the workaround is that I'll have to set up a VPN and use SVN through that by the way
19:34:07 <b_jonas> fizzie[m]: yeah, I also never tested whether the IPV6 is natted too
19:34:15 <b_jonas> I should check that too
19:37:44 <fizzie[m]> (Also, while I'm no Python expert, I don't think what our channel mascot said about the Python module system is true. Or coherent.)
19:39:20 <b_jonas> yes, the module system isn't particularly relevant for why python is too dynamic to be typeable statically
19:40:17 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
19:41:47 <b_jonas> although ruby is even worse
19:45:43 <b_jonas> python is at least sensible enough to not allow just arbitrarily redefining the methods of built-in types. but it does allow redefining builtin functions.
19:55:52 -!- arseniiv has quit (Ping timeout: 268 seconds).
20:05:52 -!- riv has joined.
20:06:44 -!- Thelie has joined.
20:14:02 -!- arseniiv has joined.
20:46:50 <zzo38> Animated tiles on Game Boy is mentioned. Does it support bank switching graphics? I can look. I know that NES/Famicom does have bankswitching graphics, I will look about Game Boy
20:50:14 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=84647&oldid=84620 * CodyNinja1 * (+208) /* Introductions */
20:51:18 -!- tromp has joined.
20:54:46 <esolangs> [[User:CodyNinja1]] N https://esolangs.org/w/index.php?oldid=84648 * CodyNinja1 * (+41) Created page with "Hello i am codyninja1 and i like esolangs"
20:57:30 <esolangs> [[UToober]] N https://esolangs.org/w/index.php?oldid=84649 * CodyNinja1 * (+1842) Created page with "<h1>UToober</h1> UToober is a [[Brainfuck|Brainfrain]]-like programming language created by [[User:CodyNinja1|CodyNinja1]] <h1>Usage and Commands</h1> {| class="wikitable" |+..."
20:58:08 <esolangs> [[UToober]] M https://esolangs.org/w/index.php?diff=84650&oldid=84649 * CodyNinja1 * (-17) remove the other header
21:00:43 <esolangs> [[User:CodyNinja1]] https://esolangs.org/w/index.php?diff=84651&oldid=84648 * CodyNinja1 * (+43)
21:00:54 <zzo38> If there are only two frames of animated tiles, then it could work: https://gbdev.io/pandocs/Tile_Data.html
21:17:17 <esolangs> [[UToober]] https://esolangs.org/w/index.php?diff=84652&oldid=84650 * CodyNinja1 * (+1117)
21:19:20 <esolangs> [[UToober]] https://esolangs.org/w/index.php?diff=84653&oldid=84652 * CodyNinja1 * (+39)
21:21:07 <esolangs> [[UToober]] https://esolangs.org/w/index.php?diff=84654&oldid=84653 * CodyNinja1 * (+16)
21:27:17 <b_jonas> zzo38: I think so, but only a few tiles are animated, and it seems like you'd have to duplicate the whole tile table as many times as animation frames, which would be a lot of unnecessarey ROM space. I expect there's some way around that.
21:28:05 <b_jonas> you can change the pointer for the tile table in any case, and games often change them between different levels
21:28:21 <b_jonas> so like grass levels have grass tiles, while volcano levels have lava tiles
21:31:58 -!- oerjan has joined.
21:48:00 -!- salpynx has joined.
21:57:09 <zzo38> NES/Famicom also is limited to two frames in a similar way, but NES/Famicom also can use external video memory, so using that it is possible to add more frames.
22:15:56 -!- [O_O] has quit (Quit: Client closed).
22:20:07 -!- oerjan has set topic: Welcome to the liberated church of esoteric programming, proselytization, propagation, and pronunciation! | https://esolangs.org | logs: https://logs.esolangs.org/.
22:20:29 <oerjan> b_jonas: this should clear it up hth
22:20:52 -!- riv has quit (Quit: Leaving).
22:22:19 <salpynx> `? proselytization
22:22:20 <HackEso> proselytization? ¯\(°​_o)/¯
22:28:24 <salpynx> is the topic meant to exclude amateurs?
22:29:06 <oerjan> amateurs are fine as long as they believe in the cause hth
22:29:23 <oerjan> (also, all i did was add a comma
22:29:24 <oerjan> )
22:31:01 <salpynx> The comma does make a positive difference. Just noticed all the pros for the first time.
22:32:07 -!- Thelie has quit (Remote host closed the connection).
22:39:15 <fizzie> `` wn proselytize -over | grep '^1' # I wish lambdabot's @wn was more concise and/or the WordNet CLI more friendly
22:39:16 <HackEso> 1. proselytize, proselytise -- (convert to another faith or religion)
22:40:12 -!- tech_exorcist has quit (Quit: tech_exorcist).
22:40:12 <oerjan> ^show
22:40:12 <fungot> echo reverb rev rot13 rev2 fib wc ul cho choo pow2 source help hw srmlebac uenlsbcmra scramble unscramble asc ord prefixes tmp test celebrate wiki chr ha rainbow rainbow2 welcome me tell eval elikoski list ping def a thanks tmp2 8ball rreree rerere botsnack bf
22:40:18 <oerjan> ^show rot13
22:40:18 <fungot> ,[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+14<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>>+5[<-5>-]<2-[>+<-[>+<-[>+<-[>+<-[>+<-[>+
22:40:32 <fizzie> Elegant.
22:40:48 <oerjan> fizzie: ^show doesn't reverse the run length encoding tdnh
22:41:24 <fizzie> Yeah, I realized that as I was writing it, but it seemed to hard to describe what I actually meant.
22:41:27 <fizzie> Anyway, it could.
22:42:42 <fizzie> Also, you can tell that program was "compiled" (translated?) before that one bug was fixed, because it contains ">>" instead of ">2".
22:42:59 <oerjan> ic
22:44:30 <oerjan> i'll just excuse you because you were in the matrix at the time
22:44:40 <oerjan> was it solid?
22:44:51 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
22:45:22 <fizzie[m]> It's been a bit flaky, but that's probably because I picked the most experimental thing there was.
22:45:46 <fizzie[m]> Also, my phone started saying "bong" every time I got highlighted, which was a bit much.
22:47:01 <oerjan> also, fungot's response to that log message was eerily close to on topic
22:47:01 <fungot> oerjan: i could make a " who want's to be millionaire program". here's the complete context of the stuff on esolang's like that, you're probably doing something wrong
22:47:16 <oerjan> until it got into the fnords
22:48:03 * Hooloovoo is wearing a "bob" dobbs mask
22:49:41 <oerjan> hm, we definitely need a picture of a superintelligent shade of blue with a "bob" dobbs mask
22:51:53 <salpynx> `` $(🌱 2 6) -s 🌱 $HACKENV/bin/seed
22:51:56 <HackEso> No output.
22:53:47 <salpynx> `seed 4 30029010
22:53:48 <HackEso> True
22:54:57 <salpynx> that worked. `seed is a little more usable than `🌱
22:55:37 <salpynx> ^wiki seed
22:55:37 <fungot> https://esolangs.org/wiki/seed
22:56:16 <fizzie> ^wiki anything, even something that doesn't have an article about it (just checking)
22:56:16 <fungot> https://esolangs.org/wiki/anything, even something that doesn't have an article about it (just checking)
22:56:40 <salpynx> ^show wiki
22:56:41 <fungot> +15[>+4>+7>+7>+8<4-]>3-.>-4..<2+7.+3.<-2.-11..>2-3.<.>2-5.-3.<-4.>+2.<+6.<.<-.>3+.+3.<.<2+.>+4.>+2.+2.-2.<2.,[.,]
22:56:46 <fizzie> I mean, it could have hardly be anything else, but you never know.
22:57:08 <fizzie> From the format, pretty sure the `https://esolangs.org/wiki/` prefix came out of bf_txtgen.
23:09:36 <Hooloovoo> oerjan, http://hooloovoo.blue/files/dobbs.jpg
23:09:49 <Hooloovoo> I think it's one of the more creepy possible masks to have?
23:20:25 <oerjan> Hooloovoo++
23:21:02 <oerjan> although you don't look that su... i mean, blue.
23:25:25 <oerjan> `cbt karma
23:25:26 <HackEso> ​#!/bin/sh \ echo "$1 has $(${HACKENV-/hackenv}/lib/karma "$1") karma."
23:25:45 <oerjan> `t cat lib/karma
23:25:46 <HackEso> ​#!/bin/sh \ count () { \ hg log --template '{desc}\n' | \ egrep '^<[^>]*> karma\'$1 | \ fgrep -vix "<$2> karma$1 $2" | \ cut -d' ' -f3 | \ fgrep -cix "$2" \ } \ plus=$(count + "$1") \ minus=$(count - "$1") \ echo $(($plus-$minus))
23:28:36 <oerjan> `karma Hooloovoo
23:28:44 <HackEso> Hooloovoo has 0 karma.
23:28:50 <oerjan> `karma Hooloovoo
23:28:58 <HackEso> Hooloovoo has 0 karma.
23:29:05 <oerjan> `karma oerjan
23:29:12 <HackEso> oerjan has 0 karma.
23:29:15 <oerjan> `karma oerjan
23:29:22 <HackEso> oerjan has 0 karma.
23:29:48 <oerjan> hm who _has_ HackEso karma
23:29:54 <oerjan> `karma fizzie
23:30:03 <HackEso> fizzie has 2 karma.
23:30:06 <oerjan> `karma fizzie
23:30:21 <HackEso> fizzie has 0 karma.
23:30:27 <oerjan> thoughts so.
23:31:25 <Hooloovoo> `karma
23:31:32 <HackEso> ​ has 0 karma.
23:31:49 <oerjan> `karma+ Hooloovoo
23:32:10 <HackEso> Hooloovoo now has 1 karma.
23:32:29 <Hooloovoo> oerjan++
23:32:36 <oerjan> @karma
23:32:36 <lambdabot> You have a karma of 1
23:32:51 <Hooloovoo> @karma
23:32:52 <lambdabot> You have a karma of 1
23:33:02 <Hooloovoo> cool
23:33:57 -!- Riviera has joined.
23:37:12 <salpynx> `` interp "befunge $(seed 4 141745954)@" <<< '20 3'
23:37:13 <HackEso> 23
23:38:07 <nakilon> `karma+ nakilon
23:38:22 <HackEso> nakilon now has 1 karma.
23:39:29 <salpynx> I can't the `! befunge interp to accept parameters to ignore unrecognised commands, and the source seed add program doesn't terminate with `@` neatly.
23:39:37 <nakilon> it takes him 15 seconds to increment
23:40:14 <esolangs> [[UToober]] M https://esolangs.org/w/index.php?diff=84655&oldid=84654 * PythonshellDebugwindow * (+96) Cats/wikiheaders
23:40:15 <salpynx> 22.5hrs estimated to locate a cleanly terminating befunge program `&&+.@`
23:40:38 <esolangs> [[UToober]] M https://esolangs.org/w/index.php?diff=84656&oldid=84655 * PythonshellDebugwindow * (+1) /* Interpreter */ Fxi tpyo
23:40:51 <fizzie> The counting of karma, the way HackEso does it, involves looking through the entire history of 12k or so revisions.
23:41:22 <fizzie> A typically #esolangs-y combination of elegance and whatever the word for the opposite is.
23:47:44 -!- arseniiv has quit (Ping timeout: 268 seconds).
23:55:03 <oerjan> `` hg log -k karma --template '{desc}\n' | paste
23:55:06 <HackEso> https://hack.esolangs.org/tmp/paste/paste.24635
23:55:41 <oerjan> `` hg log -k '> karma' --template '{desc}\n' | paste
23:55:44 <HackEso> https://hack.esolangs.org/tmp/paste/paste.30567
23:56:17 <oerjan> much better
23:57:26 <oerjan> `sled ../lib/karma//3s/log/log -k '> karma' /
23:57:28 <HackEso> ​../lib/karma//#!/bin/sh \ count () { \ hg log -k '> karma' --template '{desc}\n' | \ egrep '^<[^>]*> karma\'$1 | \ fgrep -vix "<$2> karma$1 $2" | \ cut -d' ' -f3 | \ fgrep -cix "$2" \ } \ plus=$(count + "$1") \ minus=$(count - "$1") \ echo $(($plus-$minus))
23:57:37 <oerjan> `karma oerjan
23:57:41 <HackEso> oerjan has 0 karma.
23:57:57 <oerjan> `karma Hooloovoo
23:58:02 <HackEso> Hooloovoo has 1 karma.
23:59:01 -!- delta23 has joined.
←2021-06-16 2021-06-17 2021-06-18→ ↑2021 ↑all