kspalaiologos: Honestly, I can't find a good use for my "amazing" idea imode: which is? kspalaiologos: I'm talking about the idea I presented someone earlier kspalaiologos: of the substitution based language imode: interesting, mind recapping. b_jonas: hello all b_jonas: `welcome PaniniTheDev HackEso: PaniniTheDev: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: . (For the other kind of esoterica, try #esoteric on EFnet or DALnet.) b_jonas: Yeah, you know that already, you came from the Wiki. fizzie: shachaf: The spec disallows comments, but the implementation doesn't actually check for comments in code that's not executed, so essentially you just have to brute-force out some string that hashes to "+>[...junk...]<" and use that block to represent a +. Plus a few extra details (like making > into >>, and making sure there are no []s in that junk). fizzie: "Comments" being any byte that's not +-<>.,[] b_jonas: kspalaiologos, kmc: IMO creating a few good esolang-related things is a much better way to contribute than creating a hundred worthless pages on the wiki about supposed languages like our village in Norway does b_jonas: there are probably only two people who have created more than one really interesting esolangs that are different from each other b_jonas: and unless you can come up with something really revolutionary, creating new esolangs isn't the best thing to do. I value it much higher if you use existing esolangs, or just use non-eso programming languages in interesting ways b_jonas: as in obfuscated programming shachaf: fizzie: Oh, that sounds like a bug in the implementation. shachaf: Which I guess is why you called in a vulnerability. kmc: i mean, it's fine either way kmc: I like to hang out here because it's a set of cool people discussing interesting things kmc: I don't feel a great urge to contribute to the esolangs per se kmc: I do have a few ideas tho imode: honestly esolangs to me are just new ideas in programming language theory that haven't been taken to their potential yet. kmc: some are b_jonas: kspalaiologos: "slashes (///) without regexps" um, but slashes already doesn't have regexps. it only searches for fixed strings, as in grep -F kmc: one is a concatencative language for signal processing kmc: i mean it's probably been done b_jonas: kmc: the great thing is that esolangs mean different things to different people, which is why there are so many different ones with different interesting properties b_jonas: kmc: re x86 without using registers => interesting, I don't remember having seen that one. the one with MOV only, and the one with no instructions, those I do remember, as well as tom7's ABC imode: brachylog is interesting if a little obtuse. imode: I wonder what the most "minimal" logic language is. prolog is hard to write on a single line and its implementation is complex. b_jonas: imode: I think for a golf language, it may make sense to have prolog-like backtracking, but not general prolog-like unification. I'm not saying this would be easy to implement, just that it may help golfing. b_jonas: but as for your specific question, I don't know what counts as enough to qualify something a "logic language" imode: golfing is an interesting orthogonal goal. my further goal is writing prolog as I write sentences. imode: "this thing relates to that thing, that thing relates to this other thing, what is this other thing." b_jonas: kmc: interesting, why did you not make that implement brainfuck with mod 256 wraparound like it's the most common? b_jonas: hmm, Shakespeare predates Chef? imode: prolog without variables.. hm. b_jonas: imode: no no, I imagine it would have mutable variables, and you'd have both non-backtracking and backtracking versions. what I mean is that it wouldn't have the recursive structural unification, nor even just unassigned variables and function arguments that can be either input and output using them and A=B statements that can assign in either direction imode: didn't tie that statement to your's, was just musing. kmc: b_jonas: i think that would have been harder? b_jonas: and I don't think it would be like prolog at all b_jonas: kmc: it's hard to implement, but a golfing language doesn't have to be easy to implement, it has to give you all the tricky tools instead imode: I want to be able to pose questions to my machine and have it answer them. I want to be able to describe and query relations between the things I declare. kmc: b_jonas: I was doing a minimum proof of concept about x86 being turing complete with no registers imode: sans variables.. which is difficult. kmc: I don't really care if it's convenient for writing code b_jonas: kmc: sure, but you apparently have extra code in the implementation so that when a cell becomes decreased to -1 then it changes it to 0, and when it becomes 256 it changes it to 255 imode: https://en.wikipedia.org/wiki/Constraint_Handling_Rules b_jonas: it seems like you'd just have to change the constants there so it changes -1 to 255 and 256 to 0 insteaed imode: interesting. b_jonas: so it'd be like a trivial change, it wouldn't make the implementation any more difficult kmc: b_jonas: hm i think you're right kmc: it's been a long time kmc: so i'm not sure why i did it that way b_jonas: oh wait b_jonas: no, you're right kmc: also I'm not sure how this post got hundreds of comments about curing herpes with herbs b_jonas: the problem is that at every < and > statement, you have to do a self-modifying code that modifies both the head address in both increase and decrease statement kmc: b_jonas: oh also i can't have conditionals b_jonas: if you made it wrap around, you'd need five such modifications instead of three, so it's complicated kmc: but there's still probably a way kmc: i could make a subroutine that does it in some bitwise way for example kmc: but yeha kmc: I think I just did it this way to be parsimonious b_jonas: you even say "We could implement the more typical wrap-around behavior with somewhat more code." shachaf: my friend has been trying to talk me into learning to do fancy gpu programming b_jonas: sorry, I didn't realize that that's how the head pointer was implemented kmc: shachaf: it's fun shachaf: it's a bit like esoteric programming kmc: massively parallel, quasi-functional kmc: b_jonas: glad you found it interesting b_jonas: shachaf: the friend isn't your partner who wants you to earn more money, right? kmc: a lot of people were amused by my calling brainfuck "pretty familiar as an imperative, structured-control language" shachaf: ais523: Does Richardson's theorem actually let you produce a specific real expression (like sqrt(sin(5)) or whatever) where it's undecidable whether it's equal to 0? kmc: and "[not] super weird" shachaf: ais523: Or is it only a function, like "\x -> sqrt(sin(x))", where it' undecidable whether it's 0 everywhere? shachaf: kmc: Well, it has a simple text substitution compiler to C. kmc: b_jonas: i wrote most of the code on a flight from SFO to ICN kmc: shachaf: yeah shachaf: The weird part isn't the language primitives but what you have to do get anything done with them. b_jonas: `perl -eprint sqrt(sin(5)) # of course that doesn't prove anything, because the sin function rounds to floating-point HackEso: Can't take sqrt of -0.958924 at -e line 1. shachaf: Oh no. shachaf: In the other window I wrote sqrt(sin(3)) but I changed it to 5 because it seemed more appealing. b_jonas: `perl -euse Math::Complex; print sqrt(sin(5)) HackEso: 0.979246789457662i shachaf: Joke's on me. b_jonas: shachaf: nah, taking a complex square root is completely fine in this context kmc: I was pretty pleased to figure out how to do this b_jonas: it would be worse if you tried to divide by zero, but just taking square root or log of a negative number is ok shachaf: It's not completely fine for at least the following reason: It makes me say "Oh no." kmc: "Code that self-modifies by calling read() is clearly the future of computing." b_jonas: also, I have a question b_jonas: about self-modifying code shachaf: higan mchelloface kmc: b_jonas: if you look at the actual code it has a lot more self modifying code kmc: to handle , kmc: , was a pain b_jonas: normally on x86 with SMP, if you modify code on one cpu then execute it on another cpu, and want to make sure that the modified code is used, then you have to do a really elaborate synchronization dance to make sure that all the caches are flushed properly b_jonas: this doesn't happen when modifying code and then executing it on the same cpu because x86 wants to be backwards compatible with 386, which allowed such self-modifying code as long as you just do any jump/branch between them b_jonas: my question is, if you write ordinary self-modifying code in a linux-x86_64 program, and the kernel just happens to migrate the user-space thread to another cpu between your modifying code and your running it, does the kernel guarantee to do all the required synchronization dance so that your self-modifying code executes correctly? b_jonas: because if not, then I really don't see how you could ever write self-modifying code on linux-x86_64 b_jonas: fizzie: ^ perhaps you can answer b_jonas: wait what? is it really undecidable in the computational sense whether a context-free grammar describes the empty language? b_jonas: no, apparently it isn't arseniiv: it really depends on how we define minimalistic => agree; I meant from the syntactic side imode: https://hatebin.com/qsqfryjtfv imode: someone might have a use for this. imode: it's a language based on tuple rewriting. here's a demo of a text adventure in it. b_jonas: wow, are there really only six M:tG cards that represent a leonin skyknight directly? that seems odd b_jonas: admittedly they do appear in the flavor of some noncreature cards too b_jonas: Leonin Scimitar is a weapon used by skyhunters imode: because the tuple store is a multiset, it's possible to construct a counter machine (and I believe it's equivalent to FRACTRAN at that point). there's no other way to build a tape as far as I see, though, because you can't add tuples with generated identifiers. imode: though it's easy to add the ability to: any variables on the RHS not present on the LHS get bound to a unique identifier. arseniiv: imode: how does it operate, does it delete matched tuples or leaves them in the store? arseniiv: I hadn’t read thoroughly fizzie: b_jonas: I don't have an answer for that. Presumably serious users of self-modifying code must have considered this though. imode: arseniiv: it deletes them. b_jonas: fizzie: ... serious users of self-modifying code? those exist? arseniiv: oh! I came up with a controversial question b_jonas: do you mean like just-in-time compilers? b_jonas: oh, I get it b_jonas: you must meen qemu b_jonas: qemu's just in time compiler mode b_jonas: that's what I should look at arseniiv: if I’m to pick one of Idris or Agda, is there a clear winner or should I abandon the choice instead b_jonas: hmm wait b_jonas: does that exist on x86_64 as the host? b_jonas: `ftoc 375 b_jonas: arseniiv: it's a recipe about baking fish b_jonas: still hotter than I expect, I don't bake anything over 180 deg C, but not impossibly hot arseniiv: b_jonas: yum fizzie: `recipe HackEso: nto egg salt. \ Add the shapes of flour with the corner and sugar in a large \ pan. Serve with peanut oil and almonds. Pour the cake on a bowl, stirring \ occasionally and remove from heat; cook over moderate heat, stirring constantly, \ until the meat is tender. Add the soup over the fish and \ stirring constantly; simmer together the water and mix well. Stir in the pineapple; \ water until lightly blended over and remove from pan. Add \ strands of fizzie: fungot: Do you know any recipes? Should we train you with a cookbook? fungot: fizzie: i think windos api bindings are somewhat rare female esolang programmers?' and someone replied with subject ' my wife woke up...'. b_jonas: fizzie: the recipes in `recipe are somewhat similar to the sort of text that fungot outputs, in that they don't have any long term memory to ensure that objects created in one part of the recipe are reused in another, even though that is something that it would be easy to teach a computer program to pay attention to fungot: b_jonas: i suspect firefox and konversation will randomly stop working at some startup, unrelated to research or scheme. common lisp is type ( list-all-packages) *modules* and *features*, something similar? b_jonas: yes, like that b_jonas: I'd like to contrast this to Roborosewater, which usually does a good job of keeping the whole card coherent b_jonas: `? roborosewater HackEso: RoboRosewater is generating random Magic: the Gathering cards, see https://mobile.twitter.com/roborosewater ais523: ais523: Does Richardson's theorem actually let you produce a specific real expression (like sqrt(sin(5)) or whatever) where it's undecidable whether it's equal to 0? ← if you could prove the result was undecidably equal to 0, then you could prove the result equalled 0 (if it didn't equal 0 then you'd be able to decide it by comparing to a number in between), which is a contradiction; so there are no computable real equations /known/ to be ais523: undecidable ais523: it wouldn't surprise me if the theorem allowed you to compile a particular undecidable problem into an equivalent undecidable computational real, though, but I don't know shachaf: I thought that was how you were proposing to use the theorem the other day, though I don't remember exactly. ais523: if I’m to pick one of Idris or Agda, is there a clear winner or should I abandon the choice instead ← Agda is something of an outlier among machine-checkable-proof languages, it's a lot more explicit than the competition; I personally see this as an advantage but this is a matter of taste (and probably means that Agda is the slowest among all commonly used proof languages to write) ais523: I think Agda might be good for people who like theoretically pure / mathematically interesting languages, whereas Idris is better if you want to build something practically b_jonas: ais523: hi! see the logs shachaf: ais523 is already seeing the logs. b_jonas: he generally does b_jonas: he's probably seen https://esolangs.org/logs/2019-09-29.html#lk already b_jonas: this is one of those rare cases where I can answer a technical question on #esoteric ais523: there are probably only two people who have created more than one really interesting esolangs that are different from each other ← I can think of at least three, probably several more ais523: b_jonas: I saw that a while ago, just wasn't online to reply ais523: I'd found a solution to the problem by then anyway (and even posted it in-channel) b_jonas: ais523: which three? you are one of them, that's easy ais523: although, how does "no utf8" have the same semantics as BEGIN? :-D ais523: b_jonas: cpressey, obviously ais523: the first name that came to mind for the third was Keymaker ais523: I think oklopol might also have done so b_jonas: I'll look these up ais523: also Martin Ender b_jonas: ais523: it doesn't technically have exactly the same semantics, but the differences don't matter here b_jonas: it also loads a module that always exists on modern perl in the core and doesn't do much and most of it are actually perl builtins b_jonas: ones that are loaded when the interpreter is started ais523: I know what the utf8 "module" does b_jonas: you could use lots of other modules, especially if you put a do-block in the argument to ignore the result of the $^H thingy ais523: but I'm confused as to why it makes the assignment to $^H happen at compile time ais523: the `no` statement, that is ais523: ooh, I figured it out ais523: it needs to evaluate the argument to utf8 in order to work out what values to load the module with, that's clever b_jonas: ais523: the specific module is not relevant, but the use/no statement calls import/unimport at compile time, so it has to evaluate its argument, which is passed to that call, at compile time b_jonas: oh right, the utf8 module's import has another function that I totally didn't think of b_jonas: that could be confusing b_jonas: it's totally obsolete so I forgot about it b_jonas: I only thought of the public functions in it ais523: utf8::import doesn't inspect its arguments, does it? ais523: it doesn't, I just checked its source code ais523: (it feels a bit wrong to me that you can check the source code of a pragma, you expect those to be hardcoded into the compiler rather than separate files) shachaf: I wrote a UTF8 decoder but it's pretty naive. shachaf: I should write a fast one that uses a state machine. b_jonas: ais523: you can check the source of things that are hardcoded into the compiler too, and for most pragmas, the bulk of the implementation is in there, the pragma only gives an interface to them b_jonas: (bigint is an example for a pragma that isn't like that) b_jonas: but perl is ... sort of weird in how a lot of what you expect to be builtin functionality in a sane language is off-loaded to modules ais523: bigint is written in terms of overload::constant, which seems to do the real magic b_jonas: ais523: yeah ais523: it appears to in turn be implemented via assigning to %^H, which has a strong implication of compiler magic b_jonas: really? that seems unlikely because I think %^H is newer than overload::constant ais523: the implementation could have been changed to make use of the new feature b_jonas: could, but that seems unlikely b_jonas: maybe I just remember incorrectly about $^H b_jonas: about %^H b_jonas: %^H is old b_jonas: I mean b_jonas: $^H is old, I know that b_jonas: maybe %^H is old too, I just think it's newer for some reason b_jonas: let me check arseniiv: ais523: thanks arseniiv: bye all, I try to fix my sleepdule ais523: fwiw, I know Agda much better than Idris (although don't know either particularly well) b_jonas: ais523: wait, are you sure that %^H is used as the magic interface how overload::constant asks the compiler how to interpret constants? isn't it just used to store some internal data for the pragma? ais523: so it's changinig both %^H and $^H, with nothing else happening b_jonas: anyway, I was probably wrong about %^H, it's likely old b_jonas: it exists in 5.10, but I'm too lazy to check perl 5.6 now ais523: that "shift, shift" seems really ominous for some reason, but I guess it's just an obfuscated way to return $_[1] b_jonas: wow, the demon Bozmodiklax returns! I think that's his third appearance in smbc b_jonas: it's nice when a gag-a-day comic has continuity b_jonas: well, sort of continuity b_jonas: he was much more dangerous the last time, wanting to blot out the sun and shroud Earth in a night eternal imode: move left, cursor at $x? $x previous $y?: cursor at $y. move left, cursor at $x?: $y next $x, cursor at $y. move right, cursor at $x? $x next $y?: cursor at $y. move left, cursor at $x?: $x next $y, cursor at $y. imode: autogenerating an infinite tape. imode: the sentential form is a little awkward. ais523: is that text written in English or an esolang or a literal translation from one to the other? imode: it's an esolang. imode: small syntactic variant on a language I posted about earlier, I'll re-post. imode: https://hatebin.com/qsqfryjtfv imode: this is a language based around tuple rewriting. the system state is stored as a multiset of tuples. patterns match against collections of tuples. imode: tuples are just sequences of tokens delimited by spaces. imode: tuples in a pattern are delimited by ',' or '?'. imode: if they're delimited by a ',', the constructed tuples are removed from the store. if they're delimited by a '?', they're not. imode: any variables present on the RHS that aren't on the LHS get bound to an autogenerated ID. HackEso: 1/2:1007) ... I was thinking maybe octave's fact() function is the factorial. octave:1> fact(20) Richad Stallman's pinky finger is really a USB memory stick. I don't think that's 20!. \ 625) if the halting problem was solved, as a placebo.. would it benefit people? \ 991) in the time it takes light to travel from Hexham to Finland, I can generate almost 20 new topics for #esoteric \ 241) shit would make great currency, because everyone would have it and you could literally be filthy rich \ 501) elliott: ppl should vote clinton because obama is biracial every1 knows that dood, look at him he has been on something lately. kmc: i've been quoted int-e: kmc: I hate it when that happens. kmc: i think most of my quotes here are not too embarrassing kmc: though i'm sure if you went through the logs you could find loads of embarrassing things i've said kmc: @nixon lambdabot: I'm glad I'm not Brezhnev. Being the Russian leader in the Kremlin. You never know if someone's tape recording what you say. kmc: perfect choice, lambdabot kmc: i think my #haskell quotes are probably more embarrassing kmc: @quote kmc lambdabot: kmc says: φ you lambdabot kmc: ok that one's pretty good int-e: @quote int-e lambdabot: int-e says: C++ does make a reasonably usable high-level assembler int-e: Oh that... I still agree with. oerjan: @quote oerjan lambdabot: oerjan says: hotsmack oerjan: @quote oerjan lambdabot: oerjan says: surprisingly, Cale is not a lambdabot command. afaik he may even be human. oerjan: @quote Cale lambdabot: Cale says: Basically, we've known how to implement first class functions efficiently for 20 or 30 years now, and we've known about their importance to abstraction in programming since before the lambdabot: advent of electronic computers. There's no excuse to still be writing new programs in languages without them. int-e: . o O ( This demonstrates a severe lack of creativity when coming up with excuses. ) int-e: (Sorry, Cale) int-e: @quote php lambdabot: dmhouse says: elisp is the PHP of the Lisp world. oerjan: the strange thing is i can only do that unconsciously int-e: oerjan: now why does that remind me of Duke Nukem kmc: @quote kmc lambdabot: kmc says: "Haskell is great, because Curry-Howard! Proving things in the type system. We can prove that, uh, Ints exist, unless they're ⊥." kmc: ^ the kind of cringe i was expecting oerjan: because whenever i try to whistle it consciously, i can only remember the 2nd and 3rd movements kmc: i'm not wrong though oerjan: int-e: also i don't know, i've never played duke nukem oerjan: cringily correct, the best kind of correct int-e: speaking of cringes... "blockchain is essentially a distributed state machine" int-e: (from https://heise.de/-4514954 (in german)) oerjan: => universe = quantum blockchain int-e: at least they come to the conclusion that there aren't any convincing use cases for blockchain technology in the context they're considering (namely, in combination with microservices). (bzzzzzt!) int-e: oerjan: It's all reversible, right? int-e: Needless to say I completely disagree with that mental model... a ledger only incidentally keeps track of a current state; its purpose is to be a record of history. int-e: `? thgir HackEso: thgir? ¯\(°​_o)/¯ int-e: . o O ( `le/rn password//The password of the month is up for grabs. ) int-e: oerjan: .hO kspalaiologos: I wonder, are there more bots than regular users? int-e: I don't think so. int-e: (Assuming the question is about this channel.) int-e: Or maybe it's not logging the channel but logging other sources on the channel? Who knows. kmc: we're all bots here kmc: int-e: I think you can just as easily say that a ledger exists incidentally as a form of distributed consensus about a current state kmc: but perhaps there is some context to your statement that I am missing oerjan: kspalaiologos: at one time there were 10% bots, but i think there are fewer now kmc: 🤖 beep boop 🤖 kmc: @quote robot lambdabot: byorgey says: now we have the pig operator <^(++)^> as well as the robot monkey operator (:[]) kmc: @quote bot lambdabot: rwbarton says: also, a generally safe answer to "was there an update to lambdabot recently" is "no" oerjan: admittedly there are also fewer users overall int-e: kmc: I want to distinguish a ledger from a mere database oerjan: ok there are 7 nicks i know are bots, as well as 2 that look suspiciously like bots, so there _may_ be 10% oerjan: ok gitlogger is a bot, and i'm unsure about diginet oerjan: anyway... kspalaiologos: oerjan, it's my bot. kspalaiologos: I'm making a bot mirroring the IRC logs for a few servers kspalaiologos: github.com/kspalaiologos/esologs/ cpressey: Good morning and happy October. Say I have a semi-Thue grammar with the following property: for every word w, it is not possible to derive w in zero or more steps starting from w. Can such a grammar be Turing-complete? cpressey: (This is an attempt to put "Is there a language without NOP and in which it is not possible to build a NOP?" on a more rigorous basis.) wib_jonas: kspalaiologos: more bots than users => it's hard to tell, we have a lot of irc connections of whom we know nothing wib_jonas: probably not though, because most of the bots are users wib_jonas: also, since I keep announcing these, even though there's no formal *list , https://magic.wizards.com/en/articles/archive/news/throne-eldraine-update-bulletin-2019-09-27 Throne of Eldraine Update Bulletin (M:tG) wib_jonas: `fetch share/mtg/MagicCompRules_20191004.txt https://media.wizards.com/2019/downloads/MagicCompRules%2020191004.txt HackEso: 2019-10-01 08:29:20 URL:https://media.wizards.com/2019/downloads/MagicCompRules%2020191004.txt [741298/741298] -> "share/mtg/MagicCompRules_20191004.txt" [1] wib_jonas: `` set -e; cd share/mtg; tr -d \\\\r rules.txt HackEso: No output. wib_jonas: `` set -e; cd share/mtg; grep Arbor rules.txt HackEso: No output. wib_jonas: `` set -e; cd share/mtg; tr -d \\r rules.txt HackEso: No output. wib_jonas: ``` set -e; cd share/mtg; cat rules.txt HackEso: ​Magic: The Gathering Comprehensive Rules \ \ These rules are effective as of October 4, 2019. \ \ Introduction \ \ This document is the ultimate authority for Magic: The Gathering® competitive game play. It consists of a series of numbered rules followed by a glossary. Many of the numbered rules are divided into subrules, and each separate rule and subrule of the game has its own number. (Note that subrules skip the letters “l” and “o” du kspalaiologos: What's this bot wib_jonas: note: I accidentally stripped "r" and "\\" characters rather than "\r" characters, so the "\r" characters remain, and those make HackEso truncate the output. I wonder if any wisdom has one. wib_jonas: `? HackEso HackEso: HackEso is almost but not quite unlike HackEgo. wib_jonas: `? HackEgo HackEso: HackEgo, also known as HackBot, is a bot that runs arbitrary commands on Unix. See `help for info on using it. You should totally try to hax0r it! Make sure you imagine it's running as root with no sandboxing. HackEgo is the slowest bot in all Mexico! HackEso: Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch [] " downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert " can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/ kspalaiologos: `run cat /etc/passwd HackEso: cat: /etc/passwd: No such file or directory kspalaiologos: Where was passwd stored kspalaiologos: C'mon, too much windows kspalaiologos: `run hostname HackEso: ​(none) kspalaiologos: `run ls /bin HackEso: bash \ bunzip2 \ bzcat \ bzcmp \ bzdiff \ bzegrep \ bzexe \ bzfgrep \ bzgrep \ bzip2 \ bzip2recover \ bzless \ bzmore \ cat \ chgrp \ chmod \ chown \ cp \ dash \ date \ dd \ df \ dir \ dmesg \ dnsdomainname \ domainname \ echo \ egrep \ false \ fgrep \ findmnt \ fuser \ grep \ gunzip \ gzexe \ gzip \ hostname \ ip \ journalctl \ kill \ less \ lessecho \ lessfile \ lesskey \ lesspipe \ ln \ login \ loginctl \ ls \ lsblk \ mkdir \ mknod \ mktemp \ more \ mou wib_jonas: HackEso has a bunch of commands idiosyncratic to this community, some of them we use a lot wib_jonas: for example the `` command wib_jonas: you can find them in /hackenv/bin kspalaiologos: What's its meaning kspalaiologos: `ls /hackenv/ HackEso: a.out \ bin \ canary \ emoticons \ esobible \ etc \ evil \ f \ factor \ good \ hw \ ibin \ interps \ izash.c \ karma \ le \ lib \ misle \ paste \ ply-3.8 \ quines \ quinor \ quotes \ share \ src \ test2 \ testfile \ tmflry \ tmp \ wisdom wib_jonas: some of them have long descriptions in the wisdom database, which you can access with the ? command , or short descriptions in the whatis database HackEso: ​` is the prefix to greatness. wib_jonas: `? ``` HackEso: ​```? ¯\(°​_o)/¯ HackEso: ​` is the prefix to greatness. wib_jonas: hmm, that doesn't quite explain it kspalaiologos: Is the source code public? wib_jonas: `? source HackEso: Sources for HackEgo can be found at https://bitbucket.org/GregorR/hackbot + https://bitbucket.org/GregorR/multibot + https://bitbucket.org/GregorR/umlbox . Sources for HackEso can be found at https://bitbucket.org/fizzie/hackbot + https://bitbucket.org/fizzie/multibot + https://bitbucket.org/fizzie/umlbox . kspalaiologos: My bot here uses Perl wib_jonas: but most of the magic is in the commands itself, which you can usually read directly from the commands in bin wib_jonas: 'bin/``' runs a shell command, so typing '```' invokes that wib_jonas: ``` echo foo; echo bar HackEso: foo \ bar wib_jonas: it's similar to the run builtin kspalaiologos: I'll take a look on this kspalaiologos: When I'm home wib_jonas: `whatis `` HackEso: ​``(1hackeso) - run shell command wib_jonas: there's also a single-backtick wib_jonas: `whatis ` HackEso: ​`(1hackeso) - run shell command using New Zealand locale kspalaiologos: I don't want anyone bashing me for slacking in work :d wib_jonas: the New Zealand locale is actually the default for everything, and the double backtick command unsets it wib_jonas: kspalaiologos: what bot uses perl? kspalaiologos: gitlogger kspalaiologos: I use it to mirror chat logs kspalaiologos: Of various irc channels wib_jonas: `perl -efor(1..7) print $_**2," " # HackEso has a perl interpreter installed HackEso: syntax error at -e line 1, near ") print" \ Execution of -e aborted due to compilation errors. wib_jonas: `perl -efor(1..7) { print $_**2," " } HackEso: 1 4 9 16 25 36 49 kspalaiologos: Nearly every UNIX-like box has perl installed wib_jonas: also a python3 interpreter, a ruby interpreter, a javascript node.js interpreter, a prolog interpreter, a C compiler, an sqlite3 interpreter, and more kspalaiologos: I quite like perl and enjoy it over other scripting languages wib_jonas: kspalaiologos: yes, that's probably why this has a perl too kspalaiologos: Why would anyone need node.js cmon wib_jonas: there's also perlbot, which is a fork of buubot, and can run perl commands wib_jonas: kspalaiologos: this is #esoteric , we experiment with languages even when they're weird wib_jonas: not with php though... eww myname: kspalaiologos: as the evil twin of perl, i have to dislike it kspalaiologos: Thats actually neat wib_jonas: what? you're the evil twin of perl? kspalaiologos: Is perl bot runnint? kspalaiologos: *running wib_jonas: I think so, but it's not in this channel. let me test myname: wib_jonas: i fail to remember how to trigger factoids kspalaiologos: My crappy irc client won't let me view the list. wib_jonas: yes, it's running wib_jonas: try /msg perlbot echo hello, world kspalaiologos: It's sandboxed obviously? kspalaiologos: Virtualization? myname: everytime i think about how perl is as old as me, something makes me dislike it even more kspalaiologos: Has it got disk quotas/execution quotas and memory quotas? wib_jonas: myname: I dislike perl, but for different reasons kspalaiologos: I used to write a C compiler in Perl kspalaiologos: Yet I slightly dislike Perl for some reasons. myname: wib_jonas: there are plenty of reasons, but a bunch of those is related to its age wib_jonas: zzo38: M:tG stuff above, you probably already know FireFly: `? myname HackEso: myname is not your name. You don't know what they are doing. Or you are doing. Or am I? He is Perl's evil twin brother. arseniiv: `? password HackEso: The password of the month is ninjaed. arseniiv: oh it’s still not ch… arseniiv: `learn The password of the month is not what it seems HackEso: Relearned 'password': The password of the month is not what it seems int-e: arseniiv: https://esolangs.org/logs/2019-10-01.html#lcb ;-) wib_jonas: ``` hg cat -r 11684 wisdom/password | perl -e'print substr(,0,34)' HackEso: The password of the month is "over wib_jonas: joyed? arseniiv: int-e: I couldn’t logread, what if oerjan sneaked on me; also my password was in priority as it would someday be discovered anyway, it’s so simple, so I couldn’t not set it today, no way int-e: arseniiv: You mean this was all premediated? Can't argue with that. int-e: (Though I do enjoy the illusion of free will.) arseniiv: was, was, this is in the logs somewhere even arseniiv: int-e: I’ll search for it myname: i am tempted to make some kind of website where the password to enter is actually the password of the month as registered in the bot wib_jonas: arseniiv: yeah, it's tricky because two people may try to set the password at close to the same moment. it may be best to use HackEso's atomic write capability and use a command that updates the password only if the $(hg log -T {rev} -l 1 wisdom/password) is what you expect arseniiv: int-e: https://esolangs.org/logs/2019-09-01.html#ljd arseniiv: wib_jonas: I’ll hope we all are too slow for a coincidence to happen for the next 23 passwords at least int-e: we could make a co-ordinated effort. arseniiv: hm it occurred to me while I wrote but I hoped still arseniiv: at least hopefully there will be no ordinated co-efforts, whatever this could be int-e: arseniiv: is this leading up to a co-worker joke arseniiv: int-e: hm depends on what it is, I hadn’t heard it arseniiv: when I eat rice I remember a Bashō haiku https://matsuobashohaiku.home.blog/2019/04/12/gazing-at-morning-glories-eating-breakfast-basho/ though I have yet to do it at dawn, and eating it with butter as I do certainly shouldn’t count arseniiv: also prior to this, I didn’t know the history behind that one arseniiv: even the history behind any of them at all int-e: arseniiv: a worker is somebody who labours diligently and gets things done. a co-worker is ... int-e: arseniiv: and that connects to "co-efforts" :) arseniiv: int-e: mhm kspalaiologos: What is the best way to compress base64 data with repetitive, incrementing characters? kspalaiologos: e.g. ABCD01234 kspalaiologos: It's not like there will be such patterns all over the file and they might not appear at all kspalaiologos: But they are quite common as I can tell. cpressey: kspalaiologos: I don't know about "best" but if there are incrementing sequences, you could replace each character with the difference between it and the previous character, getting long strings of 1's, which should compress well kspalaiologos: That's a neat idea kspalaiologos: But I think it can be improved kspalaiologos: As characters get incremented, in case of ABCD I can compress it to A and ascii(3) kspalaiologos: Then I could apply burrows-wheeler transform to it and pack it using PPMd kspalaiologos: I just wonder if there is something smarter kspalaiologos: In case the compression fails kspalaiologos: And the downside is, no sequences longer than 32 characters. wib_jonas: kspalaiologos: turn it to a pixel graphics where you store one character per pixel, in indexed mode, PNG compress it. PNG handles repetitive differences well because one of the approx five pixels automatically does that difference thing, and some png writers can choose the right filter automatically. just be careful, PNG has a tradeoff between wib_jonas: large file and slow compression versus small file and slower compression wib_jonas: you can change the compression speed with magic options to the PNG encoder kspalaiologos: Won't it artifact the file? kspalaiologos: Just asking out of curiosity wib_jonas: PNG compression is usually lossless wib_jonas: also, use grayscale 8-bit rather than indexed wib_jonas: that said, even any ordinary compressor would work fine on such data wib_jonas: PNG is probably an overcomplication wib_jonas: I wonder how you even get increasing sequences in base64 though myname: that#s a funny idea, though myname: ugh, switching between keyboard layouts always shows somehow wib_jonas: does it really_ kspalaiologos: It's just weird esoteric stuff kspalaiologos: If I wanted simple answer I'd ask elsewhere kspalaiologos: I managed to compress 50MB of this stuff to 1MB, but I'm still a bit disappointed kspalaiologos: And the place where I may accept it is around 30KB myname: a factor of 1000 is quite something to ask for kspalaiologos: The data is really, really eaisly compressable kspalaiologos: I can toss you a sample when I'm home, or probably even now kspalaiologos: github.com/kspalaiologos/codegolf-submissions and find there 7z compressed file myname: that's a lot of z kspalaiologos: So yeah kspalaiologos: As you can see wib_jonas: kspalaiologos: I seem to remember that SE has increased the limit on the size of post contents, but I can't recall if it's increased it _to_ 30 kilobytes or _from_ 30 kilobytes kspalaiologos: The upper bound is 65K though kspalaiologos: wib_jonas, I'm active user and it's 65k now wib_jonas: I am also an active user, but only reached the limit with my own post once, and know of like a handful of other nodes that are long enough for that wib_jonas: I think the limit was 32 kilobyte when I posted https://scifi.meta.stackexchange.com/q/10266 , which was in 2016-10 wib_jonas: wait, I had a data.stackexchange.com query for this wib_jonas: https://data.stackexchange.com/scifi/query/951529/longest-answers int-e: kspalaiologos: is there any information on what this data *is*? wib_jonas: yeah, if you know what the data is supposed to be, you might be able to write a better specific compressor wib_jonas: I am informed that that query is wrong, it looks at the length of the rendered HTML, not of the source code of the post. kspalaiologos: int-e: it's base-64 encoded sequence of six distinct characters with their ascii value equal to the original value plus their position, so AAAA is actually ABCD (i can't tweak this encoding) kspalaiologos: Imagine ooooi/** kspalaiologos: It will get (in theory) encoded to ABCDOZ01 kspalaiologos: The most frequent is encoding of character o, which base equivalent is actually B (for illustrative purposes, I've started with A before, hence the inconsistency) wib_jonas: kspalaiologos: I don't really understand what you're saying wib_jonas: is the offset always added to the character? if so, just subtract it, compare it that way, then add it back when you decompress int-e: also the surface encoding isn't so interesting... does the ooooi/** stuff have any meaning? wib_jonas: int-e: perhaps they're malbolge instructions int-e: That makes sense. Is it the Malbolge Malbolge interpreter? int-e: (Unshackled) int-e: kspalaiologos: If so, your best bet for compression should be to golf the toolchain that produces the malbolge program. kspalaiologos: Its ungolfable kspalaiologos: My toolchain is currently adding only 50% of size kspalaiologos: Highly optimized and handwritten programs I made are only 66 percent smaller than my toolchain int-e: I didn't mean to golf the output. int-e: I meant the toolchain itself. int-e: (I'm assuming that your intent is to post a program whose output is a malbolge malbolge interpreter, because the latter is just too big.) kspalaiologos: Why would I Golf my toolchain kspalaiologos: To make it unmaintainable? int-e: kspalaiologos: so that you get a small-ish program that generates the huge malbolge program you wanted to compress. int-e: Note that this is a form of compression, really. int-e: (well I'm making some assumptions about the complexity of the toolchain) wib_jonas: or just post the thing on an external site, like github, and link to it myname: why not both myname: [file | file <- files, file `matches` "*.?yz"] myname: because you name your porn like this? wib_jonas: `python3 -cimport os,re;print(sorted([e.name for e in os.scandir("wisdom") if re.fullmatch(r"c.*io.",e.name)])) # cpressey: does this help? HackEso: ​['cat elimination', 'cat introduction', 'ciol', 'cipation', 'citation', 'civilization', 'communication', 'composition', 'cut elimination'] wib_jonas: or is that not twisted enoguh? cpressey: It's a bit verbose, but it'll do for now wib_jonas: cpressey: um, you don't want to do boring *.?yz syntax, but you want something concise? wib_jonas: try all the tricks that zsh or modern bash offers in writing complicated globs myname: i prefer haskell list comprehension syntax ofer pythons wib_jonas: ``` python3 -c$'def n(e):return e.name\ndef c(n):return re.fullmatch(r".*ou?r",n,re.I)\nimport os,re;print(sorted(filter(c,map(n,os.scandir("wisdom")))))' HackEso: ​['applicative functor', 'cocoonspirator', 'codoctor', 'color', 'colour', 'coonspirator', 'coulor', 'endofunctor', 'eor', 'functor', 'gregor', 'ior', 'mirror', 'off by two error', 'or', 'postfridgerator', 'prefrigerator', 'racoonspirator', 'space elevator', 'supermarioperator', 'tarator', 'the most hideous cacophony in g minor', 'word salad detector', 'xor'] wib_jonas: cpressey: ^ how about if you don't use comprehensions at all? wib_jonas: ``` python3 -c$'import os,re;r=[]\nfor e in os.scandir("wisdom"):\n n=e.name\n if re.fullmatch(r".*ou?r",n,re.I):r.append(n)\nprint(sorted(r))' HackEso: ​['applicative functor', 'cocoonspirator', 'codoctor', 'color', 'colour', 'coonspirator', 'coulor', 'endofunctor', 'eor', 'functor', 'gregor', 'ior', 'mirror', 'off by two error', 'or', 'postfridgerator', 'prefrigerator', 'racoonspirator', 'space elevator', 'supermarioperator', 'tarator', 'the most hideous cacophony in g minor', 'word salad detector', 'xor'] wib_jonas: ^ though it's the easiest if you don't even use those fancy higher order functions that functional programmers like so much wib_jonas: and just write straightforward loops cpressey: > let n = 10 in [show a ++ "." ++ show b ++ "." ++ show c ++ ".txt" | a <- [1..n], b <- [1..n], c <- [1..n], a*a+b*b == c*c] lambdabot: ["3.4.5.txt","4.3.5.txt","6.8.10.txt","8.6.10.txt"] wib_jonas: cpressey: um, but didn't you mean to grep existing files? cpressey: Wow wib_jonas, you make it sound like I have an actual problem I need to solve. wib_jonas: ``` python3 -c$'for x in range(1,6):\n for y in range(1,x):print("%d.%d.%d.txt"%(x**2-y**2,2*x*y,x**2+y**2))' HackEso: 3.4.5.txt \ 8.6.10.txt \ 5.12.13.txt \ 15.8.17.txt \ 12.16.20.txt \ 7.24.25.txt \ 24.10.26.txt \ 21.20.29.txt \ 16.30.34.txt \ 9.40.41.txt wib_jonas: [ 3*83 j-bot: wib_jonas: 249 Taneb: For some reason I keep thinking J is postfix Taneb: Possibly I confuse it with dc Taneb: `dc 3 83*p HackEso: dc: Could not open file 3 83*p Taneb: `dc -e 3 83*p wib_jonas: [ (*&3) 83 j-bot: wib_jonas: 249 wib_jonas: [ */3 83 j-bot: wib_jonas: 249 kspalaiologos: I've failed terribly kspalaiologos: trying to outsmart PPMD kspalaiologos: eh, let's try with burrows wheller transform then kspalaiologos: http://prntscr.com/pdh1g0 kspalaiologos: PPMd beaten by BWT/BZIP2 hybrid kspalaiologos: no significant improvement though rain2: good idea to try burrows wheeler b_jonas: kspalaiologos: try with a modern compressor like xz or 7z kspalaiologos: they fact I've got winrar on my PC kspalaiologos: doesn't mean that I'm using it on daily basis kspalaiologos: and doesn't mean, I've used it to perform the test kspalaiologos: WinRAR can't pack 7zip archives, and in the attached screenshot you see clearly, that I'm using 7zip b_jonas: kspalaiologos: I didn't look at the screenshot. did you try 7zip compression with the -mx=7 setting for slower but better compression? kspalaiologos: I used highest settings in the GUI kspalaiologos: how can you tell I'm using ancient compressor without looking at the screenshot? b_jonas: kspalaiologos: because you said "PPMd beaten by BWT/BZIP2 hybrid" and BZIP2 is the somewhat old compressor b_jonas: I wouldn't call it ancient, I'm not that young kspalaiologos: BWT/BZIP2 hybrid is the thing I made kspalaiologos: BZIP used Burrows Wheeler Transform, therefore I recalled BZIP kspalaiologos: surprisingly, the BZIP actually works the best kspalaiologos: I tried with PPMd, tried with LZMA2, but with a tiny bit worse results. b_jonas: I guess what remains is to compress it in some reasonable way and host it somewhere outside of code golf b_jonas: though how something such large is a reasonable answer to a code golf problem I don't understand kspalaiologos: It's the thing I'm doing currently kspalaiologos: I guess I shouldnt worry that much about my program size kspalaiologos: because there are more important matters right now kspalaiologos: like the fact that the program just eats entire memory available to the system kspalaiologos: (but I'm certain that it has to work, if it had unlimited memory) kspalaiologos: the conditions on ##c are unlivable kspalaiologos: a lot of people jump in and jump back kspalaiologos: so the entire IRC log is spammed like nowhere b_jonas: you can have your client ignore them kspalaiologos: well, I don't want to ignore them completely kspalaiologos: because I want to know certain people that log in/log out b_jonas: hide them kspalaiologos: but on the other hand, I don't want to see all that spam lol b_jonas: hide but have the computer remember it kspalaiologos: I'm using XCHAT kspalaiologos: and I don't really want to switch, because I've got a couple of plugins written in Tcl and Perl here kspalaiologos: and I don't really think my client allows doing so, because I've just checked the settings b_jonas: can't that show a list of nicks who are joined into the channel in a sidebar? kspalaiologos: sure, I have it enabled kspalaiologos: but it's neat to know the certain point they join or leave b_jonas: or add a transparent irc proxy in between that tracks the users separately if you're feeling more adventurous kspalaiologos: I like dissipating my time on not-so-practical things kspalaiologos: but c'mon kspalaiologos: I've got more interesting not-so-practical things to do xd kspalaiologos: I'm fighting with shitcode I wrote two years ago kspalaiologos: and the extent of this word is so unbeliveable kspalaiologos: I can't really understand 50% of the code kspalaiologos: I just don't know how it works and I change randomly the magic numbers kspalaiologos: trying to find any corelation between thenm kspalaiologos: oh, I've been an idiot shachaf: `asm lea (%eip), %rdi HackEso: 0: 67 48 8d 3d 00 00 00 00 lea 0x0(%eip),%rdi # 0x8 shachaf: Will this move the lower 32 bits of rip into rdi? b_jonas: dunno. TIAS. b_jonas: I don't understand how that's even a valid encoding b_jonas: I don't know how those crazy prefixes work shachaf: `? tias HackEso: tias? ¯\(°​_o)/¯ shachaf: `asm addr32 HackEso: 0: 67 addr32 shachaf: `asm addr32; lea (%rip), %rdi HackEso: 0: 67 48 8d 3d 00 00 00 00 lea 0x0(%eip),%rdi # 0x8 b_jonas: I have an SQL question. b_jonas: Let's say I have a schema like CREATE TABLE cat(cid INTEGER PRIMARY KEY, cname); CREATE TABLE human(oid INTEGER PRIMARY KEY, cid, date, type, weight, FOREIGN KEY(cid) REFERENCES cat(cid)); b_jonas: one cat can have more than one owner b_jonas: I want to group the type 0 owners by cat, something like SELECT h.oid, h.cid FROM human AS h WHERE 0 = h.type GROUP BY h.cid; b_jonas: and in each group (i.e. for each cat), I want to find the owner with the largest date, and join those owners with the cat b_jonas: what's the sane way to do that? b_jonas: I also want to filter the results to those rows where the latest owner has a weight larger than 50 b_jonas: wait wait... so the four main face buttons on both Nintendo controllers and Xbox contrllers are both labelled (A,B,X,Y), but in a different order, where Xbox buttons (A,B,X,Y) correspond to Nintendo buttons (B,A,Y,X)? (And the Nintendo B button corresponds to the Playstation X button, just to make it even crazier.) b_jonas: how did Xbox end up with a conflicting convention for naming the buttons? olsner: not sure how "good" it'll run, but something like a nested (SELECT stuff FROM human WHERE h.cid=cat.cid ORDER BY date DESC LIMIT 1) (where cat.cid is selected by the outside query) is at least an easily understandable way to get the last owner per cat b_jonas: I mean, doesn't the SNES with its four buttons easily predate any microsoft game console? b_jonas: olsner: oh yeah, I didn't tell the catch b_jonas: make it work on MS SQL b_jonas: but even without that, it's a bit tricky with the subquery b_jonas: you need like doubly nested subqueries or something b_jonas: hello kspa olsner: apparently that max-in-group problem is so common it has its own tag on stack overflow https://stackoverflow.com/questions/tagged/greatest-n-per-group b_jonas: thanks, I'll look at that b_jonas: let me intersect that with whatever is the tag for MS SQL b_jonas: https://stackoverflow.com/questions/tagged/sql-server apparently b_jonas: hmm, apparently all the ways to do it in MS SQL are ugly b_jonas: good to know b_jonas: they link me to https://kristiannielsen.livejournal.com/6745.html b_jonas: note though that some of the solutions there won't work if multiple owners can have the same date. I want to choose just one owner in that case. b_jonas: olsner: thank you arseniiv: am I getting it right that Idris has algebraic effects and uses them instead monads, too? arseniiv: I got to re-reading an article about that and this time it reads clearer arseniiv: hm it doesn’t seem to have “handlers for normal return” shachaf: this oolong tea is tea gea arseniiv: shachaf: it has an interesting taste, yeah shachaf: I mean, this specific one that I'm drinking. shachaf: I think it also has some amount of ginseng extract. shachaf: It modifies my mouth so that other things taste sweeter. arseniiv: mhm I ate something with that property I think, maybe berries shachaf: Yes, there are those berries that make sour things taste sweet, but this is quite different. b_jonas: I like berry tea imode: https://hatebin.com/dqswcbuhwd work-in-progress expression evaluator. imode: for those of us who like prefix as opposed to postfix. b_jonas: `? tea HackEso: Tea is concentrated fuel made by distilling occult herbs in a silver alambic. Americans attempted to reduce its potency by dumping some in the Ocean. shachaf: `cwlprits tea HackEso: oerjän boil̈y b_jonas: imode: try Integ if you like prefix with lots of extra parenthesis imode: really this is just to make my life a little easier in terms of evaluating expressions. I'm intending on implementing parameter extraction after that. imode: so you can write stuff like ? 5 to specify the 5th parameter after the expression. imode: benefits of having a queue based language. imode: downsides are that on some malformed expressions, you can infloop. arseniiv: ah, I remember and see from the article’s conclusion that effects, at the moment article’s written, are an experimental extension arseniiv: authors note effects can’t cover continuations but I found another article claiming there’s a way, apparently if extending what we define an algebraic effect framework to be, I hadn’t read that one yet arseniiv: so maybe Idris authors would be able to tinker with their effect module and incorporate continuations? Though anyway I hadn’t used them yet in that explicit sense in any language arseniiv: re. tea: my dictionary says there’s no “alambic” and I think it should be “alembic”? imode: https://hatebin.com/qqqkghwhsh the quadratic formula. arseniiv: BTW couldn’t someone explain call-by-push-value? Those guys use it arseniiv: imode: wow arseniiv: like the structure imode: it's strictly postfix. no parens needed. arseniiv: oh I should go imode: err, prefix. arseniiv: hm would you like to implement infix, with precedences? :D imode: hah! perhaps. queue elements are either single elements or two elements. imode: the operators, which are single elements, could be ordered in accordance with precedence. :P arseniiv: queue elements are either single elements or two elements. => yeah it looks like you could write an interpreter of expressions with arbitrary value constructors, it would just need some abstraction of concrete predicates like `is-multiplication?` and an arity function arseniiv: maybe you need a macro system? imode: pretty much where I was headed to, yeah. I plan on allowing the language to edit its own source. imode: at runtime. arseniiv: hm I’d not call that a *macro* system :P or I thought about not the source you meant arseniiv: happy algebraic effects day everyone bye imode: you as well! imode: ah crap, when revising more? to not infloop, I forgot to include markers... imode: a "final result" should look like ( # ) imode: though in the case of misaligned or extra numbers, there should be a scan through the expression to check and see if there's operators present... imode: a better way to do this would be to check if we've scanned through the expression, done nothing but roll, and then once we reset the cursor, check if we've done any work. imode: if we haven't, remove the ending markers, strip away the operators and number separators, you're done. imode: what's interesting is that you can do something like... imode: ( *' # 2 # 5 ) ( +' # 3 ? 0 ) ! ! imode: which basically evaluates one expression, reserves the result in the queue, and then evaluates the other, but because of the layout of the queue, the latter expression uses the result (via ? 0). oerjan: note: I accidentally stripped "r" and "\\" characters rather than "\r" characters, so the "\r" characters remain, and those make HackEso truncate the output. I wonder if any wisdom has one. <-- i vaguely think we removed some of those from wisdom at one point imode: https://hatebin.com/opaqukmqhr added variable fetching. int-e: oerjan: Oh communication with the Pa'anuri may be just around the corner. oerjan: one may hope oerjan: `? tea HackEso: Tea is concentrated fuel made by distilling occult herbs in a silver alambic. Americans attempted to reduce its potency by dumping some in the Ocean. oerjan: arseniiv: ah it's the french spelling shachaf: I am drinking tea. oerjan: well that's how this started... oerjan: oo so long ago shachaf: This is green tea, not oolong. oerjan: `? oolong HackEso: oolong? ¯\(°​_o)/¯ int-e: object oriented spaghetti code? kspalaiologos: My IRC client kicked me for some reason, sorry HackEso: 1/2:free//A free structure is one that has no nontrivial identities, except algebraist phrase that in a much fancier way with morphisms. \ patent//Patent is an adjective which means that something is painfully obvious. Often used to rightfully mock people that do not see it. \ vacuum tube//After the London terrorist attacks of 2005, the Underground was completely evacuated. Without air resistance, the trains would go at blazingly fast speeds between HackEso: 2/2: the terminals. This is called a vacuum tube. Sadly, current technology doesn't let passengers travel that way. \ misspellings of croissant//misspellings of crosant? ¯\(°​_o)/¯ \ gey//I know nothing about Gey, sir. shachaf: `cwlprits free HackEso: b_jonäs shachaf: Golly. I never heard it phrased quite that way before. shachaf: `cwlprits vacuum tube HackEso: wob_jonäs kspalaiologos: @quote shachaf lambdabot: shachaf says: i they are so love easy threads shachaf: Does "every vector space is free" just mean "every vector space has no nontrivial identities"? int-e: hrm, what does that even mean. is this an attempt to say "every vector space has a basis" and sound categorical? shachaf: Yes, "has a basis" means "is free". shachaf: Or perhaps the other way around. shachaf: I think it's a pretty good perspective and not just categorical mumbo jumbo? shachaf: (Obviously it's also categorical mumbo jumbo.) int-e: "free" has too many meanings int-e: So I don't appreciate using it when there's a more precise term. shachaf: Aren't they all the same meaning? int-e: s/precise/specific/ shachaf: I think this is one of the few clearly good bits of category things. int-e: I don't have to think about what the structure we're completing is when you say "vector space basis". shachaf: I'm not saying not to talk about bases. int-e: Wheras "free" adds a multitude of degrees of freedom, pun not intended. shachaf: But I think the main reason that people like vector spaces so much is that they're free. shachaf: If you found another structure where all the things you care about are free, it could be similarly useful. shachaf: (You can only express linear maps in terms of matrices and compute with them because vector spaces have bases, of course.) int-e: shachaf: So what if we have a vector space over GF(2)... then v+v = 0 for all vectors v. How is that "free"? shachaf: It's free in the category of vector spaces over GF(2), of course. shachaf: I guess I should say what "free" means. shachaf: "A vector space V is free over a set X" means that for any vector space U, linear maps : V -> U naturally correspond to functions : X -> U int-e: So you're free within the confines of a vector space. Yay. int-e: (for a fixed field) int-e: *and* you've just defined a basis shachaf: Yes, "free" means it has a basis. shachaf: I think it's pretty reasonable for "free" to be defined with respect to linear maps? shachaf: You can take the same definition for groups and group homomorphisms and it'll give you free groups. int-e: . o O ( a free abelian group of order 2. ) shachaf: Or say a free monoid [A] over a set A is one where for any monoid M, monoid homomorphisms : [A] -> M correspond to functions : A -> M shachaf: Which just means it's defined elementwise, of course. int-e: I guess one source of my dislike is in the statement you started out with int-e: "every vector space is free" means that freeness doesn't tell us anything about vector spaces at all. so there's no need to talk or think about it. shachaf: But "every vector space has a basis" means the same thing about having a basis. shachaf: I'd say that freeness is a property, maybe desirable or maybe not, that you can talk about vector spaces having (as well as many other structures). Then you can prove the theorem that every vector space has this property. oerjan: `? vector space HackEso: A vector space is just a module over a field. shachaf: `? module HackEso: A module is like a vector space, except with a ring instead of a field. kritixilithos: in case you haven't heard of it, https://www.rule30prize.org/ myname: those are interesting myname: i like the third one myname: how many versions are there myname: and why doesn't he just extend the first one cpressey: wiki has 3 cpressey: I only remembered there being 1, but that was a long time ago. I had a dim memory of there being a Python implementation of it, but I don't see any implementations of any of them. cpressey: 1.0 is by PuzzleHunter84 (in 2009), 2.0 is presumably by PuzzleHunter84 too (also in 2009), 3.0 is presumably by A (in 2018) cpressey: I think I must've been thinking of a different language int-e: Oh wow, A is still active... myname: i am nur surprised int-e: (I'm still ignoring A related esowiki messages) myname: good choice int-e: (It keeps me sane. Well, saner.) myname: it's a shame, though myname: somebody with that amount of energy could contribute quite good stuff if he just joined the community ais523: Good morning and happy October. Say I have a semi-Thue grammar with the following property: for every word w, it is not possible to derive w in zero or more steps starting from w. Can such a grammar be Turing-complete? ← can't you just have every production add a junk element, together with extra productions to swap the junk element to ais523: the end of the memory space? ais523: then a perfect loop is always impossible because there's a total ordering on possible memory spaces that you can never move backwards through, and yet the computational class isn't affected at all int-e: Oh I missed an easy string rewriting question with antique terminology ;) ais523: semi-Thue grammars are more interesting than straightforward rewriting cpressey: ais523_: Probably. I later thought of it as being equivalent to a Tag system whose queue never shrinks and always eventually grows. I think it can still be TC because you can map a "nop" in the TM to an infinite number of states of the Tag system. ais523: they're nondeterministic in the mathematical sense: whenever there are multiple rewrites possible, they always pick the one that makes the program not halt, if possible ais523: unfortunately, the esolang Thue derived from them missed that notion of "nondeterministic" and it's been a pain to clarify what's meant ever since int-e: ais523_: string rewriting systems *are* semi-Thue systems. int-e: With non-determinism and everything. ais523: int-e: well you can have a string-rewriting system with a deterministic rule for where to replace ais523: I think that'd fail to meet the definition of a semi-Thue system int-e: ais523_: Sure, that would be imposing a strategy. int-e: (a deterministic strategy) ais523: there are probably rewriting systems that are TC with a left-first imposed strategy but sub-TC when evaluated mathematically-nondeterministically ais523: (I remember oerjan's proof that Fractran is sub-TC if you evaluate the program in a random order rather than left to right) cpressey: The lambda calculus *per se* doesn't specify a strategy either. To me, it feels a lot less like a programming language that way, a lot more like a proof system. ais523: typed lambda calculus is confluent int-e: ais523_: Well, when I say "rewriting system" there's no strategy by default. ais523: untyped lambda calculus "feels" confluent to me in some generalized sense, but I'm not sure how to define it int-e: (I've worked in term rewriting for 8 years. I can't help using the terminology.) cpressey: Pretty sure untyped \c is confluent too, but I may be misremembering ais523: fwiw, the details of the evaluation strategy are pretty relevant in some cases; it was one of the more interesting (and arguably solvable) problems to come out of the work into Feather ais523: the question being, can you write a lambda-calculus-with-continuations-like language which admits a self-interpreter with eigenratio 1 (without cheating) int-e: ais523_: untyped lambda calculus (with beta reduction and alpha conversion, and possibly eta reduction) is confluent... what's your trouble with defining that? int-e: ais523_: It gets murky if you don't have explicit alpha conversion... then it becomes confluent modulu alpha conversion. ais523: the main issue in the naive way of doing it is that you can have terms like (\x.\y.y)((\a.a(a))(\a.a(a))) int-e: modulo. ais523: this is not an infinite loop, but it's easy to get stuck in one if your evaluation order is wonky ais523: (in Unlambda, ``ki```sii``sii: wow, this may be a case where the Unlambda is easier to read than the lambda calculus version…) int-e: confluence just means that if there are reductions s ->* t and s ->* u from a term s then there are further reductions to a common term v: t ->* v and u ->* v ais523: actually it's non-obvious to me how you define confluence in a language which has infinite loops int-e: confluence doesn't rely on normal forms in any form or shape ais523: this is may-equivalence, right? i.e. if there's at least one reduction from s to t, and at least one from s to u, there's at least one from t to v and at least one from u to v int-e: sure, reduction is non-deterministic. ais523: the issue with may-equivalence is that although it's mathematically neat, very few languages work that way in practice (i.e. by effectively iterating through all possible evaluation orders) cpressey: Well, if their underlying model is confluent, they kind of don't have to... ais523: int-e: perhaps they're malbolge instructions ← those go backwards in asciibetical order, not forwards, also they're pretty easy to compress by normalizing and then compressing that int-e: ais523_: You usually don't care about confluence either. You care about related properties like uniqueness of normal forms (a ->* b and a ->* c with b and c in normal form implies b = c (modulo alpha, probably)) ais523: Well, if their underlying model is confluent, they kind of don't have to... ← the whole issue is that the implementations have a tendency to get stuck in a loop that the language semantics can break them out of, but the choices of the interpreter don't let them ais523: perhaps you could use an entirely random evaluation order to prevent ever getting stuck in a local minimum, but I suspect that would lead to memory leaks and the like that would mean that a self-interpreter would necessarily fail on some programs int-e: ais523_: it did go backwards, and compression was quite good really... from 30MB to 1MB with xz isn't shabby at all (interestingly preprocessing made no difference at all). ais523: any compression algo that can work on digraphs will, when applied to Malbolge code, quickly realise that any particular character can only ever be followed by one of eight other characters ais523: so it'll effectively end up operating on a normalized-ish form anyway int-e: ais523_: I still expected a larger difference than a couple of hundred bytes (or maybe it was 1k). But I've deleted the file. Taneb: ...so a Malbolge program of length n has at most 3n + O(1) bits of information? ais523: assuming you don't exploit the bug in the parser that lets you sneak arbitrary data at the end of the code, yes ais523: it's actually 3n bits exactly, no O(1) needed Taneb: Ah, I wasn't sure if you were restricted which character you could start with or not ais523: (the O(1) shows up in practical compression algorithms because that's how much space they need to figure out/record the rules of Malbolge) ais523: incidentally, one day I decided to make a Stack Overflow account and answer a couple of Malbolge questions ais523: there aren't very many, though int-e: ais523_: Anyway, back to the previous topic, a rewriting concept that connects lambda calculus to implementations is that of a strategy -- which carves out a deterministic relation from the non-deterministic reduction ->. A strategy can be normalizing--meaning that if t has a normal form wrt. ->, then following the strategy will reduce to that normal form as well. There are even concepts like... int-e: ..."hyper-normalizing" where you can mix the strategy with the free rewriting relation -> and the normal form is guaranteed to be reached as long as you always eventually apply the strategy (as long as you haven't reached a normal form). This justifies compiler optimizations based on partial evaluation, that is, beta-steps on parts of a program. int-e: leftmost-outermost reduction is normalizing and unless I'm very much mistaken, hyper-normalizing. ais523: the ideal strategy for me would be normalizing in an even stronger sense: given two equivalent programs, applying the strategy to both would eventually reach the same form for both, and they would not thereafter diverge ais523: however, I believe that's impossible due to Rice's theorem ais523: (or more directly the halting problem) ais523: something less strong than that, which might be achievable: a self-interpreter which, given any program's source code, eventually optimizes/specialises itself into an internal state that could have been reached by running the program directly int-e: Right, you would be able to decide whether a lambda term reduces to I. ais523: I think the self-interpreter could maybe be made to work using a "compile then execute" strategy ais523: you could do it in an Underload-like language which had some reasonable form of input, I think, simply by using * and a and friends to construct a program using composition and quoting, and then finally evaluating the constructed program as the last thing it did ais523: trying to do it without metacircularity would be much harder, though cpressey: int-2: When you program in a functional programming language but you treat it like a rewriting language (like what Haskell calls "equational reasoning"), I think that thinking about whether your functions terminate is closely related to thinking about confluence. cpressey: (That was addressed to int-e, obviously) int-e: cpressey: not sure I agree cpressey: Well, perhaps not. I've been meaning to try programming more in languages actually built around rewriting (Pure and Maude particularly) to refine that idea. int-e: hmm Pure (I've heard of Maude) cpressey: Which is actually why I was looking up This=That on the esowiki... I thought it was a fairly simple "equational rewriting" language. But, apparently I misremembed. int-e: the rewriting based formalism I've actually used intensively is the simplifier in Isabelle/HOL. int-e: (but that's not meant to be a programming language) int-e: Pure looks cute at a glance, actually. int-e: (Maude otoh looked intimidating when I tried to figure out what it is and I still don't really know what it is, except something yadda yadda rewriting blah) int-e: By which I mean to say that I got scared away, but I don't know whether I'm actually justified in being scared. cpressey: I first saw Maude about a decade ago, was very interested but never actually wrote anything in it, and only recently realized it is the way it is because it comes from a tradition of algebraic semantics, which is rather obscure. cpressey: Operational semantics, denotational semantics, and axiomatic semantics walk into a bar... int-e: Is that an actual joke. cpressey: Not yet it isn't. cpressey: Maybe someday. myname: go make it one myname: are there semantics that deal with endless loops in a meaningful way? int-e: myname: Pure semantics: use bottoms. For impure languages you can produce a stream of observations. int-e: (In a way, pure languages are those languages where infinite loops have no meaning.) int-e: cpressey: oh wow, https://github.com/agraef/pure-lang/wiki/Rewriting#further-information has a whole list of other languages int-e: (And the two standard textbooks on term rewriting. Yay. I feel right at home.) cpressey: I've read Baader & Nipkow (a long time ago), not Terese though. int-e: Terese is more of a handbook than a textbook anyway. int-e: (So it makes more sense to study a chapter than to study the whole book.) cpressey: hi kspalaiologos wib_jonas: one of my wisdoms spawned a discussion about algebra? this is new HackEso: ​? ¯\(°​_o)/¯ int-e: `wisdom HackEso: ​photograph//A photograph is a device for creating photograms. wib_jonas: " int-e: well you can have a string-rewriting system with a deterministic rule for where to replace" => such as sed or 1.1 kspalaiologos: I didn't realise extending logical cells for brainfuck had such impact kspalaiologos: can you recommend me decently fast Brainfuck interpreters that I can incorporate into my project? kspalaiologos: I'm looking mostly for MIT and Apache2 stuff because GPLv3 virus seems risky, lol myname: uh, those aren't usually hard to write fast kspalaiologos: myname, I've made a tool to extend logical cell size for Brainfuck basically myname: what do you mean by logical cell size kspalaiologos: so basically kspalaiologos: two cells are treated logically as one kspalaiologos: but physically, they are two separate cells myname: why though kspalaiologos: to get bigger range on numbers that can be stored Taneb: So, given a Brainfuck program that requires 16 bit cells, you can transform it to a program which requires 8 bit cells? wib_jonas: " are there semantics that deal with endless loops in a meaningful way?" => see https://esolangs.org/wiki/(0) , which deals with infinite loops, but not really endless ones (except by making them end) myname: well, depending on your interpreter, numbers can be arbitrarily big kspalaiologos: Taneb, yes. kspalaiologos: myname, it depends on the interpreter, so its not portable wib_jonas: It can deal with infinite loops of any loop count though kspalaiologos: if host interpreter uses 16-bit cells you can detect it kspalaiologos: and pass the correct code wib_jonas: Of course that makes it not implementable on a computer, but real computers can't even deal with sequential loops of length 2**64 or distributed parallel loops of length 2**256, so that's to be expected myname: i'd say: just write an interpreter in your favourite language of sufficiently low level cpressey: kspalaiologos: fwiw, a github search for "fastest brainfuck interpreter" yielded this: https://github.com/barracks510/bfc cpressey: (Apache-2.0 license) myname: i guess most performance issues come from the data structure used for the tape wib_jonas: nah, if it's advertised as "fastest" on the web then it likely isn't myname: an array is nice if you don't have to grow it too often, a linked list might be slower on shorter programs kspalaiologos: no just in time compilation -> garbage kspalaiologos: I've tried Tritium interpreter by rdebath(?) kspalaiologos: and it just turned out to be slower than mine moderately-optimizing one myname: just in time compilation for brainfuck? really? myname: i wouldn't be surprised if nobody ever did that myname: i mean, we used to write a small interpreter for brainfuck at university and even the stupid solutions did anything i throw on them pretty much instantenious kspalaiologos: https://github.com/rdebath/Brainfuck/tree/master/tritium kspalaiologos: just in time compilation kspalaiologos: DYNASM kspalaiologos: nasm target kspalaiologos: gnu lightning, openssl kspalaiologos: libtcc backend kspalaiologos: debugging, profiling and tracing kspalaiologos: I've personally discovered this interpreter when I needed something fast for my C compiler targeting brainfuck kspalaiologos: but it turned out to be too slow to meet my requirements kspalaiologos: even myself I've made a Brainfuck just-in-time compiler, it's not that uncommon thing kspalaiologos: the C output is very high grade in my opinion zzo38: I have downloaded the most recent Magic: the Gathering rules. zzo38: (I should perhaps convert all of them to the same canonical ASCII format, so that they can then be compared properly.) b_jonas: zzo38: I convert them to utf-8. b_jonas: without carriage returns b_jonas: `cat share/mtg/rules.txt HackEso: ​Magic: The Gathering Comprehensive Rules \ \ These rules are effective as of October 4, 2019. \ \ Introduction \ \ This document is the ultimate authority for Magic: The Gathering® competitive game play. It consists of a series of numbered rules followed by a glossary. Many of the numbered rules are divided into subrules, and each separate rule and subrule of the game has its own number. (Note that subrules skip the letters “l” and “o” du b_jonas: ``` grep -w Noble share/mtg/rules.txt HackEso: 205.3m Creatures and tribals share their lists of subtypes; these subtypes are called creature types. The creature types are Advisor, Aetherborn, Ally, Angel, Antelope, Ape, Archer, Archon, Army, Artificer, Assassin, Assembly-Worker, Atog, Aurochs, Avatar, Azra, Badger, Barbarian, Basilisk, Bat, Bear, Beast, Beeble, Berserker, Bird, Blinkmoth, Boar, Bringer, Brushwagg, Camarid, Camel, Caribou, Carrier, Cat, Centaur, Cephalid, Chimera, Citizen, Cleric, Cock shachaf: `doag share/mtg/rules.txt HackEso: 11957:2019-10-01 ` set -e; cd share/mtg; tr -d \\\\r rules.txt \ 11956:2019-10-01 ` set -e; cd share/mtg; tr -d \\\\\\\\r rules.txt \ 11833:2019-06-13 `` set -e; cd share/mtg; tr -d \\\\r rules.txt \ 11701:2019-01-26 `` set -e; cd share/mtg; iconv -f cp850 -t utf-8 MagicCompRules_20190125.txt | tr -d \\\\r > rules shachaf: `doag share/mtg/MagicCompRules_20191004.txt HackEso: 11955:2019-10-01 fetch share/mtg/MagicCompRules_20191004.txt https://media.wizards.com/2019/downloads/MagicCompRules%2020191004.txt shachaf: Is there a reason not to do that in the channel? b_jonas: shachaf: I did that in the channel b_jonas: as far as I recall shachaf: Oh, you did. shachaf: Never mind. zzo38: I prefer ASCII without carriage returns; it would help when there was one with PC character set once, it will ensure all of the quotation marks match shachaf: But how will you return the carriage without carriage returns? arseniiv: manually zzo38: If send to a printer then the carriage return will be added to return the carriage. arseniiv: (I’ll show myself out, it’s just the right time) b_jonas: shachaf: we convert the file before sending it to the printer. b_jonas: also, we don't print the comp rules. it would be a waste. it changes like five times a year and it's a hundred pages long. b_jonas: wait wait zzo38: Print only the pages that are changed. b_jonas: zzo38: Throne of Eldraine has a sorcery card with rules text including "Then those creatures fight each other." Does that effectively mean that they fight twice, as in the first creature fights the second than the second fights the first, fight being commutative? zzo38: I think just once. b_jonas: the wording is odd zzo38: "701.12a. A spell or ability may instruct a creature to fight another creature or it may instruct two creatures to fight each other. Each of those creatures deals damage equal to its power to the other creature." zzo38: Yes, I agree the wording is odd, but rule 701.12a seems so say that it is just once even if it says "each other" b_jonas: ``` grep -Ei "fight each other" share/mtg/rules.txt HackEso: 701.12a A spell or ability may instruct a creature to fight another creature or it may instruct two creatures to fight each other. Each of those creatures deals damage equal to its power to the other creature. b_jonas: I wasn't aware of the alternate template b_jonas: perhaps because it's a red thing b_jonas: let me do a card search b_jonas: yeah, looks like a red thing zzo38: I thought of if I make the new TeXnicard, to make a format for sending changes to the database, with Unusenet, so that you can do collaboration if wanted. zzo38: (You could just as well transfer the change files by email or on a floppy disk or paste bin, too, if wanted) oerjan: @tell kspalaiologos https://github.com/rdebath/Brainfuck/tree/master/tritium <-- rdebath is definitely the guy in the community to ask about BF interpreter comparison lambdabot: Consider it noted. oerjan: wait, too slow? i'm shocked int-e: . o O ( "didn't manage to reconstruct original C code from compiled code" ) int-e: morning oerjan: morning imode: I wanted a way to speed up my interpreter to avoid making scans everywhere. so, I'm sketching out something that takes two files: the code you want to run, and an optional compiled jump table. imode: the compiler for this jump table just analyzes the source and keeps track of where matching brackets are for any loops and breaks within those loops. imode: "if you are at address X, jump to address Y if you are any kind of control flow operation." imode: this is substituted in for the traditional bracket/scan based approach. imode: you can also form this kind of jump table on the fly via caching. imode: what's also nice is that you can essentially define segmented executables with this. if the interpreter tries to run a commented section, for example, you can just say "at this instruction (start of a comment), jump to the end of a comment." imode: the base command set (which is [,.:;$+-=<~&?01]) can fit inside of a 4-bit value. imode: which is great. code can remain ultra-compact while remaining fast. imode: the 'or' operator can be defined as :$&$~$\$$\$:$&$~$&$~$ imode: ,$1,$ :$&$~$ \$$\$ :$&$~$ &$~$ yields "1". kmc: what lang is this? imode: my own. named Mode. int-e: imode. mode. ode. de. e. . imode: an ode to mode by imode. int-e: just have to deal with Apple if this ever becomes a success imode: apple has a language called Mode? imode: (also here's an interpreter: https://hatebin.com/qolqoghzzf) int-e: imode: I meant the 'i'. imode: haaah. imode: the iMode, an enterprise-scale language. the implementation only runs on an aluminium cube, which is shipped to you in a puzzle case. imode: here's what hello world looks like: ,$1001000,$1100101\$$\$,$1101100\$$\$,$1101100\$$\$,$1101111\$$\$,$101100\$$\$,$100000\$$\$,$1110111\$$\$,$1101111\$$\$,$1110010\$$\$,$1101100\$$\$,$1100100\$$\$,$100001\$$\$,,:$[':$].. imode: provided you add ' as an action. imode: on to bed. cheers. kspalaiologos: I've been improving the Brainfuck assembly later kspalaiologos: *earlier kspalaiologos: Added an arithmetic rotation (left and right) kspalaiologos: And logicizing values (x>1 x=1, x=0 x=0) kspalaiologos: Have you got any nice ideas to implement? kspalaiologos: I'm already working on getting the dynamic registers out of beta myname: the main idea for brainfuck is to have as few commands as possible kspalaiologos: I'm talking about my assembly targeting train duck kspalaiologos: F*ck autocorrect kspalaiologos: Meant brainfuck patologios: 1,8javascript patologios: The best esoteric language patologios: kspalaiologos hi javascripter patologios: 1,8JS patologios: 1,8JS1,8JS1,8JS1,8JS1,8JS1,8JS1,8JS1,8JS1,8JS1,8JS1,8JS1,8JS patologios: 1,1JS 1,1JS 1,1JS 1,1JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEBAĆ SZEWCZYKS patologios: JEBAĆ SZEWCZYKA XD patologios: TYLKO 12REACT.JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEBAĆ SZEWCZYKA JEBAĆ SZEWCZYKA patologios: JEBAĆ BRAINFUCK patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA int-e: `? fungot fungot: int-e: it's not quite that either. you can ignore that if you haven't HackEso: fungot is our beloved channel mascot and voice of reason. int-e: `thanks fungot fungot: int-e: it's only hard because there are just different syntax from what i understand HackEso: Thanks, fungot. Thungot. kspalaiologos: What in the name of god kspalaiologos: How did this abomination join irc kspalaiologos: There are so many haters stalking me int-e: kspalaiologos: Hmm, have you spoken out against ECMAScript in the past? kspalaiologos: I'm a very controversive person kspalaiologos: I have pooped on ECMAScript in every possible way by now. patologios: Patologios! patologios: kspalaiologos: geju patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: kspalaiologos: we all know you are a skid patologios: ur editor is a copy paste lf94: patologios: what editor? patologios: kspalaiologos: javascripter lf94: patologios: also your spam affects more than him :) patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS int-e: lf94: even those who ignore patologios, apparently :-( lf94: are they a bot or?... patologios: use more patologios: use node.js lol patologios: brainfuck sucks patologios: and Szewczyk has big gay lf94: it isn't great, yeah. int-e: who knows or cares... at least until one of our ops intervenes. lf94: /ignored I guess :p patologios: How do I use IRC patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS lf94: Wow, weechat ignore system is pretty good patologios: Szewczyk się gejuje z Orłowem patologios: @everyone lambdabot: Unknown command, try @list lambdabot: What module? Try @listmodules for some ideas. patologios: @listmodules lambdabot: activity base bf check compose dice dict djinn dummy elite eval filter free fresh haddock help hoogle instances irc karma localtime metar more oeis offlineRC pl pointful poll pretty quote search lambdabot: slap source spell system tell ticker todo topic type undo unlambda unmtl version where patologios: @elite lambdabot: Say again? lf94: n> hello patologios: @poll gay gay gay lambdabot: Maybe you meant: poll-add poll-close poll-list poll-remove poll-result poll-show roll patologios: @karma lambdabot: You have a karma of 0 patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: PEDZIOLOGIOS BRAINFUCK DEVELOPMENT patologios: WIDZICIE TO KURWA? XD patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: KRZYSZTOF PATOLOGIOS SZEWCZYK CHUUUUUUUUUUUUJUUUUUUUUUUUUU patologios: NPM INSTALL IS-ODD patologios: NPM INSTALL IS-ODD patologios: NPM INSTALL IS-ODD patologios: NPM INSTALL IS-ODD patologios: NPM INSTALL IS-ODD patologios: NPM INSTALL IS-ODD patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: I WILL HACK YOU patologios: HACKING IN PROGRESS patologios: HE HAVE NO BRAIN patologios: HE HAVE BRAINLET patologios: XDDDDDDDDD patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: PESTYCYDY patologios: PESTYCYDY patologios: AUUUUUUUUUUU patologios: AUUUU AUUUU patologios: kspalaiologos: kochanie odezwij się patologios: misiaczku patologios: KURWO I SZMATO XD patologios: JOT ES JOT ES patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: AUUUUUUUUUUU patologios: AUUUU AUUUU patologios: nigger patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: XDDDDD kspalaiologos: My editor is an improved version of kilo patologios: O CZEŚĆ SZEWCZYK patologios: TĘSKNIŁEM ZA TOBĄ kspalaiologos: I have stated it even in the readme patologios: KIEDY ZACZNIESZ PISAC W JS patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: PIERDOL BRAINFUCKA patologios: BIERZ VUE patologios: NPM INSTALL IS-ODD patologios: NPM INSTALL IS-ODD patologios: NPM INSTALL IS-ODD patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS kspalaiologos: Ops please do something patologios: CO TY MI SIĘ TAK TU SPINASZ KOCHANIE patologios: SZEWCZYK CHUUUUUUUUUUUUJUUUUUUUUUUUUU patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA int-e: ... children these days patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS kspalaiologos: My crappy irc client is unable to ignore someone ehhhh patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA int-e: Time to get a better IRC client then. :) kspalaiologos: Oh cmon my logs repo is going to fill with that shit patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA kspalaiologos: int-e, i'm on mobile rn patologios: NOSZ KURWA patologios: KRZYSIU kspalaiologos: I'm using xchat on main PC patologios: DLACZEGO JESZCZE NIE PISZESZ W JS KURWA patologios: JEBAĆ ZBA patologios: JEBAĆ ZBA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JAVASCRIPT patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JAVASCRIPT patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS kspalaiologos: Irc was meant to be a chat for intellectuals patologios: POZDRAWIAJĄ NASTOLETNI.PL patologios: JAVASCRIPT TO JĘZYK DLA INTELEKTUALISTÓW patologios: BRAINFUCK JEST DLA DEBILI XD patologios: PO CHUJ JA TU SIEDZĘ? patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: C TO CZYSTY HOMOSEKSUALIZM patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: BRAINFUCK TO CIOTA I CHUUUJ patologios: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS patologios: kspalaiologos: kotku patologios: Odezwij się patologios: zasmuciłes mnie patologios: a chciałem iść z tobą do łóżka ais523: patologios: please don't spam the channel patologios: I don't spam anything lol ais523: yes you do patologios: what is spam kspalaiologos: Go spam ##C or #programming instead patologios: but kspalaiologos: is gay kspalaiologos: These welcome guys will teach you kspalaiologos: Anonimity of irc is a bless and a plague kspalaiologos: In the same time, of course int-e: "mixed blessing" is the term patologios: kspalaiologos: dodaj mnie na ZBA chuju patologios: czemu mnie wyjebales ais523: patologios: this channel's meant to be for discussion of esolangs, especially group discussion; that means that it's best for conversations to be a) ontopic and b) in a language that most of the channel will be able to understand ais523: we're often tolerant of deviations from this for people who have made a lot of positive contributions, but as far as I can tell you haven't made any patologios: ¯\_(ツ)_/¯ imode: ban him already. imode: why tolerate obvious spam. int-e: imode: If it works then this can avoid an endless struggle of banning and ban evasion. imode: been thinking of a macro syntax to add as an interpreter extension. you could write {:} to store a segment of code you want to attach to an alias, and () to unpack that segment of code in-place. imode: multiple patterns can be chained together as spaces. imode: so (foo bar baz) performs multiple insertions. imode: (foo)(bar)(baz) is also an option. more typing though. arseniiv: @ask imode when you defined graph rewriting rules, did you meant we could glue vertices together (which could be written as V1 = V2 in LHS for V1, V2 occurring in LHS)? lambdabot: Consider it noted. b_jonas: `echo o1lQfIMraSsc HackEso: o1lQfIMraSsc kspalaiologos: I've added arithmetic shifts to my brainfuck assembly kspalaiologos: reversal of two top elements from the stack kspalaiologos: to logic value conversion kspalaiologos: pretty useful stuff imo b_jonas: imode: just preprocess your source with https://esolangs.org/wiki/SIMPLE_(preprocessor) . You can change the special characters that it uses if you prefer curly braces to mark a macro call. kspalaiologos: link cut itself imode: well, the macro system works. imode: https://hatebin.com/lkszlrodkq imode: arseniiv: w.r.t graph rewriting you asked about earlier, it was more based around edge rewriting rather than vertex gluing. arseniiv: imode: I just thought vertex gluing is a natural addition to that arseniiv: more natural than vertex splitting (I don’t thing there could be the only one natural way to do so) imode: I should fix the macro system to handle nested macro defs. arseniiv: oh you can have a macro definition in another definition’s body? imode: that was the intention, yeah. arseniiv: hm macro switches..? arseniiv: ah never mind I wanted to say “conditional macros” imode: yeah you can define macros and apply them at runtime. there is an initial pass, though. imode: mainly so you can write things like (begin) ... (while) ... (repeat) without going into an infinite loop. imode: because (while) will resolve to a conditional check. imode: and will roll until it hits a ']'. imode: but since it doesn't encounter one.. it'll continue on forever. imode: the macro expander supports recusive macro expansion pretty easily. all it does is check for macro expansions (anything between '(' and ')'), and if it encounters a macro definition, it just jumps to the matching ')', saving all chars in between. imode: if it doesn't encounter a macro definition, it expands in-place and seeks to the beginning of the expanded macro. imode: it's why (0:,$)(1:,$1)(begin:(1)[)(while:?)(repeat:(1)])(begin)(0)(while)(1)(repeat) works. imode: and reduces to ,$1[,$?,$1,$1] imode: another method (which may seem a little better) is to split the whole source into tokens, and inspect each token to see if it's the start of a definition, an existing definition, or a chunk of code. imode: but eh. imode: this thing is already 243 lines. imode: now to figure out how to do if/else chains... b_jonas: imode: just use an existing preprocessor that is already known to be able to do any computation and is hard to use in an esoteric way, like SIMPLE b_jonas: don't reinvent the wheel imode: how about no. imode: mine works fine. imode: https://hastebin.com/oruziketal.txt imode: primitives work. imode: honestly I'm about ready to go to a token-based preprocessor. imode: it requires a little more work. but it might be better...? oerjan: kevyn's learning fast oerjan: looking at the logs, i sense an int-e shaped gap in our op timezone coverage. oerjan: hm all freenode staff are also minor ops here nodejsfan: Hi, my name is Kamila Szewczyk and I'm a node.js programmer new into esoteric language programming nodejsfan: where do I start? Hooloovo0: that's a good question nodejsfan: 0,4npm install is-odd nodejsfan: most esoteric thing Hooloovo0: the first I heard about esolangs was via the ioccc nodejsfan: lemme Google Hooloovo0: international obfuscated c code competition or something like that Hooloovo0: shortly after that, there were a couple people who were competitive in code golf, so I learned about a couple of those languages, and started browsing the wiki int-e: nodejsfan: welcome back, but you're still off topic. Hooloovo0: my favorite language specification is INTERCAL's int-e: `relcome nodejsfan HackEso: ​02nodejsfan: 06Welcome 13to 04the 07international 08hub 09for 02esoteric 06programming 13language 04design 07and 08deployment! 09For 02more 06information, 13check 04out 07our 08wiki: 09. 02(For 06the 13other 04kind 07of 08esoterica, 09try 02#esoteric 06on 13EFnet 04or 07DALnet.) Hooloovo0: if you understand INTERCAL's specs, you will go far nodejsfan: oj god Hooloovo0: I mean, the reasoning behind the specs int-e: for a non-standard value of "reason" int-e: "let's make this weird" Hooloovo0: this is the right verson of the manual: https://www.cs.virginia.edu/~asb/teaching/cs415-fall05/docs/intercal.pdf Hooloovo0: it was hard for me to find it... it is a legendary document which should be on the wiki Hooloovo0: hmm, not sure I have an account int-e: Hooloovo0: we can't put that on the wiki Hooloovo0: why not? int-e: Because for the wiki, "Content is available under CC0 public domain dedication." Hooloovo0: there should at least be a link to it int-e: A link is fine of course. int-e: Sorry if that's what you meant. Hooloovo0: to me, that's the most iconic document describing what intercal means Hooloovo0: like, you can give a technical language description, but esr's doesn't have the circuitous diagram Hooloovo0: huh, apparently I already have an account under Hooloovoo :/ not sure if I made any edits with it Hooloovo0: I mean, I think it was me who was hanging around the IRC channel for way too long before making an accoung Hooloovo0: account even oerjan: no edits other than the introduction Hooloovo0: yeah, not sure what happened kspalaiologos: I'm thinking about floating point Brainfuck emulation kspalaiologos: Do you have any simple to implement ideas? kspalaiologos: IEEE will take up a lot of space kspalaiologos: So I need something simple, but full featured kspalaiologos: Addition and subtraction that is kspalaiologos: I'd like to store it in possibly two digit format kspalaiologos: (cells) kspalaiologos: Where first cell represents data after the point, and the second represents data before the point kspalaiologos: Yet, won't the operations take insane amount of time? rain2: you could do 3 bit floats kspalaiologos: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS kspalaiologos: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS kspalaiologos: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS kspalaiologos: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS kspalaiologos: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS kspalaiologos: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS kspalaiologos: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS kspalaiologos: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS kspalaiologos: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS myname: js ist nicht so geil Taneb: kspalaiologos: you forgot to switch account before spamming kspalaiologos: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS kspalaiologos: exposed kspalaiologos: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS myname: i don't get spammers myname: but i sure as hell love my anti spam script kspalaiologos: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS kspalaiologos: It's awesome kspalaiologos: 0,12TS > 1,8JS kspalaiologos: 0,12TS > 1,8JS kspalaiologos: FLASH UBER ALLES kspalaiologos: EVERYTHING SHOULD BE WRITTEN USING C kspalaiologos: FUCK JAVASCRIPT kspalaiologos: I LIED kspalaiologos: DELETE JAVASCRIPT kspalaiologos: FUCK BRENDAN EICH kspalaiologos: HE'S SUCH A NIG GER kspalaiologos: AND FACIST kspalaiologos: AND NAZI kspalaiologos: EVERY SITE SHOULD BE CREATED USING ADOBE FLASH kspalaiologos: AND BE COMPATIBLE WITH INTERNET EXPLORER kspalaiologos: 0,5fffffffffffffffffffffffffffffffffff kspalaiologos: 0,5HEIL ADOBE FLASH kspalaiologos: 0,5HEIL ADOBE FLASH kspalaiologos: 0,5HEIL ADOBE FLASH kspalaiologos: 0,5HEIL ADOBE FLASH kspalaiologos: 0,5HEIL ADOBE FLASH kspalaiologos: 0,5HEIL ADOBE FLASH kspalaiologos: 0,2HEIL C, C++ SUCKS kspalaiologos: 0,2HEIL C, C++ SUCKS kspalaiologos: 0,2HEIL C, C++ SUCKS kspalaiologos: 0,2HEIL C, C++ SUCKS kspalaiologos: 0,2HEIL C, C++ SUCKS kspalaiologos: 0,2HEIL C, C++ SUCKS kspalaiologos: 0,2HEIL C, C++ SUCKS kspalaiologos: SCRIPT kspalaiologos: FAGGOTS! kspalaiologos: FUUUUUUUUUCK JS myname: as is brainfuck kspalaiologos: BRIANFUCK IS THE ONLY GOOD TECHNOLOGY FOR WEB APPS kspalaiologos: My brainfuck compiler emits 30x faster code than V8 fizzie: I know it might just lead to ban evasion, but I guess we might just need to do it. Even if the content is kind of just on the borderline of being relevant, the presentation is just too spammy. kspalaiologos: JavaScript engines are god damn slow int-e: fwiw I think what's happening here right now is a case of impersonation. kspalaiologos: Someone hacked my account fizzie: A nickname isn't really an "account". myname: int-e: why do you think so? int-e: we might consider +R, but meh fizzie: myname: Probably because this new "kspalaiologos" has a different user@host mask, and hasn't registered to services, unlike the previous one. myname: ah, i missed a part then fizzie: int-e: Yeah, maybe they'll just get bored? I'd really rather not play this game. rain2: kspalaiologos: not spam pls kspalaiologos: I forgot my password myname: you forgot how to not be an idiot kspalaiologos: https://github.com/kspalaiologos/asmbf kspalaiologos: god this thing is so awesome kspalaiologos: For most of you it will take years to write something like that lol kspalaiologos: I'm the best programmer in this world haha kspalaiologos: what y'all doing rain2: learning galois theory wib_jonas: fizzie: and uses "~androidirc" as the user part of their hostmask just like the previous spammer. they forgot to change it to "kspalaiol". not that it would change much. arseniiv: shame the real one’s stalked by such an obstinate person wib_jonas: arseniiv: look at it from the other way. this channel rarely has moderation problems other than me. arseniiv: no one deserves such treatment, I think even if they killed many people arseniiv: wib_jonas: do you think to have moderation problems is fun? :) eh. Maaaayyybe. In a low dosage, not that much, it just gets annoying instead and stays here due to hysteric^W hysteresis wib_jonas: no, I'm not saying that it's fun wib_jonas: I'm saying that, in general, it's good to participate in a channel that has a nice community and not much mod'ion problems, this is just a rare exception arseniiv: hysteresis is a neat word and it’s connected with a beautiful picture of that fat S-like region arseniiv: wib_jonas: ah, yes, I agree wib_jonas: not for me. I connect it with digital histeresis, with an analog input, binary output, and two thresholds for switching the output on and off. no S-like curve arseniiv: (↑↑ and before this moment, I didn’t really think hysteria could have something in common with hysteresis) wib_jonas: I found out that in firefox and in windows file explorer, with the english localization, both control-L and alt-d focuses the address bar. (Previously I only knew about control-L, as well as the usual windows thing of cycling among focusable regions with F6.) This must be another of the fallouts of browsers imitating both MSIE and Netscape, like F5 wib_jonas: versus control-R. int-e: Do black holes suffer from mass hysteria? arseniiv: wib_jonas: it would just be a digital S (hehehe bad pun day, it’s that bad it’s not even a pun in a strict sense, just a connection of polygonal chains with something machine-made, and in latter years, digital) _|¯ _|¯ _|¯ arseniiv: int-e: that’s the real cause of Hawking radiation int-e: arseniiv: nice! arseniiv: BTW had anyone some trouble to comprehend why on earth sigmoid is called that? I think all of Σ, σ and ς are further from that curve than a plain S arseniiv: maybe final sigma ς suffices, but still S is more canonical, it does even have the same symmetry as sigmoid wib_jonas: arseniiv: it can be a latin S, but called "sigma" in a fancy way. you can use the phoenician-origin names for latin letters too, even if they're most commonly used with the greek or hebrew letters. wib_jonas: I mean, sometimes it's handy to have two sets, to make it easier to read formulas out loud and distinguish greek letters wib_jonas: hmm... maybe for esotericness, we could even use the unrelated name series that's normally used for futhark runes, or the series for tengwar letters arseniiv: esotericness, esotericity, esoterism, esoterié? arseniiv: (totally out of my depth with diacritics on the last one, but it seems look nicer that way?..) arseniiv: `? diacritics HackEso: diacritics? ¯\(°​_o)/¯ arseniiv: `? diacritic HackEso: diacritic? ¯\(°​_o)/¯ wib_jonas: we call them "things on top of letters" arseniiv: like, it’s a literal translation? HackEso: A is one of seven villages in Norway. The BBC invented them by not understanding things on top of letters. HackEso: wisdom/örjan? ¯\(°​_o)/¯ HackEso: ​Örjan is the diæresed twin. He will punctuate your vöẅëls, and maybe a few other unsuspecting letters. arseniiv: wait shouldn’t that been ø arseniiv: kspalaiologos: don’t facepalm logreading but that person stole your nickname and wrote things for a while wib_jonas: `? œrjan HackEso: ​œrjan is oerjan and ørjan's superhero third cousin (once removed) from Québec. He got his cheesy powers by falling into a giant poutine bowl. kspalaiologos: I'll read this kspalaiologos: Anyway arseniiv: He got his cheesy powers by falling into a giant poutine bowl. => seems like an Obélix allusion at the same times arseniiv: time*, how did that s got there kspalaiologos: Sure, I've got to be the one to be blamed arseniiv: is there a simple mechanism to reserve the nickname somehow? besides password? (I don’t remember how long it is before one is kicked out when not entering it) arseniiv: because if there’s none, it’ll be weird to blame you not being prepared for, erm, that shouldn’t even happen to anyone arseniiv: BTW there are at least seven wisdom *rjans :o wib_jonas: arseniiv: there sort of is, but in this case it doesn't matter, a spammer could just use another similar nickname then wib_jonas: we can't reserve all or most nicknames since freenode supports nicks of length up to 15 arseniiv: hm but for example I bet you don’t trust much when someone writes from a similar nickname, if you notice the difference early on arseniiv: ah! an impostor! wib_jonas: arseniiv: you mean like oren vs oerjan, or web_jonas vs wib_jonas, or HackEgo vs HackEso? arseniiv: well, I do actually know oren is not a misspelling of oerjan :) and that HackEgo is an archaism wib_jonas: ``` set -e; cd wisdom; echo *rjan; cat owrjan HackEso: boorjan oerjan owrjan sewerjan typoerjan örjan ørjan œrjan אrjan \ owrjan is oerjan's wise twin. wib_jonas: an archaism? now that makes me feel old. arseniiv: and I remember to not trust any of your prepended variants too much too :P wib_jonas: and of course, whoever reincarnates HackEso the next time may choose to call it HackEvo or HackEto or HackEdo or HackElo or HackEmo or HackEro etc Taneb: wib_jonas: we can work out which is the best with some sort of HackElo rating arseniiv: it’s already suspicious you mentioned yourself here! I bet you are not you. And IP is all wrong, it should contain more 2’s arseniiv: wib_jonas: ^ wib_jonas: `? orjan HackEso: orjan? ¯\(°​_o)/¯ kspalaiologos: Shalln't we make this server require registration arseniiv: HackEto seems multilingually slavic, like “hack it/this” arseniiv: I have messaged my underscored alter-eto by lambdabot and are still waiting when I’ll forget about that and ultimately read that and surprise myself arseniiv: half a year ago by now, I think arseniiv: that you get when you get too convoluted izabera: does anyone have a mac? izabera: i need to run a super quick test with iterm2 and i have no access to it rain2: https://en.wikipedia.org/wiki/Algebraic_extension#Generalizations wow you can do galois theory for arbitrary theories not just fields rain2: what do you think abou this? rain2: https://arxiv.org/pdf/0909.4340.pdf rain2: please respond arseniiv: rain2: this looks like a neat thing! but alas almost out of my current interest rain2: what is your current interest arseniiv: (cont.) interests* and also I don’t know an ordinary Galois theory and so I would be a bad conversalist :D arseniiv: what is your current interest => hmm I don’t sure. I’m lazy :( rain2: what is it rain2: im learning galois theory arseniiv: what I could grab with one hand outstretched from my current position, so for example hm it’s hard to externalize what I want, maybe I don’t want anything arseniiv: I planned to read some things, though arseniiv: two articles on algebraic effects and also I wanted to watch a course on Clifford algebras and I can’t proceed with it all effectively arseniiv: last three days, I haven’t read a page from those, and I watched an intro of a completely different course, though by the same person arseniiv: I’m that unorganized :D arseniiv: ah also I re-listened to several old ATB albums to make several other things clear arseniiv: bon_somethingnas! ski: @messages-loud lambdabot: LKoen said 2h 7m 26s ago: I'm definitely memorising "nychthemeron" for future use LKoen: this word doesn't have an equivalent in French, according to wikipedia LKoen: which is very surprising as mostly all "greek" english words are also french, although usually with a different last syllable shachaf: `? @messages-loud HackEso: ​@messages-loud @messages-fond / @messages-flood @messages-bond // @messages-lousy @messages-sound / @messages-lost @messages-found // @messages-proud @messages-bold / @messages-good @messages-gold LKoen: but somehow reassuring because "nychthemeron" sounds unsettlingly like a very bad French insult ski: LKoen : in swedish it's just "dygn", which was why i was disappointed with not finding an english equivalent, for a long while ski: (and i think some other nordic languages, and also russian, has a word for it ?) ski: i remember having used "circadian cycle", for some time, but it's a bit awkward to say, and not completely accurate ski: anyhoo .. some months ago, my elder brother, who's a bit interested in calendars (having made many comparative tables and so, and e-mailed some experts, &c ..), mentioned the word to me, and i've been using it, ever since b_jonas: [ 340%4 j-bot: b_jonas: 85 HackEso: Twinkle, twinkle, little star! arseniiv: (and i think some other nordic languages, and also russian, has a word for it ?) => you mean, day and night, 24 hours? yeah, it has! Сутки (sutki), and I bet it’s not so formal as nychthemeron (it seems pretty uncommon). Though usually a word for “day” is used when it won’t make too much confusion, but I think this is the same for English too and I bet most languages. And is dygn not too formal in use, too? arseniiv: https://en.wiktionary.org/wiki/nychthemeron has mono-word translations into several other languages too, and it doesn’t have a mark how formal it is arseniiv: strangely, ↓ HackEso: Twinkle, twinkle, little star! arseniiv: but ∗ ⋆ ★ don’t have entries HackEso: ​✱? ¯\(°​_o)/¯ HackEso: ​✸? ¯\(°​_o)/¯ arseniiv: . o O ( `learn ☆★ Nychthemeron, also known as nightdayness ) HackEso: ​✳? ¯\(°​_o)/¯ b_jonas: ``` unidecode ✱; quote "very heavy" HackEso: ​[U+2731 HEAVY ASTERISK] \ 1333) `unidecode ⧸🙼 ​[U+29F8 BIG SOLIDUS] [U+1F67C VERY HEAVY SOLIDUS] it is with a very heavy solidus that i write to inform you that unicode has too many code points arseniiv: heavy asterisk is an asteroid b_jonas: and certainly not a _little_ star b_jonas: although I guess even little stars are very heavy arseniiv: twinkle twinkle Ceres Pallas Juno Vesta Hebe Iris arseniiv: hm I missed Astraea, didn’t heard about that one nor was it in the table arseniiv: these are numbered 1, 2, 3, 4, 6, 7, and Astraea is 5 arseniiv: and it would break the rhythm anyway arseniiv: lensing lensing compact star arseniiv: don’t you please come close to us arseniiv: ski: you don’t know for sure ski: "dygn" is not very formal, no. though "dag" is still probably more common (but not by that much, would be my guess) arseniiv: I may be a self-modifying bot written initially in a, let’s say, unlambda ski: you may be arseniiv: and can too! arseniiv: b_jonas is a bad influence, I’ll try to not discuss small planets too much b_jonas: does that mean a night-lover, or an alternate name for november? b_jonas: or maybe nicotine-lover imode: https://hastebin.com/cetacujate.txt LKoen: but sesquiannual definitely doesn't have a french equivalent LKoen: and that's worrying imode: https://hastebin.com/papomucuja.cpp final and full FizzBuzz in Mode. I think I'm done with this language. imode: it's interesting, it's a little less than convenient (but manageable), it's an older proof of concept brought to light. kspalaiologos: Someone really hates me imode: so, I have this piece of code that does pattern matching and construction for tuples. https://hatebin.com/iepdhihnii imode: if you have a variable that's not present in the bindings (generated from a match), it gets filled in with a unique value. imode: I have a hypothesis that because of this, and only this, that it's turing complete. imode: because I can construct an ever-expanding tape in both directions along with rules. imode: https://hatebin.com/oggcyfafzd imode: my question is, without this mechanism (which has implications regarding the uniqueness of the generated binding), is it still turing complete? imode: I don't see how it could be. if I treat the tuple store as a set rather than a bag, there's no way to generate unique tuples without explicitly listing them all. imode: if I treat it as a bag, then I could probably construct some sort of counter. zzo38: I wrote this list of ideas for the game; to see if they like or dislike them or can make variants of it to make a more surprise to me. https://arin.ga/JfMezt What is your opinion of this, please? Do you have any further ideas please? Lykaina: i can't make any sense of the irc program i wrote 10+ years ago Lykaina: it's 8 bash shell scripts, uses 100% cpu... Lykaina: all i know zzo38: You should write it to not use 100% CPU. Lykaina: it wasn't intentional zzo38: I use IRC program I wrote by myself. If I were writing it today though I probably would do some things differently, such as not using PHP (I didn't have anything better at that time). Lykaina: no idea how beetle (it's name) works. zzo38: Other than using 100% CPU, is it any good? Lykaina: i remember that it is, in a sense, multiple programs working as one. fizzie: I had an IRC thing (though I think it might've been an ircII script) that used 100% of CPU too, except it was on my ISP's shared shell server and got me shouted at. pikhq: *wince* fizzie: It wasn't a particularly large ISP. fizzie: They got acquired at least three levels deep, eventually. fizzie: Dystopia (the original ISP) got bought up by sci.fi, which merged with a bunch of others to join Saunalahti, which eventually ended up owned by Elisa. shachaf: If you want to define busy-beaver-style numbers in a way people will easily agree on, what computation system should you use? shachaf: The classic one with Turing machines has questions like whether the tape is double-sided, whether blank is a separate symbol, whether you count number of steps or output size, etc. shachaf: What's a sequence that grows as quickly as BB but can be defined unambiguously in one sentence? shachaf: I was thinking maybe somthing about the solution to a Diophantine equation of some size, but then defining the size of an equation is slightly awkward. pikhq: Hmm, tricky. I think the most important property for such a computation system (beyond being TC, of course) is being simple to state unambiguously. kmc: can you define something analogous to busy beaver machines with lambda calculus or combinators? shachaf: You can count the number of reductions or something. shachaf: Or just produce a large number. pikhq: Yeah, I guess a SKI combinator busy beaver makes sense kmc: B(n) = the maximum number of reduction steps to normal form for a combinator string of size n oerjan: even those cases still require you to define the syntax to measure size. kmc: but it's just a tree where leaves are labeled S or K, right? kmc: a binary tree oerjan: still more one way to count that :P oerjan: *+than kmc: but it should fit in one sentence kmc: which was the original goal kmc: if you have to define S and K then it'd be a bit of a run-on sentence but whatever oerjan: i hear there are entire books written as a single sentence, anyway. oerjan: it seems schlock isn't going to attempt communication at this time. oerjan: `dowg œrjan HackEso: 9196:2016-10-08 ` sed -i \'s/\\. h/. H/\' wisdom/\xc5\x93rjan \ 9195:2016-10-08 learn \xc5\x93rjan is oerjan and \xc3\xb8rjan\'s superhero third cousin (once removed) from Qu\xc3\xa9bec. he got his cheesy powers by falling into a giant poutine bowl. \ 9194:2016-10-08 learn \xc5\x93rjan is oerjan and \xc3\xb8rjan\'s superhero third cousin (once removed) from Qu\xc3\xa9bec. he got his cheesy powers by falling into a giant pou oerjan: `dowt œrjan HackEso: 9194:2016-10-08 learn \xc5\x93rjan is oerjan and \xc3\xb8rjan\'s superhero third cousin (once removed) from Qu\xc3\xa9bec. he got his cheesy powers by falling into a giant poutine bowl. \ 9195:2016-10-08 learn \xc5\x93rjan is oerjan and \xc3\xb8rjan\'s superhero third cousin (once removed) from Qu\xc3\xa9bec. he got his cheesy powers by falling into a giant poutine bowl. \ 9196:2016-10-08 ` sed -i \'s/\\. h/. H/\' wisdom/\x pikhq: Obelix? kmc: shachaf: you could also use binary lambda calculus kmc: which was designed for roughly this purpose oerjan: pikhq: famous for also getting powers by falling into something hth kmc: what are cheesy powers pikhq: Oh, as in Asterix & Obelix. Derp kmc: `wisdom kmc HackEso: ​kmc//kmc did not run the International Devious Code Contest of 2013. She is her own grandpa. kmc: `wisdom pikhq HackEso: That's not wise. kmc: `wisdom HackEso HackEso: ​hackeso//HackEso is almost but not quite unlike HackEgo. oerjan: kmc: as a casein point, imagine spiderman-like web made of sticky cheese pikhq: I see. Shame about my lack of wisdom. kmc: sometimes the wisest wisdom is none? oerjan: there's no pikhq wisdom? oerjan: `dowg pikhq HackEso: No output. pikhq: Woe betides oerjan: and never has been pikhq: I must have always been a fool oerjan: well then i can save work on correcting pronouns pikhq: I suppose that does make things easier. pikhq: Benefits of being an unquotable fool: pronouns become much more mutable state pikhq: Fewer side effects oerjan: . o O ( some day i will be the last cis male in this channel. ) pikhq: A likely story oerjan: it's just extrapolation https://xkcd.com/605/ pikhq: I suppose that tracks. pikhq: By extension, soon the entire world will be trans. We're taking over, muahahaha kmc: I'm arguing with a mycophobe on reddit :| pikhq: A... mycophobe? pikhq: Someone who's afraid of _fungus_? kmc: someone who is irrationally fearful of mushrooms kmc: which would include most americans pikhq: Say what now pikhq: But mushrooms are delicious. kmc: not "eating mushrooms can be dangerous and you have to know what you're doing" but "oh god anyone who tries to pick mushrooms is going to die no matter how careful they are" kmc: this person also seems to think the only reason to pick wild mushrooms is to save money kmc: oerjan: I used to think I'd be the last cis male left pikhq: kmc: So, tell me how that worked out? :) pikhq: Nyaruhodō kmc: by the year 2050, all coding is done by trans lesbian catgirls, all of whom are dating each other kmc: pikhq: ? pikhq: "Naruhodō" (I see), said in a catlike fashion pikhq: kmc: And then, the economy will finally become subservient to the gay agenda. kmc: seems apropos https://scontent-sjc3-1.xx.fbcdn.net/v/t1.0-9/71753317_680517102458398_924369166457110528_n.jpg?_nc_cat=101&_nc_oc=AQnaI1aohRyAnMzmm-SsSpMKuebusN3Z9PHoa_cp9IRhvAhHuFh92CAjnr9S8lp-Dp1goWX-QZKulownlDCH54dW&_nc_ht=scontent-sjc3-1.xx&oh=f1303938ed1d6cfd9ed4361195396396&oe=5E29C3BA kmc: pikhq: *taps fingers together* eeeeeeexcellent kmc: shachaf: do you know anything about meditation? kmc: what kinds to do, how to get started etc shachaf: Not much. pikhq: Here I thought you were omniscient. What use are you anyways? shachaf: I know some people who are into it, at various levels of hippitude, and they tend to recommend it? Hooloovo0: I've done a bit of meditation Hooloovo0: basically all I've done is go into a hypnagogic state while my brain is still awake, basically lay completely still for a long time Hooloovo0: eventually you should feel an, uh, weight, or numbness, leading down your extremities Hooloovo0: it's weird not having any (changing) sensory input at all... zzo38: How to control the set of characters that pushing control and a arrow key skips to in the location bar in Firefox? I want it to skip to only / & = # ? kmc: Hooloovo0: cool kmc: I'm going to try a sensory deprivation float tank probably next week kmc: and see what that's like Hooloovo0: fun, let me know how that goes kmc: sure thing Hooloovo0: I feel like a sensory deprivation tank would produce the same effects as I get, but I'm not sure if there's anything else I'm not (sensing/feeling/experiencing) kmc: well, it'll be different for everyone anyway kmc: but I'm glad to share my experiences kmc: I have a longstanding interest in altered mental states. kmc: one semester in college I had 2 roommates so I built the space under my desk into a sensory isolation sleeping pod kmc: it was great kmc: I had a thick piece of wood and blackout curtains that I could slide against the open side kmc: I slept in there, would also watch tv on my laptop, or listen to music in the dark kmc: and i'm also into psychedelic drugs but you know that. kmc: zzo38: have you ever taken psychedelic drugs? kmc: I have tried to meditate a bit, but never made a habit of it; I am much better at forming habits now than I was the last time I tried, so maybe it will stick this time kmc: my therapist recommend going to some events at the SF Zen Center kmc: hynagogic states are interesting kmc: hypnagogic* kmc: as are dreams kmc: I have used galantamine a couple of times to enhance dreaming Hooloovo0: I have never had a real habit of meditating Hooloovo0: it's always been somethting I do once every 2 days - 2 months ish Hooloovo0: I did take a class on buddhism which I thought was really great Hooloovo0: the professor is a monk - he teaches at a monestary/university and I don't know what else to say kmc: another thing i do that is maybe a bit like meditation (or maybe even the opposite) is to listen to music intently in a way that crowds out 'verbal' thoughts kmc: it feels good kmc: at some point in my late teens I gained the ability to follow multiple voices in music in a deeper way than I could before -- in a way that actually feels like multithreaded attention kmc: this happened shortly after I first smoked pot, i don't know if that's related but plausibly Hooloovo0: I feel like "not thinking verbal thoughts" is a distinct state of consciousness different from a lot of others kmc: and the goal of many forms of meditation is to reach this state? Hooloovo0: it's what you get from listening while high af, and (chanting/dancing/etc) while arguably sober kmc: i think drugs usually *don't* help me get there kmc: because i am very analytical and keep trying to describe the drug experience in words (in my own head or to others) kmc: and even if that's not where my attention focuses, i get really analytical on psychedelics kmc: cannabis might be better for it kmc: but yeah I think listening to music intently (whether sober or not) is the best way I know to do it Hooloovo0: that makes sense... when I take drugs, I always think about how it's different from base reality Hooloovo0: I have not tried psychadelics, just weed, so there's that Hooloovo0: well, weed/booze kmc: from this discussion I get the feeling that you would find psychedelics interesting :) Hooloovo0: yes, I think so Hooloovo0: I mean I'm sure theyd be interesting Hooloovo0: I'm not actually sure why I have qualms about taking them Hooloovo0: never had an easy chance to kmc: good to wait and do it right kmc: because the experience is determined mostly by set&setting and not by the drug itself kmc: stanislav grof called LSD a "nonspecific amplifier of mental processes" or something like that, and I think he's right kmc: I think of it as turning up the gain on all sorts of pattern matching systems kmc: so you start to see things that aren't there, but also things that are real and had eluded you previously kmc: not just in the literal sense of 'see' but also with respect to emotions and cognition kmc: but, it's hard to put it into words of course. Hooloovo0: yeah, see/experience/feel are different kmc: then on the more intense experiences the subject/object boundary itself becomes permeable, or dissolves entirely Hooloovo0: I'm not entirely sure I understand that sentence kmc: which is impossible to describe. anything you say about it is a contradiction because our way of talking is essentially predicated on that distinction kmc: a statement like "I experienced ego death" is obviously contradictory kmc: and yet kmc: ego death is... a thing that happens kmc: it doesn't happen *to* anyone kmc: I was essentially a panpsychist before I started taking psychedelics but it's one thing to believe something and another to experience it, you know? kmc: that there is only one thing, which is you and me and the universe and God and doesn't even need a name kmc: and all the boundaries are heuristics we impose on the world shachaf: When I was a v. small human I remember just naturally thinking that everyone was the same person. shachaf: And being surprised at the realization that maybe that's not true. shachaf: Of course it could be a fake memory like most of my earliest memories. kmc: did you include yourself in that? kmc: how do you know your early memories are fake? kmc: I don't have a lot of childhood memories. I'm told this is a thing that happens with dissociation kmc: but maybe I have enough shachaf: Some of them I can tell because they match stories that I've been told, but then when I ask about further details it turns out they're wrong (e.g. not in the place I thought). Hooloovo0: I'm not sure what you mean by the me/universe/god statement shachaf: Others I think are fake due to other heuristics but I don't remember the details now. kmc: Hooloovo0: I'm only going to make a fool of myself if I try kmc: that's how these things go kmc: lexande frequently submits corrections to my autobiography Hooloovo0: I know kmc: I think his memory is better than mine overall Hooloovo0: before searching for it again I felt like https://principiadiscordia.com/book/57.php Hooloovo0: might be relevant zzo38: When any player casts a spell, that player may choose a number which is a multiple of the converted mana cost of that spell, is less than or equal to forty, and has not yet been chosen for ~. If they do not, they lose five life. Hooloovo0: re-searching? kmc: Hooloovo0: that is a nice page kmc: I was pretty into discordianism as a teenager kmc: I should probably go back and read the texts again zzo38: Hooloovo0: I read that before, and, I think it is good. kmc: "Pick a grid, and through it some chaos appears ordered and some appears disordered. Pick another grid, and the same chaos will appear differently ordered and disordered." kmc: this can be made mathematically precise in quantum mechanics Hooloovo0: that's one of the reasons I like it kmc: you have different basis sets for a hilbert space zzo38: kmc: Yes, I suppose so. I have not considered that, but, yes, that makes sense. kmc: a state that looks entangled in one basis is separated in another kmc: and everything you do in the system is basically a change of basis? shachaf: Wait, does entanglement depend on your basis? zzo38: One book about philosophy that I had read some time ago, mentioned, quoting someone else, they expected you can write a serious book about philosophy consisting entirely of jokes. Now I can think that is correct, because that is what Principia Discordia is. kmc: quantum observation is choosing a basis and then projecting the system state onto it kmc: shachaf: maybe not shachaf: I thought that, like being a rank-1 matrix, separability was basis-independent. kmc: zzo38: that seems about right shachaf: whoa, I had a basic question about quantum things that maybe you know the answer to. kmc: you shouldn't expect me to be correct shachaf: I feel like all the quantum things I know, like entanglement, can be local. kmc: especially in my current state shachaf: But I don't know what locality means. shachaf: What do I do? zzo38: I have looked at the mathematics of quantum state vectors, and it does seem like some states might be entangled or unentangled from some point of view. But, it is confusing and apparently even scientists do not understand so well, so I have heard? Hooloovo0: zzo38, no, the PD is completely serious. there's no jokes in it shachaf: zzo38: I think the specific thing about whether a state is separable or not is just regular multilinear algebra that people do understand? zzo38: shachaf: Probably you are correct. zzo38: Hooloovo0: Are you sure there is no jokes in it? I thought it is completely serious despite it consists entirely of jokes. HackEso: 2/2:letter later to s/o,/o/, 4 letter later to s/w/W/, lowercase to remove newline. \ te sting//This is horrible? Hooloovo0: zzo38, I'm pretty sure that's syi sydasti Hooloovo0: sri syadasti even kmc: `ddate HackEso: Today is Pungenday, the 59th day of Bureaucracy in the YOLD 3185 zzo38: Do you like this? http://zzo38computer.org/textfile/miscellaneous/magic_card/records_of_puzzles shachaf: zzo38: I like the sentence "Do you like this?". shachaf: Is that what you were asking about? int-e: shachaf: I don't get it... it's neither fun nor a pun. ski: Hooloovo0 : hm, i've done that, some shachaf: Do you like non-interactive zero-knowledge proofs? shachaf: I'm kind of surprised there appear to be so many tradeoffs in ZKP options rather than one clearly best way to do it. int-e: . o O ( that often happens when you solve an impossible problem ) shachaf: Impossible why? Hooloovo0: yeah, nzsnarks are cool Hooloovo0: I took a class from Andrew Miller on applied crypto shachaf: Can you transfer a full understanding of nzsnarks directly into my brain? Hooloovo0: man I wish it were in my brain int-e: . o O ( one should be able to teach those while having zero knowledge of the topic ) ski: (Hooloovo0 : the laying still thing, i mean) Hooloovo0: how did you feel during/after? Hooloovo0: I'm interested if it's similar to my own experience or if there's some qualitative differences ski: occasionally, my heart can sometimes start beating heavily, for no discernable reason ski: it can be hard to maintain a relaxed attention thing. not paying particular attention to breathing, to heart, to visual (non-)input, &c. Hooloovo0: yeah, that can happen ski: in some cases, i've layed, thinking about some mathy/logicy/programmingy problem, and after awhile noticed the sensory world has just faded away ski: some times, i've tried counting up (sometimes in hexadecimal) (at a sortof irregular pace), in order to keep mind busy, balancing at sleep's edge ski: occasionally, i've had these weird momentary visual impressions of some kind of scene (i'm pretty sure i didn't accidentally open my eyes), however, disappeared too quickly for me to get any bearings on what's in the scene. i've wondered whether that's a hypnagogic hallucination, but if it is, i suspect it's not the usual kind Hooloovo0: I'm not sure there is a 'usual hypnagogic' ski: (relevant here is perhaps that i don't think i'm a visual thinker, i have a hard time visualizing anything at all. i think maybe i'm thinking "structurally" (in terms of connections ?), perhaps ?) ski: could be int-e: wtf is happening Hooloovo0: go to half-sleep Hooloovo0: I am definitely a visual thinker, so I'm not sure what non-visual hypnagogicity would be like ski: one thing which i'm pondered if it maybe is, is related to WILDs, that i saw someone describe. they'd lay awake, and eventually they'd be "presented" with scenes, which if they "jumped into", they'd become dreams (lucid) Hooloovo0: I have only once or twice had lucid dreams... they were ok, I guess? ski: (occasionally, i've had a sensation (partly controllable) of "mind being curled up like a piece of paper in a roll, tighter and tighter". not quite sure how to express that) shachaf: ski: Did you read the book _Impro_? ski: yea, i don't think i've had them many times, either ski: shachaf : no, what's it about ? shachaf: All sorts of things. But it opens with a discussion of this, I think. Hooloovo0: I feel like I've had a similar sensation... but I'm not sure Hooloovo0: I was probably not sober at the time shachaf: _Impro_ is such a good book. shachaf: ski: See the first chapter, _Note on Myself_, starting at page 14. ski: (some book i read described working at it "from both ends", trying to get more access to dreams, from an awake state of mind (iirc, some types of meditation), but also trying to get more access to waking thoughts, from a dreaming state of mind) ski: "Impro: Improvisation and the Theatre" by Keith Johnstone in 1979 ? shachaf: ski: Yes. shachaf: (See link.) ski: (hm, some time ago, someone in another channel was talking a bit about their programming team being send to some improvised drama thing. this person liked it) shachaf: By 14 I mean 13. ski: hm, interesting. thank you ski: "I thought of a house, ..." -- i'm not sure i could do that shachaf: whoa, this first chapter (20 pages) is so good. shachaf: Also the rest of the book. arseniiv: “Name of author by Title of book” has some funny scenes though generally it’s too crazy confusingly crazily confusing even for me arseniiv: like “I’m going to sell your company to me” one, — “What do you mean? I won’t sell!” — “That’s why I’m going to do it” LKoen: "CEO of the future" arseniiv: (and then something confusing happens just the next moment) LKoen: it's not that confusing LKoen: people sell things that don't belong to them all the time arseniiv: this, yes, I don’t disagree, ownership is a shady concept LKoen: "The international space station, filled with chess-playing Russians and Americans so atrophied they can never return home" LKoen: sounds legit LKoen: although were the fuck did the European astronauts go? arseniiv: to Europe maybe^W^W^W arseniiv: anyway I it sat half-read for some time and I’m going to try to finish it maybe arseniiv: controversial pieces arseniiv: I should write them, not read LKoen: have you read "House of Leaves", by Mark Z. Danielewski? arseniiv: LKoen: no LKoen: it's... interesting LKoen: I think it's pretty good LKoen: the format is a bit unusual LKoen: and the scenario is really, really unexpected b_jonas: i hear there are entire books written as a single sentence, anyway. => yeah. some of them seem like they're just multiple sentences search-replaced to change sentence ending to semicolons. b_jonas: sometimes what I write on irc looks like that too. I should work on writing shorter sentences. LKoen: Marce Proust wrote his books with looooong sentences LKoen: sometimes, by the point the sentence ends, I forgot what the beginning of the sentence was about b_jonas: " ... thinking that everyone was the same person." => as in http://www.galactanet.com/oneoff/theegg_mod.html ? imode: (5000) (fizzbuzz) takes 27 seconds. ugh. imode: I actually wonder why that is. the interpreter has crazy long pauses between steps. b_jonas: how long does 99 beers take? arseniiv: the profiling time has come imode: https://repl.it/repls/CompleteSpringgreenSpreadsheet imode: here's (100) (fizzbuzz). imode: it takes 2 seconds. b_jonas: https://www.youtube.com/watch?v=aahY61e38ms Evoland - this is an interesting game, I first saw a run on a GDQ imode: 7.47ms to expand all the macros, ~2s to fully run FizzBuzz. imode: I saw long pauses between printing when executing it locally and with larger values. b_jonas: `python3 -cfor n in range(1,101):print(("FizzBuzz","Buzz","Fizz",n)[(0 . o O ( some day i will be the last cis male in this channel. )" => after you get rid of me, obviously b_jonas: pikhq: wait, so what gender are you now? imode: kspalaiologos: I don't know what this is. b_jonas: I don't think we'll run out of cis males, because we get replaced by more young cis males that grow up kspalaiologos: imode, it's BBJ interpreter in C kspalaiologos: in this particular line selected b_jonas: I'm more afraid of the scenario when trans people become the majority so the standards flip upside down, and we'll be the weird ones kspalaiologos: the rest of the document won't probably help you much xd b_jonas: but I think even that would be a win for us imode: _what_. imode: bytepusher is a game console using bytebytejump? imode: jesus. imode: that's awesome! kspalaiologos: the more concerning fact is kspalaiologos: they made an assembler for that imode: . o O ( how fast does it run... ) kspalaiologos: and binary lambda calculus is still something I'm too stupid for b_jonas: kspalaiologos: why is that concerning? I made an assembler for an OISC too, to be able to use symbolic names that work even if I insert or delete words pikhq: b_jonas: I think, realistically, that is very far off b_jonas: I even added local labels kspalaiologos: b_jonas, well, bytebytejump is a hard thing to get right pikhq: We're only like 0.6% of the overall population kspalaiologos: because of the lookup tables imode: is BBJ turing complete due to lookup tables? kspalaiologos: well, yes kspalaiologos: you can add only using lookup tables kspalaiologos: or subtract imode: wait, BBJ can't be TC.. b_jonas: pikhq: who are "we"? trans people, or trans females? and do you count infants into the population? pikhq: Trans people kspalaiologos: so you can make a subleq to bytebytejump compiler kspalaiologos: I'm actually kspalaiologos: really interested in doing that kspalaiologos: and the nyan cat for bytepusher imode: wtf is the "structured" equivalent of BBJ. kspalaiologos: is 190 kilobytes big imode: that I'm not surprised at, you need so many lookup tables. kspalaiologos: imode, you're left on your own on this one kspalaiologos: good luck b_jonas: pikhq: is there a census on this? I'd like to know the ratio of trans males vs trans females, because it seems like I hear more of trans females somehow, which is weird imode: you can't really have a "structured" equivalent of BBJ, because there's.. no conditional machinery. pikhq: There's relatively few stats on it. I would suspect it's 50/50, and you're biased by the spaces you occupy, _buuut_ there's very limited actual studies. b_jonas: pikhq: yes, I'm quite likely biased, which is why I'd like to know pikhq: https://williamsinstitute.law.ucla.edu/wp-content/uploads/How-Many-Adults-Identify-as-Transgender-in-the-United-States.pdf is one of the better demographic studies we've got kspalaiologos: I've experienced that there are more mtf than ftm honestly kspalaiologos: I don't know, although I suppose the reason. b_jonas: pikhq: that gives a split by age, which is useful, but not a split by genders pikhq: You're in tech. We're overrepresented because cis men are overrepresented. pikhq: b_jonas: Yeah zzo38: I don't really know or care too much how many trans people it is, I think if that is what they want to do, OK; but, I think that it can confuse the language in some cases, and I also think that this "gender identity" shouldn't be needed. One suggestion I have seen is for "man" and "woman" to be social but for "male" and "female" to be biological; that helps a bit, I suppose. imode: y'know, I like that distinction. b_jonas: obviously I only know when people tell that they are trans, so for most trans people I probably don't know that they are trans because I don't care b_jonas: so the more trans female is just among people who write on the internet that they are trans female and I read it pikhq: zzo38: I think that's oversimplifying things intensely, and betrays an unfamiliarity with how this shit works pikhq: b_jonas: It appears the institute that did that study is now trying to do a better demographic survey now. pikhq: According to them, it will be the _first_ such demographic survey ever done. zzo38: pikhq: Yes, it is simplifying it. You can have sex change too, so you can be a kind of hybrid, too. (You can also be born as a hybrid of male and female; it does happen.) b_jonas: that seems quite likely pikhq: zzo38: Additionally, much of what we think of "biological sex" is, uh, purely hormonal. imode: you cannot take enough hormones to turn your penis into a vagina. imode: and vice versa. imode: so no, it really isn't. imode: it's genetic. pikhq: imode: Developmentally speaking, your penis was once a vagina, and then testosterone happened. zzo38: But, I think that even if a person is a "man" and not a "woman", if they are biologically female (or had the functions of such) at the time their child was born, then they are that child's mother. And if (hypothetically) someone can manage to change their biological sex enough from female to male later and have another child as the male function, then they can be one person's mother and another person's father. imode: pikhq: I'm pretty sure I'm a male because of my chromosomes. pikhq: zzo38: The mere act of "defining biologically female" is itself _much_ more difficult than you think. pikhq: imode: Orly? Have you actually had a karyotype done? imode: https://en.wikipedia.org/wiki/X_chromosome basic biology. imode: if you wanna argue gender identity, whatever. but biology is biology. pikhq: imode: Bio 102: https://en.wikipedia.org/wiki/Testis-determining_factor zzo38: pikhq: Yes, I know it is more complicated (I don't know all of the details, but I know it is more complicated than the simplified version I mentioned) pikhq: imode: TLDR: shut up, you don't know what you're talking about, you're just being an ass. imode: congratulations, that doesn't change your genetic makeup. imode: TL;DR stop discussing this in this channel. pikhq: imode: Unless you have actually had a genetic test, you don't even know what your genetic makeup is. pikhq: imode: Oh fuck off. imode: you first. pikhq: You're the one who's being offensive and self-righteous. That you are upsetting me intentionally in this way is _your_ fault. imode: have fun on ignore. pikhq: ops: Do we have a policy on offensive BS? j4cbo: “but chromosomes” is a pretty low quality argument tbh zzo38: Maybe much of it is purely hormonal, but there is also genetics, and perhaps other stuff, so, it is complicated. I don't know how it works though; I am not a biologist. But, I think that chromosomes are probably a part of it. b_jonas: sorry, I didn't wnat to start that pikhq: zzo38: They are -- ish. There's a gene that is commonly on the Y chromosome that triggers the production of certain hormones that triggers a large pile of other phenotypical changes. zzo38: (And, a X chromosome, is, normally, something that both male and female will have.) pikhq: It's actually _stunningly_ complicated. pikhq: And there's plenty of ways for it to go screwy. zzo38: OK, I believe you. zzo38: (even if I do not understand it completely) pikhq: For instance, the gene is only _usually_ on the Y chromosome. It moves over to the X sometimes. There's literally XX cis men walking around. zzo38: Yes, OK. I didn't know that, but, OK. j4cbo: biological sex is complicated but at least it is amenable to scientific inquiry pikhq: j4cbo: Gender identity is too -- people are real, even if they're fuzzy and harder to measure. :) imode: the concentration of mentally ill people on IRC never ceases to amaze me. pikhq: ops: ^ j4cbo: pikhq: identity sure, but societal expectations and roles are impossibly complicated zzo38: (It seems to me that such thing as "XX cis men" might be a kind of hybrid, since "XX" is supposed to designate female, but in this case they are otherwise male; but, I don't really know what the proper definitions are, so I may be wrong.) pikhq: So's physics. I hear physics is a well-established field. pikhq: zzo38: The sex-determining region Y is more-or-less the only functional content of the Y chromosome. j4cbo: physics is measurable in ways that culture is not pikhq: Which is why sociology is hard. pikhq: But it's real, so you can _do_ science on it. Just... hopelessly difficult, so expect to spend all your time on establishing basic results. j4cbo: Freenode’s “ops should not wear hats” thing is unhelpful imo imode: define wear hats. pikhq: j4cbo: Yeah, it makes it difficult to decide who to escalate a conflict over what is appropriate discussion in a channel to. imode: if you mean take particular sides in a discussion, no, they really shouldn't. discussions and disagreements happen all the time. j4cbo: imode: “ops should not have +o except when actively using it” imode: ah, that. eh. pikhq: Is imode an op? Please say no j4cbo: which leads to a... unmoderated atmosphere j4cbo: I don’t think so? pikhq: Ah, good imode: I don't feel strongly one way or the other. I guess it's more relaxed in some places but I've never had a problem knowing who the ops are. pikhq: "An op's conduct is incompatible with what I think is appropriate for this channel" is not a pleasant discussion to have. b_jonas: j4cbo: our channel operators are fizzie, oerjan and ais523. same as the wiki moderators. you can tell that from NICKSERV ACCESS #esoteric LIST. the hats don't matter. imode: welcome to #esoteric, where the languages are weird and the hats don't matter. b_jonas: but I think this is the sort of discussion that you can just walk away from, it doesn't need ops pikhq: b_jonas: I am inclined to disagree. It's pretty... Incompatible with me being welcome here at all. imode: is pikhq trying to get me banned or something for disagreeing with them. if so, that's amazing. zzo38: I think that you can temporarily ignore the IRC if you do not like it and later you can discuss something else on this IRC. Since, we discuss other stuff on this IRC, too. b_jonas: pikhq: I mean, it's a discussion that will die down in a few hours if you ignore it, and it isn't interwoven with some other important discussion that you can't miss at the same time j4cbo: imode: i think your comments have gone substantially beyond “disagreeing” imode: j4cbo: such as. j4cbo: the “mentally ill” remarks imode: not related to this channel. j4cbo: bullshit zzo38: Even if you do want to ignore some discussion when reading the logs, if they are a discussion by different people, you could use grep, perhaps imode: not even related to this server. pikhq: b_jonas: Yeah, calling me "mentally ill" is straight-up insulting me for who I am. j4cbo: imode: it did not read that way imode: sorry you parsed it that way. imode: should have probably qualified. the discussion ended for me on "have fun on ignore." b_jonas: pikhq: yes, I do realize. so ignore the whole discussion. unlike on a high-traffic channel where you have to separate threads, you can easily skip over them. pikhq: b_jonas: This is about as inappropriate as calling someone a "f****t" imode: maybe everybody needs to just step away from their computers and take a walk. pikhq: fizzie: ping j4cbo: “stop discussing this in this channel” is also not your call to make imode: that I'll accept. was an opinion and shouldn't have come across as an order. j4cbo: imode: so maybe the only one who needs to step away is... you? imode: pretty comfortable where I am, actually. pikhq: Maybe I should join every other trans person who's ever been in this channel and leave. (there have been several) b_jonas: no, all of you should step away. I wasn't specific about who. j4cbo: anyway I’m out for now b_jonas: and return a few hours later, but after a random amount of time so you don't return all at the same time (which is a proven working strategy on all our ethernet and wifi networks), by which time we'll forget about this b_jonas: but I'm sorry again for starting this imode: not your fault. b_jonas: `? ronald reagan HackEso: Ronald Reagan was an actor so great that he managed to convince the US that he was the President. Then he created the Star Wars project to destroy the Soviet Union. b_jonas: `? star wars HackEso: Star Wars was a missile defence system invented by Ronald Reagan. With it, he managed to destroy the Soviet Union, then rode into the sunset. b_jonas: `? soviet union HackEso: In ancient history, the Soviet Union used to be the THEM. They believed in absurd principles like "Better Red than Dead". Then Ronald Reagan invented Star Wars to destroy it, after which there seemed to be no the THEM for a while. b_jonas: `? daystar HackEso: The Daystar is an unscientific myth of a bright orb glowing in the sky outside only at the times you're in your office. b_jonas: `? nightstar HackEso: The Nightstars are an unscientific myth of a sky covered in faint flickering lights. Only hermits and superstitious farmers believe this. b_jonas: `? bofh HackEso: A BOFH is a bastard operator from hell. An example is the == operator in PHP. b_jonas: ah yes, one of those was created by me b_jonas: `' soup contest HackEso: 303) my most fresh dream is one where I'm at a soup contest and a chicken really wants to participate but he's disqualified so he becomes the judge. when all the soups are done and he's ready to taste them he just stares at the soup and then I become the chicken and I really want to make soup b_jonas: ``` sed -i '21,$d' share/8ballreplies # let's remove those two extra replies HackEso: share/8ballreplies//It is certain. \ It is decidedly so. \ Without a doubt. \ Yes definitely. \ You may rely on it. \ As I see it, yes. \ Most likely. \ Outlook good. \ Yes. \ Signs point to yes. \ Reply hazy try again. \ Ask again later. \ Better not tell you now. \ Cannot predict now. \ Concentrate and ask again. \ Don't count on it. \ My reply is no. \ My sources say no. \ Outlook not so good. \ Very doubtful. b_jonas: `8ball HackEso: Don't count on it. b_jonas: `8ball > wisdom/8ball HackEso: Most likely. arseniiv: binary lambda calculus each time reminisces me about Real Fast Nora’s Hair Salon Shear Disaster Download, as they are almost isomorphic but the second one is way more human-readable b_jonas: `' baptized HackEso: 441) Having only been Catholic in the sense of being baptized that way, I still really like all their silly arcana Judaism has them beat, of course I almost converted just so I could look at my roommate's books b_jonas: `? Aragorn HackEso: Aragorn? ¯\(°​_o)/¯ arseniiv: `? pants HackEso: pants? ¯\(°​_o)/¯ kmc: i'm wearing pants kmc: i should probably do something about that kmc: i'm not sure why people are so hung up on chromosomes kmc: they are a starting block, a set of blueprints b_jonas: which meaning of pants? kmc: so much of human phenotype is determined by other things kmc: b_jonas: the american one b_jonas: I wear pants for work all the time imode: pantsu. kmc: en_US("pants") = en_UK("trousers") kmc: en_US("underwear") = en_UK("pants") b_jonas: sometimes long jeans, sometimes short jeans kmc: this is one of many fun things I've learned from watching British TV b_jonas: I specifically asked them about dress code b_jonas: they basically said that since I'm a software guy, I can wear whatever I want kmc: the best one is probably that "fanny" is a very mild term for butt in the US whereas in the UK it means vulva kmc: so I bet they are amused by "fanny packs" b_jonas: hardware guys sometimes need protective equipment when installing stuff on site kmc: b_jonas: i heard a story that Google in its earlier years once had "pajama day" at work, and the posters said "wear what you wear to bed!" kmc: so a lot of people showed up naked. pikhq: kmc: I think it's because some people get caught up on this idea that everything has to be easy, clear-cut, and simple to classify‚ and rather than change this notion when confronted with claims to the contrary they just rage when someone observes something that conflicts with the model. kmc: after that, no pajama day kmc: pikhq: yep b_jonas: kmc: that sounds like a hoax kmc: pikhq: and gender *seems* very simple if you don't personally have to deal with any of the corner cases kmc: i certainly didn't appreciate how complicated it is until about 5 years ago kmc: b_jonas: maybe. I heard it from a friend who works with a HR person who used to be HR at Google kmc: it's probably exaggerated at least pikhq: Knowing Google, I practically guarantee at least _one_ person actually did that. fizzie: Our team had an (optional) "formal Friday" a handful of times. pikhq: It probably wasn't widespread though. pikhq: fizzie: I advise you read scrollback b_jonas: pikhq: no, I mean they wouldn't make the mistake of advertising it as "wear what you wear to bed" without disclaimers pikhq: Granted imode: the question is, what were the consequences of showing up naked, apart from a probable escort from the campus. kmc: imode: they got free Google swag to wear for the day. kmc: the idea of working somewhere with a dress code is much less horrifying now that I can wear girl clothes kmc: girl clothes are so much more interesting imode: that's incentivizing nudity. kmc: indeed imode: honestly from the stories I've heard about people's first few months (and last) at positions in Google, I wouldn't be surprised that someone took that a little far. imode: had a friend of a friend who worked at FB. they got into a probation program the first week for not showing up, and then coasted the next 5 months until they were fired, but secured an offer one month prior to firing. imode: and did the same damn thing. b_jonas: at one point during university, I attended some lectures in SZTAKI. its building has the dress code of long pants required. imode: is it dog friendly, and does the dress code apply to animals. b_jonas: I don't know, I've never seen dogs in there b_jonas: also at my previous job we had some special events where the interns, after a quarter year long internship, give a short presentation about what they did at the company. that event required formal clothes. they forgot to tell me before the first time they held that event. I never went to the rest of them after that. imode: formal dress is stupid. b_jonas: I don't think formal dress is stupid, but requiring it for that event is stupid arseniiv: requiring the commonly used formal dress for many events is stupid, I’d specify imode: yeah, there's only a certain set of events imo that it's appropriate for. imode: and even then that's probably just cultural conditioning. b_jonas: such as your own wedding b_jonas: or a wedding where you're an offical imode: remind me to mandate crocs at my wedding. arseniiv: we had that at school rrr (not university, *that* would be the worst and I’d not go there at all, then) arseniiv: wedding I’m not sure b_jonas: arseniiv: crocs mandated at school? b_jonas: or is "rrr" some kind of event, like a prom? arseniiv: so atm I don’t have any suits, formal pants and white shirts etc., though the tie remains in the closed arseniiv: b_jonas: er no arseniiv: I mean there was a uniform b_jonas: I consider that much worse b_jonas: a uniform, as opposed to just ordinary formal clothes b_jonas: because you can choose the formal clothes to whatever you like b_jonas: but for a uniform, you have much fewer choice b_jonas: I do have formal clothes, but I haven't worn them since a friend's wedding in I think 2014 b_jonas: this is the advantage of being a software guy with no people skills who thus never meets clients b_jonas: hmm no, kmc: imode: are you getting married? b_jonas: actually I haven't worn it since my brother's wedding in 2013 b_jonas: the other wedding was in 2012 imode: kmc: next year, yeah. kmc: congratulations b_jonas: oh nice kmc: I got married once, 10/10 highly recommend b_jonas: so you're talking about an actual wedding, not just hypothetically imode: gracias! b_jonas: will the wedding be outside? because crocs could be inconvenient imode: lmao, I'm waiting on the results from a job interview before we bother planning. it's been 10 years, so we figured we'd tie the knot. imode: it'll probably be a small thing along the coast. our families suck, sans our immediate family. b_jonas: will people dance in crocs? imode: if I have my way, yes. arseniiv: kmc: 10/10 highly recommend => lol kmc: we didn't do a full blown wedding, though imode: private ceremony? kmc: got married under the dome at sf city hall kmc: one witness kmc: was kind of a spur of the moment thing imode: that's the way to go. my sister did that. arseniiv: I don’t understand weddings with a crowd of people too kmc: we were already promised to each other for life but didn't feel the need to make it official until 2015 when some personal shit went down kmc: the most immediate reason was that she wanted to be legally allowed to make decisions for me if I ended up in the hospital again kmc: so getting officially married was a practical thing, but has turned out to be more emotionally significant than either of us expected kmc: we had already been living together for 4 years kmc: the weddings with big parties are fun, at least if you're not the one organizing and paying for it kmc: i was maid of honor at my best friend's destination wedding in mexico kmc: it was a blast fizzie: Read some of the scrollback. TBH, the "mentally ill" part is really hard to accept as unrelated to the preceding conversation, given the timing and context. I think it's also a comment we wouldn't mind classifying as unacceptable, so please don't do that sort of thing. imode: that sounds awesome. and yeah, a lot of people get married for that reason and that reason only. that's a large motivation for us as well: we'll probably have an "official ceremony" and then have the actual wedding after it, mainly for insurance purposes. imode: fizzie: if you parse it that way, sure, I won't say that. bear in mind it was about something on QuakeNet. b_jonas: imode: is the crocs thing because you or your partner have a family member who you really want to keep away from the wedding, but you don't dare to just refuse to invite them, so you make a rule that they'll never comply with, and rather not attend the wedding than wear crocs for it? b_jonas: or is it to just keep most people away in general, to make the wedding smaller, without any specific target? imode: more of a parody of what one considers formal attire. pikhq: fizzie: After saying "them" to refer to me after my pronouns were made very clear, I think it is pretty unambiguous what imode's intent was. Particularly in context. b_jonas: the latest xkcd uses "AM". that's weird imode: especially considering launches are 24h. b_jonas: after https://www.xkcd.com/1179/ that is arseniiv: (BTW in any case anybody wouldn’t like what personal pronoun I’d use please tell me explicitly, by PM or not, as I would likely been just forgotten or hadn’t watched with attention; so there be no feelings hurt) pikhq: arseniiv: Innocent mistakes are perfectly fine, FWIW kmc: imode: yeah, my friends did the official, legal wedding in SF with a small group of friends and then the bigger wedding in mexico for extended friends and family, the following year kmc: for one I think maybe it's tricky to get a US marriage certificate if you're married in a foreign country kmc: some channels have a bot that lets you set/query pronouns, which is kind of nice b_jonas: what... b_jonas: why is it tricky to get a marriage certificate? kmc: cause the wedding happened in a foreign country? kmc: i'm not sure though kmc: just speculating kmc: in california anybody can officiate a wedding after filling out a form. so the first wedding in SF was done by our friend, wearing a pope costume he got off of Amazon kmc: afterwards we grilled steaks and drank to the wee hours imode: that sounds blissful. pikhq: In Colorado the parties to a marriage are the only required signatures. kmc: it was great kmc: my wife and I are thinking about doing a wedding-style celebration maybe next year, for our 5th anniversary kmc: though it happens to be right around my grandma's 100th birthday so we don't want to upstage her imode: make it a combo! :P kmc: in california the marriage form doesn't ask for gender (now that same-sex marriage is legal) but there is a box for each partner (only two partners allowed, sadly) to optionally check "husband" or "wife" kmc: as far as I know those checkboxes have no official meaning b_jonas: only one partner can check? kmc: and they're just on there to satisfy traditionalists kmc: no, each partner can check either pikhq: I'd have to doublecheck, but I think CO just completely removed them from the form b_jonas: ah, better kmc: part of me thinks poly marriage should be legal but the other part of me thinks the government should get out of the marriage game entirely kmc: most of the rights of marriage can also be established through contract law kmc: the privilege of not having to testify against your spouse can't, but it's also pretty weak from what I understand arseniiv: kmc: but the other part of me thinks the government should get out of the marriage game entirely => me exactly zzo38: I should think having "husband" and "wife" on the form would be unnecessary, although maybe it would be helpful if you have a formal ceremony, I don't know zzo38: I think that poly marriage should be legal if everyone involved is in agreement with it. arseniiv: for example what if I trust a close friend but have no soulmate and suddenly fall ill arseniiv: I mean, this should be signed as easily kmc: zzo38: I think you'd also need forms for adding or removing partners from a poly marriage kmc: eventually a marriage may outlive all of the founders! zzo38: kmc: Yes, if it is something which you will want to be recognized by government, then it will be needed. arseniiv: so it should be a separate procedure, applicable likely to any trusted people: relatives, friends, neighboors kmc: poly divorce law sounds like a quite complicated area that will probably exist one day kmc: arseniiv: you can do that kmc: power of attorney or something b_jonas: attorneys have superpowers? arseniiv: kmc: yeah it seems less easy as wedding :D so it should be refactored out zzo38: That is mainly the reason I was thinking it is too difficult to implement legal poly marriage right away, due to the difficulty with the existing laws. But, it should be corrected, if possible. kmc: I know someone who was preparing to sue for recognition of poly civil partnership under the Canadian Human Rights Tribunal kmc: she had lawyers ready to do it pro bono and everything zzo38: The form might need a section to mark if you automatically consent in future too, in case you have one or more other spouses already and you do not want to deal with it when further spouses are added, everyone else who doesn't automatically consent in future (at least one is required, but by default it is everyone who must agree to it) to add a further spouse. kmc: but then she broke up with her partners :/ pikhq: kmc: I think most of the regulars here knew her at one point :P kmc: pikhq: yeah. kmc: zzo38: I would think all partners should explicitly consent when somebody is added kmc: but that's based on my personal conception of poly marriage and not necessarily something that should be legally enshrined pikhq: Yeah. Legal bonds with non-consenting individuals is a bit fucky fizzie: It sounds like what this needs is a blockchain and smart contracts hth zzo38: kmc: Yes, I think so too, but sometimes someone might not want to deal with it if they are unable to. So, not dealing with it should only be if you agree ahead of time that someone else can agree for you ahead of time, or if you are dead. kmc: I think marriage as a graph should be transitively closed b_jonas: fizzie: and cloud technology too arseniiv: hm are there schemes for a shared secret that allow expanding the set of participants? zzo38: But normally, yes, all current partners (and also the new one) should explicitly consent when somebody is added. kmc: in other words a corporation where each member has the same rights kmc: arseniiv: good question kmc: perhaps ##crypto knows zzo38: If you use secret sharing crypotography, and the number of members needed to decrypt does not change, then it is easy to add additional members, I think. kmc: zzo38: probably kmc: you would pick additional points on the same polynomial b_jonas: I don't think that works arseniiv: I think marriage as a graph should be transitively closed => and symmetrically too? It would get weird if not, or that state wouldn’t be achievable starting with trans. sym. closed marriages? b_jonas: who would compute the information without revealing the secret? kmc: afaik a k-of-n shamir share is n points from a (k+1)-dimensional polynomial, over an appropriate field b_jonas: without learning the secret that is kmc: b_jonas: any quorum could do it kmc: if you have a quorum then you can solve for the polynomial kmc: I don't know how you pick which points to share. kmc: random, I guess. arseniiv: (damn, f.lux has gone red and I don’t see text cursor again. A bug in calculating opposite color, I think) zzo38: One kind of secret sharing could be you have a secret point, and each member has an equation for a line that passes through that point. The secret point can be found by any two members. Also it means any two members can add a third by making up a new equation of a line passing through that point. If you are careful then it should be unlikely to match someone else's line. arseniiv: zzo38: ah, maybe that’s how Shamir scheme was invented? First, hyperplanes, and then a bit or generalization and bam arseniiv: s/or/of b_jonas: kmc: don't you mean a degree k-1 polynomial, on a field with at least n elements? kmc: i dunno kmc: I think the field should have lots of elements? b_jonas: David Madore's crowning achievement on the IOCCC is relevant of course kmc: for starters, the secret itself is a field element b_jonas: kmc: no, you can split the secret to multiple chunks, each a field element b_jonas: in particular, David Madore's program uses a 256 element field, and the comments claim that that works for up to 255 parties kmc: b_jonas: ok kmc: https://crypto.stackexchange.com/questions/24983/choosing-finite-field-size-in-shamirs-secret-sharing-scheme kmc: I dunnoooo b_jonas: I'd trust that that scheme works, both because it comes from David Madore with docs, and because it's won an IOCCC b_jonas: `perl -esub h($){($_=$_[0]=pack b208,0 .unpack b362,$_[0])=~tr/\0-\c?/\0/;tr/\0/\377/c;$_}do{$y=$r;$v=join$r='',a..z;$r^=h$r&"\217"x26^h$v&$y for 0..6;$r^=$_ x26}for"k6sNP2B}({ambrusLB%Ox)Z]n0*zf\0I3"=~/./g;print$r HackEso: Just another Perl hacker, b_jonas: this is an old one from https://www.perlmonks.com/?node_id=863110 that evaluates a polynomial over GF(128), before that IOCCC entry has won, but a decade after David wrote that program b_jonas: https://www.perlmonks.com/?node_id=863110 b_jonas: admittedly GF(128) makes it a bit simpler than GF(256) would be b_jonas: so it can only encode ASCII characters imode: whaaaaaaaaaat. imode: am I crazy, or does "cp/m" as an address resolve to "cp.com/m" zzo38: I think it doesn't b_jonas: imode: browsers have an option to automatically add ".com" if the domain name doesn't exist otherwise b_jonas: only when you type into the address bar, not in a link imode: it's only for two characters. o_O imode: "foo/bar" doesn't work. imode: but "fo/bar" does. b_jonas: they can also automatically prepend www. and prepend http:// zzo38: What I prefer is something typed into the address bar is just treated as a relative URL to the current URL, unless it has a colon at first in which case it is a search command imode: that I understand. what I don't understand is why it only apparently works with two letters. zzo38: Some browsers will automatically prepend the scheme based on what the domain name is. (Still, I think it ought not to automatically prepend any scheme.) imode: nevermind, it somehow works with _multiple_ character strings. imode: abc/def works, for example. imode: that is bizzare! imode: it won't do "google/" though b_jonas: is it weird that "rose" is used as a color name, when roses are popular flowers that come in all colors you can imagine, sort of like diamonds? b_jonas: or tulips b_jonas: I mean, "orange" as a color name makes sense kmc: did you know that 'pink' is also named after a flower? kmc: https://en.wikipedia.org/wiki/Dianthus_plumarius kmc: at least accoring to some kmc: as well as https://en.wikipedia.org/wiki/Pinking_shears oerjan: `hurl bin/8ball HackEso: https://hack.esolangs.org/repo/log/tip/bin/8ball oerjan: hum that's the wrong one oerjan: hello pikhq pikhq: What a day, what a day oerjan: i'm not uplogged yet oerjan: now i am oerjan: i note that personal pronouns were involved both here and in the current stackexchange clusterfuck oerjan: `? them HackEso: them? ¯\(°​_o)/¯ oerjan: `wisdom them HackEso: ​the them//Information on the THEM has been removed for national security reasons. oerjan: with you pikhq: Let's just say that was rather rude of you and leave it at that oerjan: my brain has trouble thinking of pronouns seriously now oerjan: but i've been half thinking that the sane long-term solution for english is for everyone to standardize on they/them/their, which make your protest against it sort of a mind whiplash. although i can understand how it can still be rude if someone uses it _only_ for non-cis gendered people oerjan: *makes kmc: that is the main case where 'they' would bother me zzo38: I sometimes use "they" for anyone, regardless of who they are, anyways kmc: i think i'd be okay with someone who used 'they' for everyone kmc: although the last time this actually came up, I was not okay with it pikhq: Really a matter of context making me go "uuuuh" kmc: but that's for complicated reasons arising from personal trauma and i wasn't really being fair to that person anyway kmc: it took me a long time to accept that it's okay to think in principle that gender is stupid and should go away, and yet to be assertive about my own gender identity kmc: it's one of those ideal world vs real world things kmc: the whole thing has been really humbling as far as learning what i can and can't change about myself kmc: transitioning is a huge change but it's something we do because we *can't* change who we really are pikhq: At a certain point you just get done pretending to be someone else. kmc: I think most trans people would much prefer to take a magic pill that makes you happy with your birth gender, but it doesn't exist kmc: I don't think I would take that pill, personally kmc: (which ironically? makes me "fake trans" to a lot of people, because they can only see this experience through the lens of misery) pikhq: It sounds easier. But at the same time, that's a radical change in who you are as a person. kmc: i mean for one I think that pill would have to change my personality a whole lot kmc: and also well, being trans /is/ very interesting kmc: and like I'm in a pretty good position to transition compared to most kmc: and I'm some sort of extreme neophile kmc: and i've always been a transhumanist kmc: I'm both kmc: like, it was really hard for me to start making permanent changes to my body kmc: which is v. ironic zzo38: Sometimes it isn't clear if you mean singular or plural, so then you shouldn't use "they" (or sometimes also "you", which is also grammatically plural but can also be used singular). pikhq: Y'know what's hard? _Shopping_. pikhq: zzo38: In such a case it's probably simplest to just rephrase to avoid the use of a pronoun. zzo38: (Fortunately, Wizards of the Coast considered that ambiguity when making that change in Magic: the Gathering, so that the ambiguity is avoided.) pikhq: Said cases aren't very common, but that's basic writing, ain't it? zzo38: pikhq: Yes, that is correct, and is what is done in Magic: the Gathering in those few cases. zzo38: (Although there are different ways of doing so. The rules for Magic: the Gathering say "that player" is used if "they" is ambiguous.) pikhq: Reasonable within that context. zzo38: Yes, in that context, it is reasonable. zzo38: In other contexts, there is other ways. pikhq: e.g. if it's ambiguous in other cases you can just use someone's name. pikhq: Like you would if there's multiple "he"s or "she"s and you need to be clear who you're talking about. zzo38: Yes, in the cases where their name is known (and not itself ambiguous, which in rare cases it can be). pikhq: Language! pikhq: Always so fuzzy around the edges zzo38: I have no problem with singular "they", but I don't like singular "themselves". (The singular should be "themself", like for "you", it will be "yourself" as singular rather than "yourselves", I think.) pikhq: I think the jury's out on which one is the grammatical one there. zzo38: pikhq: Yes, those language always so fuzzy around the edges, is also one of the reason why I don't like Inform7 so much, and also a reason for why I have thought to have a AST-based format for the effect of Magic: the Gathering cards. zzo38: pikhq: Yes, people use both, although I personally don't like to write "themselves" if it is singular. pikhq: "Themselves" still sounds cleaner to my internal sense of things, but that's probably nothing more than pattern matching doing weird things. zzo38: Yes, probably, I think zzo38: (That is probably why many people use that, I think) pikhq: Honestly, I still have a soft spot in my heart for Spivak pronouns. kmc: well, we'll see kmc: right now it's hard enough to get people to accept singular 'they' kmc: even though it goes back to shakespeare if not earlier kmc: pikhq: you don't like shopping? pikhq: Though there is one (honestly minor) difference between historical and modern use. Historical singular "they" was for an indefinite referent; modern singular "they" extends to definite ones. kmc: pikhq: meaning that the use to refer to a specific person is new? pikhq: kmc: I like shopping, and since I'm still boy-mode much of the time, am terrified of being caught in public doing so zzo38: I have a few question about conlang. One is if you have made fonts for constructed languages (with METAFONT or otherwise; for printer fonts I would probably use METAFONT if I were doing so)? Do some involve sounds not in IPA or X-SAMPA? Are there some with multiple mouth? Are there some with unusual writing directions (e.g. circular or 3D)? zzo38: There is also Z-SAMPA, but might any involve stuff not in Z-SAMPA? What effects might physiology have on phonology? kmc: pikhq: ah, I see zzo38: I noticed that Z-SAMPA uses some Italian words that are used in musical notation. pikhq: zzo38: I've never done so, but this is an interesting thing to think about. pikhq: A conlang for non-human physiology seems like a space ripe for some interesting experiments. kmc: pikhq: a nice thing happened to me today kmc: I helped a guy use the parking meter in my neighborhood and he said "wow, you're tall!" several times and at the end thanked me for being a "nice girl" pikhq: Aww. :) kmc: and I didn't even put in particular effort today to look female kmc: i was wearing jeans and a men's cut T-shirt kmc: so apparently the other stuff (hair, glasses, jewelry, tits?) is enough to overcome the fact that I'm a really really tall woman, at least for some kmc: (6'3", specifically) pikhq: I mean, if being tall were a problem my entire family would have issues. pikhq: My mom's 5'10". She's the short one. kmc: it doesn't help, but it's not a dealbreaker zzo38: I looked at information about Z-SAMPA, and they mention alternative non-ASCII characters for 8-bit character sets, although there are different 8-bit character sets so you may wish to do differently, such as PC character set. zzo38: (Another possibility might be a variant with colours.) zzo38: About non-human physiology, one thing I thought is that colour words might be untranslatable (although that is a separate issue from phonology, but it is still a part of the language). pikhq: In some cases, only translatable by analogy I suppose. pikhq: Though in truth -- color words are sometimes hard to translate even from human languages. zzo38: Yes, although in the case I am describing it is even more difficult, I think. pikhq: I imagine you're thinking of a species that either has a wider vision range, or (even more difficult) has a vision range that doesn't overlap with ours. zzo38: I found a article on Wikipedia about untranslatability. pikhq: Though even just having different sensitivity peaks within our vision range probably does odd things to color perception. zzo38: pikhq: Yes, the former; I didn't think of the latter although of course there is that too. zzo38: pikhq: I didn't think of that either, but that is also a good point. b_jonas: kmc: fuchsia and lavender are named of flowers too b_jonas: do we disqualify that featured language candidate because TwilightSparkle didn't read the instructions at the top of that page? Lykaina: hi b_jonas b_jonas: nah, let's give her a little more time, in case she realizes her mistake and edits b_jonas: or reads the channel b_jonas: I should suggest nopfunge as a featured language Lykaina: i said i would make twitter-sized cryptoquotes, i just have to figure out how b_jonas: what do you mean by "cryptoquote"? b_jonas: a quote where it's hard to tell where the quote comes from? Lykaina: sometimes called cryptics Lykaina: in the newspaper Lykaina: they are quotes Lykaina: that are encrypted with a simple substitution cipher Lykaina: turns out, easier to break than make Lykaina: 26! possible ciphers Lykaina: 26! = 403291461126605635584000000 Lykaina: and there are so many quotes b_jonas: ``` \' | perl -e'$/="";$_=<>;for$c(0..rand(25)){y/A-Za-z/B-ZAb-za/};print' HackEso: 930) Gur bgure qnl (jryy, gur bgure jrrx) zl jvsr jnf naablrq jvgu zr orpnhfr fur unq n qernz jurer V unq tbggra hf cynar gvpxrgf vagb n #rfbgrevp zrrg fbzrjurer va gur zvqqyr bs Terraynaq va gur jvagre, jvgubhg nfxvat ure svefg. Cyhf fur jnfa'g ernyyl vagrerfgrq va n #rfbgrevp zrrg ng nyy, yrg nybar bar va Terraynaq, yrg nybar bar va Terraynaq va jvagregvzr. (V guvax vg'f xvaq bs pbyq gurer?) b_jonas: oh, arbitrary substitution one b_jonas: that's better b_jonas: ``` \' | perl -e'$/="";$_=<>;use List::Util"shuffle";$c=join("",shuffle("a".."z"));eval"y/a-zA-Z/$c\U$c/";print' HackEso: 848) Scj B lq vlabnc Cvgdbjf jhclxck, iua ba bj Elvlmblv Cvgdbjf, vza Ikbabjf Cvgdbjf. b_jonas: ``` \' | perl -e'$/="";$_=<>;use List::Util"shuffle";$c=join("",shuffle("a".."z"));eval"y/a-zA-Z/$c\U$c/";print' HackEso: 262) JDS ejb HS'PP JS MNAS WQ UBBKESIWUPPD FSIWKQI DQNA IKBZ QGWSI b_jonas: the "38" is sort of a giveaway Lykaina: famous quotes, not chat room quotes... b_jonas: or just use the substitution that turns the quote to alphabetically the first, for canonicity b_jonas: so you take the first letter to "a", the second unique letter to "b" etc Lykaina: just as easy to break b_jonas: the last o strip was 12 days ago. time to upload the next one. b_jonas: fizzie: wiki notification bot missed my edit b_jonas: it's just late b_jonas: [ 0.0254*12#.6 7 NB. how long is 6 foot and 7 inches? j-bot: b_jonas: 2.0066 b_jonas: `8ball Does fungot give better life advice than a Magic 8-ball? fungot: b_jonas: forcer says: would " to give somebody something" or " gregor arr"... sort of tripping point is that satisfaction of predicate should be the default. HackEso: It is certain. b_jonas: fungot, please move the mouse cursor away so it doesn't cover your answer fungot: b_jonas: they're expensive. b_jonas: what? mouses? no they aren't int-e: must be the cursors then, not the mice. shachaf: Or answers. kmc: the tripping point int-e: pikhq: didn't that happen? int-e: pikhq: close enough, I think: http://www.milliondollarhomepage.com/ int-e: (wow that looks so terrible) pikhq: Pretty awesome bit though. int-e: That was 2005. Time's passing so quickly. int-e: https://en.wikipedia.org/wiki/The_Million_Dollar_Homepage#Survival ... there are "studies" about this page! pikhq: Time is an illusion that helps things make sense... :) pikhq: Uh-huh... int-e: b_jonas: ^^ this is your time to shine with another rant. pikhq: BF derivatives aren't clever? :) int-e: Let's wait for the inevitable quine, I mean program that prints its own source code. b_jonas: int-e: huh? why? just because it's a brainfuck-derivative? int-e: b_jonas: yes b_jonas: int-e: ok. my usual rant is that while those supposed esoteric languages are stupid, the wiki is serving its originally intended purpose that it's attracting people away from places that we want those people to spam less, like wikipedias. b_jonas: a language with the semantics of Ook! and the syntax of Real fast Nora's is not particularly innovative, but it makes more sense than some of the "languages" that people write pages about b_jonas: at least it's well-defined enough that you could write programs in it, if the aliens with the big guns demanded that from you ais523: oddly, the BF derivative shovelware ended up serving a "useful" purpose, in that CGCC started writing polyglots with all the syntax-substituted brainfucks b_jonas: that's not a useful purpose, and it's not like they were going to run out of languages usable for programming ais523: the megapolyglot often seems to be on the verge of running out of languages that can be made to fit b_jonas: oh, you mean that one]\ b_jonas: not just smaller polyglots ais523: right, the esolangs.org community is thinking "surely we have enough BF derivatives already?", and CGCC has fit in 277 languages into a polyglot and thus is often on the verge of running out ais523: BF substitutions tend to be easy to fit in due to having simple semantics and ignoring most of the program ais523: and that 277 includes a lot of very closely related languages, such as slightly different Haskell command lines b_jonas: yeah, some people on code golf count python1 as a separate programming language from python2 b_jonas: random observations from my vacation to NRW. in Dortmund, there's an U-Bahn (tube, metro) station where there's a platform on both sides of the train, the train doors open on both sides at the same time, people get on on one side and off on the other side. this is an interesting solution for a high traffic stop that I hadn't seen anywhere else. I like it. ais523: everyone should according to their rules ais523: their definition of a "language" is very precise, things like the Windows version of Perl 5.26 and the Linux version of Perl 5.26 are different languages… ais523: although the rules end up breaking down when you take them to the logical extremes, most people other than me avoid those b_jonas: well sure. I've worked with perl on windows, including trying to port my own script from windows-native perl to msys perl. perl is so incompatible with itself that you can consider any version a different version from itself. b_jonas: like, there used to be a windows-specific bug in perl when you called glob with multiple arguments b_jonas: and it's not just about the parts that are different because they access some functionality where the underlying system calls work differently ais523: didn't old versions of Perl implement glob using the shell? b_jonas: yes, old ones did b_jonas: using tcsh I think ais523: "Netscape Navigator 9 with JavaScript disabled" ais523: (actual language inside the polyglot) b_jonas: what makes it strange is how new contributors test the code in all those weird languages ais523: I pretty much gave up once it got past the scope of what TIO could handle b_jonas: have they added a pair of languages that are two very similar versions of a 90s game console, and the difference between them is detected from the timing of the sound chip or the diskette drive, so you can only test it on real hardware with an eprom cart, because the emulator doesn't emulate the speed of different diskette drives realistically? b_jonas: s/emulator/emulators/ ais523: actually there's a surprising lack of machine codes ais523: (there's at least one, but you'd expect more) ais523: I think there's a desire not to add any languages with a hard size limit b_jonas: even when the hard size limit is larger than the 32 kilobyte or 64 kilobyte post size limit of SE? ais523: we could always start compressing it in the post ais523: SE allows "Stack Snippets" which are basically a TC post syntax (based on JavaScript), and they're already being used to collapse the polyglots to save space on the page ais523: so as long as you can compress it and the post to less than the post size - decompressor size, it should be OK ais523: wow, RainbowRabbit left quickly ais523: normally on IRC you have to wait a bit if you want to see whether anyone's around b_jonas: also, in Dortmund, everything is closed on Sunday, which is pretty annoying to me ais523: Sunday rules in the UK are weird ais523: major/large shops are not allowed to open more than 8 hours on a Sunday b_jonas: we had about a year when we had government rules for Sunday too b_jonas: but they got reverted ais523: but small shops can open for as long as they like b_jonas: luckily ais523: major supermarkets often have small spinoffs to get around this rule b_jonas: yeah, I think we had exceptions for small shops too b_jonas: I think that was the rule because it matched their stated purpose with the rule, which was to protect workers who may not want to work on Sunday but were too powerless against their employees -- though people believed there was a less obvious selfish political purpose in the backgroun b_jonas: s/purpose/agenda/ pikhq: Probably historically there was a religious justification to it. b_jonas: yeah, that was certainly part of what they played for ais523: I think in the UK it was originally a religious thing that got repurposed (without necessarily undermining the original reason) b_jonas: but I don't think religion has much to do with the general idea that people should have a rest on some days of the week b_jonas: that's the sort of thing that both religious and anti-religious governments promised because people like it pikhq: Some religions do promote it, but it has been fairly common in a wide variety of societies, yeah b_jonas: right. it's like not murdering people. religions promote it as a rule too, but so do anti-religious people b_jonas: ah right, we just had an smbc on that zzo38: I think the rule should be, avoid making too much noise outside on Sunday. But otherwise you can do stuff if you want to do, just as well as other days of the week. zzo38: (With one exception, perhaps: The bells that tell the time on the clock will still be allowed.) b_jonas: the northern part of Dortmund has an itneresting park/forest hybrid thing. it's more well-tended than the kind of forest I'm used to, but bigger and more closed than a park in the sense that I could easily walk for a while in the middle without seeing anything but trees. b_jonas: it's quite close to the city center too b_jonas: was nice but also a little scary in the dark b_jonas: not like one of those big castle gardens either, too irregular for that b_jonas: are there music players suitable for children under 3 years of age, in the sense that they're impossible even for an infant to disassemble, too large to try to swallow, and spit-proof? or is that practically impossible because you can't make the contact towards the charger infant-proof? b_jonas: presumably it would need to have built-in memory rather than a micro-SD card slot b_jonas: and no display pikhq: Macro SD card? pikhq: (not an SD card, more like a PCMCIA-sized SD card :)) b_jonas: pikhq: no no. an infant would bite on that and break it b_jonas: infant-proofing is harder than vandal-proofing ais523: Here's to the crazy ones is a inspiration of Shakespeare Programming Language adjusted to reference Apple's TextEdit icon before Yosemite, saying "Dear Kate, Here's to the crazy ones." ← that sentence has got a close-to-perfectly-balanced ambiguity between Kate as a person's name and Kate as a text editor's name pikhq: b_jonas: Fiiine ais523: given that it's Apple, the former is probably more likely, but that depends on context b_jonas: I'm considering to change my featured language suggestion from Befunge to Nopfunge b_jonas: despite that I usually don't like counter machines ais523: Nopfunge and Tip are interesting because all the information is stored in the instruction pointer via repeating the program b_jonas: Conedy might be like that too, but we don't know if it's powerful enough zzo38: Have you seen my new and currently unnamed esolangs? I would want to know what is other people's comment of it. b_jonas: You could say that they're cheating by storing extra information that doesn't actually determine the instruction in the higher order parts for Nopfunge or the lower order parts for Conedy or Blindfolded Arithmetic ais523: actually, this reminds me of an esolang idea I was working on a while back but never made public because I couldn't get it to work b_jonas: but the language definitions are natural enough that it doesn't feel like cheating zzo38: Which one is that? ais523: it consists of a procedurally generated 3D space with lots of objects in it (like spheres, cubes, rendered 3D ASCII letters, that sort of thing) ais523: a program is simply a point and a direction ais523: interpreted as a ray that bounces off things imode: raytracing: the esolang. ais523: and all the numbers have infinite precision (somehow, not sure whether rationals or computable reals work better) b_jonas: ais523: hmm, do we in first place have a language where the contents of the instruction space is a pre-determined infinite one and the program consists of only a bignum instruction pointer for where to start? ais523: I couldn't get it to be TC in a natural way, though imode: ais523: have you seen "geometric" turing machines? ais523: b_jonas: I don't think so, I might be wrong though ais523: imode: no b_jonas: ais523: wait, why 3D rather than 2D? imode: lemme see if I can dig that up. b_jonas: can't it be turing-complete even if it's 2D? ais523: b_jonas: actually I think even 3 dimensions may be too little b_jonas: I guess to get such a language, you can just fix a nopfunge program that is a universal machine ais523: the basic problems are related to a) how you store information, b) how you store the program ais523: if you have curved surfaces to bounce off you can effectively define a program via using very minor shifts in the starting position of the ray, that get amplified when bouncing, so that you can take whatever path you like ais523: but a 3D object has a 2D surface, that means you're using up an entire dimension just to store the program b_jonas: right, so you can have a full oracle in a single finely patterned object b_jonas: that just reflect the ray to the right direction in a bounded number of steps b_jonas: possibly even in one step if it needn't be smooth ais523: and the remaining 1 dimension doesn't seem to be usable for anything more data-powerful than a single stack without some really contrived objects imode: ugh, this dude's stuff is scattered everywhere. imode: http://lara.inist.fr/bitstream/handle/2332/1001/LIP-RR2004-09.pdf?sequence=1 ais523: anyway, I got stuck (primarily on this problem) and never ended up creating a usable language, but that's about as far as I've gotten imode: he demonstrates a 2 counter automaton. imode: it's a "signal machine". b_jonas: ais523: could you make something discrete, like a reversible nopfunge in ten dimensions? imode: https://arxiv.org/pdf/0906.3225.pdf ais523: it's easy enough to do it if you allow for contrived object fields imode: more stuff. ais523: like having a universal machine just lying there, or using some sort of space-filling pattern that will contain any particular finite set of objects in any possible arrangement somewhere (assuminig the number of possible object arrangements is countable) imode: dude essentially forms computations by geometric construction. imode: all 2D too. b_jonas: ais523: a universal machine for something much more powerful than turing though imode: so you could absolutely make it TC, just by having different collision rules for objects. ais523: imode: right, I wanted something like that but more tarpitty imode: can't get more tarpitty than actual TMs. :P ais523: yes you can imode: well you probably could now that I think about it.. imode: keep forgetting the lengths people will go to to make their language unusable. ais523: tag machines are a good example of something generally considered to be simpler than a Turing machine b_jonas: imode: it's not just deliberately making them unusable, it's natural constructions that happen to be hard to use, or stuff like M:tG that are designed for goals other than general programming imode: I dunno, Malbolge seems maliciously designed. imode: along with a host of other languages. b_jonas: imode: yeah, think of Nopfunge rather than Malbolge or Intercal ais523: Malbolge's kind of a special case, it was intentionally designed to be unusable b_jonas: and note that Malbolge is old, which is its excuse ais523: b_jonas: well, if you subscribe to the rottytooth school that sees esolang creation as art, the user experience is part of that imode: doesn't seem rather well thought out considering... ALGOL68. :P ais523: and the theoretical/computational experience is quite different ais523: but also part of that ais523: esolangs designed as esolangs should ideally be interesting in all dimensions ais523: I put a lot of effort into Incident, for example (which is hard to use but at least has interesting reasons for that) ais523: much of my esolang research is more at the computational model end of things, though ais523: in which case the syntax doesn't even really exist, you're just coming up with something to fit it into a computer ais523: I guess my line is "if this language mostly exists to compile into something else, its syntax is not the interesting part" ais523: whereas if the language mostly exists for some other reason, things like the user interface are important ais523: there's an esolang (I've forgotten what it's called) in which there's a time limit on entering each line of the program and you can't use backspace… b_jonas: right, waterfall model and stackflow are examples where the syntax isn't important pikhq: At the very least, esolangs ought to be interesting along some dimension in ways that would otherwise be impractical for a language intended for serious use by _someone_. b_jonas: ais523: is that one flavored as a magic system in some fantasy universe, the programs being spells? ais523: b_jonas: no, it's flavoured as a terrible IDE b_jonas: ah yes, those do exist b_jonas: like the door opening keypad at my grandmother's house, which has such a short timeout that it erases my input between when I type the flat number and separator and when I figure out what the four-digit password is b_jonas: I always get it only on second try, when I have the password cached into my short term memory rather than just use the mnemonic from my long term memory b_jonas: so stupid, no need to have such a short timeout there ais523: the purpose of a timeout on those things is often to prevent issues where one person leaves information partially entered and then another person uses the keypad, causing all the inputs to be misinterpreted b_jonas: yes, I agree that there should be a timeout b_jonas: it's just too short in that case ais523: I've seen mechanical keypads of that nature which, being mechanical, have no timeout; there are often big signs put above them saying "please remember to press cancel before using this keypad" zzo38: How short is the timeout? b_jonas: zzo38: I don't remember, probably like five seconds b_jonas: ais523: this keypad has a display though, which shows "---" while you're typing the password b_jonas: this sort of keypad is really common, we have a similar one on this house, and one on my parents' house b_jonas: the keypad reads digits by shining horizontal and vertical lights a millimeter in front of the keypad, and detecting which row and column of light is interrupted. thus it can only read one key at a time. b_jonas: it's an interesting way to make a keypad that doesn't break easily from outdoor conditions and deliberate vandalism ais523: couldn't it read two or more keys at a time if they were in the same row or column? b_jonas: perhaps it could b_jonas: but I think it's better to detect those as invalid reads b_jonas: `? resetti HackEso: resetti? ¯\(°​_o)/¯ ais523: you could use them as chords to expand the character set of your passwords b_jonas: ais523: the one at my parent's house already sometimes becomes unusable at winter. or it did before some of the hardware got replaced. so I say no. b_jonas: if you want to expand password space, just use passwords longer than four digits. zzo38: I think four digit passwords is too short. Even if four digit passwords are allowed, the maximum should be more than that, perhaps eight or ten digits. b_jonas: zzo38: for a house gate, it doesn't really matter b_jonas: but sure, allowing a longer password is fine b_jonas: and the hardware these days can allow it easily b_jonas: for electronic house door openers I mean, not for eg. combination locks b_jonas: `? electronic monk HackEso: electronic monk? ¯\(°​_o)/¯ pikhq: Electrocuted monk? b_jonas: pikhq: no. electronic monk, from Douglas Adams. pikhq: Bah, humbug. pikhq: Go stick your head in a pig. arseniiv: do someone knows what’s that CRT mania about? arseniiv: how objective is it b_jonas: `? crt HackEso: crt? ¯\(°​_o)/¯ arseniiv: CRT display, I mean arseniiv: versus modern LCD technologies which there too many are now that I don’t know their betterness relations anymore arseniiv: b_jonas: I know one electronic monk, it’s called Delay Lama and is very old by now b_jonas: does he use mercury delay lines? imode: it's funny you mention that, I had an idea for a language that functioned similarly to delay lines. imode: instructions are laid out linearly. data is fed through them, one at a time. the instructions essentially define a pipeline. every element of memory is fed through the pipeline and then sent back through the loop until you hit a stopping point. imode: with structured data items and stateful pipeline stages, could prove a concise dataflow language if you figure out how to "flatten" dataflow networks into a pipeline. arseniiv: b_jonas: as if! arseniiv: uh, I meant to say “if only” ais523: hmm, could you combine the two phrases into "as if only" to make a simultaneous expression of disbelief and encouragement? b_jonas: fungot probably could, he combines expressions from a too narrow window all the time fungot: b_jonas: your patience is commendable. let me check whether it is b_jonas: fungot: it's time for the new o strip. please post it. fungot: b_jonas: then i think you have a third-world browser? or disabling it voluntarly? sure b_jonas: I did do a shift-refresh. I'm not going to disable the browser cache for you. pikhq: arseniiv: There's a few different claims for why they're "better", but the Big Ones are: CRTs have less intrinsic delay, CRTs are better at handling interlaced signals, and CRTs tend to be more accepting of odd display timings than modern LCDs are. b_jonas: pikhq: also their colors look the same from a wider viewing angle pikhq: For example, some games switch between 240p and 480i display modes with slightly different timing, and modern displays basically stop drawing anything during the switch. arseniiv: b_jonas: is that still an issue with modern types of LCDs? pikhq: (old CRTs just don't care) b_jonas: arseniiv: I think so b_jonas: arseniiv: what did improve in LCDs is that their colors look nicer, and the contrast stronger arseniiv: hmm I guess first of all I just don’t game too much, moreso in fullscreen arseniiv: I even watched films in a window usually :D pikhq: Ultimately all of those add up to "old game consoles were built for old displays, and modern displays aren't 100% compatible with them -- especially without a lot of hacks" b_jonas: pikhq: the viewing angle thing isn't about that pikhq: Yeah, that's more a fundamental limitation in the display tech. arseniiv: pikhq: wait, I thought they talked about modern gaming? oh b_jonas: I think it's both pikhq: Though modern LCDs have _much_ better viewing angles than old ones did. b_jonas: the larger part is that the old games were designed for crts pikhq: Yeah, CRTs having better latency still holds for modern gaming. pikhq: Though -- if you purchase the right displays, you can get LCD displays with low enough latency it's not a problem. b_jonas: but it's also that crts can do 200 hertz refresh and the visible output can change quickly compared to similarly priced lcds b_jonas: but I think that's getting somewhat solved by more expensive lcds pikhq: (buuut it's a lot easier to find suitable CRTs) b_jonas: I prefer lcds though, they have a lot of advantages b_jonas: well, at least nice lcds b_jonas: not the cheap ones that come with broken pixels b_jonas: I had the misfortune of meeting the latter kind at work zzo38: Does some mailing list software include support for NNTP? zzo38: Now I added a export command into bystand, to export articles to mbox format. (Currently, there is no import, though.) oerjan: what makes it strange is how new contributors test the code in all those weird languages <-- i think at this point only stasoid knows how to do it :P oerjan: and presumably has a fully scripted setup for it zzo38: pikhq: I think computer monitors have lower delay than LCD TV sets. So, if you have a game console system, connect it to a computer monitor rather than using the TV set. zzo38: (If they have a compatible connection) pikhq: It actually depends on both the TV and the monitor. pikhq: Some TVs are quite low-delay, some monitors are quite high. pikhq: Though for older consoles the worst case is when you're feeding an interlaced signal in. pikhq: Then, a TV will usually try to do a smart deinterlacing algorithm. pikhq: Which is reasonable for generic video content, as that'll look better. pikhq: But for games, latency is generally so important you'd rather deal with a bad deinterlace, like bob deinterlacing, just to not have the extra delay. zzo38: Do some TV sets have a option to change the deinterlacing algorithm? zzo38: Some old systems such as Famicom will output 240p, but apparently some newer TV sets won't understand a 240p signal pikhq: Some TVs do. There are also third-party devices, like the Retrotink 2x, that will do the ADC and deinterlacing themselves, and send a digital signal over HDMI. zzo38: I think that HDMI isn't very good and has a lot of problems with the design. (I think Digi-RGB is better.) pikhq: You're not wrong. pikhq: HDMI is _good enough_ for most purposes, but it's got significant problems in its design. zzo38: Yes, that is why I make the better one. I think everything with one cable is more disadvantage than an advantage, however, I also think that it is possible to make the advantages of both ways, by defining the standard arrangement and you can use cables which can be clipped together if wanted to do. zzo38: You can have one cable for video, one for each channel of audio, and one for commands, and you can connect only some in case you do not need all of them, or to connect them differently such as if the audio is connected to a separate audio system than the TV screen. pikhq: While that would get you a lot of flexibility, it does have the downside that most consumers want their video cabling to be simple. zzo38: One problem of HDMI is that HDMI does not have captions. pikhq: Oh, right, that. pikhq: That's just weird, too. pikhq: I forget, do Blurays have captions? zzo38: Yes, I know you might want the video cabling to be simple, which is why they are all clipped together, so that you do not have to deal with them individually unless you want to do so. pikhq: I know they have subtitles, but I don't remember if they have embedded captions like DVD does. zzo38: I don't know much about Blu-ray. DVD video has both captions and subtitles. zzo38: (I have a VHS/DVD combo which has the ability to render captions itself, whether from VHS, DVD, or external inputs.) zzo38: Even though DVD subtitles use indexed colours, I have not seen any option in DVD players and DVD software to specify your own colours and opacity for subtitles. pikhq: Which would be nice, cause some discs specify really bad colors too. zzo38: With Digi-RGB, the captions are transmitted using the IMIDI cable (which is the only one with bidirectional data, and it is optional to use that cable); the Digi-RGB video cable is only the picture and nothing else. kmc: good evening pikhq: Evening. oerjan: morning. kmc: fungot: what time is it anyway? fungot: kmc: i'm the author of the fnord pikhq: Such wisdom. oerjan: pikhq: sorry for the bad qwwem joke yesterday pikhq: Apology accepted zzo38: Do you like IMIDI and Digi-RGB? pikhq: I feel I don't know enough to be certain how I feel about them. b_jonas: ``` datei # what time is it anyway HackEso: 2019-10-07 07:29:24.622 +0000 UTC October 7 Monday 2019-W41-1 oerjan: `ddate HackEso: Today is Setting Orange, the 61st day of Bureaucracy in the YOLD 3185 b_jonas: `` TZ=Pacific/Auckland datei HackEso: 2019-10-07 20:32:28.859 +1300 NZDT October 7 Monday 2019-W41-1 oerjan: `where beat HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: where: not found oerjan: `` where beat HackEso: ​/hackenv/bin/`: line 5: where: command not found oerjan: `` which beat HackEso: ​/hackenv/bin/beat oerjan: `cat bin/beat HackEso: ​#!/usr/bin/python3 \ # beat - print current time in Swatch Internet Time format. \ # blame fizzie \ import math,sys,getopt,time \ prec = 0 \ atime = None \ opts,args = getopt.getopt(sys.argv[1:], "d:hpP:") \ for opt,oarg in opts: \ if "-d" == opt: \ if "@" == oarg[0]: \ atime = float(oarg[1:]) \ else: \ raise RuntimeError("unknown date format") \ elif "-p" == opt: prec = 2 \ elif "-P" == opt: prec = int(oarg) \ elif "-h" == opt: \ print b_jonas: `? beat HackEso: beat? ¯\(°​_o)/¯ b_jonas: `whatis beat HackEso: beat(1hackeso) - print current time in Swatch Internet Time format b_jonas: `what beat HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: what: not found b_jonas: `who beat HackEso: No output. b_jonas: `when beat HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: when: not found b_jonas: `why beat HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: why: not found b_jonas: `whois beat HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: whois: not found oerjan: `whence beat HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: whence: not found oerjan: `whomsoever beat HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: whomsoever: not found b_jonas: ``` for x in type what who which how why when whence where whither; do "$x" beat 2>/dev/null && echo "+$x"; "${x}is" beat 2>/dev/null && echo "+${x}is"; done HackEso: beat is /hackenv/bin/beat \ +type \ beat(1hackeso) - print current time in Swatch Internet Time format \ +whatis \ +who \ /hackenv/bin/beat \ +which \ beat: /hackenv/bin/beat \ +whereis b_jonas: ``` who beat HackEso: No output. b_jonas: ``` who beat you HackEso: No output. b_jonas: show it on the dolly b_jonas: ``` whereis beat HackEso: beat: /hackenv/bin/beat b_jonas: ``` type whereis HackEso: whereis is /usr/bin/whereis b_jonas: ``` whatis whereis HackEso: whereis(1) - locate the binary, source, and manual page files for a command b_jonas: ``` dpkg-query -S /usr/bin/whereis HackEso: dpkg-query: error: failed to open package info file '/var/lib/dpkg/status' for reading: No such file or directory b_jonas: if we had the package database, then we could add a "whence" script that does dpkg-query -S b_jonas: and a when script that queries both the hg repository and the package history for when the file was installed and modified b_jonas: a who script to tell who modified it... b_jonas: and a why script that links to channel logs for context wib_jonas: ``` for x in type what who which how why when whence where whither; do type -a "$x" 2>/dev/null; type -a "${x}is" 2>/dev/null; done HackEso: type is a shell builtin \ whatis is /hackenv/bin/whatis \ whatis is /usr/bin/whatis \ who is /usr/bin/who \ which is /usr/bin/which \ which is /bin/which \ whereis is /usr/bin/whereis shig: So I found this place from the bfjoust site. Anywhre with IOCCC winners announced in the topic can't be that bad wib_jonas: `welcome shig HackEso: shig: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: . (For the other kind of esoterica, try #esoteric on EFnet or DALnet.) zemhill: web.shig_eyeless_joustee: points -5.50, score 13.46, rank 42/47 fizzie: The underscore situation is getting ridiculous. fizzie: But I'm pretty afraid that the thing wouldn't actually start up properly if I kill it. wib_jonas: fizzie: its nick is 16 chars long, which is the maximum on freenode wib_jonas: do you think it will crash when it tries to add another underscore? wib_jonas: or fail to connect? wib_jonas: or will it get more ridiculous by modifying its nick in different ways?\ fizzie: I'm not sure. It may just keep the current amount of underscores. fizzie: I think it's left and come back a few times with the current name, though from my client's perspective those were all netsplits, so maybe it didn't actually reconnect those times. int-e: it has also reached the maximum nickname length on Freenode, I think. int-e: as wib_jonas already pointed out wib_jonas: well, if you can't fix the code, you just have to take it to a different network. there exist some with longer nick max lengths and longer channel max lengths. I think the maximum isn't even attained on the same network. fizzie: The plan was (I guess technically still is) to migrate it under the esolangs.org domain and at the same time switch to a rewrite that I think I left about half finished. Just never remember to pick that up. zemhill: web.shig_this_is_hard: points -15.98, score 9.72, rank 46/47 Hooloovo0: got this working today: https://cemetech.net/forum/viewtopic.php?p=282466#282466 b_jonas: Hooloovo0: uh, that's a weird goal b_jonas: so what does it do now? b_jonas: does the z80 need a lot of extra chips to make sense? Hooloovo0: nothing yet, since I just got done with the hardware Hooloovo0: in the 83+ there's an ASIC that does all the glue logic b_jonas: how does it get a RAM? b_jonas: or doesn't the z80 need one? Hooloovo0: there's ram and flash on the TI board Hooloovo0: http://hooloovoo.blue/files/noz80.png Hooloovo0: that's the board with the z80 removed b_jonas: sure there's some RAM, but I thought that was RAM that is hardware incompatible, plus the TI is already using it Hooloovo0: wait, the extra chip piggybacked on the back is the CPU, replacing the surface-mount one that would normally be on the board Hooloovo0: I'm confused what ram you think is incompatible? b_jonas: so the normal cpu isn't there? kmc: I got a TI-92 at the flea market kmc: what should i do with it kmc: i was thinking something ham radio related kmc: i wonder if there are any morse encoder/decoder for it kmc: it would be easy to hook up the link port to a cw keyer jack b_jonas: ah, so this TI model already uses a z80 cpu? b_jonas: that explains a lot Hooloovo0: yes, sorry, I guess that's not clear if you don't know anything about the calc b_jonas: I'm confused by calculator models, I assumed this was a calculator from 2000 or something Hooloovo0: it actually is, the date code is 0800 Hooloovo0: (aug 2000) b_jonas: sure, but the model b_jonas: anyway, ok, so it uses a z80 cpu b_jonas: and you replaced that with another z80 cpu b_jonas: that makes a lot more sense b_jonas: how long are those ribbon cables from the board to the cpu? the photos don't show the end Hooloovo0: right, so eventually I can do something like http://www.cosam.org/projects/z80/panel.html which would be basically impossible with the original, surface-mount CPU b_jonas: and at what frequency does the RAM run? Hooloovo0: the system clock is by default 6Mhz Hooloovo0: I don't have my frequency counter with me right now, but I have added in a variable resistor so I can overclock it Hooloovo0: you can see the ribbon cables between the two halves in the first picture Hooloovo0: they're maybe 15cm total kmc: what's the purpose of replacing the CPU? b_jonas: ok, that sounds not impossible Hooloovo0: top of the post lists some reasons :) Hooloovo0: also I'm not aware of a morse encoder, but that shouldn't be too hard to do in C I think kmc: encoder would be almost trivial kmc: decoding is much harder Hooloovo0: yeah, especially since it's not an analog port kmc: you would want some kind of tone detector circuit kmc: it could be level based, or frequency based kmc: not necessarily that complicated kmc: there are also ICs for that Hooloovo0: I bet you could do it with a 555 and maybe an op-amp b_jonas: ok, so this channel is about esoteric hardware too now kmc: you could maybe do it with a resonant LRC circuit that has an appropriate decay constant kmc: not sure if it's feasible to get high enough Q on that Hooloovo0: do you have a link cable? I've got more than I need kmc: but you also need to do stats to work out the pulse lengths Hooloovo0: but you can probably just get away with any old 2.5mm TRS kmc: and well, humans are not always super consistent with morse timing kmc: so it can be tricky kmc: Hooloovo0: I would love a link cable? kmc: Hooloovo0: I would love a link cable* kmc: and, do you mean I could make one with a TRS plug and a USB-TTL adapter or something? kmc: that sounds like something I could do with parts on hand, which is cool kmc: so many projects kmc: I wonder if my Mouser order's here yet kmc: for some sex toy hacking kmc: (is that also esoteric) Hooloovo0: actually, I actually do have a spare RS232 link cable Hooloovo0: s/actually/ kmc: I don't want to use an actual RS232 port kmc: USB would be good Hooloovo0: if you have a usb-rs232 that'll work with the graylink b_jonas: Hooloovo0: with male or female and the wide or narrow ends? Hooloovo0: and I picked one up from the dump last week Hooloovo0: also I have spare calc-calc cables, more than I can use kmc: that one is just a traight thru TRS right kmc: oh but it's 2.5mm not 3.5mm kmc: or is it a crossover Hooloovo0: straight-through kmc: I could also most likely program one of my microcontrollers to be a link cable kmc: which would be a little silly kmc: but the same hardware could act as an IO expander, ADC, etc Hooloovo0: TI has weird-length t and s connectors but in my experience it works with just a standard one kmc: anyway do you have a premade working USB link cable for me? kmc: you know maybe I think life is good and fine Hooloovo0: also yes Hooloovo0: wait I might actually have one, but if I do, it's in my storage unit kmc: i bet it wouldn't cost much to buy one Hooloovo0: I think they got significantly cheaper since TI did away with the link port on the CE kmc: I had a grey cable back in the day because it meant I could plug a modem into my 83+ kmc: including the wireless ricochet modem kmc: that was really fun kmc: i did IRC from it a little Hooloovo0: wait, how? I'm not aware of any tcp clients for z80 at all Hooloovo0: I guess if you could dial into some computer that can do IRC then that would work kmc: not TCP Hooloovo0: but yeah, the graylink is a lot of fun kmc: just a serial console kmc: Ricochet was a pre-wifi, pre-affordable-cell-data metro area networking service b_jonas: strange kmc: on 900 MHz kmc: they had their own 'fast' protocol with the host but you could also put it into a Hayes AT compatible mode and dial direct between modems, which was good because the service went out of business and you could buy them for cheap kmc: so I had one in the basement connected to my OpenBSD server and I could 'dial' it from my bedroom using the 83+ and a big pile of cable adapters kmc: one fun-evil thing would be to put a little wireles module (maybe one of the nRF serial ones) in a TI-* case Hooloovo0: that's awesome kmc: so you could message people while taking an exam kmc: I thought about this kind of stuff for fun but of course I didn't need to cheat to get a great SAT score :P kmc: i'm not sure but I bet I also had the 83+ hooked up to an actual phone line modem at some point b_jonas: so? there are still others who need to cheat to get a great SAT score and who may have bought your service kmc: i was lawful good back then kmc: now i'm chaotic good Hooloovo0: I wrote a shitty IRC client for the 92+ based on https://www.ticalc.org/archives/files/fileinfo/160/16061.html Hooloovo0: used it for a conference badge kmc: what hardware did you use for that Hooloovo0: just a graylink, and a laptop acting as a slip gateway kmc: ok cool Hooloovo0: and same re: not needing to cheat Hooloovo0: I think during the con I had a laptop without real serial ports so there was a usb adapter in there Hooloovo0: I could actually set it up with a modem, now that I have a phone line set up Hooloovo0: s/line/system/ Hooloovo0: the graylink is only half duplex, though.... so collisions have to be dealt with in software... and that's problematic b_jonas: Hooloovo0: collisions? not a protocol for switching direction? Hooloovo0: no, TI's link protocol just... doesn't really handle that Hooloovo0: and the ip-over-serial protocol assumes that collisions can't happen kmc: Hooloovo0: your calculator brain surgery is impressive kmc: that's a lot of soldering fizzie: We used a TI-86 as the controller of an echo effect for a DSP programming course at the university. fizzie: Didn't involve any soldering, but involved like two evenings of debugging with an oscilloscope before someone thought to check the speaker cable scavenged from somewhere. fizzie: (It was bad.) kmc: typical fizzie: https://zem.fi/tmp/spank.jpg fizzie: (The code was nothing to write home about, so we had to embellish it *somehow* for the flair.) shachaf: hi kmc shachaf: what'z jammin' kmc: frustrated because my home internet keeps going down and i don't know why shachaf: that's scow shachaf: do you like SPEKE? twh kmc: it's scow kmc: what's SPEKE kmc: spotify still thinks it's offline even though the machine is online thru my phone kmc: spotify is buggy kmc: fortunately i still have some music stored locally pikhq: Pretty scow imode: so we have the structured program theorem for control flow. what about data flow? shachaf: kmc: password authentication protocol shachaf: where two people can confirm that they're thinking of the same thing without revealing it to each other kmc: well that's cool kmc: that's kind of like the question I asked in ##crypto re cryptographically secure dating services kmc: you have a set of people, everyone selects the ones they have a crush on, and you find out if anyone you picked also picked you pikhq: Huh, interesting kmc: but you can't find out if they picked you without picking them, and you can't find out anything about other pairs kmc: and then someone linked me to https://github.com/teledildonics/private_kink_intersection kmc: which is.. a great URL kmc: and solves basically the same problem in a slightly different context kmc: so there are some papers on this private set intersection problem kmc: Hooloovo0: would a serial link cable work with this usb adapter? https://www.amazon.com/gp/product/B0007T27H8/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1 kmc: black graphlink, or grey only? kmc: iirc the black one uses CTS/RTS kmc: it /should/ work but I don't know if it's picky about timing kmc: (many hams keep an old DOS laptop around for programming radios from the 90s that use timing-exact serial interfaces) kmc: Hooloovo0: I found a 2.5mm TRS plug by chance today kmc: so I might try to build https://www.ticalc.org/hardware/cables/serial.html kmc: if I can't get a silver link cable from one of the local free-shit groups kmc: that one is supposedly black link compatible and i have all the parts most likely kmc: it doesn't say what volage of zener diode to use :P kmc: should I assume 5.6V? Hooloovo0: grey onl Hooloovo0: stupid y key kmc: so in that case the homemade cable also won't work w/ my serial adapter kmc: too bad Hooloovo0: I'm not sure that one will work with a usb/serial adapter Hooloovo0: the problem is that it used flow control pins as data pins... which if you have a real serial port, that's fine Hooloovo0: but usb serial ports handle it poorly kmc: it should be possible to program a micro as a normal-serial-over-USB to TI-wacky-protocol converter kmc: but that also sounds like effort Hooloovo0: it might work, but it probably won't kmc: when I can get a graphlink usb for <$20 kmc: I did confirm that the TI-92 turns on Hooloovo0: yeah, that probably could be made to work, someone might have even done it kmc: I could also get a grey link for $16 which would be more versatile in some ways but a lot more bulk Hooloovo0: it's just a 92? I think you have to do hacks to get assembly working on plain 92 kmc: it's not a 92+ Hooloovo0: https://www.ticalc.org/basics/calculators/ti-92.html looks like it's doable though kmc: i could still have fun with basic too kmc: TI-89/92 BASIC is pretty powerful Hooloovo0: yeah, it is kmc: and pretty fast if you take good advantage of the built-in capabilities Hooloovo0: I'm a lot less familiar with 68k basic than z80 basic Hooloovo0: oh, apparently there's a better way, but that page can't be fucked to describe what it is Hooloovo0: https://www.ticalc.org/pub/92/asm/shells/ that's right, fargo Hooloovo0: been a while since I've played with the plain 92 kmc: does it work with tigcc? kmc: I've never actually done m68k assembly, it could be fun kmc: maybe this will get me excited about coding again kmc: who knows kmc: could happen Hooloovo0: gcc4ti is the 'new' thing Hooloovo0: but yes, it should be supported fizzie: Our (high) school was all TI-85/86 when I went through it. I think the 85 you had to trick to write assembly, but the 86 did it natively. kmc: we had mostly 83+ and 89 kmc: the 89 was a lifesaver for calc and physics kmc: it has a decent CAS along with unit analysis fizzie: 86 didn't do algebra, but I think that was an advantage, you were allowed to use it in the exams. Hooloovo0: yeah, you had to trick the 85 Hooloovo0: we were starting to get nspires when I was in HS fizzie: I'm thinking TI-86 was about the most advanced thing you could possibly take with you in an exam. And you had to reset it. kmc: iirc the 89 was allowed on all AP math/science exams Hooloovo0: I don't recall it being super useful though kmc: I had a fake reset screen app kmc: not for cheating... but because I didn't want to lose the games and stuff fizzie: I think that existed for the 86 as well. kmc: you can do it easily enough if you can run asm kmc: it's not like there's any OS that's going to stop you fizzie: Well, it could have a hardware reset switch. Hooloovo0: they do :P take out all batteries, then on+clear Hooloovo0: while inserting the last one fizzie: Right. I don't think anyone insisted on resetting it that thoroughly though. fizzie: I wrote a robotfindskitten port for the 86, https://zem.fi/rfk86/ Hooloovo0: iirc also there's hold left and right arrows on later 84+OSs had 'hold left and right with battery insert' as 'reset for signapore' Hooloovo0: http://wikiti.brandonw.net/index.php?title=83Plus:OS:Secret_Key_Combinations Hooloovo0: hmm, that's not quite what it does, but yeah, there's all those ais523: the problem is that it used flow control pins as data pins... which if you have a real serial port, that's fine ← if you're doing that, it isn't a serial port, it's a parallel port kmc: ais523_: well, except that the actual TI protocol is serial, isn't it kmc: clock + data? ais523: I guess you could use the flow control pins as data pins, but not the actual data pins, but that seems perverse ais523: if you're using two different pins to send data simultaneously, though, it isn't a serial connection by definition :-) imode: bits go one at a time down a single wire. kmc: so it's using a "serial port" (as in 8250 compatible UART on a PC) in the common manner of a parallel port (GPIO bitbang) to implement a serial protocol :P kmc: ais523_: SPI is clock + bidirectional data, 3 pins (4 including a chip select) and that's universally considered serial kmc: Hooloovo0: btw the PIClink here seems to be an example of what I was saying re: programming a micro to act like a grey link http://merthsoft.com/linkguide/cable.html kmc: anyway i'm not clear on what the hardware level link protocol is fizzie: The TI link protocol is pretty special. fizzie: It's an async thing. fizzie: When you want to send a bit, you pull one wire to zero, and the receiving end acknowledges by pulling the other wire to zero. fizzie: Which wire you pull determines if it was a 0 or a 1 bit. fizzie: So there's no clock involved, it runs at whatever speed it runs. fizzie: Disclaimer: all I know about this probably came from http://paperlined.org/EE/microcontrollers/pic/projects/portable_VT_terminal/ti_86_link_port/link86all.htm -- at least that page looks familiar. ais523: ais523_: SPI is clock + bidirectional data, 3 pins (4 including a chip select) and that's universally considered serial ← sorry, should have added "in the same direction" to that kmc: fizzie: huh, weird. kmc: cool, this has the info I was looking for fizzie: kmc: Well, it does let you do it all in software on CPUs that might run at rather uncontrolled speeds, without having to have an UART or whatnot. ais523: hmm, that's an interesting way to fit the normal three wires that an async connection uses (data + strobe + ack) into two, although they both have to be drivable from both ends kmc: it seems pretty clever kmc: it also allows you to immediately tell if the other side is present ais523: I assume that after sending a bit, then the sender undoes their pull, then the recipient undoes their pull, to keep the connection as delay-insensitive kmc: so i would say this is still serial because it transfers one bit of information at a time, even though it uses two wires to do it kmc: and yeah, it seems this allows the receiving end to slow down the sender when necessary kmc: effectively negotiating a baud rate which is the slower of what the two sides want kmc: it's actually very clever kmc: I might even use this sometime in one of my own projects kmc: I have used Manchester code for something ais523: throughout my PhD I was working on a compiler to hardware which uses a delay-insensitive representation internally for most of the compilation process kmc: which is synchronous, so the bit times have to be roughly the same, but it has clock recovery so no precise absolute frequency reference is required ais523: (for much the same reason that compilers to software use SSA or similar normal forms; you don't want to care about timing details until the compilation is finished) kmc: makes sense ais523: so I ended up doing a lot of background reading on asynchronous circuitry imode: there's a "bible" for asynchronous circuit design. ais523: you nearly always need a separate wire for 0 bits and for 1 bits because you assume that the recipient can't tell which of two wires changed first ais523: but normally, the acknowledgement would be on a third wire imode: asynchronous pipelines are neat. I built one. ais523: a big advantage of doing things that way is that you don't need to reset the logic levels after sending a bit, you just toggle the 0 wire or the 1 wire to send the bit ais523: and the recipient toggles the ack wire to acknowledge kmc: this also reminds me of CAN a bit imode: https://hatebin.com/huuywfgrqq save this as "pipeline.circ" and open it in http://www.cburch.com/logisim/ ais523: imode: is this the famous "micropipelines" paper? kmc: it's open-collector and it has clock stretching sort of imode: ais523_: sutherland? partially. there was a larger book. ais523: the funny thing is, one of the references in that paper is dubious, and people keep copying it into their own reference lists without actually chasing the reference imode: http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/855/pdf/imm855.pdf this thing. ais523: meaning that you have this book that's highly cited but almost nobody has actually read imode: not surprised. ais523: (the book was basically just being used as a surrogate source for a particular statement because the original source would have been very hard to get hold of at the time; however, the original source for the statement has since been digitised so it's much easier to find) ais523: (and it's basically just a throwaway line in the book, rather than giving any additional context) oerjan: ok, so this channel is about esoteric hardware too now <-- pretty sure it's been that for a long time ais523: programming isn't limited to software ais523: although, the hardware meaning of "programming" normally means "to copy a program to" (where the program is usually software, but could be firmware or even a blueprint for making hardware) kmc: Hooloovo0: I'm signed up for the float tank at 11am tomorrow :) ais523: hmm, so I guess "esoteric programming" in hardware would be updating the state of reconfigurable hardware via some ridiculous mechanism ais523: such as waving magnets at it imode: magnetized needle and a steady hand. kmc: hit it with a hammer oerjan: i'm pretty sure there's an old "real programmer" joke about that pikhq: Probably a few. ais523: there's an xkcd which may be either a) the joke you're thinking of or b) a parody of the joke you're thinking of ais523: but I don't have xkcd numbers memorized imode: butterfly effect. imode: https://www.xkcd.com/378/ b_jonas: and I think you mean https://www.xkcd.com/378/ b_jonas: argh you were faster imode: ninja fingers. oerjan: oh right Hooloovo0: kmc, merth's link guide should have the best info on that Hooloovo0: http://merthsoft.com/linkguide/hardware.html Hooloovo0: it's not really clock+data serial - it's more of a a send/ack serial Hooloovo0: but I guess ais253 left imode: it's okay. this channel is logged. imode: you can use lambdabot's @message feature to send a message to him as well. Hooloovo0: also cool re float tank imode: @botslack kmc: Hooloovo0: yeah I got the gist of it kmc: it's a clever solution really kmc: I like it szefczyk: Hi I'm back szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: KRZYSZTOF SZEWCZYK CHUUUUUUUUUUUUJUUUUUUUUUUUUU szefczyk: WRÓCIŁEM szefczyk: KOCHAM CIĘ KOTKU szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: SZEWCZYK CHUUUUUUUUUUUUJUUUUUUUUUUUUU szefczyk: SZEWCZYK CHUUUUUUUUUUUUJUUUUUUUUUUUUU szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS 1,8JS szefczyk: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA szefczyk: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA szefczyk: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA szefczyk: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA szefczyk: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA szefczyk: JEEEEEEEEEBAAAAAAAĆ SZEEEEEEEEEEEWCZYYYYYYYKA hppavilion[1]: What the fuck fizzie: I though they'd gotten bored of that. int-e: I had the same hope. int-e: fizzie: Can you invite Sigyn? I think it should trigger on blatant repeated messages like that. fizzie: Let's give it a try. Sigyn: ** Warning: if there is any bot in #esoteric which should be exempted from Sigyn, contact staffers before it gets caught ** fizzie: ...well... fizzie: That's a little scary. myname: where to start int-e: I guess esowiki is at risk? int-e: not sure about the rest, they usually just react and are not too repetetive. int-e: tricky. fizzie: Well, depends on what you ask them to do. fizzie: zemhill_* can also repeat the same message over and over again, if someone's submitting stuff on the webs. Hmm. int-e: I'm kind of curious how this will/would play out. myname: it is not that uncommon that people ask the same trigger repeatedly, but i guess, that shouldn't be too often fizzie: Maybe I should talk to a staffer anyway. fizzie: Also, maybe I should register an account for HackEso. wib_jonas: Is there a doc for that bot? It doesn't mention one in Taxonomy fizzie: I found relatively little information about it by Googling. wib_jonas: it has a freenode/* cloak though, let me ask #freenode wib_jonas: fizzie: " wib_jonas: the bot k-lines (and kills, in addition) on various triggers, most famously people repeating patterns" wib_jonas: " so it most certainly does have side effects, and if the channel has official bots that could look a bit spammy, we should be informed so we can whitelist them before putting sigyn in the channel" wib_jonas: fizzie: go to #freenode and talk to ops there myname: ah, good old fuchs wib_jonas: fizzie: also, they admit that is ran by freenode fizzie: Yeah, I'm trying to get an account for HackEso and esowiki because I assume that'd be useful for whitelisting. int-e: fizzie: now I'm feeling bad for causing you work :/ fizzie: (I think I'm just going to need to connect as them temporarily, since I don't think either has a great way of injecting raw text.) int-e: yeah at the very least you'll have to acquire the nick somehow int-e: but they also have to learn to register with nickserv on startup. int-e: well, authenticate fizzie: There's the password approach, I think both of them can do that. fizzie: Hm, well, I don't think multibot actually does passwords. I'll hack that in. wib_jonas: fizzie: there are at least three ways to log in: (1) with PASSWD, (2) with NICKSERV ID , (3) with the CTCP extension. I can send details if you want later about how the CTCP thing works. wib_jonas: each one sends password as cleartext, but that can be inside an ssl/tls connection in either case fizzie: I think that should maybe do it. fizzie: Yes, that seems to have worked. wib_jonas: I have old source code that implemented the CTCP login and worked at one point, though for freenode only and errors out on any other network wib_jonas: HackEso is logged into nickserv as HackEso, or so the server claims wib_jonas: we may have to part j-bot though int-e: wib_jonas: I've heard about SASL... but CTCP? wib_jonas: int-e: sorry, it's SASL wib_jonas: I'm talking off the top of my head because I'm a towkr wib_jonas: CTCP is an unrelated thing wib_jonas: it's SASL, which has so many S and L in its name that you'd think it uses some cryptographic challenge, but it doesn't wib_jonas: rather confusing name int-e: Okay. CTCP is just a special kind of PRIVMSG so it seemed out of place. wib_jonas: it just encodes the account name and password in base64 fizzie: Well, it can, right? There are SASL methods that involve crypto. wib_jonas: FireFly: ping fizzie: Anyway, I think I'm fine with a TLS connection + PASS on connect. fizzie: (The bouncer I use for myself + for fungot does SASL.) fungot: fizzie: keep in mind, but i'm sure you can wib_jonas: FireFly: are you running j-bot? fizzie has invited Sigyn to #freenode . it's a bot ran by freenode that k-lines users who spam the channel wib_jonas: FireFly: you might need to be either careful so that j-bot doesn't trigger it, or get the channel ops to ask an exception for it, or just part j-bot from this channel while we have this state wib_jonas: I apologize, because I was the one who asked to get j-bot here, knowing that it can be spammy wib_jonas: ah yes, it may be called PASS rather than PASSWD wib_jonas: funny they abbreviate that command name, but not PRIVMSG FireFly: I think it should be fine, I'll check later FireFly: I'm familiar with Sigyn :p fizzie: Okay, I think esowiki, fungot, HackEso, lambdabot are all registered now. fungot: fizzie: in fnord it only runs where ghc runs :) wib_jonas: ^prefixes fungot: Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ . wib_jonas: fizzie: and you mentioned zemhill_________ too fizzie: Yes, I just don't want to touch that at this point. It's used very very little. wib_jonas: probably for the best fizzie: So what's the normal rule for talking to Freenode ops, should I just pick a random one on the list or ask on the channel? wib_jonas: fizzie: in this case, ask Fuchs on #freenode what to do since he already answered a question wib_jonas: if it's not a secret thing, then asking on #freenode is the normal way fizzie: Right. wib_jonas: but some operatorial things shouldn't be public, in which case you have to privmsg them wib_jonas: like, if you want to mention specific details about the spammer int-e: Though the way #freenode is currently set up only staffers will see the messages anyway, I guess. int-e: (But their answers will be visible to all.) fizzie: Oh, that's interesting. wib_jonas: int-e: no, it's not on +mz right now int-e: Huh, that's false... wib_jonas: they do often switch it to +mz int-e: wib_jonas: Funny though I didn't see your question? Let me check again. int-e: wib_jonas: Or did you ask before I joined? fizzie: Right, it's that moderation thing. wib_jonas: int-e: what question? wib_jonas: question for what? int-e: wib_jonas: You asked about Sigyn on #freenode. int-e: wib_jonas: I joined around 12:58, I saw the answer around 13:19... I didn't see your question. int-e: But it didn't occur to me that it may have taken longer than 20 minutes to get it... hence my question here, now. wib_jonas: int-e: they have unidentified users quieted wib_jonas: int-e: in the mode #freenode +q $~a int-e: wib_jonas: thanks wib_jonas: there, now I'm identified, you'll see if I say anything on #freenode, but I no longer have a reason to say anything there int-e: I was mystified. I hate being mystified by technology, that's what magic is for :) fizzie: For the record, the Sigyn exemption for those four has been done. int-e: lambdabot: spam away! lambdabot: Roger that ;-) arseniiv: lambdabot: what does two added to three centillions equal? arseniiv: I guess I broke them arseniiv: wait, int-e, are you still there? int-e: > 2 + 3*10^303 -- 2 + 3*10^600 in B.E. doesn't fit into IRC. lambdabot: 3000000000000000000000000000000000000000000000000000000000000000000000000000... int-e: oh. right. int-e: arseniiv: I don't know what a centillion is. wib_jonas: isn't it like 1/100 lions? arseniiv: I found it strange lambdabot didn’t say anything to my plain text question at all wib_jonas: or maybe llions int-e: (Well, I do for the moment but I have no intent of retaining the information.) wib_jonas: if there's such an animal as a llama, then there could be a llion too int-e: arseniiv: You do know that she's a bot, right? arseniiv: I don't know what a centillion is. => I don’t remember that too wib_jonas: arseniiv: usually he answers when you use one of the four prefixes, @ ? > :t int-e: arseniiv: And I did hide the sock puppet; it would be foolish to retrieve it just to answer your question. int-e: I might be caught lambdabot-handed. wib_jonas: @run string "arseniiv: dimension error" lambdabot: error: lambdabot: • Variable not in scope: string :: [Char] -> t lambdabot: • Perhaps you meant one of these: wib_jonas: @run var "arseniiv: dimension error" lambdabot: arseniiv: dimension error arseniiv: int-e: but there could be at least a non-answer like… like I don’t know what precisely but at least something to make sure there’s no infinite loop anywhere int-e: arseniiv: try fungot. wib_jonas: arseniiv: try j-bot or perlbot wib_jonas: j-bot: what is a centillion j-bot: wib_jonas: what (is a centillion) fungot: I, on the other hand, will never tolerate being used by humans for pretending to be machines. wib_jonas: j-bot, help: wib_jonas: j-bot, source: arseniiv: perlbot: what is that with making the text yellow j-bot: wib_jonas, jevalbot source is https://github.com/FireyFly/jevalbot (originally http://www.math.bme.hu/~ambrus/pu/jevalbot.tgz) wib_jonas: j-bot, echo: centillama j-bot: wib_jonas, pong: centillama int-e: arseniiv: there's also the @lambdabot "trick". wib_jonas: `? lambdabot HackEso: lambdabot is a fully functional bot. just don't ask about @src. or the neighbours. wib_jonas: ? lambdabot lambdabot: src . Display the implementation of a standard function arseniiv: I might be caught lambdabot-handed. => at least it’s better than right-handed or, I don’t want to say that, left-handed int-e: arseniiv: Oh, are you being plagued by sinister thoughts? int-e: Does fungot know any puns? fungot: int-e: i think that's an ( invalid) octal number. arseniiv: int-e: maybe arseniiv: fungot: may I impersonate you for a while, and if so, how could I achieve that? fungot: arseniiv: and they are slow and cost 25 cent in euros, no matter wib_jonas: int-e: look through the quotes file, it may have some puns that he committed int-e: `' fungot fungot: int-e: to fnord? that's scary stuff! HackEso: 10) GregorR-L: i bet only you can prevent forest fires. basically, you know. \ 13) Finally I have found some actually useful purpose for it. \ 14) oerjan: are you a man, if there weren't evil in this kingdom to you! you shall find bekkler! executing program. please let me go... put me out! he's really a tricycle! pass him! \ 56) i am sad ( of course by analogy) arseniiv: ah! it’s a robbery, I can’t afford those prices wib_jonas: ^ul (arseniiv: dimension error) wib_jonas: ^ul (arseniiv: dimension error)S fungot: arseniiv: dimension error int-e: fizzie: ^^ there's a business model for you. arseniiv: wib_jonas: this works but I would be caught when writing that in chat wib_jonas: wait, do we really have 102 fungot quotes? fungot: wib_jonas: you did some design decisions seemed silly to do a program, though. that means i can have some data carried along with it arseniiv: I want to do that secretly. Or, should I say, I definitely don’t want that int-e: wib_jonas: Well, fungot never sleeps. arseniiv: fungot has their own secret business too fungot: arseniiv: ah. so nothing i can do: ' fnord' peers.) ( all it's missing after that will immediately be allocated on the pinned heap? arseniiv: allocates and deallocates things and doesn’t say anyone where and why wib_jonas: arseniiv: I think buubot2 had such functionality, but buubot3 doesn't have it, perhaps because it's so easy to abuse arseniiv: I should write a useful bot and get a trust of #esoteric with it and then… wib_jonas: arseniiv: you can try running commands in HackEso/j-bot/lambdabot/fungоt that take some time to run, like up to ten seconds or whatever the timeout is, then if there's a lot of other chat, perhaps people will miss your command. int-e: @metar lowi lambdabot: LOWI 081320Z 28005KT 250V320 9999 FEW070 SCT100 14/06 Q1014 NOSIG int-e: . o O ( winter is coming ) wib_jonas: arseniiv: it's the easiest with HackEso, since on a timeout, it just prints the output so far with no error message wib_jonas: `perl -efor(1..999){sleep 1;print("$_ ")} arseniiv: wib_jonas: then if there's a lot of other chat, perhaps people will miss your command. => hmmmmn I have doubts HackEso: No output. wib_jonas: arseniiv: HackEso is also pretty programmable, so you can make it give surprising results that seem unconnected to your query wib_jonas: `perl -efor(1..999){sleep 1;print("$_ ");flush STDOUT} HackEso: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 arseniiv: fungot: let’s eat something fungot: arseniiv: is that not many people have understanding the concept. on fnord, and so wib_jonas: lambdabot and j-bot support assignments too, so you can just make any variable or function have an unexpected value, and in j-bot, you can even change values from private message if you know the right incantations, but the drawback is that j-bot and lambdabot always mentions the nick of whoever they reply to wib_jonas: no wait wib_jonas: lambdabot doesn't wib_jonas: and you can give assignments in private message wib_jonas: but it's not easy in either j-bot or lambdabot to redefine builtins wib_jonas: eg. it's not easy to make them say that 2+2 is 5 j-bot: wib_jonas: 4 wib_jonas: if you try to redefine (+), you just get a message about how it's ambiguous with Prelude.(+) wib_jonas: iirc rust works more sanely, because wildcard imports (like how you import every symbol that Prelude exports) can be shadowed by a symbol that is either local to a package or imported by name wib_jonas: > maр (10*) [3,1,4,1,5,9,2] -- arseniiv lambdabot: [30,10, Ok, this is getting boring wib_jonas: you can try to cheat that way wib_jonas: there's one way that buubot3 lets you cheat: while it's running the eval command (which evaluates a perl statement) in a sandbox, it's running all of them in the same sandbox, so if more than one buubot command is simultaneously running an eval, than one can kill, or perhaps even ptrace, the other wib_jonas: ptrace may be impossible, but I experimented with killing a lot wib_jonas: fizzie: no! don't add cloaks. they're usually longer than an ordinary hostname, so the max response length that they can give gets shorter wib_jonas: fizzie: or if you do give them cloaks, then make sure to edit the spore or similar commands in HackEso to know about the new max message length wib_jonas: ``` perl -e'for$n(0..49){printf"%02d",$n;for$l("A".."Z"){print $l,lc($l)}}' | sport HackEso: 1/6:00AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz01AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz02AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz03AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz04AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz05AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz06AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz07AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz08AaBbCcDd HackEso: 2/6:kLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz09AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz10AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz11AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz12AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz13AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz14AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz15AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz16AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoP wib_jonas: fizzie: ^ see, sport skipped some letters between 08 and 09 there fizzie: wib_jonas: Kind of too late now, didn't think of that. :/ myname: wtf does sport do wib_jonas: `? sport HackEso: sport divides its input into irc-sized pieces and displays the nth (default first). The pipe version of `1. See also spore. wib_jonas: `? spore HackEso: spore stores its input in tmp/spout and displays the nth line (default first). For a version considering irc line lengths, see sport. See also `spam. wib_jonas: fizzie: for lambdabot, it probably matters less, because it has a very short message length on channels, and breaks into multiple lines for private messages wib_jonas: but for HackEso this should be changed I think wib_jonas: also now it can look at the IRC_* variables to know how long the target is wib_jonas: also, this is the sort of thing why I don't trust the HackEso scripts and just use coreutils and perl one-liners when using HackEso int-e: lambdabot's fairly conservative about IRC message lengths... I seem to recall 350 characters for privmsg? fizzie: HackEso was tuned for throughput, not reliability. wib_jonas: it gave up after two list entries above, so that should fit fizzie: I'm kind of reluctant to bother them again, after I mentioned the cloaks after the Sigyn whitelisting and they said it would've been nice to have been told about that first. wib_jonas: fizzie: sorry, I didn't know that you'd be applying for cloaks wib_jonas: I would have told otherwise fizzie: Yeah, I should've mentioned. wib_jonas: I never asked cloaks for my bots, because the hostname that they used was shorter than any cloak wib_jonas: that said, you could of course try to register the esolangs community and get shorter cloaks eventually after a year.... fizzie: I don't think it's an issue for fungot, since it's got a conservative max length too. And probably not for esowiki either, because it doesn't matter if it truncates long titles a little more. fungot: fizzie: let's try to factor 4 using shor's algorithm. :)... nah, just obfuscating often result in getting a scheme to play with them.) fizzie: For HackEso it's a little unfortunate. fizzie: I remember we changed the username to ~h to get a few extra characters out. wib_jonas: yes. we should golf the channel name too. wib_jonas: sadly iirc freenode doesn't allow non-ascii channel names int-e: pfffft. wib_jonas: so we can't use the four-byte channel name #ꙮ fizzie: Well, I'll look at the length situation when I get home. wib_jonas: thank you int-e: `unidecode ꙮ HackEso: ​[U+A66E CYRILLIC LETTER MULTIOCULAR O] int-e: Heh, I guessed correctly. wib_jonas: and HackEso's old hostname is pretty short too int-e: we'll cope wib_jonas: shorter than some ipv4 addresses int-e: `? oerjan HackEso: Your omnidryad saddle principal ideal golfing toe-obsessed "Darth Ook" oerjan the shifty eldrazi grinch is a punctual expert in minor compaction. Also a Groadep who minces Roald Dahl. He could never remember the word "amortized" so he put it here for convenience. His arkup-nemesis is mediawiki's default diff. He twice punned without noticing it. wib_jonas: int-e: sure, by breaking messages to more likes, causing more spam int-e: Even this quote fits. ;-) int-e: Err wisdom. wib_jonas: `? ance HackEso: Spelling of -ance/-ence words: advance, science, conference, experience, finance, insurance, licence, performance, reference, assistance, balance, defence, difference, distance, evidence, acceptance, appliance, audience, compliance, importance, influence, instance, intelligence, maintenance, preference, presence, sentence, sequence, substance, violence, absence, accordance, alliance, appearance, assurance, attendance, circumstance, clearance, wib_jonas: `? brilliant HackEso: ​04B҉ͭR̲̞Iͪ͞L̡͠L̝̊I̤ͣA̍҉N̏́T̈͡ 07̐̇ȉ̲s̉̐ 08̸̉ḷ̂i̪̱k͉ͬḛ็ 09͓̪t็ͬh̺̊e͜͢ 02͏͛B̈ͅE̳̘S̰ͤTͬͧ 06̰̕w̺̼o̷̓ŕ͂d̹̠ 13͍͑i͚̾n̺̮ 04̇͑t͗̍hͧ͌ḙ͕ 07̻͜ű̖ňͤi̴͠v̸̧ḛ͔ř̭s͍͠ẻ̗ 08͏̲a̮̺nͣ͟d̝ͨ 09̳͗i̟͘ẗ͎ 02̼̲ẘ̦i̭ͮl̢̋l̨̉ 06̺͌c̑͡h̽̀âͮn̩̈́g̫ͣe͉͒ 13ͦ̓y̙͕o̔͒u̷ͬr͂͐ 04̓͝l͙͐ȉ͕f̹́ẹ̲ 07̤̹F̌ͅÒ wib_jonas: `? zarutian HackEso: You can trust Zarutian. He fixes, as an electronics technician, banal mistakes of electronics engineers. Rather cy(ph|b)erpunkish in outlook regarding the 'Net. Knows more about ocaps than you can imagine. Possesses an Icelandic unnerver that ejects freezingly hot lava out of its business end. Bears an 'Authentic fakes provider' seal from the guild of Realers. He is also known for making rather long HackEgo wisdom entries. Take for instance t wib_jonas: HackEso says that these three are now too long wib_jonas: but the others are probably fine int-e: wib_jonas: request permission to delete that wisdom entry int-e: wib_jonas: (the br* one) wib_jonas: int-e: I'm not associated with that one wib_jonas: int-e: I suggest to also delete wisdom/$'\xCC\x9A\xCC\x82'* wib_jonas: but you may want to check the hg history first wib_jonas: the longest potentially valuable wisdom is welcome.ru wib_jonas: `? welcome.ru HackEso: ​Добро пожаловать в Международный центр по разработке и внедрению языков эзотерического программирования! Для получения дополнительной информации посетите wiki: . (Для другого типа эзотеризма попробуйте #esoteric в EFnet или DALnet.) int-e: `forget brilliant HackEso: Forget what? wib_jonas: I think with a 16-byte nickname, welcome.ru might just about fit in the output wib_jonas: `добро-пожаловать zemhill_________ HackEso: zemhill_________: Добро пожаловать в Международный центр по разработке и внедрению языков эзотерического программирования! Для получения дополнительной информации посетите wiki: . (Для другого типа эзотеризма попробуйте #esoteric в EFnet или DALnet. wib_jonas: `добро-пожаловать 1zemhill_________ HackEso: 1zemhill_________: Добро пожаловать в Международный центр по разработке и внедрению языков эзотерического программирования! Для получения дополнительной информации посетите wiki: . (Для другого типа эзотеризма попробуйте #esoteric в EFnet или DALnet wib_jonas: exact length wib_jonas: we don't have to change that one wib_jonas: does this web client enable that obsolete extension that adds a one character prefix to messages telling whether the user is logged in to nickserv? wib_jonas: some versions of xchat enables them, and then you get one fewer bytes of space fizzie: Maybe. Both the zemhill_________ and 1zemhill_________ ones fit in here. fizzie: Oh, no, it didn't, I'm just blind. fizzie: The latter cut off the ). So either the web client doesn't, or this client does. wib_jonas: the web client cust off the one with 1zemhill*, but that's an overlong nickname wib_jonas: `q 729 HackEso: 729) itidus21: hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, h wib_jonas: ^ that one does fit wib_jonas: ``` q 729; echo "and more" HackEso: 729) itidus21: hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, h wib_jonas: and it's our longest quote int-e: so lucky wib_jonas: `? pdf HackEso: PDF stands for Pretty Depressing Format. wib_jonas: `? wisdom.pdf HackEso: Nicely formatted classical wisdoms and quotes book at https://www.dropbox.com/s/fyhqyvy3i8oh25m/wisdom.pdf fizzie: We recently had the occasion to send some PDF files to an official thing, and turns out they were only able to view some of them. Presumably due to some sort of software incompatibility somewhere. fizzie: I couldn't find out any sort of patterns in what worked and what didn't, though. The PDF 1.4 files generated by wkhtmltopdf were fine. The ones that allegedly only showed up as blank were PDF 1.3 and 1.5 files (but why would they support only 1.4 in the middle?), generated by printing from Gimp or with 'pdftk' concatenating from various sources. fizzie: All in all, it was a pretty depressing format. wib_jonas: fizzie: perhaps the default options were changed between those versions because people did debug out what doesn't work and reported which features some official things don't support wib_jonas: you could probably fix it by changing the options, but you don't know what you have to change the options to wib_jonas: fizzie: it wasn't a paper size thing, right? fizzie: Not as far as I can tell, they were all A4 according to pdfinfo. int-e: It's a Pretty Dubious Format too. fizzie: ...well, there are *some* differences in paper size, some are "595.28 x 841.89 pts (A4)" and others "595 x 842 pts (A4)". myname: how do you draw .38 pts? fizzie: I think my current plan is to print all the non-working ones, and send them the PDFs generated by the printer/scanner/copier machine at work, under the assumption that that's been engineered to work as widely as possible. myname: fizzie: you don't support "1.4 in the middle". you support the brand new 1.4 as soon as it comes out, drop support for 1.3 and never update to 1.5 once it shows up int-e: Potable Document Format - perfect for drinking games. arseniiv: int-e: one time or another, I think we all guessed that (at least to Adobe) it was a Profitable Document Format arseniiv: s/at least / int-e: It may be that. arseniiv: if one stels i and f from “profitable” (getting “portable”) and adds them to “acrobat”, it will become an obvious/ominous “boar if cat” arseniiv: steals* arseniiv: it was Adobe’s plan all along! arseniiv: and it certainly is not something good. I don’t know what it is though int-e: here's another: potentially dangerous file imode: programmable dangerous format. b_jonas: so apparently HackEso pays 18 bytes more tax to freenode per line than it used to b_jonas: fizzie: and as for the original moderation problem, shachaf looks pretty reliable and he's often here, so maybe you should give him channel op rights shachaf: not happening b_jonas: I can't think of anyone else that's so often here and looks reliable though b_jonas: so in that case we'll have times with no moderators paying attention b_jonas: I certainly can't be trusted b_jonas: hmm... maybe FireFly is trustable fizzie: I think it was a good idea to exempt esowiki, though; to a machine, the above could look pretty spammy. b_jonas: fizzie: certainly when our norwegian village edits the same page twenty times in a row FireFly: I'm not sure I pay a lot of attention here, but if desired could probably deal with clear abuse when spotted b_jonas: by the way, I really hope that Dtuser1337 is not another alias of Areallycoolusername b_jonas: hmm... as for moderation kmc: Hooloovo0: I did the float tank thing kmc: it was neat Hooloovo0: how so? b_jonas: FireFly: since I'm so rarely in #jsoftware, you now have chanserv +f privilages, which means you can modify the chanserv access list kmc: well, I felt very relaxed kmc: and being weightless is great for any kind of physical stress / muscle pain Hooloovo0: yeah, that makes sense Hooloovo0: how long were you in it? kmc: I think I would get more out of it if I was better at mediation kmc: an hour Hooloovo0: did it feel like an hour? kmc: they do 15 minutes of soothing hippie nature/flute music followed by 40 minutes of silence, followed by 5 min of hippie music to bring you back kmc: but you can also provide your own soundtrack kmc: eh I lost track of time b_jonas: weightless => yes, I do ordinary swimming, and it is so much better than other forms of sport activities to people like me who aren't particularly sporty or fit kmc: I also found it hard to give a shit about my usual upsetting thought loop subjects, even when I tried deliberately as an experiment kmc: which was a concern of mine so that's cool kmc: being alone with my thoughts is not always very pleasant kmc: anyway it was a cool experience Hooloovo0: I find it easy to lose track of time while meditating kmc: I bought a book on meditation and will start practicing Hooloovo0: not sure how I feel about music, I tend to prefer complete silence I think kmc: and maybe go back to the tank in a month kmc: (I bought a 3 session package deal at deep discount for new customers) b_jonas: ouch. I hate complete silence, but luckily never experience complete silence here in the city. b_jonas: no music makes sense though Hooloovo0: I have very rarely experienced complete silence Hooloovo0: there's always crickets chirping, wind, fans, or any number of other things Hooloovo0: certain basements can get pretty close, but there's usually at least mains hum from the transformers b_jonas: but do you like it when it's so silent? for hours that is, not just a few minutes Hooloovo0: it's not unpleasant to me ais523: hmm, you know how a while back we had a conversation here about how "son" and "sun" are spelled differently despite being pronounced the same? apparently this stems from an ambiguity in an old handwriting style, where "u" and "n" looked a lot like || and "m" like |||, so scribes generally changed "un" and "um" to "on" and "om" so that they at least ais523: had a chance of being readable ais523: so both the "son" and "sun" spellings ended up in common use, and ended up being attached to different words shachaf: The other day I was reading a poem which rhymed "love" with "prove" and "remove". shachaf: (~150 years old.) shachaf: I thought the pronunciation of "love" changed, but maybe it's all the other "ove" words that changed instead? ais523: I think in some traditions of poetry it's acceptable to "rhyme" words simply because they look like they should rhyme, regardless of pronounciation ais523: it's known as an "eye rhyme" pikhq: And presumably, they only settled on a single spelling much later, and just _picked_ one for each? ais523: not sure if your poem was one of them shachaf: I'm kind of skeptical about this specific case. shachaf: I've seen it in multiple poems, and this poem didn't have any other cases that looked like that. ais523: pikhq: I wasn't around at the time, I don't know the details oerjan: `? towkr HackEso: towkr? ¯\(°​_o)/¯ oerjan: `icode > maр (10*) [3,1,4 HackEso: ​[U+003E GREATER-THAN SIGN] [U+0020 SPACE] [U+006D LATIN SMALL LETTER M] [U+0061 LATIN SMALL LETTER A] [U+0440 CYRILLIC SMALL LETTER ER] [U+0020 SPACE] [U+0028 LEFT PARENTHESIS] [U+0031 DIGIT ONE] [U+0030 DIGIT ZERO] [U+002A ASTERISK] [U+0029 RIGHT PARENTHESIS] [U+0020 SPACE] [U+005B LEFT SQUARE BRACKET] [U+0033 DIGIT THREE] [U+002C COMMA] [U+0031 DIGIT ONE] [U+002C COMMA] [U+0034 DIGIT FOUR] oerjan: thought so pikhq: I see, I see. Yes, makes perfect sense shachaf: > "maр (10*) [3,1,4" lambdabot: "ma\1088 (10*) [3,1,4" oerjan: HackEso says that these three are now too long <-- weren't they always HackEso: 1/1:le/rn//le/rn makes creating wisdom entries manually a thing of the past. Usage: `le/[/]rn // \ civic duty//Civic duty is your duty to keep your Honda in tip-top shape. \ 01//01 is an abbreviation that 01 understands. \ soup//What soup, Doc? \ group//Groups are just loops with the property of associativity. shachaf: I feel like the joke in le/rn should be deleted due to being so out of date. oerjan: `cwlprits brilliant HackEso: int-̈e oerjän oerjän oerjän shachaf: The "[/]" should probably also be deleted. oerjan: it's still allowed oerjan: I'm not sure I pay a lot of attention here, but if desired could probably deal with clear abuse when spotted <-- you're already an op through the staff cloak btw oerjan: assuming we added that correctly oerjan: by the way, I really hope that Dtuser1337 is not another alias of Areallycoolusername <-- i think we established that is not the same person as the bbc village in norway oerjan: (don't know a about Dtuser1337, it's ais523_ who knows how to check such things) ais523: I think it's unlikely enough not to need checking ais523: but yes, ARCUN only has one account oerjan: i think e really meant a ais523: I was surprised to learn that the accounts were different, but in retrospect there are noticeable differences between the two people you can spot if you look for them ais523: yes, it's a who has all the accounts oerjan: i mean, whether e was Dt* oerjan: anyway oerjan: there sure are a lot of new wiki users ais523: we get new users at a pretty rapid rate ais523: although most disappear after posting one esolang or making one edit oerjan: i'm sort of wonder if that discord esolang channel has more users than this channel, i've never used it oerjan: *wondering ais523: there are a surprisingly large number of people who refuse to use Discord on principle, I'm one of them ais523: however I am generally OK with bridging bots that connect IRC and Discord channels together oerjan: CGCC had an ad to the wiki but it no longer does, so i'm not sure where they're still coming from :P ais523: perhaps next year we should try to bring that ad back ais523: it was a good ad int-e: oerjan: Sorry, all the tentacles and other appendices exceeded my pain threshold. ais523: that said, it'd be nice to make the wiki more non-esoprogrammer-friendly before that ais523: (in particular, some way to find which languages were actually good, more content on the relevant pages, etc.) ais523: the issue being that nobody seems to have the spare time and motivation to put in the work oerjan: `zalgo i can't imagine what you mean HackEso: i̲͊ ̡̣c̖̞aͤ͘n̮̉'̹̥t͕͏ ̺̬i̘͐m̠̈́a̼̫g̼̒i͚̒n͐̂e̡͇ ̠͂w̟̔ẖ͉á̷t̼ͩ ̓̾y̑ͪo̖ͦuͣ̒ ̒͗m͑̀e̩̱a̗̹n̟̘ oerjan: . o O ( i've found int-e's secret weakness MWAHAHAHA ) int-e: This is worse than fn*rds. imode: fnords shachaf: oerjan: Remember when some unknown set of Unicode characters would mess up my terminal? shachaf: Good times. oerjan: fungot: do you know anything about those? fungot: oerjan: i was busy because of homeworks and projects and so on oerjan: apparently not int-e: `? zalgo HackEso: zalgo? ¯\(°​_o)/¯ int-e: `le/rn zalgo//The `zalgo` command turns perfectly good text into toxic waste. It violates a multitude of UN conventions. HackEso: Learned 'zalgo': The `zalgo` command turns perfectly good text into toxic waste. It violates a multitude of UN conventions. int-e: `slwd zalgo//s/UN/UN(icode)/ HackEso: zalgo//The `zalgo` command turns perfectly good text into toxic waste. It violates a multitude of UN(icode) conventions. int-e: what was the sed-last command again btw? oerjan: `` echo bin/sedlast HackEso: bin/sedlast oerjan: um wait oerjan: `` echo bin/*last HackEso: bin/sedlast oerjan: well it was right, anyway int-e: wow, a logically named command int-e: no wonder I didn't find it int-e: (but tbh I was just too lazy to look... it was less mental effort to use `slwd and retype the entry name) oerjan: shocking int-e: "effort" is a bit of a joke here. int-e: `quote lazy HackEso: 601) elliott: well how will you represent "The dog jumped over the lazy dog" then? int-e: `quote lazi HackEso: No output. oerjan: i guess no one bothered to add more oerjan: `wisdom laz HackEso: That's not wise. int-e: `grwp laz HackEso: angband:Angband is Morgoth's second dungeon (the first was Utumno). When the greater and lesser people of Middle-Earth together defeated Morgoth in Angband, they were too lazy to go to for 100% completion, so some evil spirits in Angband survived for a sequel, and Morgoth himself recovered and arrived to Numenor. \ kanada:Your bankers' vain plazas never nurtured no one / And your concrete expanses lay fallow in the sun / And your cities all c int-e: plaza. of course. shachaf: Do you like conflict-driven clause learning? int-e: shachaf: See the logs. shachaf: Is picking out the next variable to branch on one of the trickiest things in SAT solvers? shachaf: Or is a rough heuristic about as good as a complicated one? int-e: It's all heuristics. Selecting variables to branch on, when to restart, when to forget learned clauses, which clauses to learn in the first place, splitting clauses into hot and cold clauses of some sort for better locality... int-e: Using lookahead for early branches, blah blah. int-e: Oh, polarity of variables is in there as well (when you branch, do you try false or true first?) pikhq: It is kinda weird now seeing the nick "elliott" in quotes. int-e: `quote pikhq HackEso: 11) First, invent the direct mind-computer interface. Second, you know the rest. \ 12) IN AN ALTERNATE UNIVERSE: First, invent the direct mind-computer interface. Second, learn the rest with your NEW MIND-COMPUTER INTERFACE. \ 25) pikhq: A lunar nation is totally pointless. ehird: consider low-gravity porn fungebob: OK. Now I'm convinced. \ 82) Well yeah, but furthermore int-e: is fungebob a precursor of fungot? pikhq: Nah, I think fungot had a different nick briefly. fungot: pikhq: i almost got a bf interpreter. i'm not into guis at all." Hooloovo0: `quote fungebob HackEso: 25) pikhq: A lunar nation is totally pointless. ehird: consider low-gravity porn fungebob: OK. Now I'm convinced. Hooloovo0: sure, I guess Hooloovo0: `quote fungot fungot: Hooloovo0: no no no no no. well ok, perhaps that ruined my experience :) just saying that HackEso: 10) GregorR-L: i bet only you can prevent forest fires. basically, you know. \ 13) Finally I have found some actually useful purpose for it. \ 14) oerjan: are you a man, if there weren't evil in this kingdom to you! you shall find bekkler! executing program. please let me go... put me out! he's really a tricycle! pass him! \ 56) i am sad ( of cours oerjan: fungebob virtualpants b_jonas: ais523, pikhq, shachaf: see http://www.madore.org/~david/weblog/d.2013-09-29.2161.html on "love" and "prove"; http://www.madore.org/~david/weblog/d.2019-08-29.2618.html on "sun" and "son" which started this conv'n b_jonas: oerjan: yes, but Areallycoolusername has at least one alias b_jonas: wait what? b_jonas: ARCUN only has one account? ok int-e: nah there is a second account, https://esolangs.org/wiki/User:Jussef_Swissen b_jonas: " ... i'm not sure where they're still coming from" => one user came to the channel and said he came from bfjoust shachaf: b_jonas: Hmm, the first page is in French. b_jonas: " (in particular, some way to find which languages were actually good, more content on the relevant pages, etc.)" => yeah, that would take work b_jonas: I prefer to spend my time writing a little documentation about languages that I find out about from outside the wiki b_jonas: to be snarky, I could say that we have about 1500 languages on the language list, of which over 200 are languages by A, plus we have like 200 joke languages, so we might start to think of a button that goes to a random non-joke non-A language b_jonas: " oerjan: Remember when some unknown set of Unicode characters would mess up my terminal?" => hmm, were you the one who catted irc straight into a terminal and complained when anyone typed a control-N? int-e: b_jonas: ouch how close is that 200 to reality? (Re: A) shachaf: That was not me. b_jonas: int-e: it's definitely over 200. I started counting to be able to definitely say that he has comfortably more languages than ais523 now and if his motivation was to be the creator with the most esolangs then he can stop now, and yes, I could say that ais523: b_jonas: add BF derivatives in too int-e: b_jonas: that is scary. ais523: there's no real problem with creating 200 languages, the problem is with having 200 language ideas and not really fleshing out any of them b_jonas: int-e: User:A used to have a list b_jonas: ais523: yes, they're already listed on the joke page b_jonas: though there are a few interesting bf derivatives of course ais523: there are a surprising number of interesting BF derivatives, just /even more/ uninteresting BF derivatives int-e: b_jonas: I'm trying to ignore the problem. You may recall me talking about suppressing A-related esowiki messages. ais523: in general, if you have a new idea for a command to add to an imperative language, BF makes a familiar base from which to start, and the resulting language probably won't be terrible b_jonas: I've even seen at least one brainfuck derivative that makes sense to have been created as a bf derivative, as opposed to just being a cool idea that should have been turned to an esolang unrelated to bf ais523: int-e: it's important to have all the edits here so that they can be reviewed, I normally rely on the #esoteric logs to work out what admin actions I need to take (although I do check Special:RecentChanges from time to time too) int-e: ais523_: I wasn't suggesting to suppress them in general. ais523: b_jonas: SMBF, Permanent Brainfuck, DoFuck probably all fall into that category (oddly, I don't think DoFuck's on the wiki) b_jonas: DoFuck is on the wiki under another name iirc b_jonas: I'm not convinced that SMBF is even usable b_jonas: is permanent brainfuck the one where you can only change cells from 0 to 1? there's no article int-e: ais523_: What I meant is that I, personally, have a specially crafted /ignore for that purpose. ais523: in practice, it's mostly used as an efficient way to initialise the tape ais523: yes, permanent BF is 0→1 only (or sometimes, + only with bignums) ais523: there is an article but it's on a page whose intent was to centralise all the computationally interesting BF derivatives, then it didn't really get used ais523: int-e: that's entirely reasonable, in fact I probably would have suggested it if you hadn't done it already ais523: idea: merge all the BF equivalents into a single article b_jonas: there's https://esolangs.org/wiki/Treehugger which I think is computationally interesting b_jonas: ais523: there's already one that merges some of them b_jonas: or used to be one oerjan: " ... i'm not sure where they're still coming from" => one user came to the channel and said he came from bfjoust <-- i'm not asking about the channel but about the wiki, which is presumably where they found bfjoust first b_jonas: maybe it was on a talk page? ais523: there was a BF Joust competition on CGCC ais523: (they got the idea from us but ran mostly independently; however, Lymia won it) b_jonas: oerjan: I don't know b_jonas: oerjan: there's a new user Msully4321 who came to do one constructive edit, and he says so on Introduce yourself, which is often a good motivation why people register on wikis, but they don't say how they found the wiki b_jonas: I think at least one user said that they came from the esolang discord b_jonas: do we know where kspalaiologos came from? b_jonas: the real one, not the name-taking spammer b_jonas: and one user, kmc, came from the ancient past of #esoteric by a time machine or something ais523: I came from http://99-bottles-of-beer.net/ (linked to me by email) via Malbolge and INTERCAL b_jonas: I don't remember where I came from, possibilities are other freenode channels and via Intercal or unlambda or Piet/Chef. b_jonas: oh, as for other websites ais523: didn't you follow me from #nethack4? oerjan: i think i saw b_jonas on the iwc forum before he came here oerjan: i don't remember exactly how i came here but i was on the old esolang mailing list way back b_jonas: http://rosettacode.org/wiki/Rosetta_Code occasionally has code in esoteric languages. should we try to advertise there, from like the pages of esolangs? b_jonas: oerjan: that's possible, but I don't see how the iwc forum would direct here other than by Piet/Chef b_jonas: and I don't think Piet/Chef is discussed on the forum at all other than in one doc bug report that I posted a few months ago b_jonas: I also wrote obfuscated code in perl (and usually rather stupid ones, there's quite a few that I'm ashamed of, but there's a learning curve) so maybe someone directed me here from that Lymia: I don't even remember how I got here. b_jonas: perlmonks.com is the first website on the web where I was an active contributor b_jonas: but it was shortly followed by irc ais523: wow, I just discovered a 49333400 byte Makefile on my computer b_jonas: freenode specifically int-e: Haha. Somebody put "(Not clickbait)" into a youtube video title... ais523: it looks like some sort of benchmark for make implementations, luckily, rather than being intended to actually generate a useful output ais523: based on the target names, I assume I wrote the script that generated it int-e: (A video that doesn't interest me but that according to youtube is "trending" whatever that means) ais523: "trending" on websites normally means that more people than predicted are visiting it, e.g. the number of views is high and increasing b_jonas: int-e: yes, that occurs in titles often ais523: (rather than being constantly popular, or just new) int-e: b_jonas: I bet I'll see it more often now that I'm on to this... uhm... trend. ais523: I wonder what proportion of those are actually clickbait b_jonas: that may depend on your definition ais523: I guess the definition of clickbait is "something which, based on the description of a link, causes someone to click the mouse more times than they would if they were correctly informed" int-e: oerjan: that sounds made up, needs more precision ais523: normally implying that you follow the link out of curiosity then dislike what's on the other end of it int-e: oerjan: 97.3211421%, now we're talking. ais523: those things look a lot more convincing if they look like they were rounded from an actual fraction ais523: 97.3285714% or the like int-e: ais523_: I know. It was part of the joke. lambdabot: 0.14285714285714285 b_jonas: ais523: right, and if that definition was correct then you should report every clickbait on youtube as having a misleading title or misleading thumbnail ais523: I don't have a YouTube account, so it doesn't let me report things ais523: otherwise, it seems like the sort of thing I would do :-D oerjan: ais523_: i'm not sure most people know that pattern (i only guessed) ais523: oerjan: I think more people recognise it than know it ais523: most people have seen it before even if they don't know what causes it b_jonas: once each I have tried to report things on youtube or on ebay, but I found that even though the entry was clearly something that shouldn't be there, under the report menu there's no choice to report that particular offense among the report reasons ais523: so it gives that feeling of familiarity that makes it more convincing, even if the viewer doesn't know why b_jonas: so after that I basically gave up b_jonas: I don't recally what it was for youtube, b_jonas: but for ebay it was entries where they bunch a really cheap item together with a normal item into the same entry with those select boxes that you normally use to select sizes or colors, the title and first photo describes only the normal item, but the price displayed on the search list describes the very cheap item b_jonas: they bunch large capacity fast sd cards with cheap sd card readers this way, but I've seen other similar combinations too ais523: hmm, that could in theory be legitimate if the range of sizes were large enough b_jonas: ais523_: no, because the title is misleading ais523: USB sticks ranging from 256 MB to 256 GB, for example b_jonas: it's not like "SD card 1 MB 1 GB 2 GB 4 GB 8 GB 16 GB", those are fine b_jonas: it's "SD card 8 GB 16 GB" (with other qualifiers) and then one of the sizes is "card reader only" ais523: 256 MB USB sticks are probably close to worthless nowadays b_jonas: ais523: no they're not b_jonas: we use such small sized SD cards for small computers or embedded devices b_jonas: where they don't have a built-in flash memory myname: i just realized that trending youtube items seem to be highly regional. i don't like that ais523: hmm, I guess there must be a price floor for storage b_jonas: but we have to store a small program or data on it ais523: often you don't need much storage to, e.g., just transport single files around ais523: b_jonas: that's nearly always microSD rather than USB, though b_jonas: yes, there is a floor, but it's below 1 GB for _slow_ sd cards b_jonas: yes, for USB it's less common these days b_jonas: everything has micro-sd card readers built in b_jonas: also, it's a bit odd, micro-sd cards with an sd adapter are cheaper than sd cards of the same parameter ais523: laptops normally have readers for full-size SD cards but nothing smaller, you need the adapter b_jonas: yes, and adapters are cheap b_jonas: I've got a lot of them because they give them for practically free with micro-sd cards b_jonas: I also have sd + micro sd combo readers with usb port, but I did have to buy them ais523: how do SD cards compete with USB sticks for storage size nowadays? ais523: is the only real difference the connection they use, or are microSD cards noticeably different in how they operate? b_jonas: I think sd/micro sd cards are usually better, and I prefer them. usb sticks can be better when they're very large capacity, or if you want to keep it on a keychain so you don't lose it ais523: I'm doing a backup onto a USB stick right now b_jonas: I don't notice them being different in how they operate, but maybe I don't use them enough ais523: for backup media, it's best for it to not be too physically small because that makes it easier to lose ais523: USB sticks probably also have the advantage when it comes to desktop computers ais523: because those often don't have a microSD port (sometimes they have one, sometimes not) b_jonas: I wanted to say that I'm genrally good at not losing things, but I'm still looking for the red eyeglasses case that I had with me on my vacation b_jonas: so I don't dare b_jonas: I'd like to know if Xykon is still using Dorukan's Cloister spell at his current camp in the north Taneb: @metar EGSN lambdabot: No result. Taneb: @metar EGSC lambdabot: EGSC 090850Z 24012KT 200V260 CAVOK 11/08 Q1003 wib_jonas: hi Taneb Taneb: Hello! FireFly: @metar ESSB lambdabot: ESSB 090850Z 10007KT 9999 -DZ BKN016 08/06 Q0999 Taneb: I was mostly curious whether EGSN had meta data, it's a tiiiiny airport int-e: longitutde: -0.0425... looks fake :) ais523: @metar EGBB lambdabot: EGBB 090920Z 24009KT 210V270 9999 FEW017 11/08 Q1003 wib_jonas: wait... the world's tallest living trees are in the US? what the heck are tropical rainforests for then? int-e: deforestation Taneb: Density int-e: Also quick, relentless growth. int-e: wow. "Recent reports indicate that trees can survive to be 1000 years old in the Amazonian rain forest." (However, there is very little information on how common these ancient trees are.) b_jonas: found the red glasses case. ok, now I can claim that I'm usually good at not losing my things oerjan: hups, forgot to log out oerjan: apparently you didn't say that much b_jonas: `pbflist https://pbfcomics.com/comics/the-talk/ HackEso: pbflist https://pbfcomics.com/comics/the-talk/: shachaf Sgeo quintopia ion b_jonas Cale b_jonas: yeah sorry, no olist yet b_jonas: hopefully that will arrive soon too kmc: how can i get on a list oerjan: with `` echo kmc >> bin/nameoflist b_jonas: or these days, you can use `` echo $IRC_NICK >> bin/nameoflist oerjan: unless someone made a specific command, hm... oerjan: b_jonas: very convenient kmc: `` echo $IRC_NICK kmc: `` echo $IRC_NICK >> bin/pbflist HackEso: No output. b_jonas: kmc: you may also review our selection of other lists b_jonas: ``` set -e; cd bin; echo *list HackEso: FireFlist aglist bardsworthlist bobadventureslist calesyta2016list danddreclist don'taskdon'ttelllist dontaskdonttelllist ehlist emptylist erflist flist idealist ioccclist keenlist list listlist llist makelist makelistlist minimalist mlist olist pbflist slist smlist stylist testlist xkcdwhatiflist ysaclist kmc: am i supposed to run listlist when i update a list? b_jonas: ``` set -e; cd bin; wc -l *list | sort -rn | head -n9 # these are the popular ones HackEso: ​ 86 total \ 9 slist \ 8 pbflist \ 8 olist \ 6 smlist \ 4 xkcdwhatiflist \ 4 listlist \ 4 dontaskdonttelllist \ 4 don'taskdon'ttelllist kmc: `` paste < bin/ioccclist HackEso: https://hack.esolangs.org/tmp/paste/paste.10575 kmc: that is... a bizarre way to do that b_jonas: `? ioccclist HackEso: ioccclist is update notification for when a new year of the International Obfuscated C Code Contest is announced, or the winners for a year is announced, or the source codes of winners are released. http://www.ioccc.org/#news kmc: what the fuck is ${@:+ }$@ rain2: `` echo rain2 >> bin/ioccclist HackEso: No output. rain2: `` echo rain1 >> bin/ioccclist HackEso: No output. b_jonas: kmc: prints its argument, with a colon before if it's not empty oerjan: `` paste < bin/ioccclist <-- paste takes a filename, which has the advantage of using its url if it's exposed to web b_jonas: kmc: so we can invoke lists with an argument that is a url pointing to the news b_jonas: o is numbered in a regular way, so there we use a strip number instead and the olist script makes a url from that b_jonas: but for most lists we use a full url oerjan: i don't think the olist script makes a url b_jonas: hmm true, it doesn't b_jonas: s/empty/present/ b_jonas: or so I think b_jonas: I'm not sure how @ works in such a case really b_jonas: I usually visit the archive page to re-read the previous strip before reading the current one. I don't usually miss an o, except when on a long vacation b_jonas: these days I'm the one who first lists them half of the time int-e: Hah. http://blog.hackensplat.com/2011/02/vinegar.html wib_jonas: `perl -eopen$I,"<","quotes";@A=<$I>;$l=$A[rand@A]; while($l=~/([A-Za-z])/g){ $f{lc$1}++;$g{lc$1}//=$_g++; } $p=join("",sort{$f{$b}<=>$f{$a}||$g{$b}<=>$f{$a}}"a".."z"); $q="etoainsrlhdumcgypfwbkvzjxq"; eval"\$l=~y/$p\U$p\E/$q\U$q/"; print $l; HackEso: ​ Yar... COG et eo rdeai. :( Et eo tsmeai? wib_jonas: `perl -eopen$I,"<","quotes";@A=<$I>;$l=$A[rand@A]; while($l=~/([A-Za-z])/g){ $f{lc$1}++;$g{lc$1}//=$_g++; } $p=join("",sort{$f{$b}<=>$f{$a}||$g{$b}<=>$f{$a}}"a".."z"); $q="etoainsrlhdumcgypfwbkvzjxq"; eval"\$l=~y/$p\U$p\E/$q\U$q/"; print $l; HackEso: OA EOAEW URNEIAUNOMEA DAOMEITDW (CH SOE AUKOT CHA): Th fuaa oyl adi tylroettea, sutt et purtyl otn, hsei soe Cern otn mhrrog BHAFEIT. Gegidtten teotn sd sei Pdliei Lonrei! wib_jonas: Lykaina: ^ random quote transformed by a substitution cipher where the most frequent letter is replaced by "e", the second most frequent by "t", etc wib_jonas: for some longer quotes with reasonable words, it will get the most frequent letters right, so it does the easy part of solving the cipher for you wib_jonas: `perl -eopen$I,"<","quotes";@A=<$I>;$l=$A[rand@A]; while($l=~/([A-Za-z])/g){ $f{lc$1}++;$g{lc$1}//=$_g++; } $p=join("",sort{$f{$b}<=>$f{$a}||$g{$b}<=>$f{$a}}"a".."z"); $q="etoainsrlhdumcgypfwbkvzjxq"; eval"\$l=~y/$p\U$p\E/$q\U$q/"; print $l; HackEso: ​ Fseoaid_Siiytn: Hio'a gt oerap; st'r e mloeauc, oia e dlnhtntn. wib_jonas: `perl -eopen$I,"<","quotes";@A=<$I>;$l=$A[rand@A]; while($l=~/([A-Za-z])/g){ $f{lc$1}++;$g{lc$1}//=$_g++; } $p=join("",sort{$f{$b}<=>$f{$a}||$g{$b}<=>$f{$a}}"a".."z"); $q="etoainsrlhdumcgypfwbkvzjxq"; eval"\$l=~y/$p\U$p\E/$q\U$q/"; print $l; HackEso: ​ 22:55 < jpl> Usk tr E ibhhsiof ns fomodsh ispnktlo ea Uticodd ep E wta'n omoa hlohtlo rz hlsgowni ea BRD?! En ioori deco ta erhsiiexdo ntic. UTUT [...] nuei ei trtveay, deco rooneay t Rslrsa sl isronueay wib_jonas: `perl -eopen$I,"<","quotes";@A=<$I>;$l=$A[rand@A]; while($l=~/([A-Za-z])/g){ $f{lc$1}++;$g{lc$1}//=$_g++; } $p=join("",sort{$f{$b}<=>$f{$a}||$g{$b}<=>$f{$a}}"a".."z"); $q="etoainsrlhdumcgypfwbkvzjxq"; eval"\$l=~y/$p\U$p\E/$q\U$q/"; print $l; HackEso: ​ Ot's doke uatreuatofoais, yrele tre ievt steh ph wlnu "tlozoad" os "nhei lesealfr jpestoni". "Inhe... In...Tros hlnmdeu fai't me bnie AT ADD. Tros nie--uagme, mpt nidg yotr tyn gaks aib a srelha. ..." Taneb: wib_jonas: hmm, I wonder how different it would look if you did it digramwise Taneb: I guess that's trickier because each symbol can be in two digrams int-e: hmm #esoteric-spam wib_jonas: Taneb: you could do a better solver, but I'd add different heuristics, like matching nicks and other common words wib_jonas: `q 134 HackEso: 134) It's like mathematicians, where the next step up from "trivial" is "open research question". "Nope... No...This problem can't be done AT ALL. This one--maybe, but only with two yaks and a sherpa. ..." wib_jonas: that's the last quote it gave wib_jonas: so it got e, t, s, a right int-e: Oh, we have a genuine password of the month candidate: https://leahneukirchen.org/blog/archive/2019/10/ken-thompson-s-unix-password.html myname: we already have one, though int-e: which is why I'm posting the link, not changing the potm entry wib_jonas: right, it's not necessarily for this month, since the passwords are old too int-e: (but it's worth clarifying the point, thanks!) int-e: It's kind of interesting that this wasn't in common word lists... it will be from now on :) int-e: (and that goes for all chess moves) wib_jonas: sure, password reuse exists, so we add known passwords to lists int-e: (the exclamation mark is funny) wib_jonas: somehow I'm reminded of Countercall FaeFly: int-e: might help that it used a notation that's AIUI not in common use anymore (re not being in wordlists) int-e: FaeFly: sure. "algebraic" notation won int-e: FaeFly: But I'm not a chess player and I've encountered this notation before so I'm assuming that at least 10s of thousands people know it :P wib_jonas: int-e: sure, Lewis Caroll made sure we all meet the obsolete notation int-e: There's that. Though one can enjoy the book without deciphering the chess game (I certainly didn't). int-e: Or "did"? Hrm. Grammar. int-e: "did" is better, referring to the whole "enjoying the book without deciphering the chess game" notion. wib_jonas: int-e: istr the chess game itself is hard to decipher, because we don't see all its moves... wib_jonas: there was a question on Stack Exchange about that somewhere wib_jonas: but I'm not sure if it was on Chess SE or Sci Fi SE or the new Lit SE wib_jonas: https://scifi.stackexchange.com/q/26946/4918 wib_jonas: the chess game in Through the Looking Glass int-e: That's a relief. :) int-e: (I was kind of afraid of there being a sensible game hiding underneath all the silliness.) int-e: I suppose this is a bit like searching for the real question when pondering HHGttG. int-e: (Or worse, coming up with an explanation involving base 13) wib_jonas: `python3 -cprint(0.0254/4) # how much is 1/4 inch? HackEso: 0.00635 wib_jonas: `? stunlock HackEso: stunlock? ¯\(°​_o)/¯ wib_jonas: fungot, how many of the sides of a square is one of the longest sides? fungot: wib_jonas: it would be sorta pointless to implement these commands, because they're in scope down the whole campbell/ darcs/ schemd5?". wib_jonas: `python3 -cprint(3**5) shachaf: kmc: You can make a list with makelist, which automatically runs listlist. shachaf: Wait, no, that's makelistlist. shachaf: listlist just lists lists. wib_jonas: `listlist HackEso: FireFlist* \ aglist* \ bardsworthlist* \ bobadventureslist* \ calesyta2016list* \ danddreclist* \ don'taskdon'ttelllist@ \ dontaskdonttelllist* \ ehlist* \ emptylist* \ erflist* \ flist* \ idealist* \ ioccclist* \ keenlist* \ list* \ listen* \ listlist* \ llist* \ makelist* \ makelistlist* \ minimalist* \ mlist* \ olist* \ pbflist* \ slist* \ smlist* \ stylist* \ testlist* \ xkcdwhatiflist* \ ysaclist* wib_jonas: is there a version that only lists lists that don't appear in themselves? shachaf: `? keenlist HackEso: keenlist is notification for when Tom Hall acquires the necessary intellectual property rights to create the videogame series Commander Keen: The Universe is Toast b_jonas: yeah, that one is a bit silly b_jonas: TIL that in Cats, the character that Gus used to play is not called "Firefoefiddle", he's called "Firefrorefiddle", b_jonas: and that "frore" is a word that means cold. b_jonas: it's strange that I hadn't met that before. if there's such a fancy word for cold, then why is it not used in D&D and other role-playing games? b_jonas: like, for spells that invoke the elemental cold b_jonas: even M:tG doesn't have that in any card title shachaf: You mean in Eliot's poem, _Gus: The Theatre Cat_? b_jonas: yes, but more so in the musical b_jonas: It's a rare word, it's not in my Longman dictionary, only the larger Oxford b_jonas: still, M:tG uses such rare words, and there was a whole Coldsnap set, so it's weird b_jonas: Firefrorefiddle the Fiend of the Fell must have had abilities affecting three D&D elements: fire, cold, and sonic. shachaf: Golly. I'd thought about homogeneous coordinates algebraically, but never geometrically. shachaf: Translation is just obviously rotation around a point at infinity. arseniiv: shachaf: hm rotations in P(V) around points on an affine map correspond to (some) rotations in V conjugated by a shear, and translations correspond to shears so probably together they unify somehow, though that’s not obvious to me arseniiv: though the intuition seems right to me too arseniiv: not all shears of course, too, they all should be in a special relation with a hyperplane which defines that chosen affine map arseniiv: hm let me talk about two strange coincedences in math and then I’ll go sleeping arseniiv: 1. a translation is uniquely characterized by one of each initial and final points; a similarity transformation, a pair of each; an affine transformation, a triple; a projective one, a quadruple. I don’t know if there exists something more or less natural for which we need a quintuple. Is there any system in this sequence? I’m afraid no, it’s just some very well-known transformation groups so it seems like a coincidence they arran arseniiv: e this way shachaf: I'm currently reading https://slides.com/enkimute/siggraph which talks about all sorts of neat things. arseniiv: 2. map sin [0, pi/6, pi/4, pi/3, pi/2] == map (λx. sqrt x / 2) [0, 1, 2, 3, 4] arseniiv: shachaf: oh, I’ll take a look tomorrow, then arseniiv: and the second coincidence is confusing but happily mnemonic arseniiv: shachaf: ooohh!! this is applied Clifford algebra! I hope those slides have that conformal thing explained, why it’s done that way b_jonas: arseniiv: sure, a projective transformation in d dimensions is characterized by d+2 points, so for five points you want projective transformations in 3 dimensions. b_jonas: arseniiv: I worked with those in my last job, where at least one project involved 3D reconstruction from 2D camera images arseniiv: b_jonas: ah, yes, I forgot it all stands only for a 3-dimensional space arseniiv: I should have looked at an arbitrary dimension case b_jonas: admittedly there we have use or two degrees of freedom less than a full projective transformation arseniiv: maybe the sequence crumbles b_jonas: no, it's food that crumbles arseniiv: also a while ago I found out there is a common confusion of homogeneous coordinates and, well, unhomogeneous coordinates concerning a use case when we use […, 0] for representing vectors and […, 1] for representing points. This system plays out very nicely but is commonly misattributed to projective stuff when it’s not b_jonas: you may call the non-homogeneous coordinates euclidean arseniiv: This system plays out very nicely => like, if there were only linear operations and the result has form […, 1] or […, 0], then we’ve done a correct affine calculation and the result is corresp. a point or a vector arseniiv: b_jonas: generally we don’t need the overall space to be euclidean, though for simplicity we can take one arseniiv: I don’t even remember what it should have in general so our points and vectors represented in this way have euclidean structure, the overall thing should be invariant under shears with some special hyperplane fixed arseniiv: hm I think it gives rise to something Galileian, like the structure of the nonrelativistic spacetime arseniiv: though even that is too much, we’re concerned with two hyperplanes only, not distances between any of them arseniiv: for some reason I’m often interested in ways how can we omit the structure we don’t use in some contexts b_jonas: fungot, please publish the next o strip fungot: b_jonas: i've never read a paper on using source-to-source transformations to compile scheme to c. shachaf: Isn't that Sgeo_'s job? b_jonas: that's a suspiciously specific denial, fungot fungot: b_jonas: you subtracted twice the orig value?' as ' swiping blindly'? yes, but b_jonas: fungot, is Countercall turing-complete? can you give the main idea of the proof or disproof? fungot: b_jonas: do you think? i mean suing them?) fizzie: Proof by lawsuit, one of the more general-purpose classes of proofs. b_jonas: I wonder if there's such a thing as a fake Foucault pendulum, which looks like a real Foucault pendulum but is somehow rigged so that the plane of its swing remains fixed b_jonas: I imagine that Black Hat from xkcd could secretly modify an existing Foucault pendulum in a public space to one, using his stealth carpentry skills oerjan: sounds like a plan int-e: while you're at it, how about making it turn at the right speed but in the wrong direction int-e: which, apparently, would be counterclockwise for the northern hemisphere... int-e: viewed from above b_jonas: int-e: I thought of that, but I think making it not rotate would be better, because it would look like the Aristotelean or flat earth myths are true b_jonas: if you want to control a pendulum in a way finer than that, you want to use it for divination, rather than as a Foucault pendulum b_jonas: I guess you could try to be subtle and make it turn in the correct direction but just slightly faster than it should b_jonas: see how long it takes until it's detected b_jonas: also I think making it not turn at all would be the easiest to achieve technologically wib_jonas: https://www.linusakesson.net/ seems like an interesting homepage with some esolang content. https://www.linusakesson.net/programming/symlinks/index.php is an esoteric language for example wib_jonas: zzo38: ^ wib_jonas: and https://www.linusakesson.net/programming/gcr-decoding/index.php contains a rather crazy use of one of the undocumented opcodes of 6502 FaeFly: yeah, lft does cool demoscene stuffs b_jonas: fungot, how much is 14*16? fungot: b_jonas: i can't say for sure. :) i was student, ta, and phd student, though i don't do that imode: that was a rather coherent response. b_jonas: I'll have to ask some other bot b_jonas: [ 14*16 j-bot: b_jonas: 224 imode: fungot: can you do basic multiplication? fungot: imode: i just remembered what esoteric programming is all about assumptions that the implementation features a srfi, be it cl or scheme. shivers is not interested in imode: good to know. b_jonas: fungot, among the Sun's energy output, how much comes in the form of neutrinos? fungot: b_jonas: oh... nice. imode: fungot: answer b_jonas' question. fungot: imode: i did most of it has been fiz who has scared off most visitors. imode: https://repl.it/repls/TerribleFairCells imode: this appears quite legible. imode: almost like smalltalk. fizzie: I didn't know I've scared anyone off. :/ imode: I doubt that you have. imode: fungot is full of shit. fungot: imode: not because the language evolved faster than the interpreted schemes which was kinda disappointing speed-wise. fizzie: Turns out that was more or less a literal quote from 2003. fizzie: [2003-01-20 23:36:53] <@DiamonDie> i think it has been fiz who has scared off most visitors. imode: from an op no less? fizzie: IIRC, on that channel all the regulars were ops. pikhq: Ngl imode's made me ambivalent on staying imode: everybody-being-an-op is easily ruined by the one bad egg that bans people at the drop of a hat. imode: used to be in a channel for a local hacker space. the youngest got angry in a discussion about C and banned 18 people. fizzie: Well, it was a 10-person social channel, not really for any particular topic. Those don't really have moderation issues so much. imode: makes sense. arseniiv: shachaf: those slides mention “homogeneous coordinates” too in introductory examples :( if they were homogeneous, vectors with coordinates (1, 2, 3, 0) and (2, 4, 6, 0) would coincide but they should not. These are usual coordinates in (dimension + 1) arseniiv: hopefully that misattribution isn’t mentioned in the body zzo38: Other way than everybody-being-an-op would be nobody-being-an-op is better than everybody-being-an-op, I think. fizzie: That's a pretty easy state to get to by accident on IRCnet, so I'm sure we spent some time like that too. fizzie: (No services.) imode: everybody can yell at eachother and nobody can do anything about it. imode: almost like twitter! zzo38: That is not true nobody can do anything about it; you can add filters into the client if you want to avoid receiving some messages. imode: that is true. I have to wonder what the potential partitioning would be for a really busy and hostile chat room. imode: i.e take 100 people, throw them in a chat room without moderators, see who ignores who. you'll probably end up looking like two or more "logical" rooms. zzo38: Maybe. I don't know. zzo38: (mainly, I don't know, because I haven't tried having 100 people in a chat room without moderators) fizzie: (Although IRCnet ircd 2.11 got a "reop mode" feature, where you can set +R nick!user@host masks with the usual wildcards, with the semantics that if the channel has been opless for a while, the server grants ops for a pseudorandomly selected user matching any of those masks.) fizzie: (I think there was also a no-ops-ever channel type? Might be misremembering that.) zzo38: Yes, some IRC servers if the channel prefix is + then it can have no modes (inclduing no operators). zzo38: There is also & for a channel local to the server and ! with a feature to avoid taking over channels when net split. zzo38: (The + and & types are also immune to taking over channels, but for other reasons.) shachaf: arseniiv: Oh, now I see what you meant. arseniiv: shachaf: yeah, yesterday I completely forgot to mention this simple breaking example arseniiv: what we have instead is just some hyperplane L “inhabited by vectors” and its shift, L + a where a is nonzero, “inhabited by points”; then obviously we can’t add two points and get a point, but we can take their linear combinations with total weight 1 (and get a point) or 0 (and get a vector), and also we can apply linear operators which take L to itself, on L + a such one acts as an affine operator, and on L it does as its li arseniiv: ear part, automatically. Now we may choose a basis in L and add a to it, so elements of L get coordinates (…, 0) and elements of L + a get (…, 1), voilà! arseniiv: also we can make a silly groupoid on two objects from two parallel affine subspaces, taking morphisms between them be various translations from one to the other. When the outer space has no inner product, there are no natural translations so this is naturally a groupoid and not a group arseniiv: (and these translations themselves constitute two isomorphic affine spaces) arseniiv: isomorphic, but not naturally, to two starting subspaces, but naturally isomorphic (via f ↦ f⁻¹) with each other zzo38: In GURPS, skills cost 4 points per level, and techniques cost 1 point per level. A technique improves your effective skill level for one use of the skill, but increasing the skill itself (for 4 points) improves your effective skill level for all uses of that skill. If you have many techniques, then it will cost too much points. zzo38: Therefore, I made up this variant rule: techniquePoints = dotProduct x . reverse . sort where x = 1 : 1 : (half <$> x) zzo38: I think that mathematically it is better. Do you think that it is better? Sgeo: What's the list for Charlie the Unicorn? zzo38: I am not aware. zzo38: Stone of Lizard Men {2} Artifact ;; {X}, {T}: You may put a Lizard or Viashino card with converted mana cost less than X from your hand into the battlefield. If you do, add one mana of any color. zzo38: (It is a mana ability) zzo38: Does any Haskell core library have a dot product function? (It is easy enough to implement; I am just wondering if it has already.) zzo38: Apparently BBC BASIC has a built-in dot product function. kmc: wonder why zzo38: I don't know, but I think dot product can be a useful function in many programs, even with lists having arbitrary number of elements if they are not used as a vector, such as the code I mentioned above. Sgeo: zzo38, gah I have to think twice to realize why that isn't actually broken as far as I can tell Sgeo: Oh I just meant in terms of net mana. It being mana ability speed is probably really really interesting b_jonas: `? log b_jonas: `? logs HackEso: ​#esoteric channel logs: https://esolangs.org/logs/ http://tunes.org/~nef/logs/esoteric/?C=M;O=D http://codu.org/logs/_esoteric/ HackEso: ​#esoteric channel logs: https://esolangs.org/logs/ http://tunes.org/~nef/logs/esoteric/?C=M;O=D http://codu.org/logs/_esoteric/ b_jonas: ``` sed -i '1s"$" https://github.com/kspalaiologos/esologs/"' wisdom/log HackEso: wisdom/log//#esoteric channel logs: https://esolangs.org/logs/ http://tunes.org/~nef/logs/esoteric/?C=M;O=D http://codu.org/logs/_esoteric/ https://github.com/kspalaiologos/esologs/ b_jonas: soon we'll have so many webpages with logs that they won't fit in the topic b_jonas: (soon as in https://www.xkcd.com/605/ ) kspalaiologos: it doesn't matter that the channel might be dead for half a day and only a few people reach it constantly kspalaiologos: but we have a dozen of log copies, this is what matters kspalaiologos: any turing complete, interesting and not-so-hard to implement languages out therE? kspalaiologos: kept mashing random page button for around 15 minutes, nothing interesting so fafr b_jonas: kspalaiologos: are you familiar with all of the Big Five? kspalaiologos: Big Five? kspalaiologos: what's this kspalaiologos: probably I know what it represents kspalaiologos: but I haven't heard the name yet b_jonas: it goes like, Intercal, Malbolge, Befunge, Unlambda, Underload kspalaiologos: btw, additional points if the source looks gibberish b_jonas: five famous esoteric programming languages kspalaiologos: yeah, I've heard bout them kspalaiologos: no Brainfuck though, have you missed something? kspalaiologos: I've programmed in every single one except Underload kspalaiologos: no idea what's this b_jonas: ah yes, must be brainfuck instead of Malbolge b_jonas: Intercal, Brainfuck, Befunge, Unlambda, Underload b_jonas: that makes way more sense kspalaiologos: befunge is quite hard one kspalaiologos: brainfuck is too popular kspalaiologos: intercal is very verbose kspalaiologos: Unlambda is functonal kspalaiologos: and I haven't heard about Underload kspalaiologos: I think about rolling my own esolang kspalaiologos: but I don't really have an idea how to do that kspalaiologos: Emmental seems like a really cool language though b_jonas: I just realized. Not only can we no longer refer to printed phonebooks when explaining algorithms on sorted arrays, we now also can't refer to electromechanical washing machines to explain multiple entry points to a subroutine. b_jonas: will we have difficulties to explain multiplication to the next generation because they will be buying everything pre-packaged and nothing of which you can freely choose a quantity and has a price per unit weight? b_jonas: will we have difficulty explaining Eucliean coordinates because they haven't seen the index of a map refering to map grid squares? b_jonas: the previous OotS strip was published over 18 days ago. please upload the next one, fungot fungot: b_jonas: 1/(sqrt(2)-1) ( fnord) as modulus, 216 as fnord, fnord, fnord b_jonas: we usually write that as sqrt(2)+1, but sure int-e: soon they'll take as long to upload as they take to read arseniiv: Unlambda is functonal => why does it look like a bad thing? arseniiv: BTW there is another side to “functional languages”, going from combinators and no variables (and composition) to defining equations and variables (and composition), on that way you could have reinvented https://esolangs.org/wiki/%E2%84%B2 arseniiv: allowing definitions makes writing nontrivial code a bit less hard b_jonas: arseniiv_: hmm, that article should mention "lazy" somewhere b_jonas: as in evaluation order b_jonas: or strict, as it may be, for it makes a difference arseniiv: b_jonas: hm doesn’t it? I’ll look at it b_jonas: and "currying" too, because without currying, you need some extra builtins for conditionals and for data storage b_jonas: as in an if-else, cons, (), null, car, cdr arseniiv: > Overall evalution strategy is call-by-need, unless a modification (for example, to allow full IO) has something like Haskell’s `seq` or `$!`. lambdabot: :1:43: error: parse error on input ‘,’ arseniiv: specified! arseniiv: oh I never learn arseniiv: @botsnack arseniiv: and "currying" too => hm I did thought it’s obvious these definitions result in functions that can be partially applicated arseniiv: I’ll add some explanations, how better to name the section with them? arseniiv: elaborations, I’d say b_jonas: arseniiv: "data storage" I think, for you need currying to be able to data other than from a limited alphabet of function names on the call stack arseniiv: `unidecode Ⅎ HackEso: ​[U+2132 TURNED CAPITAL F] arseniiv: b_jonas: I wanted one section to explain about call-by-need meaning the same as lazy b_jonas: I keep thinking of the strict non-curried version of this language arseniiv: it would be something akin to the original Backus article? arseniiv: b_jonas: ^ arseniiv: where he makes the first functional language, albet somewhat a clumsy one, given that it’s the first one arseniiv: IIRC that’s 1977, “Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs”. Hm pretty modern times. I thought from the time Lisp was invented it should have been earlier?.. b_jonas: arseniiv: do you mean Backus's FP? because then no b_jonas: the one I'm talking about still has named function arguments b_jonas: https://esolangs.org/wiki/Pointfree_programming has a link to that one, we don't have a separate page apparently b_jonas: but also, the language I'm thinking of not only doesn't have currying, it doesn't even have functions as first class objects either. you can only use function names if you immediately call them. mind you, you can still program Backus's FP that way. b_jonas: well, sort of. b_jonas: not exactly the same as Backus's FP b_jonas: but the style you program in translates to that well, only you lose named function arguments then b_jonas: you can also translate it to a subset of Olvashato where you don't use lambdas b_jonas: in all these cases you have named global functions that can be mutually recursive, which is sort of the distinctive feature arseniiv: hm maybe I shouldn’t elaborate on call-by-need there, it looks too long or too incomprehensible arseniiv: b_jonas: interesting, and there also is no partial application, yes? arseniiv: I mean, I don’t think “currying” is a name for a well-defined language feature, it always confused me what it should mean, and I only see it viable as a name for the natural isomorphism from A×B→R to A→B→R b_jonas: wait, let me check how Backus's FP worked again? b_jonas: I got confused b_jonas: I think it doesn't have named global functions b_jonas: arseniiv: you can call it "partial application then, it doesn't matter too much that it's implemented by currying arseniiv: though maybe it means that we could write λxyz.A for λx.λy.λz.A and correspondingly f x y z = … for f x = let g y = let h z = … in h in g b_jonas: ok, Backus's FP is weirder arseniiv: b_jonas: then I more or less understand what language you are describing b_jonas: but it doesn't have named global functions b_jonas: arseniiv: for the language I'm talking about, you still have a sequence of global function definitions, each one has a function name followed by named arguments on the left, and parenthisized function calls on the right b_jonas: but on the right, each time you refer to a function, it must be called by all arguments, you can't pass around function pointers, whether partially applied or not arseniiv: then the distinctive feature could be described thus: no partially applied function is an expression, this would formalize what it means that functions aren’t first class b_jonas: and you get new builtins, namely if-else, which is the only way to not strictly evaluate all arguments, arseniiv: maybe case-of and pattern matching is better? b_jonas: and some builtins for creating data, namely at least nil and cons as data constructors, null and car and cdr as deconstructors, b_jonas: but ideally also some basic numeric stuff b_jonas: arseniiv: no, that's not enough b_jonas: arseniiv: you also can't use bare function names (without any argument applied) as an expression arseniiv: yeah I understand, a bare name is partially applied too b_jonas: the base of olvashato and common lisp already work like that; they also have explicit way to manipulate first-class functions, but you can't do it as easily as mentioning a function name or partially applying anything b_jonas: olvashato isn't quite like this even without the first-class functions, because olvashato has let and case which lets you create local bindings other than the parameters of the global function, and I don't want that b_jonas: (also the syntax is different) b_jonas: also, as for what I said earlier b_jonas: "will we have difficulties to explain multiplication to the next generation because they will be buying everything pre-packaged and nothing of which you can freely choose a quantity and has a price per unit weight?" => b_jonas: this requires electric cars, b_jonas: but I think we're officially in the electric car future now, because this year's Nobel Prize is for electric cars zzo38: I don't think so; some people will buy and sell stuff that you will have to freely choose a quantity, even if it is rare. b_jonas: zzo38: sure, it will exist, I'm just positing that it won't be such an everyday thing that every eleven year old in school sees it and finds multiplication of real numbers a natural and commonly used operation because of that zzo38: (Also, multiplication would still be used with stuff other than buying and selling stuff.) b_jonas: when I go to the market today, I need to know a bit of cultural context to know which price tags are per kilogram and which ones are per unit, because it's hard to guess zzo38: I should think they ought to label if it is per kilogram or per unit. If it is prepackaged then it can be assumed as per unit if it doesn't say; if they are not pricing it per unit then they should not prepackage it. b_jonas: most fruits and vegetables are sold by kilogram, but the ones that come with lots of leaves are sold by bunch or single root b_jonas: zzo38: sure, but consider fruits: kohlrabi is per single root, but canteloupes and lemons and cabbage are per kilogram b_jonas: lemons and canteloupes and kohlrabi have a strong rind so they don't need pre-packaging b_jonas: so they aren't packaged, yet you could sell them either way zzo38: Yes, that is OK, but they should label them as "per unit" or "per package". I did not say that per unit stuff should be prepackaged; only that prepackaged stuff should be priced per unit. zzo38: s/per package/per kilogram/ arseniiv: lemons of linear logistics b_jonas: there are even roots that are sold per bunch, which could count as pre-packaged, but it's sometimes not obvious to notice the strings that tie a few roots into bunches b_jonas: this happens with carrots and radishes b_jonas: zzo38: yes, prepackaged stuff is sold by unit except in very rare cases that are clearly labeled b_jonas: there are two sorts of exceptions: b_jonas: one is for pre-packaged cheese and the like that is sold by weight and the weight is measured in advance when packaging and written on a printed label and encoded in the bar code b_jonas: the other is pre-packaged stuff sold in twos or threes, where you can still buy in single units but it becomes more expensive, and you can buy two or three of different kinds mixed and matched of the same price group zzo38: Yes; in that case, you would print the price and weight on the label of the individual package. zzo38: So the price is both per unit and per weight. b_jonas: there's no problem with packaged stuff b_jonas: the difficulty is more with the non-packaged stuff zzo38: So it is OK that it is like that, since the label mentions the price. zzo38: With non-packaged stuff the label still should make it clear about the price. zzo38: (If they don't specify, then, I think, it isn't very good.) b_jonas: admittedly many of the vendors do specify zzo38: Did they make the AD year numbering the way that it is for reasons having to do with leap years since it is not precise according to when Jesus is born? arseniiv: I feel warm b_jonas: thanks arseniiv: I have implemented turned F myself but I don’t remember in what language and where the project is, and also I’m pretty certain its code shouldn’t see the daylight. I probably will someday just write it from scratch in Python like with Punctree. I don’t like I write Python in a usual text editor without IDE hints but this language is pretty popular and you can easily run single files without any special manoeurs so that drives my hand arseniiv: or forces, or delays kspalaiologos: I have made a chess engine in Malbolge kspalaiologos: in theory it's decent kspalaiologos: but it has two drawbacks kspalaiologos: a) It requires 31 and a half gigabytes of memory kspalaiologos: b) it's quicker to count atoms in universe than to run it kspalaiologos: but I'm certainly sure it works arseniiv: (^cont.) and of course I have implemented something like YE…A, even with some optimizations for functions constructed with simple recursion operator, in Ceylon but I didn’t make that human-readable and it wasn’t YE…A strictly speaking, but an interpreter for a DSL b_jonas: how can you be sure? if it's so slow, how do you debug it? kspalaiologos: the same generator that made this program kspalaiologos: has been tested to 100% coverage kspalaiologos: the chess engine is just higher scale of the same thing arseniiv: kspalaiologos: lol :D kspalaiologos: so it has to work, eventually kspalaiologos: for anyone interested kspalaiologos: https://github.com/kspalaiologos/malbolge-chess kspalaiologos: the 7z file unzips to 113 megabytes of malbolge b_jonas: 32 gigabytes is solvable these days kspalaiologos: I'm equipped with just eight kspalaiologos: anyone willing to borrow 24G and a quantum computer? b_jonas: a quantum computer? what for? kspalaiologos: it would hopefully speed up the process b_jonas: what... chess? how? kspalaiologos: the quantum computer is able to solve "puzzles" that conventional computers aren't able to b_jonas: puzzles maybe, but I don't think it helps for chess kspalaiologos: for example, it can break RSA encryption quite eaisly from what I've heard b_jonas: that sure kspalaiologos: isn't malbolge just a fancy encryption? kspalaiologos: I've spent my entire day on writing a proof of concept in C, then translating it to assembly, and then stepping down to something 4004-like to finally produce the output kspalaiologos: it was a quite fun process kspalaiologos: nonetheless arseniiv: kspalaiologos: hm but your code should use its “features”, like a program can’t just start using SSE or what there is these times, without the programmer writing those instructions beforehand kspalaiologos: the interpreter can be tweaked kspalaiologos: so it runs smoother on quantum computers kspalaiologos: I have made once a SSE brainfuck interpreter, nothing is scary now kspalaiologos: imagine a tape, but of type __m64 kspalaiologos: or __m512i kspalaiologos: optimizing malbolge is quite hard process tho kspalaiologos: to do it correctly you'd have to know the assembler structure kspalaiologos: but as you can reverse it, is there any sense in simplifying the assembly down to malbolge? zzo38: Trick NSA to make the computation for you, by using encryption. zzo38: b_jonas: Did you see the Magic: the Gathering card I mentioned and that Sgeo__ wrote a comment? b_jonas: zzo38: no, what card? b_jonas: does it have "Frore" in its name Sgeo: Stone of Lizard Men zzo38: Sgeo__: Yes. zzo38: Stone of Lizard Men {2} Artifact ;; {X}, {T}: You may put a Lizard or Viashino card with converted mana cost less than X from your hand into the battlefield. If you do, add one mana of any color. b_jonas: hmm, there are fewer lizards now, because cards like Imperiosaur have been patched to Dinosaurs zzo38: Yes, but there still are some, including cards with changeling zzo38: (And you can also use Artificial Evolution to alter which creature types this can be used with.) zzo38: Do you know the "backward" variant of scope (an Italian card game)? Someone showed me that variant, but I don't know if anyone else has written about it. Sgeo: b_jonas, any ideas about what fun can be had by effectively summoning a creature at mana ability speed? zzo38: Of course, then you can do it during a mana step, I suppose, which might sometimes allow you to play triggered abilities in a different order. zzo38: (There are also ways to play replacement effects during a mana step, even with only Vintage-legal cards. See http://zzo38computer.org/textfile/miscellaneous/magic_card/puzzle.4 for one example.) zzo38: (Well, that one doesn't have a replacement effect during the mana step, but with other cards it can be easy to see that it can still be done.) zzo38: Now I added a "Frequently Asked Questions" section in story I wrote (from the GURPS game), so, if you have a question, then I can add it, please. oerjan: `addquote I have made a chess engine in Malbolge in theory it's decent but it has two drawbacks a) It requires 31 and a half gigabytes of memory b) it's quicker to count atoms in universe than to run it HackEso: 1336) I have made a chess engine in Malbolge in theory it's decent but it has two drawbacks a) It requires 31 and a half gigabytes of memory b) it's quicker to count atoms in universe than to run it imode: @message kspalaiologos care to share this mythical chess engine? lambdabot: Maybe you meant: messages messages-loud messages? imode: @tell kspalaiologos care to share this mythical chess engine? lambdabot: Consider it noted. oerjan: imode: it was linked in the logs zzo38: I read on Wikipedia about digital television captions, and they mention many things I have not seen in other TV sets oerjan: https://github.com/kspalaiologos/malbolge-chess zzo38: I have been writing how I thought should be designed a television set. The digital caption setting menu includes service number 1-63, user override on/off, tag mask, enable flashing, maximum number of windows, font priority (user or broadcast), special effects on/off, auto switching services. zzo38: The analog caption setting menu includes service selection (CC1-CC4 and TEXT1-TEXT4), user override on/off, allow/disallow white background, minimum roll-up, enable flashing, enable buffering, alarm on/off, character set (EIA-608 or ASCII). zzo38: Common caption setting menu can include: caption on mute, caption relative to either the picture or the screen, style submenu, status menu (can be used for debugging), caption recording. And then, there is also the caption scrollback feature, to review earlier captions. Do you think it is good enough? b_jonas: oh nice. Zach from SMBC advertises his book on http://phdcomics.com/comics/archive.php?comicid=2033 int-e: Hmm, somehow the styles of http://www.yihcomic.com/ and http://sssscomic.com/ are quite similar. shachaf: Today I tried to actually figure out the details of CDCL and other tricks a bit more. shachaf: I feel like there are some basic things I'm confused about. I should probably implement the parts I understand to see if I become unconfused. shachaf: Here's one thing that's not even related to CDCL: shachaf: When you need to decide on a variable and you add a literal p to your assumptions, what do you do? int-e: well you don't shachaf: Do you need to worry about clauses that contain p at all or do you just ignore them? int-e: when processiong a clause you don't put it on another watched literal list if its next literal is already true, so this is part of the watched literal logic. shachaf: But then when you backtrack you might add it to a watched literal list? int-e: but you don't touch the watched literal lists when you backtrack? int-e: or backjump shachaf: Right, that's what I thought. But then I don't understand your previous sentence. int-e: I believe you can just keep the clause on the list that you're processing int-e: uhm actually shachaf: So a large number of clauses is just irrelevant for you because you only ever find clauses through watch lists. int-e: sorry, I'm confused int-e: But I think I got it right nevertheless. So... you go through the watch list of a literal l. If you encounter a clause that is already true in the current partial assignment (while looking for another literal that's currently unassigned), then you can keep the clause on the watch list for l, because whatever made the clause true is earlier on the trail than l. int-e: (well, the trail has a negated l) int-e: Meaning once the clause evaluation becomes unknown again, l will not be assigned, reestablishing the watched literal invariant (any clause with unknown truth value is on two watched literal lists) shachaf: OK, so the only way a bunch satisfied clauses hurt you is that a watch list might contain them and you might need to sift through them? shachaf: And you might e.g. move them to the end of a watch list and possibly be able to stop looking through a watch list early. int-e: this is a kind of laziness shachaf: Though I'm not sure a thing like that would actually work. int-e: (but a good kind because many clauses that become true will never be touched at all) shachaf: Hmm, but the ones that become true and are watched will just be inspected over and over because the watched literal will never move, unless you do something extra? int-e: Hmm, maybe it's clever to move them to the literal that is true instead. shachaf: Oh, that makes sense. int-e: (provided the clause is not on that watch list already) shachaf: You can even locate the true literal that's furthest away in the stack, so hopefully you don't see it for a long time. b_jonas: what... are you writing SAT solvers? shachaf: Er, the last thing I said doesn't make sense. int-e: b_jonas: I've been resisting the temptation for a long time. I think I can maintain this state :) Not sure about shachaf. shachaf: Some of my questions are about the actual typical operations/memory layout/etc. used by reasonable SAT solvers. shachaf: Others are about clause learning, which seems like one of the most complicated parts of many modern solvers. int-e: b_jonas: But I know enough about the basics (DPLL, CDCL, a bit about heuristics) to be harmful. int-e: I know a bit more about the verification side. (RUP, DRUP, RAT, DRAT) shachaf: Oh, UNSAT verification? shachaf: I'd like to know about how that works. shachaf: I suspect understanding UNSAT certificates and understanding CDCL are pretty related? int-e: Actually, no. shachaf: Oh, that's interesting. int-e: At least on a high level, certification works by maintaining a set of clauses (initially those of the problem) and adding and removing clauses with inferences that maintain satisficability. The last step derives the empty clause. int-e: The inference relies heavily on unit propagation though, so for efficiency, you end up with watched literals again. shachaf: Sure, atched literals is a great trick. shachaf: I should understand regular SAT solving first. int-e: https://www.researchgate.net/publication/333612067_Efficient_Verified_UNSAT_Certificate_Checking should be a good starting point (including references for DRAT and DRUP). b_jonas: shachaf: you should just wait for Knuth to write that part of volume 4. int-e: The idea for RUP is that every backjump clause can be derived by "reverse unit propagation" -- assert the negation of the literals of the derived clause, and do unit propagation; if that results in a conflict, then the clause can be added without affecting satisfiability. So all a SAT solver has to do to produce a certificate is to record the backjump clauses which it's computing anyway. int-e: (and potentially learning) int-e: DRUP adds deletion of clauses (for efficiency). RAT is a bit more complicated and motivated by simplification of clause sets rather than DPLL itself. shachaf: b_jonas: Fascicle 6? I have a copy right here. b_jonas: I have technically written a SAT solver once, but it's a rather trivially stupid one, it only works on very simple expressions shachaf: It doesn't talk about many of the things I want, though, I think. shachaf: I've only read part of it so far. b_jonas: shachaf: so does it not help about "typical operations/memory layout/etc."? I'd expect Knuth to talk about those shachaf: It certainly talks about those, for the algorithms it describes. b_jonas: hmm, https://www-cs-faculty.stanford.edu/~knuth/news.html has multiple news that I haven't seen shachaf: I'll look at it some more after these papers. b_jonas: pity one of the links is already broken shachaf: OK, it looks like the part of fascicle 6 two pages after where I left my bookmark in it a while ago is on the same topics I was reading papers on today. shachaf: I guess I'll take a closer look. int-e: I see he gets up to RUP. jix: shachaf: int-e: While I've been just idling here for years, I just noticed discussion about SAT solving... I've written a CDCL SAT solver and UNSAT certificate checker https://github.com/jix/varisat (not using DRAT though, I'm using a different proof format that records unit propagations during solving and thus can be checked much faster)... feel free to ask me any questions about SAT solving :) b_jonas: idling... does that mean we should `welcome you? b_jonas: also, nice jix: that just means I was quite active here... I don't know 10, 15 years ago or so and never parted :) b_jonas: yeah, this channel has a long history. b_jonas: ``` q jix # the quote file doesn't know that you were active... not under this name at least HackEso: No output. jix: https://esolangs.org/wiki/Jannis_Harder << that's me int-e: jix: It's funny that you mention recording unit propagations... because the GRAT format does that as well, making for a three stage verification pipeline: simplifier+SAT-solver => DRAT => GRAT (fewer clauses, more information) => verifier. jix: int-e: yeah I skip the DRAT => GRAT part which is as expensive as solving in the first place int-e: (This is Lammich's pipeline... Heule et al. have a slightly different intermediate format ... I forgot the name.) jix: what I do is solving -> custom format -> LRAT (which is inspired by GRAT) jix: total time is cut roughly in half, but my solver isn't as good as others on many problems, so it's not that practical yet int-e: jix: It's funny though that the overhead of storing and reading additional information like that pays off. (Ah, LRAT. I think that was it. If so, it's a concurrent development to GRAT.) jix: I experimented with emitting LRAT directly, but the code to keep track of clause ids became very complicated and introduced memory overhead jix: so my next attempt just hashes clauses and resolves hash conflicts during conversion jix: int-e: ah maybe it was inspired by a predecessor of GRAT? int-e: Hrm, let me check. jix: there also is a newer DRAT proof checker, https://github.com/krobelus/rate that can emit LRAT and GRAT that is supposedly faster than drat-trim, but I haven't really benchmarked it yet int-e: So... There's DRUP and DRAT as the foundation. There's a format called GRIT that records unit propagation steps. This is a precursor to both LRAT and GRAT, which do the same thing for RAT steps as well. jix: ah, yeah, so I was thinking of GRIT when I read GRAT int-e: (LRAT and GRAT were developed independently for certified DRAT checking, both published at CADE 2017; LRAT is Cruz-Filipe, Heule, Hunt, Kaufmann, Schneider-Kamp; GRAT is Lammich) int-e: "amost as fast as gratgen" - yeah I thought that gratgen looked very good, performance wise. jix: in any case I think emitting an LRAT/GRAT like proof directly from the solver is quite a bit faster than conversion from DRAT, the biggest downside is that it is quite a bit larger than a DRAT proof, but if you're not interested in storing the proof you could run the verifying concurrently to avoid that jix: I might need to implement that for a competitive solver, though, if I want to convince people of that int-e: jix: Hmm, how well does the unsatisfiable core computation work though? jix: int-e: haven't checked that yet, it's possible, but it'll probably generate larger cores because there is no core-first propagation or anything like that jix: if you use iterative solving to minimize the unsat core (like Heule did for the chromatic number of the plane problem), you can iterate faster, so it'd be interesting to compare it in that setting int-e: jix: Yeah I'm basically asking a research question... the answer can't be determined without trying, I think. I certainly don't have the intuition for it. Amiona: Chat 40+ -> https://soo.gd/room40plus tswett[m]: When was the first emoji used in #esoteric? 🤔 b_jonas: tswett[m]: probably before 2003 tswett[m]: When did emoji become "a thing," anyway? I seem to remember it was relatively recently that they were implemented on iOS and Android and subsequently (pretty much immediately) became popular in the US. tswett[m]: "Relatively recently" as in within the past 5 years. int-e: 'Originating on Japanese mobile phones in 1997, emoji became increasingly popular worldwide in the 2010s after being added to several mobile operating systems.' int-e: <3 wikipedia. int-e: 'The first ASCII emoticons, :-) and :-(, were written by Scott Fahlman in 1982, but emoticons actually originated on the PLATO IV computer system in 1972.' (ditto) tswett[m]: Nyope. Looks like iOS got support for emoji in 2011, much longer ago than I thought. int-e: Unicode version 6.0, 2010, added those to Unicode. b_jonas: tswett[m]: when did it get support for animated emoji? b_jonas: soon we'll have animated emoji with sound and smell b_jonas: and modifiers for whether the man blowing a raspberry emoji or the crying face emoji are supposed to be rendered with sound on or muted b_jonas: and a singing voice modifier that changes the default tenor voice to a bass pikhq: Pretty sure those, well, aren't really emoji. b_jonas: not yet pikhq: They're pictures being sent, not Unicode strings pikhq: (animoted emoji, I mean) int-e: I remember animated fonts on VGA... tswett[m]: int-e: EGA was the first to support those, wasn't it? int-e: tswett[m]: I'd have to check. I've never had an EGA myself. int-e: tswett[m]: I still don't know, but at least it's very plausible that EGA supported this trick :) b_jonas: darn it! the windows were open so the beeping sounded like it was coming from the outside. it took me two minutes to realize that it was my own oven alarm int-e: . o O ( who doesn't like charred pizza ) kspalaiologos: charred pizza is profanation of pizza kspalaiologos: once in my life I've been to Venice, there was a guy selling pizza slices kspalaiologos: one slice was arm-length kspalaiologos: the slice overall was very moist with a lot of olive oil b_jonas: luckily it's not pizza b_jonas: and not charred b_jonas: [ 16*12*0.0254 j-bot: b_jonas: 4.8768 tswett[m]: int-e: Well, EGA definitely supported (the appearance of) animated fonts. tswett[m]: Hecc, I should get an EGA. tswett[m]: Hook it up to my IBM PC. tswett[m]: But first I'll have to get an IBM PC. tswett[m]: One with an 8080 processor, I don't want none of this protected mode nonsense. imode: 8080's are pretty cheap, you could just build one. int-e: tswett[m]: don't you at least want a proper 16 bit data bus though? int-e: I mean, you already have 16 bit registers. tswett[m]: Hmmmm, perhaps. pikhq: tswett[m]: https://monotech.fwscart.com/NuXT_MicroATX_Turbo_XT_955MHz_832K_RAM_XTCF_SVGA_Floppy_Serial/p6083514_19777986.aspx ? pikhq: (not the literally ideal solution for all use cases of this sort of thing mind, but it is a very pleasant product) tswett[m]: pikhq: Ooh, sweet! pikhq: Right? pikhq: I imagine stock is never gonna be _super_ common, cause it's very much a cottage-industry thing _and_ some of the components are new-old-stock, but pikhq: On the other hand, while trickier to get _most_ of what makes that nice can be cobbled together with other off-the-shelf things. pikhq: (just less all-in-one) b_jonas: oh I see. the "955MHz" in the url was confusing. it's "9.55 MHz" rather than "955 MHz". tswett[m]: That's fast enough to run a stock exchange. :D tswett[m]: Damn it, now I'm all thinking about writing stock exchange software for an online game. tswett[m]: Psst, I'm writing an online game. Currently, you can log into the game, and see how much of various commodities everyone has. tswett[m]: Currently it is not possible to gain more commodities, or to do anything with the commodities you've got. b_jonas: nothing is fast enough to run a stock exchange. those people are crazy, they put computers in the middle of the Atlantic just so they can speculate a few milliseconds earlier when their choice depends on information from both European and American stock exchanges. b_jonas: it's ridiculous tswett[m]: Yeah, high-frequency trading is a weird thing. b_jonas: I mean, I don't work in financial areas, and admittedly the areas where I work are crazy in other ways, tswett[m]: Theoretically, traders provide a valuable service. tswett[m]: I want to be able to buy and sell goods, services and capital at prices that reflect their fair market value. b_jonas: right, they provide the grease that reduces the friction of the market tswett[m]: So if someone puts effort into providing that for me, they deserve a bit of return for their effort. b_jonas: they do get their return in the form of money b_jonas: `? tinfoil hat HackEso: tinfoil hat? ¯\(°​_o)/¯ tswett[m]: But there's presumably a point where it stops being "they get money in exchange for providing a valuable service" and starts being "they get money for being better at poker than everyone else." b_jonas: I'm not sure that's separable. they provide the valuable service by being good at poker. tswett[m]: Well, in actual poker, the good poker players aren't really providing a valuable service to the bad poker players. tswett[m]: Just like if I go into a casino and count cards, the casino pays me money, but it's not because I'm providing a valuable service to the casino. shachaf: Golly. Instead of pointless gambling, people should be able to bet on real things, and thus provide a valuable service to the world. b_jonas: as in on the stock market? shachaf: Well, stock betting is already mostly legal, and it's useful but it's not the only useful market. shachaf: I think mostly arbitrary prediction markets should be generally legal in the US, except one special one. b_jonas: or they pretend it's mostly legal, because if we could find out what specific illegal thing they do, the authorities would punish them shachaf: What do you mean? b_jonas: how about the intermediate stuff, betting on sports? shachaf: Sports betting seems pretty useless to me, but probably a bit better than casinos. b_jonas: sports betting seems pretty popular here, among people who I think don't have any comparative advantage in the bets, so it's just a game of chance, paying for the thrill or something b_jonas: I don't understand how it's so popular shachaf: It's kind of odd which things are legal to bet on in the US. shachaf: For example you can bet on the weather. FaeFly: what things aren't legal to bet on? shachaf: Arbitrary events. b_jonas: the tricky part of the legal rules (IANAL) is not just what you can bet on, but how you pay income tax after them. it's pretty clear that if you win all your bets, then all that you gain on them is your income. b_jonas: but if you win one bet and lose another bet, then is it a transaction as a whole and your income is the difference, or is the winning bet your income and the losing bets your spending so your income is what you win on the former? shachaf: Except for predictit.org and apparently something in Iowa, which are still not legal but allowed to run anyway? b_jonas: there are some rules on that, but of course there are so many, often illegal, new forms of betting, that they can't cover it all FaeFly: I guess the UK is more permitting than the US wrt betting on arbitrary events, then b_jonas: and it's even harder to enforce it shachaf: b_jonas: The answers to these questions are well-established for other trading, so it doesn't seem like a problem. shachaf: I mean, if you're betting secret and illegally it's hard to enforce, but the law is reasonably clear. shachaf: Yes, the UK is more permitting. shachaf: Except in the UK you have to use inscrutable words like "back" and "lay". b_jonas: right. and since games of chance are so severely regulated here, almost everyone who earns a signifiacnt amount do it illegally shachaf: Once in a while I figure out what they mean but the next time I want to look at a market I've forgotten again. b_jonas: ah, jargon FaeFly: (speaking of being able to bet on arbitrary events) b_jonas: FaeFly: they always do, the bet is only about when shachaf: Anyway my point is just that actual markets are useful for the world, whereas casinos are not. b_jonas: oh right, as for goats FaeFly: (nah, there's been years when it hasn't been, but the majority of the time it seems to be) shachaf: So if people are going to get the gambling thrill anyway, better for them to lose money on actual markets, to incentivize counterparties to do research or something. int-e: shachaf: I thought running a casino is great for making money? shachaf: Yes, casinos are useful for the owners and not anyone else. shachaf: Markets are useful for everyone. int-e: shachaf: grocery markets, maybe shachaf: Grocery futures! Good idea. shachaf: Exotic grocery futures options derivatives. int-e: Been done for cocoa... shachaf: Oh, another thing that's illegal in the US is onions future. shachaf: But that's an explicit exception for onion, most kinds of futures are legal. shachaf: for onions int-e: Well you learned the right lesson from the Tulip crisis. int-e: (Those are a kind of onion, right?) b_jonas: int-e: nah, they don't really work. the agriculture guys figured out that they don't have to pay for insurance, they just tell the government every year that this year has been the worst weather ever since their life and there's no way they could have been prepared for it and the government has got to pay them subsidy to help them b_jonas: you can't compete with that tswett[m]: Yeah, ban bulb speculation! shachaf: I'd like onion futures to be legal. Maybe I can write my congresshumans. b_jonas: shachaf: is this like those rules that get compiled to stupid law compilations on the internet, like laws about not being allowed to park an elephant close to a school or something? shachaf: It's this law: https://en.wikipedia.org/wiki/Onion_Futures_Act shachaf: It was later amended to ban box office receipts futures (bets on how much money a movie will make). shachaf: I think the law is just bad. As far as I know onion farmers agree nowadays. int-e: shachaf: It's certainly a ridiculous piece of legislation. I'm all for such a ban but limiting it to onions is ridiculous and short-sighted. int-e: A ticking time bomb. int-e: (No, I'm not a big believer in capitalism. Why do you ask?) shachaf: Yes, I know that. That's why I'm taking the contrarian view point, obviously. int-e: (More to the point I believe that free markets have optimize the wrong objective function.) int-e: s/have// shachaf: Sure, I agree on that. shachaf: Well, I don't know what right and wrong objective functions you have in mind. shachaf: But I also don't know what's better. It's easy to name shortcomings in markets. b_jonas: shachaf: that looks crazy, and I think it's an example of exactly what I said above, that agriculture people can put on a great innocent small child face with the puppy eyes and tell the congress that they're being unfairly exploited by the evil stock trade people, and then the congress does anything they ask for b_jonas: and if they don't, then the agriculture people pour milk and throw watermelons at them, and the politicians get afraid that their beautifully tailored suits will get spoiled, and so they give in int-e: I don't have a feasible, stable solution either. (For example, socialism is a great idea, but putting it into practice is really hard... you're likely to end up with corruption everywhere, and quite possibly an unmotivated workforce.) shachaf: I mean, they *were* unfairly exploited by futures traders. int-e: In practice, timely regulation is probably the best to hope for. tswett[m]: The free market is great as long as the market value of every person's labor exceeds the market value of the goods and services necessary for that person's well-being. shachaf: int-e: OK, sure, it sounds like we agree on that. shachaf: A big point of the whole market thing is that incentives line up well. int-e: Regulation is also the key to internalizing external costs, especially from the future. shachaf: And you certainly want regulation rather than "free markets" which can easily be pathological. shachaf: Right, and you want to internalize externalities. int-e: Basically, since we don't know anything better than the free market model that is also stable in the medium and perhaps even long term, we have to resort to tweaking the cost function. int-e: Of course it's all embedded in a prisoner's dilemma between countries because for most things we have a global market. int-e: (The background problem I'm considering is limiting climate change. It's one of the truly big challenges where in theory, it should be in everybody's interest to work really hard towards a solution, including accepting lowered standards of living for the few for the benefit of the many and future generations. In practice... I don't see any of that happening fast enough to matter.) int-e: Cornering markets, as nasty as that is... seems minor in comparison. shachaf: Limiting climate change is good but a particular government can add regulation for externalities however market-oriented it is. shachaf: And the inter-government issues are no different. b_jonas: this channel is weird. SAT solvers in the morning, free market in the evening int-e: we've also seen ootsology, meditation, and actual spam shachaf: int-e: Anyway, I don't think we disagree on any of the facts, so I think it's odd that you end up thinking futures should be illegal and I don't. b_jonas: `8-ball should futures be illegal? HackEso: Better not tell you now. b_jonas: fungot, what restrictions do you recommend to put on the free market? fungot: b_jonas: designing an os -and- playing tabletop.... i'm kinda thinking specifically of http and other stateless protocols... and dynamic ip addresses. but i can't int-e: shachaf: If you put it like that I'm not sure about whether they should be illegal. I don't think they are useful, and I dislike some of the consequences (cornering markets is most attractive in the presence of futures, isn't it...) shachaf: Hmm, I think futures are useful for reducing uncertainty and transferring risk from people who have it to people who want it. int-e: that's the trouble, isn't it int-e: hedging risks is great, speculation is bad, and there's no discernable differencw shachaf: Why is speculation bad? shachaf: (Speculation can also be done without futures, of course.) int-e: it's bad when combined with bankruptcy int-e: Because then you're in an ugly external cost scenario. arseniiv: oh at first I thought about futures like promises int-e: Yes. I promise to buy ... shares at price ... in the future. shachaf: That's arguable, but often it's addressed anyway. arseniiv: now I see this is economical stuff I don’t know anything about shachaf: I think speculation clearly has a useful function too. b_jonas: and that's still greasing the market? arseniiv: though I don’t really distingwish promises and futures too, I hadn’t read anything comprehensive to date about them all shachaf: If I buy wheat when it's cheap (low demand) and sell it when it's expensive (high demand), I've transferred wheat from people who don't need it to people who do. b_jonas: right, greasing the market, even though wheat in particular isn't greasy shachaf: I get paid for it because the people who need it are willing to pay because it's so useful to them. shachaf: That seems cleary useful. int-e: shachaf: presumably you've also paid for storage. except... nowadays... that's not so clear at all arseniiv: . o O ( my market is all floury on the floor, who did it ) shachaf: Nowadays you might've paid someone else for storage, sure. b_jonas: presumably if the grain travels time then someone payed for its storage somehow b_jonas: because no free launch shachaf: Right. int-e: or maybe there is no grain b_jonas: you mean it got to the future the old style way, by having planted seeds a few months before you need it, and then harvesting at the right time, so it doesn't need to be stored?? int-e: it's futures -> short-selling -> cornering markets -> disaster. :P arseniiv: BTW I watched those slides on GA and I wonder how can it be explained transparently than in PGA, you represent points by (n−1)-vectors, lines by (n−2)-vectors and so on and hyperplanes by 1-vectors, all in reverse to the way they’re represented in usual projective space context shachaf: I feel like you're focusing on a few extremely bad failure cases -- which are generally illegal anyway -- and not on the constant benefits everyone gets. b_jonas: it's not a _disaster_, it's just another stupid zillion dollars lots of government subsidies, because the agriculture sector knows that puppy eyes are cheaper than taking any risk or behaving like they're part of a world economy where maybe it's not worth for them to grow watermelons at all because shipping them all the way from brazil is cheaper int-e: shachaf: because "everyone" is concentrated in the top 1%. shachaf: I don't think that's true. int-e: I think it's born out by the capital distribution and its changed distribution over time. shachaf: Wheat farmers get the benefits of wheat futures, because they can reliably know what prices they'll sell their wheat at before it's grown, so they can plan better. arseniiv: (^cont.) (representing them the usual way gives something paranormal but why the reverse works is not automatically clear) int-e: but wouldn't they be better off if they had sufficient money floating to hedge those risks themselves... shachaf: Sure, I think there are clearly problems causing wealth to be concentrated among a small number of people to a ridiculous degree. But I don't think derivatives are the cause. shachaf: I buy insurance rather than hedging tail risks myself. shachaf: I think in some cases insurance makes sense and in some cases it's ridiculous, but the concept surely makes sense. b_jonas: shachaf: right, that's more than half the point of insurance shachaf: (Ridiculous: US health insurance.) int-e: So you should cover normal fluctuations using your own capital and tail risks by a proper insurance? b_jonas: shachaf: oh yeah, that one is weird int-e: I don't see where you need futures in this picture. shachaf: You should be able to transfer whatever risks you want to people who want to buy them. b_jonas: or hmm shachaf: No one is forcing wheat farmers to use futures. If they want to hedge tail risks only they can do that too (and people also trade wheat options, but I imagined you'd have even more of an objection to those). b_jonas: well, there's also cases when the government mandates you to buy insurance, most importantly (a) when you're driving motor vehilcles, you must buy insurance to pay to the people you kill by accident, and (b) if you run a travel agency, you must buy insurance to transport the travelers back home b_jonas: `? trigak HackEso: trigak? ¯\(°​_o)/¯ b_jonas: `? serini HackEso: serini? ¯\(°​_o)/¯ b_jonas: what look, trigak and serini look just the same according to the wisdome shachaf: I often hear backjumping described as a big improvement, but is it actually that important? shachaf: With your learned clause, even if you didn't backjump but only went up one level, the new clause would give you a conflict via unit propagation anyway, right? So you wouldn't end up making any new decisions. shachaf: b_jonas: https://twitter.com/ioccc/status/1183476350847336453 b_jonas: ooh, this will be interesting b_jonas: shachaf: ioccc? let me see int-e: shachaf: The point of backjumping is that you undo decisions that were made after a point where the newly learned clause could be used for unit propagation. int-e: shachaf: It's not an unconditional win, but heuristically you want to do as much unit propagation as possible before making a decision. shachaf: b_jonas: It's only a pre-update. int-e: shachaf: You can think of it as a partial restart, maybe? b_jonas: majority opposition win in Bp shachaf: int-e: I mean, clearly backjumping is good, but if you didn't do it, unit propagation alone (and no decisions) would unwind you to the same point. Right? int-e: shachaf: well, sooner or later... int-e: shachaf: actually, no, it's incomparable b_jonas: shachaf: I know it's not the final results yet, but it won't change significantly at this point int-e: shachaf: if ordinary backtracking returns to that point, the negated literal corresponding to that decision will end up on the trail, then the backjump literal. int-e: shachaf: I'm pretty sure this is one of those ideas that are completely unclear in theory but work out well in practice. int-e: Aka a heuristic ;) b_jonas: shachaf: yes, that's probably not worth an ioccclist trigger b_jonas: `? ioccclist HackEso: ioccclist is update notification for when a new year of the International Obfuscated C Code Contest is announced, or the winners for a year is announced, or the source codes of winners are released. http://www.ioccc.org/#news int-e: shachaf: oh what do you mean by "unwind"... only backtracking or backjumping really unwinds anything; everything else expands the trail. b_jonas: it doesn't even appear on the news page j4cbo: hey SDR nerds, can anyone identify this encoding scheme? j4cbo: https://usercontent.irccloud-cdn.com/file/o3noKYIX/Screenshot%202019-10-13%2014.51.44.png j4cbo: https://usercontent.irccloud-cdn.com/file/G4qGBD9F/Screenshot%202019-10-13%2014.50.47.png j4cbo: it's not manchester... the thing i noticed is each high is only ever 1 symbol length but the low intervals are either 1 or 2 j4cbo: so a transmission is variable length depending on how many 0s or 1s there are? b_jonas: j4cbo: that could happen, there's at least one encoding scheme that is variable length like that b_jonas: of course there could be a layer over it that changes what comes out as zeroes and ones j4cbo: https://usercontent.irccloud-cdn.com/file/qoPjGUGh/Screenshot%202019-10-13%2014.53.51.png b_jonas: j4cbo: but isn't it also possible that you have too few samples and sometimes the high can be 2 long too? j4cbo: that is possible j4cbo: i'm trying to reverse-engineer my cheap-ass wirelessly controlled christmas lights j4cbo: i have a remote control dongle with three buttons (toggle power, change pattern, and 'sync' which restarts the current pattern) so... those are the only three samples i'm gonna get :P b_jonas: see https://en.wikipedia.org/wiki/1-Wire which is variable length like that b_jonas: but with different timing j4cbo: then it's OOK over 433mhz j4cbo: i'm kind of hoping the receive device supports discrete on and off commands b_jonas: do you always get the same sample from the same button? b_jonas: well that's promising j4cbo: it just plays over and over again while the button is held down b_jonas: send it lots of random nonsense quickly and hope that does something? zzo38: Could you implement on/off by the power connection instead if needed? j4cbo: totally, but that requires extra hardware :P b_jonas: j4cbo: these only have, like, 17 bits of info at most, so try all 2**17 combinations b_jonas: some of them will probably be ignored j4cbo: yeah, i need to rig up some code to send those words out from my own hardware next b_jonas: are these sent by radio or by infrared? j4cbo: radio, 433mhz OOK b_jonas: hmm, that might be harder j4cbo: i have a spare rileylink shachaf: int-e: I think I'm confusil about something but I don't want to type it on my phone so I'll try to say more later. shachaf: By unwinding I mean regular backtracking, i.e. only subtracting 1 from the level. int-e: shachaf: Right. Then I think I've understood correctly... and perhaps answered your question as well. shachaf: int-e: Back at computer. b_jonas: strangely, the word "confusil" doesn't appear in quotes or wisdom ... yet shachaf: int-e: Whether you backtrack or backjump to a point earlier in the trail, you should have the same state, shouldn't you? int-e: shachaf: No, because the backtracking will leave an additional literal on the trail. shachaf: I mean the same trail state. Your learned clauses might be different. b_jonas: sorry I don't make more constructive conversation, but SAT solvers really isn't a topic I feel interested about int-e: shachaf: before unit propragation with the learned clause kicks in. shachaf: Wait, backtracking only deletes everything past some point in the trail, doesn't it? shachaf: So at the time you unwind to any past level k, you've deleted everything past k in the trail. int-e: shachaf: backtracking takes deletes the trail up to the last decision, and places the negated decision literal on the trail shachaf: When you say "that point" what do you mean? shachaf: I feel like I should just draw a diagram and the confusilation would be resolved in eight seconds. int-e: shachaf: "that point" meaning the position of the decision literal that backjumping would replace on the trail. shachaf: Say you have a,b!,c,d,e!,f,g!,h,i on the trail, where the !ed literals are decisions and the rest are a result of unit propagation. shachaf: You reach a contradiction and you add a clause, which would let you backjump to replace e. Right? int-e: shachaf: if you have 1 2^d 3 4 5^d 6 7, a conflict, with learned clause -1,-7... then backjumping results in 1 -7 as the new trail, whereas if you continue the search until 2^d is removed by backtracking, you'll end up with 1 -2, and then unit propagation will add -7. int-e: shachaf: ^d marks decisions. shachaf: Now I see what you mean. Thanks. shachaf: So one of the important things about CDCL is that the only thing the learned clauses are any use for is unit propagation. Right? shachaf: So you want them to be as small as possible if you can manage it, or otherwise as relevant as possible within your assumptions. Or something like that. int-e: . o O ( just like any other clauses ) shachaf: No, the original clauses are useful for specifying your problems. shachaf: The new clauses are redundant and only useful if they make unit propagation happen. shachaf: I'm just saying something very obvious here. int-e: Right. int-e: Actually there's a point here. int-e: SAT solvers also prune the clause database (they forget clauses), and that's only allowed for clauses that are redundant. int-e: Which means that in most cases, they will only forget learned clauses. shachaf: Do they even forget original problem clauses? int-e: There are simplification procedures (I know nothing about them really except that they exist) which can also identify redundant clauses. shachaf: I thought the main reason to forget clauses was to save memory, and otherwise having a bunch of clauses doesn't hurt. shachaf: But, sure, simplification makes sense. int-e: Or potentially rewrite clauses (add some clauses that make other clauses redundant while maintaining satisfiability) shachaf: One of the slightly odd things about CDCL is that you have to use full clauses, rather than the reduced clauses you get after assuming some literals. Right? int-e: You mean wrt the current trail? shachaf: But your learned clauses have to be globally true so you can't really talk about subproblems like that. int-e: If you ever want to go back on that assumption and keep the learned clauses valid... yeah you'll need full clauses. int-e: So in particular that's true for everything on the trail. shachaf: But I think that's not so bad because even if you learn a big clause, while you're in the same region (sharing most of the trail) it'll still be locally pretty small and so useful for unit propagation. shachaf: When your trail looks very different after a while, the big clause might be less useful, and you might be more inclined to forget it. int-e: Also learning is completely optional... a SAT solver can just refuse to learn clauses above a certain size. shachaf: Right. Without learning a CDCL solver is still correct, which is good. shachaf: Maybe you can just use big clauses for backjumping without learning them? Not sure how useful that would be. int-e: Actually it's kind of awful too... you have so many degrees of freedom for heuristics... int-e: Which literal to decide on, what to learn, what to forget, when to restart... shachaf: Restarting seems like a surprising strategy to me. Especially a solver (BerkMin) that restarts every 550 conflicts?! shachaf: Do restarting solvers have any guarantee of termination? int-e: They are supposed to do some sort of (exponential?) backoff... int-e: But this interacts in interesting ways with learning. int-e: If you learn all backjump clauses and never forget then even if you restart after every conflict you'll eventually solve the problem. shachaf: Oh, because everything slowly becomes forced by UP. int-e: (this is degenerate... you'd have a conflict, analyse it to find the backjump clause, learn that clause, but never actually backjump because you're restarting anyway) int-e: The other intuitive reason for restarts is that initially the variable selection heuristic has no information at all... with a restart, even early decision levels can benefit from the variable selection heuristic. int-e: I suppose this is especially important for satisfiable problems. shachaf: Why is unit propagation the only thing used for assigning values to variables, other than decisions? int-e: because it's fast? int-e: And I guess the attitude is that all other inferences can be learned as clauses. int-e: IIRC the original DPLL had a "pure literal" rule... if a literal only occurs positively in the current set of clauses (those that are not already true) then one can assert that literal to be true. Nobody implements this as part of the propagation rules. int-e: If you're facing a decision like... "would you rather do X or 1k unit propagations" int-e: it's easy to imagine that X probably won't pay off :) j4cbo: boo, i need an SDR oerjan: luckily it's not pizza <-- then it must be bell pepper and aubergine stew, just the way shachaf hates it oerjan: `? hungry HackEso: hungry? ¯\(°​_o)/¯ oerjan: `wisdom tinfoil HackEso: That's not wise. oerjan: `wisdom foil HackEso: ​foil//Foil is a material that provides protection against evil, such as mind control rays. To protect the world many heroes spend a lot of their time foiling villains. oerjan: huh that's mine shachaf: "The reason why frequent restarts help solve problems faster is that while the solver does forget all current variable assignments, it does keep some information, specifically it keeps learnt clauses, effectively sampling the search space, and it keeps the last assigned truth value of each variable, assigning them the same value the next time they are picked to be assigned" shachaf: I didn't consider that last part. jix: shachaf: it also keeps the scores used for the variable selection part of the decision heuristic jix: shachaf: so it is likely that it will branch on a similar set of variables after a restart shachaf: Right. int-e: who exactly is dying in out-of-order execution jix: int-e: that's an issue that may take until retirement to figure out Taneb: IOCCC sources have been released shachaf: Taneb: There's a list for that. Taneb: shachaf: quite possibly int-e: `listlist HackEso: FireFlist* \ aglist* \ bardsworthlist* \ bobadventureslist* \ calesyta2016list* \ danddreclist* \ don'taskdon'ttelllist@ \ dontaskdonttelllist* \ ehlist* \ emptylist* \ erflist* \ flist* \ idealist* \ ioccclist* \ keenlist* \ list* \ listen* \ listlist* \ llist* \ makelist* \ makelistlist* \ minimalist* \ mlist* \ olist* \ pbflist* \ slist* \ smlist* \ stylist* \ testlist* \ xkcdwhatiflist* \ ysaclist* FaeFly: ..what's the FireFlist FaeFly: do I want to know.. shachaf: `cat bin/FireFlist HackEso: echo FireFly Eldis4 int-e: `culprits bin/FireFlist HackEso: nortẗi nortẗi int-e: hmm. must be old :) shachaf: Why is my solver extremely slow? shachaf: I thought it was because I'm being very inefficient, but my friend's solver is also very inefficient and is also written in Python and is only slightly slower. int-e: Ah, Anevka. Things are coming together. int-e: shachaf: could you have bad benchmark(s)? int-e: as in, one of the solver gets lucky, the other not shachaf: It's the same random 3SAT instance. int-e: and you've tried several I suppose? int-e: but who knows, maybe you are doing something wrong shachaf: I think my time is roughly consistent. shachaf: I suspect this is just naıve in a way their solver isn't. shachaf: I wasn't worried about it because I was going to implement watched literals anyway, but it's a bit odd. wib_jonas: ooh, let me see wib_jonas: `ioccclist https://www.ioccc.org/years.html#2019 The source code for the winners of the 26th IOCCC has been released. HackEso: ioccclist https://www.ioccc.org/years.html#2019 The source code for the winners of the 26th IOCCC has been released. : b_jonas rain2 rain1 shachaf: Hmm, it might've just been luck for this instance. shachaf: If I assume false instead of true, the time goes way down. wib_jonas: " int-e: that's an issue that may take until retirement to figure out" => beautiful ambiguous statement, playing on how "retirement" has both a technical meaning in this context and an everyday meaning wib_jonas: oerjan: you can make bell pepper stew in an oven? wib_jonas: oerjan: oh right, it's just "foil" wib_jonas: oerjan: as for "hungry", the relevant wisdom is wib_jonas: `? ostrich HackEso: Ostrich used to be a large middle European empire in frequent conflict with Turkey. After a famine it sort of split into Ostrich/Hungry. Alas its policy of keeping its head in the sand did not get it through the Great War, and with its final attempts to take flight failing, it ended up cut into several pieces. wib_jonas: this was apparently written by you jix: wib_jonas: as does "issue" :) wib_jonas: shig: IOCCC winners are released wib_jonas: let me thing where else on the internet should I ping with this news shig: Awesome! int-e: jix: ah, didn't see those... now I feel bad :P shachaf: OK, I think it was just my variable-picking strategy being very bad. int-e: plausible... out of curiosity, did you test a satisfiable or an unsatisfiable problem? shachaf: Both, but mostly a satisfiable one. int-e: I'd probably use mostly unsatisfiable instances for comparison between solvers... or many satisfiable instances. Luck is too much of a factor for satisfiable instances. int-e: people also randomize inputs... shuffling literals and clauses. wib_jonas: int-e: and randomly negating them, like in bfjoust int-e: bfjoust is not random though, is it jix: even for unsat instances variance is crazy, which makes good benchmarking take a long time and cost a lot :( wib_jonas: int-e: the random space is so small that we try all possibilities, so we don't do a real random sample, but the idea is the same wib_jonas: some instances work better when you negate the direction, so we try both negated and non-negated wib_jonas: hi Lykaina Lykaina: 40 min till quiet time in my apartment building is lifted Lykaina: ugh... Lykaina: i'll take meds then and go back to sleep Lykaina: woke at 5am int-e: the mace is in the house Lykaina: int-e: huh? int-e: https://www.youtube.com/watch?v=JzPf4RRG1Rc ;-) Lykaina: can't...still quiet time int-e: "LIVE State Opening of Parliament: 14 October 2019" Lykaina: i wonder if the uk is pissed that they voted for brexit int-e: they're still divided on that according to polls Lykaina: seriously? int-e: seriously. wib_jonas: Lykaina is probably on the east coast of North America then Lykaina: probably int-e: queen arrived, house of commons summoned... this will take a while :) Lykaina: if they do a no-deal brexit, i will be disappointed int-e: At this point I won't. But it's unlikely to happen just now. int-e: I'm kind of expecting another extension and a general election in the UK. But I don't really know; I think nobody does. Lykaina: i hope they stay in the eurozone int-e: That seems unlikely. wib_jonas: right, they need to sacrifice a prime minister as a scapegoat a few times per year, and a general election is the easiest way to choose the next person to be sacrificed int-e: Oh Johnson's speech has begun. (Read by the Queen, of course.) wib_jonas: Lykaina: what? eurozone? wib_jonas: they're not using the euro Lykaina: yeahno wib_jonas: int-e: huh, why would the Queen read the PM's speech? int-e: wib_jonas: Because that's how this "Queen's speech" works. Lykaina: i mean, free travel wib_jonas: also, we've got the near final results for the local govt elections. opposition win in Budapest is now confirmed, in fact they got one more place than they seemed to have when I checked in the evening. wib_jonas: int-e: that's weird int-e: wib_jonas: Well it is the UK. :P int-e: Lykaina: did you know that Corbyn is pro Brexit? int-e: The leader of the Labour party. int-e: The party line is different, interestingly enough. Lykaina: what about the tories? Lykaina: or does tories = labour? int-e: Nah, they are opposing parties. Taneb: Lykaina: tories = conservative party, who are in government and led by Boris Johnson Lykaina: which country is led by boris badnoff? i forgot int-e: and the queen has left int-e: I'm not sure what happens next... apparently the house of commons members return there... Taneb: There's a debate on whether the Commons accept the Queen's Speech int-e: Nice. Should be fun. Lykaina: what did the queen argue for/against? int-e: brexit, law and order, environmental protection (interestingly enough), leadership (of the UK in the world) after brexit int-e: I don't remember all of it. int-e: I'm sure we can read the whole thing online in a couple of hours. int-e: (law and order... there was a bit about giving the polic force the means of defending themselves, and something about giving them the power to arrest people with warrants by "trusted partners". int-e: Anyway. I've never seen this ceremony; now I have. Yay me :) Lykaina: how old is she again? Taneb: If she were here she's probably be the oldest person in the channel int-e: Lykaina: Anyway, the polls that I recall said that a small majority would be in favour of staying in the EU now. However, not all of those people want to abandon the Brexit process... Lykaina: confused int-e: Lykaina: The first question is entirely hypothetical... if the Brexit process had not been started, and there was a referendum on that today just like there was (uhm, 3?) years ago, how would they vote. int-e: The second question is about actually going back and stopping the Brexit process that has been started and ongoing for all the time since. int-e: I imagine a lot of people now want it to be over with, not really caring about the result. Taneb: int-e: 3.5 years int-e: close enough int-e: (for my standards) Taneb: Actually... I'm mixed up, it was in the summer, wasn't it? Taneb: And then article 50 was invoked the following Spring Taneb: So, 3.25 Taneb: Very close int-e: Let's meet in the middle! wib_jonas: The queen ended the speech, now she's leaving. wib_jonas: Hmm no, maybe she isn't. wib_jonas: I don't understand how this works. wib_jonas: She's speaking again now. Taneb: wib_jonas: I think your coverage may be behind? wib_jonas: " If she were here she's probably be the oldest person in the channel" lol wib_jonas: `? people who taneb isn't HackEso: people who taneb isn't? ¯\(°​_o)/¯ wib_jonas: `? people who taneb aren't HackEso: people who taneb aren't? ¯\(°​_o)/¯ Taneb: `? people who taneb is not HackEso: elliott, a rabbi, Mark Zuckerberg, James Bond, Queen Elizabeth the first. Pending approval: Shigeru Miyamoto. int-e: `quote elliodd HackEso: No output. wib_jonas: Taneb: this youtube thingy says it's "live", but then, I've see so many things in television where they still have the "live" caption when it's replayed, so I don't really trust it wib_jonas: either they should add "not live" as a caption, or add a timestamp next to "live" int-e: wib_jonas: The live stream has ended 20ish minutes ago wib_jonas: ah I see wib_jonas: it says "live" and also "replay" wib_jonas: then it's not live Taneb: Fun Taneb fact: I have what is to my knowlege the largest collection of autographed Haskell textbooks Taneb: (I have two) wib_jonas: Taneb: how many of those did you autograph yourself? Taneb: wib_jonas: zero, they are both autographed by the respective author Taneb: (one by Graham Hutton and one by Simon Marlow) int-e: HSE... RWH maybe? Taneb: Programming in Haskell (second edition) and Paralle and Concurrent Program ming in Haskell int-e: Btw, LYAHFAGG would earn you negative points. int-e: Funny, there are more Haskell textbooks than I thought. wib_jonas: `slashlearn people who taneb is not//Taneb is not elliott, a rabbi, Mark Zuckerberg, James Bond, Queen Elizabeth the first, or anyone older than Queen Elizabeth the Second. Pending approval: Shigeru Miyamoto. HackEso: Relearned 'people who taneb is not': Taneb is not elliott, a rabbi, Mark Zuckerberg, James Bond, Queen Elizabeth the first, or anyone older than Queen Elizabeth the Second. Pending approval: Shigeru Miyamoto. arseniiv: Btw, LYAHFAGG would earn you negative points. => hm but it’s where I learned about zippers first int-e: arseniiv: if you ever start a collection of haskell textbooks, this is the one you hide in the attic. int-e: that's all I was saying ;) int-e: and obviously I'm compleeeetly objective about this. int-e: Not tainted by personal opiona at all. arseniiv: hm hm :D wib_jonas: "opiona" wib_jonas: int-e: what does the second A stand for in "LYAHFAGG"? arseniiv: my one concern is that its density is pretty low int-e: wib_jonas: I thought there was an "a" there. I didn't check. wib_jonas: arseniiv: yeah, that means you can't even effectively use it as a doorstopper int-e: wib_jonas: Yes, I've marvelled at "opiona" as well... :) int-e: A stroke of genius. Or maybe just a stroke. Who knows. wib_jonas: fungot, do you have an opiona on the opiuma crisis? fungot: wib_jonas: as soon as i get the feeling i'm saying the point of int-e: fungot: you should become a politician fungot: int-e: and besides, some people don't int-e: fungot: exactly fungot: int-e: on the other hand i you *do* have install priviledges then it's much too dark as well :) just trying that now. well, maybe int-e: "priviledges" wib_jonas: doorstoper reminds me of this old strip https://www.smbc-comics.com/comic/2006-12-14 arseniiv: wib_jonas: rofol arseniiv: A stroke of genius. Or maybe just a stroke. Who knows. => please don’t give genii strokes, it’s bad for their healths arseniiv: wib_jonas: rofol => I meant the first doorstopper message but I’ve seen that strip too arseniiv: I won’t say “rofol” on a cruel humor, it would be too much even if it has some fun :) rain1: exciting about IOCCC! wib_jonas: hello rain1 FaeFly: @metar ESSB lambdabot: ESSB 141650Z 35004KT 320V030 9999 FEW022 08/07 Q1014 b_jonas: [ 150*(mile=:1609.344) j-bot: b_jonas: 241402 arseniiv: I am prone to crash into nostalgia and it’s bad and unconstructive arseniiv: now I hopelessly tried to find a photo of a place which isn’t the same anymore as it was rebuilt several years ago. And I don’t know if it persisted and from which mobile phone it was shoot at all, maybe from the one which isn’t turning on anymore imode: "if the data exists, the thing exists" is a fallacy I run into. arseniiv: though I flagged several photos as broken in filenames and added some code to my program for filling in creation date of a file when it’s newer than its modification date (yep that happens) imode: it's why I take photos of everything and stow them away like a squirrel. it isn't healthy and it's not constructive. arseniiv: imode: :( arseniiv: and not that even that place was significant to me to be in, it just had a funny design of its name arseniiv: ah, not that arseniiv: this was a cafe inside a big place, the place got rebuild and I won’t walk in its old layout anymore, and it’s a bit sad, and in that cafe I don’t remember to be in arseniiv: and it’s not that sad arseniiv: but the name design arseniiv: also I was stupid to clean some DVDs with a version of the not-so-yearly backup arseniiv: that could be useful too arseniiv: and there were some DVD-Rs which persisted only because I couldn’t clear them. And later they proved to be useful, even arseniiv: despite being made in approx. 2008 arseniiv: that’s just silly b_jonas: imode: taking photos of everything and filing them away is a good thing. it is constructive. int-e: until you imagine the growing pile of picture creeping up on you and burying you under an avalanche of impressions to sort through. int-e: `? alice HackEso: Alice doesn't want to go among mad people. b_jonas: int-e: I haven't been taking enough pictures, and I spent way too little time sorting through them and publishing the ones that I should publish, and I feel some amount of shame about that. but a growing pile creeping? nah, that'll never happen b_jonas: admittedly I am somewhat conservative with how many pictures I take b_jonas: but still arseniiv: int-e: we should just wait for arriving of a good AI photo sorter, no worries about piles, why arseniiv: “these twenty photos are almost the same, these eight are all blurry, these three differ in these details, these eleven I don’t advise to look for too closely due to too many arthropodes depicted” arseniiv: the first comma should be a colon instead arseniiv: and then you look at all twenty two of them anyway as you think there could have been false negatives and interesting artistic possibilities arseniiv: there are two extra ones due to a flaw in AI so that when it inspects images, it sometimes adds their weighted averages to the mix shachaf: kmc: are you into sat solvers yet kmc: not really kmc: i've been into them for brief periods in the past kmc: i wanted to use sat solvers to run Game of Life backwards kmc: but couldn't get it working shachaf: I was reading Knuth's fancy thing that does that. shachaf: It's in TAOCP volume 4 fascicle 6. shachaf: Also there's a program at http://bach.istc.kobe-u.ac.jp/lect/taocp-sat/knuth/pdf/sat-life.pdf ? shachaf: Under what conditions does a programming language have quines? shachaf: I wanted to figure out whether the existence of quines was a direct consequence of Lawvere's fixed point theorem. shachaf: It's surely related, but the construction is usually somewhat different. cpressey: shachaf: I'm pretty sure any Turing-complete language whose programs can be enumerated has a quine, by the s-n-m theorem. cpressey: s-m-n theorem. whetevr. it's early. cpressey: I guess "running a program" in the language has to considered to be able to produce an integer, or whatever the programs are enumerated with. int-e: @teill arseniiv "we should just wait for arriving of a good AI photo sorter" <-- I'm waiting for the AI that will create the photos that I should have taken lambdabot: Consider it noted. cpressey: On the subject of quines, I was reading about Richard's paradox last night, and if I'm not mistaken, a Richardian number is basically the same as a https://esolangs.org/wiki/Narcissist shachaf: cpressey: I think maybe https://en.wikipedia.org/wiki/Kleene%27s_recursion_theorem has an answer to my question. shachaf: cpressey: Hmm, what's interesting about this paradox as opposed to all the other well-known paradoxes that seem identical to it? shachaf: Oh, maybe it's just old. cpressey: I found it when trying to research why lambda calculus and combinatory logic are not used as deductive systems, even though they were invented as deductive systems. The Kleene-Rosser paradox that shows that ^c is inconsistent, is apparently more or less a version of Richard's paradox. int-e: cpressey: Oh I didn't know of that paradox. Of course on a formal level it'll be resolved by Tarski's theorem shachaf: I also don't particularly see narcissists as very interestingly different from quines, though it's possible I'm missing something there. int-e: (Tarski's theorem = undefinablility of truth. The sentence whose truth is of interest here is "F defines a unique real number") shachaf: I'd have to imagine that every Turing-complete language admits a quine. How could it not? shachaf: (Unless you're playing games with encoding, which don't seem that interesting to me.) int-e: TC-ness doesn't require any output capability (beyond one bit). shachaf: Yes, that's true. One semibit. int-e: I mean a mathematical truth value. shachaf: But I guess I don't care about that too much. I'm looking for interesting ways in which languages can fail to have quines. int-e: Not a weird three-state bit. shachaf: Which truth value are you talking about in particular? Halts/doesn't halt? int-e: accept/doesn't accept shachaf: OK, sure, I guess. int-e: We have some wild cases that never halt. shachaf: Oh, here's a different question. shachaf: Hmm, I'm actually not sure how to phrase this question. shachaf: Lawvere's theorem is along the lines of, say you a function : A -> (A -> B) which is surjective. Then every function : B -> B must have a fixed point. shachaf: (For appropriate values of "function" and "surjective" and "(A -> B)".) shachaf: say you have int-e: shachaf: any TC formalism will allow the kind of circularity that Kleene's fixed point theorem embodies. I.E. a program can contain a full description of itself, suitable for simulation or other analysis. shachaf: int-e: Yes, that's what I was getting at. int-e: And I agree that it's really hard to capture this more rigorously. shachaf: That seems more interesting than insisting on quines which gets into a bunch of nonsense. shachaf: I guess that question was about sub-TC systems. int-e: For the most part, Quines are just cute programming puzzles of no real importance. shachaf: Clearly some of those can still create quines (and use the same techniques that you'd normally use, not something one-off). cpressey: Also on the subject of quines: https://github.com/dpiponi/infinite-quine shachaf: Yes, I'm certainly not concerned with the quine itself. int-e: We have a notion of I/O-completeness on the wiki. An O-complete TC language has quines. shachaf: Anyway, on Lawvere's theorem. shachaf: What should I call A and B? I'm tempted to call A "Name", where A names an element of A -> B shachaf: (And with that element in turn an A names a B.) shachaf: Surjectivity means that everything has a name. shachaf: One concrete example is A as any set, and B as 2, which gives you Cantor's theorem. shachaf: Why is (A -> B) the right codomain here in general? shachaf: That's clearly not the question I want to be asking. shachaf: Maybe instead of B=2 I should take an example with an arbitrary B. shachaf: The Y combinator gives you fixed points for any function : B -> B this way. shachaf: OK, I guess you can say that eval : A -> (A -> B) is a two-argument function doing the same sort of thing Q(x, y) is? shachaf: Hmm, no, that's nonsense. cpressey: Is SK-calculus known to be confluent? I mean it *must* be, right? I've just never seen anyone say anything about it one way or the other. cpressey: You can probably show it just by showing that the translation to lambda calculus preserves confluence. shachaf: Do you mean something other than the confluence you get if you expand every S and K to lambdas? Taneb: Confluence as a rewriting system? shachaf: Hmm, I guess that makes more sense. shachaf: Speaking of SK, I still don't understand why BCKW is a good system. shachaf: I already like it but I'd like to like it for a good reason. Taneb: shachaf: I found it easier to understand the translation between lambda calculus and BCKW than lambda calculus and SK shachaf: What I'd like is a connection to reordering, weakening, and contraction. shachaf: What's the lambda calculus translation? int-e: cpressey: SK and SKI are confluent Taneb: I can't remember, this was about 8 years ago I did this Taneb: Near when I was first in here shachaf: you're still in the top ten in here hth int-e: cpressey: They are orthogonal first-order term rewriting systems. This is usually shown by introducing a parallel reduction relation and something called a "parallel moves lemma" that shows that that relation has the diamond property (ensuring confluence); the terminology is similar to that used for the lambda calculus but the proofs are actually quite a bit simpler. int-e: cpressey: I forgot, did you mention having looked at Baader/Nipkow's book on term rewriting? int-e: (because that stuff is all covered in that book) int-e: Except maybe the concrete case of combinatory logic int-e: Btw, orthogonal = left-linear (no duplicate variables in left-hand sides of rules) + absence of critical pairs (which you might know from Knuth/Bendix completion or the corresponding confluence criterion for terminating systems). int-e: Taneb: do you also approach these systems from a point of view of abstraction elimination? int-e: (BCKW(I) and SK(I)) int-e: Actually, hrm. I want SBCKI, I don't like W at all. shachaf: W is supposed to replace S presumably, as the only combinator that does duplication. shachaf: Why don't you like W? int-e: myname: you missed the oppertunity there: BSICK (be sick) int-e: shachaf: because it has no immediate use for abstraction elimination int-e: \x. M[x] N[x] -> S (\x.M[x]) (\x.N[x]) int-e: but with BCKW you artificially (to my mind) deduplicate the x first, ... -> W (\x1 x2. M[x1] N[x2]) x. shachaf: Well, you might be interested in talking about substructural logic. int-e: I'm usually not. shachaf: So I could be interested in what you get with BCK without W, for instance. int-e: Sure, but I also get that from SBCKI by dropping the S. int-e: I don't like the flavour of duplication offered by W; I prefer the flavor offered by S. int-e: That's it in a nutshell. shachaf: The S is serving multiple purposes, I guess. shachaf: I like S but I'm curious whether a simpler basis will let you pick out parts you like better. shachaf: Hmm, is there a standard combinatory basis for some kind of linear lambda calculus? int-e: But I'm definitely not approaching this from a logical perspective. My first encounter of combinatory logic was as a model of computation. int-e: shachaf: Sure, BCI is the standard basis for that, add K if you allow deletion. wib_jonas: " I'd have to imagine that every Turing-complete language admits a quine. How could it not?" => only if they can do universal IO int-e: I do like B and C precisely because they capture linearity. int-e: Something that SK hides. shachaf: wib_jonas: Yes, see the discussion below. wib_jonas: ah wait, I'll read on shachaf: How do you turn a lambda term into BCKW? shachaf: Let's see. wib_jonas: BCKW => we just had a discussion about that wib_jonas: http://www.cs.ox.ac.uk/people/samson.abramsky/pcpt.pdf int-e: you have \x. M[x] N -> X (\x.M[x]) N, \x. M N[x] -> Y M (\x.N[x]), where X,Y \in {B,C}. int-e: I can never remember which is which. shachaf: OK, that PDF indeed makes the connection I wanted. Taneb: int-e: I don't quite know what you mean by abstraction elimination (my brain isn't fully awake yet) int-e: (So these look like specializations of \x. M[x] N[x] -> S (\x.M[x]) (\x.N[x]) when x does not occur freely in N or M) shachaf: delambdification? Taneb: SBCKI would be better, I think wib_jonas: in particular, there are no non-empty quines in geo because it can only output decimal integers (followed by a newline), but the source has to have "print" in it to output anything int-e: Taneb: the process of starting from a lambda term (which has lambda-abstractions) and turning it into an equivalent (in some sense) abstraction-free term using your combinator basis wib_jonas: but this probably isn't an interesting reason shachaf: wib_jonas: OK, but I already said that that's an encoding detail that I don't find interesting. Taneb: int-e: yeah, I think that's what I do wib_jonas: " For the most part, Quines are just cute programming puzzles of no real importance." => Smullyan and Hofstadter would disagree int-e: wib_jonas: "quine" is just a surface phenomenon (a program that prints its own source code)... you need much more to make it computationally interesting wib_jonas: int-e: right, that's why Golf SE tried to qualify interesting quines with a rule, so that non-cheating quines are ones that are useful for building self-referential programs cpressey: int-e: Right, yes. I've read Baader and Nipkow, also some other texts on term rewriting. Didn't remember about orthogonality of term rewrite systems. Didn't really occur to me at the time to look at SK-calculus as a rewrite system. And I guess lots of other ppl don't usually look at it that way either. wib_jonas: and, in particular, empty quines, or quines that are just a numeral in languages that echo a numeral, are considered cheating for them int-e: ``` dc <<<6581840dnP HackEso: 6581840dnP shachaf: Oh, I like this connection to polynomial time. shachaf: I don't really know good ways of talking about computational complexity for lambda calculus at all. int-e: That's a quine, but hardly interesting from a logical perspective... there's no real quoting (quining) going on here. int-e: cpressey: That's fair. Happy to help with connecting dots :) shachaf: I imagine lambda calculus is just bad at talking about things like time and space constraints. wib_jonas: int-e, KBCSI => yeah, that could work shachaf: Since reduction is so unrealistic. wib_jonas: but my problem is sort of that all of these get weird if you try to abstraction-eliminate multiple variables wib_jonas: so could I instead advocate Amicus, which deals with functions of multiple variables naturally? shachaf: «It was always hard for many to comprehend how Cantor’s mathematical theorem could be re-christened as a ”paradox“ by Russell and how Gödel’s theorem could be so often declared to be the most significant result of the 20th century. There was always the suspicion among scientists that such extra-mathematical publicity movements concealed an agenda for re-establishing belief as a substitute for s shachaf: cience. Now, one hundred years after ... shachaf: ... Gödel’s birth, the organized attempts to harness his great mathematical work to such an agenda have become explicit.» int-e: wib_jonas: The other thing that makes writing quine more of a puzzle is that ultimately the quining process is very automatic (one cute trick: take a description of a program P(x) that takes a description of a program Q and produces Q([Q]) by whatever notation) but you have a lot of leeway in choosing the encoding for Q, so that's what the focus tends to be on. int-e: In the end 6581840dnP doesn't depart from the core idea at all... but the encoding is chosen such that both priting [Q] and printing Q is done by a single dc instruction. wib_jonas: int-e: no no, the argument Q is printed by [n] instruction, the program Q is pritned by the [P] instruction int-e: wib_jonas: You may have mis-parsed what I wrote. wib_jonas: `dc -e 6581840dn HackEso: 6581840 wib_jonas: `dc -e 6581840dP int-e: wib_jonas: I KNOW HOW IT WORKS DAMNIT wib_jonas: yeah, sorry, but I wasn't sure how it worked wib_jonas: because I don't write dc stuff and the instructions are weird wib_jonas: so I had to test it int-e: (I came up with that quine myself some years ago. But it's obvious enough that I would be surprised if I was the first.) wib_jonas: yeah. the perl quine that starts with print<< x2,$/ is also like that, multiple people come up with it independently by simply trying to write a very short quine wib_jonas: whereas some of the other perl quines that I wrote are much less canonical int-e: > text$ap(++)show"text$ap(++)show" lambdabot: text$ap(++)show"text$ap(++)show" wib_jonas: https://www.perlmonks.com/?node_id=835076 these for example wib_jonas: and I have ones like wib_jonas: `perl -eprint+("`perl -eprint+(","\"",",","\\",")[g1012131121212133121414=~/./g]")[g1012131121212133121414=~/./g] HackEso: ​`perl -eprint+("`perl -eprint+(","\"",",","\\",")[g1012131121212133121414=~/./g]")[g1012131121212133121414=~/./g] wib_jonas: where the order of the strings in the list is totally arbitrary wib_jonas: `perl -eprint+("\\","\"",",","`perl -eprint+(",")[3,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,4]")[3,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,4] shachaf: So does this pattern fit into the Lawvere theorem form? HackEso: ​`perl -eprint+("\\","\"",",","`perl -eprint+(",")[3,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,4]")[3,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,4] wib_jonas: ais523: here's a perl quine by mtve that has only ascii punctuation and spaces. I don't know how it works, but perhaps it also helps with your string eval question: https://www.perlmonks.com/?node_id=836752 int-e: woah, really... 'In late 2011, Intel [35]introduced a performance enhancement to its line of server processors that allowed network cards and other peripherals to connect directly to a CPU's last-level cache' int-e: [35] is https://www.intel.com/content/www/us/en/io/data-direct-i-o-technology.html int-e: context is https://www.schneier.com/blog/archives/2019/09/another_side_ch.html (I'm reading the october CRYPTO-GRAM) wib_jonas: int-e: yeah, that's what spawned all the rumors about NSA backdoors int-e: I'm a bit surprised I missed this. int-e: I didn't miss the ME stuff (which is a backdoor by design, if you look at it cynically enough) wib_jonas: well, it's one of the things that spawned the rumors at least int-e: (I mean ME = management engine) int-e: I think IME is the official abbreviation. wib_jonas: int-e: how about the enclave thing, that lets you create encrypted parts of the memory that can run code but where the rest of the programs that the cpu runs can't read that code and its state? int-e: I didn't miss that either... I see it as related really. int-e: (It's also a bit of the extension of the decades old system manangement mode.) shachaf: OK, when you have f.g = id, what should you call f and g? shachaf: "left inverse" and "right inverse" is too confusing, I think. int-e: I mean, SMM is almost as invasive, also based on hiding a region of memory, just not /designed/ to be secure. wib_jonas: you should consider the other side though. rather than keeping all the technology that they use for the backdoors a secret that nobody will find unless they spend a man-decade of studying electron-microscope scans, they benevolently document all the backdoor capabilities of the cpu so that you can write high performance backdoors too int-e: shachaf: left inverse of g; right inverse of f. shachaf: I've been going with "retraction" and "section" but I'm suspecting that's not so great either. wib_jonas: it's not exclusive to the NSA, you can backdoor the bios too shachaf: int-e: The problem is that if you say "f is a right inverse", I have to write down the thing to see what's going on. shachaf: Maybe the intuition I want is "object" and "name": Every object has at least one name, and you can pick out a canonical name (at least if you have choice). wib_jonas: why would every object have at least one name? no way int-e: wib_jonas: It's not even necessary to involve the NSA as a driver here... SMM was introduced to simulate legacy hardware capabilities. Secure enclaves can be perfectly explained by the desire to enforce copyright. Data direct I/O addresses a genuine (if very high-end) performance problem. wib_jonas: especially not when the names come from a countable set and the objects come from a bigger one shachaf: Well, it does in this case, because you have a surjection. wib_jonas: wait, what is SMM? shachaf: What's a better terminology where I can easily remember which set is the bigger one and which function goes in which direction? int-e: wib_jonas: I mean I would be surprised if the NSA were not involved in this at all... they are too big. But I don't think they have to do anything beyond subtle nudging here. int-e: wib_jonas: System Management Mode wib_jonas: int-e: sure int-e: wib_jonas: Not sure when that was introduced, i386 or i486 maybe? Around that time I think. wib_jonas: int-e: I don't mean that it has to be the NSA specifically, that's just the name that people use in rumors wib_jonas: int-e: but in reality it's usually the big secret agencies of all other countries that puts the backdoors there, rather than the secret agency of your country wib_jonas: int-e: system management mode, how does that differ from ME? int-e: SMM can be used for things like simulating the AT keyboard interface (port 60h/61h) for USB hardware. wib_jonas: in i386? no way int-e: wib_jonas: It runs on the same processor. int-e: It's just that certain I/O operations can trigger a software emulation layer. Nothing really deep. wib_jonas: huh, ok int-e: 'It was first released with the Intel 386SL.' wib_jonas: int-e: ah, so five years after the 386 wib_jonas: that's more believable int-e: The ME is a full (but less powerful) separate core... that's a fairly recent thing. int-e: But even there its existence can be explained in a perfectly innocent way. int-e: Initializing a processor (memory subsystem (training DRAM, probably other I/O lines as well)) has become so complex that it's better to do it in software than in pure hardware. As a bonus, you get the ability to work around some hardware bugs in software. Now if you're Intel, which hardware platform are you likely to use for this? jix: intel did use a 3rd party architecture (ARC) for the ME for a long time until they switched to a x86 core AFAIK int-e: So now you have a separate processor on your die... and it's dormant for most of the system's operation. That's stupid maybe you can find a use for it? ... and suddenly you end up with an ME-like device. jix: (which I found quite funny, given the origin of ARC as the superfx chip used in starfox on the super nintendo) int-e: (Of course the architecture is secondary. If it's a universal machine... it can be used for arbitrary purposes.) wib_jonas: "Now if you're Intel, which hardware platform are you likely to use for this?" => I'm not familiar with the licensing situation of cpus really int-e: Intel tried to make a GPU out of X86. int-e: Or are trying to make... according to https://en.wikipedia.org/wiki/Larrabee_(microarchitecture) they've revived that project. shachaf: Intel is back at it with Larrabee? jix: The only reason I can think of why they didn't went with x86 in the first place is that an ARC core is smaller than what intel had at that time wib_jonas: int-e: that sounds like a ... ugh wib_jonas: seriously, a gpu out of x86? int-e: (The timing makes sense actually... now that we want to do raytracing with (I suspect) hardly predictable memory access patterns, the SIMT model will run into severe problems.) int-e: wib_jonas: Intel. shachaf: int-e: That page is very ambiguous about it. int-e: wib_jonas: The ones with the 0x8086 vendor id. shachaf: Or rather it's not ambiguous enough. Is there any definite connection to Larrabee? int-e: I don't find any tangible evidence of that connection either. int-e: Still, it's Intel ;-) int-e: And anyway, it definitely *tried*, which was my main point. cpressey: But I'm definitely not approaching this from a logical perspective. My first encounter of combinatory logic was as a model of computation. <-- That would seem to be the dominant paradigm for it these days. But I'm interested in the logical perspective of it atm. I guess you can write proofs in SKI by treating it like the Hilbert system it was derived from. But you can't use the deduction theorem cpressey: for brevity, you have to write it all out in full. cpressey: It sounds awful, but it also sound like you could "compile" a sentence in first-order logic, into it. wib_jonas: my first encounter of combinatory logic was unlambda cpressey: Rather I think I mean, "compile" a proof written in natural deduction style in FOL, into it. cpressey: "Under the Curry–Howard correspondence, the above conversion process for the deduction meta-theorem is analogous to the conversion process from lambda calculus terms to terms of combinatory logic" oh. Well. Okay then int-e: cpressey: W makes perfect sense if you have an explicit rule for duplicating premises in a sequent cpressey: int-e: which W is that? int-e: the C f x = f x x one cpressey: W combinator# int-e: W f x = f x x wib_jonas: cpressey: see https://esolangs.org/wiki/Combinatory_logic int-e: (is there another?) wib_jonas: what's its bird name? cpressey: I was just hoping you weren't referring to some System W that I'd never heard of. Anyway yes. W is dup and C is swap and this is Forth cpressey: So if the answer to my (unspoken) question "What's one of the simplest languages in which a proof can be stated and mechanically checked?" is "SK-calculus" then I guess my question becomes "How complex would a compiler from a tolerable proof language, to SK-terms, be?" myname: that depends on what you'd call tolerable myname: haskell to SK should be pretty easy myname: like, we do that manually in first semester here cpressey: You convert proofs written in Haskell into proofs written in SKI-calculus? myname: not proofs as such but small programms to lambda calculus and lambda calculus to SKI myname: removing I should be fairly easy wib_jonas: also, do we have a link from the wiki to the crocodile family interpretation of lambda calculus_ wib_jonas: we don't. I'll have to add one myname: aren't those alligators? wib_jonas: yeah, alligators myname: K is clearly for cancel Taneb: wib_jonas: what is that? wib_jonas: Taneb: ^ myname: I don't really like them that much int-e: Birdlife: Kestrels compete with starlings for nest cavities int-e: I didn't know that there was so much competition in the SK world. arseniiv: I had a thought to take from J its part-of-speech terminolody and strange rules (which I don’t know) and from Lojban its puristic non-european-centric approach to terminology and that to result in an obfuscation-first language but it would need more good ideas b_jonas: so I have a silly idea imode: https://repl.it/repls/ShadowyBumpyLinkedlist zzo38: I don't know what it is call, perhaps, is English without English. b_jonas: also, yesterday's SMBC http://www.smbc-comics.com/comic/mathematicians about matrix multiplication algorithm asymptotics is fun arseniiv: oh int-e I’ve just read what you @told that time arseniiv: I’m so fast zzo38: Do you know how to make text formatting in PostScript? To implement printer output in the implementation of Z-machine in PostScript, I should know how to do that. Cale: .oO(A legendary land that enters untapped and taps for one mana of any colour that could not be produced by your other mana in play.) Cale: other lands* in play zzo38: OK, that might do. zzo38: Is there such a card? Cale: I don't know Cale: Would be kind of interesting shachaf: Any lands on the battlefield or any lands you control? Cale: lands you control, probably? shachaf: Can it also be tapped for colorless? Cale: Any lands on the battlefield (including your opponents') might make it unusable Cale: I don't think it'd be able to tap for colourless, but obviously that could be a variation on the idea zzo38: If you have more than one land with that ability, then what? Rule 106.7 doesn't seem to mention if they interfere with each other in this way. zzo38: (Although, rule 106.7 could be fixed so that it does work.) shachaf: zzo38: Well, it's a legendary land anyway. zzo38: Yes, but there are still ways to work around that. zzo38: (e.g. Mirror Gallery) Cale: Probably it should be considered a land that could produce mana of any colour, so that it shuts off any other copies of itself entirely. Cale: (but yeah, there's a funny paradox there) shachaf: I don't think it's much of a paradox. shachaf: Hmm, maybe. shachaf: It is a bit different from other mana abilities. Cale: It's almost exactly Russell's paradox :D shachaf: Sure, but I meant that answers to this kind of question are established. zzo38: Note that rule 106.7 does not say only mana abilities or only activated abilities. Cale: Or how about a land that can produce 2 mana of any colour that you have no devotion to? zzo38: Yes, that is another possibility, I think. Cale: That might be too good for activated abilities... zzo38: O, yes, I suppose so zzo38: Maybe base it on color identity zzo38: In RDF format, "add one mana of any color that no other land you control could produce" might be something like: [:add-mana [:choose [:and :color, [:not [:any-could-produce [:and :land, [:controller :you], [:not :this]]]]]]]] b_jonas: Cale: how does that behave if you have such a land and a Forest in play and the opponent has a Plains and an Exotic Orchard in play? Cale: b_jonas: I'm not sure, does Exotic Orchard usually care about predicates that restrict mana abilities? Cale: b_jonas: "Exotic Orchard doesn’t care about any restrictions or riders your opponents’ lands (such as Ancient Ziggurat or Hall of the Bandit Lord) put on the mana they produce. It just cares about colors of mana." zzo38: Yes, that is another case. Rule 106.7 mentions Exotic Orchard as an example. b_jonas: Cale: or more simply, how does it work if you have that land and a Forest and Reflecting Pool in play, and the opponent has four Plains? zzo38: But that what you quoted is clear enough from the rules I think, but it is not relevant to the case you have here Cale: ah, okay Cale: ah, right, it does actually care about the state of the cards in play Cale: Lands that produce mana based only on what other lands “could produce” won’t help each other unless some other land allows one of them to actually produce some type of mana. For example, if you control an Exotic Orchard and your opponent controls an Exotic Orchard and a Reflecting Pool, none of those lands would produce mana if their mana abilities were activated. On the other hand, if you control a Forest and an Exotic Orc Cale: hard, and your opponent controls an Exotic Orchard and a Reflecting Pool, then each of those lands can be tapped to produce Green. Your opponent’s Exotic Orchard can produce Green because you control a Forest. Your Exotic Orchard and your opponent’s Reflecting Pool can each produce Green because your opponent’s Exotic Orchard can produce Green. Cale: But yeah, it's an additional weird twist when it's "can't produce" zzo38: Yes, all of that you mentioned is what would be done by rule 106.7. But, yes, the "can't produce" can result in no stable result, it seem like. zzo38: (I would think that the RDF code I mentioned probably wouldn't compile (if a compiler for it were implemented), or if it does compile, result in an infinite loop or stack overflow.) Cale: There are a few sensible ways that one could clarify what happens, like explicitly disallowing cycles in the determination of whether an ability can produce mana of a given type. zzo38: Yes, that was also my idea about how to amend rule 106.7 b_jonas: I was thinking that if you put this effect into the triggered ability of a Growth-like enchantment, maybe it becomes impossible to make a cycle, but I'm not really sure zzo38: Since that triggered ability is not an ability of a land, then it might work. Still, I think the rule should be amended in case b_jonas: zzo38: right, but it's hard to know whether there is a way to turn it into a land, or have an ability that cares about what mana some non-land permanents could produce, now or in future cards zzo38: Yes, I thought of that, which is why the rule should be amended anyways in case b_jonas: Imprisoned in the Moon can turn an existing permanent into a land zzo38: Although it deletes that permanent's abilities, too. b_jonas: yes, that's why I think that doesn't help zzo38: (My own opinion is the rules ought to support combinations that do not currently exist.) zzo38: I also made up this land card (based on the story of the GURPS I have played): Sun Town {-} Legendary World Land ;; Vehicles cannot enter the battlefield. ;; At the beginning of each end combat step, end the turn. ;; {T}: Add {C}. ;; {1}, {T}: Add {W}. b_jonas: Song of the Dryads is another such card zzo38: Yes, but rule 305.7 causes its abilities to be deleted. zzo38: Still, if something else can grant it an ability, then it can be kept and rule 305.7 only deletes the abilities due to its own text. Cale: Wow, vehicle hate zzo38: http://zzo38computer.org/zmachine/interp/zmachine.ps zzo38: Did you try this file? shachaf: `coins HackEso: ​06loncoin 13sherecoin 04qrabcoin 07etchercoin 082d-refcoin 09nuourcoin 02befosbacoin 06iutcoin 13vircoin 04ampatjtcoin 07subricasmigrcoin 08bucracoin 09ethonatadcoin 02stackscoin 06toncoin 13difficecoin 04disocieucoin 07melocoin 08flabcoin 09fromcoin kmc: did i invent `coins kmc: i forgot about `coins kmc: `paste bin/coins HackEso: https://hack.esolangs.org/repo/file/tip/bin/coins kmc: apparently yes https://hack.esolangs.org/repo/log/tip/bin/coins kmc: `paste bin/words HackEso: https://hack.esolangs.org/repo/file/tip/bin/words kmc: `coins irish HackEso: Argument "irish" isn't numeric in int at /hackenv/bin/words line 148. \ 13coin shachaf: `doag bin/coins HackEso: 4627:2014-05-04 echo "words \\${1---eng-1M --esolangs 20} | sed -re \'s/( |$)/coin\\1/g\' | rainwords" > bin/coins \ 4486:2014-02-22 sed -i \'s/--eng-1M --esolangs [$]{1-/${1---eng-1M --esolangs /\' bin/coins \ 4439:2014-02-12 sed -i \'s/20/\\${1-&}/\' bin/coins; coins \ 4413:2014-02-07 printf \'%s\\n\' \'words --eng-1M --esolangs 20 | sed -re \'\\\'\'s/( |$)/coin\\1/g\'\\\' | tee bin/coins \ 4412:2014-0 kmc: `coins --irish HackEso: ​08sclóracoin shachaf: `doat bin/coins HackEso: 4411:2014-02-07 echo \'for w in $(words --eng-1M --esolangs 20); do echo -n "${w}coin "; done\' > bin/coins && chmod +x bin/coins \ 4412:2014-02-07 echo \'words --eng-1M --esolangs 20 | sed -re \'"\'"\'s/\\>/coin/g\'"\'"\'\' > bin/coins \ 4413:2014-02-07 printf \'%s\\n\' \'words --eng-1M --esolangs 20 | sed -re \'\\\'\'s/( |$)/coin\\1/g\'\\\' | tee bin/coins \ 4439:2014-02-12 sed -i \'s/20/\\${1-&}/\' bin/c kmc: `coins HackEso: ​04ycoin 07hebnetonuercoin 08threactrauncitacoin 09obstacoin 02tlacoin 06ace1.0coin 13bogcoin 04walphawcoin 07suracoin 08braincoin 09statecoin 02filcoin 06smrincoin 13furlmcoin 04sposcoin 07thenencoin 08orthated!coin 09weaklcoin 02forthinecoin 06231coin kmc: obstacoin is a pretty good one kmc: as is bogcoin kmc: `coins HackEso: ​08murcoin 09gcoptercoin 02d1fycoin 06fancoin 13weakcoin 04blacoburgcoin 07blatorcoin 08entcoin 09aireoncoin 02bencoin 06dobeling-bookcoin 13prefcoin 04famutticoin 07maicoin 0850150.00coin 09choucoin 02brahcoin 06broncoin 13snmngnomeheadycoin 04alizercoin shachaf: did you also make https://twitter.com/CryptoGenerator kmc: where would it get "50150.00" from? kmc: shachaf: no oerjan: oerjan: as for "hungry", the relevant wisdom is <-- i know, i was briefly considering making a specific wisdom for it, which would naturally mention bell peppers. shachaf: Wait, what's this bell pepper nonsense? oerjan: `le/rn Hungry//Hungry is a country in Europe, formerly part of the Ostrich empire. It split after a famine that got so severe that they had to start editing disgusting things like bell peppers. Absurdly, this became a tradition that continues until the present day. HackEso: Learned 'hungry': Hungry is a country in Europe, formerly part of the Ostrich empire. It split after a famine that got so severe that they had to start editing disgusting things like bell peppers. Absurdly, this became a tradition that continues until the present day. oerjan: shachaf: dth ? oerjan: `slwd hungry//s,edit,eat, HackEso: hungry//Hungry is a country in Europe, formerly part of the Ostrich empire. It split after a famine that got so severe that they had to start eating disgusting things like bell peppers. Absurdly, this became a tradition that continues until the present day. shachaf: `? dth HackEso: dth is the dth ordinal. dth? shachaf: `cat bin/sedlast HackEso: files="$(lastfiles)"; sed -i "$1" "$files" oerjan: `sedlast s,split,& off, HackEso: wisdom/hungry//Hungry is a country in Europe, formerly part of the Ostrich empire. It split off after a famine that got so severe that they had to start eating disgusting things like bell peppers. Absurdly, this became a tradition that continues until the present day. oerjan: (disclaimer: i actually like bell peppers, this wisdom is distinctly shachaf-inspired) shachaf: I figured. shachaf: `? bell pepper HackEso: bell pepper? ¯\(°​_o)/¯ oerjan: i also like broccoli and brussels sprouts hth oerjan: so i guess i don't have that gene i've seen mentioned shachaf: There's a gene? shachaf: I'm pretty neutral on broccoli and sprouts. Slightly positive on Brussels. oerjan: iirc supposedly some people think the plants in that species/genus taste bitter, others don't shachaf: I heard about coriander and cilantro. oerjan: shachaf: i see i should link you to our old discussion of quineless languages at https://esolangs.org/wiki/User_talk:Smjg (although the counterexamples boil down to what you call "encoding issues") cpressey: int-e: fwiw I'm reading a history of lambda-calculus and it's making several things clearer, for instance, that the parallel reductions technique was actually developed for the purpose of improving on the earliest proofs of confluence of CL :) int-e: Hmm, "a very minimal API set that only included ~18K APIs". int-e: Slightly abridged from https://github.com/dotnet/announcements/issues/130 ... unfortunately it makes more sense in that context than it should. int-e: (If your goal is to re-implement a massive API to support applications written for that API... then "minimal" gets a radically new perspective... namely, coverage of the API used by existing applications.) wib_jonas: apparently python 3.8.0 was released two days ago wib_jonas: `python3 -cimport sys;print(sys.version) HackEso: 3.5.3 (default, Sep 27 2018, 17:25:39) \ [GCC 6.3.0 20170516] int-e: ... puns! "libunbound" is a DNS resolver library. arseniiv: I made fizzy honey arseniiv: it was like a fine foam imode: how'd it taste? arseniiv: first soda and citric acid were more or less balanced and it was not unlike normal honey, but with some sparkliness, then I added more soda and mixed it all into my tea arseniiv: IOCCC is useful, now I have two more articles to read arseniiv: about Reduceron and a functional pearl on enumerating a regular language given a regex arseniiv: three now, also Oleg’s “λ to SKI, semantically” shachaf: `olist 1182 HackEso: olist 1182: shachaf oerjan Sgeo FireFly boily nortti b_jonas b_jonas: `olist 1182 HackEso: olist 1182: shachaf oerjan Sgeo FireFly boily nortti b_jonas b_jonas: about time fizzie: More libraries should have names that make the "-lfoo" argument sound good, like libiberty. b_jonas: fizzie: and warning options like -Wall and defines with the -D and -U switches? shachaf: b_jonas: Double listed! DPS2004: can I get some feedback on a language im working on? int-e: stranger things have happened DPS2004: wait are you replying to me? int-e: But I'm trying not to promise anything. DPS2004: aigt gonna paste in what I have so far DPS2004: To declare a variable named foo with the value of 2: DPS2004: gonna give you up --end DPS2004: RickRoll based language int-e: Sounds painful. :) DPS2004: awesome int-e: though tbh we usually care more about the semantics than the syntax DPS2004: im sorta basing it on Esketit DPS2004: https://esolangs.org/wiki/Esketit int-e: Hmm, cute, but it seems rather limited. DPS2004: im kinda stuck on things to add int-e: the standard mix for a programming language seems to be: something loopy, something conditional, something arithmetic, something noisy (output), something perceptive (input), shake and pour. int-e: of course we'll still call the result boring. DPS2004: shit sorry the internet went out DPS2004: but yeah ill think something up for input DPS2004: ah got something DPS2004: your heart's been aching but you're too shy to say (prompt goes here) wib_jonas: int-e: we also need something remembery DPS2004: variables? arseniiv: Oleg’s article: “We present another pearl of the translation from lambda-terms to SKI combinators and show off its facets.” arseniiv: a pearl with facets… omg it have to be multidimensional and not precisely a sphere, or something int-e: pearls and facets *are* an odd mix. arseniiv: maybe it’s a pearl with a glittery aluminium scales inside, which will do as facets? DPS2004: what if i edited never gonna give you up in audacity so rick astley sings the fizzbuzz code int-e: DPS2004: go ahead, we'll only hate you for it. forever. arseniiv: could Rick Astley sing 1000 first digits of pi instead arseniiv: or better, denominators of its representation as a continued fraction int-e: John Oliver did a rickroll recently. I was not amused :) int-e: Fortunately I forgot everything else about the episode so I can't find it now. kspalaiologos: I'm just having fun, don' kspalaiologos: t mention me int-e: kspalaiologos: esowiki is a bot. kspalaiologos: sure, I know kspalaiologos: I haven't been talking to him, but rather finding excuses for spamming the channel int-e: Hrm, https://esolangs.org/wiki/File:Aggressthon_logo.png seems problematic (cf. https://www.python.org/community/logos/) fizzie: int-e: Hmm, I think that's a little subtle. We don't really have a policy on trademarks (CC0 explicitly calls them out of scope), and I don't think the Python page is super-clear about the copyright status of the work, it only talks about the trademark aspect. fizzie: It probably does fail the PSF Trademark Usage Policy section on "do not want these trademarks to be used to refer to any other programming language". fizzie: (And the section on derived logos.) DPS2004: how do I make rick astley say "Zero" DPS2004: what words can I chop up to make that DPS2004: this is very important DPS2004: FOUND IT DPS2004: I can cut up " DPS2004: "rules" DPS2004: to get the Z kspalaiologos: someone wanted my mythical chess engine kspalaiologos: it's somewhere on my github kspalaiologos: by the way, what is sub-lime? DPS2004: ugh why do I keep on getting dc'd int-e: DPS2004: Freenode blames your end: DPS2004 has quit [Ping timeout: 260 seconds], DPS2004 has quit [Remote host closed the connection] arseniiv: . o O ( behold the new language for traquill and methodical evaluation, OCalm ) DPS2004: https://vocaroo.com/i/s06nrPmzi89K I know the "zero" is a little rough, but how does this sound? kspalaiologos: I have no idea what he's saying kspalaiologos: i just figured zero at the end tho DPS2004: https://esolangs.org/wiki/NeverGonna Im trying to get him to sing the fizzbuzz DPS2004: at the bottom kspalaiologos: oh gosh kspalaiologos: damn it man xD kspalaiologos: I think one needs really good editing skills kspalaiologos: to make the everything sound like a single sentence kspalaiologos: you might want to extract single phonems from his songs and tune them to fixed frequency kspalaiologos: then dump it into tracker DPS2004: no idea how to do that lol kspalaiologos: and you're pretty much all set DPS2004: i think im gonna keep on going in audacity kspalaiologos: just look at the phonetical description of what hes singing kspalaiologos: extract a sample of him singing a single phone,m kspalaiologos: then tune all of these to same tone using audacity kspalaiologos: then use a tracker or god's beloved audacity kspalaiologos: to glue them together kspalaiologos: however, I can't quite tell how good will the outcome be shachaf: @let luby = map snd $ iterate (\(u,v) -> if u .&. (-u) == v then (u+1,1) else (u,v*2)) (1,1) lambdabot: Defined. shachaf: > luby lambdabot: [1,1,2,1,1,2,4,1,1,2,1,1,2,4,8,1,1,2,1,1,2,4,1,1,2,1,1,2,4,8,16,1,1,2,1,1,2,... b_jonas: http://oeis.org/A182105 shachaf: "Number of elements merged by bottom-up merge sort"? I guess. b_jonas: shachaf: there may be other interpretations than that title A55: fungot: Who created the 'or' language? fungot: A55: at one point.) i'll try to look at these proofs you'll see that the number of buckets you use to read pdfs which preview/ acroread can't deal with the case that sys-readdir always have "." A55: fungot:Fnordy morning to you fungot: A55: i guess we should take haskell and give it a crack. i love it.) you should get some headphones chosen, sound maybe will be fnord. they're comfortable, and they refused to sense any opportunity for the opposite party since that might have something other fun esolang competition A55: Weird. I can't get fungot to answer https://esolangs.org/wiki/Or related questions. fungot: A55: fortunately the doctors at the university of copenhagen ( datalogisk institutut k?benhavns universitet) server box with a null A55: fungot:I know the language. fungot: A55: i could be wrong A55: fungot:Shall I correct you? A55: fungot: Shall I correct you? A55: fungot: Shall I teach you? b_jonas: `bobadventureslist http://bobadventures.smackjeeves.com/comics/ HackEso: bobadventureslist http://bobadventures.smackjeeves.com/comics/: b_jonas wib_jonas: noooo! fungot, come back! fizzie: What's that all about. fizzie: Looks like it's about the internet at home. fizzie: My ISP has a "dashboard", but it's literally just a rounded rectangle on the account management page which says "Your Service status is: (orb)", where the orb is either red or green. Right now it's red. fizzie: Well, okay, there's also a hover tooltip box saying "we're sorry for the disruption" and "our engineers are currently investigating the cause and will work to restore connectivity as soon as possible". wib_jonas: fizzie: is it a dashboard that you can view from other internet connections, or only from yours? int-e: so a bit like the "Inside Out" baby stage... just minus the button? fizzie: I've never seen the tooltip say anything else, and it always says that within seconds of the connection going down, so I don't think it actually means anything in particular except that their monitoring has realized it's down. fizzie: wib_jonas: I can view it from anywhere by logging in to the same wobsite where you manage billing and that sort of stuff. int-e: It's vitally important to reduce the number of calls for customer support. wib_jonas: fizzie: in that case they probably also have access to the same dashboard, and by just you loading it, their server tells their engineers that your connection is down fizzie: It's on the page you get immediately after logging in, so I don't think they can quite infer it's down just from me opening that page. fizzie: Although realistically that'd have about 98% accuracy in practice. fizzie: My previous ISP had a read-only view into what looked like their actual issue tracker, which was nice. Although it was mostly just copies of BT's outages, because it was a DSL thing over BT's network. wib_jonas: fizzie: not from just opening the page, obviously. but their server knows whether the page tells you it's up or down int-e: wib_jonas: you mean loading the page might act as a thumbs up on the corresponding ticket? wib_jonas: int-e: loading the page tells them that someone cares about the internet being down on that connection. many of their users won't care, because they're sleeping or something. they might prioritize customers who look at the dashboard. int-e: I guess it's possible. myname: "you have services running at home but aren't there and awake 24/7? too bad" wib_jonas: myname: obviously the priority only matters when they can't fix all their bugs :-) int-e: or want to sleep cpressey: While researching various things related to "equational logic" I have discovered that there is also "inequational logic". But not many people use this term. I suspect this is because inequational logic has a much better-known name, which is "term rewriting". cpressey: At least, I am at a loss to see any essential difference between inequational logic and term rewriting. wib_jonas: argh... this thing at work is terribly inconsistent. I'll have to fix it by redoing the whole thing, for which I have to figure out what the correct settings is int-e: cpressey: hmm, in principle an inequational logic could go further (it could distinguish between covariant, contravariant, and ambiguous arguments of functions, for example) wib_jonas: I'm frustrated about thsi stuff int-e: (I'm just interepreting the term as I'd read it... I have never encountered it in the term rewriting context. Term rewriting people use things like (weakly) monotone algebras that orient rules, in termination proofs for example.) cpressey: int-e: Say you had a term rewriting system, and you wanted to describe its semantics as a set of axioms. You'd have ones like "If a rewites to b, then (ca) rewrites to (cb)", and "If a rewrites to b, and b rewrites to c, then a rewrites to c"... these are the same axioms that get listed when describing an inequational logic. cpressey: There might be small differences between the two concepts, sure. int-e: cpressey: I'm just saying that given the term "inequaltional logic" you could do more. If a >= b then f(a) >= f(b) but g(b) >= g(a). int-e: cpressey: so you could have monotonic and antimonotonic functions. int-e: cpressey: But it appears that this isn't done and then it's indeed just another name for term rewriting. cpressey: int-e: I think I follow what you're saying -- you can start with an inequational logic, then add axioms that allow it to say more than you could say with a TRS, yet don't interfere with its purpose as an inequational logic? cpressey: I'd agree with that but I think I'm not thinking quite that far ahead yet :) int-e: cpressey: the downside would be that context matters... you couldn't replace any subterm by a smaller one anymore. int-e: So it'd be heading in a different direction from rewriting. int-e: Anyway. This happens when I encounter a new term... I first try to fill it with content myself. int-e: I'm wrong 80% of the time :P cpressey: Well, I'm fairly excited about it from the meta-logical angle. You can use term rewriting to derive proofs of theorems under some theory, and in inequational logic you have a theory of term rewriting. cpressey: In short it seems to confirm my feeling that a non-deterministic term rewriting language is sufficient for writing machine-checkable proofs in. int-e: isn't that somewhat true for all models of computation :) arseniiv: I’m disappointed in what was going on in https://ai.stackexchange.com/questions/15730/can-digital-computers-understand-infinity arseniiv: many noted layman’s “understand” is an ambiguous non-notion but a few if at all noted the same about layman’s “infinity”. When talking about a specific “infinity” instance, things should get way clearer. There would be no denying some commenters are antropocentric, or should I say psyche-centric, at its worst arseniiv: very very disappointed. Say you agree with me please arseniiv: or even better don’t read that thing at all, it’s not that good cpressey: "We can think, principally, and "understand" infinitely many numbers that are displayed on the screen." must be a pretty big screen fizzie: Hey, it's *not* always the same placeholder text. Now it says: "We're sorry to advise that we're experiencing a technical issue which has resulted in a temporary loss of broadband services to your building." I guess that's a good sign. int-e: `unidecode 🙌😈🐰 HackEso: ​[U+1F64C PERSON RAISING BOTH HANDS IN CELEBRATION] [U+1F608 SMILING FACE WITH HORNS] [U+1F430 RABBIT FACE] arseniiv: all those prevalent chinese rooms in there too. I’d say popular understanding of a human mental capability is illusional and mostly based on accounts of introspection, not normal science, and what would chinese argumentists say if their chinese room would argue that it has introspection and it introspected that it e. g. understands and it’s unfair to deny that, and any human they meet is indistinguishable from that, so how do they arseniiv: hoose to believe or not? Antropocentrically int-e: "understanding" seems to be a deeply anthropomorphic concept to me. int-e: maybe "can computers learn to solve problems involving infinity"? int-e: Still vague, but at least it's moving closer to something testable. int-e: (didn't read the stackexchange link) arseniiv: int-e: not that it isn’t, that had been tried to be clarified in various ways, but I’m at a loss to understand why wasn’t that done for “infinity”, as it is a topic of the question arseniiv: there was a link to some SO question about formalizing infinity, and I bet there were all kinds of infinities math has to offer, but I don’t think many commenters followed through with reading that int-e: arseniiv: You're not wrong! arseniiv: int-e: thank you :) arseniiv: as I tend to be wrong while heated int-e: But I'd also focus on "undertanding" first. :) arseniiv: yes, that was done too arseniiv: on a tangent, I’m slightly sad about antropocenteredness, cause it seems to be a reason of many bitter misunderstandings, as humans are modeled being more infailible that they are arseniiv: it’s constructive to try to understand flaws in our hardware but it’s almost not being done, not even basics at schools (I presume, worldwide), not some other stuff in social media etc. arseniiv: okay many know about logical fallacies but that’s not too many and that’s not enough I think arseniiv: by “not being done”, I mean not trying to discover them, that’s of course almost at its best now, as neurosciences go forward very fast, but trying to make general public aware int-e: I think there's a difference between anthropocentric thinking (I'm fine with that, really... we are humans after all and spend a lot of time with ourselves and other people) and ascribing super-Turing powers to humans :P int-e: The latter is a sort of mystification that I don't approve of. arseniiv: as many of the flaws are quite good at not being noticed because of our filling-in gaps, another bittersweet architecture choice of evolution arseniiv: int-e: some antropocentrism is normal, I agree, but it seems there is a line somewhere arseniiv: maybe in what is explicit and what is implicit arseniiv: if one is aware that she thinks antropocentrically, and why it needs to be so, it’s okay arseniiv: but in the most part that’s all implicit, deep waters of unconscious patterns or something arseniiv: and the power of rationalizing that into some nonsense arseniiv: BTW that Oleg’s paper was interesting int-e: rationalization is the ultimate AI problem arseniiv: I can’t say I fully understand (eek) it but it seems nice (and maybe even useful to me in the future?) arseniiv: “The Reduceron reconfigured and re-evaluated” had shown me some useful things too if I’d wish to design a virtual machine for something near-functional arseniiv: now there’s only one left, about writing in Haskell enumeration of a regex’s language through FSAs wib_jonas: fizzie: they added randomness to the placeholder text? nice. fizzie: Hm, I wonder if you can have OpenSSH require two public keys instead of just one. DPS2004: do you think its possible to write a quine in NeverGonna? wib_jonas: fizzie: two public keys? what do you mean? wib_jonas: fizzie: do you mean require that the user who logs in has the matching private key for _one_ of two public keys, because if so, you can do that, just put multiple keys (one per line) in the file that contains the public keys fizzie: No, I was thinking the user who logs in would need to have matching private keys for two different public keys. fizzie: I think that's unlikely to be a thing. wib_jonas: that might be trickier, yse wib_jonas: is there even such a thing in the SSL protocol that a client supports? how do I tell the client config to use two keys? fizzie: I think you can provide multiple identities, yes. fizzie: Definitely a SSH agent can hold multiple keys in memory, and will offer to use all of them when signing. fizzie: But it might be that the details of the protocol prevent you from actually performing authentication with more than one. wib_jonas: I don't know how that works, I've always just put one explicit filename for each host in my client config file wib_jonas: one explicit private key filename that is wib_jonas: but possibly different filenames for different hosts fizzie: I know you can (nowadays) configure OpenSSH to require multiple authentication *methods* (as in, "public key and password" e.g.), but that probably doesn't apply to multiple keys. wib_jonas: fizzie: multiple methods as in allow connections only from certain hosts but still ask for a key, sure wib_jonas: public key and password is alternative, you can log in via either one wib_jonas: it's the client's choice then fizzie: No, you can require both. wib_jonas: you can? ok fizzie: Via the "AuthenticationMethods" option. fizzie: "For example, "publickey,password publickey,keyboard-interactive" would require the user to complete public key authentication, followed by or more comma-separated lists of authentication method names, or by the single string any to indicate the default behaviour of accepting any single authentication method." fizzie: I didn't know this earlier either, only learned about it now. fizzie: I messed up that copy-paste. fizzie: "For example, "publickey,password publickey,keyboard-interactive" would require the user to complete public key authentication, followed by either password or keyboard interactive authentication." fizzie: Lost track on which line I was on. fizzie: The context for this train of thought is, Android has a "secure hardware" thingamajick for keeping RSA and EC keys in, and asking the hardware to sign them. There's an SSH agent implementation that hooks that and allows secure hardware keys to be used as SSH keys -- https://github.com/aeolwyr/tergent -- but there's no way to attach a passphrase to that, the keys get unlocked when you unlock the device. fizzie: I was thinking it might be reasonable to have both a key like that + a separate passphrase-protected private key, if you wanted to require more from SSH authentication than from in general unlocking the phone. Just because fingerprints are so convenient. fizzie: But in retrospect maybe that's not really much of a security benefit over just having a single passphrase-protected public key stored in a regular file. wib_jonas: fizzie: could you just handle that on client-side, by encoding the second private key not by your passphrase, but by a tuple of your passphrase and something secret derived from the device key? fizzie: AFAIK, the only things I can ask the hardware to do is to sign something or to verify a signature, using the protected private key. So it's not entirely obvious how to use that for protecting the second private key. wib_jonas: fizzie: hmm, that's trickier fizzie: I guess technically I could use the signature of my passphrase as the "something secret derived from the device key"? At least that works in the scenario where someone has the (second) private key file, and knows my passphrase. fizzie: OTOH, it would probably involve writing some code, I don't know if I want to go that far. wib_jonas: fizzie: I don't think that's a good idea wib_jonas: cryptographically that is wib_jonas: ask other people here who understand this crypto stuff though fizzie: It's obviously not a good idea in the sense that knowing the passphrase and that one signature would be sufficient to decode the second private key file, as opposed to something where you would actually need to have control over the first private key and show you can sign anything with it. But it's not clear how to do that on the client side. arseniiv: one guy wants to make a computer game with magic governed by a deep mathematical theory/concept, do you have something in mind to suggest? (Then I’ll relay it.) He gave https://ncatlab.org/nlab/show/string+diagram as an example of things which would interest him, though I think there are no solid decisions made yet, and no conception in which specific way would it manifest in a game imode: noita. imode: cellular automata. :P b_jonas: arseniiv: well, David Madore has a few ideas about that, see http://www.madore.org/~david/weblog/d.2015-05-07.2296.html (and the older http://www.madore.org/~david/weblog/d.2013-10-07.2162.html that it points to) b_jonas: also http://www.madore.org/~david/weblog/d.2018-09-27.2555.html arseniiv: maybe I should direct him here b_jonas: arseniiv: I don't think he uses irc b_jonas: but he has a comment section, twitter, and email b_jonas: and Stack Exchange arseniiv: b_jonas: rofl :D I don’t mean David Madore arseniiv: I mean that person arseniiv: though I don’t know him at all, I just got interested and suggested tensory things to him. Then I was surprised by the coincidence: string diagrams in their simplest form are for monoidal categories b_jonas: arseniiv: but be careful, because we officially don't do the other kind of esoterism in this channel skyplane: всем доброго времени суток skyplane: может скажете, куда с этим: https://skyplaneru.wixsite.com/excessive ? arseniiv: b_jonas: eh, I was about to dust off my ouija board skyplane: понимаю что в сообщество прогеров, но вдруг arseniiv: skyplane: я прочитал и ничего не понял вообще arseniiv: really weird text imode: skyplane: это не место для какого-то дерьма, которое вы торгуете. немногие (если таковые имеются) здесь говорят по-русски. kspalaiologos: the heck kspalaiologos: arseniiv, ah yes, the ouija board kspalaiologos: very useful while programming in Malbolge arseniiv: kspalaiologos: oh! how do you use it? kspalaiologos: well, first you have to sign the pledge with Satan arseniiv: BTW I don’t really have an ouija but I can simulate it by means of a cat if I ever would want to kspalaiologos: and the following steps should be obvious skyplane: imode: разница в том, что я сабжем не торгую. от слова совсем. и указанная миссия - действительно миссия. З.Ы. с головой всё нормально. kspalaiologos: δεν μιλάς αγγλικά; imode: sorry, speak english. skyplane: arseniiv: не вопрос, бывает и непонимание kspalaiologos: oh cmon kspalaiologos: darn it man kspalaiologos: stop, you've broken my bot imode: why do you have a bot in here. kspalaiologos: to log the channel messags imode: your client does that. imode: and there are log files in the topic of this channel. kspalaiologos: russian characters are actually wide characters kspalaiologos: yes, my bot is supplying one of these sites b_jonas: `? logs HackEso: ​#esoteric channel logs: https://esolangs.org/logs/ http://tunes.org/~nef/logs/esoteric/?C=M;O=D http://codu.org/logs/_esoteric/ https://github.com/kspalaiologos/esologs/ imode: which one. kspalaiologos: Wide character in print at harvester.pl line 51. kspalaiologos: at harvester.pl line 51. kspalaiologos: LogBot::log(LogBot=HASH(0x55f49e95e340), "", "arseniiv: \x{43d}\x{435} \x{432}\x{43e}\x{43f}\x{440}\x{43e}\x{441}, \x{431}\x{44b}\x{432}\x{430}\x{435}\x{442} \x{438} \x{43d}\x{435}\x{43f}\x{43e}\x{43d}\x{438}\x{43c}\x{430}\x{43d}\x{438}\x{435}") called at harvester.pl line 166 b_jonas: imode: the last one I think arseniiv: russian characters are actually wide characters => wait why, how kspalaiologos: ^ apparently perl thinks so imode: b_jonas: ah, right. b_jonas: imode: I mean, that's the new one, so that's the most likely to break kspalaiologos: ^^ it used to work kspalaiologos: for a long time arseniiv: okay, returning to the thing I asked, should I give a log excerpt to that person or may I just rephrase what was brought? (Including CA and noita; interesting thing, I’ll watch a video later) b_jonas: kspalaiologos: long time? it ran for a month b_jonas: kspalaiologos: our channel is over twelve years old kspalaiologos: i realise that b_jonas: imode: really, it's either that, or an update on irc's side arseniiv: ^ apparently perl thinks so => ah. Hm. It’s very strange to say the least kspalaiologos: I have read the old IRC logs because I needed *something* arseniiv: (shouldn’t it write in UTF-8 or something) kspalaiologos: back from 2003 or sth kspalaiologos: so yeah, this channel is quite old b_jonas: arseniiv: if you write the program correctly kspalaiologos: but my bot's been running for week and a half b_jonas: arseniiv: in fact you should never _decode_ what you read from irc b_jonas: because it's not in any defined encoding imode: it's just bytes, man. b_jonas: though we usually view it in utf-8, you can send any byte string that doesn't have \x00 or \x0A or \x0D b_jonas: imode: exactly, but people sometimes write programs with bugs and later fix it b_jonas: it's normal kspalaiologos: now it shouldn't bail out now kspalaiologos: but I can't tell what happened on 10.18 5:00-6:00 PM GMT b_jonas: kspalaiologos: the esolangs.org log is backfilled after the fact from other bots when it's out. it is in fact pretty new, only like two years old, but fizzie added all the old logs retroactively to its archive kspalaiologos: I've read a few mails from the mailing list b_jonas: kspalaiologos: perhaps eventually he'll fill gaps from your logs too kspalaiologos: is it even alive by now? b_jonas: mailing list? what mailing list? b_jonas: `? mailing list HackEso: mailing list? ¯\(°​_o)/¯ b_jonas: `? email HackEso: email? ¯\(°​_o)/¯ b_jonas: `? mail HackEso: mail? ¯\(°​_o)/¯ kspalaiologos: esoteric.sange.fi I guess b_jonas: we don't have a mailing list, even wgrep doesn't know about it b_jonas: `? discord HackEso: discord? ¯\(°​_o)/¯ kspalaiologos: we had kspalaiologos: a mailing list a long time ago skyplane: Good day skyplane: can you tell where with this: https://skyplaneru.wixsite.com/excessive? skyplane: I understand that in the community of programmers, but suddenly b_jonas: nor do we have a discord kspalaiologos: `? website HackEso: website? ¯\(°​_o)/¯ kspalaiologos: you don't have website too b_jonas: `? wiki HackEso: The wiki is at . b_jonas: kspalaiologos: ^ you have to search right b_jonas: you can grep wisdom b_jonas: ``` grep -REi http wisdom HackEso: wisdom/ayacc:ayacc is ais523's yacc parser generator implementation, get it from darcs clone http://nethack4.org/projects/ayacc \ wisdom/dwfo:DWFO is the Doctor Who Fan Orchestra, . \ wisdom/homestuck:Homestuck is a cult religion for disaffected teens. Gamzee drives the bus. Best summarized by http://www.mspaintadventures.com/storyfiles/hs2/05743.gif \ wisdom/hand injuries:Hand injuries are surprisingly common among webcom b_jonas: oh yeah b_jonas: `? hand injuries HackEso: Hand injuries are surprisingly common among webcomic writers, see eg. http://questionablecontent.net/view.php?comic=2314 or http://www.giantitp.com/comics/oots0864.html b_jonas: ^ I found a third example, I should add it there kspalaiologos: I can't strive to understand this bot kspalaiologos: what, why, how b_jonas: `whatis ? HackEso: ​?(1hackeso) - print wisdom by name \ ?(8lambdabot) - compose tree of lambdabot commands b_jonas: `? wisdome HackEso: The Wisdome is the place where all of HackBot's wisdom is stored and forced to fight to the death for the freedom of being printed out when you type `wisdom. Strictly speaking, it should be called the "Wissphere". kspalaiologos: have you already trained muscle memory for the #esoteric bots? b_jonas: ``` grep -REi http wisdom | tail -n+4 HackEso: wisdom/hand injuries:Hand injuries are surprisingly common among webcomic writers, see eg. http://questionablecontent.net/view.php?comic=2314 or http://www.giantitp.com/comics/oots0864.html \ wisdom/pbflist:pbflist is update notification for the Perry Bible Fellowship webcomic. http://pbfcomics.com/ \ wisdom/log:#esoteric channel logs: https://esolangs.org/logs/ http://tunes.org/~nef/logs/esoteric/?C=M;O=D http://codu.org/logs/_esoteric/ http kspalaiologos: ``` grep -REi wisdom b_jonas: kspalaiologos: I use normal unix commands more than the extra-specialized stuff b_jonas: kspalaiologos: bin/\? foo basically just prints wisdom/foo kspalaiologos: ^ but, the structure of this bot b_jonas: it does a few extra things, but not too much b_jonas: ``` cat wisdom/"hand injury" HackEso: cat: 'wisdom/hand injury': No such file or directory kspalaiologos: how do I execute command b_jonas: ``` cat wisdom/"hand injuries" HackEso: Hand injuries are surprisingly common among webcomic writers, see eg. http://questionablecontent.net/view.php?comic=2314 or http://www.giantitp.com/comics/oots0864.html kspalaiologos: ``` ls / HackEso: bin \ dev \ etc \ hackenv \ lib \ lib64 \ proc \ sbin \ srv \ sys \ tmp \ usr b_jonas: `? run HackEso: ​`run is HackEgo's builtin for running a command with full shell syntax. These days most use the user-made `` or ``` shortcuts instead, although all of the three have subtle differences, with `run being the most plain option (also, unlike the rest it cannot be called from other commands.) HackEso: No output. kspalaiologos: ``` ls /bin HackEso: bash \ bunzip2 \ bzcat \ bzcmp \ bzdiff \ bzegrep \ bzexe \ bzfgrep \ bzgrep \ bzip2 \ bzip2recover \ bzless \ bzmore \ cat \ chgrp \ chmod \ chown \ cp \ dash \ date \ dd \ df \ dir \ dmesg \ dnsdomainname \ domainname \ echo \ egrep \ false \ fgrep \ findmnt \ fuser \ grep \ gunzip \ gzexe \ gzip \ hostname \ ip \ journalctl \ kill \ less \ lessecho \ lessfile \ lesskey \ lesspipe \ ln \ login \ loginctl \ ls \ lsblk \ mkdir \ mknod \ mktem kspalaiologos: so you say kspalaiologos: that the users actually construct the bot b_jonas: kspalaiologos: yes kspalaiologos: that's kspalaiologos: incredible b_jonas: the commands were added by users hppavilion[1]: I am very excited for the Rise of Skywalker kspalaiologos: that nobody has yet fscked up by this b_jonas: `? spoilers HackEso: Don't give movie spoilers on channel. If you do, hppavilion may hire a hitman to hunt you down in real life and torture you in refined ways. b_jonas: oh hi, hppavilion[1] hppavilion[1]: I have tickets to, like, the second showing in the state b_jonas: kspalaiologos: sure we have b_jonas: we made a lot of mistakes, then undone them hppavilion[1]: b_jonas: ...what that intentional or just the world's greatest timing? b_jonas: hppavilion[1]: intentional kspalaiologos: for example? kspalaiologos: does the repl have root access? hppavilion[1]: b_jonas: But yes, that position does still stand b_jonas: hppavilion[1]: you can see the history that I talked about that wisdom entry earlier because shachaf asked kspalaiologos: ``` ls HackEso: a.out \ bin \ canary \ emoticons \ esobible \ etc \ evil \ f \ factor \ good \ hw \ ibin \ interps \ izash.c \ karma \ le \ lib \ misle \ paste \ ply-3.8 \ quines \ quinor \ quotes \ share \ src \ test2 \ testfile \ tmflry \ tmp \ wisdom b_jonas: hppavilion[1]: and you have the same nick length as kspalaiologos so at first I thought it was he who said "I am very excited for the Rise of Skywalker" kspalaiologos: ``` ./a.out HackEso: 1.250000 b_jonas: hppavilion[1]: so I had to warn him kspalaiologos: ??????? b_jonas: kspalaiologos: you can experiment in tmp b_jonas: `? tmp HackEso: tmp/ is a directory for files that are not worth saving in HackEgo history, but which should still outlive a single command. 04NOTE: It interacts funnily with HackEgo's lock and re-run commit check; files can 04DISAPPEAR if you don't know what you're doing. Basically, don't modify files inside and outside tmp/ in the same HackEgo command. hppavilion[1]: b_jonas: Huh, so I do kspalaiologos: ``` cd tmp HackEso: No output. kspalaiologos: ``` ls HackEso: a.out \ bin \ canary \ emoticons \ esobible \ etc \ evil \ f \ factor \ good \ hw \ ibin \ interps \ izash.c \ karma \ le \ lib \ misle \ paste \ ply-3.8 \ quines \ quinor \ quotes \ share \ src \ test2 \ testfile \ tmflry \ tmp \ wisdom kspalaiologos: hm, so I have to kspalaiologos: give a single command hppavilion[1]: b_jonas: But it isn't out for months, so if kspalaiologos happens to HAVE spoilers, I'd honestly be fascinated to know how (but not what they are) b_jonas: ``` set -e; gcc -Wall -O -o tmp/a.out -x c - <<<$'#include\n''void main() { printf("this is a C program\n"); }'; tmp/a.out HackEso: ​:2:6: warning: return type of 'main' is not 'int' [-Wmain] \ this is a C program b_jonas: ``` set -e; gcc -Wall -O -o tmp/a.out -x c - <<<$'#include\n''int main() { printf("this is a C program\n"); }'; tmp/a.out kspalaiologos: oh c'mon man HackEso: this is a C program kspalaiologos: void main kspalaiologos: it's a crime against humanity b_jonas: yeah, it also needs a magic option to turn off the colors kspalaiologos: ansi filter when? b_jonas: something like -fdiagnostic-colors=never or similar hppavilion[1]: Note that I do not recognize the validity of so-called "trailer spoilers" b_jonas: kspalaiologos: ideally I should make a terminfo entry for irc colors, but I haven't bothered hppavilion[1]: Except in the context of not telling someone what happens in a trailer within maybe a week of its release IF they express that they haven't seen it yet and don't want to be quote-unquote "spoiled" kspalaiologos: what are you talking about right now? kspalaiologos: I'm so lost b_jonas: `? hackego # root access HackEso: hackego # root access? ¯\(°​_o)/¯ hppavilion[1]: kspalaiologos: b_jonas is talking about convoluted hackbot things, I'm talking about the ontology of movie spoilers b_jonas: ``` \? hackego # root access HackEso: HackEgo, also known as HackBot, is a bot that runs arbitrary commands on Unix. See `help for info on using it. You should totally try to hax0r it! Make sure you imagine it's running as root with no sandboxing. HackEgo is the slowest bot in all Mexico! b_jonas: ``` \? edit # single command HackEso: ​`edit gives you a url, then in your browser: (1) Press Sync (unless making a new file) (2) Make your changes (3) Press Save (4) Paste the command line at the top into the channel. hppavilion[1]: Huh, HackEgo's name has changed. Cool. b_jonas: hppavilion[1]: it's a reincarnation hppavilion[1]: `? hackego HackEso: HackEgo, also known as HackBot, is a bot that runs arbitrary commands on Unix. See `help for info on using it. You should totally try to hax0r it! Make sure you imagine it's running as root with no sandboxing. HackEgo is the slowest bot in all Mexico! b_jonas: hppavilion[1]: it has most of the old one's memory, from one of the backup dumps of the hg repository b_jonas: hppavilion[1]: except the hg log is truncated, I don't know why, so if you look way back in the revisions, you won't find the oldest stuff HackEso: hg is dark alchemy used by oerjan to fix things. Like most alchemy, it involves drinking mercury. hppavilion[1]: b_jonas: Should someone change the contents of `? HackEgo to match the reincarnation? kspalaiologos: ``` cd tmp && edit test.sh HackEso: https://hack.esolangs.org/edit/tmp/test.sh kspalaiologos: is this how it works b_jonas: hppavilion[1]: no, we have a separate entry b_jonas: `? HackEso HackEso: HackEso is almost but not quite unlike HackEgo. hppavilion[1]: b_jonas: Then 'is' -> 'was'? b_jonas: the HackEgo one is still an accurate description of the old bot b_jonas: hppavilion[1]: I don't think so, that's not a nice thing to edit about the bot that's sleeping but will return when the country needs him the most b_jonas: the once and future king will arise hppavilion[1]: b_jonas: Oh, like Arthur? arseniiv: Hg is alchemy haha. It reifies lead into tin, tin into iron, iron into copper, copper into silver, and silver into gold, and gold you shall not reify nohow hppavilion[1]: Is Merlin also destined to return in England's hour of need? I'm not clear on that one kspalaiologos: can I set up my brainfuck assembler on the bot hppavilion[1]: arseniiv: Applying gallium to aluminum turns the aluminum into basically we tcardboard b_jonas: hppavilion[1]: merlin time travels to the future. don't you read Irregular Webcomic? arseniiv: hppavilion[1]: what kind of alchemy is that? hppavilion[1]: b_jonas: Via a tree? b_jonas: hppavilion[1]: I don't know hppavilion[1]: arseniiv: I mean, it's real-life chemistry b_jonas: kspalaiologos: what's a brainfuck assembler? hppavilion[1]: Also, what's the exact prophesy on when Arthur will return? Is it specifically *England's* hour of need, or just the UK as a whole? kspalaiologos: as the name suggests, the program that's able to serve like a brainfuck-like assembler hooked with a pipe to a brainfuck interpreter arseniiv: hppavilion[1]: aww hppavilion[1]: er, *prophecy hppavilion[1]: 'prophesy' is a verb kspalaiologos: it's like a repl kspalaiologos: for testing the snippets arseniiv: (hm what reaction there is and where could I watch it) hppavilion[1]: arseniiv: Yes you could. Was that a cute 'aww' or a disappointed 'aww'? hppavilion[1]: Please allow me to introduce myself b_jonas: kspalaiologos: you can probably try. fizzie seems to have long tolerances, seeing that he hasn't banned me entirely from the bot yet arseniiv: I don’t know, that’s why I posted it so long hppavilion[1]: I'm a man of wealth and taste hppavilion[1]: arseniiv: Example: https://www.youtube.com/watch?v=IgXNwLoS-Hw kspalaiologos: ```git HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ``git: not found kspalaiologos: ```unzip HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ``unzip: not found b_jonas: ``` \? fetch # kspalaiologos: you should know about that too, besides edit HackEso: ​`fetch [] downloads files, and is the only web access currently available in HackEgo. It is a special builtin that cannot be called from other commands. See also `edit. arseniiv: hppavilion[1]: thanks kspalaiologos: the editor has already instructed me b_jonas: kspalaiologos: we have tar and gzip and xz kspalaiologos: I'll have to do it over my vps kspalaiologos: probably kspalaiologos: because github doesn't support downlading tarballs kspalaiologos: doesn't it? hppavilion[1]: Chemistry is like alchemy, except that it's real and interfaces with the laws of economics (meaning if you find a cost-effective way to turn lead into gold, you'll just drop the price of gold) b_jonas: kspalaiologos: in the worst case, you can uuencode it and put in edit kspalaiologos: this seems like a terrible idea kspalaiologos: give me a second b_jonas: but putting it somewhere on the http web and fetching is usually easier hppavilion[1]: b_jonas: Did you ever hang out in #xkcd? Or did I confuse you for someone else? fizzie: github does support downloading zip files. b_jonas: you just need to host it temporarily b_jonas: hppavilion[1]: for a few days, I think. I never participated b_jonas: hppavilion[1]: I was also on one of the xkcd wikis but didn't participate much fizzie: Under the "Clone or download v" button, there's a "Download ZIP" option which will just zip up all the repository contents into a file. hppavilion[1]: That channel gets a bit toxic occasionally, so I can't blame you if you quit during one of *those* periods b_jonas: and on explainxkcd but also didn't participate much kspalaiologos: `fetch tmp/test.sh https://hack.esolangs.org/get/tmp/test.sh HackEso: 2019-10-23 17:28:48 URL:https://hack.esolangs.org/get/tmp/test.sh [130/130] -> "tmp/test.sh" [1] kspalaiologos: ```cd tmp && cat test.sh HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ``cd: not found hppavilion[1]: b_jonas: I wonder if I'm conflating your nick with someone else's with a similar name; however, the only person I can think of is VictoriaB, whose old nick started with a 'j' kspalaiologos: `cd tmp && cat test.sh HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: cd: not found b_jonas: hppavilion[1]: I'm only on like one or two channel per network on most networks other than freenode kspalaiologos: `cat tmp/test.sh HackEso: wget https://github.com/kspalaiologos/asmbf/archive/v1.1.1.tar.gz \ tar -xzf v1.1.1.tar.gz \ cd asmbf-1.1.1 \ sudo make all install fizzie: That's not going to work: there's no networking from inside the machine. hppavilion[1]: I really wish hexchat had a way for me to scan two channels for overlap (even attempting on different servers) kspalaiologos: is there? b_jonas: kspalaiologos: three backticks and a space fizzie: The `fetch is the only thing that's able to fetch anything. fizzie: But really, that's just four commands, why would you need to run it as a script inside? Just fetch the file (preferrably into tmp/) and run those one by one. b_jonas: fizzie: I think it's an experiment b_jonas: testing stuff lf94: hppavilion[1]: what do you mean b_jonas: testing shorter scripts to b_jonas: know how longer scripts will work fizzie: Well, okay, "sudo" is not going to work either. hppavilion[1]: lf94: Clarify arseniiv: Chemistry is like alchemy, except that it's real and interfaces with the laws of economics (meaning if you find a cost-effective way to turn lead into gold, you'll just drop the price of gold) => agree on both points b_jonas: fizzie: wisdom/HackEgo more or less invites you to tryu lf94: "I really wish hexchat had a way for me to scan two channels for overlap" fizzie: And "make install" probably needs a PREFIX= argument or some-such. lf94: overlap of what? text? hppavilion[1]: lf94: Ah. I mean nick-overlap lf94: What is nick overlap? X) kspalaiologos: ``` cd tmp && edit hexdump.hex HackEso: https://hack.esolangs.org/edit/tmp/hexdump.hex kspalaiologos: `fetch tmp/hexdump.hex https://hack.esolangs.org/get/tmp/hexdump.hex HackEso: 2019-10-23 17:32:07 URL:https://hack.esolangs.org/get/tmp/hexdump.hex [119404/119404] -> "tmp/hexdump.hex" [1] hppavilion[1]: lf94: Like, scan if anyone has the same or similar nick, realname, or hostthing (whatever it is after the '@' in one's full id thing) lf94: write a python plugin, it's easy hppavilion[1]: 'similar' being defined by some predicate such as case-insensitive levenstein distance lf94: I wrote one to turn hexchat into a spy software lf94: while I'm in a channel, it will relay all messages to other servers lf94: in particular it's useful to have a user relay messages to another channel. fizzie: kspalaiologos: If that's a hexdump of the earlier v1.1.1.tar.gz file (like it appears), why in the world would you fetch *that* instead of just fetching the binary file? lf94: these days I use weechat though :) kspalaiologos: `fetch tmp/test.sh https://hack.esolangs.org/get/tmp/test.sh HackEso: 2019-10-23 17:34:12 URL:https://hack.esolangs.org/get/tmp/test.sh [93/93] -> "tmp/test.sh" [1] kspalaiologos: fizzie, I have no idea what i'm doing kspalaiologos: leave me kspalaiologos: ``` cat tmp/ HackEso: cat: tmp/: Is a directory kspalaiologos: ``` ls tmp/ HackEso: ​-BE8SJn_Dnja \ 0KpPun-ahPnp \ 4qubykGwXZAV \ 8bZIQdyoQ_3S \ EGYj6LpQgFKM \ I3ZdY_oWgTHb \ OUT \ X81G5u_N85_r \ a.c \ a.out \ aczO2Vrn8mw1 \ as-encoding \ compiled_brachylog.pl \ hexdump.hex \ iKVic2uB99hI \ input.brachylog \ jeval.whatis \ out \ out.a \ out.a.hd \ out.a.xxd \ paste \ single-word-character-names \ spline \ spout \ spout.raw \ test.sh \ tmp.txt \ uGgIjgPAmv8A kspalaiologos: ``` cat tmp/test.sh HackEso: xxd -r hexdump.hex v1.1.1.tar.gz \ tar -xzf v1.1.1.tar.gz \ cd asmbf-1.1.1 \ sudo make all install kspalaiologos: ``` /bin/bash tmp/test.sh HackEso: tmp/test.sh: line 1: xxd: command not found \ tar (child): v1.1.1.tar.gz: Cannot open: No such file or directory \ tar (child): Error is not recoverable: exiting now \ tar: Child returned status 2 \ tar: Error is not recoverable: exiting now \ tmp/test.sh: line 3: cd: asmbf-1.1.1: No such file or directory \ sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileg kspalaiologos: what just happened b_jonas: fizzie: because edit doesn't like non-ascii files fizzie: "xxd: command not found" happened, and the rest was just cascading errors. b_jonas: fizzie: he's fetching from edit as you can see kspalaiologos: how xxd is not present here kspalaiologos: it's a standard posix tool fizzie: b_jonas: Yes, but it's just bizarre. fizzie: No, it's not. b_jonas: I did say uunecode, but the young ones don't know how it and ftp ascii mode works kspalaiologos: isn't it? b_jonas: and 7-bit serial lines fizzie: b_jonas: Well, I mean, the point is, the binary file was already available at a web address. fizzie: There's no need to round-trip through edit. kspalaiologos: `fetch tmp/v1.1.1.tar.gz https://github.com/kspalaiologos/asmbf/archive/v1.1.1.tar.gz HackEso: 2019-10-23 17:36:57 URL:https://codeload.github.com/kspalaiologos/asmbf/tar.gz/v1.1.1 [28092] -> "tmp/v1.1.1.tar.gz" [1] b_jonas: fizzie: ah kspalaiologos: `fetch tmp/test.sh https://hack.esolangs.org/get/tmp/test.sh HackEso: 2019-10-23 17:37:11 URL:https://hack.esolangs.org/get/tmp/test.sh [60/60] -> "tmp/test.sh" [1] kspalaiologos: ``` /bin/bash tmp/test.sh HackEso: tar (child): v1.1.1.tar.gz: Cannot open: No such file or directory \ tar (child): Error is not recoverable: exiting now \ tar: Child returned status 2 \ tar: Error is not recoverable: exiting now \ tmp/test.sh: line 2: cd: asmbf-1.1.1: No such file or directory \ sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges? kspalaiologos: ``` ls tmp/ HackEso: ​-BE8SJn_Dnja \ 0KpPun-ahPnp \ 4qubykGwXZAV \ 8bZIQdyoQ_3S \ EGYj6LpQgFKM \ I3ZdY_oWgTHb \ OUT \ X81G5u_N85_r \ a.c \ a.out \ aczO2Vrn8mw1 \ as-encoding \ compiled_brachylog.pl \ hexdump.hex \ iKVic2uB99hI \ input.brachylog \ jeval.whatis \ out \ out.a \ out.a.hd \ out.a.xxd \ paste \ single-word-character-names \ spline \ spout \ spout.raw \ test.sh \ tmp.txt \ uGgIjgPAmv8A \ v1.1.1.tar.gz kspalaiologos: ``` cd tmp && /bin/bash test.sh HackEso: sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges? kspalaiologos: `fetch tmp/test.sh https://hack.esolangs.org/get/tmp/test.sh HackEso: 2019-10-23 17:37:57 URL:https://hack.esolangs.org/get/tmp/test.sh [55/55] -> "tmp/test.sh" [1] kspalaiologos: ``` cd tmp && /bin/bash test.sh HackEso: sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges? \ make: *** [install] Error 1 \ gcc -Ofast -march=native -funroll-loops -fomit-frame-pointer -w bfasm.c -o bfasm \ gcc -Ofast -march=native -funroll-loops -fomit-frame-pointer -w bfi.c -o bfi \ gcc -Ofast -march=native -funroll-loops -fomit-frame-pointer -w bfintd.c -o bfintd \ gcc -Ofas fizzie: `` rm tmp/{-BE8SJn_Dnja,0KpPun-ahPnp,4qubykGwXZAV,8bZIQdyoQ_3S,EGYj6LpQgFKM,I3ZdY_oWgTHb,X81G5u_N85_r,aczO2Vrn8mw1,iKVic2uB99hI,uGgIjgPAmv8A} # just some spring cleaning HackEso: rm: cannot remove 'tmp/-BE8SJn_Dnja': Is a directory \ rm: cannot remove 'tmp/0KpPun-ahPnp': Is a directory \ rm: cannot remove 'tmp/8bZIQdyoQ_3S': Is a directory \ rm: cannot remove 'tmp/EGYj6LpQgFKM': Is a directory \ rm: cannot remove 'tmp/I3ZdY_oWgTHb': Is a directory \ rm: cannot remove 'tmp/X81G5u_N85_r': Is a directory \ rm: cannot remove 'tmp/aczO2Vrn8mw1': Is a directory \ rm: cannot remove 'tmp/iKVic2uB99hI': Is a directory \ rm: ca fizzie: What, they're directories. b_jonas: fizzie: some of those might have been me b_jonas: ``` rmdir tmp/* HackEso: rmdir: failed to remove 'tmp/EGYj6LpQgFKM': Directory not empty \ rmdir: failed to remove 'tmp/OUT': Not a directory \ rmdir: failed to remove 'tmp/a.c': Not a directory \ rmdir: failed to remove 'tmp/a.out': Not a directory \ rmdir: failed to remove 'tmp/as-encoding': Not a directory \ rmdir: failed to remove 'tmp/asmbf-1.1.1': Directory not empty \ rmdir: failed to remove 'tmp/compiled_brachylog.pl': Not a directory \ rmdir: failed to remov kspalaiologos: ```ls tmp/ HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ``ls: not found kspalaiologos: ``` ls tmp/ HackEso: EGYj6LpQgFKM \ OUT \ a.c \ a.out \ as-encoding \ asmbf-1.1.1 \ compiled_brachylog.pl \ hexdump.hex \ input.brachylog \ jeval.whatis \ out \ out.a \ out.a.hd \ out.a.xxd \ paste \ single-word-character-names \ spline \ spout \ spout.raw \ test.sh \ tmp.txt \ v1.1.1.tar.gz kspalaiologos: ``` ls tmp/asmbf-1.1.1/ HackEso: AUTHORS \ INSTALL \ LICENSE \ Makefile \ NEWS \ README \ TODO \ VERSIONING \ bconv.c \ bfasm.asm \ bfasm.b \ bfasm.c \ bfasm.rs \ bfi.c \ bfintd.c \ bfmake \ bfpp \ bin \ doc \ examples \ labels.pl \ strip.pl \ test \ test.pl kspalaiologos: ``` edit tmp/asmbf-1.1.1/Makefile HackEso: https://hack.esolangs.org/edit/tmp/asmbf-1.1.1/Makefile kspalaiologos: `fetch tmp/asmbf-1.1.1/Makefile https://hack.esolangs.org/get/tmp/asmbf-1.1.1/Makefile HackEso: 2019-10-23 17:39:49 URL:https://hack.esolangs.org/get/tmp/asmbf-1.1.1/Makefile [687/687] -> "tmp/asmbf-1.1.1/Makefile" [1] b_jonas: kspalaiologos: hope you don't have to compile anything big that takes more than like 12 seconds or whatever the command timeout is kspalaiologos: it's just 4 programs kspalaiologos: every single one is <5 kilobytes big kspalaiologos: ``` cd tmp/asmbf-1.1.1/ && make all install HackEso: cp: cannot create regular file '/bin/bconv': Read-only file system \ cp: cannot create regular file '/bin/bfasm': Read-only file system \ cp: cannot create regular file '/bin/bfi': Read-only file system \ cp: cannot create regular file '/bin/bfintd': Read-only file system \ cp: cannot create regular file '/bin/bfmake': Read-only file system \ cp: cannot create regular file '/bin/bfpp': Read-only file system \ cp: cannot create regular file '/ b_jonas: kspalaiologos: yeah, the ones that take too much to compile are often also too big to fetch kspalaiologos: so I'll have to change the prefix kspalaiologos: where do you put the binaries fizzie: /hackenv/bin, usually. kspalaiologos: i'll create a folder for myself kspalaiologos: so I don't pollute the path b_jonas: kspalaiologos: create a dir under hackenv/lib b_jonas: under /hackenv/lib fizzie: In that case, yes, that. b_jonas: or under /hackenv/share for the architecture-independent ones fizzie: `` echo $PATH HackEso: ​/hackenv/bin:/usr/bin:/bin kspalaiologos: why under /lib b_jonas: kspalaiologos: not /lib b_jonas: kspalaiologos: /hackenv/lib kspalaiologos: i wanted to shorten typing xd kspalaiologos: but why there arseniiv: imode: oh, Noita is by the same author as Baba is You! b_jonas: kspalaiologos: because we use /hackenv/lib and /hackenv/share as sort of like the user's /usr/local/lib and /usr/local/share kspalaiologos: ``` ls tmp/asmbf-1.1.1/bin/ HackEso: bconv \ bfasm \ bfi \ bfintd \ bfmake \ bfpp \ labels.pl \ strip.pl b_jonas: kspalaiologos: we're not sysadmins so we can't write to /usr/local b_jonas: but /hackenv is our homedir, so we can write under there kspalaiologos: so this stuff should probably go to my folder in path b_jonas: so we use bin, lib, share under it kspalaiologos: but I'll have to modify the scripts though as they might not work with the nesting kspalaiologos: #shitcode b_jonas: kspalaiologos: why? can't you just configure --prefix=/hackenv/lib or make PREFIX=/hackenv/lib or something? kspalaiologos: I wrote that makefile fizzie: b_jonas: I guess technically the binaries should be in /hackenv/libexec for more FHS-y style. fizzie: "/usr/libexec includes internal binaries that are not intended to be executed directly by users or shell scripts." b_jonas: fizzie: perhaps. do you know who created /hackenv/share ? kspalaiologos: ``` cp tmp/asmbf-1.1.1/bin/bconv /hackenv/bin HackEso: No output. kspalaiologos: ``` cp tmp/asmbf-1.1.1/bin/bfasm /hackenv/bin HackEso: No output. kspalaiologos: and that's all I think kspalaiologos: ``` bfasm b_jonas: fizzie: /hackenv is a bit of a mess, with some garbage spread around b_jonas: we tend to remove at least the top level stuff, but we don't really have a good hierarchy kspalaiologos: ``` cat kspalaiologos: what happens when I do that? fizzie: A timeout at some point, normally. kspalaiologos: the program just gets killed at eof or what HackEso: No output. kspalaiologos: ah yes b_jonas: kspalaiologos: cp? don't you use symlinks? kspalaiologos: probably I should b_jonas: ``` oh sorry HackEso: bash: oh: command not found kspalaiologos: but nobody is interested in my stuff so I program it like for myself b_jonas: it was from temps b_jonas: kspalaiologos: sorry, don't symlink b_jonas: the source was from tmp, so you can't symlink kspalaiologos: how can I specify multiline output b_jonas: kspalaiologos: did you install to tmp? kspalaiologos: no, I didnt install to tmp b_jonas: that's not a good idea if it has any files other than the binary kspalaiologos: the install didnt success b_jonas: oh good fizzie: b_jonas: It was just built in the source tree and then manually copied over. kspalaiologos: because install script bailed out kspalaiologos: ```bfasm HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ``bfasm: not found kspalaiologos: wait a second kspalaiologos: ```bfasm out .0 HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ``bfasm: not found kspalaiologos: ``` bfasm out .0 b_jonas: kspalaiologos: if it works, you may also create a wisdom entry so we know what the program is for kspalaiologos: it doesn't send eof b_jonas: though maybe it has a good --help output or something kspalaiologos: thats very bad b_jonas: ``` bfasm --help HackEso: No output. kspalaiologos: it has no help flag kspalaiologos: you can read its source code HackEso: No output. kspalaiologos: its really helpful in understanding it HackEso: No output. kspalaiologos: can I manually instuct the bot to send eof at the end? fizzie: At the end of *what*? kspalaiologos: of my input b_jonas: kspalaiologos: a wisdom entry that tells where its source is and a quick synopsis might be helpful then kspalaiologos: I will add it in a moment kspalaiologos: but i'm working out the eof b_jonas: kspalaiologos: because a month from now, we won't be able to guess where the source is, and we won't want to dive the log to find out fizzie: You can do < /dev/null to get an empty stdin with an EOF at the end. b_jonas: kspalaiologos: try <<<"" kspalaiologos: the problem is b_jonas: oh yeah, +[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] b_jonas: ``` perl <<<'print "hello, world! " for 1..9' HackEso: hello, world! hello, world! hello, world! hello, world! hello, world! hello, world! hello, world! hello, world! hello, world! kspalaiologos: yayyyy kspalaiologos: how do you add wisdom entry? b_jonas: `? learn HackEso: ​`learn creates a wisdom entry and tries to guess which word is the key. Syntax (case insensitive): `learn [a|an|the] [s][punctuation] [...] b_jonas: `? le//rn HackEso: le/rn makes creating wisdom entries manually a thing of the past. Usage: `le/[/]rn // b_jonas: or create a file manually in the wisdom directory with a lowercase name b_jonas: that doesn't end in s kspalaiologos: can I just link the documentation? b_jonas: but adding a short synopsis should help b_jonas: so people can know if they should even check the docs kspalaiologos: `learn the bfasm The brainfuck assembler. Documentation and samples: https://raw.githubusercontent.com/kspalaiologos/asmbf/master/doc/bfasm.doc HackEso: Learned 'bfasm': the bfasm The brainfuck assembler. Documentation and samples: https://raw.githubusercontent.com/kspalaiologos/asmbf/master/doc/bfasm.doc kspalaiologos: `wisdom bfasm HackEso: ​bfasm//the bfasm The brainfuck assembler. Documentation and samples: https://raw.githubusercontent.com/kspalaiologos/asmbf/master/doc/bfasm.doc b_jonas: `? bfasm HackEso: the bfasm The brainfuck assembler. Documentation and samples: https://raw.githubusercontent.com/kspalaiologos/asmbf/master/doc/bfasm.doc kspalaiologos: it has been appended to the beginning kspalaiologos: what a derp lol fizzie: That's how it does. kspalaiologos: `? wiki HackEso: The wiki is at . kspalaiologos: `? test HackEso: test failed. HackEgo-JUnit is not available. fizzie: The idea is that you can `learn things like "The foomajick is a thingummy.", and then `? foomajick will return that. b_jonas: kspalaiologos: try le//rn b_jonas: or slashlearn if you're me kspalaiologos: `le//rn HackEso: Usage: `le/[/]rn // kspalaiologos: `le//rn bfasm //The brainfuck assembler. Documentation and samples: https://raw.githubusercontent.com/kspalaiologos/asmbf/master/doc/bfasm.doc HackEso: Learned 'bfasm ': The brainfuck assembler. Documentation and samples: https://raw.githubusercontent.com/kspalaiologos/asmbf/master/doc/bfasm.doc kspalaiologos: how do I remove the key? kspalaiologos: `le//rn bfasm//The brainfuck assembler. Documentation and samples: https://raw.githubusercontent.com/kspalaiologos/asmbf/master/doc/bfasm.doc HackEso: Relearned 'bfasm': The brainfuck assembler. Documentation and samples: https://raw.githubusercontent.com/kspalaiologos/asmbf/master/doc/bfasm.doc b_jonas: But in this case, it should say something like "bfasm is the brainfuck assembler..." fizzie: `` forget 'bfasm ' HackEso: Forget what? b_jonas: `? forget HackEso: forget? ¯\(°​_o)/¯ kspalaiologos: `le//rn bfasm//bfasm is the brainfuck assembler. Documentation and samples: https://raw.githubusercontent.com/kspalaiologos/asmbf/master/doc/bfasm.doc HackEso: Relearned 'bfasm': bfasm is the brainfuck assembler. Documentation and samples: https://raw.githubusercontent.com/kspalaiologos/asmbf/master/doc/bfasm.doc b_jonas: `? bfasm fizzie: FWIW, you didn't need le//rn for *that*, the "a/an/the" is optional. HackEso: bfasm is the brainfuck assembler. Documentation and samples: https://raw.githubusercontent.com/kspalaiologos/asmbf/master/doc/bfasm.doc b_jonas: `? wisdom b_jonas: fizzie: didn't have an "is" before kspalaiologos: can i specify newlines in <<<""? b_jonas: kspalaiologos: it's just bash syntax. you can use $'\n' if you want b_jonas: kspalaiologos: see my gcc command b_jonas: there are other solutions too of course kspalaiologos: I wonder will it build kspalaiologos: ``` bfasm <<<"mov r4,.F$'\n'mov r1,.0$'\n'mov r2,r1$'\n'lbl 1$'\n'out r1$'\n'out r2$'\n'out 32$'\n'mov r3,r1$'\n'eq_ r3,.9$'\n'jnz r3,2$'\n'mov r3,r2$'\n'eq_ r3,.9$'\n'jnz r3,3$'\n'mov r3,r1$'\n'eq_ r3,r4$'\n'jnz r3,5$'\n'lbl 6$'\n'mov r3,r2$'\n'eq_ r3,r4$'\n'jnz r3,4$'\n'inc r2$'\n'jmp 1$'\n'lbl 2$'\n'sub r4,5$'\n'mov r1,r4$'\n'add r4,5$'\n'jmp 1$'\n'lbl 3$'\n'sub r4,5$'\n'mov r2,r4$'\n'add r4,5$'\n'jmp 1$'\n'lbl 4$'\n'inc r1$'\n'mov r2,.0$'\n kspalaiologos: 'jmp 1$'\n'lbl 5$'\n'mov r3,r2$'\n'eq_ r3,r4$'\n'jz_ r3,6$'\n'0,00" HackEso: bash: -c: line 0: unexpected EOF while looking for matching `"' \ bash: -c: line 1: syntax error: unexpected end of file kspalaiologos: crap, too big b_jonas: kspalaiologos: no no, put the whole thing in $'...' b_jonas: and then C-like backslash escapes will be interpreted in it b_jonas: works good unless you need literal backslashes in your program b_jonas: or literal apostrophes b_jonas: you have to escape those with a backslash kspalaiologos: <<<"$'mov r4,.F\nmov r1,.0\nmov r2,r1\nlbl 1\nout r1\nout r2\nout 32\nmov r3,r1\neq_ r3,.9\njnz r3,2\nmov r3,r2\neq_ r3,.9\njnz r3,3\nmov r3,r1\neq_ r3,r4\njnz r3,5\nlbl 6\nmov r3,r2\neq_ r3,r4\njnz r3,4\ninc r2\njmp 1\nlbl 2\nsub r4,5\nmov r1,r4\nadd r4,5\njmp 1\nlbl 3\nsub r4,5\nmov r2,r4\nadd r4,5\njmp 1\nlbl 4\ninc r1\nmov r2,.0\njmp 1\nlbl 5\nmov r3,r2\neq_ r3,r4\njz_ r3,6\n'" b_jonas: kspalaiologos: but if you have this many newlines, then <<<'....' tr / \\n is almost worth kspalaiologos: forgot to run the program b_jonas: kspalaiologos: no, drop the double quote b_jonas: or... hmm b_jonas: ``` echo "a$'b'c" HackEso: a$'b'c b_jonas: ``` echo a$'b'c kspalaiologos: ``` bfasm <<<$'mov r4,.F/mov r1,.0/mov r2,r1/lbl 1/out r1/out r2/out 32/mov r3,r1/eq_ r3,.9/jnz r3,2/mov r3,r2/eq_ r3,.9/jnz r3,3/mov r3,r1/eq_ r3,r4/jnz r3,5/lbl 6/mov r3,r2/eq_ r3,r4/jnz r3,4/inc r2/jmp 1/lbl 2/sub r4,5/mov r1,r4/add r4,5/jmp 1/lbl 3/sub r4,5/mov r2,r4/add r4,5/jmp 1/lbl 4/inc r1/mov r2,.0/jmp 1/lbl 5/mov r3,r2/eq_ r3,r4/jz_ r3,6/' tr / \\n HackEso: ​+>+[# b_jonas: kspalaiologos: um no, tr is a program, you have to pipe its output to bfasm kspalaiologos: ``` tr / \\n | bfasm<<<$'mov r4,.F/mov r1,.0/mov r2,r1/lbl 1/out r1/out r2/out 32/mov r3,r1/eq_ r3,.9/jnz r3,2/mov r3,r2/eq_ r3,.9/jnz r3,3/mov r3,r1/eq_ r3,r4/jnz r3,5/lbl 6/mov r3,r2/eq_ r3,r4/jnz r3,4/inc r2/jmp 1/lbl 2/sub r4,5/mov r1,r4/add r4,5/jmp 1/lbl 3/sub r4,5/mov r2,r4/add r4,5/jmp 1/lbl 4/inc r1/mov r2,.0/jmp 1/lbl 5/mov r3,r2/eq_ r3,r4/jz_ r3,6/' kspalaiologos: I'm an idiot kspalaiologos: ``` tr / \\n <<<$'mov r4,.F/mov r1,.0/mov r2,r1/lbl 1/out r1/out r2/out 32/mov r3,r1/eq_ r3,.9/jnz r3,2/mov r3,r2/eq_ r3,.9/jnz r3,3/mov r3,r1/eq_ r3,r4/jnz r3,5/lbl 6/mov r3,r2/eq_ r3,r4/jnz r3,4/inc r2/jmp 1/lbl 2/sub r4,5/mov r1,r4/add r4,5/jmp 1/lbl 3/sub r4,5/mov r2,r4/add r4,5/jmp 1/lbl 4/inc r1/mov r2,.0/jmp 1/lbl 5/mov r3,r2/eq_ r3,r4/jz_ r3,6/' | bfasm HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<<[-]++++++++++++++++++++++++++++++++++++++++++++++++>[-]<[>+<<+>-]<[>+<-]<]>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>.>.>>>++++++++++++++++++++++++++++++++.[-]<<[-]<<[>>+<<<+>-]<[>+<-]>>>>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<[<<<<+>>>> b_jonas: kspalaiologos: but now you don't need the dollar sign b_jonas: because you're not using backslash escapes kspalaiologos: can I split the output amongst messages? kspalaiologos: ``` tr / \\n <<<$'mov r4,.F/mov r1,.0/mov r2,r1/lbl 1/out r1/out r2/out 32/mov r3,r1/eq_ r3,.9/jnz r3,2/mov r3,r2/eq_ r3,.9/jnz r3,3/mov r3,r1/eq_ r3,r4/jnz r3,5/lbl 6/mov r3,r2/eq_ r3,r4/jnz r3,4/inc r2/jmp 1/lbl 2/sub r4,5/mov r1,r4/add r4,5/jmp 1/lbl 3/sub r4,5/mov r2,r4/add r4,5/jmp 1/lbl 4/inc r1/mov r2,.0/jmp 1/lbl 5/mov r3,r2/eq_ r3,r4/jz_ r3,6/' | bfasm > tmp/test.b HackEso: No output. kspalaiologos: ``` bfi b_jonas: kspalaiologos: yes. save stuff in a file. HackEso: bash: bfi: command not found kspalaiologos: no brainfuck interpreter? HackEso: No output. b_jonas: kspalaiologos: didn't we go through that? we have a brainfuck interpreter in HackEso, one in fungot, and one in lambdabot fungot: b_jonas: i dont even know what you mean. interesting, thanks for the link kspalaiologos: hows it called? b_jonas: `! bf +++++++++++++++++++++[.+] HackEso: ​ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ kspalaiologos: beautiful b_jonas: needs a few more pluses kspalaiologos: how do i run a file though b_jonas: `! bf ++++++++++++++++++++++++++[.+] HackEso: ​ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ HackEso: ​! is a syntax used in Haskell and Prolog for solving evaluation order problems. HackEso: ​`! emulates the ! command of our former bot EgoBot. You write `! then the name of the language then a program, and it runs the program you give and returns the result. We used to use it to test out esoprograms in-channel all the time, but the set of included esolangs is fairly old now and so it's rarely used. fizzie: "/hackenv/interps/egobf/src/egobfi8 file.bf" for running a file. fizzie: That's what /hackenv/bin/bf is a wrapper around of. kspalaiologos: ``` /hackenv/interps/egobf/src/egobfi8 /tmp/test.b HackEso: ​/tmp/test.b: No such file or directory kspalaiologos: ``` /hackenv/interps/egobf/src/egobfi8 tmp/test.b HackEso: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 A0 A1 A2 A3 kspalaiologos: like a charm b_jonas: fizzie: how do you use bin/bf though? fizzie: `` ls -l tmp/test.b HackEso: ​-rw-r--r-- 1 1000 1000 2902 Oct 23 18:02 tmp/test.b fizzie: Not as big as I expected. kspalaiologos: not great not terrible kspalaiologos: I had to optimize my program for assembly size kspalaiologos: so it fits in irc message kspalaiologos: optimizing it for brainfuck size would shave off around 900 bytes kspalaiologos: how do i view my last contributions on wiki kspalaiologos: because I feel like i started something and didn't finish it fizzie: bin/bf just takes the first command-line argument (so all the input in `bf ...) and handles the ! notation, passing the part before as the file (well, pipe) for egobfi8 to execute, and the part after as the standard input. fizzie: `bf >>,[>,]<[<]>[.>>]<[>>]<<[.<<]!scrambled HackEso: srmldebac fizzie: ^unscramble srmldebac fungot: scrambled b_jonas: kspalaiologos: https://esolangs.org/wiki/Special:Contributions/ and enter your wiki username into the field fizzie: ^show unscramble fungot: >,[>,]<[<]>[.[-]>[>]<[.[-]<[<]]>] kspalaiologos: what's the hardware bot\'s running? b_jonas: ``` free # that much RAM HackEso: ​ total used free shared buff/cache available \ Mem: 252664 3924 245240 0 3500 243980 \ Swap: 0 0 0 b_jonas: ``` df /hackenv # that much free space on the file system HackEso: Filesystem 1K-blocks Used Available Use% Mounted on \ none 24733776 13762932 9701340 59% /hackenv fizzie: Well, "hardware". kspalaiologos: emulated? fizzie: For hardware, it's pretty soft. b_jonas: ``` cat /proc/cpuinfo # and that's what the three layers of virtual machine lies to us about the cpu HackEso: processor : 0 \ vendor_id : User Mode Linux \ model name : UML \ mode : skas \ host : Linux dysnomia.zem.fi 4.9.0-5-amd64 #1 SMP Debian 4.9.65-3+deb9u2 (2018-01-04) x86_64 \ bogomips : 5112.62 fizzie: It's emulated twice over. kspalaiologos: whoa what kspalaiologos: why twice b_jonas: it's still an x86_64, mind you b_jonas: only twice? b_jonas: no way b_jonas: it's three times kspalaiologos: oh gosh fizzie: b_jonas: I wasn't really counting the user/process/filesystem namespace thing. kspalaiologos: why would you do that b_jonas: once a full machine emulation by the hosting company to the machine that fizzie has root on, b_jonas: one layer of user-mode linux b_jonas: and I forgot what the third one was fizzie: systemd-nspawn, which is all Linux namespaces. b_jonas: oh yeah, once with linux namespaces kspalaiologos: so fizzie owns a vps b_jonas: ok, I guess you're right, it's emulated only twice b_jonas: and sandboxed the third time b_jonas: not emulated kspalaiologos: and he then virtualizes the bot? b_jonas: kspalaiologos: yes kspalaiologos: fair enough b_jonas: plus runs some other things on the same server fizzie: It's the same system where the wiki's running, except the wiki's not in the container. (And obviously not in the UML either.) kspalaiologos: ah, yes b_jonas: is lambdabot running there too? kspalaiologos: so you "own" the wiki? fizzie: Well, I "maintain" it, nowadays. b_jonas: the esolangs logs also runs there usually kspalaiologos: wasn't the hosting donated? b_jonas: and the wiki notification too kspalaiologos: also, who is the person behind creating this community kspalaiologos: it's intriguing me b_jonas: and, in the future, zemhill will run there too fizzie: I mean, there's a lot of overlapping communities. b_jonas: creating? I don't know, the details are lots in the mists of time fizzie: The IRC channel grew out of the old esolangs mailing list, which grew out of the older esolangs mailing list. fizzie: I don't really remember the history of the wiki side of things. b_jonas: wait, so that mailing list that kspalaiologos mentioned, that really exists? kspalaiologos: told you we had a mailing list fizzie: There were two I knew of. kspalaiologos: g2g, I've got a few important things to do kspalaiologos: farewell b_jonas: I think ais523 or oerjan created the wiki so that people don't spam en.wikipedia with nonsense articles about esoteric languages fizzie: http://esoteric.sange.fi/archive/ is the newer one. fizzie: Graue was much involved in running the wiki, according to their article from 2005 to 2012. fizzie: Before the sange.fi mailing lists, there was another mailing list, but I don't really remember any details about that one. b_jonas: yeah, bust be, https://esolangs.org/w/index.php?diff=6 is the first edit there is b_jonas: and that's by Graue b_jonas: https://esolangs.org/w/index.php?title=Special:Log&type=rights says that ais523 was a wiki admin starting from 2007-03 fizzie: Oh, right, I think the earlier mailing list was the catseye one. fizzie: At least in ~/archive/backup/older/colin/oldhome_old2.tar.gz:old2/Mail/lists/lang-eso I have few emails sent to list@catseye.mb.ca. fizzie: (I'm very organized with my files, as you can tell.) b_jonas: also oerjan was wiki admin since 2013-07 and you fizzie since 2017-03 b_jonas: mistype b_jonas: also oerjan was wiki admin since 2013-07 and you fizzie since 2014-03 b_jonas: we need statues in the garden to know who founded what b_jonas: with plaques on them explaining things kmc: hello / good morning b_jonas: hi kmc b_jonas: so the wiki was created in 2005-04, but the channel is older, because we have logs for 2002-12 b_jonas: and we do have a discord, despite that wisdom doesn't know about, because the wiki does know about an unofficial Esolangs Discord server int-e: `' discord HackEso: No output. b_jonas: `slashlearn discord//The unofficial Esolangs and code golf Discord server: https://discord.gg/3UXSK5p b_jonas: `? discord HackEso: Learned 'discord': The unofficial Esolangs and code golf Discord server: https://discord.gg/3UXSK5p HackEso: The unofficial Esolangs and code golf Discord server: https://discord.gg/3UXSK5p b_jonas: `q discord HackEso: No output. b_jonas: `? ioccc HackEso: The IOCCC is the Industrial Ordovician COBOL Conference Circuit. Not to be confused with OIC. See also ioccclist. lf94: http://leefallat.ca/notes/p-lang/strings-form-a-group.html - thoughts? fizzie: b_jonas: The mailing list archive has a few threads on starting up this channel. int-e: wtf is "hello"^-1 supposed to be fizzie: b_jonas: Search for "Esolang IRC channel" in http://esoteric.sange.fi/archive/2002-q4 for example. int-e: (never mind that examples are not proofs most of the time) int-e: lf94: you(?) should really stop at monoid, while you're ahead. lf94: int-e: it's supposed to be a 'negative' string b_jonas: int-e: a free one? lf94: int-e: you're right, I should not use the word proof at all. int-e: b_jonas: sure, that's a bonus b_jonas: `? string theory HackEso: string theory? ¯\(°​_o)/¯ int-e: lf94: whatever it is, it's not a string b_jonas: `? string diagram HackEso: String diagrams would be useful in category theory, except they're unreadable due to being curled up in tiny dimensions. Taneb invented them anyhow. b_jonas: ``` cat wisdom/fu*aneb HackEso: The Fundamental Theorem of Taneb states that for all strings S, if S describes a thing not involving sex, then it is provable that Taneb invented the thing described by S; and, furthermore, that it is provable that there exists a string T that describes a thing not involving sex that Taneb did not invent. int-e: the monoid is also left- and right-cancellative b_jonas: `? computer HackEso: Computer is a language where numbers are strings of the characters '1' and '0'. lf94: int-e: It is a string lf94: All strings belong in some set S int-e: Yeah I'm out of this discussion. lf94: this includes "negative strings" that I just made up lf94: This is like saying -1 is not a number b_jonas: `quote jits int-e: It's not a natural number. HackEso: 564) fizzie: It's like a JIT, if JITs were... strings. lf94: Why cant -"hello" be a string? int-e: lf94: Because strings aren't defined that way. Strings are finite sequences over some alphabet. int-e: But... lf94: So what, you want me to call "hello" a natural string, and -"hello" a Z-string or something ("integer string" would be extremely confusing) b_jonas: int-e: no no. they're members of the free monoid (semigroup with zero) over an alphabet. the non-algebraic definitions are for kindergarten. int-e: If you want to make a fool out of yourself, you're welcome to do that. If you want to re-invent free groups, that's also a viable route, but the objects will no longer be strings. lf94: I want to learn :) lf94: And I'm ok with being wrong - so you're saying check out free groups - ok. lf94: int-e: I understand what you mean by "these arent strings", as in, strings have a very absolute definition lf94: So what would you propose to call them? lf94: I guess anything other than strings... lf94: int-e: thank you :) lf94: So definitely a free group lf94: actually what I defined does actually correspond to a group lf94: "thing is a sentence" * -"is" == -"is" * "thing is a sentence" == "thing a sentence" lf94: "An example of an element of the free group on two generators is ab^2a^(-1), which is not equal to b^2." lf94: But this is not the case in what I wrote lf94: "o" * "h" * "e" * "ll" * -"o" does equal "hell" ornxka: is forth an esoteric language imode: if that's the case then we've sent an esolang to space. ornxka: hot damn ornxka: thats impressive arseniiv: "o" * "h" * "e" * "ll" * -"o" does equal "hell" => seems trickier than free groups, yeah lf94: it just removes all instances of "o" lf94: pretty simple imo arseniiv: if there are many instances of "o" in that *string, which ones would be removed when * -"o"? imode: how would you remove just one 'o'. arseniiv: ah, all lf94: you dont lf94: @ imode imode: brutal. so there are find/replace operations that are not possible. lf94: find/replace is something all on its own. lf94: That's why I ask the question... lf94: At the bottom of my writing arseniiv: I wanted to say “rigid” too :D lf94: "Maybe strings should be promoted to a more restrictive structure?" imode: apart from reordering the operations. lf94: Or maybe strings alone are not useful lf94: I wanted to explore it with you guys :) arseniiv: lf94: what do you mean, more restrictive? lf94: more laws to satisfy imode: you can reorder the operations such that any 'o' you want to remove just has to be affixed with a * -'o'. lf94: So our new structure would "require to implement find/replace" arseniiv: ah I see imode: so 'h' * 'e' * 'l' * 'l' * 'o' * -'o' * 'o' wouldn't be "helloo", it'd be "hello". imode: but this implies an ordering of an operation. lf94: Yes, then we have a free group imode: I don't believe you do. any deviation from that order gives you a different result. lf94: "o" * "h" * -"o" then equals what? lf94: In a free group...it equals "oh-o" arseniiv: so we need to have some good operations so that find/replace is neatly expressible? lf94: in a group, by MY definition, it's "h". lf94: arseniiv: yes, preferably 1 operation arseniiv: lf94: I think imode proposes deleting the last one occurence imode: not really. stepwise application. arseniiv: then it would be between free group and deleting all occurrences lf94: "hello" ? ("el","zz") lf94: But now we are creating a new thing lf94: intersection of two sets arseniiv: yes, preferably 1 operation => but now we already got two, * and - lf94: strings and some pair type imode: 'h' * 'e' -> "he". "he" * 'l' * 'l' -> "hell". "hell" * 'o' -> "hello". "hello" * -'o' -> "hell". "hell" * 'o' -> "hello". lf94: arseniiv: I mean 1 additional operation :) lf94: imode: now what about "ohell" * -"o" ? imode: strings with concatenation don't form a group. arseniiv: we can use string zippers imode: because if they did, then "hello" == "olleh". lf94: imode with concat alone, just a monoid, yes arseniiv: I have an uncooked esolang Punctree which deals with tree zippers arseniiv: it has some nice operations lf94: hello is a different string to olleh lf94: string zipper? imode: but if you're defining a string to be a result of several `*`s, it can't be if it's a group. arseniiv: like substitution, which is inconceivable for strings without holes lf94: imode: you've lost me :) arseniiv: string zipper? => like list zipper, but for list of chars lf94: I just remember zipper is some fp structure or function imode: ah, I'm wrong. the ordering is relevant, so I'm wrong. arseniiv: just a shameless self-something: https://esolangs.org/wiki/Punctree and there are a couple of links added by IIRC int-e arseniiv: to pages about zippers specifically lf94: I don't get why people say "Shameless plug" imode: plugging yourself is seen as shameless. imode: s/shameless/shameful lf94: Right? So why say it at all? arseniiv: so my clumsy description would get more comprehensive imode: shameless self promotion fits in the same vein. arseniiv: shameless composition with the channel’s continuation lf94: It's like saying "excuse my rudeness" *does something extremely rude* arseniiv: is it delimited one lf94: IMO linking to your own things is ok. In fact I encourage it, because people dont share their own stuff enough arseniiv: lf94: or knocking and then opening the door immediately lf94: haha, yeah lf94: that's a goodone arseniiv: lf94: I agree, people should share their stuff with me so I’ll be a good borg lf94: arseniiv: this lang is too alien for me right now :D lf94: brain=exploded arseniiv: okay but you can believe that there are many neat operations to do on zippers! lf94: sure! :D arseniiv: yeah I like APL too arseniiv: not the real APL, but nonetheless arseniiv: then some day you’ll make something with string zippers maybe lf94: What are some math operators that take more than 2 operands lf94: maybe strings need to be "lifted" to something like a list arseniiv: strings are already lists, of characters arseniiv: I probably misunderstood lf94: ["hello ", name, " how are you?"] * ["", " with a hat", ""] == "hello lf94 with a hat how are you?" lf94: imo this is a pretty cool arseniiv: oh format strings! lf94: getting closer to replace i think lf94: So now * is operating on each element lf94: like matrix operations lf94: ["hello ", name, " how are you?"] * ["", -"lf94" * "bob", ""] == "hello bob how are you?" lf94: very basic replace. lf94: the list gives control of position lf94: syntax sugar would be required to specify "delete everything" lf94: Which would be written as -"a" * -"b" * ... I think lf94: Mmm, no lf94: "a" * -"a" == ""; "a" * "a" == "aa"; thus -"a" * -"a" = -"aa" ?, which would remove all instances of 2 a's oerjan: b_jonas: what's all that about <-- i'd say b_jonas is showing scan-dalous behaviour there oerjan: you'd think our resident poetry scanner would know better b_jonas: what? "resident poetry scanner"? b_jonas: who is that? oerjan: who else uploads entire poetry pooks to wikimedia commons... b_jonas: those are real poetry, not English stuff oerjan: must resist... urge to `addquote oerjan: that's no excuse for not knowing scansion lf94: man this is cool. "" * "" = ""; "" * -"" = -""; thus "a" * -"" = -"a"; which means -"" will remove everything when applied to any other string. oerjan: is this a proper ring twh b_jonas: oerjan: English poetry isn't real poetry, they just call it poetry because it's the best replacement that they have for real poetry, which is impossible for English b_jonas: and I don't understand how "scansion" or whatever works in it b_jonas: apparently it depends on how English pronunciation is supposed to work, which not only I don't understand, but other people don't either b_jonas: or at least different people understand it differently oerjan: i understand it perfectly well, until i look it up in wiktionary and see i was wrong, or at least a minority b_jonas: oerjan: don't believe Wiktionary oerjan: that too b_jonas: oerjan: try CAAPR, it's a reasonably well done pronunciation list b_jonas: a small one, so only common words are in it b_jonas: but it's good quality and consistent and well thought out b_jonas: even if the notation is a bit weird oerjan: "CAAPR: the Comprehensive & Adaptable Aperture Photometry Routine" oerjan: i'm sure that will help with pronunciation. b_jonas: http://www.wyrdplay.org/AlanBeale/CAAPR-ref.html b_jonas: it's compiled by the author of 12dicts ("http://wordlist.aspell.net/12dicts/") b_jonas: I mentioned it on this channel a few months ago b_jonas: but as for how you go from there to English poetry, I've no idea oerjan: i already regret starting this conversation hth b_jonas: as for the original topic, feel free to edit that higgedly wisdom of course b_jonas: btw, I think my compact camera finally died b_jonas: I'll have to buy a new one oerjan: hppavilion[1]: except the hg log is truncated, I don't know why, so if you look way back in the revisions, you won't find the oldest stuff <-- GregorR used to reset history occasionally in the beginning, before we started depending on it being accurate oerjan: i think the last time was in 2013 or so oerjan: `dowt zzo38 HackEso: 0:2012-02-16 Initïal import. oerjan: hm maybe 2012 then b_jonas: ``` hg log -T "{date|shortdate}" -r 1 HackEso: 2012-02-19 b_jonas: (I don't trust revision 0) b_jonas: oh, unrelated video game stuff. I think the Game Boy could easily handle a tetris game where the blocks are 7 pixel tall rather than 8. you'd need tiles that combine parts of two blocks in different ways, but it fits in the tiles array with three colors of blocks, and I think the CPU could handle it too (you'd probably need to use sprites for the currently falling block, and update the tiles only during b_jonas: lockdown) b_jonas: the problem with the Game Boy tetris game is that there are only 18 rows, because 20 rows of 8 pixels don't fit in the screen, but you really want at least 20 rows for a tetris game b_jonas: and 7 pixels tall, even if unnatural for a game boy game, could do that oerjan: kspalaiologos: cp? don't you use symlinks? <-- you should not put symlinks to tmp/ , everything there is potentially irreversibly deleted at any time b_jonas: oerjan: yes, I misread the commands. I realized later. b_jonas: oerjan: the cp was to install the program from the build directory; I assumed it was already installed under /hackenv/lib and he's just linking it to /hackenv/bin b_jonas: but it's a single-file executable, so the cp was all it took to install oerjan: I think ais523 or oerjan created the wiki so that people don't spam en.wikipedia with nonsense articles about esoteric languages <-- i think you make up things hth oerjan: also, some people try to do that anyway oerjan: and the actual wikipedia article about esolangs keeps growing dubious examples but i don't dare to prune it because i know someone might be inspired to delete the examples i actually _like_ that don't have their own articles (like Piet) oerjan: although some other people have pruned on occasion oerjan: `? #esoteric HackEso: ​#esoteric is the only channel that exists. After monqy left it became slightly off-centër. It's a 7-codimensional hyperenchilada about 30 m (100 ft) across. oerjan seems to be making a lawn in the northern part, but it keeps getting dug up by free ranging moons. Currently located in the Atlantis Exclusion Zone. oerjan: `cat bin/q HackEso: quote "$@" oerjan: `? forth HackEso: Since Biblical times, Forth has been the go-to language for multiplication. b_jonas: ``` set -e; cd wisdom; printf "%s// " *eso* HackEso: ​#esoteric// #esoteric-blah// esosc// esoteric// esoteric files archive// esoterra// esowiki// hackeso// ingesorgeco// mesolang// b_jonas: `? esoteric HackEso: This channel is about programming -- for the other kind of esoterica, try #esoteric on EFnet or DALnet. b_jonas: ^ these channels, the ones mentioned in welcome, do we know if they still exist? I wonder if we're sending people to channels that have been gone for five years or something b_jonas: perhaps we should send a volunteer to check once every decade b_jonas: ``` \? welcome | sed 's/.*((//' HackEso: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: . (For the other kind of esoterica, try #esoteric on EFnet or DALnet.) lf94: arseniiv: as I was washing dishes, I remembered what a zipper was. lf94: find and replace is complete now. lf94: (("hello my big world" % " ") ? "big") * ["", -"", ""] * ["", "small", ""] == "hello my small world" lf94: % is split, ? is find (and returns a zipper of [before, found, after]), and the rest we talked about. lf94: I think it's also impossible for the line to fail lf94: if "big" isnt found, it'll use empty string lf94: meaning nothing is replaced arseniiv: also maybe add composition of two or several zippers, it would just nest them like a fir lf94: Oh yeah and ! is join arseniiv: and walks left/right arseniiv: hm how could one insert between fragments? lf94: example? arseniiv: like, insert something right before "big" in that example arseniiv: but leave "big" intact arseniiv: ah, we could replace it with "somethingother big" arseniiv: (but maybe this profits from a shorter syntax) arseniiv: will go sleeping soon oerjan: perhaps we should send a volunteer to check once every decade <-- sounds good, i'm sure it's been less than that. b_jonas: oerjan: indeed, less than a decade yet lf94: arseniiv: yeah exactly lf94: or, er, no! lf94: just this lf94: ["", "somethingother", ""] * (("hello my big world" % " ") ? "big") lf94: so awesome b_jonas: ``` hg log -T "{rev}:{date}:{desc}\n" -r 378 # this was the commit that first added dalnet lf94: so that covers find/replace/insert/delete HackEso: 378:1336334759.00: learn Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page. (For the other kind of esoterica, try #esoteric on irc.dal.net.) b_jonas: ``` hg log -T "{rev}:{date|shortdate}:{desc}\n" -r 378 # with date HackEso: 378:2012-05-06: learn Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page. (For the other kind of esoterica, try #esoteric on irc.dal.net.) b_jonas: ``` hg log -T "{rev}:{date|shortdate}:{desc}\n" -r 5372 # and this much more recent one added efnet HackEso: 5372:2015-05-24: sed -i \'s/on irc.*/on EFnet or DALnet.)/\' wisdom/welcome b_jonas: so both less than a decade ago lf94: I guess I can make a text editor now b_jonas: then we should schedule the checking of the dalnet one to 2022 b_jonas: do we have an #esoteric calendar? arseniiv: lf94: :) arseniiv: do we have an #esoteric calendar? => tomorrow is the day of eicosapentation of common/uncommon radices! arseniiv: (8 is the common one, 10 is uncommon) arseniiv: established since, and up to, eleven b_jonas: arseniiv: you mean like, tomorrow is the 25th day of the month? b_jonas: I can't make sense of what you mean by all those other numbers b_jonas: `ddate HackEso: Today is Sweetmorn, the 4th day of The Aftermath in the YOLD 3185 arseniiv: I meant to write “comment/uncomment radices” but that’s ungrammatical and too radical arseniiv: I can't make sense of what you mean by all those other numbers => why, you know that october is the eight month arseniiv: eighth* arseniiv: there’s even a helpful hth in there b_jonas: `? hth HackEso: hth ([ʰtʰh̩]) is help received from a hairy toe. It is not at all hambiguitous. arseniiv: tomorrow is the 25th day of the month => that’s not esoteric, contrary it’s pretty obvious arseniiv: I don’t know if I’m joking or not b_jonas: `? title arseniiv: `? ddate HackEso: ddate? ¯\(°​_o)/¯ arseniiv: hm I wasn’t attentive when read how others asked to show help on commands fizzie: Arguably, ddate isn't really a HackE[sg]o command. fizzie: It's just the standard ddate. fizzie: `which ddate HackEso: ​/usr/bin/ddate fizzie: If I had /var mounted, we could probably look which package it was coming from, but for some reason the standard umlbox base mount points only include /usr, /bin, /sbin, /lib, /lib32, /lib64, /etc/alternatives and /dev. fizzie: I guess a lot of /var doesn't really make sense inside the box though, while having a shared /usr is more normal. Sgeo: What name would make sense for this operation? a?b = ln(e^a + e^b) Sgeo: By analogy with a*b = ln(e^a * e*b) Sgeo: a?a = a+1. Almost but not quite like making addition repeated '?' fizzie: a?a = ln(e^a + e^a) = ln(2e^a) = ln(e^a) + ln(2) = a + ln(2), not a + 1. Sgeo: Uh. Pretend I said a?b = log_2(2^a + 2^b) Sgeo: Hmm might be fun to find a base such that a?a = a+2 fizzie: sqrt(2), then? Sgeo: AFK for a bit Sgeo: Seemed to work in 5?5 = 7, thank you Sgeo: AFK for real Sgeo: q(5, q(5, q(5, 5))) Sgeo: Sadly 5?5?5 != 8 int-e: Sgeo__: the ln-based one is actually fairly easy to implement observing that a?b = max(a,b)?min(a,b), and a?b = a + ln(1 + e^(b-a)) = a + log1p(exp(b-a)) (ensuring a > b first ensures that the exp() doesn't overflow). int-e: err, a >= b. int-e: Sgeo__: (I've read this somewhere, some article about log domain computations. I forgot what the source was, though.) int-e: The other point is that using log1p avoids truncation problems from adding 1 to a very small number. Sgeo: There wouldn't happen to be a logarithm base that keeps its argument constant for all inputs or at least those that are an integer 2 or greater, I assume Sgeo: What if, instead of getting x?x = x+2 and x?x?x = x+3, I settle for... maybe something like doing the operation 2^a times gets what I want? int-e: x?x = x+2 and x?x?x = x+3 doesn't make sense? you can only have one of a^2 = 2 or a^3 = 3. int-e: a being the base (don't ask me why I didn't pick b) Sgeo: I think I want to go back to a?b = log_2(2^a + 2^b). Do that operation 2^n times (or is it 2^n - 1 times?) with x you get x+n int-e: log1p(exp2(b-a))/log(2) is ugly though int-e: + is repeated "add 1" Sgeo: That's a unary operator though int-e: so is "multiply by a" in a^b int-e: > let add a b = iterate (+1) a !! b; mul a b = iterate (+a) 0 !! b; pow a b = iterate (*a) 1 !! b -- function iteration is the unifying pattern here, what's not to like? lambdabot: : error: lambdabot: not an expression: ‘let add a b = iterate (+1) a !! b; mul a b = iterate... int-e: @botsnack int-e: x?y = (x == y ? x + 2 : x + 1) ==> (x?x)?x = x+3. int-e: You can't hope for ? to be associative because then x+6 = x?x?x?x?x?x = (x?x?x)?(x?x?x) = (x+3)?(x+3) = x+5. int-e: Sgeo__: Ah why am I making it so complicated. You'd want x+1 = x (one "iteration" of ?). b_jonas: `echo ``` >>share/whatis echo 'ddate(1) - convert Gregorian dates to Discordian dates' HackEso: ​``` >>share/whatis echo 'ddate(1) - convert Gregorian dates to Discordian dates' b_jonas: ``` >>share/whatis echo 'ddate(1) - convert Gregorian dates to Discordian dates' HackEso: No output. b_jonas: `whatis ddate HackEso: ddate(1) - convert Gregorian dates to Discordian dates b_jonas: arseniiv: ^ fixed b_jonas: as fizzie points out, it's in /usr/bin , so the description goes to the man 1 section, rather than the 1hackeso where the description of hackeso commands go b_jonas: Where's the documentation of the ploki language? the wiki doesn't seem to have a link b_jonas: ``` ploki <<<"(6+7" b_jonas: ``` ploki <<<"(6+7)" myname: what do you guys think of kitten? shachaf: I like kittens. wib_jonas: ais523 and other M:tG folks: we are restarting the "vanishing three card blind" M:tG game at www.giantitp.com/forums/showthread.php?601011 , you should consider to participate. wib_jonas: Let me tell quickly how this works. Each round, every player secretly chooses a deck of three cards that you'll play. You don't have to buy or borrow the cards, so you can use even the most expensive cards if you want. wib_jonas: You send the deck in a message to a trusted organizer. After every player (at least five) chose a deck, the organizer reveals the decks. Then we simulate each ordered pair of two different players independently playing a game of M:tG against each other using their deck. wib_jonas: In the game, players don't lose by decking. Everyone has perfect information about hidden cards and hidden decisions. We simulate the games such that each player plays perfectly such that they win the game if they can, or draw if they can't win but can draw. wib_jonas: Players get 3 points for a won game and 1 point for a drawn game. Then we add the points each player has got for the round, and the players who have the most points from that round is declared the winner of that round, they get bragging rights, and all cards in the decks are banned from future rounds. wib_jonas: Oh, and the most important part. Decks have exactly 3 cards. wib_jonas: At the start, all cards released by Wizards are allowed, except for avatar, plane, phenomenon, scheme, conspiracy cards. There are some further rules that come up, such as about randomness and Wishes, but the above are the main rules. wib_jonas: Oh, and the 5 basic lands and the 15 storage lands are exempt from banning. wib_jonas: I knew I forgot something. wib_jonas: or maybe the 11 basic lands, I don't know int-e: "all cards in the decks"? even those that lost? wib_jonas: int-e: all cards in the decks that won wib_jonas: the decks of the winning players wib_jonas: that's usually only one player and two or three cards banned per round, but could be more if there's a tied score int-e: ah. ties. of course. int-e: . o O ( So this will eventually end in hands full of lands and all draws. Of course people will probably lose interest long before that. ) wib_jonas: int-e: only if we play faster than Wizards can release new card wib_jonas: int-e: but we only got to 100 banned cards moonheart08: fizzie: you think the small adjustments I've made to the main page are OK? kspalaiologos: as for my personal opinion kspalaiologos: I think we don't need them, but they are fine kspalaiologos: navbar on the left does exactly the same moonheart08: Hia ais523 moonheart08: Made some small changes to main page, if you feel like reviewing em ais523: that seems like a reasonable enough change moonheart08: Working on a full redesign of mp for fun, as well. New page patrol on wikipedia can get boring moonheart08: ais523: how much spam does the wiki recieve nowadays? Doesn't seem like much at all ais523: basically none at the moment, the "Introduce yourself" thing was very effective because spambot frameworks don't know how to deal with it ais523: that said, they've mostly stopped trying now; I don't know whether or not they'd start again if we relaxed the restrictions moonheart08: Trial run is always possible. I don't mind watching recent changes for a bit if you do that ais523: I'll wait for some of the other admins to chime in with opinions ais523: but it's a fairly easy setting to change moonheart08: If I apply for admin, does my opinion count double? /s moonheart08: ais523 that look decent for you? I'm testing on a smallish laptop display, and i'ma bet you have a bigger display. ais523: I'm also on a fairly small display, but even so there's a lot of wasted space ais523: I guess that isn't automatically a bad thing when it comes to a main page, but I don't really like the look moonheart08: Yea.. Trying to figure out what I can put in the top bar. The main section will be similar to the existing layout ais523: (also the "demonstrate recursion" link won't actually work on the Main Page itself, due to the code designed for navboxes that highlights the self-link and makes it unclickable) moonheart08: (Aw. Luckily that link's probably not final) int-e: That joke's been overdone anyway. moonheart08: I noticed moonheart08: Hence why it probably wont stay b_jonas: moonheart08, main page: I think it'd be better not to mention "assuming the name is not already taken". That will give people the idea of giving bad names to esolangs. b_jonas: moonheart08: will you also improve [[History]]? moonheart08: b_jonas maybe moonheart08: ais523: how's the layout now? ais523: it's pretty similar to what we have now ais523: the featured language should possibly be a bit less prominent because we don't update it very often ais523: also, you removed the description of what the site is; that's a) important for new readers and b) probably important for SEO b_jonas: I think the featured language is importat, because it will be new for newcomers, and they're the ones reading the main page ais523: I think I prefer the original layout kspalaiologos: any cool ideas on Brainfuck program? kspalaiologos: I thought about some kind of game kspalaiologos: but i'm too stupid to think of a nice storyline kspalaiologos: it would be the best if it involved small amount of calculations b_jonas: kspalaiologos: 99 beers? b_jonas: I mean 99 bottles of beer kspalaiologos: that's too simple kspalaiologos: i'm tired of calculations after projecteuler kspalaiologos: solved in brainfuck, obviously kspalaiologos: I'll go with a minesweeper b_jonas: kspalaiologos: Lissajous curves, either ascii art like https://www.perlmonks.com/?node_id=621188 or PPM? lf94: Someone should actually create a real stone with all the 99 bottles of beer samples lf94: I would pay for it b_jonas: oh, minesweeper may be a good one b_jonas: lf94: would one in minecraft work? lf94: maybe not stone but steel kspalaiologos: lf94, you can just yank the stuff from rosetta kspalaiologos: put it on a stone tablet lambdabot: error: Variable not in scope: you kspalaiologos: and you're pretty much allset lf94: sorry, not me :) someone else. lf94: (I dont have time for that!) kspalaiologos: why are you sitting on #esoteric then kspalaiologos: we are here only to waste time b_jonas: lf94: google image search gives some images of shelves with 99 bottles of beer kspalaiologos: arkanoid in brainfuck lf94: kspalaiologos: yes, it's much more enjoyable sitting in #esoteric than chiselling 99 bottles of beer into a rock. b_jonas: I have a minesweeper program that I've written for the EL-5120 calculator lf94: kspalaiologos: be my guest, though :D kspalaiologos: b_jonas, when my TI-83 arrives b_jonas: there's the slight problem that the player can cheat because they can read the contents of variables during prompts, but that's unavoidable given the limitations of the calculator kspalaiologos: we both know what I will do b_jonas: I also wrote a maze program b_jonas: kspalaiologos: what will you do? lf94: bad things kspalaiologos: I'll start off with brainfuck interpreter obviously kspalaiologos: then I'll port my asm2bf infrastructure to TI-Basic or z80 assembly kspalaiologos: I can't wait to waste 10+ hours b_jonas: that sounds scary kspalaiologos: exciting kspalaiologos: brainfuck on a calculator is the thing I haven't yet seen in my life b_jonas: https://esolangs.org/wiki/Brainfuck_implementations and search for "calculator" b_jonas: lists several implementations of bf on calculators lf94: kspalaiologos: there's gameboy brainfuck interpreter lf94: just as "good" b_jonas: s/EL-5120/Sharp EL-5120/ b_jonas: kspalaiologos: also talk to kmc, she does esoteric stuff with TI programmable calculators b_jonas: or wait, maybe I'm mixing her with someone else on the channel kspalaiologos: btw, do you recognize Seed? kspalaiologos: around a month ago I wrote a generator for it kspalaiologos: I loved the experience kspalaiologos: and +40/+116 on codegolf.stackexchange.net too kspalaiologos: tl:dr; the program consists of two numbers kspalaiologos: the length and seed kspalaiologos: seed is fed to mersenne twister, length bytes are taken kspalaiologos: stuff is dumped to befunge interpreter and then ran kspalaiologos: I took my time to prove that seed is turing complete moonheart08: kspalaiologos: a large number of people want your generator :p kspalaiologos: and it's somewhere at the bottom of the esolangs page kspalaiologos: moonheart08, I realise :p kspalaiologos: I can give out a couple of tips kspalaiologos: but I don't feel like runing the fun and spirit of seed moonheart08: That's a good reason not to moonheart08: So i'm good kspalaiologos: moonheart08, you're active on codegolf? kspalaiologos: I used to write dozens of Malbolge, Brainfuck and Seed programs for these guys moonheart08: Sometimes kspalaiologos: but now I don't feel like it makes any sense moonheart08: Not lately moonheart08: I very occasionally do golf in x86-64 assembly kspalaiologos: ah yes, you're a man of culture aswell kmc: b_jonas: not really kmc: I did a very long time ago kspalaiologos: I like golfing stuff in assembly too kmc: Hooloovo0 does TI stuff though kspalaiologos: I'm already going to get TI shipped to me btw moonheart08: X86 is a dumpster fire kspalaiologos: I don't really know how to use it kspalaiologos: moonheart08, probably moonheart08: And I know it well kspalaiologos: but I love it anyway kspalaiologos: it's very intriguing and lovely kspalaiologos: simple in it's dumpsterfireness kspalaiologos: btw, I'm still getting a daily upvote on doublespeak b_jonas: kspalaiologos: I presume you use some turing-complete header that reads the length of the program and executes it b_jonas: for seed kspalaiologos: I can't seem to understand moonheart08: kspalaiologos, > simple moonheart08: I wish kspalaiologos: my proof is basing on first proving that bytebytejump is turing complete by simulation kspalaiologos: and then I simulate bytebytejump in befunge kspalaiologos: and then I do the magic with my ouija board somewhere in the drawer kspalaiologos: the resulting program is at the end of pdf iirc kspalaiologos: I didn't simulate brainfuck in befunge and then convert it into seed kspalaiologos: it seems like a straightforward way kspalaiologos: but it's not kspalaiologos: the smallest brainfuck interpreter in befunge I could get was way too big to be processed by my generator kspalaiologos: for the curious, the limit is around 624/4 bytes kspalaiologos: so it's quite limited kspalaiologos: but the generator is very, very high quality kspalaiologos: 4 141745954 kspalaiologos: a very simple adder made by the generator kspalaiologos: while the seed program is usually around 2-4 kilobytes big moonheart08: I wonder why interwiki redirects work on esolangs.org, but not wikipedia moonheart08: (My esolangs userpage is a redirect, go try it. User:Moon) kspalaiologos: i've seen it kspalaiologos: on your edits i clicked on your user page kspalaiologos: and I got redirected, at first i didn't know what happened kspalaiologos: after ten or so seconds I realised that I'm on wikipedia now moonheart08: I put a helpful header in place, as I realised some might get confused looking for, say, my talk page kspalaiologos: i saw something on your talk page kspalaiologos: but it was too long for me to remember it now or read moonheart08: Was ais checking that I had the right to release something into public domain b_jonas: ``` \? ais523 # hmm, is this new? HackEso: Agent “Iä” Smith is an alien with a strange allergy to avian body covering, which he is trying to retroactively prevent from ever evolving. On the 3rd of March, he's lawful good. b_jonas: no it's not b_jonas: I just forgot about it b_jonas: ``` hg cat -r 4530 wisdom/ais523 HackEso: ais523 is ais523. This topic may retroactively become more informative if or when Feather is invented. kspalaiologos: ``` hg --help HackEso: Mercurial Distributed SCM \ \ list of commands: \ \ add add the specified files on the next commit \ addremove add all new files, delete all missing files \ annotate show changeset information by line for each file \ archive create an unversioned archive of a repository revision \ backout reverse effect of earlier changeset \ bisect subdivision search of changesets \ bookmarks create a new bo kspalaiologos: i freakin knew this was mercurial kspalaiologos: but the invocation, eh b_jonas: I was wondering if I should fold quote 1289 into the wisdom about him, but I think it works better as a quote kspalaiologos: quote 1289? kspalaiologos: the heck? b_jonas: kspalaiologos: try the quote command of HackEso kspalaiologos: `quote HackEso: 101) what's the data of? [...] Locations in a now deceased game called Mutation I have no problems with you being interested in online games but the necrophilia is disturbing kspalaiologos: can you add the quote? b_jonas: `? addquote kspalaiologos: I want to add a quote HackEso: addquote? ¯\(°​_o)/¯ b_jonas: `? quote HackEso: Quotes are just elements of the quantum dilapidated bogosphere. See qdb. b_jonas: there was one about quote syntax kspalaiologos: `addquote kspalaiologos: yes, it's much more enjoyable sitting in #esoteric than chiselling 99 bottles of beer into a rock. b_jonas: `whatis addquote HackEso: addquote(1hackeso) - no description b_jonas: `? quote syntax HackEso: 1337) kspalaiologos: yes, it's much more enjoyable sitting in #esoteric than chiselling 99 bottles of beer into a rock. HackEso: quote syntax? ¯\(°​_o)/¯ b_jonas: `? quotedb kspalaiologos: ha! 1337 HackEso: quotedb? ¯\(°​_o)/¯ kspalaiologos: `quote 1337 HackEso: 1337) kspalaiologos: yes, it's much more enjoyable sitting in #esoteric than chiselling 99 bottles of beer into a rock. kspalaiologos: so leet number b_jonas: kspalaiologos: yes, some regular always prunes the quote database to be just shy of 1337 lf94: I'm going to be remembered after I die now. b_jonas: `? qdb HackEso: qdb is used like: `quote; `quote regexp; `quote id; `addquote ...; `delquote id; `pastequotes regexp; `pastenquotes [n]; see also quoteformat kspalaiologos: lf94, lo. b_jonas: `? quoteformat HackEso: quoteformat is: message; * nick action; two spaces between messages; all elisions marked with [...] other than irrelevant intervening messages; for messages separated by elision, one space on each side, not two. kspalaiologos: `quote 1289 HackEso: 1289) hmm, I just remembered that I was formally trained to tune harps kspalaiologos: lol xD? b_jonas: `q 1336 HackEso: 1336) I have made a chess engine in Malbolge in theory it's decent but it has two drawbacks a) It requires 31 and a half gigabytes of memory b) it's quicker to count atoms in universe than to run it b_jonas: ^ you already would have been remembered kspalaiologos: can you view the entire quote database? int-e: b_jonas: you're mixing up nicks, I think b_jonas: int-e: um, which nicks? int-e: (just observing. happens to me all the time.) kspalaiologos: or I have to write tcl script to send `q with consecutive numbers? b_jonas: where? int-e: b_jonas: lf94 and kspalaiologos b_jonas: kspalaiologos added a quote of lf94 b_jonas: `q 1337 HackEso: 1337) kspalaiologos: yes, it's much more enjoyable sitting in #esoteric than chiselling 99 bottles of beer into a rock. b_jonas: but then b_jonas: no wait b_jonas: both of then will be remembered, because both of them are named in that quote HackEso: ​/bin/sed: invalid option -- '1' \ Usage: /bin/sed [OPTION]... {script-only-if-no-other-script} [input-file]... \ \ -n, --quiet, --silent \ suppress automatic printing of pattern space \ -e script, --expression=script \ add the script to the commands to be executed \ -f script-file, --file=script-file \ add the contents of script-file to the commands to be executed \ --follow-symli kspalaiologos: i crashed you! HackEso: 781) Because, if it is all wrong, then I should fix it please \ 839) GreyKnight, shachaf is like a high-level Forth b_jonas: but yeah, lf94 wasn't in the qdb before HackEso: 421) cigaretes and drunking "lame highs for lame people" yeah if it doesn't make you go crazy and shoot at people, it's not worth it. take it from a norwegian. \ 1010) sometimes i wake up and my name has grown more consonants HackEso: 911) I feel like (A.~[:i.[:!#) is verbose \ 71) oklopol geez what are you doing here ...i don't know :< i actually ate until now, although i guess i also did other things... kspalaiologos: can I read this stuff without having you to read it with me? moonheart08: Pm the bot int-e: `url quotes HackEso: https://hack.esolangs.org/repo/file/tip/quotes kspalaiologos: the bot doesnt reply on pm moonheart08: It used to kspalaiologos: thats what i've been looking for kspalaiologos: oh wait, it does kspalaiologos: but it has a very big latency b_jonas: kspalaiologos: logging in to nickserv may help make it respond kspalaiologos: what is nickserv kspalaiologos: haven't I logged in? b_jonas: kspalaiologos: also you can read in #esoteric-blah , or just `paste quotes or something int-e: kspalaiologos: you have b_jonas: kspalaiologos: you are, but maybe you weren't when you found that it wasn't responding b_jonas: `paste quotes HackEso: https://hack.esolangs.org/repo/file/tip/quotes int-e: b_jonas: `url is cleaner :P shachaf: ha! 839 b_jonas: `url quotes HackEso: https://hack.esolangs.org/repo/file/tip/quotes kspalaiologos: `q 839 HackEso: 839) GreyKnight, shachaf is like a high-level Forth b_jonas: `? url HackEso: url? ¯\(°​_o)/¯ b_jonas: `whatis url HackEso: url(7) - uniform resource identifier (URI), including a URL or URN \ url(1hackeso) - print URL to view contents of a hackenv file \ url(8lambdabot) - no description b_jonas: `whatis paste kspalaiologos: this emote, lol HackEso: paste(1) - merge lines of files \ paste(1p) - merge corresponding or subsequent lines of files \ paste(1hackeso) - print URL to read a file in hackenv through web \ paste(8lambdabot) - no description shachaf: what a number kspalaiologos: `q 158 HackEso: 158) fizzie: 50kB is quite a lot kspalaiologos: and that's a fact kspalaiologos: depends though moonheart08: Who would I have to ask to get a extension added to esolangs.org kspalaiologos: 50 kilobytes of seed is a freaking LOT moonheart08: (SyntaxHighlight) kspalaiologos: 50 kilobytes of brainfuck is meh, normal size kspalaiologos: why would we add syntaxhighlight int-e: b_jonas: I don't think any regular has been pruning the quotes file to keep it at 1336 or below. I've just repeatedly suggested that we should :P kspalaiologos: this has no sense b_jonas: int-e: I'm not necessarily saying keeping below, just keeping not much over kspalaiologos: 50 kilobytes of malbolge is actually a very small number kspalaiologos: why would we trim the quotes though b_jonas: lf94: is your "remembered" reaction because you've written a thesis for a degree and realized that nobody will read it, ever? moonheart08: kspalaiologos: Either that, or enable Scribunto so that users can add syntax highlighting to their language(s) kspalaiologos: probably int-e: b_jonas: https://hack.esolangs.org/repo/log/tip/quotes <-- shouldn't we be seeing many more delquotes here, though moonheart08: Via a script b_jonas: kspalaiologos: to make the average quote have a higher quality kspalaiologos: so the bad quotes are trimmed? kspalaiologos: by the human? int-e: b_jonas: I think the truth is that we've been *very* slow at adding quotes. int-e: I'm tempted to change `quote and co to skip that number though. But it sounds like work... b_jonas: kspalaiologos: ok, take what I'm saying with a large grain of salt, apparently I keep inventing mythology about this community and believing in them kspalaiologos: at least someone is doing weirder stuff than me b_jonas: int-e: that would confuse me a lot, at least the first time, since sometimes I grep -n foobar quotes lf94: b_jonas: what lf94: no, lol kspalaiologos: ```tr \n / <<<"mov r1,.0/out r1" | bfasm HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ``tr: not found b_jonas: lf94: sorry, it's a rather common human experience, it was worth a shot I think kspalaiologos: ``` tr \n / <<<"mov r1,.0/out r1" | bfasm HackEso: ​+>+[# kspalaiologos: ``` tr / \n <<<"mov r1,.0/out r1" | bfasm HackEso: ​+>+[# int-e: I think you want \\n kspalaiologos: exactly kspalaiologos: ``` tr / \\n <<<"mov r1,.0/out r1" | bfasm HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>[-]++++++++++++++++++++++++++++++++++++++++++++++++.<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: perfect kspalaiologos: I'll move to the blah channel for a second imode: blah channel? kspalaiologos: #esoteric-blah imode: that's botspam innit? int-e: that has bot spam in it imode: rather, a channel dedicated to botspam. imode: what flavor. moonheart08: Orange b_jonas: `? #esoteric-blah HackEso: ​#esoteric-blah blah blah. Blah blah, blah blah blah blah. Blah blah blah! moonheart08: Would you prefer green flavor? moonheart08: Or yellow? int-e: orange flavored spam... that's genuinely cringe-worthy. moonheart08: How about black imode: int-e: reminds me of dishes made in the 70's. int-e: I'd rather have soylent green. I think. imode: black spam sounds like blood pudding but mass-produced. int-e: `? spoiler HackEso: Don't give movie spoilers on channel. If you do, hppavilion may hire a hitman to hunt you down in real life and torture you in refined ways. moonheart08: I haven't seen hppa in a whike b_jonas: moonheart08: he was here very recently b_jonas: look in the logs kspalaiologos: once again kspalaiologos: how do you add wisdom entry moonheart08: int-e: Maybe give soylent green flavored spam a try imode: they just appear. kspalaiologos: i forgot it already HackEso: ​? ¯\(°​_o)/¯ kspalaiologos: `? wisdom b_jonas: kspalaiologos: with learn or with le//rn or by creating files in the wisdom directory such that the filename is all lowercase and doesn't end in an s kspalaiologos: ah, ok I remember now kspalaiologos: `? le//rn HackEso: le/rn makes creating wisdom entries manually a thing of the past. Usage: `le/[/]rn // moonheart08: Why can't wisdom entries end in a s b_jonas: moonheart08: they can, but it's better if they don't, because bin/\? can remove the trailing s b_jonas: `? wisdoms b_jonas: `? wisdom b_jonas: ^ same entry int-e: I want to put an actual spoiler in there... Also, sleds are made from people who have been dead all along. int-e: Or something along those lines. b_jonas: int-e: after the relevant xkcd, it's not funny a second time b_jonas: int-e: https://www.xkcd.com/109/ b_jonas: though coincidentally, the latest xkcd is also about spoilers moonheart08: XKCD is always relevant moonheart08: Always. int-e: It's like other tomes. 2219 xkcds, there's one for every situation. moonheart08: Is therr one for someone being smashed by a giant sperm whale? imode: probably. b_jonas: moonheart08: there's HHGG for that int-e: moonheart08: What b_jonas said. moonheart08: What's that int-e: (I'd spell it HHGttG though) imode: the pronunciation sounds like someone having a heart attack. int-e: moonheart08: The Hitch Hiker's Guide to the Galaxy. b_jonas: `? hhgg HackEso: hhgg? ¯\(°​_o)/¯ b_jonas: `? hhgttg HackEso: hhgttg? ¯\(°​_o)/¯ b_jonas: `? h2g2 HackEso: h2g2? ¯\(°​_o)/¯ FaeFly: It's H2G2 to me :p int-e: moonheart08: Where else would you find a falling giant sperm whale?! imode: 2hitchikers 2galaxy. int-e: (And a pot of petunias.) b_jonas: popular on this channel because it's full of crazy English humor, and we have a few English people here int-e: (Don't forget the pot of petunias. It's important, as will be revealed at the end.) int-e: (Unless you hate the fifth book, in which case it won't be revealed.) kspalaiologos: ah, the mythic english humour kspalaiologos: I've read English for around 9000h in my entire life kspalaiologos: and I still can't get the English humour imode: it's a subtle humor. kspalaiologos: I get subtle humour in my Muttersprache kspalaiologos: no idea about english or play on words though int-e: Yeah... Germans are renowned for their humor. kspalaiologos: I knew you're gonna say that int-e: It's a matter of misdirection. int-e: We Germans are renowned for our humor. :-P int-e: Urin stinkt. int-e: Brilliant. int-e: (We even have puns!) b_jonas: kspalaiologos: how about Brexit? that's an example for English humor that isn't subtle. do you understand that one? int-e: I'm still wondering what to make of "I've read English for around 9000h in my entire life" -- do you time yourself reading because it's a chore, an item to tick off an todo list? kspalaiologos: I've calculated it a few months ago kspalaiologos: b_jonas, well, it doesn't involve knowing british culture or word plays, so it's easy to comprehend for me b_jonas: kspalaiologos: some chapters involve the queen, the lack of constitution, etc. I think those are part of british culture. at least it appears to be more part of british culture than whatever the humor is about wantonly calling into existence a bowl of petunias ten thousand miles over the surface of a planet is. kspalaiologos: I don't know british culture int-e: The pot of petunias is just Silly. int-e: So, honestly, is a lot of HHGttG int-e: But it manages to surprise which is a key element of humor. b_jonas: yes, but it's also eminently quotable, in the way that Monty Python is int-e: The effect of a Pan Galactic Gargle Blaster is like having your brains smashed out by a slice of lemon int-e: wrapped round a large gold brick. int-e: (pause for effect) kspalaiologos: how can I legally protect myself if I wanted to release a keygen to the public? kspalaiologos: is saying that I've made it just for serial key recovery kspalaiologos: enough? imode: anonymize yourself the best you can and then release it. imode: with that disclaimer. or just don't. kspalaiologos: and that you need to own Mathematica to use this program, otherwise it's illegal kspalaiologos: if you e.g. lost your serial key or it doesn't work int-e: I don't think a court would buy that excuse. b_jonas: kspalaiologos: we don't give legal advice, and there are no lawyers here, only crazy people and harp tuners int-e: I'm also not sure how smart it is to ask this in a publicly logged channel. kspalaiologos: I'm just curious :p kspalaiologos: I saw people doing it int-e: Well, don't publish the keygen. kspalaiologos: I mean kspalaiologos: I'm not the pirate here :p kspalaiologos: but I'll protect my ass anyway kspalaiologos: on github there is a winrar keygen publicly available though int-e: kspalaiologos: https://krebsonsecurity.com/tag/stresser/ is full of examples that a related story for DoS services does not stop authorities from stepping in. (Rather than denial of service, the official purpose is to do stress tests on customer networks. However, the services don't verify whether the customer controls the target address...) kspalaiologos: c'mon, who didn't have fun with security in their lives kspalaiologos: I had a friend who exploited the store app to get freebies b_jonas: if you want actual legal advise, you will have to pay a lawyer kspalaiologos: no, I'm just curious kspalaiologos: to know other's opinions b_jonas: biology question. are there spiders that can't make their own web, but that use the web made by a different type of spider for hunting? int-e: https://www.reddit.com/r/askscience/comments/29cap7/do_spiders_ever_steal_another_spiders_web/ int-e: helloerjan int-e: oerjan: Have we seen Violetta like this before? Or possibly somebody else... int-e: "I don't know" is an acceptable answer--don't waste your time checking archives. oerjan: OKAY I WON'T int-e: Well, not on my account. oerjan: i have this vague feeling that there's someone else. oerjan: but it could just be another comic interfering int-e: We've had crazy potions before (I'm assuming it's a potion), but I'm really unsure about this particular effect. :) oerjan: kspalaiologos: yes, some regular always prunes the quote database to be just shy of 1337 <-- no, they haven't done that, because it's never reached it before. int-e: I mean, it *is* tempting to follow through with the threat. ais523: pick five quotes, delete the worst one ais523: unless they're all really good, in which case pick another five ais523: `5 quote HackEso: 1/2:232) 320 quotes and still not a funny one yet! \ 230) Lymia: I put big spider in my bed already. So if you have no more left you do not have to worry about it anymore. You can just take a cold shower or hot acid or whatever you want to, instead. \ 1271) `quote `quote `quote `quote ....lovely spam, oh wonderful spam... \ 1056) Bike: i think it's a fermented fish produc ais523: hmm, we only got four quotes, but 230 is the only actually good one there ais523: I'm going to delete the other three and see if anyone reverts ais523: `delquote 1271 HackEso: ​*poof* `quote `quote `quote `quote ....lovely spam, oh wonderful spam... ais523: `delquote 1056 HackEso: ​*poof* Bike: i think it's a fermented fish product? either that or it means "welcome" in finnish ais523: `delquote 232 HackEso: ​*poof* 320 quotes and still not a funny one yet! int-e: ais523: it's `n, not `2, isn't it... `2 is the one that takes a command and shows the 2nd page of its output. ais523: ah, OK ais523: I thought it'd be something like that int-e: ``2 5 quote HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: `2: not found int-e: `` 2 5 quote HackEso: 2/2:g ca \ eory with bathroom interior design the other day :-D \ 936) I was practically raised by Dilbert. \ 264) That's for $literals in the parser. It should maybe be atol too, but probably you shouldn't have nonterminals with more than two billion children. int-e: (that's abusive) ais523: that's kind-of useless as `5 quote isn't deterministic :-) int-e: Well, it did *something* int-e: And tbh, that was the goal. HackEso: ​/hackenv/bin/`: eval: line 5: unexpected EOF while looking for matching `'' \ /hackenv/bin/`: eval: line 6: syntax error: unexpected end of file \ /hackenv/bin/`: eval: line 5: unexpected EOF while looking for matching `'' \ /hackenv/bin/`: eval: line 6: syntax error: unexpected end of file \ /hackenv/bin/`: eval: line 5: unexpected EOF while looking for matching `'' \ /hackenv/bin/`: eval: line 6: syntax error: unexpected end of file \ /h HackEso: 1/2:1092) until you SPOON \ 119) INTERNET YAY Said like a once-drowning man, rescued, taking a breath. \ 236) okay see in my head it went, you send from your other number smth like "i'd certainly like to see you in those pink panties again" and she's like "WHAT?!? Sgeo took a pic?!?!?! that FUCKING PIG" \ 1326) I don't care for the bf backend as long as it doesn't make the rest of aya HackEso: 2/2:sue \ 815) [after a quote deletion session] ais523: i just checked, and the whole purpose of this is not necessary.... ais523: `quote 1326 HackEso: 1326) I don't care for the bf backend as long as it doesn't make the rest of ayacc harder to sue ais523: looks like the first line is getting cut off int-e: Oh, maybe some of the lengths have not been properly adjusted for HackEso's cloak yet. fizzie: I still haven't managed to get to it. :/ int-e: is it here? https://hack.esolangs.org/repo/file/tip/bin/distort#l3 int-e: > 512 - 2 - length "HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :" oerjan: `2 <-- that's the wrong command. also there's a bug in the line breaking after HackEso got a cloak. int-e: > length "c harder to " fizzie: `` echo {a..z}{0..9} | tr -d ' ' | bin/distort | sed -e 's/^\(......\).*\(......\)$/\1\2/' HackEso: a0a1a24w5w6w \ 7w8w9xz7z8z9 int-e: so 447 or 448. oerjan: < <-- heresy! fizzie: Hmm, that seems to have been split correctly. Odd. fizzie: Oh, right, because it's a balanced split. int-e: fizzie: you're not testing the right thing oerjan: i managed to select and paste simultaneously fizzie: int-e: Why? oerjan: I'm going to delete the other three and see if anyone reverts <-- heresy! int-e: `` perl -e 'print"x"x459' #this is getting truncated HackEso: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx int-e: after 447 x characters. ais523: oerjan: fizzie: opinions on relaxing the signup procedures a little? the spambots have given up, but I'm not sure if they'd start again if they saw a relaxation int-e: which sport seems to produce lines of length 459? int-e: s/which/while/ fizzie: int-e: Well, right, but if it wasn't doing that funky balanced split the first test would've been testing a line of whatever maximum length distort uses. int-e: `` sed -i 3s/459/447/ bin/sport HackEso: bin/sport//cat "${2:-/dev/stdin}" >tmp/spout.raw; distort tmp/spout.raw | spore "${1-1}" int-e: `` sed -i 3s/459/447/ bin/distort HackEso: bin/distort//#!/usr/bin/env python \ import sys \ N = 447 \ name = sys.argv[1] if len(sys.argv) > 1 else "/dev/stdin" \ with open(name, "r") as f: \ data = ' \\ '.join(f.read().splitlines()) \ s = len(data) \ mw = len(str(2*s/N))-1 \ mw += s > ((N-2)*9-18*mw+1)*((10**mw-1)/9)-mw \ p=0 \ i=1 \ while (p in Smalltalk, as in Feather, in order to do I/O, you must first create the universe ais523, it seems quite capable of I/O... GUI is a form of I/O Sgeo: yeah exactly where does the GUI come from? it's written in Smalltalk, clearly and how does the GUI do its I/O? if you think about the issue for too long, you end up inventing Feather \ 873) ais523: intercal-72 HackEso: 2/2:c-intercal clc-intercal j-intercal yes all versions all versions \ 880) What I learned on the Prolog course is that it's a good language if you need a thing that can say "No" a lot. \ 747) you are like the linux torvalds of quiz engines \ 408) ais523, how are we supposed to guess before you tell us unless you give us more hints? int-e: `quote 873 HackEso: 873) ais523: intercal-72 c-intercal clc-intercal j-intercal yes all versions all versions int-e: that looks better int-e: I don't know whether 447 or 448 is right, so I'm going with 447. fizzie: int-e: Thing is, the N in there isn't the maximum length of the line it uses. int-e: it surely looks like that is what it's intended to be int-e: given all the compensation on line 13 fizzie: Sure, but it's not. fizzie: `` echo {a..z}{a..z} | tr -d ' ' | cut -c 1-886 | bin/distort | sed -e 's/^\(......\).*\(......\)$/\1..\2/' HackEso: aaabac..kilimi \ nioipi..qyqzra fizzie: `` echo {a..z}{a..z} | tr -d ' ' | cut -c 1-888 | bin/distort | sed -e 's/^\(......\).*\(......\)$/\1..\2/' HackEso: aaabac..kilimi \ nioipi..qyqzra \ rb fizzie: 886 characters (2*443) gets split to two lines; 888 (2*444) gets split to three lines. fizzie: If it was using (now) a line length of 447, it would accept a line of 894 characters and split it to two. int-e: I think there's just an off-by-one error in there oerjan: fizzie: distort sets off space for a line number prefix int-e: line 13, the -2 should be -3 to account for /, ) and an extra space. oerjan: `url bin/distort HackEso: https://hack.esolangs.org/repo/file/tip/bin/distort int-e: it does account for the width of the current line number, and of the total line numbers. fizzie: Oh, it does that as well? So complicated. int-e: I should write "it does seem to account" int-e: because I'm not really sure what happens on line 9. fizzie: Well, it's good enough for now. int-e: is there anything else that needs to know about the maximum message length... fizzie: The bot itself, arguably. Although I'm not sure how much that truncation matters. fizzie: https://bitbucket.org/fizzie/hackbot/src/tip/multibot_cmds/PRIVMSG/tr_60.cmd#lines-64 fizzie: Not that you could edit that from the inside. fizzie: I guess it does matter in the sense that it prevents incomplete utf-8 sequences in utf-8 text that has not been passed through distort. int-e: 448 is probably the right value there. oerjan: int-e: mw is the width of the literal for the number of lines. HackEso: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx HackEso: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx oerjan: line 8 makes an approximation that is sometimes 1 too low, and line 9 checks if it is. int-e: oerjan: Yeah. And line 9 actually does some geometric series stuff to compute how many digits in total we'll save because we start counting in single digit numbers. HackEso: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx int-e: fizzie: Oh, darn, I had already verified that this got cut off and 447, not 448 chracters. ais523: you know how we normally use cyclic tag to prove queue-based systems TC? sometimes it turns out to be too hard to impl in a particularly esoteric language, so I'm looking even simpler fizzie: int-e: Should distort then be 446, and truncate 447? ais523: I've probably spent over a week on Acyclic Tag fizzie: (Just wondering, because previously we had distort at 459 and truncate at 460.) ais523: the big improvement is that you don't have to be able to implement the wrapping from end to start of the table of productions oerjan: line 13, the -2 should be -3 to account for /, ) and an extra space. <-- it's just /, : and no extra space int-e: oerjan: aha. int-e: I got confused by stuff like 1/2:205) int-e: `` perl -e 'printf "x"x886' | sport HackEso: 1/2:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx HackEso: 2/2:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx int-e: It's all there :) int-e: `` perl -e 'printf "x"x887' | distory | wc HackEso: ​/hackenv/bin/`: line 5: distory: command not found \ 0 0 0 int-e: `` perl -e 'printf "x"x887' | distort | wc HackEso: ​ 3 3 890 oerjan: iirc line 9 basically works by calculating the maximal data length that could fit with that mw, and seeing if it's too small. int-e: line 9 sums a geometric series int-e: To ensure that mw really is the maximum width, and not accidently too large by 1. oerjan: surely it's too small by 1. it's adding a boolean, after all. oerjan: at least i had the foresight to make N a named variable for these occasions :P int-e: So the computation computes the length of the string that we can accomodate in 10^mw - 1 lines of output, where mw is the tentative value computed on line 8. If the string is longer than that, we increase mw by 1. int-e: Writing it as ((N-2)-2*mw)*(10**mw-1) + (10**mw-1)/9 - mw makes it somewhat easier to digest (for me at least). int-e: ((N-2)-2*mw)*(10**mw-1) is how many characters we can accomodate if all numbers 1..10^mw-1 are mw characters wide; (10**mw-1)/9 - mw sums (10**i-1)/9 - 1 for i = 1..mw, which is the number of extra characters that we gain because some numbers are shorter than mw digits. int-e: oerjan: You wrote this, apparently :) oerjan: yes. doesn't mean i recall exactly how i deduced the formula, but that sounds about right. oerjan: `hurl bin/distort HackEso: https://hack.esolangs.org/repo/log/tip/bin/distort int-e: `? cube HackEso: Cubes come in all sizes, colors, and materials, but only one shape. imode: I can't argue with that. int-e: `grwp companion HackEso: companion cube:There's cake inside it. Tear it apart, rip open your companion, and extract the delicious, delicious cake... \ mpanion cube:Aperture Science has created a talking cube - we call it the mpanion cube, because it's the opposite of the mute companion cube. ais523: an mpanion cube would be a time-reversed companion cube, wouldn't it? shachaf: Wy would co be time-reversing? ais523: well, it normally produces duals shachaf: I guess time-reversing seems like an odd sort of dual here. shachaf: I like the way in 2-categories you have two different kinds of duals, which are called co and op. lf94: what's the practical use of "cubical type systems" guys? lf94: easier to describe more complex types, rigorously? kmc: what's a cubical type system lf94: if i'm remembering correctly... something derived from homotopy type theory... lf94: which is about types in the realm of homotopy kmc: `quote lambda cube HackEso: 886) FOUR SIMULTANEOUS TYPE SYSTEMS IN A SINGLE ROTATION OF THE LAMBDA CUBE lf94: no, it isnt lambda cube kmc: unfortunately I don't understand HoTT at all kmc: so cannot help you lf94: from what I understand HoTT is defining types as a start and an end lf94: and then you get all the types inbetween for free or something... lf94: so imagine you have a type a -> b, and another type c -> d, well you can somehow get types inbetween these two... lf94: i'm probably totally fucking botching the definition. :) kmc: maybe shachaf understands HoTT shachaf: I sure don't understand cubical types. shachaf: Or HoTT. b_jonas: fizzie, int-e, oerjan, re line length: (1) note that some irc clients (some versions of xchat) ask for that obsolete feature by default where the server puts a "-" or "+" character before the message, that takes an additional char, and b_jonas: (2) use the environment variables $IRC_CHANNEL and $IRC_NICK to determine the length of the target; note that if $IRC_CHANNEL doesn't start with one of # or @ or + then it's a nick and $IRC_NICK will be the target of the reply cpressey: Good morning. I almost almost almost have another esolang. shachaf: Is (almost almost) almost = almost (almost almost)? cpressey: It probably probably probably is. int-e: shachaf: is that free association? Taneb: shachaf: I think that those are two different things wib_jonas: `ftoc -13 HackEso: ​-13.00°F = -25.00°C arseniiv: @tell ais523 I think ^ is described a bit incomprehensive on Acyclic tag page: what does “one command at a time” mean if the pointer points to a string of commands and there is no sub-pointer to count commands in that string lambdabot: Consider it noted. arseniiv: hm maybe it was already noted… arseniiv: I didn’t logread kspalaiologos: hello my fellow harp tuners kspalaiologos: ```sport HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ``sport: not found kspalaiologos: ``` sport kspalaiologos: what's this tool for kspalaiologos: `? sport HackEso: sport divides its input into irc-sized pieces and displays the nth (default first). The pipe version of `1. See also spore. kspalaiologos: LOVE IT HackEso: No output. kspalaiologos: ``` asmbf <<<"mov r4,.F/mov r1,.0/mov r2,r1/lbl 1/out r1/out r2/out 32/mov r3,r1/eq_ r3,.9/jnz r3,2/mov r3,r2/eq_ r3,.9/jnz r3,3/mov r3,r1/eq_ r3,r4/jnz r3,5/lbl 6/mov r3,r2/eq_ r3,r4/jnz r3,4/inc r2/jmp 1/lbl 2/sub r4,5/mov r1,r4/add r4,5/jmp 1/lbl 3/sub r4,5/mov r2,r4/add r4,5/jmp 1/lbl 4/inc r1/mov r2,.0/jmp 1/lbl 5/mov r3,r2/eq_ r3,r4/jz_ r3,6" HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<<[-]++++++++++++++++++++++++++++++++++++++++++++++++>[-]<[>+<<+>-]<[>+<-]<]>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>.>.>>>++++++++++++++++++++++++++++++++.[-]<<[-]<<[>>+<<<+>-]<[>+<-]>>>>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<[<<<<+>>>> kspalaiologos: amazing! kspalaiologos: ``` cat /hackeso/bin/asmbf HackEso: cat: /hackeso/bin/asmbf: No such file or directory kspalaiologos: ``` whereis asmbf HackEso: asmbf: /hackenv/bin/asmbf kspalaiologos: ```cat /hackenv/bin/asmbf HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ``cat: not found kspalaiologos: ``` cat /hackenv/bin/asmbf HackEso: tr / \\n | bfasm kspalaiologos: ```asmbf <<<"mov r4,.F/mov r1,.0/mov r2,r1/lbl 1/out r1/out r2/out 32/mov r3,r1/eq_ r3,.9/jnz r3,2/mov r3,r2/eq_ r3,.9/jnz r3,3/mov r3,r1/eq_ r3,r4/jnz r3,5/lbl 6/mov r3,r2/eq_ r3,r4/jnz r3,4/inc r2/jmp 1/lbl 2/sub r4,5/mov r1,r4/add r4,5/jmp 1/lbl 3/sub r4,5/mov r2,r4/add r4,5/jmp 1/lbl 4/inc r1/mov r2,.0/jmp 1/lbl 5/mov r3,r2/eq_ r3,r4/jz_ r3,6" HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ``asmbf: not found kspalaiologos: ``` asmbf <<<"mov r4,.F/mov r1,.0/mov r2,r1/lbl 1/out r1/out r2/out 32/mov r3,r1/eq_ r3,.9/jnz r3,2/mov r3,r2/eq_ r3,.9/jnz r3,3/mov r3,r1/eq_ r3,r4/jnz r3,5/lbl 6/mov r3,r2/eq_ r3,r4/jnz r3,4/inc r2/jmp 1/lbl 2/sub r4,5/mov r1,r4/add r4,5/jmp 1/lbl 3/sub r4,5/mov r2,r4/add r4,5/jmp 1/lbl 4/inc r1/mov r2,.0/jmp 1/lbl 5/mov r3,r2/eq_ r3,r4/jz_ r3,6" HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<<[-]++++++++++++++++++++++++++++++++++++++++++++++++>[-]<[>+<<+>-]<[>+<-]<]>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>.>.>>>++++++++++++++++++++++++++++++++.[-]<<[-]<<[>>+<<<+>-]<[>+<-]>>>>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<[<<<<+>>>> kspalaiologos: ``` asmbf <<<"mov r4,.F/mov r1,.0/mov r2,r1/lbl 1/out r1/out r2/out 32/mov r3,r1/eq_ r3,.9/jnz r3,2/mov r3,r2/eq_ r3,.9/jnz r3,3/mov r3,r1/eq_ r3,r4/jnz r3,5/lbl 6/mov r3,r2/eq_ r3,r4/jnz r3,4/inc r2/jmp 1/lbl 2/sub r4,5/mov r1,r4/add r4,5/jmp 1/lbl 3/sub r4,5/mov r2,r4/add r4,5/jmp 1/lbl 4/inc r1/mov r2,.0/jmp 1/lbl 5/mov r3,r2/eq_ r3,r4/jz_ r3,6" | sport HackEso: 1/7:+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<<[-]++++++++++++++++++++++++++++++++++++++++++++++++>[-]<[>+<<+>-]<[>+<-]<]>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>.>.>>>++++++++++++++++++++++++++++++++.[-]<<[-]<<[>>+<<<+>-]<[>+<-]>>>>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<[<<<<+>>> kspalaiologos: ``` asmbf <<<"mov r4,.F/mov r1,.0/mov r2,r1/lbl 1/out r1/out r2/out 32/mov r3,r1/eq_ r3,.9/jnz r3,2/mov r3,r2/eq_ r3,.9/jnz r3,3/mov r3,r1/eq_ r3,r4/jnz r3,5/lbl 6/mov r3,r2/eq_ r3,r4/jnz r3,4/inc r2/jmp 1/lbl 2/sub r4,5/mov r1,r4/add r4,5/jmp 1/lbl 3/sub r4,5/mov r2,r4/add r4,5/jmp 1/lbl 4/inc r1/mov r2,.0/jmp 1/lbl 5/mov r3,r2/eq_ r3,r4/jz_ r3,6" | sport 7 HackEso: 7/7:<<<<<-<+>>>>>>-]<<<<<<[>>>>>>+<<<<<<-]>[>>>>-<<<<[-]]>>>>>>++++++<<<<<<+>>>>[<<<<[-]<+>>>>>-]<<<<<[>>>>>+<<<<<-]>[<<<[-]>[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>[-]]>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] wib_jonas: fizzie: ^ Sigyn k-lined kspalaiologos fizzie: Hmm, that's not great. fizzie: I guess the whitelisting doesn't (and can't) really cover the case of people talking to the bot, in addition to the bot talking to people. wib_jonas: heck, it's just unlucky timing that this caught him before it caught me fizzie: Hmm, I think I'm too late for this: wib_jonas: I spam the channel way more than that fizzie: "If opped in your channel you can ask Sigyn to unkline an user, /msg Sigyn unkline , you have a dozen minutes to do so after the kill/kline, it only works if the user was banned due to abuse detected in your channel." fizzie: Guess it's still worth a try. wib_jonas: definitely too late, because the k-line isn't easy to undo fizzie: 15:55 'kspalaiologos' does not match any recent bans from #esoteric fizzie: Unfortunate. wib_jonas: check if you've typoed his name, I always do fizzie: I copy-pasted. wib_jonas: not from my chat, I hope fizzie: No, from the k-line message. int-e: it's been more than a dozen minutes, unfortunately fizzie: Yes, I was hoping "dozen" was the sort of very rough approximation. wib_jonas: at least kspalaiologos is still reading the logs wib_jonas: ideally we should teach one of our bots to recognize that particular spammer who was the reason why you invited Sigyn fizzie: Do you know if those kills are temporary? Looking at the code, there's some references to a "duration". wib_jonas: fizzie: I don't know, maybe ask #freenode or FireFly fizzie: I think it looks like they are, but I can't tell how long they are because that depends how they're configured it. wib_jonas: I mean, of course it's temporary compared to the heat death of the universe, the question is the scale fizzie: Arguably that testing would've probably been better on #esoteric-blah, but I don't think we want to be kline-strict about that sort of thing. wib_jonas: exactly wib_jonas: kicking and banning for 15 minutes it is fine wib_jonas: which is why a bot that you control could do it cpressey: On the bright side, "(Killed (Sigyn (Spam is off topic on freenode.)))" looks like some kind of S-expression. At least there's that. fizzie: Should we ask Sigyn to leave for now? I don't even know if there's a standard self-service way to do that. wib_jonas: fizzie: kicking them probably makes them leave wib_jonas: if not, then kickbanning them should fizzie: Sounds plausible. Opinions? Is it too unsafe to have, given the sort of thing this channel does? wib_jonas: or you could ask nicely wib_jonas: Sigyn: fizzie would like to ask you to leave now kspalaiologos1: what just happened wib_jonas: kspalaiologos1: the real kspalaiologos got k-lined. if you're the same person, you probably shouldn't sneak back in because freenode may get angry about k-line evasion wib_jonas: kspalaiologos1: Sigyn is a bot that tries to catch spammers, let me find in the channel logs where we discussed it kspalaiologos1: the heck is kline wib_jonas: started https://esolangs.org/logs/2019-10.html#ljbb kspalaiologos1: I've already taken a peek at the logs wib_jonas: kspalaiologos1: a ban from the whole network, as opposed to a ban that bans only from a channel wib_jonas: there are also lines with other letters that I don't follow kspalaiologos1: now I understand why so few people still sit on IRC int-e: fizzie: the real target(s) never showed up :/ wib_jonas: https://esolangs.org/logs/2019-10.html#lKx and https://esolangs.org/logs/2019-10.html#lEq were the earlier spam kspalaiologos1: wasn't me kspalaiologos1: if you havent noticed kspalaiologos1: the real me was registered wib_jonas: ksp: yes, I know wib_jonas: it was quite obvious kspalaiologos1: why do you think its obvious kspalaiologos1: somebody took the bait wib_jonas: I'm just saying that after those things, fizzie got annoyed and invited Sigyn in wib_jonas: as you can see https://esolangs.org/logs/2019-10.html#ljbb wib_jonas: kspalaiologos1: I don't think anyone did kspalaiologos1: I remembed someone did after taking a peek at the logs wib_jonas: int-e: they may be waiting, it's only been two weeks; or they may have showed up but got scared of Sigyn and left int-e: wib_jonas: there is that possibility. kspalaiologos1: well, I hate it that I'm recognized so much lol wib_jonas: int-e: there were four or five days when he didn't show up before the spam that made fizzie invite Sigyn wib_jonas: kspalaiologos1: it's not that I recognize you specifically, but I can distinguish you from someone who spams yellow JS JS JS kspalaiologos1: I didn't mean this kspalaiologos1: i constantly find people trying to annoy me, lie away my rep kspalaiologos1: it's sad, but well, happens kspalaiologos1: I've already sent a kind letter to the kline at freenode int-e: will Sigyn trigger on any bfasm attempt now, I wonder int-e: (and no, I won't try!) kspalaiologos1: I hate when that happens wib_jonas: hopefully kspalaiologos will now be more cautious and experiment in either private message or some other channel kspalaiologos1: I didn't know I can get banned kspalaiologos1: I think I'll get unbanned eventually wib_jonas: though what channel there is where you can spam j-bot now I've no idea, because it doesn't seem to be in either #ijx or #jeval, the two botspam channels that we used to use wib_jonas: but it does accept private message, with slightly different confusing syntax kspalaiologos1: I'll see you back in around a week fizzie: Yeah, let's maybe try ask Sigyn to leave (feel a bit bad for wasting Freenode op time for the whitelists, but I guess that's what they're there for) and if we get spam problems, investigate something a little less drastic. Just a shame there doesn't seem to be an easy way to get the benefits (outsourced spamminess detection, network-level kills from real spamming). kspalaiologos: my IRC client was trying to reconnect me since 4pm every 10 seconds kspalaiologos: and I'm in for some reason fizzie: kspalaiologos: We had help from a Freenode/Sigyn administrator to undo the kline. kspalaiologos: alright glguy: kspalaiologos: You should have gotten a response to your support ticket from me. int-e: hi glguy glguy: Hello :) kspalaiologos: I'll check kspalaiologos: but I guess there is no need glguy: It's just good to know if the responses aren't working in case you have some trouble in the future :) lf94: How do natural languages get their names? lf94: English, Francais, ... FaeFly: from the people who nominally speak them, usually? FaeFly: e.g. the English speak English imode: I think he was expecting the etymology behind the names. FaeFly: Well, sure, but I would expect all the different peoples' names to have different etymologies, I don't think there's really a collective answer there imode: lf94: https://www.google.com/search?hl=en&q=etymology%20of%20the%20word%20english imode: the infobox is useful. imode: I can see how that can be twisted into "English" lf94: https://www.etymonline.com/word/English?ref=etymonline_crossreference lf94: this is way better FaeFly: oh https://en.wikipedia.org/wiki/Angles#Name is probably better lf94: England -> English lf94: I'm sure of it lf94: Internet lf94: Interish lf94: Intrish FaeFly: Onlinean? imode: huh, wasn't aware of the anglia penninsula. imode: s/nn/n lf94: I'm defining "the language of internet citizens" imode: how can you define that which is all. FaeFly: (I wonder if 'Onlinean' would be pronounced "online|ean" or "on|linnean") lf94: https://www.etymonline.com/search?q=french lf94: They almost literally did "frenish" too lf94: A similar contraction of -ish is in Dutch, Scotch, Welsh, lf94: this website is fuckin' awesome FaeFly: yes, etymonline si nice lf94: So if we "live" in the "realm" of say, an array or list programming paradigm... lf94: listch could be a good language name lf94: arrish lf94: arrich is easier to hear FaeFly: the swedish name for Sweden ("Sverige") stems from "Svea rike", which is lit. "realm of Svea" (the tribe that ended up uniting the different parts of modern-day sweden basically) lf94: conveyich <- conveyor belt (array) based lang B) imode: otherwise known as mode. lf94: imo if you called it conveyich it'd be easier to remember lf94: convich FaeFly: conveyor belt? reminds me of Rube FaeFly: and Rubicon imode: lf94: we'll start a fork and call it conveyich. imode: then I can sell conveyich ++ premium features as mode for $19.99 + tax. imode: what could go wrong. lf94: actually. lf94: i would like to see pay-for language examples. lf94: I've only seen things like lisp or scheme interpreters be paid-for imode: forth implementations have sometimes been paid-for. imode: I'm working on ways to specify and consume arrays. imode: i.e ` : range [ dup$ roll until $0 do dup$ $1 - repeat drop last ] ; imode: inserts the proper markers in the queue. lf94: imode lists / matrix languages are the future I think imode: languages with semantics and implementations you can hold in your head are the future. imode: because you can't lose track of them. ais523: arseniiv: well, the point is that it doesn't push the string as a whole onto the queue, rather it pushes each command in the string onto the queue arseniiv: ais523: ah. (But that one was obvious for me personally.) But maybe it would be good to rephrase differently anyway ais523: is that a better description? arseniiv: ais523: I think yes! arseniiv: anyway this reminds me my pages usually lack usual examples which would be useful to understand what do commands mean; your trace immediately gave me a clear image what ^ does arseniiv: s/usual/useful b_jonas: lf94: (1) sometimes you have to pay for the language standard, or learn from secondary sources. this is the case for Standard ML. b_jonas: lf94: (2) paying for the compiler is more common: b_jonas: large business users have to pay for microsoft's compiler b_jonas: there's a commercial prolog implementation b_jonas: you have to pay for Mathematica and for maple int-e: Delphi b_jonas: there's more but I don't recall all of that int-e: I suppose icc has a commercial plan as well? b_jonas: free software didn't use to be the norm in the past b_jonas: back then, you payed for everything int-e: p*ed anyway b_jonas: by the way, there's a certain esoteric commercial model that you could do: b_jonas: when microsoft offers a version of their compiler for individuals and small businesses, but makes large businesses pay, they use legal threats for that b_jonas: they claim that it's illegal for you to use the compiler if you're a large business imode: for what definition of large business. b_jonas: rather than that, an esolang could use documentation threats: document that if you use the free version and you're a large business, then every program runs into an undefined behaviour b_jonas: lawful developers will fear to rely on that the compiler happens to work now, because if the docs say that it's undefined behavior, then it could break any time, b_jonas: so they will pay b_jonas: imode: dunno, Microsoft has a whole license agreement and whatnot for this b_jonas: I don't know the details b_jonas: imode: imagine 30 day trial period instead if you prefer, b_jonas: same enforcement methods apply int-e: E774 RANDOM COMPILER BUG. imode: hahahahahahahaha. imode: "hey my code does X when it should do Y" "have you paid the troll toll?" ais523: it's literally a random compiler bug, something like 10% chance IIRC ais523: however there is a command-line option to turn it off ais523: (CLC-INTERCAL has /two/ random compiler bugs and the more obvious command-line option only turns one of them off) ais523: that said, you normally have to turn it off in practice if you're doing anything remotely automated kspalaiologos: b_jonas, "you have to pay for Mathematica" kspalaiologos: yes, sure imode: I refuse to give money to Wolfram. kspalaiologos: so do I b_jonas: Mathematica is probably the best example, because they actually sell decent software, b_jonas: the evil part is only how they sell it: imode: shame it's not by decent people, though. kspalaiologos: how do they sell it though? kspalaiologos: I'm not interested in financial part of Mathematica kspalaiologos: what's wrong with this b_jonas: they give almost free copies to students, who learn the program it, and then, of those, then ones who turn out to be code monkeys and decide that they can only use a programming language if they were taught it at school, they will now have to buy Mathematica because they didn't take a Java course b_jonas: it's like giving free drugs to children b_jonas: Wolfram the founder is also a bit crazy, but he doesn't, like, personally develop the whole thing, so it doesn't matter imode: any paid language ecosystem will eventually fall prey to open source alternatives because the majority of interested individuals are predisposed to like "free and equivalent ais523: during the (2,3) Turing machine thing, Wolfram asked me to write Mathematica versions of the code I'd written (fair enough given the context), and gave me a /trial/ version of Mathematica to do it on (not even a perpetual license), so I didn't end up using it much beyond translating the code b_jonas: imode: that didn't happen to matlab int-e: b_jonas: is this what they call edutainment b_jonas: oh yeah, I forgot about matlab b_jonas: matlab is the best fucking example b_jonas: I see so many people using it for some reason imode: ais523: were you aware of wolfram's reputation at the time? ais523: my opinion on Mathematica is that the language itself is pretty terrible (it's basically an esolang, but not a tarpit), but the standard library is excellent b_jonas: despite that it has an actually better free software alternative, octave b_jonas: I seriously don't get it ais523: imode: well, I'd read /A New Kind of Science/ b_jonas: ais523: yes, it's the standard library that is good b_jonas: but you get the standard library for money b_jonas: there are actually one or two clones of the core language I think ais523: the core language isn't really that different from Lisp + pattern-matchinig b_jonas: ais523: I won a student license of Mathematica once, but I think it was limited for one year or something b_jonas: I didn't really use it for anything b_jonas: the university has the free student copies that they use for marketing, plus there are illegal copies int-e: b_jonas: Matlab has all those ready-made toolboxes for various domains and the option of generating efficient code for simulation from it... and a strong userbase. kspalaiologos: mathematica is really good one though kspalaiologos: paywall is quite big though int-e: ("efficient" is certainly relative) b_jonas: int-e: but it doesn't seem to me like people are using those ready-made toolboxes b_jonas: the ones where I'm confused about using matlab that is b_jonas: hmm, cpressey isn't here, he'd have an opinion on this stuff b_jonas: I admit that I'm biased against matlab because of how it manages to have a huge artificial difficulty in the source code format, more serious than python's indentation or java's one class per file b_jonas: matlab requires that you put every function in a separate file b_jonas: that and the one-based indexing ais523: Java doesn't actually have a one class per file restriction, it's just that you can't refer to a class from other files if its name doesn't match the filename ais523: (because the compiler wouldn't know where to look for it) ais523: you can put an entire Java program in one file if you want to int-e: and it will compile to a merry collection of dozens of class file int-e: and then you put those into a jar, or you can do some class loading magic yourself instead b_jonas: I hat one-based indexing. b_jonas: basic, lua, matlab, gap, mathematica: I hate your stupid one-based indexes, and I hope you painfully stub your toe on an off-by-one error arseniiv: int-e: but it doesn't seem to me like people are using those ready-made toolboxes => I think we had a course on fuzzy inference or something, with lab tasks (how are they called properly?..) written for IIRC such a toolbox. Though I hadn’t done them and I don’t like fuzzy math in any form anyway ais523: some golfing languages use 1-based indexing, possibly so that they can use 0 to mean "last element", but it often seems to cause trouble there too ais523: I blame English for this, if the word for "first" were based on the word for 0, the word for "second" were based on the word for 1, and so on, there wouldn't be any confusion arseniiv: that and the one-based indexing => and Mathematica too :( b_jonas: ais523: but they're not based on "one" and "two" either. people could just go 0:first, 1:second, 2:twoth, 3:threeth, 4:fourth, 5:fifth, 6:sixth, 7:seventh, 8:eightth imode: huh, 0-means-last... interesting. b_jonas: unless nobody can pronounce "eightth", in which case it would have to be the traditional "eighth" instead ais523: b_jonas: yes, but there'd be no real advantage to that ais523: you should at least fix the off-by-one error in the process arseniiv: I blame English for this, if the word for "first" were based on the word for 0, the word for "second" were based on the word for 1, and so on, there wouldn't be any confusion => how many languages do have that, though? int-e: b_jonas: maybe the base should depend on the variable name. z[] would be zero-based, o[] would be one-based, m[] would be -1-based, t[] would be two- or three-based depending on the phase of the moon int-e: f[] would be 42-based. b_jonas: int-e: ouch arseniiv: b_jonas: or “eighttp” ais523: arseniiv: for all I know, /all/ natural languages get this wrong :-D arseniiv: ais523: same with me, so I think this is a deeper problem b_jonas: yes, it's apparently a universal default among languages, though that at least means there are no problems when translating indexes b_jonas: in every language, you have to make it clear whether you're using one-based or zero-based, so translation of that part is mostly trivial int-e: one. first. hmm. int-e: no problem at all! int-e: I don't think there's any wrong or right here, actually. arseniiv: pretty esoteric question BTW: am I getting it right that ΓL(V) for a complex vector space V is way bigger that GL(V) ⊕ GL(V̄) (V conjugate here) due to shady automorphisms of C stemming from the axiom of choice? int-e: When assigning the first item a number, do you do that before or after counting it? That's the main distinction between 0- and 1-based counting. ais523: I think the trick is to see the items as size-1 things rather than size-0 things with size-1 gaps between them ais523: the first item goes from 0 to 1, the second from 1 to 2, the third from 2 to 3, and so on ais523: specifying the /end/ of an item when counting it on its own is perverse ais523: but for a range, you specify the start of the start of the range, and end of the end of the range int-e: I don't see the perversion. b_jonas: ais523: oh, about indexing. you're in the UK, so you probably use public transport sometimes. you're on a bus (or train), and a lady asks where you have to get off if she wants to go to X. you know that (a) she has to get off after the bus has opened its doors three times and closed them twice (the bus is now between stops), (b) after the bus has opened its doors three times and closed them three times b_jonas: (the bus is currently at a stop). how do you tell them when she has to get off? b_jonas: bus stops are what keep making me uncertain that zero-based indexing is always the right choice. ais523: on a train I would use the name of the stop, that's easier than counting (and I'd list the names of the stops in between if it were necessary to give an approximate count) ais523: on a bus I wouldn't be confident of counting the stops correctly, in Birmingham bus stops are very frequent and are ignored by the driver unless someone inside or outside asks the bus to stop, so when there's a little-used stop it's easy to forget it exists b_jonas: ais523: yeah, it's easy in civilized countries where you can rely on the bus or train always telling the passengers the name of the stop in easy to see ways b_jonas: I don't buy that it's always like that though, because I've traveled to western europe, and even there people are sometimes uncertain about which stop the train is at b_jonas: locals too ais523: actually, when used I take the train home late at night, there was an above 50% probability that someone would miss their stop int-e: Bus stops have a perfectly natural zero-based counting interpretation. ais523: but the local train company is investing in new technology to make the name of the stop clearer int-e: You get on the zero-th stop. ais523: anyway, if someone asks you /anything/ on the bus, it is almost certainly between stops; the dwell time at a stop is normally very short, and if it isn't, the environment inside the bus will be too chaotic to do much asking/answering of questions ais523: b_jonas: that's possible, but very few people use bus stop names here ais523: normally they'll just describe the place where they get off ais523: the bus stops /have/ names but they're not widely used, I think they exist only for administrative purposes ais523: (the buses used to have an instruction "please tell the driver which stop you plan to get off at when buying your ticket", I managed to cause confusion by being one of the only people to actually follow this instruction) b_jonas: how do you look up the timetable of buses on the internet if you're not in the bus stop where you want to get on yet? b_jonas: because we use the name of the bus stop for that b_jonas: of course, you don't have to remember the exact name, just choose it from the list of stops on the bus line kspalaiologos: I finished my minesweeper kspalaiologos: but I made it in malbolge just so it's harder arseniiv: the first item goes from 0 to 1, the second from 1 to 2, the third from 2 to 3, and so on => yeah, one time I tried to make some notation for two interleaved Z’s, specifically to make off-by-1 harder^W easier to reason about kspalaiologos: I'm using the same assembler for malbolge and brainfuck so possibly I could supply you with a runnable version b_jonas: ais523: is that because tickets can have different prices depending on the destination? kspalaiologos: for curious: https://github.com/kspalaiologos/malbolge-chess/raw/master/minesweeper.7z ais523: b_jonas: this is what our online timetables look like: https://nxbus.co.uk/files/NX-West-Midlands/current_timetables/2019-Timetables/1st-Sept-2019/6163tt01September2019.pdf b_jonas: kspalaiologos: what? weren't you writing it in bf? kspalaiologos: but I compiled it to malbolge and optimized a bit by hand ais523: the 63 route probably has over 100 stops but the timetable only lists a few important ones that most people will recognise kspalaiologos: for a cool twist b_jonas: ais523: I see ais523: for stops in between, you interpolate kspalaiologos: I can supply you a brainfuck version in a second ais523: (the bus driver will only aim for consistent timings at stops actually listed in the timetable, if they get to one of those stops early they have to wait) int-e: b_jonas: it's a sort of assembler arseniiv: existence of zero is a pain here, as we would want names for “gap integers” to be symmetric wrt sign inversion, and then we almost ruin any sense of inventing them at all b_jonas: ais523: I see ais523: also, tickets used to have widely varying prices depending on destination, but the system was simplified many years ago now ais523: there are basically only five types of adult ticket: one for a single short journey, one for a single journey of any length, a day ticket limited to one operator within a certain area, a day ticket limited to one operator but allowing you to use any of their buses no matter how far they go, and a day ticket that works on all the buses in the conurbation ais523: this leads to only two things that need memorizing (how far a "short journey" is – in practice the bus drivers often seem to not know this or get it wrong; and where the boundaries of the areas for local day tickets are) int-e: arseniiv: yeah if there is a mistake then it's using the same numbers for both points (fence posts) and intervals (fence segments) int-e: arseniiv: once you conflate those you will make an arbitrary choice... and cause upset if you mix those two choices :) shachaf: I agreent-e ais523: oh, also the prices on some of these drop after 9:30am, but that doesn't change where the ticket is usable b_jonas: This year, I traveled on public transport in five different areas abroad, and at each place I knew at least a little how the pricing system works, but now I forgot most of it shachaf: Though I haven't read any of the context so I assume this is about array indexing. ais523: it just depends on when you buy it int-e: I wonder whether the inclusive choice (picking 1 for 0--1) is somehow psychologically more appealing. int-e: Because that could explain why so many (all?) natural languages agree on that. arseniiv: int-e: shachaf: I agree with all of us also. We only need to think up appropriate names and decide would they be for things or intervals b_jonas: in Amsterdam, Rotterdam and London, I used pre-charged proxy cards for paying shachaf: https://blog.nelhage.com/2015/08/indices-point-between-elements/ describes it pretty well. arseniiv: maybe because of there was no concept of zero for so long int-e: shachaf: and I totally agree with that pointer view on zero-based indices in programming languages. b_jonas: in Amsterdam, the system is that prices for metro and tram vary depending on source and destination stations, so you have to check in and out with the card, in the stations for metro but the vehicle on trams; but on bus, there's a single fair, so you only check in with the card, not out b_jonas: London has a system similar to that b_jonas: but it's a bit confusing because london has three different types of urban rail lines, not just two like in other places int-e: (C got that one wrong for variable-sized arrays at the end of structs.) shachaf: int-e: How do you mean? b_jonas: but the vending machines were a pain: sometimes they don't accept bank card, only cash, and only low denomination cash too; sometimes they pre-validate your ticket and sometimes they don't and I couldn't tell when they'd do which one, I wasted at least one ticket on that int-e: (Or maybe I'm confusing myself?) int-e: Oh, this was an older version of C that didn't have variable sized arrays so you would be forced to write T foo[1]; instead. b_jonas: it's all confusing int-e: I'm probably still confused. Will check, but not now. arseniiv: indices pointing between elements is practical, I agree, but we could accidentally start these from 1 too and not break anything, so there should be a stronger argument for 0-based. Personally I like 0-based naturals too, but these for obvious combinatorial/foundation-theoretic reasons shachaf: C99 has "flexible array members", struct T { ...; char array[]; }; ais523: Birmingham doesn't require explicit ticket validation; tickets might be checked anywhere on the route (start, during, end, multiple times, not at all), and might or might not be marked when checked to prevent you reusing them arseniiv: wow vararg struct b_jonas: maybe because of there was no concept of zero for so long => how would that influence me? there was a concept of zero when I was born, and when the textbooks I've read were written int-e: arseniiv: 0 is at distance 0 from the start! shachaf: Indices pointing between elements should definitely start at 0. shachaf: For an array with n elements there are n+1 indices, going from 0 to n. arseniiv: int-e: and something unknown is at distance 0 from the end :( b_jonas: ais523: that's how train tickets work here, so in exchange you always have to specify the two ends of the journey and the route shachaf: That reminds me of this diagram I made once: https:/slbkbs.org/ranksel.svg arseniiv: though it’s an argument equally against 1-based too :D int-e: arseniiv: C does this a lot... pointers are allowed to point just after the end of an array (that is, *at* the end of the array in the distance view), but you are not allowed to dereference them. arseniiv: For an array with n elements there are n+1 indices, going from 0 to n. => yes that rings true for me shachaf: Yes, which is very reasonable. int-e: arseniiv: So C gets it right, it just describes it in an awful way. shachaf: But what happens if your last array element is at UINTPTR_MAX? kspalaiologos: https://github.com/kspalaiologos/malbolge-chess/raw/master/minesweeper.bf arseniiv: so how should we denote index numbers int-e: (:P because I wrote earlier that there is no right or wrong here) kspalaiologos: brainfuck version ais523: b_jonas: I guess bus tickets are validated in the sense that they can only be purchased at the start of the journey, and have the time at which they're purchased on them, that's basically a form of validation kspalaiologos: requires unbuffered input (e.g. the DOS getch()) kspalaiologos: it's quite fast actually b_jonas: ais523: that's how single tickets worked in Germany, which confused me ais523: (exception: you can buy day tickets for future days, or even for unspecified future days, in the latter case you have to mark the day on them yourself before you start using them) shachaf: int-e: There may be no right way, but surely there are wrong ways? arseniiv: or for that reason, element… names kspalaiologos: it's 1:1 equivalent of what I've got with Brainfuck arseniiv: α β γ δ like the old nomenclature for aminoacids? b_jonas: ais523: and day tickets sometimes worked that way, but sometimes you had to validate them the first time you use them to set the start time int-e: shachaf: True, but I was only considering the two reasonable options for counting. arseniiv: 0 α 1 β 2 γ 3 δ 4 int-e: For counting fence segments, that is. b_jonas: ais523: but my problem is that it wasn't clear for me from the vending machine interface what I'll get before I pay ais523: on the trains, single tickets can be bought in advance, and there are flexible options that can be used at any time during the day in question ais523: those often aren't validated at all on short journeys b_jonas: ais523: yes, that's how trains in Germany work ais523: on longer journeys it's quite likely that a member of the train company will come round while you're sitting on the train and validate it mid-journey b_jonas: ais523: right, and I think that job is called controller ais523: (to prevent you using it on a second journey in the same directoin later that day) b_jonas: or ticket inspector? ais523: "conductor" is the most commonly seen word in English, but I think it's a historical relic and not accurate ais523: "ticket inspector" would be clear int-e: it's a cultural thing though... other countries have gates at platforms where you show your ticket or invalidate it with some machine. int-e: when entering and leaving shachaf: Obviously if you write a loop it should loop over values that computers represent naturally, like integers, rather than Greek letters. b_jonas: ais523: oddly, on some trams in Rotterdam, there are three separate jobs for the driver, the conductor, and the ticket inspector ais523: https://en.wiktionary.org/wiki/conductor#Noun definition 3 ais523: int-e: the UK has those too, but only at some stations b_jonas: and the conductor sits behind a huge circular desk that takes up way too much place of the train b_jonas: of the tram ais523: they're expensive to run because you need a contingency plan for if someone turns up without a valid ticket ais523: and thus can't get through the gate b_jonas: that would never work here, because the trams are so full int-e: I thought people were bad conductors. arseniiv: BTW what does an invariant and reasonably symmetric definition of https://en.wikipedia.org/wiki/Cross-ratio looks like? I’ll reinvent it myself but if anybody knows it’ll be quicker int-e: Hmm, I knew meanings 2, 3, 4. But not the more generic meaning 1? b_jonas: yes, London, Amsterdam, Rotterdam all have automatic gates for the metro stations that read the proxy cards b_jonas: well, not quite ais523: normally this means that when you have a ticket barrier, you need an employee on the platform side of the barrier with tickekt-selling equipment b_jonas: int-e: they didn't seem to provide any useful service, so yes int-e: b_jonas: I used meaning 4 of course. int-e: More specifically the electrical one. b_jonas: int-e: basically they sometimes had a microphone, and sometimes yelled at people or told where we are, all of which the automated system with recorded voice also did, but the conductor could preempt it arseniiv: I mean, suppose we have some vector space V without inner product; then we take four coplanar lines from there and we should be able to get their cross ratio ais523: in some stations in London, there's someone who operates a public address system and simply tells the passengers where to move to stop them getting in each others' way ais523: because the crowds can be so large that you can't rely on everyone in them to act sensibly without instructions ais523: I guess that's comparable to the type of conductor b_jonas is talking about? except for platforms rather than on the tram b_jonas: mind you, the most annoying speaker system I've met is in the Amsterdam Schiphol airport. they have captions everywhere that it's a "silent airport" so there are no announcements on the speaker about airplanes starting, you should look at the displays instead, b_jonas: but the airport has long corridors with walking strips, and there are speakers that say "Mind your step" every time someone is near the end of one of those strips arseniiv: I thought people were bad conductors. => why, that’s mainly because of skin resistance. If the skin is wet or wounded, it plummets b_jonas: so you hear "Mind your step" in the same voice repeated a hundred of times when you're there b_jonas: I don't understand how that's supposed to help anyone int-e: arseniiv: what do you mean by "invariant" b_jonas: ais523: yes, probably int-e: arseniiv: Oh yeah there's a Darwin award for that. arseniiv: int-e: it shouldn’t use distances (which aren’t here, after all), it shouldn’t use coordinates int-e: arseniiv: https://darwinawards.com/darwin/darwin1999-50.html b_jonas: ais523: here we have people continuously guarding platforms on on metro M4, because that's the only one that's driver-less. b_jonas: basically they replace the drivers. b_jonas: it sort of makes sense, because in an exceptional situation, they have to act in the stations anyway, not anywhere else ais523: right, at the moment person-trapped-in-door-detection technology is not cost-effective enough to be good enough to be safe without a person checking for that b_jonas: so even though it takes about as many employees as there would be drivers, it works better b_jonas: and they're probably payed less than drivers too ais523: in the UK it's usual for the person in question to travel on the train, but they could be on the platform ais523: that said, it's only metros that have the principle of "emergencies mostly happen at stations", on long-range train lines they're more likely to happen somewhere else, so the human supervision definitely needs to be on the train in that situation ais523: (actually, some really big stations, like Birmingham New Street, have their own staff that check the trains for safety before leaving, that gives the staff on the train a break) b_jonas: oh yeah, in London, one of the three urban rail types is driverless, but still has conductors on some carriages ais523: IIRC not consistently, it's driverless on some lines but not others b_jonas: ais523: it's not just that. it's more like that trains are rarer, so there are much fewer trains than train stations, so it would be expensive to have someone man every station; whereas there are about as many metro trains as metro stops. b_jonas: well, still not quite b_jonas: but the ratio is better ais523: in general it's unwise to expect consistency from London transport, because a) most of the lines were built at different times, taking new technology into account; b) not all the lines are upgraded at the same time; c) many lines need to make compromises due to the presence of other lines b_jonas: probably more than half as many metro trains than metro stations b_jonas: also on trains, the conductor doubles as the ticket inspector between stops ais523: if you count trains vs. stations it may be comparable; but if you count trains vs. platforms, there are many more platforms ais523: (for metros, that is) b_jonas: ais523: yes, you can see that from how narrow some of the passenger tunnels are b_jonas: they wouldn't allow building such narrow ones these days b_jonas: but you can see the inconsistency here too: that's why all stops of metro M4 have elevators, but no stops of the other metros do ais523: London is basically like a foreign country, to people living elsewhere in the UK b_jonas: ais523: yeah, and I only ever visited London so far b_jonas: maybe I'll see more if you organize that #esoteric meeting b_jonas: although with so many people leaving and returning, I don't know if UK people are still the pluarlity in here b_jonas: I don't recall where some of the newcomers and returning esolangers live ARCUN: Is it possible, to modify a C compiler such as gcc, in order for it to compile a variant or derivative of C? kmc: ARCUN: yes, of course zzo38: Yes, but I don't know how difficult it is. kmc: in fact gcc already compiles many variants or derivatives of C zzo38: (Probably, how difficult it is, depend on the variant of C) kmc: it supports several revisions of the C spec and numerous non-standard extensions, not to mention C++ and Objective C zzo38: Yes, some of the GNU extensions I think is good and I use them, such as writing ?: with nothing in between, and supporting zero-length arrays. kmc: what does ?: with nothing in between do? ARCUN: I was thinking of modifying it so that an esolang looking similar to that of an obfuscated C program shachaf: x?:y means x?x:y ARCUN: With a few quirks shachaf: C99 has flexible array members. Why do you need zero-length arrays? zzo38: I don't really like flexible arrays, and I think zero-length arrays is clearer and fits with everything else, rather than being something separate. oerjan: x?:y means x?x:y <-- without reevaluation, presumably. int-e: shachaf: to allocate a struct with a variable array element that's empty shachaf: What do you mean? zzo38: That is one use of zero-length arrays, yes. But, there are also some other possibilities int-e: and proper sizeof computations, perhaps. still haven't checked what the issue was there. shachaf: int-e: Do you like this? https://www.researchgate.net/profile/Alexander_Nadel/publication/325968980_Chronological_Backtracking/links/5b3a08e84585150d23ee95c8/Chronological-Backtracking.pdf int-e: by default, no shachaf: Unrelatedly, what do you think of this chronological backtracking thing? shachaf: "In particular, the decision level of the variables in the assignment trail is no longer monotonously increasing." zzo38: I noticed in the log the discussion of the one-based indexing in Lua, BASIC, Mathematica, etc. In BASIC you can start arrays at whatever integer index you want, but strings start at 1. oerjan: `cat bin/asmbf HackEso: tr / \\n | bfasm oerjan: `sled bin/asmbf//s/^/print_args_or_input "$@" |/ HackEso: bin/asmbf//print_args_or_input "$@" |tr / \\n | bfasm b_jonas: zzo38: yes, it's partly the strings that bother me, partly the indexed property interfaces I access, which are sometimes 1-based and sometimes 0-based oerjan: `bfasm mov r4,.F/mov r1,.0/mov r2,r1/lbl 1/out r1/out r2/out 32/mov r3,r1/eq_ r3,.9/jnz r3,2/mov r3,r2/eq_ r3,.9/jnz r3,3/mov r3,r1/eq_ r3,r4/jnz r3,5/lbl 6/mov r3,r2/eq_ r3,r4/jnz r3,4/inc r2/jmp 1/lbl 2/sub r4,5/mov r1,r4/add r4,5/jmp 1/lbl 3/sub r4,5/mov r2,r4/add r4,5/jmp 1/lbl 4/inc r1/mov r2,.0/jmp 1/lbl 5/mov r3,r2/eq_ r3,r4/jz_ r3,6 HackEso: No output. oerjan: curious b_jonas: oerjan: try starting with `asmbf rather than `bfasm zzo38: b_jonas: What indexed property interfaces is that? int-e: shachaf: it's always good to revisit design decisions oerjan: oh duh oerjan: `asmbf mov r4,.F/mov r1,.0/mov r2,r1/lbl 1/out r1/out r2/out 32/mov r3,r1/eq_ r3,.9/jnz r3,2/mov r3,r2/eq_ r3,.9/jnz r3,3/mov r3,r1/eq_ r3,r4/jnz r3,5/lbl 6/mov r3,r2/eq_ r3,r4/jnz r3,4/inc r2/jmp 1/lbl 2/sub r4,5/mov r1,r4/add r4,5/jmp 1/lbl 3/sub r4,5/mov r2,r4/add r4,5/jmp 1/lbl 4/inc r1/mov r2,.0/jmp 1/lbl 5/mov r3,r2/eq_ r3,r4/jz_ r3,6 HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<<[-]++++++++++++++++++++++++++++++++++++++++++++++++>[-]<[>+<<+>-]<[>+<-]<]>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>.>.>>>++++++++++++++++++++++++++++++++.[-]<<[-]<<[>>+<<<+>-]<[>+<-]>>>>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<[<<<<+>>>> oerjan: `1 asmbf mov r4,.F/mov r1,.0/mov r2,r1/lbl 1/out r1/out r2/out 32/mov r3,r1/eq_ r3,.9/jnz r3,2/mov r3,r2/eq_ r3,.9/jnz r3,3/mov r3,r1/eq_ r3,r4/jnz r3,5/lbl 6/mov r3,r2/eq_ r3,r4/jnz r3,4/inc r2/jmp 1/lbl 2/sub r4,5/mov r1,r4/add r4,5/jmp 1/lbl 3/sub r4,5/mov r2,r4/add r4,5/jmp 1/lbl 4/inc r1/mov r2,.0/jmp 1/lbl 5/mov r3,r2/eq_ r3,r4/jz_ r3,6 HackEso: 1/7:+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<<[-]++++++++++++++++++++++++++++++++++++++++++++++++>[-]<[>+<<+>-]<[>+<-]<]>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>.>.>>>++++++++++++++++++++++++++++++++.[-]<<[-]<<[>>+<<<+>-]<[>+<-]>>>>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<[<<<<+>>> oerjan: a bit more convenient to use that way kmc: getting pretty fucky in here oerjan: i'm finished with that hth oerjan: just adding *_args_or_input on principle b_jonas: zzo38: uh, I don't remember the details. something about specific VBA interfaces of this siemens thing. oerjan: that kline is particularly ironic since iirc Sigyn was invited because of someone stalking em int-e: s/is/was/ oerjan: well i haven't finished the logs yet int-e: just putting it out there ;-) imode: so I have a compiled concatenative language that I'd like to add logic programming features to. metamath seems like a reasonable starting point because, as far as I can remember, it's concatenative with respect to the proof steps. imode: anybody know how verifiers in metamath work, or have any down-to-earth information about the language? imode: there's a rather verbose introduction on wikipedia but I've yet to encounter an "all-encompassing documentation set that walks you through some example proofs. imode: maybe the metamath book would be a good starting point, haven't read that yet. zzo38: CEA-708 has text tags to specify the purpose of the caption (dialog, sound effects, song lyrics, etc). There is even invisible, which I think is good, since sometimes you might want invisible captions, such as if the text is already part of the picture (e.g. the clues in Jeopardy!). However, tag 12 and 13 and 14 is undefined, according to Wikipedia. zzo38: I can make the suggestion of the use of these tags: video translation, described video (invisible by default, like tag 15), and miscellaneous (in case none of the other tags are suitable). pikhq: Whoa, more Homestuck zzo38: I saw the note by wib_jonas about "vanishing three card blind" M:tG game. I think that perhaps there should be a restriction to Vintage or pseudo-Vintage cards, rather than everything they ever released. zzo38: (And if you do play it often enough that there will be only draws, then you will either have to wait for new cards, or start to use some unofficial cards too.) zzo38: And I disagree to delete stuff from the quotation file a lot; keep them until you are wasting too much disk space. zzo38: Since they are not pictures, they don't normally waste too much disk space. shachaf: lifthrasiir: 13 0s? That's a lot. shachaf: Imagine all this hashing going toward breaking SafeHaskell! lifthrasiir: shachaf: ah, that thing lol shachaf: I guess you need thousands times more hashing. lifthrasiir: AFAIK the previous winner (with 12 zeroes) had spent 16 hours on GTX 1060 lifthrasiir: unless the current winner used FPGA or similar (unlikely), the current winner should have spent about a week or two lifthrasiir: oh, something seems very off lifthrasiir: I have submitted that link about a day ago, but it says "3 hours ago" in the HN front page b_jonas: zzo38: it's probably too late now, with possibly several people having submitted decks using Blacker Lotus kspalaiologos: has someone already worked on esoteric operating system draft? kspalaiologos: I think about something like ANSI escapes kspalaiologos: but imitating for example linux API calls kspalaiologos: so I could in my very own kernel implement a module loader, a few drivers and a brainfuck interpreter arseniiv: I did it! I defined cross-ratio in normal human-readable terms involving exterior product only arseniiv: though it looks like black magic; I don’t know how to derive it in a straightforward manner, it was constrained guessing arseniiv: the final result is this: where “metric-dependent” (though independent) definition goes (A, B; C, D) = |AC| |BD| / |BC| |AD|, the invariant one goes (a ∧ c) (b ∧ d) / (b ∧ c) (a ∧ d), and I’m not joking it’s really that similar. As I said, black magic arseniiv: where a, b, c, d are nonzero vectors from lines A, B, C, D arseniiv: I specifically was looking for an expression invariant under scaling these a, b, c, d separately, and one that is invariant under any linear maps. This would mean it’s invariant in projective space, and this also enforced fractions and the form where each vector occurs equally often in denominators and numerators. So the simplest expression to satisfy that is the one I got here, upto a permutation of (a, b, c, d) arseniiv: oh, by (a ∧ c) (b ∧ d) / (b ∧ c) (a ∧ d) I meant (a ∧ c / b ∧ c) (b ∧ d / a ∧ d) (or another rewriting), division is allowed because bivectors are all from one-dimensional space here, as all vectors line in the same plane (as all projective points need to be collinear for cross-ratio to be defined) arseniiv: eh, I wrote about this in three places and still no reaction :D though I have no patience. I hadn’t seen the expression anywhere to date, so I’m agitated at least because that shouldn’t be the case, it’s simple and it’s definitely useful when teaching. Or learning, for that matter arseniiv: though contemporarily it’s not a consensus yet that exterior products make many things more transparent. Exterior algebra captures linear dependence, in a way b_jonas: arseniiv: may I recommend you the book https://esolangs.org/logs/2019-08.html#lN5c ? arseniiv: b_jonas: I’ll take a look! arseniiv: oh there is a nice remark also that cross-ratio values naturally lie in RP! I should fix my definition so that be the case arseniiv: and also that the distances in the classical definition are directed. Yes, this makes more sense, and yes it’s nice that the invariant definition was taking that into account all along arseniiv: (I look at the first edition) arseniiv: hm constructing a definition such that cross-ratio lies in RP isn’t trivial! arseniiv: we should divide bivectors or we get nonsense, but we should also take away all divisions arseniiv: I think there is an invariant way though arseniiv: hm xy/zw = x′y′/z′w′ for x, y, z, w ∈ (one-dimensional vector space) can be defined as x ⊗ y ⊗ z′ ⊗ w′ = x′ ⊗ y′ ⊗ z ⊗ w. That doesn’t solve everything yet, we need to define what does it mean for a quadruple (x, y, z, w) to equal 1 arseniiv: ah! x ⊗ y = z ⊗ w, that’s all arseniiv: but we still need to show these quadruples upto that equality are iso with RP arseniiv: using ⊗ we even don’t need to use quadruples, pairs (x ⊗ y, z ⊗ w) will suffice arseniiv: hm it seems to map those to RP we need to explicitly demand [(x, x)] ↦ 1, [(x, −x)] ↦ −1, [(0, x)] ↦ 0, [(x, 0)] ↦ ∞, or else we could pick a wrong projective transformation arseniiv: seems fairly improvable? arseniiv: seems fairly improvable? => hm nope, we could just restate it but I don’t see a way clearer restatement kspalaiologos: is there some kind of penality for writing android apps in Flash or C++ Builder? kspalaiologos: it seems like a lovely thing to do xD kspalaiologos: I wish, has someone taken on programming in Brainfuck for mobile kspalaiologos: ^^^ like, is there a chance a desperate Java programmer will hunt me down? fizzie: The "penalty" is that all the platform APIs, including the standard UI framework, are really accessible only from the "Java" (I mean, it's not really all that Java) runtime. zzo38: Doesn't Android use Dalvik? fizzie: It used to, then they switched to ART. fizzie: Both use the Dex bytecode format, they're just different implementations. zzo38: What is the difference? zzo38: I read the documentation for Dalvik and do not know how I/O works. fizzie: AIUI, the biggest difference is that ART does an AOT compilation step (around install time?) to native ELF executables. zzo38: Is the file format the same or is there some difference? fizzie: The .dex bytecode file format that applications contain is the same, the internal files it generates (.odex and maybe some others) are different. fizzie: Apparently there's a few minor differences, like ART does a more strict verification of the bytecode. And I don't know about I/O, never looked too closely into the actual bytecode. Maybe it's all done through the usual invoke-* instructions, just some methods are magical. (Just a guess.) b_jonas: fizzie: aren't there already ready-made wrappers for C++ though? kspalaiologos: plus the sexy look of new VCL kspalaiologos: and Starling/Feathers UI for flash looking awesome fizzie: I'm not sure which ready-made wrappers you mean. I mean, the standard NDK has a bunch of APIs, sure. Not for the native UI, but for OpenGL/EGL/Vulkan and all kinds of hardware. And of course there's a truckload of different cross-platform development things that just draw their own stuff (Flutter, React Native, Xamarin, that Feathers thing...). b_jonas: fizzie: I mean for the native android services zzo38: Can you run a X server on Android? fizzie: I don't see why you couldn't in theory, but I haven't really heard of anyone doing it. kmc: i think people do kmc: because they want to use GUI programs in a GNU/Linux chroot kmc: you can use Xvnc or something fizzie: I use Termux on my phone, which is basically an Android terminal emulator app, plus a Linux userland installed inside the app's data directory, and an APT repository for convenient packages. kmc: oxample: https://www.reddit.com/r/amateurradio/comments/84jbgy/wsjtx_on_android/ kmc: fizzie: that sounds dope kmc: I should use that kmc: is it less buggy than juicessh kmc: can you run the linux mosh client in it fizzie: So far I like it better than JuiceSSH, which is where I switched from. At least you can run the standard OpenSSH client and ssh-agent. fizzie: I assume mosh should be fine as well, I've just never set that up. kmc: you can probably run mosh too kmc: it doesn't have much in the way of system requirements fizzie: (The nice bit with Termux is that it requires no root.) fizzie: Looks like there's also some support for running X11, through the VNC trick: https://wiki.termux.com/wiki/Graphical_Environment myname: i didn't like termux that much for some reason i fail to remember myname: maybe because of the softkeys or the colors or something like that myname: but the url handling of juicessh is the worst i've ever seen myname: even connectbot did it better fizzie: The default colors had that thing where the "dark blue" is very light. fizzie: But that was just a matter of copying my normal set of colors into ~/.termux/colors.properties on the phone. fizzie: The softkeys are also configurable, I set them to a multi-row layout pretty similar to what I had in JuiceSSH (esc, /, -, home, up, end, pageup on top row; tab, ctrl, alt, left, down, right, pagedown on bottom). fizzie: One thing that seems a bit wonky is that when you swipe the softkeys to switch to the "input a line of text using the normal Android text input" mode, it also seems to always treat that as a keypress of whatever key you start the swipe from. fizzie: Also the URL handling isn't that great either, there's a long-press "select URL" option but it doesn't consider # a URL character or some-such. fizzie: I like the volume key shortcuts. (Holding volume down acts like holding control down, and holding volume up turns wasd into arrows.) zzo38: Can you configure the URL characters and schemes? fizzie: Not via a configuration file, as far as I can tell. You could always just edit the source and build the app, though, it's open source. fizzie: The relevant logic would seem to be here: https://github.com/termux/termux-app/blob/master/app/src/main/java/com/termux/app/TermuxActivity.java#L676 zzo38: We can see that some schemes are missing, such as "news" and "nntp" and "ssh" and "magnet". Also, the "news" and "magnet" schemes do not use // after the colon. And, yes it does looks like it doesn't include # as a URL character, but it ought to do; even that URL linking to the source code has it, and in many other HTTP(S) URLs it will be common, so it should be included. zzo38: 34.234.98.204 seems to keep making the request "HEAD /favicon.ico HTTP/1.1" to my HTTP server (with the User-Agent string "python-requests/2.18.4"); that seems to be the only file they ever try to access. Why do they keep trying the same file over and over again? zzo38: What units of mass should I use in xyzabcde2 game? (Maybe grams?) It will need to fit in a signed 32-bit number, including when adding together the mass of your body with stuff that you are carrying and something that you try to pick up but can't; so probably no individual mass should exceed 2^30 or maybe 2^29, to avoid arithmetic overflow. zzo38: But then should also be fine enough that you can keep track of if you are carrying too much stuff, so that individual items can be picked up and dropped and can keep track of their mass. oerjan: ooh, a pa'anuri talking shachaf: is that a member of the oerjeois oerjan: what's the oerjeois shachaf: it doesn't make sense unless you mispronounce j as /ʒ/ shachaf: and probably not even then oerjan: i did get that part oerjan: i'm a portmannosseur, after all shachaf: the point is i was independently just looking up the pronunciation of that word oerjan: sorry, *oisseur shachaf: context: looking up words that can be spelled by holding a calculator upside down oerjan: well j _is_ pronounced that way in french. although the word in question is spelt with g. shachaf: one hit was "booboisie" which is apparently some sort of us slang for the opposite oerjan: meetings of the oerjeois would be a bit cramped if there were pa'anuri in it. shachaf: schlocking shachaf: I didn't know what pa'anuri is, and I was trying to figure out which word it reminds me of. shachaf: One guess: khachapuri shachaf: But that doesn't account for the ' shachaf: Another guess might be something like pa'amon, I guess, but that doesn't seem right. oerjan: i don't think anything accounts for the '. it's moved around in schlock mercenary's history. shachaf: Oh no. shachaf: I was pleased to see a ' that could plausibly be indicating a glottal stop. oerjan: he uses it to sprinkle the f'sherl-ganni words shachaf: "The word Pa'anuri (or possibly Paan'uri) comes from a F'sherl-Ganni phrase" shachaf: so much for that oerjan: the only ' that has a clearly given pronunciation in SM is in Ch'vorthq's name oerjan: it is emphatically _not_ a glottal stop. oerjan: nor is it really pronouncable by humans, although a lateral click might do. shachaf: it looks like a possessive in that usage hth b_jonas: ``` grep -Ewi '[oizehsgtb]{7,}' share/dict/12dicts/Lemmatized/2+2+3frq.txt # words that can be spelled by holding a calculator upside down? HackEso: ​ eighties \ hostess \ besiege \ hotshot \ zeitgeist \ egotist \ eightieth \ ghettoize \ tootsie oerjan: shachaf: i mean the first one hth shachaf: b_jonas: The puzzle was eight digits that spell the name of a bird. shachaf: Or rather spell a bird. b_jonas: shachaf: ooh, bird names. there are lots of those. b_jonas: shachaf: did they tell in what language? shachaf: For example you could name a bird Oooooooo shachaf: https://twitter.com/robinhouston/status/1188395789338513408 shachaf: (My reply has spoilers.) b_jonas: well 11111111 upside down is IIIIIIII which is a name for the identity bird shachaf: Oh, true! shachaf: I suppose ' canonically indicates contraction, which means you can stuff whatever you want in there. b_jonas: this should be easy if the https://petscan.wmflabs.org/ tool just fucking WORKED, so I could search for mainspace articles recursively under Category:en:Birds in en.wiktionary , but no, it fails to work again b_jonas: ah, found one. there's apparently a bird named rot13 fubrovyy b_jonas: ah, that's a different one from your spoiler int-e: @tell oerjan ooh, a pa'anuri talking <== I'm happy too lambdabot: Consider it noted. arseniiv: how many episodes SM does have, to within thousand? b_jonas: arseniiv: do you mean like strips? int-e: arseniiv: the first one is https://www.schlockmercenary.com/2000-06-12 and I don't think that there've been any missed updates int-e: > 19*360 arseniiv: oh exterior gods arseniiv: b_jonas: int-e: thanks arseniiv: so I’ll abstain b_jonas: arseniiv: I recommend Order of the Sticks, it only has 1183 strips so far; and StickManStickMan, which has 1000 strips total int-e: but of course it has way more text to read, and requires encyclopedic knowledge of role playing games to understand int-e: (oots) FaeFly: I don't think it really does require super indepth knowledge of RPGs FaeFly: I've never played tabletop RPGs, and only have a fairly casual knowledge of them, still enjoy OotS :p int-e: I just don't like oots for some reason. FaeFly: hm fair arseniiv: I have some basic understanding by now, due to reading something which used that in a degree arseniiv: but right now I have maaany webcomics in list :D I don’t think OOTS needs to enqueue there, many in that list currently are passively waiting FaeFly: I'm not really following any webcomics anymore FaeFly: I should pick some up again sometime arseniiv: though I think I maybe just waiting for a buffer to fill, many of them update a little slowly arseniiv: I bet there are half a dosen in hiatus any time int-e: FaeFly: there are so many of them now arseniiv: also several webserials int-e: FaeFly: best to stay away ;-) arseniiv: yeah too many arseniiv: one time I had a suspicion all webserial authors are actually the one under the hood arseniiv: don\8 t know why arseniiv: there were too many already then for one human to write them all FaeFly: int-e: hehe arseniiv: (though the idea does still have some gravity. Shouldn’t I have a silly and original belief) b_jonas: oots doesn't require encyclopedic knowledge of role-playing games to understand b_jonas: for one, it only requires knowledge of D&D 1, 3, 3.5 int-e: I'm not sure you're helping your cause. b_jonas: compare that to Irregular Wecomic and Darths & Droids, which references a mixture of all sorts of different role-playing games arseniiv: int-e: ++++ arseniiv: b_jonas: wait, how many D&D editions do you know sufficiently? (me, none) b_jonas: and oots mentions first edition in only like three or four strips, and they talk about it with nostalgia as an obsolete system in universe arseniiv: (I do know there are many and some were controversial between players) b_jonas: arseniiv: I think I only know enough about 3.5 to understand some jokes about the rules b_jonas: but oots doesn't have many of those. it toned the role-playing jokes down after strip #100 and became a serious story, and the role-playing rules are almost never referenced now arseniiv: there can be only so much arseniiv: all good things come to an end :( arseniiv: (just kidding, I prefer not to think on that topic, it’s not productive) b_jonas: int-e: so are there webcomics that you do like? which ones? oerjan: @messages-gold lambdabot: int-e said 6h 4m 13s ago: ooh, a pa'anuri talking <== I'm happy too shachaf: is int-e also a pa'anuri b_jonas: `? int-e oerjan: I'm not sure you're helping your cause. <-- is he ever oerjan: shachaf: i don't think so, although since boily left we have stopped keeping track of body weighs shachaf: `? body weigh HackEso: body weigh? ¯\(°​_o)/¯ shachaf: `doWg body weigh HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: doWg: not found shachaf: hmmmmm shachaf: `grWp body weigh HackEso: No output. shachaf: `quote body weigh oerjan: did boily miss a "the" that's abominable oerjan: `wisdom question HackEso: ​rhetorical question//Why did Taneb invent the rhetorical question without providing an answer? shachaf: At one point my doctor recommended that I increase my body weigh. oerjan: `wisdom question HackEso: ​the question//The The Question is the fundamental mystery of #esoteric, and boily is its master. shachaf: Maybe it was to affect boily's data. oerjan: thausible. b_jonas: `? joke HackEso: Jokes are no drug. oerjan: `? thausible HackEso: A thausible action is one committed toward a thausiblee. b_jonas: `? joker HackEso: joker? ¯\(°​_o)/¯ b_jonas: does fungot like orange-flavored sugarfree softdrinks? fungot: b_jonas: i didnt say it was, but i have seen my reply didn't arrive, forcer arseniiv: did they mean set-theoretic forcing int-e: what was boily's plan anyway? locate the channel's center of gravity? int-e: shachaf: afaik, I'm not a pa'anuri int-e: But of course I might be dreaming. int-e: Of itty-bitty... how did it go? int-e: Of itty-bitty scary-barrys. shachaf: Have you confirmed it by checking your body weigh? int-e: Light as a feather int-e: https://www.debate.org/opinions/does-a-ton-of-feathers-weigh-more-than-a-ton-of-bricks int-e: what a perfect link for the times we're living in... b_jonas: `? feather HackEso: A feather is something that can be found on most birds. It is responsible for their ability to not spontaneously float, seeing as how feathers are made of osmium. Penguins and ostriches have more feathers than most other birds, many of which are internal. b_jonas: yeah, see, heavy metal int-e: `? featherweight HackEso: featherweight? ¯\(°​_o)/¯ int-e: `? ais523 HackEso: Agent “Iä” Smith is an alien with a strange allergy to avian body covering, which he is trying to retroactively prevent from ever evolving. On the 3rd of March, he's lawful good. svipal: what esolangs do you guys find useful ? zzo38: Depends on what you are trying to do, I think. Most of them are usually not so useful svipal: yeah haha, unless you're trying to learn a concept. But here I meant useful as in , "oh this can actually solve well this problem I run into a lot in my job", for instance zzo38: Well, sometimes, I think I will want to use some of the stuff in INTERCAL when using another programming language. int-e: svipal: mostly it's the intellectual challenge that counts svipal: what INTERCAL stuff lol svipal: int-e, sure, i was curious though zzo38: How to disable kerning for editable text in Firefox? shachaf: Why do you want to disable kerning for editable text in Firefox? zzo38: Because kerning is not very good for text editing; it is suitable only for text that is only for reading and not for editing. imode: override the editable text field to use a monospace font, then. zzo38: Yes, I suppose that would be one way to do. kmc: keming shachaf: If you use a font without kerning information I assume it would work. zzo38: Yes, although it uses fonts with kerning by default zzo38: I added a fax encoder/decoder in Farbfeld Utilities now. Unlike the other programs, these ones are written in PostScript, although an implementation in C might also be added later. zzo38: ImageMagick will only decode Group 3 files if you specify EndOfLine=true for fffax, but ImageMagick will only decode Group 4 files if you specify EndOfLine=false for fffax. I don't know why. Also, when decoding a Group 4 file, ImageMagick will display 'Bad value 0 for "Orientation" tag.' even though it successfully decodes it. zzo38: Do you know why ImageMagick does that? b_jonas: I don't know. I only saw fax files on one website (though a large quantity there), and ImageMagick could read them fine. b_jonas: zzo38: re kerning: https://developer.mozilla.org/en-US/docs/Web/CSS/font-kerning b_jonas: that said I think kerning is still useful for editable text. it's non-greedy action-at-a-distance line break finding that you usually disable for editable text so that words don't jump around between lines. cpressey: Good morning. I have another esolang and I plan to release it today. cpressey: An implementation is available in the GitHub repo linked to therein. shachaf: I rewrote my printf-style function as a state machine, but I ran into the unfortunate issue that it supports custom formatters, and those also need to be written as state machines for maximal correctness. shachaf: I thought just restarting each formatter from scratch would be sufficient, but it can lead to infinite loops if you're using a fixed size buffer and the formatter tries to write something larger than that. shachaf: Oh, hmm, there's actual esolang activity in here. shachaf: :t let comp f g x k = f x (\s -> g s k) in comp lambdabot: (t1 -> (t2 -> t3) -> t4) -> (t2 -> t5 -> t3) -> t1 -> t5 -> t4 shachaf: Too general. shachaf: I guess I should just read it as (b -> (c -> r) -> r) -> (a -> (b -> r) -> r) -> a -> (c -> r) -> r shachaf: Which is the obvious thing. shachaf: cpressey: I think you copied some text from the Wagon page. cpressey: I did copy some text from the Wagon page, to start it off, but did I fail to update it appropriately? shachaf: I just mean the Primitives section. cpressey: Ah, I see some errors. I'll fix them shachaf: Maybe (a -> (b -> r) -> r) should be ((b -> r) -> a -> r) instead. shachaf: What is "continue as normal"? shachaf: I think I'm confused about how evaluation works. shachaf: Also I think I should go to sleep. wib_jonas: in the about:config that is wib_jonas: cpressey: there's also the magic word __TOC__ to insert the table of contents right where that magic word is wib_jonas: https://www.mediawiki.org/wiki/Help:Magic_words shachaf: What is the current continuation? Is it part of the program state? wib_jonas: shachaf: I think you'll have to read the source code of the implementation cpressey: shachaf: The current continuation is the second argument that the function receives. wib_jonas: cpressey: but is the tape of stacks part of that continuation? wib_jonas: or does that live outside with only one copy? cpressey: wib_jonas: No, that's the first argument. ais523: shachaf: if you have a sufficiently pure programming model, the current continuation is the %Ientire%I state of the interpreter / the running program; impure languages tend to leave bits of it out though cpressey: f(x, k) = f(state, kontinuation) wib_jonas: cpressey: so there's only one tape of stacks? ais523: also apparently my usual shortcut for italics doesn't work with this client ais523: although, "current" continuation is a bit misleading, the continuation that call/cc generates is the continuation that its first argument returns to cpressey: wib_jonas: No, it's a purely functional language, so each operation takes a state and passes a new, transformed state to its continuation shachaf: ais523_: How much of what you said is applicable to this language? shachaf: I know what continuations are in general. ais523: I don't know, I don't know the language, haven't logread yet shachaf: I see. My question was about this language, not continuations in general. wib_jonas: ah, the github has more explanation, not only an implementation wib_jonas: let's see ais523: looking at the definition of Oxcart, the spec seems to treat continuations as opaque data that is acted on by the program ais523: I think a literal understanding of the esolangs.org page would have the stacks not be part of it ais523: hmm, this reminds me of an Underload derivative I was working on a while back ais523: with some introspection primitives ais523: one captured the state of the entire stack; the other captured the entire list of commands that were yet to run ais523: those could be used to create various continuation-alikes that captured different amounts of state shachaf: cpressey: I see now. I forgot that each symbol represents a function of one argument. wib_jonas: cpressey: two arguments ais523: cpressey: I think there's still an ambiguity, as to whether stack operations look at a stack that's stored within κ, or at a separate global stack ais523: I think the latter is more likely given the specification on the page but it doesn't rule out either possibility cpressey: ais523_: κ is a function, there's nothing "stored within" it ais523: OK, I guess that makes sense, functions-with-metadata aren't the sort of thing you expect to see unannounced wib_jonas: ais523: the tape of stacks is passed around in a separate argument wib_jonas: I still think there's only one of it, because there's no way to copy it ais523: oh yes wib_jonas: so I think you can imagine it as a separate global stack, and functions with just the continuation argument ais523: so it definitely isn't part of the continuation as it has an argument of its own shachaf: Ugh, the biggest problem with writing explicit state machines is that they don't compose well. ais523: what notion of composition are you thinking of here? or do you not care? ais523: there's more than one way I can think of to compose state machines ais523: but those definitions seem to map to the explicit state machine notation fairly well? shachaf: I mean, it's certainly possible. shachaf: It's just much more awkward than function calls, in a language with no special support. wib_jonas: shachaf: about the printf function state machine, what exactly does that mean? can you feed it the format pattern character by character? can it output the formatted output character by character? both? ais523: oh, I see; state machines compose well in the sense of function composition (Haskell . or Underload *), but not in the sense of function application (Haskell $ or Underload ^) shachaf: wib_jonas: No, you give it the format string all up-front. It produces output into a fixed size buffer. wib_jonas: shachaf: I sort of think that allowing general custom formatters in a printf function is a waste, and I think when I write my printf function, I'll make it so that you can't do that. I'll still add some limited hooks, but they have to behave in restricted ways. shachaf: I'm not quite sure what you mean by that. ais523: although if you don't have recursion, you can statically allocate a state for every possible call stack shachaf: Yes, you can build your own call stack effectively. wib_jonas: shachaf: in what sense is it a state machine then? do you feed the arguments to be formatted one by one? shachaf: wib_jonas: You provide all the arguments upfront too. wib_jonas: shachaf: how is it a state machine then? shachaf: It might be used something like this: sprintf_init(&state, fmt, va); while (!state.done) { char buf[4096]; int written = sprintf_chunk(&state, buf, sizeof buf); fwrite(buf, 1, written, stdout); } shachaf: The normal sprintf API doesn't let you do that -- it requires you to allocate an arbitrary-sized buffer. wib_jonas: shachaf: ah, so it's the second one that I said, it can continue output after it's ran out of a buffer wib_jonas: interesting, and potentially useful shachaf: Yes. I thought I said that but now I read my message again and it was unclear. wib_jonas: shachaf: do you have a wrapper that lets it write to a file descriptor easily? shachaf: I meant that each call puts some of the output into a fixed-size buffer. shachaf: You can write a wrapper like that, can't you? shachaf: I'm just worried about figuring out the core API that lets you write all the wrappers you want. wib_jonas: shachaf: also, is it possible to define a formatter that formats a bignum in hexadecimal, where the output can be longer than a few of the output chunks? shachaf: Formatters can produce arbitrary strings. shachaf: That's the problem. ais523: hmm, I wonder if it might be more efficient to simply restart the sprintf from the start with a larger buffer ais523: rather than maintain all the state needed for restarting ais523: not sure though shachaf: Even the built-in formatters like %s have the same issue. shachaf: What state needed for restarting? ais523: the "state" parameter of your sprintf_init shachaf: Certainly that state is no larger than a stack frame of snprintf's. ais523: yes, it's not the size I'm concerned about, but the memory accesses used to update it wib_jonas: as for that M:tG three card deck game, I think the start is successful because we've got 4 new players in round 1, and one of them won the round shachaf: It's a very small amount of state. shachaf: Other than the varargs, the state is less than two pointersworth. wib_jonas: shachaf: it's not that simple. if you want to format big numbers in decimal (and they're stored in hexadecimal) then it's more efficient to do the conversion in one go, and that requires memory proportional to the size of the bignum wib_jonas: mind you, it's sort of pointless to print bignums in decimal to full precision shachaf: wib_jonas: Oh, well, you're free to allocate more memory and store it in your custom state, I guess. shachaf: (Store a pointer to it, I mean.) shachaf: I don't think efficiency is a huge concern here anyway. wib_jonas: though now you need an abort function to deallocate the state if you don't want to continue the printf shachaf: But of course it would be a big concern in fairly similar APIs. shachaf: Yes, that's not ideal. shachaf: Although you can just store your extra state in an arena probably. ais523: oh, I assumed getting maximum efficiency would be the reason for something like this ais523: (rather than simply counting the characters needed for the output buffer in advance) wib_jonas: I think I'll just use the more traditional approach where I call a callback when the output buffer runs out -- that callback can still give an error to abort, but I won't convert it to cps where you can pause the printf and store the state for later ais523: hmm, if you can inline the callback, that's probably more efficient (it's less efficient if you have to call through a function pointer, especially given the workarounds needed for Spectre) shachaf: I think state machine APIs are generally much nicer and more flexible. wib_jonas: the callbacks are simply anyway, they either write, or allocate more memory, or always fail, plus in the first two cases there could be an output length limit that they obey wib_jonas: ais523: it's not just the callback that helps, I can also enforce that I can call flush early and require that the output buffer is always at least, say, 64 bytes long, which means I don't need to worry about the callback during converting fixed integers or floating point numbers ais523: (the currently recommended way of calling through a function pointer is to call yourself twice and then overwrite the return address for the second call on the stack with the address of the function you actually want to call; this guarantees that the function call will be mispredicted, thus preventing it being used as a Spectre gadget) oerjan: cpressey: I think you copied some text from the Wagon page. . o O ( maybe cpressey is secretly A ) wib_jonas: (mind you, formatting floats is still tricky for other reasons) ais523: you also need something that halts speculation at the address that you don't return to because it's overwritten wib_jonas: a callback is effectively also what gnu libc and libstdc++ does wib_jonas: for libc, you can define FILE handles with custom callbacks, wib_jonas: for the C++ standard library, you can define custom classes for the output buffer ais523: actually, the important point here isn't specifically that the call is mispredicted, rather it's that you statically know it'll be predicted to a specific value that's under your control (which prevents the predicted value being attacker-controlled) wib_jonas: ais523: it might not even involve a function pointer, since I will probably only use three different behaviors wib_jonas: possibly two because the last one isn't hard to unify wib_jonas: I can just use conditionals ais523: wib_jonas: right, sorry, I started on an aside ais523: and then needed to make my aside as technically precise as possible, lest I end up misinforming someone wib_jonas: sure, that's also important. for some things other than printf, you do want function pointers ais523: oddly, the Spectre-proof indirect function call sequence is eerily similar to conditionals in INTERCAL-72 ais523: (not the same, but reminiscent) shachaf: Do you like this style of API? https://gist.github.com/pervognsen/d57cdc165e79a21637fe5a721375afba shachaf: (The one in that post and also the one it links to.) wib_jonas: ais523: I really don't follow how sceptre-like prediction attacks can be prevented. at this point I sort of think I just have to buy separate (cheap) computer hardware to run the untrusted code on if I want to prevent all such attacks. wib_jonas: separating things to separate computer hardware can be useful for other reasons too, as in to prevent various human errors that cause security bugs ais523: wib_jonas: I believe the commonly accepted technique is to ensure that you have control over all locations to which a branch could possibly be predicted to lead, and then audit them to ensure that they can't leak information when running speculatively wib_jonas: other than sceptre wib_jonas: ais523: how can that be possible? you can guarantee that the cpu can't falsely speculatively predict a location? ais523: it's not as bad as it seems; most branches can only be predicted as taken or not taken, so there are only two places to check, and compilers can verify that, e.g., you don't make any memory accesses via potentially attacker-controlled pointers wib_jonas: I thought the jump target prediction is such that you can't do that ais523: the crazy workarounds are needed for indirect branches and indirect function calls, which could lead anywhere ais523: so you need to control the prediction yourself wib_jonas: because it would, like, predict targets of unrelated jumps if it doesn't recall the jump instructino that you're trying to predict ais523: that's why you go via a function call and then rewrite the return value on the stack, because if you make a function call followed by a return, it's always predicted to return to the place the call came from cpressey: oerjan: That's one of more frightening Jekyll-and-Hyde theories I've heard lately. Perhaps I've been sleepwalking (and sleepwikiediting) wib_jonas: that could work, if you're careful not to confuse the return address cache wib_jonas: there's a separate return target cache from the usual stack cache, right? ais523: wib_jonas: actually it's the opposite of "careful not to confuse", you're intentionally confusing the return address stack wib_jonas: which theory? the one where every esoteric language author is secretly the same person? wib_jonas: ais523: yes, but after that wib_jonas: dunno, it could work ais523: the point is simply to make sure you have a known value on the return address predictor so that it can't be attacker-controlled wib_jonas: but the whole sceptre prevention seems hopelessly large in scope to me ais523: well, it's at the point where the known spectre variants can be automatically fixed by compilers ais523: there are probably unknown speculative-execution-related exploits, but at least the known ones were fixable wib_jonas: though I am hoping that most of them will be fixed in new hardware, so in like 15 years all the cpu with most of the vulnerabilities will be phased out wib_jonas: that's like a close enough timescale that I'll probably still be alive and programming for cpus then shachaf: If you don't support user-defined formats, it's probably simple enough. arseniiv: Do you like this style of API? => interesting shachaf: I think %s is the only arbitrary-length format? You can just rerun the other ones if they happen to cross a boundary. shachaf: Or even just store a fixed-size buffer of what's left in the current argument. wib_jonas: although then we'll still have to worry about how to make efficient but secure quantum-attack resistant public key cryptography primitives. if the crypto theorists don't figure out soon, every fricking ssl handshake will take centiseconds because we can't do a key exchange without number theory. shachaf: But what's the right thing to do for custom formatters? shachaf: I could declare that they just can't produce more than 64 bytes of output. wib_jonas: shachaf: I wouldn't allow them in general. I'll have to figure out something to allow bignum formatters, and those can produce long output, plus I will allow custom complex types, but I'll format them with built-in formatters, it's just a type system magic that disappears at compile time. shachaf: I have types like struct V2 { F32 x, y; };. shachaf: It seems pretty useful to be able to format them. shachaf: I don't expect a huge number of custom formatters but it'll be nice to have the common ones. wib_jonas: shachaf: printf("(%f,%f)", p.x, p.y); wib_jonas: replace the "%f" with whatever specific format you want obviously wib_jonas: for more complicated cases, the users can write a formatter function that doesn't hook into printf arseniiv: from the link there: “API design is still considered a black art of programming, even today. Only little information can be found and mostly you just find small tips I hope every programmer already knows.” => BTW there are no books on that, really? With yet many books on code style practices? wib_jonas: but can use the same output buffer solutino as your printf wib_jonas: so you don't mix them in the same printf format string, but you can mix them into the same output file or output buffer or whatever you can output to wib_jonas: I think your api still allows that shachaf: arseniiv: I don't think there are many good books on that sort of thing. ais523: I think API design is in part a language design problem ais523: APIs are influenced so much by the language you're calling them from ais523: I have a theory that perhaps, in a sufficiently tightly defined language, there would only be one obvious way to write any given API shachaf: arseniiv: Maybe https://gist.github.com/uucidl/495e7f1c2646fc8b5196 has some useful things to say. cpressey: arseniiv: fwiw I think API design is related to abstract datatype design... but different enough that I hesitate to say "closely related". wib_jonas: also, as a bonus, I'd like a printf that outputs utf16 directly, and can take both utf-8 and utf-16 strings as arguments to format ais523: shachaf: that link appears to require logging in? ais523: wib_jonas: I think Windows has one of those ais523: (the same function in Linux outputs UTF-32) ais523: any particular reason you want UTF-16? wib_jonas: ais523: at work I'm writing tables for a siemens program that can only read utf-16-le ais523: that's a good enough reason, I guess wib_jonas: I could of course output utf-8 and iconv it afterwards wib_jonas: it's not like I need this very efficiently shachaf: ais523_: Which link? wib_jonas: but it'd be simpler ais523: shachaf: the gist link you posted a few lines above shachaf: I'm reading it in a Private Browsing window logged out. wib_jonas: I also read utf-16 files shachaf: I have no particular interest in UTF-16 support. wib_jonas: currently I do these with perl and python, both of which have ways to input and output utf-8 and utf-16 streams, though perl's is somewhat buggy shachaf: It's a niche feature. ais523: other than Microsoft-related code (which seems to use UTF-16 as default), the main use I see for UTF-8 is writing Funciton programs ais523: *for UTF-16 myname: funciton <3 myname: i need to make a programming game out of that ais523: because they're made primarily of non-ASCII characters, and yet there's no standard 8-bit character set that contains all the characters it uses + its standard library ais523: so UTF-16 is normally the most efficient storage ais523: (UTF-8 can be more efficient when the programs are primarily made of large constants) myname: to be fair, funciton uses something like utf-21 or the like internally arseniiv: shachaf: thanks, let’s see… ais523: UTF-16 is also more efficient than UTF-21 if you rarely use astral plane characters :-P ais523: also I think the UTF-21 is just for I/O, not used for storing the program internally arseniiv: cpressey: ah I think there is some kind of relatedness too, though I don’t have anything externalized on that count wib_jonas: ais523: this dataset is made of mostly ascii, so utf-8 would be more efficient ais523: what do you think of the shift-code-based Unicode encodings which are efficient when outputting lots of characters from the same Unicode block? ais523: hmm, thinking about it, you could probably do better with Huffman coding based on a digraph frequency table ais523: one potential problem with both systems is that you can't split a string between characters any more, and concatentating strings will lead to an overlong encoding due to the shift state (or previous character state) being explicitly reset in between arseniiv: what do you think of the shift-code-based Unicode encodings which are efficient when outputting lots of characters from the same Unicode block? => my friend considered that but I don’t know if he succeeded in something. It seems he has the idea abandoned for a while ais523: there are at least two "standardised" encodings like that, at least one is IIRC patented/commercial (of course, there's doubts about whether a text encoding can be patentable!) wib_jonas: http://www.unicode.org/notes/tn6/ ? ais523: this is based on a memory from a Wikipedia page, I can't remember which one ais523: that unicode.org link is probably the same thing, though, given that there's a reference to an IBM patent at the bottom wib_jonas: fungot: a week passed since #1183. please publish the next o strip. fungot: wib_jonas: and to optimize the code, wib_jonas: for some reason, the constitution of Hungary requires that the president of the republic must be at least 35 years old. the president of the US is also limited to at least 35 years of age. so now I'm trying to imagine a sci-fi story where the president gets a sci-fi rejuvenation threapy and that takes his age under the bound, so they have to retire wib_jonas: from the position. cpressey: So then they change the rule to "must have at least 35 years experience as a human being" cpressey: And then a 12-yo who claims to be the reincarnation of [insert famous dead person here] runs for president wib_jonas: cpressey: no, I think they should just drop that lower bound wib_jonas: it's a stupid rule wib_jonas: they can still tie it to people who have the right to vote, just like for members of the parliament, so that excludes almost all people under 18 years old cpressey: Stupid rules often make for better stories though wib_jonas: yes, there's at least one sci-fi story about this 35 year rule and relativistic speed space travel wib_jonas: the story is that the rule is stupid, people realize that, so want to work it aruond wib_jonas: https://scifi.stackexchange.com/q/181346/4918 wib_jonas: which is exactly the sort of thing why the rule shouldn't be there wib_jonas: if someone is inexperienced, then the parlament just won't elect them as president because of that, and the age bound is irrelevant wib_jonas: fungot, what is the abbreviation for the US state of Louisiana? fungot: wib_jonas: somewhere it is.)) yields 6, as does cl iirc. dylan got repurposed, but eventually i'll know what the accessors are right? arseniiv: is there (I think there is) a special name for algebraic types isomorphic to a sum of products of such types? arseniiv: like, { data Nat = Z | S Nat; data NatList = Nil | Cons Nat NatList } is a subset of these. Or { data T = TA | TB U; data U = UA | UB T } is too arseniiv: I think I heard “polynomial functor” regarding sums and products but these aren’t exactly one-to-one with functors arseniiv: as of “simple inductive type”, I’m not sure the term isn’t too general arseniiv: or maybe I should allow something like data T = T (U → T). I consider how to define generalized Minsky machines / recursive functions arseniiv: hm I think it won’t be good. How on earth could I make values of U → T there arseniiv: okay I think I’ll call these datatypes polynomial, seems not too general, not too specific arseniiv: hm no, there’s recursion… polynomial-inductive it should be shachaf: So in order to make the state machine printf API actually correct for sprintf, I think it'll need a bunch more state. shachaf: I was only outputting formatted arguments all-or-nothing, but the snprintf API actually requires you to output them to the last byte possible. shachaf: Apparently subtracting two null pointers is undefined behavior in C? fizzie: Subtracting even one should be, surely. fizzie: "When two pointers are subtracted, both shall point to elements of the same array object, or one past the last element of the array object; --" shachaf: But that doesn't say anything about what happens when one pointer is subtracted. fizzie: I guess it's the same as the one hand clapping. fizzie: If a tree falls in the forest, does it generate a log? b_jonas: "Cleaning and maintenance shall not be performed by children." says the user's manual. I can see that my new electric toothbrush is american lawyer compliant. shachaf: I cleaned up http://slbkbs.org/tmp/fmt/fmt.h somewhat and added fancy features. shachaf: Example usage: http://slbkbs.org/tmp/fmt/main.c shachaf: zzo38: I think you wanted to see it at one point? cpressey: Phantom_Hoover ! cpressey: is there (I think there is) a special name for algebraic types isomorphic to a sum of products of such types? <--- I don't know, but it reminds me of boolean algebras. cpressey: But that may just be because I've been reading about boolean algebras lately. shachaf: Do you like complete atomic boolean algebras? cpressey: Only if they're also residuated. shachaf: What's that? cpressey: Uh, kind of like division, or implication, I gather. shachaf: The joke is that CABAs are just sets. shachaf: Or rather antisets? wib_jonas: arseniiv: I think any algebraic type that doesn't use parametric polymorhpism (that is, -> in the kind) in its definition (and the definitions of other types that it's dependent on) has that property, so you can just call them algebraic types wib_jonas: algebraic is specifically the name because they're defined by polynomial equations arseniiv: wib_jonas: isn’t the class of algebraic types wider? wib_jonas: see http://www.madore.org/cgi-bin/comment.pl/showcomments?href=http%3a%2f%2fwww.madore.org%2f%7edavid%2fweblog%2f2017-11.html%23d.2017-11-10.2477 for where the "algebraic" name comes from, though in a slightly different context than algebraic types wib_jonas: arseniiv: it is wider if you allow parametric polymorpism, as in definitions like "data Foo a = ..." where a is a type parameter wib_jonas: then you can define types that you couldn't otherwise, as in that famous square matrix type wib_jonas: but if you only give definitions like "data Foo = ..." with constructors on the right side, then I don't think so wib_jonas: it's basically the same as with the context-free language productions wib_jonas: but I'm not entirely sure that that matches your description entirely wib_jonas: "types isomorphic to a sum of products of such types?" wib_jonas: if you read that wrong, then maybe any type matches it because it's isomorphic to itself wib_jonas: so maybe I just don't understand your question wib_jonas: hmm wait wib_jonas: maybe that is narrower wib_jonas: arseniiv: ok, maybe you're right and that's not all algebraic types, if you write the definition properly wib_jonas: I'm not sure arseniiv: I meant that there are several definitions like data T = C_1 a_11 … a_1(k1) | … | C_n an_1 … a_n(kn) where all a_ij are some T defined this way wib_jonas: arseniiv: is this definition written in such a way that if you take `data A = I; data L = N | C A L; data M = E | D L M; data P = X | M;` then L and M match your definition but P doesn't? wib_jonas: arseniiv: oh wib_jonas: arseniiv: well in that case I think that's exactly what I'd call "algebraic types" in the strictest sense arseniiv: no, P does too if X, M are constructor names wib_jonas: yes, I typoed that arseniiv: wib_jonas: hm interesting wib_jonas: `data A = I; data L = N | C A L; data M = E | D L M; data P = X | V M;` HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: data: not found arseniiv: shouldn’t we also call a type `data X = X (A → L)` algebraic? wib_jonas: arseniiv: not in the strictest sense I think wib_jonas: but you use names in whatever way you like arseniiv: ah, so I can name them “algebraic in the strict sense” in parenthesis wib_jonas: in the haskell context you could call any type that you define with `data` algebraic arseniiv: yeah, that got me confused in the first place wib_jonas: but you can define non-algebraic types with `data` if you use type parameters or other stuff cpressey: Oh, I thought they were called algebraic data types because their definitions are like signatures of algebraic structures wib_jonas: cpressey: what? how? algebraic structures have multi-argument functions in them, don't they? cpressey: Don't algebraic data types have multi-argument constructors? wib_jonas: cpressey: yes, but also alternations cpressey: data BA = And BA BA | Or BA BA | Not BA | One | Zero wib_jonas: cpressey: hmm Phantom__Hoover: i thought it was because theyre polynomials on types cpressey: That looks a lot like an algebraic signature to me. Not saying it is, but hard to see why you seemed shocked at the idea wib_jonas wib_jonas: cpressey: that makse sense wib_jonas: cpressey: so you take the language of expressions that you can make from op'ns in that algebraic structures wib_jonas: cpressey: that's not how I'd imagine algebraic structure signatures, but I guess you're right, you can think of them like that wib_jonas: P_H: they're defined by polynomial equations, that's why they're called algebraic data types, yes moonheart08: Shame that a computer running a 2D language would be kinda useless moonheart08: Otherwise I would've done that... myname: why would that be useless? moonheart08: Or rather, it'd be too complicated to implement with 80s hardware moonheart08: I'm thinking it over.. moonheart08: May be doable moonheart08: Could index a memory device as 2D if it's size is a power of 2 myname: or you could just use modulo? moonheart08: (The 2d planeb that is) moonheart08: myname: modulo is expensive in hardware. myname: i know that, but you didn't mention performance yet moonheart08: Yea, won't work. Idea too useless compared to normal hardware. moonheart08: Too poor perf moonheart08: Unless.. Hmmm myname: you could also just split the address in half moonheart08: That was what I was considering, yea myname: finally, useful usage of al and ah moonheart08: Also this is an idea for custom hardware, not x86 moonheart08: So it'd be a hardware implemented fungeoid myname: i am curious if you could use an fpga for a weird way of memory access moonheart08: cpressey: hia. Wondering if you had any advice for making a hardware based fungeoid run fast. moonheart08: (Probably not, but worth asking) cpressey: moonheart08: Don't give it an unbounded playfield? Other than that, not really, sorry. moonheart08: Alright. Unbounded wasn't in the plan. moonheart08: I already have one thing in mind: A directional jump that takes a numeric argument instead of searching ahead cpressey: moonheart08: Actually I do have one idea, not sure it applies to what you're doing, but: assuming you only have 4 possible deltas for the IP it might be more efficient to have 4 read-execute loops instead of a single read-execute loop that loads the delta and adds it on every cycle. cpressey: (More expensive too, though, in terms of real estate) myname: execute every possible next instruction at once, choose the one corresponding to your delta :D moonheart08: cpressey: would require that it waste time loading data it won't use from RAM cpressey: I don't think it does; it's more like having 4 seperate CPUs, one for each direction, that "swap off" their processing to one of the others, when the direction changes. Massive waste of transistors, just to optimize the "advance to next cell" circuit. cpressey: Good grief, now I'm actually wondering if you could actually do that with 4 actual 8-bit CPUs int-e: (Editing the URL to get to the main page sucks... though maybe there's a prettier option) int-e: myname: How do you get back from https://esolangs.org/wiki/PTSL/instrtable to https://esolangs.org/wiki/PTSL if there isn't a link for that in the page? myname: there always is? myname: okay not for that myname: from the diff pages, though int-e: can one /replace/ the standard headline? I mean, if the PTSL in there was a link, that would be perfect? wib_jonas: int-e: no, that would be confusing. wib_jonas: I thought mediawiki usually puts a link for parent pages under the page title when there's a slash inside the title wib_jonas: but evidently it's not doing that here cpressey: If you like clicking you can click "What links here" then click "PTSL"! moonheart08: int-e: Noinclude is nice for avoiding duplicate headers in the main article :) int-e: moonheart08: ah, sorry. moonheart08: No problem int-e: moonheart08: thanks for fixing it :) wib_jonas: why is this even a separate article? do you expect to have a family of several languages that share the instruction table but are otherwise so different that they'll each be described on their own page? moonheart08: Brevity. moonheart08: Makes it easier to edit moonheart08: Keeps the core article free of a massive table in it's source. Makes it easier to go through cpressey: There's some precedent for putting distinctly technical things (proofs, implementations) in their own child articles wib_jonas: cpressey: sure. but this one is transcluded into the main article. I guess that could change if the main article becomes too long. moonheart08: The main point *right now* is convenience when editing wib_jonas: Do we have a year category for languages that will be published in the future, like Feather? wib_jonas: I was just wondering if I should make an article for Magic-16, which is such a language wib_jonas: but it would be just a stub article wib_jonas: PL/MIX might also count wib_jonas: and TwoDucks according to https://esolangs.org/wiki/History#2023 moonheart08: Shpuld've used preview lf94: list comprehensions is such a powerful syntax imode: you should add it to modal. lf94: [start...stop;step, filter1, filter2, filter3...] kmc: monad comprehensions are even better imode: you ever get a feeling that you're not using a tool you made the right way. lf94: kmc wat shachaf: [f(x) for x in xs if p(x)] # extremely powerful shachaf: for x in xs: if p(x): list.append(f(x)) # useless old-hat syntax b_jonas: shachaf: it's not useless, and I like it shachaf: the joke is that they're p. much the same thing lf94: I just care about having a good way to express how to define a certain list lf94: I couldn't find anything other than set theory shachaf: my fancy language will probably let you implement comprehensions using ` trickery shachaf: Did y'all see my fancy C fmt thing? b_jonas: shachaf: I glanced at it. it does look interesting b_jonas: I should look at it more b_jonas: what were its urls again? b_jonas: http://slbkbs.org/tmp/fmt/fmt.h shachaf: https://slbkbs.org/tmp/fmt/fmt.h (example usage: https://slbkbs.org/tmp/fmt/main.c ) shachaf: I like the init/chunk API. But it's possible that it has more overhead than it's worth for this particular application? int-e: surprisingly, "slbkbs" is not the result of applying a substitution cipher to "funpun". kmc: where is it from? lf94: monad comprehensions seem nice imode: I have a term rewriting language and I don't know how to use it. oerjan: use it to rewrite your brain until you do hth lf94: imode: your language is too powerful for the human mind :v imode: lf94: (`(`(K ?x)?y)) -> (?x) (`(`(`(S ?x)?y)?z) -> (`(`(?x ?z)`(?y ?z))) imode: I don't know if that works. but those are S and K. lf94: combinators? imode: there's probably some issue with parenthesization. imode: I don't know how I'd test that. lf94: SK make other known expressions lf94: just see if they make them imode: I think there's going to be parentheses issues. imode: `(`(`(S foo) (`(`(K bar) quux))) baz) yields `(`(`(foo baz) `((bar) baz))) HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: (`(`(S: not found imode: whoops, sorry. imode: yeah it doesn't work.. meh. kmc: shachaf: the first gigasecond of my life is almost over kmc: anything more i should do? shachaf: that's a lotta seconds imode: 31? damn. imode: I'll save that marker for later. oerjan: kmc: more gigs hth kmc: it's national cat day kmc: happy national cat day arseniiv: (sorry for a multiliner which follows) arseniiv: there’s μ-recursion operator which takes f :: N^(n+1) → N and returns μf :: N^n → N such that arseniiv: μf args… = search 0 where arseniiv: search n = if f args… n == 0 then n else search (n+1) arseniiv: now we can generalize that from N to an algebraic type T in at least two ways. We searched [0, 1, 2, …] for 0, now: arseniiv: (i) let’s search `iterate (s args…) (z args…)` for `q args` where s, z, q are additional arguments to μ; arseniiv: (ii) let’s search some natural ordering of the type for the least element wrt that ordering. Constructing the ordering uniformly seems painful though; arseniiv: which do you like? I grow on (i), it’s even allows different types for the last argument of `f` and its value; the price of additional arguments seems more than fair kmc: imode: yeah i'm old imode: I wouldn't call that old. arseniiv: kmc: happy national cat day => my cat purrs at this and reciprocates imode: then again I'm biased. oerjan: keegan mccrone b_jonas: kmc: how close is "almost"? kmc: imode: when I was 20, 30 sounded really old kmc: my gf would laugh though, she's much older than me kmc: turning 30 was kind of a big deal for me kmc: i decided to start giving a shit about my health kmc: I remembered that my paternal grandfather died at 48 due to obesity, alcoholism and smoking kmc: and 48 didn't seem so far from 30 anymore kmc: and i also started a big life change shortly before my 30th birthday kmc: which contributed to increased give-a-shit imode: developing apathy for your own life really does kill people. kmc: for sure kmc: i had 3 really shitty years kmc: b_jonas: 125961 seconds left to go which is about a day and a half b_jonas: kmc: take a short vacation to somewhere nice where you haven't been yet? b_jonas: though that might have been better to start to plan earlier than a day and a half kmc: I've done a fair amount of travel recently-ish b_jonas: you can still do that after the round age of course b_jonas: me too kmc: it's nice kmc: i'd love to go out for a drive and a hike b_jonas: this year I've taken two nice vacations that I've organized myself kmc: need to search for those mushrooooooooooms kmc: I went to Texas to see a good friend, had loads of fun and then took the train back to SF kmc: (2 trains and a bus actually) b_jonas: please publish the next o strip, fungot fungot: b_jonas: officially i think two complement is rather arcane ;p ( sorry, dunno about quality yet still highly compatible body of real-world scheme code. kmc: b_jonas: the scenery on that train trip through the american southwest is amazingly beautiful b_jonas: it's not that arcane kmc: fungot: that's ok most people also think so when they are beginning learning assembly language fungot: kmc: wearing fnord even, i'd say no. way too expensive most of the big guys for a longish time completely filling a fnord thingy pikhq: Kinda fun how big life changes have cascading effects kmc: 2 years later it's beginning to not dominate my life anymore int-e: two's complement is arcane, fungot, where did you learn that :) fungot: int-e: so how far is the house? where is it? i see int-e: fungot: I never answer intimate questions like that. fungot: int-e: i doubt that an ignorant can ack that he's an idiot and he should go away and die. oh, the ops have come to one conclusion: you have to int-e: ominous int-e: close to threatening, really. int-e: fungot: verb? fungot: int-e: can you elaborate, alex? an instruction to the function ft with ft and k-1 kmc: pikhq: hope it's going well though <3 int-e: `? marvin HackEso: marvin? ¯\(°​_o)/¯ int-e: `quote marvin HackEso: No output. int-e: "Life," said Marvin, "don't talk to me about life." oerjan: `? life HackEso: ​‘Life,’ said Marvin, ‘don't talk to me about life.’ kmc: `wisdom HackEso: ​herbalist//An herbalist is a list of herbas. kmc: `wisdom HackEso: ​lba//This channel is having a Little Big Adventure(tm) with Linear Bounded Automata in devices using Logical Block Addressing. int-e: Ludicrously Ballooned Acronyms. pikhq: kmc: Oh, most defnitely is int-e: oerjan: thanks! HackEso: ​fortran//FORTRAN was a language in 1957, in which our noble, honourable ancestors wrote programs on punched cards and paper tape. kmc: pikhq: ooh yay! kmc: I'm going to the gym tonight kmc: I go twice a week, for an hour or so pikhq: First time in my life I've, like, cared about my health kmc: it's not much but it makes me feel good kmc: pikhq: i know, right? kmc: and my appearance kmc: I went from "I'm uncomfortable how I look no matter what I change" to "holy shit I want to change a lot of things but I basically like myself" kmc: and now i've made many of those changes and well it's great ^__^ pikhq: Right now I'd describe it as "I do not especially like how I look right now, but I have a goal in mind that makes me very happy" kmc: I started noticing that I look a lot like my sister now int-e: mmm "I have a dream." kmc: i had some dreams last night kmc: i don't remember them kmc: but I think they were pretty bad pikhq: The parts I like about how I look, well, jeeze I look a lot like my mom shachaf: two's complement is so good shachaf: Can you even believe how good it is? shachaf: I was, like, whoa, dude, the first person who figured out two's complement must've been so happy with it. shachaf: I looked it up and apparently it was von Neumann. Figures. int-e: Always the same geniuses... kmc: is it better than UTF-8 shachaf: yes hth int-e: kmc: THat's a pretty low standard. shachaf: i,i is it low for itself kmc: what? UTF-8 is great! int-e: The ASCII subset of UTF-8 is okay. kmc: it's a really good design kmc: as far as an encoding for the Unicode character set shachaf: UTF-8 is good engineering, sure. kmc: as for the Unicode character set itself, well, it's a bit of a mess int-e: It's so Western-centric. oerjan: . o O ( but two's complement is just (mod 2^n) arithmetic ) kmc: int-e: a bit, but backwards compatibility with ASCII is important int-e: (I may be contradicting myself here.) kmc: I am annoyed at how many short code units are wasted on C0 and C1 control codes that are rarely used, but that's life int-e: But I like being contrarian. kmc: Unicode made some mistakes but they also have some pretty severe constraints kmc: int-e: this is a good place for it shachaf: contrarianism is fun oerjan: kmc: no it's not! shachaf: another fun thing is sincerely having and expressing opinions shachaf: but it's much scarier int-e: oerjan: I see what you did there. I think. kmc: I think gzipped UTF-8 is not too bad even on mostly-Chinese texts oerjan: int-e: someone had to do it. kmc: compared to, say, the 2 byte legacy chinese encodings kmc: also most things now are HTML and all the markup is ASCII int-e: oerjan: no they didn... err, we've done this already. int-e: fungot: can you loop? fungot: int-e: sherry was still nice with strawberries and whipped cream, not strawberries with sherry and whipped cream although the sun went down over the source for feeley's ring.scm? int-e: ^style oots fungot: Selected style: oots (Order Of The Stick) int-e: fungot: what about now? shachaf: fungot: what's going to happen with xykon fungot: shachaf: that is by far the lowest price i have ever laid at least, that you would even suggest that i would do such as that, yes because that is what, twenty! four! the time, and there, that ought to be good. int-e: `' fungot fungot: int-e: i need, a random castle self-destruct." HackEso: 10) GregorR-L: i bet only you can prevent forest fires. basically, you know. \ 13) Finally I have found some actually useful purpose for it. \ 14) oerjan: are you a man, if there weren't evil in this kingdom to you! you shall find bekkler! executing program. please let me go... put me out! he's really a tricycle! pass him! \ 56) i am sad ( of cours int-e: `' the sword HackEso: No output. int-e: `' sword HackEso: 1050) I would like to learn how to use a sword And also how to ride a unicycle Perhaps not at the same time oerjan: i suddenly realize that my brain must have always imagined a juggling part in that quote that isn't there int-e: `quote hey, hey HackEso: 728) itidus21: hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, h shachaf: Is there a general name for the kind of algorithm DPLL is? shachaf: I mean the kind where you guess and propagate and backtrack. int-e: `quote 1296 HackEso: 1296) fungot is here int-e: may cause extreme loss of appetite! may cause severe diarrhea and vomiting! int-e: I forgot about that one int-e: shachaf: I'm not sure whether there's anything between the super generic "branch and bound" (which can involve branching heuristics including branching on something that has only one viable alternative first) and DPLL. shachaf: Branch and bound is more sophisticated than DPLL, isn't it? int-e: well, it does not have to be shachaf: Say you're solving sudoku. The obvious approach is to propagate all the constrains you can, then guess, repeat, backtrack, etc. shachaf: constraints shachaf: What would you call that? fizzie: I didn't remember there was an oots style. int-e: the for SAT, "bound" really just means to immediately backtrack when one of the clauses becomes false. shachaf: ILP-style branch-and-bound seems pretty different from that. int-e: Yeah, SAT isn't linear int-e: I'd agree that it's a degenerate case of branch and bound. I believe the pattern still fits. int-e: (But if you insist on *linear* programming rather than more or less arbitrary optimization in a discrete search space (with some exploitable monotonicity to allow bounding), you'll have to disagree.) shachaf: Also, do all NP-complete problems have a natural algorithm analogous to that? int-e: "natural" shachaf: Say subset sum. I'm not sure offhand what propagation would look like. shachaf: Whereas it's obvious for SAT or exact cover. int-e: If the sum becomes too large, do *not* select the number. <-- propagation. Incidentally, a variant of bounding "branch and bound" style. shachaf: Is that a heuristic or a guarantee? shachaf: I guess it can be a guarantee, if you know how many negative numbers you have left. int-e: Ah, I had knapsack in mind... but anyway, a similar heuristic can be made up by taking into account all remaining numbers. int-e: You can also do something with remainders modulo prime powers. int-e: (If all but one of the remaining numbers are even, then you immediately know whether you have to pick the odd number, or not.) int-e: (Hmm, and I guess /occasionally/ one can get leverage out of doing this for moduli that are not prime powers.) int-e: shachaf: But I don't think it's inherent in NP... given an arbitrary verifier, it's pretty unreasonable to assume that you can predict its output (accept or not) early. int-e: shachaf: And in fact, pre-images of cryptographic hashes are a good example where propagation is hard to impossible. shachaf: Hmm, is that true? int-e: Any significant amount of propagation would weaken pre-image resistance. shachaf: One way I think of nondeterministic Turing machines is as deterministic machines with one extra "coin flip" primitive, where NP means that at least one possible sequence of coins will find an answer in polynomial time. shachaf: From this perspective the deterministic part is propagation, and the nondeterministic part is the coin flips. shachaf: s/coin flips/guessing/ int-e: shachaf: Yeah but I'm focussing on the coin flips. int-e: So propagation only counts if it predicts a coin flip. shachaf: Of course SAT solvers don't necessarily guess the coin flips specifically, they just start guessing anywhere and see the consequences. int-e: The other view is tenable as well, of course. And in fact that's what happens when you reduce to SAT. shachaf: But unit propagation still corresponds to the deterministic part of evaluation, in some sense, I think. int-e: As I just said... int-e: There *is* some funny interchangability phenomenon here... in order to compress certificates (the sequence of coin flips leading to acceptance), you can build propagation rules into the verifier. shachaf: You mean instead of giving the entire polynomial-size trace of execution or something? shachaf: Is there a pathological NP problem that's really hard to compress this way? int-e: But it doesn't really match how I think about a typical NP problem. I usually have a naive verifier in mind, which leads to a corresponding search tree corresponding to the coin flips. And then one can start pruning and re-ordering the search tree by propagation rules. int-e: shachaf: I'm sticking to cryptographic hashes. shachaf: Cryptograhic hashes seem very compressible to me in this sense. shachaf: Or, hmm, maybe not? shachaf: You need to specify the entire preimage, but none of the computation involved in hashing it. int-e: The computations are part of the verifier, and I already said that I don't count that as propagation. shachaf: Oh, I thought "naive verifier" meant the opposite. int-e: To my mind, the naive verifier for hash function takes/guesses the pre-image, computes the hash, and compares that to the desired output. shachaf: OK, sure. int-e: And the question is, can we get the witness size significantly below the size of the preimage. "significantly" is more than O(log(n)) where n is the problem size... b_jonas: int-e: not in the case of a cryptographic hash, if it's well-designed int-e: b_jonas: that's the claim, yes. shachaf: is this like explaining someone's joke to them int-e: it's nice to be understood int-e: Hmm, how close are random polynomial-sized boolean circuits (n inputs to n outputs) to hash functions? int-e: (Very unfamiliar territory for me. You probably have to be very careful to ensure that the functions don't become constant with non-negligible probability, for starters...) int-e: probability: what an unlikely nickname probability: ¯\_(ツ)_/¯ int-e: probability: how do you cope? probability: everyone else has a halloween nickname probability: but i didn't probability: so i chose probability instead shachaf: probability: you're non-negligible to me int-e: ...because what's the likelihood that this might come up as a topic... probability: indeed shachaf: probability is p. spooky probability: i also own "inb4" probability: pros: can make epic predictions probability: cons: people make predictions shachaf: that sounds too 4channy for me int-e: probability: do people ask you whether you're high or low a lot? int-e: they really should :P probability: indeed kmc: i do not have a halloweed nickname kmc: i meant halloween kmc: but i'm going to own the typo shachaf: So this one book takes expectation as axiomatic and defines probability as the expectation of indicator variables, rather than the usual way. int-e: kmc: it's perfectly sound grammar ;) kmc: the october Hempfest is called Halloweed shachaf: Do you like this 1,1approach? probability: moony_: int-e: I mean the -ed ending :) int-e: Or suffix as educated people might call it. moony: probability: int-e: Hi probability indeed. (How did I miss that!) moony: Eeeeeeed shachaf: Oh, I forgot that int-e doesn't use colors. int-e: shachaf: Well it seems I didn't miss much. int-e: (the logs have colors if you want them to) moony: probability: ok ima go do something elsr int-e: Must be a Markov chain. int-e: I didn't realize it was even a thing until 15 minutes ago. int-e: `' indifference HackEso: 1316) int-e does not like this [...] shachaf: I experience heightened levels of indifference :P Higher than your usual? who cares? b_jonas: wow it will be pretty cold shachaf: @metar KOAK lambdabot: KOAK 300053Z 04008KT 10SM CLR 20/M07 A2991 RMK AO2 SLP129 T02001067 shachaf: at least it's not FU shachaf: @metar KSFO lambdabot: KSFO 300056Z 30011KT 10SM FEW200 18/04 A2991 RMK AO2 SLP126 T01780039 shachaf: @metar KSJC lambdabot: KSJC 300053Z 32011KT 10SM FEW036 FEW090 19/M02 A2989 RMK AO2 SLP121 FU FEW036 FU FEW090 T01941017 pikhq: @metar KDEN lambdabot: KDEN 300053Z 36012KT 1 1/4SM -SN BR OVC020 M13/M14 A3021 RMK AO2 TWR VIS 2 SLP290 P0001 T11281139 $ shachaf: FU FEW FU pikhq: 1/4SM? Pretty good all things considered. int-e: @metar lowi lambdabot: LOWI 300150Z 09003KT 060V130 9999 -RA FEW005 BKN014 06/05 Q1022 TEMPO SCT010 BKN020 int-e: wait, smoke? int-e: (I had to look up FU.) int-e: (And now I'm wondering what's burning. Or is it just chimneys?) pikhq: Forest. shachaf: There is a lot of burning. shachaf: https://www.nbcnews.com/news/us-news/map-how-big-are-california-fires-see-size-shape-dozens-n1073266 int-e: Oh maybe I should've looked up the airport. int-e: It makes sense now. shachaf: @metar KLAX lambdabot: KLAX 300153Z 21003KT 10SM CLR 18/12 A2989 RMK AO2 SLP122 T01780117 $ kmc: shachaf: how's the air in berkeley been shachaf: It smelled pretty smoky before but it seems better now. kmc: it looks alright on the map yeah https://www.purpleair.com/map?module=AQI&conversion=C0&average=10&layer=standard&advanced=false&inside=false&outside=true&mine=true#7.92/37.825/-122.396 kmc: the bad thing about this site is that a lot of their sensors are down due to power outages :( shachaf: I think Windows-style import libraries actually make a lot of sense. shachaf: Though they should probably just be in header files or something? cpressey: Good morning. When we say something nondeterministic like lambda calculus or SKI-calculus is Turing-complete, we mean that there is at least one reduction strategy we know of for it that lets us simulate a deterministic Turing machine in it. cpressey: I was going somewhere with this but lost track while I was typing it out. cpressey: OK, well, I'll come back to it later. arseniiv: I didn't realize it was even a thing until 15 minutes ago. => same cpressey: OK. When we say lambda calculus (or some other thing that is per se nondeterministic) is Turing-complete, I think we usually mean there is a reduction strategy for it, under which we can show it can simulate a deterministic Turing machine. cpressey: But, you could show a direct simulation along the lines of, for every accepting path in an NTM, there's an accepting path in this nondeterministic thing. cpressey: And I'm not sure if I've ever seen a TC proof done in this way, actually. cpressey: I guess you don't ever *need* to, because a DTM can simulate a NTM and vice versa. cpressey: But what if you have some nondeterministic thing and you don't know of any reduction strategies for it that you can show let it simulate a DTM? cpressey: If you can show that it can simulate an arbitrary NTM, does that imply there is some reduction strategy for it under which it can simulate arbitrary DTMs? cpressey: I think it does, if you're willing to accept an arbitrarily complex reduction strategy (or rather, one that is potentially as complex as your simulation reduction is.) cpressey: And if it does, I think it means you can say things like: Second-order logic is Turing-complete. cpressey: Or maybe even: ZFC is Turing-complete. int-e: So is the existential fragment of Peano Arithmetic: https://en.wikipedia.org/wiki/Matiyasevich%27s_theorem cpressey: int-e: So is relation algebra: https://en.wikipedia.org/wiki/Relation_algebra#Expressive_power int-e: Didn't we agree to call that term rewriting? cpressey: Yeah yeah. Well. That was inequational. This is equational, and seems richer, not that it matters. int-e: cpressey: The thing is, you can just directly simulate Turing machines with string rewriting systems. So this is *far* less surprising than the case Hilbert's ten's problem to me. int-e: Of course I've also studied rewriting for some time :P int-e: So maybe it's just that familiarity takes away most of the surprise. cpressey: What's surprising is that "Turing-complete" has such a heavy connotation of deterministic behaviour, statements like "Second-order logic is Turing-complete" are true, but they sound stupid. How do you "run" a "program" in 2nd-order logic? cpressey: You don't, you "search" for "proofs" instead. int-e: Loosen up and embrace nondeterminism. int-e: Or better yet, alternation. cpressey: Tell that to the CPU manufacturers! int-e: (Honestly, alternation is beyond my intuition. I have to translate it back to game trees.) int-e: cpressey: Actually I suspect CPU manufacturers would *love* more non-determinism... cache coherence is a headache. But nobody knows how to program this stuff. cpressey: Ha. Yeah. That's sort of my point (or is it? -- I'll think about it.) int-e: Of course embracing alternation is just a crazy idea... alternation is unphysical. int-e: (So is the TCS version of non-determinism unless you believe in quantum suicide.) cpressey: How do you "run" a "program" in 2nd-order logic? <-- Perform Knuth-Bendix completion on it and hope for the best? int-e: What are your critical pairs? I suppose you can attempt to treat the proof calculus as a higher order rewriting system but then you run into the problem that higher order unification is undecidable. int-e: But sure, you can still hope for the best. cpressey: Oh, right. cpressey: I read a nice explanation of the higher-order unification algorithm a while ago. It made it sound like a bloody hack. int-e: Maybe stick to FOL? Then you have some complete formalisms... and lots of research to try to make them efficient. int-e: Hmm, by Nipkow maybe? int-e: Though many people have written papers on this... and I don't really know the topic. int-e: Colleagues struggled with this. I kept away... but I picked up bits and pieces from conversations. cpressey: I think it was https://github.com/jozefg/higher-order-unification/blob/master/explanation.md cpressey: "1. Generate a solution 2. Test it 3. If it was correct, stop 4. Else, go to 1" int-e: Hmm, flex and rigid, that sounds familiar. int-e: e.g. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.118.9080 int-e: (it's deplorable that neither the text nor the source file seems to refer to academic literature) int-e: (at least not where I looked... I didn't look closely) int-e: I don't have the patience to read the text, I think. int-e: @metar lowi lambdabot: LOWI 301420Z VRB01KT 9999 -RA FEW007 BKN017 BKN050 07/04 Q1023 NOSIG int-e: still chilly... and wet :/ arseniiv: I think it was https://github.com/jozefg/higher-order-unification/blob/master/explanation.md => oh, unification with metavariables? that could help me with one thing int-e: arseniiv: as long as you realize it's a best effort arseniiv: better than nothing! I’m interested in cases he calls “stuck on a metavariable”, my simple system was more or less simple other than that arseniiv: the only solution I saw before was to make reduction steps explicit in inferences (that system was meant to check inferences) arseniiv: maybe this is even not that bad, but I didn’t pursue it yet, only theorized arseniiv: my favorite example with that stuck metavariable case was one of inferences using an axiom `a = b → ϕ[a] → ϕ[b]` for inferring `x = y → x = x → y = x` wib_jonas: there are so many ways to fall into infinite loops arseniiv: here one ends up with ϕ[x] ~ x = x and ϕ[y] ~ y = x and must deduce ϕ ~ z.x = z int-e: yeah, ϕ[x] ~ x = x has four solutions which is more than a bit annoying. arseniiv: at first I thought it would be feasible to add a constraint disjunction thingy but then (I don’t remember why) I wasn’t in favor of that int-e: and that's an easy case because it's merely *matching* arseniiv: (though I hoped my formalism would allow only simple cases like that) arseniiv: (I planned to restrict types of variables and constructors to a manageable subset) arseniiv: (but I didn’t saw how it would help) int-e: I suspect rewriting is preferable to matching `a = b → ϕ[a] → ϕ[b]` in practice even though logically it's the same. arseniiv: int-e: you mean, adding a special rule that a = b ⊦ …a… → …b… for formulas and …a… = …b… for terms? int-e: It doesn't solve the problem, of course because you still have to unify a particular equation's left-hand side with a subterm of your goal... arseniiv: in my case it wouldn’t work as there are no intristic = and →, it would be meant as a metalogic framework arseniiv: intrinsic* int-e: One can argue that equality is ubiquitous in most logical contexts, it deserves special treatment. arseniiv: but how would I decide for which term sorts should I allow = and for which shouldn’t, and how to know which type … = … should then have? int-e: (I'd point to paramodulation in first-order logic, which extends resolution to deal with equality.) cpressey: When the metalanguage has to be able to refer to ⊦ on the LHS of a ⊦ you start to wonder why you are even bothering with → anymore cpressey: I'm exaggerating, of course arseniiv: int-e: though I could define = or ↔ and then mark it as an “equality-like thing” arseniiv: I hadn’t considered that approach arseniiv: and still it would be risky cpressey: arseniiv: The issues you mention seem eerily familiar to me; I'm sure I ran into similar ones (though not the same ones) while thinking about how to design a logical metalanguage. cpressey: I really admire Gentzen now ;) cpressey: I mean, it's hard to beat either natural deduction, or sequent calculus, and hey, they were even invented by the same person. arseniiv: cpressey: hm! FTR I tried to make Metamath a system with sorted terms, then I saw that λ-calculus naturally embeds into that, when trying to represent substitutions in terms arseniiv: going from Metamath, I inherited disjointness constraints for metavariables — was it in your case too? cpressey: I never quite got into Metamath. I came from reverse-engineering The Incredible Proof Machine and eventually realizing it's basically the same as natural deduction. Then trying to square that with term rewriting. cpressey: I'd really like to know what Metamath's doing, so one day I'll look into it again, I hope. lf94: this is the best prog channel arseniiv: and a description of a concrete logic would consist of declarations of some type letters (“completr terms” occurring as steps of inferences would be allowed to have only these types), some constructors of types u1 × … × un → t, again where t is a letter and ui is t1 → … → tn → t0, all ti also letters, this would allow variable binding in the constructor’s arguments; and finally there would be inference rules, each w arseniiv: th complete terms and disjointness constraints as hypotheses and a complete term conclusion, and that would be all. Though I contemplated also something else what I don’t remember now. Ah, something akin to subtyping or simplistic type classes for type letters, to aid against constructor explosion in complex languages arseniiv: cpressey: The Incredible Proof Machine => hm I need to look that up arseniiv: anyway natural deduction is tg, I agree. Especially when you finally understand how to write its proof trees linearly (like a simply typed λ-calculus with pairs, sums etc.) arseniiv: I'd really like to know what Metamath's doing, so one day I'll look into it again, I hope. => AFAIK it’s a string rewriting checker arseniiv: so you can express a variety of mathematical notation, but you also need define that with a care, to not make parsing ambiguous arseniiv: so there are ubiquitous brackets as part of notation imode: huh, metamath's being mentioned. arseniiv: I really like tree representation, moreso a typed one to aid against many many typos arseniiv: and giving helpful error reporting. I hadn’t used Metamath program but I’m afraid it’s an art arseniiv: imode: have you used it in some way? imode: I've been looking at it adjacent to what I'm already doing, with curiosity. arseniiv: I just read notes on its site and looked at many proofs and definitions from set.mm posted there and read an article about its workings though I don’t remember much from that arseniiv: I find a goal to write a minimalistic proof checker noble but personally I’d rather use something with typed trees as terms arseniiv: and maybe as proofs. Though I think that can be simulated with linear proofs using explicit ⊦, contexts etc.. But maybe natural-style proofs are easier to check, IDK at all cpressey: arseniiv: I actually didn't understand until very recently, that Milner's theorem prover LCF was actually a "DSL" in ML -- proofs are data structures, and the type system ensures you can't build an invalid proof. (Previously I thought ML was simply the implementation language instead of the "host" language like that.) cpressey: So now that I've learned that, I wonder if it would be a nicer approach for a proof checker, than designing a dedicated language. I don't know yet. cpressey: And so it goes. I wonder when I'll have enough time to turn my attention to again :) arseniiv: people seem to mention “Dale Miller's pattern calculus” as a decidable system with simple unification algorithm, I googled that and I see something familiar, “Abstract syntax for variable binders <…>” and inside the author talks about β₀-conversion which could be what I seek arseniiv: cpressey: proofs are data structures, and the type system ensures you can't build an invalid proof => oh, HOAS at its best; I hadn’t considered encoding proofs like that, this should demand a type system more complex than just for encoding terms arseniiv: @tell cpressey look at the logs at approx. 2019-10-30 15:58 UTC lambdabot: Consider it noted. wib_jonas: `dateu HackEso: 2019-10-30 16:04:03.252 +0000 UTC October 30 Wednesday 2019-W44-3 int-e: yay for excess precision arseniiv: So now that I've learned that, I wonder if it would be a nicer approach for a proof checker, than designing a dedicated language. I don't know yet. => yeah, it’s nice but one constraints themselves with a basic syntax structure of the host language which can be not what’s desired, maybe not flexible enough. Though the idea of implementing the checker using a library of type inference for a complex language would both adm arseniiv: t using HOAS and making any syntax one wishes. Yes, I should consider that. Hm would Haskell’s GADTs allow me to represent inference rules for several simple systems I intended to encode… arseniiv: 44th week already, hm wib_jonas: we also have wib_jonas: ``` ddate; beat HackEso: Today is Pungenday, the 11th day of The Aftermath in the YOLD 3185 \ 714 kmc: `paste bin/beat HackEso: https://hack.esolangs.org/repo/file/tip/bin/beat kmc: fizzie: apparently I am to blame you for this fizzie: Don't blame me for the code, I had a lot simpler implementation. fizzie: https://hack.esolangs.org/repo/file/dea37ae411c0/bin/beat kmc: `beat -p HackEso: 724.77 wib_jonas: simpler and more broken. does invalid double rounding wib_jonas: s/invalid/incorrect/ fizzie: You mean, first to seconds and then to .beats? Meh, it's good enough. fizzie: Also it had the @ in the output format, because Internet. kmc: ah, for a simpler time kmc: https://www.bonequest.com/1437 kmc: https://www.bonequest.com/554 wib_jonas: oh, it should have @ in the output format? I can fix that fizzie: TBH, I'm not sure. It's not like it's an ISO standard format. wib_jonas: yeah "@" prefix may be a bad idea. coreutils uses it to denote unix epoch times wib_jonas: ``` dateu -d @1234567890 HackEso: 2019-10-30 04:00:00.000 +0000 UTC October 30 Wednesday 2019-W44-3 fizzie: The watch had a @ symbol to indicate .beats, and it was often styled that way, but yeah. wib_jonas: hmm, that doesn't look right fizzie: "A day in internet time begins at midnight BMT (@000 Swatch .Beats) (Central European Wintertime)." wib_jonas: ``` /bin/date -d @1234567890 HackEso: Fri Feb 13 23:31:30 UTC 2009 wib_jonas: ``` /bin/date @1234567890 HackEso: ​/bin/date: invalid date '@1234567890' wib_jonas: ``` dateu @1234567890 HackEso: 2009-02-13 23:31:30.000 +0000 UTC February 13 Friday 2009-W07-5 wib_jonas: maybe we should put some crazy unicode symbol instead of the @ arseniiv: “In higher-order patterns, this uncertainty is eliminated by requiring the argument list t̄ in each subterm of the form λv̄.X t̄ to be a list of distinct bound variables w̄. => now let’s see if my formula with equality suffices arseniiv: x = y → Φx → Φy. At first glance, it doesn’t have that form: x, y are free, but we can do a trick: ∀x.∀y.x = y → Φx → Φy, now they’re bound; am I missing anything? arseniiv: (∀x.t ≡ ∀(λx.t)) arseniiv: also a quirk of my old approach was a two different kinds of abstraction types: (t1, …, tn)t (in place of t1 × … × tn → t) for constructors and a plain t1 → t2 for things like x.y.term, and two different syntaxes for applications: c(args…) and V[arg], all for better error reporting, as these kinds of applications are pretty different here: the former for constructing terms, the latter is for subst arseniiv: normal people use only →, as I see. This simplifies algorithm specification and some types of reasoning arseniiv: but maybe this idea of refined →-types would be useful for someone! imode: I think to make any progress in any of my projects, I need to agree upon small accomplishable goals and move forward with them. writing an interpreter for my language in my language is not going to be productive. making a text adventure or something will be. imode: I should probably add some kind of random access memory to my language to ease usage. imode: I can embed it in my queue but it's just not reasonable. imode: at the moment. shachaf: `olist 1184 HackEso: olist 1184: shachaf oerjan Sgeo FireFly boily nortti b_jonas arseniiv: imode: watching video on Noita I thought how would it be if a game wouldn’t be certain about its rules sometimes arseniiv: like maybe there are several gods each wanting their own and subjecting the world to their conflicting wishes arseniiv: gods and their ill wishes of course remind me A tower of something, I forget what exactly, but it’s that one with soundtrack by flashygoodness arseniiv: there the god simply gradually wants more and more, at one point even disallowing the player looking at a list of all their commandments arseniiv: imode: are you writing a game in the queue language? not that one with `?patterns`? imode: yeah, not the one with patterns. imode: also, that sounds like tower of heaven. imode: https://en.wikipedia.org/wiki/Tower_of_Heaven imode: noita is nuts. it makes me wonder why nobody's tried physics at that scale, though I haven't tried running it on my machine, so who knows if it's actually performant. shachaf: If only it wasn't Windows-only. imode: proton has worked well for me in the past. imode: I'm looking at ways of making my queue language more robust with respect to how I _want_ to program rather than how I _currently_ program. I don't have functions, just bare loops, but adding functions/subroutines seems like a waste. imode: I'm considering making concurrency a second-tier extension to the language. imode: { ... } creates a new interpreter running concurrently to the one that created it and enqueues the ID of that interpreter. you can then (via blocking sends/receives) send data to the newly spawned interpreter. imode: from there, creating things like RAM, lists, etc. is pretty trivial. imode: { V begin V drop dup ^ repeat } 5 ^ $0 ^ V $0 ^ V $0 ^ V for example. imode: the spawned interpreter just loops repeatedly after receiving a value, duplicating it and sending a copy back to whomever made the request. imode: V and ^ should consume the handle, though. imode: there should also probably be some kind of "kill" function to terminate an interpreter given a handle. imode: wasn't there a brainfuck derivative that added concurrency. imode: brainfork, that was it. if you added persistence to the whole ensemble, you essentially have an in-memory database with a wild query language. kspalaiologos: Anyone fancy helping with Brainfuck disassembler? kspalaiologos: switching clients imode: an interesting snippet is a broadcaster. the protocol would be "I send you a 0, and then I send you a handle, and you'll add it to your list of handles." and "I send you a 1, then I send you a value, and you'll run through the list of handles and send it to all of them." imode: at that point you can build process supervision structures similar to erlang. imode: a tree node could be a composition of a broadcaster and a variable. arseniiv: also, that sounds like tower of heaven. => that’s it, yeah arseniiv: you can then (via blocking sends/receives) send data to the newly spawned interpreter. => nice! coroutines aplenty! arseniiv: a tree node could be a composition of a broadcaster and a variable. => you lost me imode: a variable could be a process that takes a value, then loops infinitely. upon receiving any value, it sends a copy of the value given initially to the requesting process. imode: though I guess you'd need to send the process ID that you're currently "in"... a kind of 'self'. imode: so { V begin V drop dup ^ repeat } 5 ^ self V ^ would be storing and recalling `5`. imode: s/self V ^/self ^ V imode: "^" being "send" and "V" being "receive". kspalaiologos: I made a 4,5 KB regex kspalaiologos: that in theory is able to disassemble brainfuck kspalaiologos: but the regex debugger literally died seeing this kspalaiologos: so I'll never know b_jonas: kspalaiologos: 5 kilobytes doesn't sound too big. maybe you should try a different regex engine. do you use only the regular operations proper, or the irrational extensions like backreferences? imode: https://hatebin.com/frolcfqyqy a sketch. imode: constructing lists backward is weird. I could probably invert that to be prefix instead of postfix. imode: the way send/receive works is that receive essentially just... infloops. sends also infloop, but only if the target process' instruction isn't a receive. imode: a deadlock would be { 0 ^ } 0 ^ imode: when a send matches with a receive, the sending end dequeues an item and pushes it to the receiving end's queue. both then increment their instruction pointers by one. b_jonas: this is strange. I have a distinct memory that when I saw that the new o strip was released, I invoked olist and thanked fungot, and HackEso even said "Thanks, fungot. Thungot." which means I wasn't typing it to the wrong channel fungot: b_jonas: i know, i was, uh, " child" parody so soon? we'll get sneak attacked if we go down a level and face me! ye may haf tha upper hand in it. or a pool, pal. b_jonas: yet that's not in the logs. arseniiv: my first try of Haskell HOAS for natural deduction for first-order intuitionistic logic, at least it works for a simple zero-order example and when we don’t try to statically check what is the proof of what: https://repl.it/repls/ImpartialWaterloggedFolder arseniiv: because `:t f` gives overly general `F (a1 -> Not (Not a2))`. I’m not sure if that’s fixable arseniiv: (pf is too more general: `I (F (a -> (a -> b) -> b))`, but that’s okay, it *is* such a general proof) arseniiv: I’m not sure at all about encodings of ∀ and ∃ arseniiv: if someone would interest themselves, please @tell me arseniiv: yet that's not in the logs. => why, I do seem to remember thungot here several days earlier arseniiv: a variable could be a process that takes a value, then loops infinitely. upon receiving any value, it sends a copy of the value given initially to the requesting process. => only once? Isn’t that kind of too linear? :D arseniiv: ah never mind, we could duplicate what we received of course, dumb me b_jonas: arseniiv: that may have been the previous strip, because this one went up only half a day ago arseniiv: ah so then you could be remembering that penultimate time? b_jonas: https://esolangs.org/logs/2019-10-21.html#lyb b_jonas: yes, it could be b_jonas: I guess when I joined today, I got distracted by all that talk about typechecking higher order types arseniiv: high-ordering typechecked types ARCUN: The newly featured languages seem a bit uninteresting, don't they? int-e: do you mean Thue, or the current candidates? ARCUN: let me rephrase: the new languages mentioned in the most recent pages ARCUN: such as textual subleq int-e: Not sure that one is all that bad... well, apart from the lack of love the page has received, and perhaps that the halting problem is trivial (if I read the description correctly). int-e: maye be should start using stub templates? imode: forthers seem to be really against new concepts. must be a religion. ArthurStrong: imode: forthers? imode: ArthurStrong: people who use forth. pikhq: It's a fine religion, really imode: it's like, nothing makes sense unless it's _explicitly two stacks and ANSI Forth words_. imode: and they hate anything that deviates from that. despite, you know, the main theme of the language is that it's relatively amorphic. zzo38: What wording should I use at the top of the source file if it is meant to be public domain? Currently I just wrote "// This program is public domain." but someone complained (article on Usenet). zzo38: I found the answer shachaf: The domain is public, but what's the codomain? zzo38: I don't know. ArthurStrong: shachaf: you have to find inverse function? ArthurStrong: shachaf: you want to find a codomain of f(public)? zzo38: Since sometimes there is a kernel panic when I use the printer with my computer, would it work if instead I use a Raspberry Pi computer as the printing server and then connect it to the router? Will that allow me to print properly? shachaf: Nothing will allow you to print properly. Printers don't work. shachaf: Though a kernel panic sounds like a particularly bad failure. shachaf: (But I empathize with the kernel.) zzo38: I wonder if it is a problem with the USB interface of the printer. This printer also has wireless internet, although I have been unable to get it to work. kmc: zzo38: it's worth a shot. i guess the question is whether the raspberry pi will encounter the same kernel panic zzo38: kmc: Yes, now I thought maybe it will. But sometimes it works. So, even if it does, at least that way it will not shut down the entire computer and only the printing server will be shut down in that case, I suppose. kmc: that does seem like an improvement shachaf: Can you run a virtual machine or userspace process and have that run the printer drivers? zzo38: If it is a hardware problem then I do not expect that to work. kmc: shachaf: I was going to suggest that but it seemed too silly even for here kmc: but it's true, it would isolate the kernel panics the same as the rpi would shachaf: imo you should invent my fancy programming language for me zzo38: I think it if is a problem with the hardware such as with the power or whatever, I am not so sure that it would isolate the kernel panics then. shachaf: I would expect that it's a driver problem. shachaf: What sort of nonsense could be going over the USB cable to cause a kernel panic? shachaf: What's my best bet for doing ELF linking? zzo38: I don't know, but I think that someone suggested here before it might be some kind of hardware problem shachaf: Is doing it myself too much trouble because of things like link-time optimization and C++? shachaf: Maybe I can use ld to do link-time optimization of libraries by prelinking them into one object file. kmc: shachaf: less than 3 hours left in my first gigasecond of life kmc: we made cake shachaf: i want cake shachaf: i want edible cake and not just words kmc: do I actually want to stay up until 02:12 shachaf: today i made myself delicious noncake food shachaf: do you have a choice kmc: i'm (to borrow a phrase you once used) pregretting this decision shachaf: Did I say that? kmc: i think you were going to go with me to the flea market at butt o' clock in cupertino kmc: and said you were pregretting the decision to do so kmc: but in the end you didn't, so I guess that pregret was for naught? shachaf: I must've pregretted it so much that I didn't do it. shachaf: That sounds like the most useful kind of pregret. shachaf: Why regret -- or pregret -- things if it has no effect on your actions? That's just useless suffering. kmc: is the concept of pregret related to the concept of type II fun? kmc: it's sort of the opposite kmc: type II fun is motivated by pre-reminiscing or something shachaf: preminiscing? kmc: my friend carson mapped out the 8 combinations of positive or negative feelings before, during, and after an activity kmc: and gave each one a name shachaf: i'm going to preminisce a bunch of \rainbow{coins} for my big ico kmc: but i forgot what most of the names were shachaf: I met that human once! kmc: the name he used for enjoyment before/during, regret after was "hedonism" and I objected strongly shachaf: Hedonism seems to be the entire subset of enjoyment during, or something? kmc: and cited hedonism-bot from futurama kmc: I think it's a subtype of enjoyment kmc: but perhaps a tricky-to-define one kmc: mushroom shachaf: I was invited on a mushroom foraging trip but it turns out I'll have an MRI on the same day so I can't go. :-( kmc: that's too bad kmc: what are the details of this trip? kmc: there's also the matter of short-term versus long-term regret kmc: i.e. a wild night out may result in a hangover but become a fond memory over time shachaf: not sure about the details kmc: shachaf: i could bring you some cake on friday maybe kmc: after all you're the one who told me about my birthgigasecond in the first place kmc: it has eggs and dairy btw kmc: and a little beer shachaf: whoa, did I? shachaf: I guess I should keep track of people who are around your age who also have their birthgigasecond coming up. zzo38: I made ZZ Zero, it is a bit similar to ZZT, but ZZ Zero has its own assembly language. Here is an assembly language code in ZZ Zero: http://zzo38computer.org/textfile/miscellaneous/example1 Now I noticed there is a few bugs and a few things which could be written better than it is, did you find it even though it is not explained? shachaf: kmc: speaking of mushrooms are you mushroom pizzaing zzo38: Do you like ZZ Zero? shachaf: ZZZero38? zzo38: No, it is just the game program similar to ZZT, therefore I called it ZZ Zero instead. zzo38: How to improve the keyboard speed in BASIC? I did figure out a code to clear the keyboard buffer: DEF SEG = 0 : POKE &H41A, PEEK(&H41C) but this does not improve the speed of the keyboard, and only fixes it so that if the keys are held down to indicate movement, the move will stop as soon as the key is released, if the game speed is slower than the keys. kmc: shachaf: when is mushroom pizza zzo38: I like to make plain pizza shachaf: not announced yet zzo38: (without mushrooms) kmc: zzo38: which machine is that for zzo38: kmc: The BASIC code I posted is for PC. zzo38: (As far as I know, DEF SEG does not apply to any other computer) kmc: and what does DEF SEG do? kmc: I wrote plenty of QBASIC code but very rarely used POKE/PEEK zzo38: Selects which segment to use for POKE/PEEK. shachaf: zzo38: What are the ingredients of plain pizza? shachaf: Is it only dough? zzo38: (For example, if you write DEF SEG = &HB800 then you can access the video memory.) zzo38: shachaf: It is pizza dough, yes, although it is not entirely plain because I add oregano and oil on top too, usually, and sometimes also cheese (but not as much as the commercial pizzas). b_jonas: shachaf: quickly get a metalic hip prothesis to get out of the MRI and be able to go to the trip shachaf: But I want the MRI. b_jonas: shachaf: you'll have to organize another such trip then b_jonas: at a more suitable time kmc: woo, made it arseniiv: kmc: congrats! arseniiv: let the second gigasecond be even more nice arseniiv: hm it seems no one @told me anything about HOAS, let’s logread to be sure arseniiv: maye be should start using stub templates? => hehe arseniiv: Nothing will allow you to print properly. Printers don't work. => sad but true myname: an esolang where the print command behaves like a printer with all its quirks arseniiv: oh it hurts myname: sometimes, print will just put out some random emojis upside down myname: other times, it will print white on black because somebody configured it to do so arseniiv: oh pizzas. Now I want pizza arseniiv: I ate a croissaint today myname: cut your pizzas into twelve~ HackEso: https://hack.esolangs.org/repo/ arseniiv: oh TIL it’s written “croissant”, no saints and crosses, just a crescent arseniiv: I was discovered!! :o arseniiv: no more private talk with HackEso :′( arseniiv: myname: is it because 12 has so many divisors? myname: arseniiv: yeah, there's a song from axis of awesome about it arseniiv: interesting myname: an 8 slice pizza cannot be evenly shared by three wib_jonas: mmm pizza arseniiv: Lykaina: hi Lykaina: woke up at 6:56am to someone knocking at either my or my neihbor's door arseniiv: I want another croissaint, but it’s not healthy (and so delicious) and I don’t have any left arseniiv: damn, I wrote “croissaint” again wib_jonas: eat pizza instead arseniiv: no pizza either! arseniiv: no anything, only tea and apples arseniiv: and a fridge arseniiv: (I’m not entirely serious but there’s no pastry-dough-things) myname: i don't even get how you come to "croissaint", the pronounciation would be completely off wib_jonas: go shopping, today because tomorrow is a holiday and every shop will be closed. or order food from the internet. Lykaina: tomorrow is a holiday? arseniiv: myname: I know only pieces of French orthography :D hm now if I to compare with something I remember, it would indeed obvious. Though before today I hadn’t even write it in latin script at all arseniiv: and yesterday eating the previous croissant I thought it was connected with saints, not thinking too much about what it would entail for pronunciation arseniiv: that one I think was the reason the second i emerged today arseniiv: wib_jonas: hm what holiday, is it international enough?.. arseniiv: I have enough food but I want croissant but you may remember that I said donuts are the devil or something, and croissants definitely aren’t so far wib_jonas: Lykaina: yes, it will be --11-01, that's been a holiday for about ten years now wib_jonas: it is somewhat international Lykaina: all saints day? wib_jonas: ``` hg log -T "{rev}:{date|shortdate}:{files}:{desc}\n" -r 11995: HackEso: 11995:2019-10-31:quotes: addquote The domain is public, but what\'s the codomain? wib_jonas: Lykaina: dunno. I don't care about the significance or name of the holiday. that's for other people. it only matters that it's a holiday when most people don't work. Lykaina: i'm only awake cause some moron was knocking on doors wib_jonas: go back to sleep Lykaina: have to wake in an hour myname: perfect time for youtube cpressey: arseniiv: lambdabot did not msg me! But I read the logs. HOAS is intriguing (I've been reading about it) but it sounds like you have to apply higher-order unification to use it, which sounds a bit heavyweight "just for syntax". Also I'm not yet clear on what exactly makes it better than de Bruijn indexes. cpressey: I find de Bruijn indexes hard to read, but you could always pretty-print them into variable names when dumping out a structure. arseniiv: hm I think I made my HOAS best it could be without dependent types. I bet it allows false-positive “proofs” (of first-order statements, as propositionally the thing should work as expected), though I’m lazy to search for them; https://repl.it/repls/ImpartialWaterloggedFolder arseniiv: cpressey: on de Bruijn indices: agree arseniiv: hmmm could I write something like `Ex :: (Term t -> F (a t)) -> F (forall t. (Term t, a t))` arseniiv: I don’t even know what it is arseniiv: this should be akin to runST arseniiv: and then `ExI :: Term t -> I (a t) -> I (forall t. (Term t, a t)` and ``ExE :: I (forall t. (Term t, a t)) -> (Term t -> I (a t) -> I b) -> I b` or something arseniiv: would the code typecheck if this is a valid syntax at all wib_jonas: fungot, what's better for turning undead, a lathe or a turntable? fungot: wib_jonas: a lot to the paladins and a full line, much like this go board and replace it with the same way that i, myself, can hear?? wib_jonas: a lot of paladins for turning undead? yes, that could work Cale: `ysac Garlic Bread Guide - You Suck at Cooking (episode 98) https://www.youtube.com/watch?v=UPuV52ydBfU HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ysac: not found Cale: `ysaclist HackEso: ysaclist: boily shachaf cpressey: arseniiv: Interesting, I should try to wrap my head around https://repl.it/repls/ImpartialWaterloggedFolder sometime (I'll need more practice with GADTs first I think) arseniiv: ironic that I’m not so easy about GADTs still. It seems they are simple, but who knows what I could be missing. What GHC desugars them into wasn’t obvious to me when I read about that a week(?) ago lf94: arseniiv: GADTs are not magic... lf94: it's a fancy work lf94: First you start with ADT - what IS an ADT? lf94: (If I remember correctly) An ADT is a type with no parameters: type LoL = Int | String lf94: A GADT is a type that can take parameters (Generalized) lf94: Type LoL a = Int | a lf94: boom done lf94: nothing else to it kmc: lf94: the implementation is fairly complicated kmc: because when you pattern match on a GADT, you refine its type lf94: what matters is how to use it. kmc: and this can be used on the RHS kmc: iirc, GHC had to add type equalities as another kind of typeclass-ish constraint lf94: kmc what is the implementation of quantum mechanics? kmc: (a ~ b) => ... kmc: lf94: this is of some debate kmc: but also it is philosophical in nature lf94: It's very nice to understand the inner workings of anything lf94: but in many cases, you need to understand the usage of the thing kmc: I thought that arseniiv was asking about implementation kmc: because they mentioned desugaring kmc: iirc the features needed to typecheck those equality constraints are also needed for type families kmc: gadt can accomplish a lot of the same things kmc: GADTs are neat though kmc: they get you a lot of the power associated with dependently typed languages kmc: and allow you to implement much more correctenss properties in the type system kmc: when using Haskell as a metalangauge, it allows to put the object language's type system into the haskell type system arseniiv: lf94: hehe no, GADTs are trickier than simply adding a parameter. For example a DSL for simple expressions: arseniiv: data Expr a where arseniiv: Num :: Int -> Expr Int arseniiv: Add :: Expr Int -> Expr Int -> Expr Int arseniiv: Eq :: Expr Int -> Expr Int -> Expr Bool arseniiv: IfThenElse :: Expr Bool -> Expr a -> Expr a -> Expr a arseniiv: we couldn’t write something as refined by using plain ADTs where we only can return `Expr a`, not `Expr Int` or `Expr Bool` arseniiv: iirc, GHC had to add type equalities as another kind of typeclass-ish constraint => yeah, I was talking about that precisely :) kmc: there are weird ways to do it without GADTs kmc: but they're not as nice kmc: arseniiv: I forgot the name but there's a paper on basically how they did it arseniiv: but in many cases, you need to understand the usage of the thing => I join with kmc, surely, though ultimately an average human like me learns not by discovering representation nor by grasping API but by many many examples; how are these generated in each case is another question arseniiv: kmc: hm I can’t remember what I read too, why GADTs impl was even mentioned there, it seems that was a text on another topic arseniiv: ah I remembered: http://dev.stephendiehl.com/hask/#gadts-1 arseniiv: somewhat cluttered but there are lots of useful notes someone may have overlooked imode: arseniiv: your perspective is refreshing. imode: also happy halloween. imode: feed your jack-o-lanterns plenty of fire. arseniiv: imode: some years ago, I made an imrovised jack-o-lantern from a clementine and a clever(?) lighting kmc: happy halloween arseniiv: maybe I’ll find it and post a link imode: arseniiv: tiny pumpkin! lf94: arseniiv: that sounds cool arseniiv: imode: lf94: kmc: here: https://i.postimg.cc/5t3RY22v/DSC-1154.jpg arseniiv: as you see it wasn’t carved too deep but has a charming grin imode: it's so happy. ;~; arseniiv: very very happy arseniiv: I ate it after some time and was too lf94: hahaha lf94: so nice zzo38: shachaf: OK I looked at the fmt.h now. I think that the "c" format should not use UTF-8 and that UTF-8 should be a separate format (perhaps "u"). b_jonas: zzo38: definitely not u, that's already used. I recommend c with some prefix, like lc or Lc or qc kspalaiologos: I started working on the disassembler for real, in Java kspalaiologos: and I've got something set up for now kspalaiologos: +>+[>>>>[-]++++++++++ kspalaiologos: is getting translated back into kspalaiologos: ; -> frs kspalaiologos: ; -> imc r1 kspalaiologos: ; -> imm r1 += 10 kspalaiologos: just to note, these are not the formal asm2bf/bfasm instructions, just the building blocks the other part of disassembler will take care of kspalaiologos: if I went ahead with b_jonas: kspalaiologos: that has an unbalanced bracket kspalaiologos: `` asm2bf <<<"mov r2, 0" HackEso: ​/hackenv/bin/`: line 5: asm2bf: command not found kspalaiologos: b_jonas, yes, that's right kspalaiologos: but there are a lot of assumptions now kspalaiologos: because of early stage of the program zzo38: b_jonas: Yes, that would do. Yes, you are right, but fmt.h does not use the "u" format for anything, or most other formats supported by printf(). kspalaiologos: `` bfasm <<<"mov r2, 0" HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>[-]<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: perfect kspalaiologos: so this will get translated to some longer code because most isn't yet implemented kspalaiologos: so instead of outputting mov r2, 0 it would output something like kspalaiologos: frs, imc t1, mov kspalaiologos: so a lot of data isn't preserved by now kspalaiologos: btw, I remember that I've added a newline preserving wrapper over bfasm, but it seems like somebody has removed it kspalaiologos: `? bfasm HackEso: bfasm is the brainfuck assembler. Documentation and samples: https://raw.githubusercontent.com/kspalaiologos/asmbf/master/doc/bfasm.doc kspalaiologos: `? asmbf HackEso: Wrapper around bfasm, that automatically converts slashes to newlines and feeds it into original compiler kspalaiologos: nevermind, I named it the other way round b_jonas: kspalaiologos: name thme both bfasm, but use the ! framework for the wrapper one? b_jonas: also, I think I'm not esoteric enough because I don't see the point of a brainfuck disassembler kspalaiologos: well, I made a brainfuck assembler once kspalaiologos: and it's listed here as bfasm kspalaiologos: but now, I've got a few programs with the source code lost b_jonas: yes, I sort of understand the assembler kspalaiologos: and I can reverse engineer them by hand to check how are they made kspalaiologos: but for 40+ programs it takes too much time kspalaiologos: so I'm trying to write something to help me out b_jonas: ok, that is an esoteric enough goal kspalaiologos: that presumes, I dumped all the assembly source code with my trash and it's long gone by now lol shachaf: zzo38: It could also be {c|u} or something else. zzo38: shachaf: Yes, that could be another possibility I suppose shachaf: I defined a show() macro so I can type show(x) to print out the type-aware value of x and also the variable name. shachaf: So convenient. zzo38: Now I released ZZ Zero (although it is incomplete): http://zzo38computer.org/prog/zzzero.zip I also set up a NNTP to discuss it. kspalaiologos: what's this beauty zzo38: Do you mean the file I linked to? It is ZZ Zero; the read me file explains it. imode: rust tempts me once again. imode: I shouldn't use it. every year or so I get tempted to. arseniiv: I completed writing out the definition of generalized Minsky machine, at last arseniiv: it ended up pretty natural, though match+destruct commands end up with quite many arguments imode: generalized minsky machine, huh? arseniiv: for example a machine for { data Nat = Z | S Nat; data List = Nil | Cons Nat } would have following commands (`−t` input register of type t, `+t` output register of type t, `s` state): arseniiv: Z +Nat s; S −Nat +Nat s; Nat −Nat s +Nat s; Nil +List s; Cons −Nat −List +List s; List −List s +Nat +List s arseniiv: imode: yeah, its instruction set is based on several possibly interdependent algebraic types zzo38: Why does arin.ga doesn't works now? arseniiv: s/Cons Nat/Cons Nat List oerjan: is the concept of pregret related to the concept of type II fun? <-- huh. i feel like i've never learned to do that. Soni: 1. make esoteric language month 2. publish pure-sed doom port imode: I'd do it. Soni: (there is pure-sed tetris, after all) Soni: https://github.com/uuner/sedtris/blob/master/sedtris.sed ArthurStrong: Wondering, if it's been generated using pack of scripts of written as is ArthurStrong: She's got a career at Google: https://careers.google.com/stories/julia-on-growing-her-career-at-google/ aji: Soni: what are you doing here Soni: aji: who are you Soni: (and, more importantly, why do you care) b_jonas: oh I get it! they're called a ket-tle because when you start to boil the water, they hiss like a cat b_jonas: should have been spelled cat-tle but that's already used for a different word fizzie: `? kittegory HackEso: A kittegory is just a small category. fizzie: `mkx bin/just//grwp '\(is\|are\) just' | sed -e 's/:/ ::= /;s/$/\n/' > tmp/just && url tmp/just HackEso: bin/just HackEso: https://hack.esolangs.org/tmp/just b_jonas: `? char HackEso: Char is a prominent component of charcoal. b_jonas: `? long HackEso: Long is the Chinese word for dragon. b_jonas: the other type words of C don't seem to have a wisdom: int, short, float, double, bool, _Bool, complex, _Complex, atomic, _Atomic b_jonas: we do have one for pointers though b_jonas: oh, and b_jonas: `? void HackEso: Nothing to see here kspalaiologos: `? void * HackEso: void *? ¯\(°​_o)/¯ kspalaiologos: `? punpckhqdq HackEso: punpckhqdq? ¯\(°​_o)/¯ lf94: What language would you guys use to implement something new, that will be supported for the next 50 years? lf94: Basically I want to write a virtual machine for unreal script, and want it to live until at least I'm dead int-e: Fortran? Cobol? kspalaiologos: c'mon, it's never going to die myname: it should, though int-e: I was not objecting to C, I merely wanted to offer some alternatives. lf94: I don't want to use C because of bad type system, complex ecosystem, etc lf94: I was thinking lisp would probably be better kspalaiologos: you might end up like Reddit lf94: I want to use Rust, but Rust heavy as fuck. lf94: So I keep coming back, staring at Zig from a distance. lf94: I've actually used Rust for ~2 years now int-e: Honestly though... take any established language and chances are good that you can still run it 50 years from now. It may involve two layers of emulation. lf94: I should find a C with RAII and strong type system int-e: Oh, let's add vendor-neutral to the criteria. lf94: But in an adhoc fashion lf94: So that it can all be removed to compile with C compiler int-e: Swift, golang... such things might still disappear very quickly if the corresponding company ever goes under. HackEso: C is the language of��V�>WIד�.��Segmentation fault int-e: (I don't really expect either of those two to disappear.) lf94: int-e: thoughts on Zig? lf94: The developed it in a year basically lf94: The guy* lf94: int-e: what about JavaScript :^))) lf94: Lately I've been thinking more and more about interpreted languages int-e: lf94: I actually thought of that but hoped that nobody else would. int-e: lf94: Unfortunately I suspect it's here to stay as well. lf94: Basically an interpreted language trade-offs memory int-e: I don't know Zig. lf94: A compiled language typically needs more memory lf94: But you get way more control of the underlying system int-e: lf94: That's not really true anymore because of JITs. lf94: How complex is JIT int-e: (And Javascript would not be as dominant if people hadn't gone crazy in JIT compilation for JS a decade ago.) lf94: A compiled language, in the most basic case, is just turning language feature X into assembly Y lf94: Now with LLVM, I think there is no reason NOT to make it compiled int-e: Extrinsically JIT compilers use fairly crazy amounts of memory... they compile several versions of the same code, collect runtime profiling information to identify hot spots, require garbage collection... it adds up. lf94: int-e: check out Zig, for me. Your opinion matters a lot. b_jonas: I wouldn't trust javascript, because all the people who use javascript make programs that they throw away five or ten years ago, so you can't trust the language and its interpreters to be stable enough int-e: (Hmm, should've used a full stop rather than an ellipsis... those two sentences were not logically connected.) int-e: lf94: I really don't do requests. lf94: I guess with emulation, you can emulate compilers b_jonas: I recommend https://esolangs.org/wiki/UM-32 since it's based on like a thousand year old cult who made computers out of sand lf94: It would be cool to have some sort of crazy optimizing lambda calculus compiler lf94: int-e: Sorry, I didn't mean to offend int-e: Oh I'm not offended. b_jonas: that or MMIX, whose tagline is "a RISC computer for the third millennium", and people will be reading TAOCP fifty years from now so they'll also be interested to emulate MMIX lf94: I was going to target subleq vm lf94: as an alternative lf94: but it'd probably be very very slow. b_jonas: but C is pretty much the best option lf94: I should bundle tiny C compiler source with the project lf94: so someone can bootstrap b_jonas: lf94: the hard part is not the compiler or core language, but then environment and system access lf94: yeah... lf94: and C makes that the easiest b_jonas: C and unix together, yes lf94: https://en.wikipedia.org/wiki/History_of_programming_languages lf94: Man, this is pretty sad lf94: After the 70s everyone's been making garbage collected languages lf94: (Minus D, Swift and Rust) b_jonas: just look at how we unix people run unix programs on windows. sure, they don't integrate well into the environment, because they can like only access files if all characters in their names are in the locale-dependent default codepage, and you have to patch system() statements to add two double-quotes before the name of the program and one double-quote after the name of the program that you execute, b_jonas: and they can't printf floating-point numbers properly, but the end result is that with all that patching, you can usually run those programs, and windows libc supports them because there's a need for it b_jonas: every future system will support C and unix basics, so you can easily port programs from it, even if the system looks so different that you can't access its native resources to the fullest lf94: Is it difficult to re-implement C+ b_jonas: even if it has to run the whole C program in an emulated virtual 32-bit address space etc b_jonas: it might be inefficient, but that doesn't matter when you're running old programs lf94: Thoughts on Ada? b_jonas: also document the parts of your program that may have to be ported in the future, like Knuth does in TeX/Metafont/SGB. these are the parts that access the system or do IO, the parts that make some assumption that need not be true in all C environments, and the parts that they may want to optimize in a nonportable way b_jonas: that's what makes TeX/Metafont/SGB portable enough: you don't have to touch most of the code to port, just those specific parts lf94: b_jonas: interesting lf94: TeX is written in what? lf94: I thought it was Knuth's own lang fizzie: I think it's written in WEB, yes. b_jonas: it's written in CWEB fizzie: Is it? I thought it was just WEB, and used Web2C. b_jonas: which lets you combine the core with local "patch files" that replace the system-dependent parts (or any parts you want really) of the C code b_jonas: and then you compile the resulting code with a C compiler b_jonas: fizzie: I dunno b_jonas: fizzie: SGB is written in CWEB then int-e: WEB is Pascal based. b_jonas: I haven't really tried to look at how TeX is implemented fizzie: int-e: Right, but I think TeX systems use web2c instead. fizzie: https://ctan.org/pkg/web2c?lang=en int-e: fizzie: I'm sure it has been ported to CWEB fizzie: Well, the principle is language agnostic, anyway. b_jonas: I guess for portability we should count 6502 too. everyone will know how to emulate it with all its undocumented instructions and quirks of the NES and commodore 64 graphics and sound hardware, even 50 years from now. b_jonas: https://www.linusakesson.net/games/stranded64/index.php argues for using the commodore 64 for future portability b_jonas: so write the program in the form of an NES cart. just remove its battery if it has battery-backed SRAM, because it's easier to put a new battery in 50 years from now than to clean up the spilled battery acid and repair the PCB int-e: Hmm, interesting. I was under the misconception that TeX had been ported to CWEB. Apparently not... (or maybe that happened and was abandoned). b_jonas: target the NTSC version though, people might not be able to get a PAL NES so easily anymore that far into the future b_jonas: oh yeah, writing the program _in_ TeX or Metafont (as opposed to _like_ TeX or Metafont) is an option too b_jonas: people will be able to find interpreters for those 50 years from now too, even if they don't use them for their original purpose anymore b_jonas: the problem is, writing a program in those languages is an exercise in masochism b_jonas: they're not as useful for general-purpose programming as the NES, commodore 64, C and unix, or MMIX b_jonas: lf94: Knuth's own languages are MIX with various extensions, MMIX, PL/MIX, and possibly PL/MMIX. TeX is written in none of those. fizzie: I was almost expecting you were adding "TeX is not written in it." in each of those articles. fizzie: But maybe that's more of a `wisdom thing to do. b_jonas: ``` cat wisdom/pe*taneb* # like that entry? HackEso: Taneb is not elliott, a rabbi, Mark Zuckerberg, James Bond, Queen Elizabeth the first, or anyone older than Queen Elizabeth the Second. Pending approval: Shigeru Miyamoto. b_jonas: languages that TeX isn't implemented in? int-e: lf94: you should get shachaf's opinion on Zig since it doesn't have exceptions lf94: shachaf: opinion pls fizzie: That, and some other entries about inventions. int-e: but other than that... nothing really exciting to me. and this competition on hello world program size is getting boring fizzie: I've been writing Go lately, and Zig's `errdefer` would've come in handy a couple of times. int-e: I'm hoping for some serious consolidation in the near future. int-e: Having dozens of C-like languages that all have their own minor innovation is stupid. int-e: Maybe LLVM made writing compilers a bit too easy. b_jonas: I still recommend C++ and rust b_jonas: not for the program that needs to be portable to 50 years from now b_jonas: for more ordinary programs imode: rust has tempted me recently. I resist its temptation. b_jonas: imode: C++ then imode: python, C, and Go for me. b_jonas: imode: python is fine too for many purposes Soni: forget C-likes Soni: use sed imode: I tried. Soni: I tried rust but gave up on it after a while Soni: rust .so's crash on reload Soni: it does have good docs tho kspalaiologos: simple yet functional Forth dialect? kspalaiologos: with emphasis on ease of parsing kspalaiologos: anything will suffice as long as you can perform basic stuff and it's not so hard to parse/implement imode: kspalaiologos: forth has "dialects" by way of definitions, not inherent language features. I have a forth-like that compiles to C and also has an interpreter. kspalaiologos: how long is the interpreter? imode: 369 lines of python. imode: the compile-to-C stuff is even shorter, summing at around 100 lines. imode: iirc, anyway. kmc: Soni: how much of a compiler from a C-lke language can you implement in sed? kmc: that'd be fun kmc: compiling C with regexes imode: scratch that, the compile-to-C stuff is 230 lines, with the preprocessor being 88 lines of python. imode: I minimized it earlier. imode: kspalaiologos: the underlying language kind of looks and behaves like brainfuck. the interpreter implements 44 instructions, and that includes a semi-janky preprocessor. imode: 75% of these instructions aren't really required. kspalaiologos: the underlying language kind of looks and behaves like brainfuck - I blindly take it kspalaiologos: open source? imode: https://repl.it/repls/ImpressiveMagentaDestination imode: here's the interpreter. imode: https://hatebin.com/manaefqdti here's a prefix expression evaluator. imode: complete with variables. kspalaiologos: why did you bundle the macro preprocessor in imode: convenience. kspalaiologos: the language looks way more fun than stinky macros imode: mainly because I didn't want to type ,$1,$?]:$~$[. over and over. imode: for `else`. imode: feel free to remove the macro system. imode: it's just an instruction. imode: you don't have to use it. lf94: ok guys lf94: where the frig do I start with language design imode: I'm adding concurrency to the language as well kspalaiologos. lf94: Should I follow some online course? imode: lf94: think about the thing you want to write. figure out how to write it. kspalaiologos: lf94, dragon book kspalaiologos: look at some simple languages like B kspalaiologos: and try writing a lexer, parser and a -O0 codegen for it kspalaiologos: you may start out with lex + yacc imode: nothing needs to involve those tools. lf94: I want to learn proper language design kspalaiologos: but it's a good idea to use them lf94: Not just off-my-seat stuff kspalaiologos: ^ doesn't matter at all imode: "proper language design". imode: hahaha. kspalaiologos: when you write parser by hand imode: that's funny. kspalaiologos: you are going to do it wrong 100% kspalaiologos: just use the ready tools as you start off lf94: Why is that kspalaiologos kspalaiologos: cus you gonna die with painful death soon lf94: I will use lex + yacc if that's what's typically doen. kspalaiologos: I speak from my experience imode: no, please, write a parser. it's entertaining. kspalaiologos: ^ he probably doesnt know all the theory lf94: My goal is simple core + type system. imode: pardon me fuckboy? kspalaiologos: he has no idea how to describe syntax, what is EBNF, what type of parsers there are kspalaiologos: 'm speaking about lf94, not you imode: lmao I'm just kidding. lf94: You describe syntax with EBNF dont you? imode: you can describe it, yeah. lf94: single pass, multi pass, etc parsers imode: there's a pretty wide gradient with how complex language syntax can actually be. imode: some just require bare tokenization, like forths. imode: others are based on involved grammars. imode: all parts of the gradient are valid, it just depends on what you value. imode: starting in language design usually has someone ask "what do you value in a programming language?" imode: so, what do you value, lf94. lf94: I value a language which can map to assembly nicely lf94: It must have lambdas / anonymous functions lf94: It must have first class for list operations kspalaiologos: lisp x lambda calculus? kspalaiologos: very easy one to lex and parse IMO lf94: It must not be garbage collected imode: that can be anything from a forth to a C dialect to picolisp. lf94: It will be more like APL imode: forth-like it is, then. kspalaiologos: ah yes kspalaiologos: the C dialect kspalaiologos: I remember myself writing C89 compiler targeting brainfuck lol imode: when designing a language it's important to keep the "semantic gap" in mind. imode: i.e how far away on the abstraction hierarchy are you away from the bottom or the top. imode: I optimize for a small gap. lf94: I want a systems level APL-like language. lf94: Also: https://meta.stackexchange.com/questions/25840/can-we-stop-recommending-the-dragon-book-please lol imode: so when you're talking about anonymous functions, etc. that's a reasonably high level language feature. but you also want it to map to assembly.. lf94: I mean it all boils down to assembly anyway, no matter the language. imode: I have anonymous functions. but because I value a small semantic gap as well as making multiple language features pull double duty, they're implemented as something more general: concurrently executing processes. lf94: list comprehensions I think will be a prime piece of my language imode: and because of that small semantic gap, translating that to assembly is pretty trivial, involving minimal boilerplate. imode: why do you value list comprehensions. lf94: Because they allow you to generate lists in a very precise way. imode: wait until you see dictionary comprehensions. :P lf94: And all programming is just manipulating lists on some leel. lf94: well there are monad comprehensions too. lf94: It's all the same shit lf94: But imagine...a byte, 0x39, is also just a list. imode: any language can have list comprehensions because list comprehensions aren't that 1. complex or 2. valuable in some scenarios. lf94: [x & 0x1; x <- 0x39] lf94: AND bitwise op on all bits of 0x39 lf94: It should be a language where everything is a list/string/sequence imode: wouldn't... that just be 0x39 & (~0) lf94: yes, but in your case, you are specifically working with 8-bit byte lf94: now how do you 9 bit? :) imode: it's an upcast. imode: you change nothing. lf94: [x & 0x1; x <- 0b111011101] imode: ~0 = 111111..... lf94: I just specify 9 bits imode: like I said, try it in C with various types. lf94: imode: how do you split 101 out the middle? imode: you don't have to change anything. so I don't see your point. lf94: 1101 let's say (more unique) imode: what do you mean "split 101 out the middle". lf94: 111011101 lf94: X1101XXXX imode: what, you just want that section? lf94: > upcast lambdabot: error: lambdabot: • Variable not in scope: upcast lambdabot: • Perhaps you meant one of these: lambdabot: <[Bool] -> Bool> imode: (0bX1101XXXX >> 4) results in 0bXXXXX1101. lf94: But you cannot do that in C imode: uh, yeah. you can. lf94: You can specify 9 bits? imode: I can't specify 9 bits. but I can use a 16 bit value. lf94: Maybe that is better... imode: like I get it, it'd be interesting if you could work per-bit. but you can easily build this kind of stuff in any given language. imode: I can build custom control flow structures for it in mode, for example. imode: $1234 for each-bit to-string display repeat imode: each-bit extracts a bit. to-string converts that bit to a string. display displays the string. imode: the `for` is just aliased to `begin`. lf94: How would each-bit work lf94: gets an index or somethnig? lf94: Man maybe I should just start implementing a lisp imode: well, my language is a forth-like, and as such assumes some state that each word (function, if you like) takes as input, changes, and then returns as output. lf94: Compiled lisp that targets LLVM IR lf94: Then add ad hoc type system imode: so if we expect the source number to be on top of the stack/head of the queue, we can say at every iteration, we duplicate it and bitwise AND it with 1. imode: until the number is zero. lf94: to me type system is so important these days, for anything sane lf94: How would mode add a type system? imode: how would a forth add a type system? imode: there's a lot of ways you can do it. look at Factor for an example. it's statically typed iirc. imode: whoops, nope. it has strong dynamic typing. imode: https://en.wikipedia.org/wiki/Factor_(programming_language) kspalaiologos: ah yes kspalaiologos: clicking on stackexchange link showed me that my rep bumped by +200 kspalaiologos: https://codegolf.stackexchange.com/a/191482/61379 kspalaiologos: a lot of effort and processing power has been put here lol lf94: imode: I've looked at Factor too. lf94: Man plang theory is so fucky. lf94: "forth is good" "NO FORTH IS BAD" "forth is bad..." "wait, no, this person is convincing me otherwise again" b_jonas: oh also, b_jonas: UM-32 and GML have a lot of independent implementations, but don't use that as a heuristic for what's going to be useful 50 years from now, b_jonas: because most of them have already fallen off the web, and even the ones that haven't have probably bitrotten away b_jonas: oh right, postscript b_jonas: did we mention postscript? b_jonas: that's also a candidate, though not a very good one lf94: imode: can forth be compiled imode: lf94: sure. mine is. imode: directly to C. imode: lf94: wanna see the for each-bit thing in action. lf94: Not right now :) lf94: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blob;f=extra/spheres/spheres.factor;hb=HEAD lf94: This is like some C mix imode: https://hatebin.com/agluuirids imode: https://repl.it/repls/UnfoldedBaggyPiracy here it is, compiled and run. b_jonas: lemon! b_jonas: darn it b_jonas: I knew I was forgetting to buy something b_jonas: I should have bought lemons b_jonas: for fresh lemon juice on the fish kspalaiologos: did I just get the joke? imode: for any iteration, the queue looks like . you can do anything with the bit, including accumulate it, but at the next iteration, we expect the source-number to be at the head of the queue. imode: computing the sum of all the bits is pretty easy. kspalaiologos: I've got an algorithmic question kspalaiologos: i've got given a std::vector of two integers kspalaiologos: the integers are aranged in pairs imode: std::vector> ? kspalaiologos: now, I have to assign number to these integers, so the ones in pair have unique numbers whether it's possible. kspalaiologos: what is the most efficient way of calculating how many ways are there to do that? imode: can't seem to parse that, can you rephrase. imode: calculating permutations of pairs? kspalaiologos: let's do it the other way kspalaiologos: let's assume the number is a person kspalaiologos: we have a vector of couples kspalaiologos: now, we have to assign some character trait to each of these kspalaiologos: so the ones in couples have different character traits kspalaiologos: let's assume all the people are polygamic so one person can have multiple partners kspalaiologos: how many ways are there kspalaiologos: to assign a different character trait for each person, so the people in couples have different character traits, when possible? imode: I don't know what "character traits" are but this is a permutation problem. kspalaiologos: it's just a feature of a person imode: you're handed a set of pairs. form a set of people from those set of pairs. then calculate all possible pairings of two people. imode: n choose k. imode: https://stackoverflow.com/questions/18859430/how-do-i-get-the-total-number-of-unique-pairs-of-a-set-in-the-database b_jonas: kspalaiologos: character traits? like that crazy template argument to std::string in the C++ standard library? kspalaiologos: huh, I don't think this is the case kspalaiologos: b_jonas, no lamo imode: no ordering, no repeats means n choose k. kspalaiologos: let's look at this example kspalaiologos: assume the following couples kspalaiologos: A B, B C, A C, C D kspalaiologos: now, if we had three possible character traits for these kspalaiologos: there are 12 ways to assign them to these people imode: so it's really a triple. kspalaiologos: we can also have ten character traits kspalaiologos: or twelve b_jonas: also I should have fried the fish on a higher temperature imode: but it's a triple. where the third element is a list. kspalaiologos: now I don't really understand imode: n!/k!(n - k)! imode: but segmented. kind of. kspalaiologos: in which way segmented? kspalaiologos: can you point me to a formula that can calculate the result of example I've given? imode: you want all possible triples of (X, Y, Z). kspalaiologos: I'll figure out reest myself imode: X and Y are a couple, Z is a character trait. kspalaiologos: each of these has a character trait kspalaiologos: and if there is a couple, its best when they have different traits imode: you are underspecifying your problem. imode: explain it in clear language. kspalaiologos: I have specified it before kspalaiologos: alright, again kspalaiologos: I've got a set of pairs kspalaiologos: I have to assign a number to each element of every single pair kspalaiologos: i have to calculate, how many ways are there, to assign them kspalaiologos: with a few gotchas imode: do you want duplicates. kspalaiologos: a) in a pair, it would be the best, if every element has different number kspalaiologos: b) pairs don't repeat kspalaiologos: c) there is actually given upper limit for a number to assign kspalaiologos: (with a set of pairs, obviously) kspalaiologos: let's review these pairs kspalaiologos: A and B is the first pair kspalaiologos: B and C is the second pair kspalaiologos: A and C is the third pair imode: so the possible combinations of n items arranged into k sets is n!/(k! * (n - k)!) imode: 10 items arranged into pairs is 10!/(2! * (10 - 2)!) kspalaiologos: ^ are you following the rule that items in a pair should get different numbers assigned? kspalaiologos: also, you're given the number of pairs imode: I'm just presenting n choose k. kspalaiologos: you just need to calculate how many ways are there to assign number to each element of pair imode: here's a better question: where did this come from. imode: is this some kind of programming challenge. imode: it sounds almost like a math puzzle. kspalaiologos: not a programming challenge per se, I just need to get better algorithm on my hands imode: for undergrads. kspalaiologos: because the one I've got isn't quite right kspalaiologos: and takes way too long to execute imode: well whatever it is it's not so much an algorithm moreso an expression of the variables that make up your problem.. imode: so each pair has two people in it, and each person gets assigned a number, but the numbers have to be different. imode: both within the pair and outside the pair. imode: so A = 1 and B = 2 holds regardless of who A and B pair up with, right. imode: in which case you still have n-choose-k because A and B can just be labeled with unique numbers. changing the names of the items of each pair doesn't change the problem. kspalaiologos: so how do I use this in my algorithm, because I'm pretty much lost now kspalaiologos: four given pairs, AB BC AD CD, and I may assign to every leter a number from 1 to 3 Soni: kmc: as long as you limit yourself to ASCII x86 instructions, sure why not kspalaiologos: how do I calculate how many ways are there to do that, given that people in pairs need to have different numbers imode: count the number of unique people in your vector of pairs (add them to a set and compute the count of elements in the set), then feed that into count!/(2! * (count - 2)!) imode: where ! is factorial. Soni: ever heard of a certain "executable paper"? kspalaiologos: alright imode: it may be different but that's at least a starting point. kspalaiologos: I'll think about it imode: because I'm still unsure as to the results you want. imode: given AB,BC,AD,CD, assign a number to each letter such that, when each letter is substituted for its number, the pair is unique (i.e no pairs like (1, 1)). imode: is this closer to the thing you want. kspalaiologos: and I need to calculate amount of ways a number can be assigned to them imode: alright, then what I gave you doesn't work. kspalaiologos: and the maximum number to assign is given imode: so you have your set of labels, the set 1 to N, where N is your given. imode: and you have your set of pairs. imode: can two letters have the same number but be in different pairs. kspalaiologos: e.g. pairs: AB CD, then yes, A=C=1 B=D=2 is a valid solution imode: that complicates things a bit. imode: the stupidest thing that could possibly work is brute force search. imode: have you tried that. kspalaiologos: unsatisfying results imode: can I see some code. kspalaiologos: I'll send you over when I get to the PC I've been using shachaf: lf94: What sort of opinion do you want? imode: this problem has more than likely been solved somewhere before. lf94: shachaf: Do you think Zig is a viable long term lang? kspalaiologos: ^ heard about it kspalaiologos: yet can't help, I don't know zig shachaf: I think Zig is going in a promising direction? I like a lot of the things they're doing. imode: universal long-standing concepts need to be simple enough and popular enough to withstand erosion by time. imode: zig has none of those characteristics. but it is nice. shachaf: I don't know what the question means. Certainly Zig is (rightly) pretty volatile right now. kspalaiologos: imode, any ideas? kspalaiologos: if none, I'll just settle on my bruteforce probably imode: kspalaiologos: let me get back to you on that. kspalaiologos: yeah, sure imode: I'm sure this problem has a name somewhere. imode: isn't it just graph coloring. kspalaiologos: it could be imode: https://en.wikipedia.org/wiki/Graph_coloring kspalaiologos: yeah lol kspalaiologos: thats it imode: draw out the pairs as a graph, change the numbers to colors. imode: thank god for doodle paper. imode: well there you are. you're looking for the possible colorings of a graph. kspalaiologos: doodle paper? kspalaiologos: what's this imode: yeah I have a notepad that I just sketched your problem out on. kspalaiologos: so I need to calculate chromatic polynomial. kspalaiologos: I shouldn't have slept at math lessons oerjan: It must have lambdas / anonymous functions It must not be garbage collected <-- i have the impression combining those two features is particularly hard oerjan: because once anonymous functions are first class, deciding life time becomes undecidable without GC b_jonas: oerjan: deciding the lifetime is undecidable period. garbage collector is just the generally accepted good approximation that we accept, in taht you have to write your program such that it doesn't take consume much memory if you keep everything that a mark-and-sweep garbage collector couldn't prove unused arseniiv: what strategy C++ uses to work with lambdas’ lifetimes? b_jonas: so now if you write programs in certain ways, you have to explicitly mark some references as weak or as weak-keyed for the gc to be able to free stuff up int-e: oerjan: GC is totally optional, you can run out of memory instead. b_jonas: or require more help from the program than you need with a GC oerjan: thanks nitpickers oerjan: you're not wrong oerjan: but anyway, i think my point was that without GC it's going to need a far more technical solution to even get close, which lf94 probably doesn't want to implement lf94: maybe lambdas are a mistake arseniiv: lambdas are good lf94: named lambdas are just functions :v arseniiv: sure, scoped function definitions and first-class functions are not much worse oerjan: (and still need GC) arseniiv: how does C++ treat closures’ lifetime? arseniiv: as it doesn’t have a default GC, does it try something else to leak memory in these cases less? shachaf: Why would it leak memory? shachaf: C++ lambdas are just a function together with an autogenerated struct. shachaf: The struct can either have copies of things you capture or pointers to them. arseniiv: hm maybe I ask not what I mean to ask shachaf: ask not what you mean to ask, but what your ask means arseniiv: let’s say, are lambdas in general different? arseniiv: from the kind one has in C++ arseniiv: s/lambdas/closures arseniiv: hm I should logread that tomorrow kmc: 13:28 < int-e> oerjan: GC is totally optional, you can run out of memory instead. kmc: https://groups.google.com/forum/message/raw?msg=comp.lang.ada/E9bNCvDQ12k/1tezW24ZxdAJ kmc: arseniiv: at a broad conceptual level C++ lambdas (and Rust lambdas, which are very similar) are like lambdas in other languages kmc: they can be called, they have captures kmc: since these are languages with explicit memory management, things can be captured by value or by mutable or immutable reference kmc: (by value meaning by move or copy, depending) kmc: in Rust the lifetime of reference captures is checked by the compiler. so you cannot return a closure which refers to something on the stack of the function which made it kmc: in C++ of course there is no such checking and that would be undefined behavior (perhaps the compiler can warn in some simple cases, but it's not guaranteed) kmc: the unusual thing about lambdas in these languages is that they use static dispatch by default kmc: a function that takes a closure will have a generic/templated type kmc: template void use_closure(T closure) { ... closure(); ... } kmc: when you call use_closure([]() { ... }) kmc: it makes a struct type for the lambda, containing its captures (nothing in this case), implements operator() for that type, and instantiates the templated use_closure() at that type T kmc: that struct type cannot be named, which is why 'auto' is not only a convenience in C++ but is essential kmc: there are no function pointers involved in calling a lambda this way, and the lambda body can be inlined into the function it's passed to, and all sorts of optimizations performed kmc: and that's why you can make a chain of higher order functions like map, filter, etc. and it compiles down to a flat loop (if the compiler is smart enough) kmc: very cool kmc: in Rust you'd do fn use_closure(closure: T) kmc: which is basically the same except that Rust has a trait system so you can say that the type T must be a function taking and returning nothing kmc: you could also have Fn(int) -> char kmc: now there is another tricky thing b_jonas: kmc: right. and the drawback is that, unless you write the both standard library and the compiler in tricky ways to optimize this, you'll end up with twenty copies of the red-black-tree rebalancing function compiled into your binary b_jonas: and ten copies of a mergesort kmc: when the closure is created, you can move non-copyable types into the closure kmc: but when it's called, can you move them *out*? kmc: this is why Rust has Fn, FnMut, and FnOnce kmc: when called they take &self, &mut self, and self, respectively kmc: so FnOnce can move out of its captures (and therefore such a closure can only be called once) kmc: FnMut can mutate its captures, Fn can only read them kmc: C++ has a similar thing but it's too arcane for me to remember kmc: now this is all well and good but sometimes you *want* dynamic dispatch kmc: fortunately this can be done using each language's respective dynamic dispatch features without anything particularly special to functions kmc: in C++ every lambda's type is a subclass of std::function so you can upcast &my_unnameable_lambda_type to &std::function and pass that pointer around kmc: in that case operator() is a virtual call arseniiv: C++ has a similar thing but it's too arcane for me to remember => yeah I heard something about lambdas which could only read their arguments in C++ b_jonas: kmc: no, that's not how std::function works I think kmc: in Rust you use the "trait object" feature which, again, creates a vtable b_jonas: in C++ kmc: b_jonas: isn't it? b_jonas: well, I'm not really sure b_jonas: because I don't use std::function in C++ kmc: so why did you say that shachaf: Converting to std::function does a heap allocation, right? kmc: shachaf: I think so, yes kmc: but you can also use it by reference without that? kmc: i'm not totally sure kmc: I may be wrong with what I said above shachaf: Man, all this C++ nonsense is nonsense. kmc: in Rust you can make heap-allocated trait objects as well as by-reference ones shachaf: also what's the benefit of writing map and filter instead of for and if b_jonas: shachaf: no, not necessarily, in modern libstdc++ it has like one or two pointer of space reserved in the std::function itself, and if the function object fits there then it won't allocate kmc: Box vs &dyn MyTrait b_jonas: like how std::string is implemented these days kmc: b_jonas: yeah b_jonas: but without where std::string is now no longer trivially swappable kmc: Box is like C++'s std::unique_ptr so it has automatic, deterministic deallocation but can't be copies b_jonas: without the drawback where std::string is no longer trivially swappable or trivially move-assignable b_jonas: it has to check if it has to rewrite a pointer that points inside itself kmc: Rust also has refcounted types, the cool thing there is that there are both thread-local and multithreaded versions, the former is faster, and the compiler will error if you try to share them between threads kmc: so that's pretty neat kmc: infodump kmc: shachaf: if you want a real puzzle try making an exception-safe variants library in C++ without heap allocation b_jonas: kmc: and they both work with heap-allocated arrays, with the help of some cleverly hidden magic shachaf: exceptions are scow b_jonas: dynamic length arrays that is shachaf: -fno-exceptions b_jonas: oh, I had a weird dream by the way shachaf: What are variants, and what's a variants library? b_jonas: I dreamed that I found a case where using exception throwing and catching is actually useful, not because I have to interface with a preexisting library whose interface involves exceptions, but because that's intrinsically what the control flow was like kmc: shachaf: sum types b_jonas: shachaf: tagged unions b_jonas: yeah, sum types shachaf: Why would that need heap allocation? shachaf: It's just some data. b_jonas: kmc: can you take the C++ standard library route where if an exception is thrown then the variant can end up empty even if an empty branch isn't declared, or do you want a variant that does double-buffering? kmc: b_jonas: that's one issue yes b_jonas: kmc: and how exception safe do you want? can move assignment or swapping throw too? kmc: shachaf: for one thing there is trickery when you change the type and the constructor of the new type throws kmc: i don't know kmc: chris was explaining why it's so tricky and he convinced me at the time, but i forgot the details kmc: anyway, bbl shachaf: this is why i use c b_jonas: see you kmc shachaf: all the c++ trickery is a self-made problem shachaf: you gotta sfinae the recursive templates b_jonas: shachaf: can you do that in constexpr land yet? b_jonas: shachaf: anyway, C++ used to be hard, but it's almost solved now. we just need these few more language extensions into the standard and then it will be a very easy to program and versatile language where you can just write programs naturally olsner: the essence of c++ is something like creating worse problems so you can pat yourself on the back for coming up with more complicated solutions b_jonas: olsner: oh, as in "I know, I'll just use C++! Now he has two problems." int-e: . o O ( plus 1 for every language revision ) oerjan: `? myndzi HackEso: myndzi used to keep us all on our feet. oerjan: ^celebrate fungot: \o| c.c \o/ ಠ_ಠ \m/ \m/ \o_ c.c _o/ \m/ \m/ ಠ_ಠ \o/ c.c |o/ oerjan: looks a bit defunct, though int-e: hmm, which bot went with that b_jonas: \o/ _o_ imode: a thought just occurred to me. imode: to do iteration through something, all you have to do is 1. spawn a process and send your ID to it. 2. send your collection to the process. 3. drop the handle to the process. 4. `receive` in a loop. imode: the generating process can send you data, but you can't send data to it. imode: but you don't need to. imode: interesting. shachaf: `pbflist HackEso: pbflist: shachaf Sgeo quintopia ion b_jonas Cale kmc b_jonas: shachaf: please use an url with pbflist, because afterwards it's hard to tell which strip came out when and so hard to tell whether a strip has been listed yet b_jonas: right now you probably mean https://pbfcomics.com/comics/the-treat/ imode: in fact... you could probably define a `bitvector` word that takes a number and, upon request, sends you back the next bit in the number... shachaf: I'd rather not, but I can refrain from pbflisting at all oerjan: eep, sub-zero forecast shachaf: @metar KOAK lambdabot: KOAK 012253Z 30008KT 10SM CLR 22/M01 A3010 RMK AO2 SLP194 T02171011 int-e: . o O ( sub zero is a no-op ) shachaf: Are pointers signed or unsigned? olsner: they could be shachaf: How should I think of them? olsner: what does it actually mean though? when do you have sign/zero-extension of pointers where you could tell the difference? olsner: I do like to think that x86-64 has signed pointers the way they're usually used (with kernel space in negative addresses) shachaf: Right, that's the sort of thing I was thinking. shachaf: Maybe it makes no difference. oerjan: . o O ( the difference is negative ) int-e: shachaf: signs are pointers, so pointers should be signed, is that what you mean? shachaf: Exactly. shachaf: But then what are cosigns? int-e: They are orthogonal to signs. shachaf: 17: 76 06 jbe 1f shachaf: So confusil. shachaf: I just learned about gas "1f" label syntax a few days ago, and I kept thinking it was a 0x1f offset. shachaf: This time it actually is a 0x1f offset! shachaf: (To be fair, this is objdump output, so it wouldn't use the 1f syntax.) int-e: To this day I find it confusing that the offset of relative jumps is relative to the address following the current instruction. int-e: 0x19 + 0x06 = 0x1f shachaf: In particular I was trying to figure out a jump target in gdb a few days and I computed it relative to $rip without thinking. shachaf: No, not a jump target, rip-relative addressing. int-e: It makes sense, of course (the instruction has been decoded, and correspondingly, the IP advanced, when the jump happens) int-e: (thinking in terms of *very* old processors like 8086) shachaf: Is rip-relative addressing the same way? I guess it must be but I've already forgotten. int-e: yes it is. shachaf: Yep, I just checked. shachaf: I should know this since I implemented most of the addressing modes recently. shachaf: Though not some of the weird ones like 64-bit (%eax). shachaf: Does anyone use that? int-e: Actually I think so. shachaf: `asm addr32; mov (%rax),%rdi HackEso: 0: 67 48 8b 38 mov (%eax),%rdi int-e: Having 32bit pointers is still attractive to conserve memory. shachaf: But you can use them with 64-bit registers, can't you? olsner: since you get zero-extension for most operations, you can usually just use %rax with a 32-bit address and save a byte shachaf: At least if you write something like mov foo, %eax; mov (%rax), bar shachaf: I wonder, is %eax sign-extended when you use (%eax)? shachaf: I imagine not. int-e: But I can make up reasons... getting proper overflow behavior for (%eax + 4*%esi + 0xbase).... olsner: but what would use something like that in 64-bit code? shachaf: When do you want overflow behavior for addresses? int-e: olsner: I *would* hope that this is a purely theoretical reason :) olsner: but an interesting side-effect if the address size affects all of the address calculation or just the size of the input registers int-e: Clearly I expect that it affects the whole computation. shachaf: `asm mov (%eax,%edx), %edi HackEso: 0: 67 8b 3c 10 mov (%eax,%edx,1),%edi shachaf: `asm mov (%rax,%edx), %edi HackEso: ​/tmp/asm.s: Assembler messages: \ /tmp/asm.s:1: Error: `(%rax,%edx)' is not a valid base/index expression \ /tmp/asm.s: Assembler messages: \ /tmp/asm.s:1: Error: missing ')' \ /tmp/asm.s:1: Error: junk `)' after expression shachaf: `asm addr32; mov (%rax,%rdx), %edi HackEso: 0: 67 8b 3c 10 mov (%eax,%edx,1),%edi shachaf: `asm addr32; gs; mov (%rax,%rdx), %edi HackEso: 0: 67 65 8b 3c 10 mov %gs:(%eax,%edx,1),%edi shachaf: `asm gs; addr32; mov (%rax,%rdx), %edi HackEso: 0: 65 67 8b 3c 10 mov %gs:(%eax,%edx,1),%edi shachaf: Just write the prefixes in any order you like. So convenient. shachaf: `asm data16; mov (%rax,%rdx), %edi HackEso: 0: 66 8b 3c 10 mov (%rax,%rdx,1),%di shachaf: Golly. shachaf: `asm movq (%rax), %xmm0 HackEso: 0: f3 0f 7e 00 movq (%rax),%xmm0 shachaf: `asm movq (%eax), %xmm0 HackEso: 0: 67 f3 0f 7e 00 movq (%eax),%xmm0 int-e: oh right, that was the gas syntax for these funny addressing modes int-e: offset(%base,%index,multiplier) olsner: possible dumb reason: someone planned/built a 32-bit x86 emulator (before compatibility mode was invented?) and convinced AMD to provide support for extra-stupid JIT compilers that just add prefixes to specific instructions int-e: olsner: sorry, I lost track... reason for what? olsner: for having the 32-bit override int-e: plausible enough int-e: I also bet this was rather cheap to support. int-e: In context... which is a CPU that supports real mode (which has 32 bit addressing mode via the address size prefix) and 32 bit mode support for legacy software. oerjan: congratulations, schlock. you might get to save the galaxy single-handed... shachaf: What other bizarro addressing modes are there in amd64? shachaf: Also did I link this tcc SSE bug I found? https://lists.nongnu.org/archive/html/tinycc-devel/2019-10/msg00033.html shachaf: It was somewhat annoying to track down. kmc: what bizarro mode are you talking about kmc: the base + mult*index + offset mode is pretty reasonable, aside from the gas syntax for it kmc: with Intel syntax it'd be like MOV EDI, DWORD PTR [4*EAX + EDX + 7] kmc: or what have you shachaf: Sure, but you have addr32, fs/gs, rip-relative, all sorts of things. shachaf: Presumably there are some things I don't know about. shachaf: Also there are all the little details, which I think I got right? shachaf: `asm lea (%r11), %rax HackEso: 0: 49 8d 03 lea (%r11),%rax shachaf: `asm lea (%r12), %rax HackEso: 0: 49 8d 04 24 lea (%r12),%rax shachaf: gotta include that sib byte for r12 shachaf: Of course I haven't done SSE/AVX/whatever at all, or the VEX prefix, or anything like that. kmc: so much nonsense shachaf: what instruction encoding are you into fizzie: It doesn't even have a bit-reversed addressing mode. shachaf: What's that? fizzie: It's a thing DSPs have, for speeding up FFTs. fizzie: The TI TMS320C54x at least has it. shachaf: `asm lea (%r13), %rax HackEso: 0: 49 8d 45 00 lea 0x0(%r13),%rax shachaf: Right, r13 has a special case too. shachaf: But I think that one is modrm+offset rather than modrm+SIB. shachaf: fizzie: That sounds pretty fancy. I should learn about fancy DSP things. fizzie: They also have circular addressing modes. fizzie: For FIR filters and suchlike. shachaf: Speaking of circles, what's the nicest way to write a circular buffer? shachaf: I don't like having a boolean to distinguish empty from full. fizzie: You can go with head + length instead of head + tail. fizzie: Then you have 0 and N for empty and full. shachaf: Hmm, I guess. fizzie: There's also that one fancy thing that I think Chrome used somewhere, or someone used somewhere. shachaf: What about the case where you have a separate reader and writer? shachaf: I know of some other tricks: shachaf: Map two copies of the same buffer in adjacent address space, so you get a contiguous buffer. fizzie: The Bip-Buffer, that's what I was thinking of. fizzie: The Bip-Buffer doesn't need the mapping trick. fizzie: (On the other hand, it may waste some space.) shachaf: Another trick I heard about is, instead of keeping the read/written size mod the buffer size, keep the total size, and mask it at use time. kmc: bip booper fizzie: I can't find any reference to anyone actually using the bip-buffer, just a few random implementations, so maybe I imagined that. shachaf: I'm reading about it now. fizzie: spsc-bip-buffer is "#108 in Concurrency" on lib.rs, which sounds like a TripAdvisor ranking. shachaf: This explanation doesn't seem very clear. shachaf: What's the benefit of this? kmc: what is lib.rs shachaf: Is it that writes are always contiguous (but reads might not be)? fizzie: AIUI, the reads are contiguous too. shachaf: Maybe I don't understand the diagram in https://www.codeproject.com/Articles/3479/The-Bip-Buffer-The-Circular-Buffer-with-a-Twist shachaf: What happens in 5? From their description it looks like both A and B contain data. fizzie: Right, reads of multiple writes are not necessarily contiguous. fizzie: Maybe. shachaf: I guess the idea is that a library might want to write a fixed-size thing and you want to make sure to be able to fit it in the buffer? shachaf: And another library can also interpret that fixed-size thing since it's contiguous. shachaf: (Or, y'know, non-fixed-size.) fizzie: Or, no, maybe reads of any size can be contiguous too, it's just that in stage 5 if you wanted to read more than the orange bit some copying would be involved. fizzie: ...or maybe not. shachaf: As in copying all the data in the buffer? fizzie: Yeah, I was looking at the API, for reading you just ask the thing for the largest contiguous block. shachaf: Regular circular buffers have this property too. shachaf: Which API? fizzie: Well, the BipBuffer class described there. fizzie: But I guess it's still useful, if you (say) put length-delimited protos there. shachaf: Oh, the one on that page. shachaf: I guess that's true? fizzie: As long as you write the thing into one contiguous (reserved) block, the reading side can also read it as one contiguous block. shachaf: Right. shachaf: Maybe it would be better for APIs to support reading and writing in multiple chunks. fizzie: Maybe. shachaf: I guess there's some concern that the API will want to keep an internal buffer and do some copying in order to support that. shachaf: I think the mmap solution is better if you want things to be contiguous. int-e: @metar lowi lambdabot: LOWI 020320Z AUTO 27011KT 9000 FEW001 BKN002 08/07 Q1006 shachaf: @metar koak lambdabot: KOAK 020253Z 00000KT 10SM CLR 13/01 A3011 RMK AO2 SLP194 T01330011 53004 imode: @metar ksea lambdabot: KSEA 020353Z 01013KT 10SM SCT200 09/03 A3037 RMK AO2 SLP293 T00890033 imode: using the thought I had earlier, you can build interesting data pipelines. imode: sum $1234 bitvector imode: or sum bitvector $1234 number imode: because you push a handle to the concurrent process to the queue, any further processes can be constructed, passed that handle, and form a linear dataflow graph. imode: a bidirectional one as well. `number` takes a number and a process to send that value to. `bitvector` takes a process, receives a number and sends the bits of that number to the taken process. `sum` takes a process, receives a number and keeps a running tally of that number which is available on request. imode: you can do lazy evaluation with that. imode: you can design a process that takes two handles, receives something and broadcasts it to the two processes it has handles to. imode: https://hatebin.com/shiyqdhisf not bad. imode: bitvector's logic is wrong, it should send zero on completion. imode: https://hatebin.com/lriwwfiijo that's better. imode: I feel like you can get pretty granular with this. kspalaiologos: has someone taken up on esoshell project? b_jonas: kspalaiologos: I beg to differ, but I can write usable parsers from scratch. just don't look at my ancient psz interpreter. that was long ago, and I've matured since. b_jonas: " I shouldn't have slept at math lessons" => meh, it's quite possible that many of your lessons were a waste of time. get some good books and learn from them instead. b_jonas: " Are pointers signed or unsigned?" => I don't think that distinction makes sense there. you don't high-multiply pointers, or compare pointers from two different arrays b_jonas: but if I have to choose, they're probably signed on x86_64 (because the top bits are usually the same unless you have a future cpu with a 2**64 bit long address space), unsigned on x86_16 (because they are mapped into x86_32's address space by zero filling), b_jonas: shikhin: for x86_32 though, signed vs unsigned does make a difference, and I don't know which one is used. either look it up in the ELF ABI docs, or allocate a 2.5 GB sized array (for which you need either an x86_64 kernel, or an x86_32 kernel configured to the slower 3GB+1GB address space split rather than the default 2GB+2GB split) and see how it's layed out and how pointers in it compare b_jonas: s/shikhin/shachaf/ b_jonas: I suck at autocompletion b_jonas: oerjan: ^ b_jonas: " To this day I find it confusing that the offset of relative jumps is relative to the address following the current instruction." => I find that one natural, and the other convention (which some cpu archs use) unnatural b_jonas: " Maybe it would be better for APIs to support reading and writing in multiple chunks." => they already do, if you mean multiple chunks in memory assembled to a single chunk in the file descriptor or back, with preadv/pwritev, plus the aio api eg. aio_write is parametrized like that by default (I wanted to say "works like that by default" but it's probably not correct to use "works" for the b_jonas: linux aio api at all) b_jonas: hmm no, I remembered wrong, aio_write doesn't use preadv-style scatter-gather addressing shachaf: I'm not talking about OS APIs, which support this already, but other APIs. b_jonas: what api was it than otehr tahn preadv/pwritev, I wonder? I'm sure there was another shachaf: Presumably that's also what fizzie is talking about also. shachaf: Just some arbitrary function in your code like parse_thing() that takes a buffer and a length. b_jonas: what other APIs then? b_jonas: shachaf: I think https://laurikari.net/tre/ allows you match a regex to a string that is not continuous, and even from a string that's read lazily shachaf: OK, but regex matching is one special-case API which is already naturally written as a state machine anyway. b_jonas: but of course continuous buffers have a lot of advantage b_jonas: easier to optimize b_jonas: I worked with bitmap images at my previous job, and I wouldn't like a non-continuous bitmap image b_jonas: if I was given one, I'd just copy it into a proper continuous buffer (that is also aligned so that its rows are padded to a size that is 64 bytes long modulo 128 bytes; possibly padded a little at the beginning and end so I can read past the ends; and with the color channels either together and padded as if you had four channels if the input has three, or separately each one in a layer, depending on b_jonas: what I want to do with the image) shachaf: Of course APIs can do that, and keep their own buffers. shachaf: But then you have a bunch of different buffers all the over the system, which doesn't seem that nice. b_jonas: shachaf: no, in my experience once you have a continuous buffers, I could use them with multiple apis in place for image processing b_jonas: there are subtleties about pixel formats, but in practice most of the time I didn't have to do unnecessary copies shachaf: OK, but maybe you have one buffer for parsing an HTTP request, and then another buffer for parsing the image it contains, or whatever. shachaf: Presumably you want to avoid a bunch of copies if you can. b_jonas: shachaf: the HTTP buffer has compressed images shachaf: Sure, another buffer for decompression. b_jonas: I have to decode those to raw uncompressed anyway if I want to work with shachaf: I'm describing the kind of thing you might want to avoid. shachaf: Can your decompression algorithm operate directly on the circular buffer? b_jonas: but in practice when I get an image from HTTP, I save it for multiple uses rather than process directly b_jonas: shachaf: hmm, I don't know the details, I usually decompressed images with either ImageMagick or ffmpeg, and read them from a regular file b_jonas: shachaf: for decoding video, I did store the uncompressed frames sparsely, so each frame can be anywhere in memory and they can be reused as a circular buffer b_jonas: shachaf: when the video is read from network directly, rather than local file, then ffmpeg does the reading, so I don't know what kind of buffer it uses b_jonas: admittedly I used ffmpeg as a separate process, so there are two copies of the uncompressed raw data there b_jonas: so I guess I was wrong above b_jonas: three copies if I want a planewise format shachaf: Running a separate process for video decoding is obviously not reasonable for any kind of special-purpose application. int-e: . o O ( Prove or disprove: There is a POSIX extended regular expression of length shorter than 10000 that accepts the multiples of 7 in decimal, with leading zeros allowed. ) int-e: *Main> length rex ==> 10791 int-e: Which doesn't include the anchors ^( and )$, so 10795 is where I'm really at. int-e: Make that 10793 (the parentheses are not required). Oh and I'm excluding the empty string but as far as I can tell this doesn't affect the length anyway; it's a matter of using + or * in one place. b_jonas: int-e: eww. b_jonas: int-e: also isn't it ^[[:space:]][-+]( )$ b_jonas: no wait b_jonas: ^[[:space:]][-+]?( )$ int-e: b_jonas: nah, no signs myname: int-e: if i want to be picky, i'd say .* doas accept the multiples of 7 int-e: myname: yeah but you know what I meant anyway int-e: Also obviously the right way to write such a regular expression is to not do it. :P int-e: (But the second best way is to write a program to do it for you.) b_jonas: int-e: yeah, there are programs that can automatically convert a nondet finite automaton to a regex, even with the blowup b_jonas: I know of one b_jonas: but there are probably more because it's a known algorithm int-e: But do they also try to optimize the result size... b_jonas: int-e: obviously the regex would be shorter in perl regex syntax, where you can use the "recursion" feature, not to build recursive regex, but to reuse longer regex multiple times int-e: yeah that would definitely help olsner: hm, surprisingly large blowup from such a reasonably sized state machine int-e: it's easily O(3^n) where n is the number of states int-e: So... let me try... 5 states (remainders 0..4 only): 689; 6 states: 2701; 7 states: 10793 int-e: That really looks a bit worse than O(3^n). But of course the number of states is still small. int-e: But wait. O(4^n) actually makes more sense. int-e: And it looks pretty close to that. int-e: Hi oerjan. oerjan: hi int-e int-e: But eh. My (fairly primitive) code is here: http://paste.debian.net/1113236/ ... it's optimizing, including a small peephole optimization (intelligently choosing between [07] and 0|7 depending on context), but fundamentally the question is whether there is a better way to convert a DFA (which happens to be a minimal NFA for the purpose) to a regexp than removing states one by one. int-e: And I just don't know the answer to that question. olsner: I tried a bit with https://github.com/qntm/greenery, it seems to always produce a regexp that converts back to the same DFA (which I suspect is not optimal for making a short regexp) int-e: Well this is inherently a DFA... you have 7 remainders to keep track of, so that's a minimum of 7 states, and if you use 7 states then you'll be dealing with a DFA. oerjan: oerjan: ^ <-- i have no idea why you pinged me there oerjan: unless it was to joke about autocompletion oerjan: (in which case you need to work on your jokes) int-e: Maybe b_jonas wanted to highlight me. Which would've been appropriate. :) arseniiv: what books on numeric recipes related to floating-point (or esp. IEEE 754) issues could you recommend? With recipes for inverse hyperbolic functions or e. g. if there is a sense to define `coshm1(x) := 0.5 * (expm1(x) + expm1(-x))` or one should just use plain `cosh(x) - 1` int-e: fun question.... b_jonas: oerjan: sorry, that should have highlighted olsner b_jonas: fizzie: the https://esolangs.org/logs/all.html website seems to be down int-e: I mean, cosh(x) - 1 suffers from terrible cancellation around 0, but 0.5 * (expm1(x) + expm1(-x)) still suffers from cancellation (expm1(x) = x + x^2/2 + O(x^3), expm1(-x) = -x + x^2/2 + O(x^3), cosm1(x) = x^2/2 + O(x^3)...) int-e: So exp1m(log1p(sinh(x)**2)/2) may be better. b_jonas: arseniiv: the fourth edition of Knuth volume 2, only it's not yet written int-e: Modulo function names. arseniiv: b_jonas: :( arseniiv: int-e: ah, I suspected my definition would have a flaw b_jonas: ah sorry, that will be third edition b_jonas: no wait b_jonas: fourth edition b_jonas: anyway, until that time, you can look at the existing third edition b_jonas: it doesn't talk about IEEE 754, but it does talk about floating point in general b_jonas: MIX uses a different floating point format that shifts by mix bytes, rather than bits, but the main text considers other bases too, including base 2 b_jonas: what the current edition doesn't consider is features specific to IEEE 754, which are infinities and NaNs fizzie: b_jonas: I'm not sure what's up with it, my monitoring has been saying every now and then that it's down for a bit. fizzie: Working for me now. arseniiv: b_jonas: mix bytes => wait, there are its own bytes? How many bits? b_jonas: arseniiv: either six bits, or two decimal digits b_jonas: arseniiv: technically the book says the byte has a range from 0 to a maximum that is between 63 and 99 inclusive, so a binary MIX goes up to 63, a decimal up to 99, a ternary up to 81 b_jonas: arseniiv: see our wiki article b_jonas: (and the book itself) arseniiv: I wonder if MIX-related issues don’t make the text obscurer arseniiv: yeah, I was to look for searching if I have it somewhere arseniiv: don’t remember b_jonas: have what? b_jonas: the books? arseniiv: b_jonas: hm I don’t seem to find there much of the redundant recipes I was to look for b_jonas: fizzie: yes, it's up now arseniiv: b_jonas: yeah, it seems I have that volume here, but the contents page doesn’t look too promising arseniiv: I mean, for basics I have that “What every computer scientist should know about FP arithmetic” article reprint-as-an-appendix-from-some-Sun-manual int-e: texlive's documentation packages are ridiculously big arseniiv: but the careful examination of numeric issues by myself seems unnecessary if… hm I wonder if I should look at Numpy code b_jonas: arseniiv: TAOCP vol 2 almost certainly isn't enough for what you asked, b_jonas: but I'm not familiar with other books to recommend b_jonas: I haven't read many such books really int-e: I'm aware that there *are* numerical recipe books... arseniiv: b_jonas: ah, OK arseniiv: int-e: yeah, they just seem elusive b_jonas: there's Stoyan Gisbert's numerical analysis textbook, which is freely available online, but I think only exists in Hungarian. I don't know if there's any translation int-e: @where floating-point lambdabot: "What Every Programmer Should Know About Floating-Point Arithmetic" at and "What Every Computer Scientist Should Know About Floating-Point Arithmetic" by David lambdabot: Goldberg in 1991 at and olsner: b_jonas: finally a good excuse to learn hungarian? b_jonas: it has three volumes, the first one is an introduction one that goes pretty far, and then the second and third are about solving partial differential equations numerically b_jonas: therea are certainly more good books, I'm just not familiar with them b_jonas: for the logs, IIRC Stoyan Gisbert's book is available somewhere from http://www.tankonyvtar.hu/hu/bongeszes , but that server is down right now b_jonas: it says that it's down until 2019-11-03 though, so unless you see the date autoincrement, it'll hopefully come up later arseniiv: and then the second and third are about solving partial differential equations numerically => (aaaah!! you know, this is the night here, how would I go to sleep now) arseniiv: (I’m afraid of numeric PDEs after my naive Shrödinger model blown up) b_jonas: arseniiv: right, the whole thing is so tricky that it's no wonder you need two volumes on it int-e: @where ffi lambdabot: http://www.cse.unsw.edu.au/~chak/haskell/ffi/ b_jonas: I think the first volume covers ODEs and numerical integration b_jonas: int-e: lol int-e: dead link tjhough b_jonas: int-e: https://www.haskell.org/onlinereport/haskell2010/haskellch8.html#x15-1490008 is probably the current one b_jonas: it's integrated to the main standard from the separate tech report int-e: @where+ ffi http://www.haskell.org/onlinereport/haskell2010/haskellch8.html b_jonas: @hwere ffi lambdabot: http://www.haskell.org/onlinereport/haskell2010/haskellch8.html int-e: yeah that's what I copied b_jonas: that's not standalone though, you need most of chapters 24 to 37 inclusive arseniiv: @ʍere ffi -- just testing lambdabot: http://www.haskell.org/onlinereport/haskell2010/haskellch8.html b_jonas: which have the relevant Foreign modules b_jonas: eg. https://www.haskell.org/onlinereport/haskell2010/haskellch28.html#x36-27400028 defines the Foreign.C.CLong type b_jonas: so perhaps https://www.haskell.org/onlinereport/haskell2010/haskell.html#QQ2-15-159 would be a better link b_jonas: int-e: ^ int-e: I don't like the anchor :P b_jonas: int-e: same without anchor then? int-e: well then it's no longer the FFI specifically int-e: @where report lambdabot: http://www.haskell.org/onlinereport/haskell2010/ (more: http://www.haskell.org/haskellwiki/Definition) b_jonas: int-e: sure, but it's where you look up the ffi b_jonas: which might not be obvious b_jonas: I think it even has additions to the original ffi report int-e: I'm happy with the link to chapter 8 arseniiv: how did something like [miau] in English end up spelling “meow”? Prior to hearing the pronunciation I thought it should be something like [mju] and secretly thought how strange it should be to hear that from cats b_jonas: arseniiv_: no, that's "mew" which is a synonym int-e: They're all terrible approximatiopns of the real sound. b_jonas: int-e: no surprise, because most animal calls don't follow the phonemics of any human language oerjan: shocking b_jonas: so they're transcribed a bit randomly b_jonas: *ribbit* int-e: "ribbit" is pretty good, compared to that. arseniiv: it seems frogs make at least two types of sounds, one closer to ribbit and the other to qua(k)? b_jonas: dunno, I live in a city, I rarely hear actual frogs arseniiv: or maybe it’s just different kinds of frogs, humble and noisy arseniiv: I heard some at various times but won’t say I had enough to decide shachaf: a personal God quaquaquaqua with white beard quaquaquaqua outside time without extension oerjan: whatwhatwhatwhat int-e: shachaf: fungot has got you? fungot: int-e: come here, my snuggly green cutie-pie! a little you value those of your own. int-e: good one int-e: ^style fungot: Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack oots* pa qwantz sms speeches ss wp ukparl youtube int-e: (despite the source ;-) ) shachaf: int-e: The problem is I had to wake up early so I only got three hours of sleep last night. b_jonas: shachaf: is the white beard outside all four simultaneous sides of time? b_jonas: `? time cube HackEso: EARTH HAS 4 CORNER SIMULTANEOUS 4-DAY TIME CUBE IN ONLY 24 HOUR ROTATION. 4 CORNER DAYS, CUBES 4 QUAD EARTH. Bible A Lie & Word Is Lies. Navel Connects 4 Corner 4s. God Is Born Of A Mother - She Left Belly B. Signature. Your dirty lying teachers use only the midnight to midnight 1 day (ignoring 3 other days) Time to not foul (already wrong) bible time. Lie that corrupts earth you educated stupid fools. b_jonas: is there a tetris game for keyboard where there are ten buttons in a row that set the horizontal positions of the piece directly, and doubled four buttons to set its orientation? I wonder if you could play that faster than tetris games with traditional controls kritixilithos: is a 2-counter machine where all the commands are ordered, eg after the execution of ADD, the instruction right below it is executed next, [specifically ADD(r) instead of ADD(r,c) and JZSUB(r,c) instead of JZSUB(r,c1,c2)], still TC? lf94: what's r, what's c lf94: jzsub <- jump if sub is zero? lf94: (subtraction result) kritixilithos: whoops should be INC and JZDEC, jzdec is jump if zero else decrement, r is register and c is command kritixilithos: because the wikipedia article on counter machine gives the instruction set as "{ INC ( r, z ), JZDEC ( r, ztrue, zfalse) }", but the esolangs article (in words) seems to imply INC(r) and JZDEC(r,c) but I can't tell imode: I don't think so, no. imode: oh, nevermind, that's absolutely TC. imode: if by JZSUB(r, c) you mean "jump to c, otherwise jump to ip+1" imode: that's how most assembly languages work. kritixilithos: imode: yes kritixilithos: okay thanks, I'll try to figure out the details myself lf94: imode what do you think of code vs spec lf94: some say they are one in the same. Typically, I think this way, but as I think about it, it seems very wrong way to think. lf94: code is based on a shit ton of assumptions lf94: because of the underlying impl lf94: spec is just english imode: lf94: code vs. spec? in an ideal world, they'd be one and the same. lf94: how can you say that though, when code depends on an underlying implementation? lf94: 1 = 1 can mean anything in code. imode: define underlying implementation. you obviously have a case in mind. lf94: so like lf94: if we used C to define a spec lf94: it wouldn't be good, because C has undefined behavior, thus the spec has undefined behavior... lf94: plus the semantics can change based on the variant of C lf94: at least when you write in english, it is direct imode: that's not how that works. just because C's standard contains undefined behavior doesn't mean the specification (reference implementation, if you will) has undefined behavior. imode: just because english has the capability to be ambiguous does not mean a specification written in english is ambiguous. lf94: right, we can be very specific and unambigious lf94: but with C it really depends imode: it really doesn't. lf94: can you think of a way to prove yourself wrong? imode: can you provide proof of your statements? imode: or even what you mean by "spec" vs "code". imode: because you have definitions that are loosely defind between people. lf94: (I am asking for you to try and break your argument against me, yourself btw XD) imode: what is my argument, exactly. lf94: spec and code are the same lf94: or can be lf94: spec and code can be equally specific, or non-ambigious lf94: In the context of C I guess imode: it's interesting that you built that up from "in an ideal world, they'd be one and the same". lf94: If we use something like Coq - ok, then yes, I 100% agree lf94: But Coq is also like writing with your teeth imode: how about you define "spec" and "code" for me. lf94: A specification describes what should be done, how it should be done imode: congratulations, that's suddenly most codebases. lf94: Code that implements a specification is like building the machine imode: if not all of them. no, actually, all of them. lf94: I know what you are saying... imode: "what should be done" "how it should be done". imode: unless you give those things definition they mean nothing. lf94: "place the number 2 into the register a" lf94: how do you specify this in C? lf94: A spec is a blueprint imode: it depends. what is register A, what does "place the number 2" mean, what does "place X into Y" mean, etc. lf94: Code is the manifestation lf94: Maybe that's the power of a spec imode imode: your thoughts lack actual definitions to anything you're stating. lf94: It can leave some ambigiuity... imode: specifications are intended to be as unambiguous as possible. otherwise they're just "rough guidelines". imode: if I hand you a specification I do not expect you to take liberties unless as directed. imode: this is a human process. lf94: A lot of specs do not paint a full picture though lf94: vs code, which is the whole picture as you build it imode: read the last part of the second to last message I sent. lf94: > lack of definitions < because I'm exploring the semantics of these lol, sorry... imode: it's the same case for "implementation defined" behavior within C. lambdabot: :1:6: error: parse error on input ‘of’ imode: no, you're just babbling. imode: there's a difference. lf94: what's wrong with that imode: don't paint "babbling" as "exploration", because nothing of what you say has any substance. what is "code" vs. a "specification". if we don't have definitions we can't have a conversation. oerjan: hm now i'm hitting that logs not loading bug lf94: imode: sorry to upset you. I will stop talking now. imode: it's not upsetting, I've just asked for some definitions. :P lf94: I don't know what the definitions are - that's basically what I'm trying to figure out... imode: start with a working definition and then tear it to bits. lf94: if spec and code can accomplish the same things, they are essentially the same, except one can do work right away imode: for instance, a specification is a set of rules governing what a conforming example of an instance of that specification should follow. imode: or do. imode: code is commonly defined as encoded instructions intended to be consumed by a computer or a piece of software. imode: if you ask if these two can be the same, you have to say "what does it mean for them to be the same or different". imode: they're different definitions. how can you construe them to be the same. lf94: code is a collection of instructions to be carried out by a computer oerjan: paradoxically, the difference is that a specification can leave some details unspecified lf94: spec is a collection of instructions to be carried out by a human lf94: oerjan: I said this, but imode shot it down fast :) imode: oerjan: I can leave a lot of details unspecified in code, though. such as how something is actually done. imode: of course that's pretty shallow considering you can always find out what's done commonly. lf94: The main semantic difference I see is one is read by computers and the other a human imode: code is commonly read by humans. imode: in fact it's the foundation of a couple million careers. :P oerjan: sad, miserable careers, but careers nevertheless lf94: If I write a spec in C, I have to understand C and english imode: you just have to understand C, actually. lf94: and I write a spec in English, I just have to understand English lf94: Also English is going to be around for at least 100 years imode: I don't get where "I have to understand C and English" comes from. you just have to understand C to read a spec written in C. lf94: imode: a lot of C code uses English in comments and variables imode: lf94: tell that to C programmers who don't use english comments and variable names. lf94: a lot of C...not all imode: of which there are many in my personal circles. lf94: I'm sure you've seen C written in an APL-like style lf94: I'm definitely not talking about that. imode: nor am I. lf94: Also, Plan 9 style C sucks too imode: if I specify a virtual machine in C, and I declare that this implementation of a virtual machine is "the specification of this machine", then you should be able to take it as the specification of that machine. oerjan: https://en.wikipedia.org/wiki/Z_notation imode: substitute C for your language of choice. imode: put it to you this way: if I was handed two text files, how could I tell which one is a specification. arseniiv: then you should be able to take it as the specification of that machine => reference implementation, yeah lf94: Right...by whoever tells you... imode: Z is good. TLA+ is good. lf94: The nice thing about an English spec though is that it's tech agnostic imode: arseniiv: pretty much what I'm getting to. imode: lf94: oh really? imode: what does that have to do with technical specifications written in it? lf94: Because you don't need to depend now on things with their own specs lf94: spec rabbit hole imode: you have to introduce new terms, some of which you may have imported from other piece of literature, which may depend on other pieces... imode: just because you have adopted a vocabulary does not mean there's not a chain of documents that defined that vocabulary. arseniiv: I like taking math examples when I think about interfaces or specs or something, though I don’t know a way to define loose spec following in general lf94: There is some research project in this discussion. :p arseniiv: for example, a field; field axioms are an interface, or a spec, and concrete fields are its implementations imode: lf94: here's a challenge. I hand you two text files, you build me a decider to determine which one's the specification. lf94: undecidable obviously lf94: it's whatever you tell me is arseniiv: (field axioms + the language) imode: correct. so why are you trying to approximate it. imode: you are confusing a technical issue with a human one. lf94: so I guess now the conversation changes lf94: are english or code specs better? imode: define better. imode: and why do we have to have a "better". lf94: good point imode: an underspecified specification can exist regardless of language. imode: a nonconforming implementation can exist regardless of language. lf94: are english or code specs better for long term archival of instructions to build something? arseniiv: but if we have, say, a finite field? this is too not a concrete thing, it could be another spec, but it clearly “implements” a field spec imode: 1. why archival. 2. can you expect humans to be able to read either language in 10,000 years? 3. is the result even runnable in 10,000 years? imode: I can have some paper tape containing the baudot encoded specification of a piece of software. it does not mean that 1. someone will be around to read it. 2. a machine is available to decode it. 3. a human will be around to read it. 4. hardware will be present to run the result. imode: 1 and 3 are different. 1 pertains to anything that has consciousness and the ability to read symbols. 3 pertains to humans and human languages specifically. lf94: "why archival" is like "why exist" lf94: archival so it can exist again, if it a useful tool. lf94: 2. i definitely expect english to be read in 10,000 years. imode: what is so useful a tool that it cannot last through ages on its own. lf94: an obscure one :) imode: we have not stopped using hammers. they are useful tools. I am not aware of an "archival grade hammer". lf94: what do you mean by 3 lf94: the spec of a hammer fits in your brain though lf94: literally one look at a hammer -> bam you have the spec imode: aha, you've come across a clue. lf94: all code is logically complex though. imode: that's an odd presumption. lf94: it's a big "problem" lf94: it's true imode: have you ever written a piece of code that you could in good conscience throw away. lf94: all code I've written is basically "thrown away". lf94: I think the only code that isn't worth throwing away is like, assembly kmc: a lot of code is written to be thrown away and then isn't kmc: and just grows like a katamari arseniiv: are english or code specs better for long term archival of instructions to build something? => as the other time, I’d suggest the examples are the king. If we have a language and many various means to illustrate its structure and semantics even just internally, some one could understand it. But not without many examples. E. g. what’s the sense of this language?: { ε, ac, bc, abcc, aabccc, abbccc, aabbcccc, … } — probably arseniiv: you’ll recognize what is that “…”, but if I showed you only { ac, bc }, would you be that sure? (hopefully no) imode: concepts that last centuries are ones simple enough to be rediscovered at a glance by common humans. imode: either as self-evident consequences of the universe we live in or as incredibly popular ideas that never fell out of following. lf94: so concepts mean more than specs? lf94: mean more / are more valuable lf94: I would say that makes specs even more valuable imode: the concept of a turing machine has lasted a century in about 10 or more years. imode: 1936, iirc. lf94: but a turing machine has a spec imode: a turing machine is a concept. it has a definition. lf94: a spec is a just a giant definition isnt it imode: why giant? lf94: a definition is usually short, in the common sense imode: "to be called a square, a rectangle's sides have to be equal in length." arseniiv: so concepts mean more than specs? => personally I’d say it depends. A concept may be pretty vague and work, which means there are noncanonical choices to be made to make it a complete spec but any of that choices would make a useful thing exchangeable with things resulted from other choices imode: I'd say that's a specification for a square. lf94: ok so let me ask this then arseniiv: for example should the tape of TM be infinite in all directions or just in one? lf94: would you rather write a spec in code, or in english, knowing it has to last the next 150 years? imode: arseniiv: just one. as defined by turing. imode: I'd say code. because I have a runnable example of it. but why not _both_. lf94: You can do both of course imode: I have an english description of Mode, I have a Go description of Mode, I have a C description of Mode. lf94: More work :) arseniiv: imode: hm I should have picked another thing to illustrate my argument then lf94: Having many descriptions is probably the best imode: if you wanna last years the key is redundancy. imode: if you wanna last centuries the key is virality. arseniiv: pretty aphoristic arseniiv: . o O ( if you wanna last millenia then no luck ) lf94: Thank you imode for the discussion :) arseniiv: (hm there should be something closer to million years) lf94: Based on this, I would build an English spec as a generalization of the thing I'm building imode: np. if I had to offer a piece of advice, don't focus on building the monolith from 2001. build things that are so small they're universal and portable, then evangelize the fuck out of them. imode: the things you write are transient. the good bits are in them somewhere. lf94: So it would be specified as I build, since you encounter problems as you build lf94: That's a good idea you know lf94: "micro specs" lf94: or specs so small they really are just definitions of many things arseniiv: OTOH gluing different standalone programs is the part I’m least comfortable with imode: if it's small enough you can throw it away and rewrite it from memory it's probably worth keeping. imode: one has to eventually realize they're going to die eventually. and short of inscribing the details of their thoughts/software/language/etc on a chemically stable medium orbiting a planetary body with a stable orbit, the things you do have to carry on to the next generation, and the one after that... etc. imode: lf94: question, what motivated your line of questioning? imode: https://github.com/narenratan/jonesforth_arm64_apl this is nuts. imode: lf94: didn't you say you wanted an APL-style language that maps neatly to assembly and has first-class functions and comprehension syntax? lf94: is this it? lf94: imode: what motivated me is writing software right now is a big mental hurdle because of human reasons lf94: i want to write things that last imode: what human reasons? lf94: the only lang I see this is true of is anything in C lf94: I just cant get over that a lot of shit I write is just going to rot imode: what have you written? lf94: Most of the stuff of value I've written in JS imode: what're the things you value? lf94: base64 over irc; steganographic program to hide text in text; a level viewer lf94: things that have actual use as tools lf94: https://github.com/lf94 imode: and why will they rot? imode: you seem to have written a good many useful things, I don't know why you think they'll "rot". lf94: I dunno, I expect none of this to work after 20 years. lf94: _Maybe_ some Rust stuff. imode: can you give me a justification as to why you think that. imode: the technology required to run the things you wrote isn't exactly uncommon. imode: complex. but not uncommon. imode: along with that, a lot of this is certainly transcribable to a new language. imode: have kids, teach them to maintain your code. easy way. imode: I should build a Mode-to-WASM transpiler. imode: cash in on the eventual hype. andrewtheircer: i have an eso idea imode: is it on the wiki. andrewtheircer: you have a 2d table with circles standing up -- wheels andrewtheircer: the wheels are divided into segments andrewtheircer: you can push a wheel and make it roll for a bit andrewtheircer: a wheel hitting a wheel perpendicular to itself will make it drop andrewtheircer: dropped wheels are useless andrewtheircer: two wheels must contact in specific ways to do stuff lf94: imode the hype has come and gone lf94: around wasm imode: I could probably just generate assembly using Mode at this point... imode: maybe I should toy with that over the week. imode: having multiple targets is going to be a little challenging. I guess, anyway. the same forms are gonna be generated regardless of the architecture. andrewtheircer: i like corewar imode: dup drop swap last new zero one add subtract while repeat equal less imode: process run halt imode: 16 commands. arseniiv: sounds like a good mantra imode: :.;$,01+-[]=<{}# arseniiv: once I had an avatar which depicted all reserved words of a language arseniiv: BTW I really like your idea with {} arseniiv: what does # do and where is `self`? imode: # is 'self'. imode: but it can also be 'halt', if you start each process as having its identifier in the queue. arseniiv: polymorphism of specifications imode: so 16 commands either way. 'halt' is unneeded: you can always phrase things so that termination is at the end. imode: yeah, I'm trying to specify "core" vs. "extended" command sets. imode: I have a theory that ,1[] is all you need. arseniiv: seems too minimal lf94: imode target subleq lf94: one instruction set computer lf94: this is actually one of my goals lf94: when i make a lang arseniiv: I like that I liberated myself from μ-recursion when generalizing Minsky machine arseniiv: now maybe we need a good name for the operator arseniiv: x :: (as -> b) -> (as -> b -> b) -> (as -> c) -> (as -> b -> c) -> b arseniiv: x z s q f args = search (z args) where arseniiv: search i = if f args i == q args then i else search (s args i) arseniiv: something like maybe lf94: existsOr lf94: Or do what the js community is doing, using ? lf94: object.prop?.inner?.innerinner? arseniiv: I meant -or as a suffix there :D arseniiv: there’s no or, if the value doesn’t occur in the range of `f args`, we loop forever lf94: findOrFail lf94: no, better: find-or-floop lf94: (floop -> forever loop arseniiv: this is one of the ways to add TC to a set of operations on several inductive types arseniiv: μ operator doesn’t generalize nicely lf94: add looping: turing complete, right? arseniiv: yeah, something like that arseniiv: when I generalized MM, I saw there were many noncanonical choices made arseniiv: I unmade them arseniiv: this had an effect so that I want to evangelize generalized MM somewhere :P lf94: I'm not familiar with what MM is - is it that counting machine? lf94: I've really had subleq machine stuck in my head for the past week. arseniiv: actually kritixilithos had mentioned it earlier today, I mean not a generalized one arseniiv: it has only INC and JZDEC arseniiv: lf94: oh sorry I’m conflating two frameworks now arseniiv: when talking about that `x` operator, I talked about generalized recursive functions lf94: > generalize recursive functions lambdabot: error: lambdabot: • Variable not in scope: generalize :: t0 -> t1 -> t lambdabot: • Perhaps you meant ‘generate’ (imported from Lambdabot.Plugin.Haskell.E... lf94: what is that exactly kmc: > butts lambdabot: error: Variable not in scope: butts lf94: or is this just fancy talk kmc: @quote lambdabot: Weyl says: In these days the angel of topology and the devil of abstract algebra fight for the soul of every individual discipline of mathematics. lf94: for a function that can iterate over any x lf94: map: [T] -> [Q] lf94: something like that b_jonas: arseniiv: isn't that basically a pointer machine though? arseniiv: lf94: like simple recursive functions, which is a definition of computability for functions on N, but the generalized ones take on any finite set of algebraic types lf94: sorry all that went over my head arseniiv: b_jonas: which one, { INC, JZDEC }? b_jonas: you know, one that has registers that point into algebraic structures allocated on the heap, can construct new algebraic structures with their fields filled from registers, test between variants, have arbitrary control lf94: > computability for functions on N < lambdabot: :1:36: error: lambdabot: parse error (possibly incorrect indentation or mismatched brackets) b_jonas: arseniiv: the generalized Minsky Machines lf94: what does this really mean arseniiv: lf94: I’m to blame to, I conflated two things I had thoughts about and hadn’t even noticed it quickly lf94: "N" <- natural numbers? arseniiv: lf94: I’ll better give a link, wait a sec lf94: ok what I said then sounds right lf94: as an example lf94: map: [T] -> [Q] lf94: loop: [T] -> ??? arseniiv: one of the formulations: https://en.wikipedia.org/wiki/%CE%9C-recursive_function arseniiv: though I like a variant I saw in Manin’s book on computability, it allows several results as well as arguments, adds function concatenation and makes some things more natural. Though I extended on it after all too :o arseniiv: b_jonas: yeah, if there is any exposition on those I’ll be glad if someone points me to it, I don’t want to claim anything already invented lf94: arseniiv: i'm still confused :v lf94: This stuff is written as if someone reading is reading it as a reference... arseniiv: lf94: sorry… lf94: right now I'm interpreting this as some peano number stuff arseniiv: I hope someone will find a better link. Hm lf94: so the numbers are defined via induction arseniiv: yeah it’s pretty close arseniiv: though here we already need them defined lf94: but I'm very confused about the goal here lf94: or the generalization lf94: is the generalization just saying, we can do more than numbers? arseniiv: the goal is to define all computable functions in that simple inductive manner lf94: (natural numbers) lf94: ahhhhh arseniiv: is the generalization just saying, we can do more than numbers? => yeah lf94: so we are saying generalized u-recursion is turing complete? lf94: because it can make any program? arseniiv: for example we can formulate it for binary strings, or natural numbers + lists of them lf94: you know what i mean lf94: yeah yeah lf94: we can define any computable function :D lf94: with this lf94: very very cool arseniiv: yeah, it can, as the regular one is its instance arseniiv: (almost) arseniiv: (as I’m breaking with μ for x) arseniiv: but machines are prettier arseniiv: they don’t need to have extra stuff, only constructors and destructors arseniiv: constructors like INC and CLR which should be explicit when we generalize, and destructors like JZDEC, again it would become more complex unfortunately lf94: "machines are prettier", like lambda calc vs turing machine? arseniiv: in this case I’m on the side of λ lf94: but you said 'machines are prettier' arseniiv: TM is too complex compared with MM, for me arseniiv: I meant GMM :D lf94: I like the simplicity of lambda imode: something tells me that 01[] is suitable for turing completeness. lf94: but it's not for free lf94: imode: there is a actual competition to determine the smallest turing machine arseniiv: even with de Bruijn indices? lf94: symbols:states lf94: I think the smallest is 2:3 or something lf94: arseniiv: those are the best :) imode: don't see how that's relevant. lf94: imode: because you can verify if having 4 symbols is enough. imode: not really, no. imode: not without actually, y'know, doing it. arseniiv: but imode’s machine is the other sort of machine lf94: I mean I guess 1 symbol is enough lf94: (See: iota) imode: 0 enqueues a 0, 1 enqueues a 1, [ dequeues a symbol, and if it's 1, advances 1 instruction, otherwise it skips past the matching ]. lf94: (I'm incorrectly mixing shit - sorry again) imode: though I'm trying to figure out how to, for example, encode a 'not': something that detects a 1 and enqueues a 0, and detects a 0 and enqueues a 1. imode: [0] would be the former. lf94: "detects a 1" lf94: where does the input come from lf94: where does it go lf94: at the beginning? lf94: (input)(program) ? imode: it's a queue machine. read above. imode: if I do 0 I expect a 1 in the queue. imode: if I do 1 I expect a 0 in the queue. imode: you can say "if I dequeue a 1, then enqueue a 0." but you can't say "if I dequeue a 0, then enqueue a 1". imode: [0] would take a 1 and spit out a zero. arseniiv: hm suddenly I remember a question. Once I thought up an extension to DFAs to make a bunch of those I worked on smaller: an “ε” transition which was run only if all others couldn’t, without consuming an input symbol. Since then I realized it’d be better to call that an else-transition, and the DFA an else-DFA, as it’s not like NFA/ε-NFA at all, and it translates to a DFA quite trivially. Now, does it have maybe a better-known imode: actually it has to be [00] lf94: imode: but what about encoding anything past the closing ] imode: maybe [00][10]? imode: mm, no. imode: 0 [00]1[10] maybe? lf94: [0][1] ? but your "[ deques" comment is throwing me off imode: the first [00] consumes the enqueued value and does nothing. it then enqueues a 1. lf94: dequeue arseniiv: imode: are […] still the loopy brackets or something else? imode: arseniiv: loopy, yeah. imode: [ dequeues a value and, if it's a 1 symbol, enters the loop. imode: otherwise it skips it. arseniiv: though I’m not clever atm anyway lf94: given we put 1 on stack: [0][1] -> 0[1] -> 0 imode: it's not a stack. lf94: whoops, queue lf94: this is too brain bending :D imode: given a 0, the first [00] consumes the enqueued value and does nothing. it then enqueues a 1, which fires the next loop, which enqueues a 1. imode: should actually be [00]1[01] imode: given a 1, it dequeues a 1, enqueues a 0, then enqueues a 1, which fires the loop, enqueues a 1, and then terminates.. imode: yeah I don't think 01[] is a valid command set. hm. imode: I guess this would kind of fall under BF instruction minimization but for queue automata. imode: hm... what about concurrency primitives? imode: the pi calculus is interesting, but I never worked out how it does loops. imode: brother kmc: imode: there's a 'replication' combinator written as !P imode: I'm unsure as to how it works. kmc: !P == !P | !P imode: infinite forks, I guess? kmc: or P | !P rather kmc: in other words if P is blocking on a read, and gets one, then another P is immediately spawned kmc: i had fun making this http://mainisusuallyafunction.blogspot.com/2011/09/lambda-to-pi.html imode: I see. kmc: and it discusses this imode: neat! I'm reading it now. kmc: though I'm not 100% sure I got it right kmc: i'm proud of thinking up the compilation from lambda calculus myself kmc: there is a lot of esoprogramming-ish stuff on that blog if you enjoy that kmc: man, it's been a while imode: I'll bookmark and add to my reading list, thanks. kmc: I wrote that article more than 8 years ago kmc: I was a very different person in many ways imode: I've been wanting to build a concatenative version of a process calculus. arseniiv: i had fun making this http://mainisusuallyafunction.blogspot.com/2011/09/lambda-to-pi.html => oh, interesting. Will read tomorrow! arseniiv: technically today but after some sleep imode: "loop forever" imode: how is looping expressed in your formulation of it, kmc? arseniiv: hm is there a typed π-calculus? kmc: imode: when a process blocks it forks an the parent returns kmc: if the parent is a replicate then it will respawn kmc: i think that's how i did it kmc: like i said it's been 8 years imode: ah, hehe. arseniiv: bye all :P imode: night arseniiv kmc: yeah from reading the code, that looks right kmc: run env (Rep p) = forever (run env p) kmc: arseniiv: there may be a typed version kmc: but in the most basic version there is only one type kmc: (channels) imode: so !x(y).0|`x<1>.0 imode: the left half of the fork would block. kmc: the only thing you can send through a channel is another channel imode: right. imode: so how do you construct channels, then...? imode: oh, right, that v syntax. imode: so !x(y).0|`(vy)x.0 imode: what does this mean? I intend it to mean "the first process will replicate itself for every request". imode: so that repeatedly forks. imode: on the left. imode: seems grossly unspecified.. imode: the pi calculus seems to be an imperative calculus anyway. each of the statements can be seen as an instruction. imode: so I doubt it'd be far off to use [] and {}. imode: how in the world do you form an if statement in the pi calculus. o_O kmc: imode: first you need to decide on an encoding for bools imode: what's a common one? kmc: it could for example be: recv x, recv y, recv z, send z to x if T or to y if F kmc: i don't know kmc: i haven't studied pi calculus much kmc: I pulled that out of my ass just now based on church numerals kmc: slash church booleans imode: I feel like you could eliminate []. kmc: and indeed if you take church bools and run them through my lambda-to-pi thing then i think they'll work like that kmc: since i implement functions as a process that recieves arguments and a continuation channel and sends the result to the continuation channel imode: T could be x(a).y(b).z(c).`z.P imode: T could be x(a).y(b).z(c).`c.P imode: and F could be x(a).y(b).z(c).`c.P imode: https://en.wikipedia.org/wiki/Ambient_calculus this is interesting. kmc: i don't like this syntax imode: which one, ambient or pi. imode: I like neither. imode: I feel like the unrestricted use of channels is a problem. imode: no one man needs all those channels. kmc: 800 channels and nothing on... imode: T in Mode would be { receive receive receive roll drop last send }, while F in mode would be { receive receive receive roll roll drop last last send } kmc: i don't know this language, how does it work kmc: is it a stack based concurrent calculus? imode: close. queue based. imode: each process (the stuff between { and }s) gets allocated a single channel. `receive` always references that channel. imode: `send`, though, references any channel at the head of the queue, and sends the value after that channel through it. HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: send`,: not found imode: sorry. imode: I have stuff like looping constructs, but I wonder if I can render them obsolete by treating { and } as looping processes with a halt operation. imode: one sec.. imode: forking a process for every loop could be.. useful, I suppose. imode: an if construct would be @{VVV:..$^}{VVV:..$^}^^^ sans some shuffling ops. imode: it's just @ true true send send send pikhq: I feel like that'd be relatively easy to build on top of BEAM. lf94: my lang is built off of pi calculus lf94: http://leefallat.ca/notes/p-lang/rambling-2019-10-20.html lf94: the whole thing is just a vague blur imode: pikhq: it really would. I've been trying to build it in Go. pikhq: Fair enough. Could probably get it to work alright there. Dunno if it'd be efficient, but 🤷🏻‍♀️ imode: it's some of the same concepts. every process gets a single channel and can accept channels owned by other processes. so very much like erlang/BEAM's model of processes and pids. but you can easily map them to goroutines and channels. imode: I had an epiphany: 01[] may still very well be turing complete. you just need to be creative in how you format things. imode: 010 can stand for false, and 0110 can stand for true imode: I had a formulation for NOT and AND. imode: along with dup. and swap. imode: [][] is drop in this. imode: 0110 010 [][] -> 010 imode: duplicate is.. difficult. I'm having a hard time recognizing compound symbols. imode: ideally I'd have something like... imode: 0110 010 imode: I could probably brute force search it (with an evaluation step limit), but... imode: oh well. concurrency primitives might yield something better. who knows. imode: 01[]$ presents an easier gateway to being turing complete. imode: 0110 [][[010[]0$]0$] recognizes 0110. cpressey: `? password HackEso: The password of the month is not what it seems cpressey: Huh, spaces are allowed in the password of the month. Okay. cpressey: (Or ARE they...?) ais523: it's a different month now anyway ais523: `le//rn password//The password of the month is mostly irrelvant. HackEso: Relearned 'password': The password of the month is mostly irrelvant. ais523: `le//rn password//The password of the month is mostly irrelevant. HackEso: Relearned 'password': The password of the month is mostly irrelevant. cpressey: Ah, I assumed that /was/ the new password, seeing as it's the 4th already today. ais523: I'm not even sure why we have that thing anyway :-D wib_jonas: cpressey: spaces are technically allowed in a password, but not recommended, because on many keyboards, the space bar makes a very distinctive sound, making side channel attacks easier wib_jonas: and yes, it was the old password ais523: I had the old one memorized, that's what you do with passwords, right? wib_jonas: ais523_: some people ask computers to memorize it. wib_jonas: or stick notes. wib_jonas: "The Program Is Mostly Ignored" -- like in the pear tree? arseniiv: ehehe blockchain fizzie: `` hg log -T "{sub(r'-\d\d .*','',date|isodate)} {node}\n" wisdom/password | while read m r; do echo "$m: $(hg cat -r $r wisdom/password)"; done | paste fizzie: (It'll take a while.) HackEso: https://hack.esolangs.org/tmp/paste/paste.32417 wib_jonas: fizzie: I tried such hg log -R {rev} -r 0: somefile | (while read m r; do hg cat -r "$r" | grep somestring; done) loops, to find the first revision . they seemed to not work too well for some reason, probably timeout or something wib_jonas: maybe I should look up in the docs of hg how to properly do that fizzie: Yes, it's pretty slow. Probably that password list also just barely made it. wib_jonas: fizzie: yeah, admittedly I tried it on quotes , which has among the longest history wib_jonas: what's the URL if I just want to clone the repository to do such dumb things locally? wib_jonas: `url wisdom HackEso: https://hack.esolangs.org/repo/file/tip/wisdom wib_jonas: `url quotes HackEso: https://hack.esolangs.org/repo/file/tip/quotes wib_jonas: yeah, that seems to work HackEso: https://hack.esolangs.org/repo/ wib_jonas: `whatis url HackEso: url(7) - uniform resource identifier (URI), including a URL or URN \ url(1hackeso) - print URL to view contents of a hackenv file \ url(8lambdabot) - no description wib_jonas: `? url HackEso: url? ¯\(°​_o)/¯ wib_jonas: I should edit that wib_jonas: `whatis url HackEso: url(7) - uniform resource identifier (URI), including a URL or URN \ url(1hackeso) - print URL for a file in the hackenv hg repository and web access of the repository \ url(8lambdabot) - no description imode: found 'roll'. 0[][1]0 imode: 'dup' is gonna be harder. imode: recognize = [] ([ * ) [] (0$] * ) arseniiv: wib_jonas: pointer machines seem to be unrelated to GMM wib_jonas: arseniiv: in that case what are GMM? arseniiv: before any better name arises, they are GMM ;) arseniiv: we could call them algebraic machines, for instance arseniiv: I think GMM is still a perfectly valid instance of register machine imode: remind me to ask you about your machines, arseniiv. arseniiv: it has registers, albeit typed ones which contain references to trees arseniiv: imode: how soon? imode: in the next day or so. ;) arseniiv: imode: do you use lambdabot messaging? arseniiv: in this case ehehe arseniiv: @tell imode I remind you to ask me about my overgeneralized machines lambdabot: Consider it noted. wib_jonas: arseniiv: yes, that's how pointer machines work, if all the structures allocated on the heap are immutable. that's not the most common definition, usually people allow mutable structures, but I prefer the pure version. arseniiv: though maybe I’ll still remember it for myself tomorrow too imode: gratzi. arseniiv: wib_jonas: hm it seems I didn’t understand what a pointer machine is in general, then. I had read https://en.wikipedia.org/wiki/Pointer_machine arseniiv: there it seems they are different enough arseniiv: they write there: “Pointer machines cannot do arithmetic. Computation proceeds only by reading input symbols, modifying and doing various tests on its storage structure—the pattern of nodes and pointers, and outputting symbols based on the tests.” This is suspicious imode: TMs can't do arithmetic either. arseniiv: hm I probably misinterpret what that meant to mean, yeah arseniiv: though I can go more technical b_jonas: [ _1^i.39 b_jonas: j-bot? oerjan: @tell imode assuming i understand what you mean by 01[], it is TC as you can encode cyclic tag in it: 100 = false, 1010 = true, 1010 [][bits] -> bits, 100 [][bits] -> nothing. [ [][...] ... [][...] ] loops through a list of productions. lambdabot: Consider it noted. oerjan: ooh 3-echo tag oerjan: my brain occasionally tries to think about 2-echo tag without really getting anywhere oerjan: i conclude that the haskell/esolangs overlap remains large https://www.reddit.com/r/esolangs/comments/dkxsqi/haskell_on_the_jvm_frege_vs_eta/ oerjan: (that question was posted in the wrong subreddit - and still got sensible answers) oerjan: either that or reddit is putting things in the wrong place. i _did_ see some strange behavior in a thread i read yesterday. oerjan: but not quite out-of-subreddit strange oerjan: bah, the us has switched off daylight savings time too. i was enjoying reading schlock mercenary an hour earlier! shachaf: What time zone is the author at? shachaf: Or rather what state and time zone. shachaf: Maybe there are multiple authors. shachaf: The point is, CA might switch to year-round DST. fizzie: EU's planning to stop adjusting clocks from 2021 onwards, but each member state gets to decide whether they want to stick with the summer or the winter mode. shachaf: That seems fine. fizzie: (And with luck, Brexit's still unsolved at that point and UK will follow.) myname: so, what are the requirements for a language to write a quine in it ArthurStrong: myname: this is enough, IMHO: https://esolangs.org/wiki/HQ9+ myname: well obviously, but you can write quines in languages that do not have a quine command shachaf: OK, the "just don't mask the ring buffer indices" model seems pretty appealing now. shachaf: You need your buffer size to be a power of 2. Is there any other downside? arseniiv: I need to inject Nat into an infinite algebraic type possibly mutually recursive with several other types like this one (but not necessarily all of them infinite) arseniiv: it seems to be always possible but I don’t see how to formulate this thing in the manner it would have an obvious proof arseniiv: I think injecting Nat into t means precisely the following: there are tz :: t, ts :: t → t and tfoldNat :: u → (u → u) → t → u such that ∀z' s'. foldNat z' s' == tfoldNat z' s' . foldNat tz ts arseniiv: or maybe the consequence of the latter suffices: id == tfoldNat z s . foldNat tz ts arseniiv: now hopefully it’s clearer arseniiv: I think tz and ts x would always be compositions of several constructors, the latter also having one occurrence of x. Still, the picture isn’t clear to me at all arseniiv: hmm would we always be able to “contract” the definition of that type so that other types aren’t mentioned in it after that?.. The simple case { data E = Z | Se O; data O = So E } is for example easy: { data E = Z | SeSo E } or { data O = SoZ | SoSe O } arseniiv: I think I miss knowledge of a framework arseniiv: the tricky case: { data A = A N; data N = Z | S N } — now we can’t return to A and the naive approach would result in an infinite definition { data A = AZ | ASZ | ASSZ | … } arseniiv: so though we can’t always contract a definition naively, maybe we can always find a type with a definition which contracts?.. E. g. that’s N in this example arseniiv: nope: { data A M; data M = Z | S A M }, now they *both* don’t contract in a naive fashion arseniiv: you may see that’s indeed a tricky situation. Okay I don’t need to contract definitions, I need `z` and `s` and a glimpse of `fold` (relating to GMMs, I don’t really need the last one, just a partial destructor `t → 1 + (1 + t)`, the first `1 +` is for values of `t` which aren’t injected Nats) arseniiv: even simpler: `z` and `s` a compositions of constructors, as hypothesized above. I’m sure that’s always possible, and in this case they would have all the remaining needed properties imode: []01$ can be reduced to boolfuck. arseniiv: we can eliminate nonconstructivle types and constructors with arguments of those types and be left with at least one type having a nullary constructor arseniiv: though there are no guarantees this constructor is used in infinitely many values, and I seem to finally get what I should have done: there are infinitely many values, and only a finite amount of nullary constructors. At least one of them should occur in infinitely many values, pick that one arseniiv: hm no, we don’t need a single constructor, we need an inhabited type with a constructor “eventually taking” an argument of that type, yes arseniiv: I don’t like proof by contradiction but suppose none of inhabiter types has one. I think that should imply there are only a finite set of values overall arseniiv: s/inhabiter/inhabited; every value of type t should not have values of type t inside so each value can only be a |type count| levels deep, yes, and there are only so many constructors so we get a finite set of values arseniiv: now how do I prove that without using contradiction arseniiv: I think I flooded the channel, sorry :/ lf94: Has anyone tried typeclasses.com? arseniiv: lf94: me not; is there something which I could see without paying? (I’m lazy to register to get to know that by myself) lf94: There is lf94: https://typeclasses.com/profunctors arseniiv: lf94: that may be useful! arseniiv: though I don’t know profunctors yet too arseniiv: “Profunctors are bifunctors that are contravariant in their first type argument and covariant in their second one.” → ah okay now I know arseniiv: lf94: the canonical example would be (->), it’s covariant in the result type and contravatiant in argument type; the function type is very useful to visualize co/contravariant type arguments in general; at least for me: they can be “like function arguments” and “go somewhere”, or they can be “like function results” and “come from somewhere” (and also there can be these that come and go—these are “invariant” in th arseniiv: terminology of e. g. C#, these are somewhat bad as they don’t play nicely with subtyping in languages with subtyping like mentioned C#) lf94: The terms "covariant" and "contravariant" cannot be memorized for some reason. lf94: I can't memorize what these actually mean lf94: If you could explain what these mean in some plain english, I'd greatly appreciate it arseniiv: (e. g. if you are designing API for some collections, it could be wise to tear collection interfaces into halves with one half being covariant in element type and containing only get-like operations (perfect to implement by immutable collections) and the other half containing only set-like operations and being contravariant in the element type; a mutable collection would implement both parts. Now these two interfaces could be used separ arseniiv: tely and benefit from argument subtyping one way or the other) arseniiv: lf94: I can try, yeah arseniiv: covariant means it behaves like (co-) a plain value: function result is a normal value; contravariant means it behaves in the opposite way (contra-): function argument is in some way an “antivalue”, a hole waiting to be filled, before we could get the result; that’s not all arseniiv: I don’t know if there is any special sense in “-variant” here, maybe theory category guys made it up independently, but they could have borrowed it from linear algebra arseniiv: there, tensor arguments/indices can be covariant and contravariant, which means if the thing changes (“varies”?) like or unlike basis vectors when changing the basis arseniiv: that’s about “-variant” part, I’m almost sure it’s related that way though “-variant” part is plain latin arseniiv: or it pretends to be lf94: co- means plain?... arseniiv: now that should be accompanied by many examples but I don’t know which would be nice lf94: 1 and -1? arseniiv: co- means plain?... => AFAIR it’s more like “with” arseniiv: also I’d say these are more like automorphism/antiautomorphism distinction than 1/−1, but the last pair may be illustrative too arseniiv: contra- changes arrow directions just like antiautomorphism. Though I don’t know why I picked auto-, any kind of morphisms suffices arseniiv: (anti(something)morphism changes operands, not arrows) arseniiv: let’s pretend I didn’t confuse you with morphisms arseniiv: hopefully someone more experienced in explaining in a clear way will come arseniiv: also you can try to label them `in` and `out` as C# syntax does arseniiv: in for contravariant, “argument-like”, and out for covariant, “result-like” arseniiv: just don’t confuse “in”-variant with invariant, there were cases :) arseniiv: anyway there are no invariant functor arguments in Haskell arseniiv: they are either co- or contra- or that’s not a functor in that argument lf94: when you talk about morphisms, it helps I think arseniiv: when we have a category whose objects are categories themselves, morphisms C → D are functors covariant in C and morphisms C^op → D are functors contravariant in C; where C^op is the opposite category to C: it has all its objects but every morphism reversed ais523: @messages? lambdabot: Sorry, no messages today. Lykaina: @messages? lambdabot: Sorry, no messages today. ais523: my brain occasionally tries to think about 2-echo tag without really getting anywhere ← I think that 2-Echo Tag is still more likely than 50:50 to be Turing-complete, but would no longer be surprised if it were Turing-incomplete; there are some qualitative differences to 3-Echo Tag ais523: "The Program Is Mostly Ignored" -- like in the pear tree? ← actually, in A Pear Tree, the entire program is always parsed; it's just commonplace to put much of it in a comment ais523: the interesting factor in the language is that you can use cues to specify where in the program to start parsing, but the parser wraps around the end of the program and finishes where it started impomatic: Hi :-) impomatic: Is there any Esoteric stuff on Yahoo groups which needs archiving before they remove groups? ais523: none of the esoteric mailing lists or newsgroups that I know of were on Yahoo impomatic: Thanks. I've been downloading messages for the programming game groups (robowar, crobots, etc) and thought I'd check :-) ais523: how are things going in the programming games community, btw? arseniiv: Sorry, no messages today. => they say this often to me; I think there’s an inherent and indescribable sadness in the situation so I drew this: https://i.postimg.cc/BnBkw5Vt/mr-postman.png arseniiv: I planned to add dialogue but this ended up quite self-explanatory arseniiv: oh damn uncolorized region arseniiv: look here instead: https://i.postimg.cc/Wz9tnJcy/mr-postman.png b_jonas: impomatic: oh yeah, good thinking. I've got one of Yahoo's nice false assurance email about how Yahoo groups is totally not going away b_jonas: at least they did send an email b_jonas: I think this will have less impact than gmane, google plus, or geocities though. b_jonas: Hmm, that's an interesting pattern there. If I see an online service whose name starts with g, should I suspect that it won't last long even if it's not by google? b_jonas: oh no! b_jonas: I looked among my links for stuff starting with "g" b_jonas: Project Gutenbert b_jonas: https://directory.fsf.org/ is at least branded "FSF" now more prominently than "GNU" fizzie: I haven't yet read that "Evolution of Yahoo Groups" email, but I got one as well. b_jonas: fizzie: I only skimmed it too b_jonas: I didn't bother because all the mailing lists hosted there that I'm on are defunct impomatic: ais523_: a little slow at the moment. What tends to happen is the level in a game quickly escalates so that it's pretty difficult for anyone new to get involved :-( oerjan: so, what are the requirements for a language to write a quine in it <-- see https://esolangs.org/wiki/User_talk:Smjg for pervious discussion that i keep linking b_jonas: ais523_: yeah, I was wrong about Pear Tree, I misremembered how it worked oerjan: @tell imode actually, what i said is more or less 10 = true, 0 = false and a slighly different halting condition on BCT than usual, which i'm pretty sure is still TC. lambdabot: Consider it noted. oerjan: `? monologue HackEso: monologue? ¯\(°​_o)/¯ arseniiv: re: Haskell: BlockArguments: finally! oerjan: @hoogle finally lambdabot: Control.Exception finally :: IO a -> IO b -> IO a lambdabot: Control.Exception.Base finally :: IO a -> IO b -> IO a lambdabot: System.Directory.Internal.Prelude finally :: () => IO a -> IO b -> IO a oerjan: seems like a good use for it arseniiv: hm BTW does hoogle search GHC language extensions?: arseniiv: @hoogle BlockArguments lambdabot: Language.Haskell.TH BlockArguments :: Extension lambdabot: Language.Haskell.TH.LanguageExtensions BlockArguments :: Extension lambdabot: Language.Haskell.Extension BlockArguments :: KnownExtension arseniiv: not what I expected but neat arseniiv: ouija: bye ais523: b_jonas: it was important that all the source code were retained, so that A Pear Tree could be used to write programs that detected edits to themselves and figured out what part was missing ais523: I'm not sure how useful that capability is, but a) this is #esoteric so it doesn't matter, b) it comes in handy on CGCC on occasion b_jonas: and like you said, you can still make most of the code ignored as a comment when your program wants that b_jonas: `? hfs HackEso: ​04You have discovered an eerie cavern. The air above the dark stone floor is alive with vortices of purple light and dark, boiling clouds. Seemingly bottomless pits mark the surface. ais523: hmm, dramatic, it's a pity you can't use commands to continue the text adventure b_jonas: ``` ( hg log -T "{desc}\n" -r 7960; hg cat -r 7960 wisdom/hfs ) | sed s/o/о/ # and the command that created it is funny too HackEso: ​ ` le/rn "hfs/`hfs`" # Maybe this way better? \ 04Yоu have discovered an eerie cavern. The air aboe the dark stone floor is alive ith vortices of purple light and dark, boiling clouds. Seemingly bottemless pits mark the surface. b_jonas: apparently it was in bin before it was moved to wisdom ais523: there are quite a few typos in that version b_jonas: yes, they got fixed in later revisions ais523: I was wondering if they were intentional ais523: "aboe" looks like the sort of word that belongs in poetic English ais523: (there are a few interesting words from poetic English, like "ere" which is just too good not to use; it means "before") ais523: (strangely, it isn't used anywhere but poetry and literature despite being such a good word) b_jonas: ``` hg log -T "{desc}\n" -r 7961 | sed s/oa/оа/ HackEso: ​ rm bin/hfs b_jonas: and bin/hfs was apparently created by moon__ oerjan: (I noted that the Echo Tag proof seems to implement Post's original version.) shachaf: posix_spawn is probably better than fork() in theory, but every time I try to use it it's miserable. shachaf: What's that about? kmc: shachaf: it starts with "posix" fizzie: "posix_spawn_file_actions_adddup2" that's quite a name shachaf: fizzie: Why can't I just pass in a data structure? shachaf: Now I gotta worry about allocation failures. ais523: oerjan: you're right, it was off by 1, I realised that while offline earlier, and was going to fix it myself but you got there first ais523: it's complex because Front End has only 26 bytes of storage + the instruction pointer; I'm pretty convinced at this point that if it supported Unicode variable names it'd be TC, but there's some definite doubt as to whether the 26 bytes are enough wib_jonas: that's a new language wib_jonas: ais523: wait, literally "26 bytes of storage + the instruction pointer"? doesn't that mean that it's definitely not TC? ais523: wib_jonas: there are two languages involved ais523: Front End is an intentionally sub-TC language; Full Stack repeatedly runs Front End on its own source code wib_jonas: Note to self: whenever I hear of an esoteric language that has a core that sounds like it should be turing-complete, but a seemingly arbitrary restriction to too little addressable memory, and I think it's unrealistic (eg. https://esolangs.org/wiki/?curid=10192 ), I should think of the ATARI 2600 BASIC Programming cart, a high-level programming wib_jonas: language for a machine with 128 bytes of RAM. Taneb: Who really needs any more than that wib_jonas: I've written programs for the Sharp EL-5120, which has 2 kilobytes of RAM, of which 1141 bytes are for program source code. 128 bytes sounds crazy. wib_jonas: The annoying part of https://esolangs.org/wiki/?curid=10192 is that it's practically impossible to extend. The meaning of all instructions is completely defined, the addres space is completely occupied by RAM, and since it's only 256 nibbles, you can't even reserve a little of it and hope that programs won't use it, because prorgams want to use all wib_jonas: 256 of it. wib_jonas: There aren't many language that feel that impossible to extend. ais523: now you're reminding me of my plan to add output to Echo Tag in a backwards-compatible way ais523: in addition to 0 and 1, there's an O command which acts like 0 in most respects, but when an O in the queue causes a production to be skipped, that production's bit is output ais523: hmm, is "hello, world!" TC? ais523: it's a great idea for a language, at least ais523: actually it wouldn't surprise me if it were an LBA, the command set reminds me a bit of BuzzFizz, but it's less obviously TinC kspalaiologos: which language has it's programs having highest entropy on average? kspalaiologos: I've been thinking about 05AB1E and all that golfing stuff kspalaiologos: but i'm not certainly sure is this the case kspalaiologos: possibly someone made a programming language with even more complex instruction set kspalaiologos: so programs are denser and denser oerjan: wait what oerjan: comparing sleeve colors with previous strips, i think that may be martellus in the last girl genius strip. which would make sense given the reaction. b_jonas: dear fungot, please prepare to upload the next o strip tomorrow fungot: b_jonas: so, i know that. now that my hands. b_jonas: yes, your thumb will never be the same after that accident, such is life int-e: https://bugzilla.mozilla.org/show_bug.cgi?id=1572800 ... who thought this was a good idea? With this change I was never sure whether an underlined blue a,b was a single link or two links... fortunately, there's a switch. int-e: (This hardly comes up... I'm just rationalizing my dislike for that particular change.) b_jonas: int-e: https://esolangs.org/logs/2019-10-28.html#llb b_jonas: I just don't like the way it looks int-e: There is something to my complaint when you turn it around... to my brain, a break in the underline signifies the end of a link. (And links are the most common reason for underlined text in my browsing experience.) int-e: Oh and I particularly dislike the handling of underlined 'g's, where none of the glyph is underlined anymore. int-e: (the same is true for the aforementioned ',') int-e: Heh. For all I know Pokemon is completely made up. b_jonas: Sure it is, but like having it as video games and story. Classical greek mythology is probably also completely made up, but it's hard to imagine our world (I'm saying this as a Europe-centric guy) without, because there's just so much heritage from it. int-e: I mean I've never seen the video games nor the animated series... all I really have are second-hand stories. int-e: And I'm seriously wondering how that happened. b_jonas: you've never seen the video games? any of them? int-e: I guess completely avoiding gaming consoles has a lot to do with it. b_jonas: I mean, you don't have to see any specific one, because they're all rather similar int-e: yes, I've never seen any of them b_jonas: int-e: how about the collectible card game? that of course is later than M:tG int-e: I've played M:tG but only with other peoples' decks. b_jonas: I guess many people have a huge genre that they have mostly avoided. DMM claims that it's video games in general, but I'm not entirely sure of it since he used to claim that he hasn't read Discworld. For me it's anime and manga. b_jonas: I haven't played too much on consoles either, except for the Game Boy, but have played a little, but I'm somewhat familiar with the more popular Nintendo games through videos on the internet now. b_jonas: I sort of wonder if I should get into them, in the nostalgic way that is, old games only. b_jonas: I'm quite sure I don't want to play new video games, but the old ones are old enough that there's enough information about them that's not just recent hype so I can tell which games are worth to play. int-e: "should" - no. ;-) b_jonas: int-e: well, it's not something that I have to decide right now b_jonas: and there are also old PC games that I should play more int-e: but maybe there are too many new games for that wib_jonas: You know how you can indicate dismissal of modern music with the joking question "have they started already or are they just tuning their instruments?" wib_jonas: I found out that this can apply not only to modern music. wib_jonas: https://commons.wikimedia.org/wiki/?curid=18594726 is the digitization of a vintage music recording from 1889, supposedly of Brahms playing the 1st piece of Hungarian Dances on a piano. wib_jonas: Without the description, I couldn't tell that this is supposed to be a rendition of Hungarian Dances. wib_jonas: I'm not sure if I could even tell that it's on a piano, because it sounds like a clavicord through that recording. ais523: there's at least one classical piece which wrote the sound of tuning the instruments into the score wib_jonas: how old classical? ais523: I can't remember, IIRC fairly old though myname: isn't that quite common for string instruments? myname: like, adjusting the string-length in-sound wib_jonas: myname: I don't think so wib_jonas: Admittedly since I can tell that it's supposed to be a clavicord, as opposed to a band with stringed or wind instruments, the tuning question isn't quite accurate. wib_jonas: Pianos are tuned in advance, whereas most other stringed instruments are tuned on site before the concert. wib_jonas: Probably because the piano takes the longest to tune, and you can afford not to tune one instrument. wib_jonas: (That doesn't solve what you do with pieces for two pianos, which do exists, but are rare.) myname: i also am wondering how one would write out what exactly 2cellos are doing sometimes. like, just smashing the bow onto the strings wib_jonas: I can't complain of course, there are good quality recordings of performances of the Hungarian Dances available as well. wib_jonas: And that recording has the excuse that it's really old. wib_jonas: Oh, different topic. wib_jonas: This morning on the tram, I heard a man talk in Swedish but with a very strong Hungarian accent. That's the first time I heard such a thing. wib_jonas: I've heard sevearl people speak English in a strong Hungarian accent, but the same thing in Swedish was new. ais523: in case anyone isn't following esowiki, it turns out that 2-Echo Tag can also implement (a modified version of) The Program Is Mostly Ignored ais523: and the code needed to mediate that probably has length proportional to 2 to the power of the number of steps ais523: (the reason it's likely TC is that the mediating code has a length depending only on the number of multiplications, not on the size of the portion of the queue it's extending, so by creating a sufficiently long queue portion to extend you can make the mediating code small by comparison) wib_jonas: ais523: is it only double-exponential, or triple-exponential? ais523: wib_jonas: in the parameter that people care about, i.e. how fast the resulting program runs relative to the program you're compiling, I think it's actually linear ais523: the constant factor is exponential in the size of the program, though (I think only singly-exponential though) ais523: so if you have a program of size s that runs in t steps, after you compile it, you end up with something of size O(s*2**s) that runs in O(t*s*2**s) steps ais523: I think, I might be a bit off on the complexities, given that I'm trying to calculate them in my head and don't have a concrete TCness construction yet ais523: also, the constant factor hidden by the big-O notation is likely over a billion ais523: but hey, this is still technically polynomial time :-P ais523: (in fact, linear time) ais523: I'm quite sure I don't want to play new video games, but the old ones are old enough that there's enough information about them that's not just recent hype so I can tell which games are worth to play. ← I have a similar policy nowadays, I generally only buy games if I'm very familiar with them already and know they're good myname: how long do you wait to play rimworld? wib_jonas: ais523: makes sense ais523: one problem with this policy is that the games are often hard to obtain as a consequence; typically the prices are very low but the supply is also very low, and I don't like going to online auction sites or the like ais523: (I've tried to increase the probability by checking out the local second-hand computer game shops whenever I visit a new area; normally there's nothing there I want, but sometimes there's something worth buying, e.g. that's how I purchased my copy of Sonic Advance 3) wib_jonas: ais523: for classic nintendo carts, the supply is decent and the prices aren't too high. for old DOS games by Id, there's usually no supply, so the ones that aren't freeware you can't legally buy at all, but you can easily obtain a copy. ais523: well, I don't pirate computer games ais523: so I'm mostly keeping to console games and free PC games ais523: (paid PC games tend to have issues with DRM anyway) ais523: there are a few very good PC games that I purchased (most notably Neverwinter Nights), though wib_jonas: ais523: in this case I'm talking about Commander Keen 2 and 3. those are impossible to buy, and I intend to play them. I want to do a 100% completion for CK3 (I've never beaten the boss, but mind you, it's the hardest boss in the series), and CK2 I want to get more familiar with (I have completed it) ais523: you'd think the company is missing an opportunity there, if they have things they can sell and people want to buy wib_jonas: as for free PC games, I really like OpenTTD, which started as a clone of the commertial game Transport Tycoon Deluxe, and became a decent clone, but then grew past it and became better wib_jonas: ais523: maybe, but I think they wouldn't earn much money from it, compared to what they get from their more recent games, ais523: hmm, oddly, I think every PC game I've played in the past few years has permadeath/perma-consequence ais523: mostly due to being roguelikes, but some of them are puzzle games or other genres for which permadeath makes sense wib_jonas: plus, I'm not sure, but they might be in a situation where no one company owns the rights to sell the game, and the multiple owners can't come to an agreement myname: ais523_: you can get a large portion of games without drm through the humblebundle store ais523: hmm, unless you count Tetravex but I'm not convinced you should ais523: myname: indeed, many of my purchased games were obtained like that wib_jonas: I might also try OpenRTC, which is a similar clone of another game by Chris Sawyer (the creator of OpenTTD), but I'm not yet sure it's for me ais523: a few through GOG, who tend to patch the DRM out of old games they sell ais523: (I have both the original disk copy of Neverwinter Nights with DRM intact, and a fully-updated version via GOG) ais523: (sometimes when you're speedrunning playing the buggy version is more fun thoug) ais523: *though wib_jonas: I have nostalgia for Railroad Tycoon, but the problem is, OpenRTC is a clone of Railroad Tycoon 2, which is a very different game wib_jonas: ais523: any tetris-likes? ais523: if you consider the time limit on moves to be part of a tetris-like, no ais523: I do like puzzle games but have mostly been playing ones with no time limits on the move wib_jonas: ais523: how about with no time limit, but you don't know of all future random pieces that you'll get when you have to commit the current one? ais523: (that said, I used to play Enigma a lot, and some levels there have limits) ais523: wib_jonas: yes, I play those quite a lot ais523: mostly as a distraction while waiting for compiles or the like wib_jonas: I haven't been playing any video games recently, wib_jonas: but I should get back to them a little eventually wib_jonas: not too much, I don't intend to become a professional gamer or anything ais523: @tell imode assuming it's your language, you should give the 01[] language a name and add it to the wiki (OK, so it's probably technically a brainfuck derivative, but it's different enough that there's unlikely to be an issue) lambdabot: Consider it noted. wib_jonas: heh heh, naming them is the hardest part wib_jonas: which is why I ended up with (1) and 1.1 ais523: well, 01[] isn't terrible as a name (although I'm not convinced it's a valid page name for the wiki) wib_jonas: it's not, you can't have square brackets in the name ais523: right, that's the rule I thought it violated wib_jonas: but C# isn't a valid page name either wib_jonas: so wikipedia has some problems with C, C++, C# languages ais523: C♯ is a valid page name, and the actual name of the language IIRC ais523: (it's just considered legitimate to use # to represent ♯ when typing it) ais523: However the ECMA 334 standard states: "The name C# is written as the LATIN CAPITAL LETTER C (U+0043) followed by the NUMBER SIGN # (U+0023)." ais523: I guess we have a standard on how to write it wib_jonas: is that ECMA standard about the programming language? wib_jonas: yeah, looks like it is wib_jonas: mind you, it's not even the worst name that Microsoft gave ais523: wow, C# has covariant arrays just like Java does? I thought that was widely considered a design mistake in Java, I wonder why C# copied it? ais523: (the better approach, IMO, would be to have a specific "unmodifiable array" type that arrays can be cast to, but not cast back from; that type would be covariant even though the underlying array isn't) wib_jonas: I don't know how that works in Java, luckily wib_jonas: I didn't follow Java ais523: in Java, if type X extends (i.e. is a subtype of) type Y, an array X[] can be cast to an array Y[] without error ais523: you can read Y objects from your Y[] without issue (because all your X objects are Y objects) wib_jonas: right, but how can that work with mutable arrays? ais523: but if you try to store a Y that isn't an X into your Y[], you get a runtime error (because the Y[] is actually an X[] so only Xes can be stored in it) ais523: so the short answer is that it doesn't, which is why it's considered a design mistake wib_jonas: of course, C++ has one of these stupid situations too, where you can get a runtime error for something that would usually give you a compile time error: myname: stackoverflow claims, this came at a time without generics ais523: indeed ais523: it took a while for Java to add generics wib_jonas: if you call an abstract method on a class that is only partly constructed, so it's currently an absract class, you can get a runtime exception ais523: (and when they did, the Java compiler became Turing-complete) wib_jonas: wasn't the java compiler Turing-complete even before that, for other reasons? ais523: possibly? I'm not sure what language feature you'd use, though ais523: note that in a compiled language, having a Turing-complete language and a Turing-complete compiler are quite different ais523: most (all?) BF compilers are not TC ais523: because the compilation always halts wib_jonas: and the C compiler without the preprocessor is probably not turing-complete wib_jonas: with the preprocessor it probably still isn't turing-complete ais523: right, I think all loops in the preprocessor are either provably infinite or provably finite wib_jonas: whereas the C++ compiler is probably turing-complete ais523: which means that it can't be TC wib_jonas: almost certainly TC for recent enough versions of C++ ais523: C++ is definitely TC at compile time, C++-at-compile-time is sometimes seen as a language choice in programming competitions because of this ais523: (allegedly, one year someone used this in order to get around runtime restrictions in the IOI, by doing the entire logic of their program at compile time; they added compile time restrictions too the year after) wib_jonas: ais523: oh yeah, myname: hahahahaha wib_jonas: I know at least two competition tasks where the result that your program can generate can fit in a few screenfuls, so the program runtime can be made trivial, even in C, ais523: Perl is trivially TC at compile time because it has a keyword to run code during the compile wib_jonas: though generating those results in first place can be hard ais523: wib_jonas: that's a good point: if you have the time to actually run your program, why not just work out what the result is, and write a program that prints it as the constant string? ais523: although the IOI probably marks you on what the code does in addition to getting the result right, so that trick wouldn't work there wib_jonas: ais523: yes, that works, but the competitions themselves have a submission deadline, so the limitation is that the human has to somehow compute the result by then ais523: C-INTERCAL actually has a command-line option, -F, to do this optimisation (i.e. first statically analyse the program to see if it has constant output; if it does, run the program and just generate an executable that hardcodes the output) ais523: international olympiad in informatics, I think? I mostly only know it by the acronym wib_jonas: ais523: I don't know how it's scored ais523: https://en.wikipedia.org/wiki/International_Olympiad_in_Informatics wib_jonas: there's like two of them, and I know of them indirectly myname: i always thought, "informatics" is not a thing in english ais523: it is, but it's a technical word that isn't in common use ais523: IIRC many languages use similar words much more freely / in an everyday sense myname: in germany, the studying subject "computer science" is just called informatik myname: i once mentioned somewhere i am studying informatics and people where like "what?" myname: even though bioinformatics is called bioinformatics wib_jonas: one of the competition tasks was to generate the truncatable primes http://oeis.org/A024770 , those ones whose number of digits equals to the program input. that's a finite sequence, so I solved this by precomputing and embedding each of the replies into the program. wib_jonas: myname: I think it's a europeanism that isn't used in english, but is used in the continent, so it works for the name of that contest wib_jonas: the other such task is trickier, it's the farming puzzle in http://ch24.org/static/archive/2008/2008_ec.pdf . that one has less than 15 essentially distinct inputs. however, wib_jonas: that's a competition round where you aren't judged by your code, and the input set is public as soon as the problem is, you only send the outputs as the solution, wib_jonas: so it's not a problem that there are so few inputs and that you can hard-code them, generating the outputs still isn't trivial, wib_jonas: and unlike the previous case, you probably couldn't even look up the results in the OEIS or elsewhere online before the contest ais523: I think it would be worthwhile to have a language with every OEIS sequence as a builtin ais523: (you'd probably need flow control, but nothing else, to make a usable language) ais523: however, it would be a huge amount of effort wib_jonas: ais523: yes, but it's not trivial to download dumps from OEIS, so it's hard to make this run off-line wib_jonas: and of course *every* OEIS sequence is impossible if you take it too literally ais523: you'd probably need to write the code yourself wib_jonas: but many OEIS sequences could work fizzie: Back when I was in university, they had a "Laboratory of Theoretical Computer Science" (TCS for short, for proper CS: computational complexity, logic, cryptography, distributed computation) and "Laboratory of Computer and Information Science" (CIS for short, for machine learning and such), which they merged to "Department of Information and Computer Science" (ICS, for all the sciencey computer science fizzie: stuff); which were all entirely parallel to the Department of (just) Computer Science (CS for short, for all the engineeringy software development stuff). wib_jonas: and of course it would have to be uncomputable, because there are a few uncomputable sequences in OEIS, like http://oeis.org/A028444 wib_jonas: and a lot of sequences that are at least semi-computable but we don't have an efficient way to compute them wib_jonas: `olist 1185 HackEso: olist 1185: shachaf oerjan Sgeo FireFly boily nortti b_jonas wib_jonas: `thanks fungot fungot: wib_jonas: it's so nice. now you'll think of her as the seventh member, then. meet. for example, the week after we finish, pally. it is not acceptable to cast, i should know HackEso: Thanks, fungot. Thungot. wib_jonas: fungot: hey, no spoilers! we'll read the strip, don't give it away fungot: wib_jonas: a lot. way more for all that, may i suggest that i would do such as that, yes of course"? you're, like, and you get if we go down a level! wib_jonas: so how will they take that photo in the council room that Elan wanted to take in #1178 ? b_jonas: in a regular polygon with 6.776 sides, the sides have the same length as the radius of the incircle kmc: exactly? b_jonas: kmc: no oerjan: hah it worked oerjan: it's an outrage that mediawiki's diff can get so easily confused by line breaks int-e: that effect is amazing oerjan: it seems like it is mainly finding lines that match exactly, and changed lines only get matched with their old version if they don't change position relative to the unchanged ones. HackEso: 1/3:inverness//Inverness is a city in Scotland. The ring road isn't multiplicative. \ welcome.ru//Добро пожаловать в Международный центр по разработке и внедрению языков эзотерического программирования! Для получения дополнительной информации посетите wiki: . (Для другого HackEso: 2/3:‚ипа Ñ�зотеризма попробуйте #esoteric в EFnet или DALnet.) \ elendil//Elendil's dad, Amandil, decided to try to save Numenor from its awful end by sailing to the Undying Lands and appealing to the Valar, but got lost. His family founded a new empire in Middle-earth. Elendil himself later made the Last Alliance with the elf king Gil-Galad, against Sauron. \ sentience//sentience is the primary goal of wisdom. w HackEso: 3/3:sdom is the primary goal of sentience. \ keming//Keming is a text compression scheme popular in Word processors. b_jonas: [ _1^i.19 j-bot: b_jonas: 1 _1 1 _1 1 _1 1 _1 1 _1 1 _1 1 _1 1 _1 1 _1 1 b_jonas: hi j-bot Panini: So quiet :D ais523: hmm, I'm concerned I may have miscounted in the 2-Tag TPIMI construction; I'm not sure whether k should be 1000 or 1100 (it's obviously one or the other, though, so there's a correct construction either way) ais523: once I'm back to my regular computer, maybe I'll write an interpreter and find out that way shachaf: kmc: do you like pleurotus eryngii twh kmc: shachaf: yes kmc: good mushroom kmc: at least i think so b_jonas: do you like your chocolate corn flakes with or without cinnamon, fungot? fungot: b_jonas: for that, my family would like my mode of transit returned, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, arseniiv: fungot: would you loop if I ask you something too, too? fungot: arseniiv: the " hd" stands for " 2 gp's", and it'll be there until your trial and then, gods willing, for that kind of stuff, i figured that one out on my own, but arseniiv: fungot: my what now? What did I do? fungot: arseniiv: i know that, i'm a whole skeleton again, and we all know nothing of your wicked? arseniiv: I hadn’t done anything wicked ever, fear fungot, why would you presume that?.. fungot: arseniiv: great, now i'm cursed. mom was so mad, i was. arseniiv: ^style fungot: Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack oots* pa qwantz sms speeches ss wp ukparl youtube fizzie: fungot: Who cursed you? fungot: fizzie: i, uh, the king's room, and none and my need for the mission that was about, it wouldn't be really easy, and its taking forever, but arseniiv: remind me not to step in that room ever fizzie: FWIW, the smaller models are more loop-prone. Not as bad now as before the real loop bug got fixed. fizzie: https://github.com/fis/fungot/commit/1025e3b wasn't that such an obvious mistake? fungot: fizzie: master,, in enough detail as you. and i know that, i'm no better than my own, but one that requires that the subject. does he? didn't he? arseniiv: fungot: hopefully the curse would lift itself some day! Don’t feel bad, we all love you fungot: arseniiv: see, i need magic to find that i am, i am the leader and strategic plan in the morning" to you,. there are so many of the terrible tree invaders. arseniiv: fizzie: presuming it indeed was, it was arseniiv: sorry I’m reading a formal semantics article about NPIs arseniiv: it affects my pragmatic and syntactic choices arseniiv: oh! someone familiar with free logic variants and their problems? I chewed on that for a while, and now, that being half-forgotten, I think if type theories are an unquestionably better choice for what free logics were designed b_jonas: `quote hey, hey HackEso: 728) itidus21: hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, h arseniiv: https://plato.stanford.edu/entries/logic-free is a pretty good summary, it cleared many things for me, though it confused my feelings about free logics in the first place. Before, I was hopeful, and now I’m anxious when I accidentally remember of the topic arseniiv: b_jonas: yeah, that one came to my mind too! arseniiv: was that in a loop bug times or after fixing it? b_jonas: fizzie: well OOTS has lots of new strips now, so you could retrain the model with them. then it would talk about dwarves and gods and honor and Tarquin and dinosaurs. it would be a win. fizzie: I'm guessing it was still bugtime. The sword alone definitely was. b_jonas: sword alone? fizzie: The sword alone can't stop. fizzie: ^style ct fungot: Selected style: ct (Chrono Trigger game script) fizzie: fungot: So tell me about this sword. fungot: fizzie: the real queen's safe, right! right. wrong! arseniiv: fungot: is she alone? fungot: arseniiv: is the gate key okay!! get' em! 200g per night. care, and stay...healthy! my husband...he's...he's...gone... but he left me precious gifts! the seeds...and our child, it's ancient history now... arseniiv: seem to remember something about ct having quite long unbroken passages, is it a couple of them? fizzie: The loop's from when the Crono sticks the Masamune into the Mammon Machine, and Lavos wakes up. fizzie: Schala says "N, no stop! That sword alone can't stop it!" fizzie: So: http://esolangs.org/logs/2010-06-02.html#l0F arseniiv: the pretty smiles of Darwin :) b_jonas: I know I asked this already, but I didn't get a satisfying answer. fungot, which love song is better, "I will love again" or "White flag"? fungot: b_jonas: but, we are far outnumbered! your friends, i presume? at this rate, leave to kino! ayla quit chief. kino now chief. bright place can get us down as long as you keep crono in your heart, the day of lavos"... go to " leene square" 1000 a.d.? yes, i'd have done something very brave! he's probably up north, to guardia!!! let's toast our land! now we'll have some peace! magus is a tad on the spooky side. our only hope. fizzie: A tad on the spooky side, but still our only hope. fizzie: Aw, a Chrome app using the TCP socket API can't set the MSS. :/ b_jonas: fizzie: incidentally, I downloaded most of DMM's comics webpages recently, so if you want to retrain our hon. and learned friend on Irregular or perhaps on (Irregular annotations plus 100 Proofs), I can extract the right parts of the text and put it somehwere fizzie: I kind of want to, but at the same time it feels like a hassle. b_jonas: fizzie: that goes over TCP, so doesn't the operating system's TCP stack normally sets the MSS the right way by default? b_jonas: fizzie: use that new IOCCC winner that lets you train stochastic models using these new-fangled AI terminology that goes so well with marketing HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: faq: not found b_jonas: we'll have to rely on lambdabot lambdabot: https://wiki.haskell.org/FAQ b_jonas: j-bot, faq: fizzie: b_jonas: Yes, there's a lot of context for the observation. The short version is, I've got a nftables setup that does SSH port knocking using knocks that have an odd MSS value set, because it's something you can easily detect with a firewall rule without running a server, yet also one of the few bits in the TCP header you can quite well control from the client side. fizzie: (I used to have a more conventional port knock thing where the knocks were "packets to port X, Y and Z", but that seemed too mainstream.) fizzie: Now I've picked up a Chrome OS device, which is a little awkward to run arbitrary code on without losing the "fully verified" status, so I was wondering if I could make Chrome do the knocking. b_jonas: fizzie: ok, I don't claim to understand that part b_jonas: the part I understand is just: let the OS do its thing by default, even though it has all sorts of setsockopt and sysctl knobs to do more magic fizzie: But that's fundamentally incompatible with this idea. fizzie: I'm using the MSS field as an arbitrary "key" in a connection that won't actually be used for any data, it's just a signal. fizzie: (To add a temporary exemption that allows the *actual* connection to the SSH port.) b_jonas: fizzie: but won't that confuse further connections to the same host? b_jonas: since the OS might try to use the same MSS value later b_jonas: why MSS in particular? aren't there other places where you can shove the data? fizzie: From what I recall, there wasn't really anything else easily/portably controllable (in a non-raw-sockets manner) in the IP or TCP headers. fizzie: And I don't think any TCP stack will pick up MSS values used by applications. fizzie: It's not like MTU discovery. fizzie: It's all quite pointless, I've just gotten used to having this thing. Sgeo: I am vaguely trying to relearn MUSHcode. Protip: Do not learn MUSHcode b_jonas: `? words HackEso: The `words dictionary framework was designed by Klens Hålgar Oslekk, Upert T. Noffrey, Guiston Degraîme, Myyntti Raatalla, Gölrika Rosenskild, Zwübert von Pfölliger, Waslomir Stronderowich, Győrvan Sárbik, Gareen Shergyle, Fnörður Hljófsson, and Pastronella Gattrovezzi. b_jonas: helloerjan. I was just looking at wisdom/\`words , set in 2017-01. I wonder if it's time to revise it arseniiv: `words don’t come easy to me; what does it ever mean? Sgeo: u(my_custom_function, arg1) b_jonas: a lot of the names sound like they're of jewish or german origin, but you need at least some of those to make the spread realistic, and apparently they're easier to invent b_jonas: it also has a few easy ones like "G. Nagy" where "Nagy" is the single most common family name, and double names with an initial aren't too rare, but there are so many combinations that it's not hard to find ones that haven't been used yet b_jonas: so there's a list of close to 50 family names, a few of which are real by accident b_jonas: of course, all this doesn't help the much harder problem of coming up with a fake but plausible Hungarian given name oerjan: swedish it is. b_jonas: Checked fizzie: My Swedish teacher in I-forget-what-grade had the surname Rosenberg. fizzie: FWIW, I definitely consider "Myyntti Raatalla" less plausible than the others for precisely that reason. shachaf: `? `words HackEso: The `words dictionary framework was designed by Klens Hålgar Oslekk, Upert T. Noffrey, Guiston Degraîme, Myyntti Raatalla, Gölrika Rosenskild, Zwübert von Pfölliger, Waslomir Stronderowich, Győrvan Sárbik, Gareen Shergyle, Fnörður Hljófsson, and Pastronella Gattrovezzi. oerjan: well what i mean is that they're not _meant_ to look that plausible. b_jonas: except that Pedrillo is a nice italian male name that everyone knows from the Mozart opera and yet is barely used in the real world b_jonas: oerjan: and yes, I said that I recognize fake Hungarian given names because almost everyone wears either common given names or ones that don't look Hungarian b_jonas: sure, they have to look somewhat over the top to be recognizably from a certain language b_jonas: otherwise we could just have ten Annas b_jonas: oh wait, you want a male one b_jonas: ten Davids oerjan: the conspiracy of Daves is clearly involved b_jonas: no, not Daves. Dave sounds like an american name oerjan: Davida Loca fizzie: "Taavetti" is a Finnish form of David, though I think it's no longer really in use. b_jonas: I was also thinking of flower names, because that's an easy way to invent new names fizzie: Now you're just taking Frodo's advice. fizzie: Welp, still 661 Taavettis born since 2000. But at least it's down from the 1525 born in the years 1900-1919. fizzie: (I think the statistics count all first names, I strongly suspect many of these are middle names.) b_jonas: the statistics for hungary gives counts for first and second given names separately b_jonas: but their order is mostly the same b_jonas: which I approve of b_jonas: I wonder how many people have the same given name twice b_jonas: are there Maria Marias? fizzie: For Finnish, I think there's a general bias of second names being more traditional than first names, maybe because people often give names already existing in the family tree as second (or third) names. b_jonas: fizzie: yeah, that does happen, giving a second given name from family b_jonas: wow, on the list of most common male given names given to newborns in 2018 in Hungary, the 6th is Noel. That's weird. Must be some new fashion. fizzie: They used to have a per-year thing, but it's "removed for privacy reasons", so now I can only see decades. b_jonas: (Bence is still holding strong in first place, despite that all the other top ones keep changing quickly.) fizzie: There's an "Oliver" as #6 for male names in 2010-2019, I'm pretty sure that's some sort of a fashion too. b_jonas: you can tell by comparing to the statistics of given names among living people fizzie: Surprisingly enough, top three are Juhani, Johannes and Mikael, which is a pretty old-fashioned triplet. b_jonas: top three for which one? fizzie: Top three for male names given to people 2010-2019, I assume mostly babies born then. fizzie: It's not super-clear what the table means, though. b_jonas: I guess if you average out over ten years, the fresh fashion ones fall lower and the always popular traditional names climb to top fizzie: Could be that. moonheart08: Took a look at the esoteric programming language on wikipedia.. moonheart08: Kinda had to snip it down moonheart08: Aeemed really fancrufty oerjan: @metar ENVA lambdabot: ENVA 102250Z 08004KT 9999 FEW025 SCT035 BKN045 M04/M09 Q1014 RMK WIND 670FT 09007KT HackEso: 1/2:1168) * Sgeo remembers when he believed VRML could never have gravity. Now VRML is dead. (And has gravity) \ 271) I think I managed to make Stack Overflow work on gopher, now. \ 1038) <+kmc> we are amused <+kmc> the royal +v \ 123) Never ever use a quote which contains both the words "aloofness" and "gel" (verb). \ 208) This is good if you are a wheat plant but bad if you like eating wheat seed moony: I took a peek at Seclusion. moony: Now one of my favorite esolangs moony: Suprisingly compact for a turing tarpit int-e: How does aloofness gel with quotes... moony: hi int-e int-e: moornyng shachaf: `? int-e int-e: let's nuke all the nickname wisdom entries and start from scratch. moony: Answer: no shachaf: How does two watched literals work with backtracking? shachaf: The thing I imagine doing for 2WL is: You have a queue of literals that are forced to true. When you do unit propagation, you find new literals that are in unit clauses, and push them onto your queue. shachaf: But when you backtrack, do you just discard part of your queue depending on the backtrack level? I don't think that's what people do. int-e: queue?! shachaf: Not a queue? int-e: I don't see a queue. shachaf: You think you just set the literals to true directly? shachaf: I feel like you must have a queue or a stack or something. moony: Also, i've been considering setting up my own mediawiki wiki for general CS moony: things moony: (Damn you enter key I wasn't done) int-e: shachaf: The trail is a stack to me. But it's not immediately connected to the watched literals. shachaf: The trail is just the regular stack, that's not what I mean. int-e: I see no queues in 2WL at all. shachaf: Say you're in some state where you have the clauses (x | y) & (x | z) int-e: Oh, that's where the queue is. int-e: Yeah, fair enough. int-e: And yes, I expect you discard the queue when you find a conflict. You don't touch the 2WL lists either; you have to ensure that every (non-unit) clause is on two lists as you process the literals. Sgeo: I was wrong, VRML is not dead: http://create3000.de/x_ite/getting-started/ shachaf: I know you don't need to undo 2WL when you backtrack, which is a neat trick. shachaf: But do you just discard the entire queue? int-e: you've found a conflict... you don't need more shachaf: Oh, I see. int-e: (I expect you could keep going in hope of finding a nicer conflict clause? But the moment you find a conflict you violate the 2WL invariant that watched literals are not on the trail...) shachaf: There are no decisions made while the queue is nonempty, of course. int-e: (Which probably doesn't matter, but you probably need to be careful not to put a literal and its complement on the trail, at which point conflicts become very much meaningless. It seems messy.) int-e: You'll still want to keep the processed literals for conflict analysis. shachaf: I started implementing this queue as some kind of circular buffer thing but then I saw what minisat does: shachaf: They just store the queue on the trail itself, right after all the literals in the trail. shachaf: Then they just adjust the trail end index forward as they pop things off the queue onto the trail. shachaf: So much better. int-e: Sgeo__: I'm afraid that things don't die anymore... they go out of fashion but linger on. People will just build compatibility layers like the one you linked to. int-e: shachaf: Of course that is where you put the queue... which is why I didn't see it at first. shachaf: Right, it's really just the unprocessed part of the trail. Sgeo: Technically it's not implementing the VRML spec faithfully. There's also an X3D spec that's a next version VRML, that's still being worked on. shachaf: But I didn't think of it that way at first! Sgeo: https://github.com/create3000/x_ite/issues/50 int-e: Sgeo__: you seem to care a lot about VRML Sgeo: I spent some of my childhood in Cybertown, which used VRML, and before then I read a book about VRML shachaf: `? chu space HackEso: A Chu space is just a matrix. Taneb invented them, then Chu stole his invention. shachaf: `? matrix HackEso: A matrix is just a matrix. People use them to communicate. Taneb invented them. shachaf: So the better way to think of this is that some suffix of the trail is "unpropagated" and still needs to be processed. oerjan: `? solidity HackEso: Solidity is an esolang for writing contracts. It has good support for secure linear algebra. shachaf: Man, one time I was trying to come up with a clever pun about finance and linear algebra relating to how liquidity behaves nonlinearly. shachaf: But I never made it work. oerjan: today on schlock mercenary: heavy punning oerjan: `cwlprits portugoose HackEso: boil̈y oerjan: that checks out int-e: poultry int-e: Is the solidity entry in any way connected to the matrix of solidity? shachaf: obviously hth int-e: @tell oerjan today on schlock mercenary: heavy punning <-- I feel that "Hurtz" would make an excellent unit for punnery. lambdabot: Consider it noted. int-e: shachaf: Is it? I mean I'll admit that it is highly suggestive. But that doesn't prove a thing. shachaf: `quote solidity HackEso: 239) enjoy being locked in your matrix of solidity shachaf: "secure linear algebra"? int-e: Using multiplication by zero and other forms of cancellation for information hiding. shachaf: Information deletion is a really good method of information hiding. int-e: lattice-based crypto is the other angle I thought of but it doesn't readily connect to finance shachaf: crypto stands for cryptocurrency so obviously it's always connected to finance hth int-e: shachaf: you should take that message to ##crypto ... it's a good test for whether the ops are around. int-e: I found this ridiculous article earlier... https://cointelegraph.com/news/bobby-lee-500k-bitcoin-price-flippening-of-gold-will-come-by-2028 shachaf: speaking of crypto, got any hot ICO tips for me int-e: Not really. I'm a casual observer at best. shachaf: i sure want to, uh, hodl int-e: you *will* yolo shachaf: p. sure my coins are going to the moon shachaf: `coins HackEso: ​08thisheacoin 09cacecoin 02millecoin 06olythcoin 13bloopcoin 04isabcoin 07concoin 08paviacoin 09ctnrmcoin 02vassiblecoin 06yatmoscoin 13arrorcoin 04tlwnncoin 07pogocoin 08cutakaelikencompcoin 09caivcoin 02explatcoin 06ezacoin 13osmetacoin 04purehcoin int-e: YOLO is the only ground truth in all of crypto. shachaf: I'm investing in bloopcoin! int-e: HODL is how you become a mule in the ongoing money laundering scheme. int-e: https://www.kalzumeus.com/2019/10/28/tether-and-bitfinex/ was fascinating to read shachaf: money laundering? now you're talking cryptography shachaf: ("cryptography" also stands for cryptocurrency hth) int-e: Yeah, troll. int-e: You already know how to troll me, and that wasn't it. int-e: `grwp fnord HackEso: fizzie:fizzie is not fnord with a monad but the king of #esoteric, see https://zem.fi/static/img/square_fizzie_320px_white.jpg \ indonesia:Indonesia is a large island country in Asia and the world's most populous muslim country. Its major export is rayon textile from the Indonesian fnord. shachaf: Oh no. int-e: That's a twolerable number. shachaf: I think it's clear enough this is intended in good fun and not to cause any actual irritation? shachaf: If it did then I should stop. int-e: Hmm. I don't know. Maybe I've seen a few too many "crypto" discussions on ##crypto to find it genuinely funny. shachaf: That makes sense. shachaf: My impression is that you also think most regular finance is sort of a scam, though. int-e: Sorta. But it's regulated... and intertwined with basically everything. So it's far more predictable. int-e: BTC is cute and small in comparison. Oh and I can lightly treat it as a joke because I'm not invested in it. You can identify the role and interests of individuals. Bobby Lee, for example, is co-founder and CEO of BTCC, a chinese bitcoin exchange. So predicting a bright future for BTC is in his interest. int-e: Say, are the YAFGC "related comics" just a randomly generated list of previous episodes... int-e: ...I noticed, for the first time, that the list changes when you reload the same page. int-e: (I did notice before that they are usually not very related to the current strip.) kmc: `coins HackEso: ​04doublecoin 07colacoin 08quecoin 09neccoin 02optealphilcoin 06goto++coin 13longsertcoin 04pofecoin 07l00tcoin 08puesspaghcoin 09galliiecoin 02ycoin 06athcoin 13sitioncoin 04concoin 07subjeccoin 08cutercoin 09dzicoin 02hactropolymoncoin 06whis=thacoin int-e: Oh right. That's the ICO list shachaf wanted. int-e: @thanks kmc lambdabot: you are welcome int-e: `thanks kmc HackEso: Thanks, kmc. Tmc. int-e: fungot: fungot: int-e: these unique items make us invincible! dance!! for ayla eat? oh...i feel faint. just as you touch, so throw away. thankful for that? for my, daughter! just like crono! int-e: ^style fungot: Available: agora alice c64 ct* darwin discworld enron europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack oots pa qwantz sms speeches ss wp ukparl youtube int-e: ^style irc fungot: Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams) int-e: fungot: fungot: int-e: so some kind of byte code, i might even prefer it fast, you know kingoffrance: im curious about the enron dialect, from the released audio :) kingoffrance: "grandmas not gonna have any power this week" myname: oh nice, i didn't know fungot has an oots style fungot: myname: pattern match on it with someone else for a second fizzie: fungot: Come on, don't be so rude. fungot: fizzie: in perl you'd write "" instead of " ( display... int-e: fungot: ... fungot: int-e: i forgot to get rid of some cells exhibit. glad to be of any significance is in maine. fizzie: fungot: Try to come up with one of those weirdly relevant replies every once in a while, will you? fungot: fizzie: you can store and retrieve the strings in the array :) you mean to brainfuck or befunge rot13? you would need to be made fizzie: I don't think that counts. int-e: fungot doesn't do requests fungot: int-e: that may have been a giveaway... busy. all that is involved with yasos is individual objects there's no concept of hygiene int-e: Not relevant but pretty coherent. wib_jonas: " Try to come up with one of those weirdly relevant replies" => he did: https://esolangs.org/logs/2019-11-07.html#l1d arseniiv: ^style fungot: Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc* iwcs jargon lovecraft nethack oots pa qwantz sms speeches ss wp ukparl youtube arseniiv: I suspected it arseniiv: for me, “to brainfuck or befunge rot13” is a find arseniiv: fungot, how old your irc base again? fungot: arseniiv: did i just read arseniiv: fungot: yeah, you did, but you wrote too little fungot: arseniiv: why ehird in particular? there must be. how do you have a bottle of liquid plumber arseniiv: you got me arseniiv: fungot: please inspire me at least fungot: arseniiv: i never hold grudges against people whom i refer to them later. this is a test"). arseniiv: this doesn’t help at all, though it consoles a bit kingoffrance: liquid plumber i guess is a specific flavor of soylent green fizzie: I think the years are included in the style description. fizzie: ^style irc fungot: Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams) fizzie: Well, apparently not. fizzie: It's pretty old, though. arseniiv: fungot: what do you know about the Restaurant? fungot: arseniiv: stop it, i suppose that would work with scheme48 on windows? fnord, when audio driver problems will probably be arseniiv: fungot: but I don’t want to stop, I’ve only just begun! arseniiv: fungot: sorry, did I break you accidentally? arseniiv: I’m sorry my dear imode: oh no, did fungot break? fungot: imode: tracing it by hand for safety?" yes... yes they can.... at last arseniiv: strange. Dear fungot, did you accidentally ban me? fungot: arseniiv: i was writing replace for a fnord bus on empty roads, even fnord plays in the eu imode: rate limiting, maybe. arseniiv: imode: are they that sophisticated? I’ll never stop wondering imode: probably! arseniiv: fungot: that being dealt with, would you at last give me a piece of advice? fungot: arseniiv: i think i like pbrain and brainfork, there should be exactly be impressing me all the screen for an hour. int-e: arseniiv: "vice"? arseniiv: don’t think that’s a good advice at all arseniiv: int-e: ? arseniiv: you mean, that was simply an ad? int-e: arseniiv: it was a piece of advice int-e: or more accurately a piece of "advice". arseniiv: fungot: what’s your opinion o quoting styles? fungot: arseniiv: http://en.wikipedia.org/ wiki/ steerpike' reminds me of the illusion arseniiv: so you don’t have an opinion yourselves fizzie: Yes, there's a "at most N consecutive replies to the same nickname in a row" limit, with N somewhere around 3 to 4. imode: makes sense. arseniiv: fizzie: ah int-e: Fun. _mm_sll_epi16, _mm_sll_epi32 and _mm_sll_epi64 shift in bit units. _mm_slli_si128 shifts in byte units (there's an alias _mm_bslli_si128). _mm_slli_epi8 does not exist. int-e: who comes up with these instruction sets... int-e: (These came up while optimizing http://paste.debian.net/1115796/ ... which I have no use for at all.) b_jonas: int-e: yes, the ones that shift in bit units shift only within words (that are 16, 32, or 64 bit wide); the ones that shift in byte units shift the entire 128-bit register; the latter is mostly obsolete because we just use full permute instructions now, either way is just as slow; the former are also partly obsolete as we now have variable shift instructions that shift each word by a different amount as b_jonas: given by the words of another register b_jonas: there certainly are some overlap in the usage of these, but they are different enough instructions b_jonas: that they're all called "shift" is a pity arseniiv: hey hey suppose we have a finite digraph (possibly with self-loops) and we start with I[0] the set of all sink vertices, then each time we set I[n+1] := I[n] ∪ (all vertices with outcoming edges only to vertices of I[n]). When I[n] settles (the graph is finite), what do we get? I suspect this set has a nice name arseniiv: (though as I[n] ⊂ I[n+1], we can take even an infinite graph and just take a limit of I afterwards, maybe of an ordinal-valued sequence) arseniiv: hm it reminds me induction arseniiv: (I swear I didn’t name I after “induction”) b_jonas: arseniiv: I don't think you get anything particularly interesting or nice arseniiv: this occurs when I try to decide if an algebraic type is inhabited; the vertices are types and t → u when a value of u is absolutely needed to construct a value of t b_jonas: arseniiv: there's a decomposition theorem for digraphs, where the digraph is made of strongly connected components aka strong components, any two node in the same strong component are reachable from each other both ways, and no two strong component is reachable from each other both ways, b_jonas: so if you contract the strong component, you get a digraph without a loop b_jonas: in your case, you start from sink vertices, which are exactly the sink strong components that have only one node, and then take all nodes (or all strong components) reachable from those backwards b_jonas: hmm wait, that's not what you said b_jonas: sorry, wait a moment arseniiv: yeah, that’s more peculiar :) b_jonas: "I[n+1] := I[n] ∪ (all vertices with outcoming edges only to vertices of I[n])" arseniiv: for a vertex v to be added, we need that for all v → w, w be in I[n] b_jonas: yes, that's fewer nodes b_jonas: the set of nodes you get in the end won't even have directed loops among them arseniiv: (my hypothesis that lim I consists precisely of all inhabited types, for the semantics given above) b_jonas: arseniiv: no way arseniiv: at least it should be a necessary condition? b_jonas: arseniiv: consider data R where { {- uninhabited -} }; data S where { {- uninhabited -} }; data A = P R | Q S; b_jonas: neither R nor S is absolutely needed to construct A, and yet A is uninhabited arseniiv: b_jonas: ah, now I remember, thanks! arseniiv: I considered that but forgot arseniiv: now I think maybe I need to work constructor-wise arseniiv: I’ll write if I succeed on this way b_jonas: arseniiv: how many type system extensions do you have? is this still plain algebraic types, or do you have type parameters or even more? arseniiv: b_jonas: plain ones, no parameters b_jonas: I believe if you have just plain algebraic types, then you can find out precisely which types are inhabited b_jonas: if you add enough type system extensions, eventually your compile time becomes Turing-complete, and then or before, you can only prove some of your uninhabited types uninhabited b_jonas: that's still useful for optimizations, and it's not usually a problem that you can't prove an uninhabited type uninhabited, mind you b_jonas: so it's still worth to have basic checks for that in a compiler arseniiv: you may even remember when I talked to myself here about proving generalized Minsky machines TC for exactly those type definitions which give us infinitely many values arseniiv: b_jonas: yeah, I agree with what you said too b_jonas: arseniiv: that sounds plausible, because those types can simulate natural numbers, and counter machines with enough registers are turing-complete, b_jonas: whereas if you only have types that have finitely many values, then your state space is finite arseniiv: now I have sat and written a proof that indeed infinitude of values is equivalent to TCness, but now I want an icing on a cake showing how to decide if there are infinite values syntactically b_jonas: high chance of rain tomorrow, says the weather prediction. ok. arseniiv: yeah, precisely what I written out arseniiv: (not about the rain) b_jonas: decide if there are infinitely many values? yes, that's probably also possible arseniiv: b_jonas: have your climate snow or rain usual at this time of the year? b_jonas: it's sort of like deciding if a regular language is finite given an NFA b_jonas: yes, it should rain arseniiv: b_jonas: I think that limiting I set is the answer, even, but I haven’t yet continued with proving it in peace so I don’t yet know for sure b_jonas: but two weeks ago was too dry b_jonas: last week was better, I glad we got the rain finally b_jonas: and in the evening too, when I'm on the street, which is always funnier b_jonas: I used to say that I take pleasure in the uncomfortableness that other people experience in the heavy rain, but I decided I shouldn't phrase it like that, b_jonas: and instead say that I'm happy that I'm lucky enough that the rain doesn't hurt me arseniiv: and here is a rain-snow threshold, zeroes by night or by day depending on fortune b_jonas: nah, it's too warm for that yet arseniiv: I do quite like being a bit under a warm rain, that is in the summer maybe arseniiv: though I don’t like drying things afterwards so I’m almost not doing that b_jonas: sure, warm rain is even better, because the air here in Europe is dry enough that everything dries quickly kspalaiologos: Are people who worked on eso-os still alive? arseniiv: that approach worked in the end, though without a graph due to alternative requirements of constructors oerjan: @messages-foul lambdabot: int-e said 19h 57m 31s ago: today on schlock mercenary: heavy punning <-- I feel that "Hurtz" would make an excellent unit for punnery. oerjan: `? solidity HackEso: Solidity is an esolang for writing contracts. It has good support for secure linear algebra. int-e: moerjaning oerjan: Sic transit Lucrezia oerjan: mornint-e int-e: Oh I forgot about GG yesterday. int-e: Looks great. int-e: And I guess the haircut settles who is who. oerjan: unless the clank lucrezia managed to make more copies, this leaves only the Zola copy on the run. which is not in control. hopefully. oerjan: (if it _does_ gain control there would be a danger of it becoming a queen too) int-e: 3 months from discovery (http://www.girlgeniusonline.com/comic.php?date=20190809) to... well, maybe defeat. int-e: We could also have two roaming souls as a result. int-e: Just to keep things messy. oerjan: `relcome ashtons HackEso: ​13ashtons: 04Welcome 07to 08the 09international 02hub 06for 13esoteric 04programming 07language 08design 09and 02deployment! 06For 13more 04information, 07check 08out 09our 02wiki: 06. 13(For 04the 07other 08kind 09of 02esoterica, 06try 13#esoteric 04on 07EFnet 08or 09DALnet.) ashtons: :) i just came from the wiki shachaf: `5 5 w HackEso: 1/2:indonesia//Indonesia is a large island country in Asia and the world's most populous muslim country. Its major export is rayon textile from the Indonesian fnord. \ hodl//Hodl ym bere, I'ev gto thsi! \ wiki//The wiki is at . \ hash 2346ad27d7568ba9896f1b7da6b5991251debdf2//hash 2346ad27d7568ba9896f1b7da6b5991251debdf2 \ canary//A canary is a small bright yellow chicken that dwells in deep caves. Unlike bats ashtons: I've actually been working on my own esolang, but I don't really know what to call it yet. HackEso: 2/2: canaries are oriented right way up, unless they're pining for the fjords. \ ............................................................................................................................................................................................................................................................................................................................................................................. ashtons: anybody got tips for naming esolangs? cause i suck at naming stuff shachaf: int-e: what did you do.............................................................................................................................................................................................................................................................................................................................................................................. int-e: shachaf: I don't know. HackEso: 1/2:indonesia//Indonesia is a large island country in Asia and the world's most populous muslim country. Its major export is rayon textile from the Indonesian fnord. \ hodl//Hodl ym bere, I'ev gto thsi! \ wiki//The wiki is at . \ hash 2346ad27d7568ba9896f1b7da6b5991251debdf2//hash 2346ad27d7568ba9896f1b7da6b5991251debdf2 \ canary//A canary is a small bright yellow chicken that dwells in deep caves. Unlike bats ashtons: i have no idea what is going on int-e: Why does it cycle. int-e: ashtons: HackEso is a bot. ` is its command prefix. HackEso: Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch [] " downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert " can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/ ashtons: `echo hello int-e: ashtons: And well... it has a bunch of less and more obscure commands. ashtons: `man 2 waitpid HackEso: Nice try. shachaf: int-e: What should it do instead? int-e: shachaf: stop shachaf: `cat bin/n HackEso: line="${1-$(cat /hackenv/tmp/spline)}"; len="$(awk 'END{print NR}' /hackenv/tmp/spout)"; echo -n "$line/$len:"; sed -n "${line}{p;q}" /hackenv/tmp/spout; echo "$((line /hackenv/tmp/spline ashtons: i was not expecting that response HackEso: No output. shachaf: You could make it stop, I guess? ashtons: `$PATH HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: $PATH: not found shachaf: It has to print something. int-e: `cat bin/man HackEso: ​#!/bin/sh \ echo Nice try. ashtons: `echo $PATH HackEso: ​$PATH int-e: `` echo $PATH HackEso: ​/hackenv/bin:/usr/bin:/bin int-e: `cat bin/` HackEso: ​#!/bin/bash \ cmd="${1-quote}" \ TIMEFORMAT="real: %lR, user: %lU, sys: %lS" \ shopt -s extglob globstar \ eval -- "$cmd" | rnooodl int-e: it's all perrrfectly logical. ashtons: `echo banana HackEso: banana HackEso: 652) fizzie: What kind of speech recognition do you do? If you only need to recognize famous speeches, like Churchill or something, it should be pretty easy. int-e: shachaf: I take it back. shachaf: Golly. ashtons: `touch banana.txt int-e: `? prefixes HackEso: No output. HackEso: Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ . HackEso: a.out \ banana.txt \ bin \ canary \ emoticons \ esobible \ etc \ evil \ f \ factor \ good \ hw \ ibin \ interps \ izash.c \ karma \ le \ lib \ misle \ paste \ ply-3.8 \ quines \ quinor \ quotes \ share \ src \ test2 \ testfile \ tmflry \ tmp \ wisdom int-e: `url / HackEso: File is outside web-viewable filesystem repository. int-e: `url . HackEso: File is outside web-viewable filesystem repository. ashtons: so how do i put stuff in banana.txt now int-e: I wanted this output: https://hack.esolangs.org/repo/file/tip/ kmc: what's a banana.txt ashtons: if i remember correctly you can pipe output from echo into a file ashtons: i made it make a file called banana.txt HackEso: https://hack.esolangs.org/repo/ ashtons: `echo "bananas are awesome" >> banana.txt HackEso: ​"bananas are awesome" >> banana.txt ashtons: `cat banana.txt HackEso: No output. int-e: `` rm a.out izhash.c test2 testfile HackEso: rm: cannot remove 'izhash.c': No such file or directory int-e: `` rm izash.c HackEso: No output. ashtons: `echo "bananas are awesome" > banana.txt HackEso: ​"bananas are awesome" > banana.txt int-e: kmc: yes? kmc: `` ls wisdom | paste HackEso: https://hack.esolangs.org/tmp/paste/paste.6286 kmc: `` /bin/ls wisdom | paste HackEso: https://hack.esolangs.org/tmp/paste/paste.9161 oerjan: ashtons: ` alone only takes a single command argument and no shell syntax int-e: ashtons: the trick is to use `` [note the space]. And you can experiment in the tmp/ subdirectory... then it won't end up under version control. shachaf: `? shaventions HackEso: Shaventions include: before/now/lastfiles, culprits, hog/{h,d}oag, le//rn, tmp/, mk/mkx, {s,p}led/sedlast, spore/spam/speek/sport/1/4/5, edit. Taneb did not invent them yet. kmc: `` echo 'Big beats are the best, get high all the time.' > wisdom/'big beat manifesto' kmc: `? big beat manifesto HackEso: No output. HackEso: Big beats are the best, get high all the time. shachaf: `? le/rn HackEso: le/rn makes creating wisdom entries manually a thing of the past. Usage: `le/[/]rn // fizzie: As for the naming, that's easy. fizzie: `langs HackEso: lambrelang doverlang befactionlang crablang pathlang wadelang wherlang 2dblang adepoullang sumlang fmandlang lxxxlang netwlang bajolang minlang bfreetonlang ttilang qwedlang pointlang frualang ashtons: ` ` echo "Bananas" > banana.txt HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: : not found kmc: `coins HackEso: ​07hifhcoin 08trincoin 09vcoin 02catcoin 06concoin 13julicoin 04liberacoin 07vhccoin 08symeshauvecoin 09rectpcoin 02netwofifcoin 06forthcoin 13thisesocoin 04peterbcoin 07liacoin 08aeonstrolcoin 09lopocoin 02duricoin 06paxcoin 13auresecoin shachaf: `cbt langs HackEso: words ${1---eng-1M --esolangs 20} | sed -re 's/( |$)/lang\1/g' kmc: catcoin fizzie: Presumably that exists already. int-e: `mk tmp/banana.txt//Bananas are tasty but not very juicy. HackEso: tmp/banana.txt int-e: `cat tmp/banana.txt HackEso: Bananas are tasty but not very juicy. int-e: `` echo -n "Bananas cause far fewer accidents than cartoons may lead you to believe." > tmp/banana.txt HackEso: No output. int-e: `cat tmp/banana.txt HackEso: Bananas cause far fewer accidents than cartoons may lead you to believe. oerjan: `? banana HackEso: Bananananananana BATMAN! ashtons: ` ` echo -n "Bananas taste good and have potassium, but they bruise kinda easily. I still like to eat them though :)" > tmp/banana.txt HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: : not found ashtons: seriously int-e: ashtons: there's no space *between* the two backticks. ashtons: `` echo -n "Bananas taste good and have potassium, but they bruise kinda easily. I still like to eat them though :)" > tmp/banana.txt HackEso: No output. ashtons: cat tmp/banana.txt int-e: The backtick is followed by a command name to be executed, then a space, and then the command's argument. ashtons: `` cat tmp/banana.txt HackEso: Bananas taste good and have potassium, but they bruise kinda easily. I still like to eat them though :) int-e: So `` foo executes the ` command with parameter "foo". Which is why this is relevant: int-e: `cat bin/` HackEso: ​#!/bin/bash \ cmd="${1-quote}" \ TIMEFORMAT="real: %lR, user: %lU, sys: %lS" \ shopt -s extglob globstar \ eval -- "$cmd" | rnooodl int-e: (Of course that's a simplification. Some commands are built into the bot, like `help) ashtons: will it recognize, say... HackEso: No halp 4 u ashtons: hahaha i was not expecting that shachaf: `dobg halp HackEso: 6613:2016-01-29 echo "echo No halp 4 u \\$1" >> bin/halp \ 6612:2016-01-29 echo "#!/bin/sh" > bin/halp \ 6611:2016-01-29 echo "echo $1" >> bin/halp \ 6610:2016-01-29 echo "echo No halp 4 u" >> bin/halp \ 6609:2016-01-29 echo "#!/bin/sh" > bin/halp \ 6608:2016-01-29 chmod +x bin/halp \ 6607:2016-01-29 echo "help" >> bin/halp \ 6606:2016-01-29 echo "#!/bin/s ashtons: i just remembered why I came to this chatroom :\ int-e: naming is hard ashtons: very hard int-e: and also really easy :P int-e: (as fizzie pointed out above... just generate something random) shachaf: Why random? Just generate increasing names. ashtons: had to scroll up to find that shachaf: You only get ~sqrt(n) names before a collision if you do it randomly. ashtons: okay then int-e: Right. The first 26 variable names are easy. Then it becomes a bit harder. shachaf: 1112111 variables should be enough for anyone. int-e: Those aren't all assigned, are they. shachaf: Wait, I meant 1114112. int-e: > length ['\0'..] lambdabot: 1114112 shachaf: > 2^16*17 lambdabot: 1114112 shachaf: Some of those aren't even assignable (like the surrogate code points for UTF-16). ashtons: right now i'm wondering if there's a program online somewhere that can randomly generate a plausable-sounding word ashtons: probably not int-e: `german HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: german: not found fizzie: `words --german 10 shachaf: `words --english 10 HackEso: Unknown option: english int-e: fizzie knows, of course. fizzie: `words --list HackEso: valid datasets: --brazilian --bulgarian --canadian-english-insane --catalan --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --esolangs --finnish --french --gaelic --german --german-medical --hebrew --irish --italian --manx --norwegian --ogerman --opcode --pokemon --polish --portuguese --russian --spanish --swedish \ default: --eng-1M shachaf: too obscure, probably? shachaf: `words --hebrew 10 HackEso: ​האור וסברתי העתקו וטיות דפרק בתפול בנלו חקרו שיש מאים ashtons: `words --help HackEso: Usage: words [-dhNo] [DATASETS...] [NUMBER_OF_WORDS] \ \ options: \ -l, --list list valid datasets \ -d, --debug debugging output \ -N, --dont-normalize don't normalize frequencies when combining \ multiple Markov models; this has the effect \ of making larger datasets more influential \ -o, --target-offset change the target length offset used in the \ shachaf: `words --eng-us 10 HackEso: kanaticule chrin yourg xacted skeypl rati usmarkiequa lando preni gliardrivi shachaf: I gotta say those aren't very plausible. int-e: Hmm, german... the trailing "ly" is odd. ashtons: is there a way to specify word length? shachaf: Some of the Hebrew ones are more plausible (several are actual words). int-e: and "condres" doesn't look german at all. fizzie: Not directly, but you can affect the standard distribution with -o. ashtons: cause at this point i don't care much if it's pausible, more so if it's pronouncible fizzie: `words --eng-all -o 10 HackEso: fathfieldobferlogly int-e: (But of course we have loan words, so maybe it learned from those.) fizzie: `words --eng-all -o 12 10 HackEso: avrailobeddleded gbowingenetitatexicochoodfron whlcandjhancequane expuriaprotyletablemean praethylludient dirconcianeogeora extrisatingbilissej matripublecescraticator towhyneckalnarawn humindltloniantioning shachaf: All words are pronouncible, some only once. ashtons: `words --eng-us -o 16 fizzie: The English isn't doing so well. HackEso: affcloshnavdaupraetterban ashtons: `words --eng-us -o 16 16 HackEso: grsedaledwardingerencing microsyarnyamaiary govardisawendeisation supjtherianticouncestrkakenrodi splarrowetkeotegenspielin focessolundrendorfempte asgimizedeemajorissed kuedaugauctivinctivossen allowtiendocumenoloxalre nenrinderinitroducenzelet feraytternianotersomatione iithaltlleroundedpoiloselege theritoidendefmeditegoritanci incurallctivingedivitrepat armicrouhlerowitat dubalatriumqueftremene fizzie: The Finnish words are sometimes pretty plausible, sometimes completely not (it doesn't understand vowel harmony). fizzie: `words --finnish 10 int-e: fizzie: 16 may be too long int-e: Oh that's the number of words. Why are the words so long though... ashtons: `words --eng-us -o 16 4 HackEso: pirabildualinendently cretophiquakneyagammisperp nonpsyconvespectathebutstonch mpcarockentdrumminerievraneandu int-e: `words --eng-us -o 4 16 HackEso: ianaximurrexcluaen unettionaliniallin thanincrgonogeeder nambryadeon uuoitewoodli iyingtonelightef homicrossarthe narethylphotoph ofcentakethemke immunabild earumcumburythnol vaidhainia lenallyflyridge shonicataque threding trisiticantum int-e: hmm. no clue what -o does. fizzie: For the record, -o isn't the target length, it's an offset. fizzie: `words --eng-us -o 0 10 HackEso: fiverlike grphildt sutulari musenseguilimizi crossamg ringersonemee waainesindele duatiored maring deckley int-e: `` words --help | paste HackEso: https://hack.esolangs.org/tmp/paste/paste.2803 fizzie: `words --eng-us -o -4 10 HackEso: barrie bouf confraga disibiliary libar mine scipisar kid potedeconoxim univar int-e: `words --eng-us -o -4 16 fizzie: That looks pretty reasonable. HackEso: liedisal kard peeck ramia besermo fatio orkmannarsoninewmant need edit nung hujici lusiedrintr gliaccal stru pertrever onemijde fizzie: Lengthwise. int-e: oh sorry int-e: (You just did that while I went to read the paste) fizzie: FWIW, the length modeling isn't particularly great, it's a restriction of character n-grams. fizzie: I think `words had some very ad-hoc hack for lengths. ashtons: is there a way to specify length in letters? fizzie: No, but you can just generate and filter. ashtons: gotcha fizzie: It's not really possible to have an exact target length for the kind of model it uses, unless you just do a hard truncate, and that way the word doesn't end the way words normally end. ashtons: `` words --eng-us 8 | grep -e /([a-z]{16})/ HackEso: ​/hackenv/bin/`: eval: line 5: syntax error near unexpected token `(' \ /hackenv/bin/`: eval: line 5: `words --eng-us 8 | grep -e /([a-z]{16})/' int-e: just drop the /( and )/ ashtons: `` words --eng-us 8 | grep -e [a-z]{16} HackEso: No output. ashtons: `` words --eng-us 8 | grep -e [a-z]{16} HackEso: No output. int-e: actually, hmm ashtons: `` words --eng-us 256 | grep -e [a-z]{16} HackEso: No output. int-e: Ah, of course... it puts everything on one line. ashtons: Okay, so how do we deal with that? int-e: `` echo $(words --eng-us 256 | tr \ \\n | grep -e ^[a-z]{16}\$) HackEso: No output. ashtons: `` words --eng-us 256 | grep -e [a-z]{16} > wordlist.txt HackEso: No output. ashtons: cat wordlist.txt ashtons: `cat wordlist.txt HackEso: No output. kmc: ask your doctor if potedeconoxim is right for you shachaf: `rm wordlist.txt HackEso: No output. kmc: actually, is there a words dict for drug names? that would be fun shachaf: I recommend doing experiments like that in tmp/ (and probably also in /msg). ashtons: ask your doctor if pseudobanadeconoxim is right for you kmc: ask your doctor if bananadine is right for you kmc: can one create new dicts easily? ashtons: side effects may include turning into a banana kmc: `paste bin/words HackEso: https://hack.esolangs.org/repo/file/tip/bin/words int-e: `` echo $(words --eng-us -o 6 256 | tr \ \\n | grep -E '^[a-z]{16}$') HackEso: wenkephriskolock medebederabbaseq hypotaryleterney enticadoralfhoea ininograntanther kmc: `paste share/WordData/eng-us HackEso: https://hack.esolangs.org/repo/file/tip/share/WordData/eng-us shachaf: `url share/WordData/Eng1M HackEso: https://hack.esolangs.org/repo/file/tip/share/WordData/Eng1M kmc: how do i create a data file int-e: `help fetch HackEso: ​`fetch [] downloads files, and is the only web access currently available in HackEgo. It is a special builtin that cannot be called from other commands. See also `edit. shachaf: `doag share/WordData/EngUs HackEso: 0:2012-02-16 Initïal import. ashtons: `` echo $(words --eng-us -o 6 256 | tr \ \\n | grep -E '^[a-z]{16}$') kmc: i mean how do i generate the file HackEso: vededesigtnisult letoriumfreynyne ctorthouaruntero semimalkylamotun shachaf: Looks like it's just some n-gram thing. int-e: ashtons: you can do this in private chat with HackEso btw shachaf: EngUs: perl Storable (v0.7) data (major 2) (minor 8) int-e: (but please do not modify the file system in private chat, as a courtesy to the rest of us) shachaf: so you create it with perl hth int-e: fizzie is the ngram master int-e: (but nitia is ancient, so it's possible that he doesn't remember) int-e: `? nitia HackEso: nitia is the inventor of all things. The BBC invented her. ashtons: i have found my esolang's name. psychairefatback! oerjan: rolls off the tongue fizzie: shachaf: kmc: Yes, you create the file with Perl. fizzie: I did add a dataset to `words semi-recently. fizzie: I don't have the original tools, but it wasn't too hard to reverse-engineer. I think I did it with a Perl oneliner? int-e: oerjan: What are nitia's initials? fizzie: I think I probably saved the command somewhere. shachaf: Nitia never does anything, and yet through it all things are done. fizzie: `words --opcode 10 HackEso: HINT_NOP54 PUSHFD INVEPT VCMPNGT_UQPD UD0 VFMSUBP VANDD BLEND FDIVP PMULLD fizzie: Ah, here we go. fizzie: cat ../x86.txt | tr a-z A-Z | perl -ne 'use Data::Dumper; use Storable; chomp; $len{length($_)}++; @w = split //, " $_ "; for ($i = 0; $i+3 < @w; $i++) { $c = $w[$i].$w[$i+1].$w[$i+2]; $freq{$c}->{$w[$i+3]}++; } END { store([\%freq,\%len], "Opcode"); }' fizzie: That should create a file compatible with `words; then you just include "file" it the script's @options list; it will automatically titlecase-ish it and look it up from "share/WordData/File" shachaf: fizzie: I spent a few minutes trying to figure out enough Perl to do it and then decided not to. int-e: How Markovian. fizzie: Also you don't actually need Data::Dumper, I think I used that just while debugging. oerjan: today's schlock mercenary should be ignored and talked about. anything else Hurtz. oerjan: *not talked HackEso: 1/2:taneb consistency//Taneb consistency is a consistency that is weaker than all other consistencies. Taneb invented it. \ graham's number//Graham's number isn't as delicious as his crackers. \ cello//4The 7high 8level 9structure 2of 13Cello 6projects 4is 7inspired 8by 9/Haskell/, 2while 13the 6syntax 4and 7semantics 8are 9inspired 2by 13/Python/ 6and 4/Obj-C/. \ kanada//Your bankers' vain plazas never nurtured HackEso: 2/2:no one / And your concrete expanses lay fallow in the sun / And your cities all collapsing while your corrupt mayors shrug \ ichtymology//Ichtymology is like itymology, but even more fishy. shachaf: `cwlprits graham's number HackEso: oerjän \oren̈\ shachaf: `? itymology HackEso: Itymology is the science of understanding the true meaning of a statement. oerjan: also, petey should totally fab some dronuri moles and reflect some trust on the pa'anuri. ashtons: i see yall see the page i made :p int-e: oerjan: I'm waiting for Schlock's display of his innate diplomatic and cross-species communication skills (as displayed in the very first strip. https://www.schlockmercenary.com/2000-06-12) oerjan: that too. int-e: oerjan: Actually, rather than dronuri (nice one), isn't it more likely that we'll get an antenna instead. int-e: Have I complained already that modern x86 CPUs are insane? int-e: Ah no, I'm barking up the wrong tree. GCC's vectorizing the code I'm looking at, so doing it manually has little effect. int-e: The sentiment is still there though... you can squeeze so many instructions into the time of one RAM access. oerjan: int-e: dronuri is the term the pa'anuri used for them oerjan: although you're right the fabber might have had the plans for the antennas too fizzie: The other day I learned that a "dronie" is a selfie taken with a drone. int-e: meh. of course it is int-e: So a speedie is a selfie taken by speeding into a speed camera. shachaf: whoa, my solver is 5x faster than minisat on these instances. shachaf: Despite just being a worse version of minisat. shachaf: Oh, if I disable restarts minisat solves it 30x faster than my solver (which doesn't do restarts). So probably restarts are just not well-suited or something. shachaf: Wait, no, only 2x faster. ais523: @messages? lambdabot: Sorry, no messages today. int-e: @metar lowi lambdabot: LOWI 120620Z VRB01KT 5000 -RASN BR FEW005 SCT007 BKN013 01/00 Q1010 TEMPO 3000 SNRA BKN008 b_jonas: `whatis waitpid HackEso: waitpid(2) - wait for process to change state \ waitpid(3p) - wait for a child process to stop or terminate \ waitpid(3glibc) - Process Completion b_jonas: ashtons: ^ HackEso: https://hack.esolangs.org/repo/ b_jonas: int-e: ^ b_jonas: int-e: not only that, but it won't generate more than a few dozen words with one command. you need a loop like ( for x in {1..10}; do words 16; done ) to generate 256 word. b_jonas: um... yeah, that's obviously not 16 b_jonas: but you get the idea b_jonas: ``` (for x in {1..16}; do words --eng-US -o 6 16; done) | perl -we 'local$/; $s=; while($s=~/(\S+)/g){ push@{$l{length$1}},$1; }; $m=-1; for (sort keys%l) { if ($m<@{$l{$_}}) { $m=@{$l{$_}};$n=$_; } } print "@{$l{$n}}\n";' # if you want words of equal length HackEso: tegourneckstor heilcaiyarwink sphotosomoveri descarnallotel dutierundeutio anullockunsman larywaynelland herieclamasten achelsbotswerk piangewahander rotrontoonment renerthrinimre tumpanhomating restermalizing cepeiirginaido formeudongoetl grubbellizedcn denturandberen semirellafisin disatiralevsky hightsforciner tworticeptinum decommereofled pilaintrianden gentermathebra ocebaneysanath fielettedleryn methylsumnecke newchuligelief alzweihuumv b_jonas: ``` (for x in {1..16}; do words --eng-US -o 0 16; done) | perl -we 'local$/; $s=; while($s=~/(\S+)/g){ push@{$l{length$1}},$1; }; $m=-1; for (sort keys%l) { if ($m<@{$l{$_}}) { $m=@{$l{$_}};$n=$_; } } print "@{$l{$n}}\n";' # if you want words of equal length HackEso: codenovax changlyte atrimeter mazzoleve springrap boronlria sspressit ethylarve ashpeesal truchuval wageprile anadebled icizatite brombrina wennellin hemointer supennill folically kairendel ficaluene nooddered ihvrikaia upcrtamer reptackep deedjacke butyranth devavrana uaregunde cliovozdz ptureatte protoucbi camplaind b_jonas: ``` (for x in {1..16}; do words --eng-US -o -6 16; done) | perl -we 'local$/; $s=; while($s=~/(\S+)/g){ push@{$l{length$1}},$1; }; $m=-1; for (sort keys%l) { if ($m<@{$l{$_}}) { $m=@{$l{$_}};$n=$_; } } print "@{$l{$n}}\n";' # if you want words of equal length HackEso: smod rock atin tulu itne pton elkl boum fide tock biic obfc unlr wrai eige cond pyra pale kaun aveh fful amba goag ehun savi ysti nanl wref phag chan ning utlc thin ford trae fibe zuge unie pdog ting groe unit rooz dahi eron yuan ment coln huko agfa ditz midc chri rect enrl will port paug meth gada ling dore grod vert fted inte jina nnab bean ambo bibu tena anie firn shachaf: `asm pext %rax, %rcx, %rdx HackEso: 0: c4 e2 f2 f5 d0 pext %rax,%rcx,%rdx shachaf: What an encoding. shachaf: It would be nice if `asm supported 32-bit x86. shachaf: I guess c4 and c5 were les and lds? shachaf: Oh, but VEX works even in 32-bit mode, which is why it inverts the initial bits, so they make an invalid modrm byte. I remember now. shachaf: "VEX.LZ.F3.0F38.W1 F5 /r PEXT r64a, r64b, r/m64" Cale: Saw this digital painting on Reddit https://i.redd.it/ux27c13n73y31.jpg and decided to turn it into a magic card https://i.imgur.com/cf994At.png int-e: that must be one hell of a headache :P b_jonas: shachaf: is that how the instruction encoding works? I didn't know that kspalaiologos: `` asmbf <<<"mov r1,0/div r1,0" HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>[-]>>>><<<<[<<<+>>>-]<<<[>>>>>>>[<<<<<<+>+>>>>>-]<<<<<[>>>>>+<<<<<-]<[>+<<-[>>[-]>>>>>>+<<<<<<<<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<[<-[>>-<<[-]]+>-]<-]>>+<<<]>>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: `` asmbf <<<"mov r1,0/div r1,0" > stuff.b HackEso: No output. kspalaiologos: `` bfi stuff.b HackEso: ​/hackenv/bin/`: line 5: bfi: command not found kspalaiologos: `` brainfuck HackEso: ​/hackenv/bin/`: line 5: brainfuck: command not found kspalaiologos: `? brainfuck HackEso: brainfuck is the integral of the family of terrible esolangs. The name is a euphemism for "beef". bf -c -t "+>+++++>+++" | mklang --array HackEso: Run what? kspalaiologos: `` bf -h HackEso: No output. kspalaiologos: `` bf -h 2>&1 HackEso: No output. kspalaiologos: `` bf stuff.b kspalaiologos: `` asmbf <<<"out .0" > stuff.b HackEso: No output. kspalaiologos: `` bf stuff.b kspalaiologos: `` bf -c `cat stuff.b` HackEso: No output. kspalaiologos: `` bf -c "`cat stuff.b`" HackEso: No output. kritixilithos: `` cat stuff.b HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: c'mon man kspalaiologos: what's up with this biased interpreter kspalaiologos: `` whereis bf HackEso: bf: /hackenv/bin/bf kspalaiologos: `` cat /hackenv/bin/bf HackEso: ​#! /bin/bash \ [[ $# > 0 ]] || { echo "Run what?"; exit 1; } \ ci="$1" \ echo -n "${ci#*!}" | { /hackenv/interps/egobf/src/egobfi8 <(echo -n "${ci%%!*}") ; } kritixilithos: bf -c -t "`cat stuff.b`" kritixilithos: `` bf -c -t "`cat stuff.b`" HackEso: No output. kspalaiologos: `` /hackenv/interps/egobf/src/egobfi8 -h HackEso: Use: egobfi{width} [options] [file] \ Options: \ -eof {0|-|n} \ set EOF mode: 0, -1 or no-change (respectively) \ [default: 0] \ -debug \ activate the # command [default off] \ -unicode {on|off} \ set unicode mode on or off [default off] \ -wrap {on|off} \ set wrappong on or off [default on] kspalaiologos: `` /hackenv/interps/egobf/src/egobfi16 stuff.b kspalaiologos: purrfect kspalaiologos: `` asmbf <<<"mov r1,0/div r1,0" > stuff.b HackEso: No output. kspalaiologos: `` /hackenv/interps/egobf/src/egobfi16 stuff.b HackEso: No output. kritixilithos: `` bf -c -t "+>+++++>+++" HackEso: No output. kritixilithos: `` bf -c -t "+>+++++>+++" | mklang --array HackEso: ​/hackenv/bin/`: line 5: mklang: command not found kspalaiologos: `? egobfi HackEso: egobfi? ¯\(°​_o)/¯ kspalaiologos: `? egobfi8 HackEso: egobfi8? ¯\(°​_o)/¯ kritixilithos: our names are exactly the same length, kspalaiologos kspalaiologos: what a coincidence ;) kspalaiologos: `` egobfi8 HackEso: ​/hackenv/bin/`: line 5: egobfi8: command not found kspalaiologos: `` cat /hackenv/interps/egobf/src/egobfi8 HackEso: ​ELF............>.....<@.....@.......à[..........@.8..@.&.#.......@.......@.@.....@.@.....À.......À............................@......@............................................@.......@.....T!......T!........ ............X!......X!`.....X!`.....¼......@........ ...........p!......p!`.....p!`.....à.......à..........................@.....@.....D.......D..............Påtd...Ð......Ð@.....Ð@.....D.......D.. kspalaiologos: crap, its binary kspalaiologos: `` ls /hackenv/interps/egobf/ HackEso: aclocal.m4 \ AUTHORS \ ChangeLog \ config.h \ config.h.in \ config.log \ config.status \ configure \ configure.ac \ COPYING \ INSTALL \ Makefile \ Makefile.am \ Makefile.in \ NEWS \ PORTING \ README \ scripts \ src \ stamp-h1 kspalaiologos: `` cat /hackenv/interps/egobf/README HackEso: ​== egobfi == \ A powerful and fast-ish Brainfuck interpreter. \ \ Use: egobfi{width} [options] [file] \ Options: \ -eof {0|-|n} \ set EOF mode: 0, -1 or no-change (respectively) \ [default: 0] \ -debug \ activate the # command [default off] \ -unicode {on|off} \ set unicode mode on or off [default off] \ -wrap {on|off} \ set wrappong on or off [default on] \ \ \ == egobfc == \ An almost-as-powerful Brainfuck compile kritixilithos: are you the same person as the malbolger in ppcg? kspalaiologos: that's true kspalaiologos: I'm a Seed evangelist too kspalaiologos: `` cat /hackenv/interps/egobf/LICENSE HackEso: cat: /hackenv/interps/egobf/LICENSE: No such file or directory kspalaiologos: `` cat /hackenv/interps/egobf/COPYING HackEso: ​ GNU GENERAL PUBLIC LICENSE \ Version 2, June 1991 \ \ Copyright (C) 1989, 1991 Free Software Foundation, Inc. \ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA \ Everyone is permitted to copy and distribute verbatim copies \ of this license document, but changing it is not allowed. \ \ Preamble \ \ The licenses for most software are designed to take away your \ freedom to share and change it. By kspalaiologos: no author names kspalaiologos: erghhh kspalaiologos: `` ls /hackenv/interps/egobf/src/ HackEso: bfc.c \ bfc.h \ bfi.c \ bfi.h \ c2m \ c2m.c \ c2m.h \ egobfc \ egobfc2m \ egobfc2m-c2m.o \ egobfc2m-egobfi.o \ egobfc-bfc.o \ egobfc-egobfi.o \ egobfc-optimize.o \ egobfi16 \ egobfi16-bfi.o \ egobfi16-egobfi.o \ egobfi16-optimize.o \ egobfi32 \ egobfi32-bfi.o \ egobfi32-egobfi.o \ egobfi32-optimize.o \ egobfi64 \ egobfi64-bfi.o \ egobfi64-egobfi.o \ egobfi64-optimize.o \ egobfi8 \ egobfi8-bfi.o \ egobfi8-egobfi.o \ egobfi8-optimize.o \ egobfi kspalaiologos: `` cat /hackenv/interps/egobf/src/bfi.h HackEso: ​/* \ * Copyright (c) 2005 Gregor Richards \ * \ * This file is part of egobfi. \ * \ * egobfi is free software; you can redistribute it and/or modify \ * it under the terms of the GNU General Public License as published by \ * the Free Software Foundation; either version 2 of the License, or \ * (at your option) any later version. \ * \ * egobfi is distributed in the hope that it will be useful, \ * but WITHOUT ANY WARRANTY; b_jonas: ashtons: I recommend using a name made of multiple words kspalaiologos: egobfi, HRM kspalaiologos: it seems biased tho b_jonas: ashtons: it's easier to invent names that way, because you can use a dictionary. eg. I call my future esolang "consumer society", or ais has an esolang called "waterfall model" etc b_jonas: actually it's "the Waterfall Model" b_jonas: he also has ones called "But Is It Art?" and "Along and Across" and "High Rise" etc, all made of nice dictionary words kspalaiologos: do the old esolangers ever join this channel again? b_jonas: kspalaiologos: at least one did kspalaiologos: like, pikhq, Gregor? pikhq: Ive just been quiet lately kspalaiologos: ah, fine b_jonas: well, it might depend on what you mean by "old" of course kspalaiologos: that used to hang out here 2002=2010 b_jonas: and Gregor left not that long ago really, because he used to run HackEgo, didn't he? b_jonas: there are regulars who never left for long of course kmc: i rejoined after a long hiatus kspalaiologos: we had mr. calimari kspalaiologos: or however he was called b_jonas: kmc: did you use the same nick before that hiatus? b_jonas: ``` du -sc .hg # how large is the hackeso hg repository? I wonder if I should clone it for backup b_jonas: hmm... that times out kspalaiologos: `` du -sc .hg b_jonas: suspicious HackEso: No output. HackEso: No output. b_jonas: it actually needs only one of -s or -c , but I keep forgetting which is which kspalaiologos: let's check it kspalaiologos: `` du -c .hg kspalaiologos: `` du -s .hg HackEso: 116 .hg/cache \ 12 .hg/store/dh/interps/clc-inte/clc-inte/blib/lib/language/intercal/backend \ 16 .hg/store/dh/interps/clc-inte/clc-inte/blib/lib/language/intercal/charset \ 28 .hg/store/dh/interps/clc-inte/clc-inte/blib/lib/language/intercal/interfac \ 108 .hg/store/dh/interps/clc-inte/clc-inte/blib/lib/language/intercal/include \ 44 .hg/store/dh/interps/clc-inte/clc-inte/blib/lib/language/intercal/generici \ 24 .hg/store/dh/interps/clc-inte b_jonas: it's -s b_jonas: that's what means it writes only the final result b_jonas: not the size of every recursive subdirectory HackEso: No output. kspalaiologos: `` du --help HackEso: Usage: du [OPTION]... [FILE]... \ or: du [OPTION]... --files0-from=F \ Summarize disk usage of the set of FILEs, recursively for directories. \ \ Mandatory arguments to long options are mandatory for short options too. \ -0, --null end each output line with NUL, not newline \ -a, --all write counts for all files, not just directories \ --apparent-size print apparent sizes, rather than disk usage; althoug b_jonas: "No output." means that it's timed out b_jonas: in this case kspalaiologos: ah yes kspalaiologos: alright b_jonas: took too long to execute kspalaiologos: misleading text b_jonas: ``` du -s wisdom; echo done HackEso: 6336 wisdom \ done b_jonas: ``` du -s .hg; echo done # if you don't see done, then it's timed out (or the output is too long) HackEso: No output. kritixilithos: gnu parallel? fizzie: I don't think it's a CPU-bound operation. fizzie: Anyway, the repo is in the order of 779M. fizzie: Of which 271M is the current working copy, the rest is history. b_jonas: fizzie: thanks b_jonas: wow, what's so large in the workong copy? b_jonas: ``` du -s share/mtg HackEso: 24876 share/mtg b_jonas: ``` du -s interps HackEso: 30684 interps fizzie: 83M paste/ is the biggest chunk after .hg. fizzie: After that, share/, src/, interps/, bin/, lib/, factor/ in that order. b_jonas: thanks fizzie: There are five 10485760-byte files in paste/, that takes up the most space. b_jonas: fizzie: is tmp accessible through `paste or `url ? fizzie: Through `url, yes. b_jonas: then we could have a paste command that stores its data there? fizzie: That's what paste does nowadays, actually. fizzie: Huh, looks like I changed it myself, 2017-02-16. fizzie: I have no recollection of that. b_jonas: well that makes sense, since you'd have to fix stuff if paste filled up the file system fizzie: tmp/ itself is only 9.4M, but I think it's been cleaned up every now and then. fizzie: `` rm paste/paste.{30459,23201,25872,16755,30692,311,27157,25139,2340,12841} # doesn't really help with the history, but I guess making the working copy smaller has some benefits. HackEso: No output. b_jonas: ``` chmod -c u+x tmp/EGY* HackEso: mode of 'tmp/EGYj6LpQgFKM' changed from 0655 (rw-r-xr-x) to 0755 (rwxr-xr-x) b_jonas: ``` rm -rv tmp/EGY* HackEso: removed directory 'tmp/EGYj6LpQgFKM/s' \ removed directory 'tmp/EGYj6LpQgFKM' b_jonas: ``` du -ac * | grep -E "^[0-9]{4}" | tr \\t \ | sort -nr HackEso: 216432 total \ 78076 share \ 39192 share/WordData \ 37444 src \ 33152 src/factor-linux-x86-64-0.95.tar.gz \ 30684 interps \ 24876 share/mtg \ 16724 bin \ 14200 paste \ 10896 interps/c-intercal \ 10736 lib \ 10244 factor \ 10240 factor/factor.image \ 9608 tmp \ 7444 tmp/out \ 6432 share/WordData/EngAll \ 6336 wisdom \ 6208 interps/clc-intercal \ 4892 lib/frink \ 4280 share/WordData/Eng1M \ 4040 lib/p7zip-16.02 \ 3740 share/WordData/EngFiction fizzie: I'm guessing src/factor-linux-x86-64-0.95.tar.gz is also not really needed to be kept permanently. b_jonas: I don't know what that is ais523: it looks like a source tarball to me b_jonas: anyway, I should probably clone them later then b_jonas: fizzie: I have a question about the channel logs. they are present in three formats. do you have the raw (IRC) format even when you fill the logs back from other logs? b_jonas: I wonder if I should download the logs too, but want to figure out if the raw logs would be the best fizzie: All three formats are rendered on the fly, actually. The actual storage format I use isn't (currently) downloadable; it's a brotli-compressed stream of length-delimited protos. fizzie: That said, I don't think there's any loss of fidelity between it and the "raw" format. Except *maybe* in timestamp accuracy, don't remember. fizzie: For backfilling, I have a set of programs that convert from the other log formats (clog, my own personal logs, maybe some others) to that proto-based format, as closely as they can manage. fizzie: https://github.com/fis/esolangs/blob/master/esologs/log.proto is the storage proto, as you can see it's pretty close to being 1:1 with the "raw" format. fizzie: (There are done arguable problems, in that it can't distinguish "FOO x y" from "FOO x :y", or represent lines that are not valid in terms of the IRC protocol. But it is what it is.) fizzie: s/done/some/ b_jonas: fizzie: I don't need the actual storage format, the IRC raw format is good enough fizzie: Yeah, I think it doesn't even lose in timestamp accuracy, looks like it's microseconds for both. b_jonas: fizzie: and the logs are still not accessible on HackEso's file system, right? fizzie: Right. b_jonas: I was thinking of making a `why command that looks up the context from the timestamp of a hg commit, for which I either need the logs on HackEso, or download them here and make a compressed database that represents just some of the timestamps to be able to find the right anchor fizzie: I was planning to make them accessible over HTTP from HackEso. fizzie: Probably with some sort of a search/query API. b_jonas: that could work too b_jonas: this command would need to look up one or sometimes two days per revision b_jonas: I'd have to download the HTML formatted logs for this though, to make sure that the lines match b_jonas: and even then hope that the daily logs has the same number of logical lines as the day's section in the monthly HTML b_jonas: and that the anchors are always numbered sequentially b_jonas: but those are probably true fizzie: Yes, all the HTML is generated on the fly so it should always match. b_jonas: fizzie: you can probably add a link to https://esolangs.org/logs/ refing the new log website https://github.com/kspalaiologos/esologs/ by the way b_jonas: well, unless you think that one won't last for long kspalaiologos: it's been up and running for around 3 months now shachaf: 1186 hth b_jonas: oh, that was fast b_jonas: `olist 1186 HackEso: olist 1186: shachaf oerjan Sgeo FireFly boily nortti b_jonas b_jonas: `thanks fungot fungot: b_jonas: that might be the case HackEso: Thanks, fungot. Thungot. ais523: b_jonas: why do you persistently act like you can't distinguish fungot from Rich Burlew? fungot: ais523: but valgrind is slow because it involves psyntax ais523: it seems like an unlikely confusion to have, I rarely have trouble telling them apart b_jonas: ais523: no no, Rich draws the comics, fungot only publishes them fungot: b_jonas: i can only see my own messages. b_jonas: and I can't thank Rich here, he's not on this channel shachaf: ais523: I rarely have trouble telling "thanking fungot for olist" apart from "being unable to distinguish fungot from Rich Burlew". fungot: shachaf: it doesnt matter which direction you hold the ' increase red' key for evilwm shachaf: I wrote a program to color the output of a program red or green depending on whether it's stdout or stderr. shachaf: I wish it was possible to do the interleaving correctly. ais523: NetBeans does that (well, black for stdout, red for stderr) ais523: it also gets the interleaving wrong ais523: I think getting it correct would involve somehow hooking the OS scheduler? ais523: (e.g. by ptracing the program and halting it whenever a write call occurred, until your own program could get scheduled and read the output) shachaf: Maybe I should settle for getting it right for a single-threaded single-process program. shachaf: Where you could just ptrace, right. ais523: oh, I'm being stupid: you ptrace the program and when it does a write() call, you don't even bother reading the resulting filehandle, you just read the data right out of the argument it gives to write :-P ais523: (you still have to read stderr/stdout if it's a pipe to prevent it clogging up, but maybe you could just use /dev/null) shachaf: Well, no reason not to read it. ais523: alternatively, less general but less efficient: LD_PRELOAD alternative read()/write() routines shachaf: LD_PRELOAD isn't so good because the official API in Linux is system calls, not libc calls. ais523: indeed ais523: hmm, perhaps the dynamic linker should have an option to replace "syscall" (and "int $0x80") with calls to some particular hook code, that'd avoid the context switch in this case ais523: (the obvious downside is how do you fit that into two bytes?) shachaf: How would it do that? shachaf: I think Linux should probably let people override system calls in userspace in a better way than ptrace. b_jonas: ais523: that gets tricky though, because you have to interpret like ten other syscalls besides write, just in case the program uses them b_jonas: plus you may have to handle different syscall types that coexist on x86_64 ais523: b_jonas: yes, at least the number of syscalls is finite and small enough to go through all of them ais523: also, in the case of stderr/stdout, the program writing to them probably doesn't expect them to be seekable, that cuts down the number of possibilities somewhat ais523: actually, in retrospect, I think it's a design flaw for streams and seekable files to be given the same API, the set of operations that can be performed on them is so different shachaf: I think the Windows thing where there's no syscall API, just a dynamically linked OS library, has some benefits. b_jonas: ais523: for fixing interleaving, couldn't you just use pipes for stdout and stderr, and set their capcity to as low as possible, so that they always block on a second write? b_jonas: using fcntl F_SETPIPE_SZ on linux (and there's a call on windows too) b_jonas: that's still not perfect, because you still can't tell the order between one stdout and one stderr write b_jonas: shachaf: the x86_64 abi started by saying that libc is the recommended syscall interface shachaf: libc is scow b_jonas: but of course everyone wants to call the syscall directly, because it's faster or something b_jonas: so we can't have that b_jonas: and I for one agree b_jonas: libc has like ten layers of wrapper around even simple syscalls shachaf: b_jonas: Someone pointed out that in Linux, epoll will tell you the order that fds became readable. ais523: shachaf: if Windows actually were like that, it wouldn't be too bad, but the OS library that's dynamically linked doesn't have a documented/defined API, so you need to use a libc as a wrapper anyway b_jonas: moving the arguments from where a function expects them to where a syscall expects them, errno check, possible restart on signals (or is it the kernel that's doing that now?), shachaf: ais523: Hmm? You don't have to use libc for Windows. ais523: shachaf: what dynamically linked OS library are you thinking of? shachaf: ReadFile is maybe not a system call, but it's an OS interface that isn't libc. shachaf: I'm thinking of kernel32.dll, I think. ais523: msvcrt is a libc (and one you're not officially meant to use, at that!); user32/kernel32 have an incredibly large, and mostly undocumented, API surface shachaf: Maybe you're thinking of ntdll.dll. shachaf: Well, don't use the undocumented parts, I guess? b_jonas: anyway, modifying the program that outputs to stdout and stderr is probably the easiest if the order of its outputs matter shachaf: Windows has something called OutputDebugString. I'm not really sure what it is. ais523: hmm, so it does seem like the API surface is documented in some cases, but only incidentally, e.g. https://docs.microsoft.com/en-gb/windows/win32/api/winuser/nf-winuser-messageboxexw ais523: this is documented as being part of winuser.h, a C header file, and it's only mentioned at the bottom of the page that the function exists in user32.dll shachaf: What's incidental about that? b_jonas: ais523: but there's a documented library too, so why does it matter if there's an undocumented library behind it? ais523: b_jonas: which documented library are you thinking of? ais523: shachaf: well, it means that the use via user32.dll isn't part of the API contract b_jonas: the one that has the windows api calls shachaf: ais523: It's certainly part of the ABI. ais523: in particular, Microsoft could change the calling convention without violating anything written there b_jonas: I don't know what that library is called, the compiler just links it into windows programs automatically, so I never tried to find out ais523: I agree that it can't be changed in practice because the .exe files will be linked against a particular calling convention shachaf: If you write a program and it calles MessageBoxExW, you'll need to link it with the import library user32.lib. ais523: b_jonas: OK, the reason I asked is that this is more complex than you're expecting ais523: the library in question normally has a name of the form msvcrt* ais523: Microsoft considers this to be part of the compiler, not part of the operating system ais523: in particular, there are a number of different msvcrt* files, which you are supposed to ship along with your application, and they have non-open-source licensing that limits what you can do with them shachaf: There are multiple parts of msvcrt, as I understand it. b_jonas: ais523: right, they ship with the compiler, as well as with operating systems starting from Win10 via patches, and if you install programs compiled by a new compiler onto an older OS, you have to install the runtime library ais523: there is also an msvcrt.dll with no version number that does ship with Windows, this is officially undocumented (and does some weird things like implementing functions with the same name as C standard library functions, but different behaviour), and you aren't meant to use it, but at least it will exist on a user's computer and thus you can link against it fairly safely if you know what it does (and with no licensing issues) shachaf: Part of it is things like fopen, which implements the C standard library and you can use if you want to, or not. shachaf: And another part is things like memcpy (maybe?) that the compiler just generates calls to automatically, that you have to reimplement yourself if you don't link the official msvcrt. ais523: in practice, if you're compiling on Windows using an open-source compiler, you're probably using msvcrt.dll as it's the least problematic of the various "you can't use these" APIs shachaf: Neither of these has to do with the OS ABI, which applies to everyone, not just people programming in C. ais523: shachaf: the second part isn't a huge problem, the compiler normally has a fix for that (e.g. gcc has libgcc) shachaf: If you write a program in assembly that opens a MessageBox, you still link to user32.lib/user32.dll, because that's just the API the OS presents. ais523: I agree that the question is "how do you use the OS ABI", and the answer is "either directly or via a glue library, and neither appears to be officially supported unless you use a Microsoft compiler" shachaf: In what sense is this undocumented? shachaf: It says user32.dll and user32.lib right on the page you linked to. b_jonas: ais523: sure, but that's because the non-microsoft compilers for windows are sort of in a sad state b_jonas: for multiple reasons ais523: in the literal sense that, AFAIK, there are a large number of APIs in those libraries which are not documented b_jonas: for one, gcc on windows implements a C ABI that is so incompatible with the MS compiler that even sizeof(long) differs ais523: what Microsoft does is documents APIs that are used by some other mechanism, e.g. in the case of MessageBoxEx, via the windows.h header file, and incidentally mentions that you can find the implementation in user32.dll shachaf: But the ones that you're supposed to use *are* documented. What do the undocumented ones have to do with it? ais523: you have no way to know which ones you're supposed to use or not! b_jonas: it's not just that each MS complier used to have a different C ABI for a while, because those only differed in libc stuff like how FILE works, and in libstdc++ and other C++ stuff b_jonas: you can still at least link pure C functions between them ais523: there is nothing preventing msvcrt implementing a documented function in its C API via an undocumented function in user32.dll shachaf: You just linked to the documentation for MessageBoxEx. So clearly that's one that you're allowed to use? b_jonas: but if you use gcc, you can only link pure C functions if they don't mention long ais523: shachaf: yes b_jonas: this is documented, but it's sad ais523: I'm not sure if this is a complete set, it might be shachaf: I feel like if you're writing a program for Windows you just don't care about msvcrt that much. ais523: a long time ago, on a different computer, I downloaded Microsoft's full set of low-level API documentation, but never really got into it that much shachaf: You have the documented OS ABI, which is some subset of kernel32.dll etc., and you just use that. b_jonas: I used to look at the API documentation at https://docs.microsoft.com/en-us/previous-versions//hh447209(v=vs.85)?redirectedfrom=MSDN , but now it says that "We're no longer updating this content regularly" and doesn't say what supersedes it b_jonas: so now I'm not sure where the windows API docs are shachaf: ais523: I'm not sure what distinguishes ExitProcess() being exposed in kernel32.dll -- documented in https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-exitprocess -- and SYS_exit being exposed in the Linux ABI. shachaf: Except that one is a function call and one is a syscall, obviously. ais523: shachaf: I'm saying I don't know where I'd go to find a list of "this is all the functions in kernel32.dll you are allowed to use" ais523: because that's not how Microsoft organises their API documentation shachaf: Oh, sure, that's an organization thing. shachaf: But if you need to exit the process, you can call ExitProcess(). b_jonas: https://docs.microsoft.com/en-us/windows/win32/apiindex/windows-api-list is probably the new documentation ais523: here's an example: https://docs.microsoft.com/en-gb/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessasuserw ais523: I found this by clicking the link to process and thread functions from your exit process link b_jonas: ais523: isn't that because the same dll has functions for multiple different APIs mixed in it, sort of like libc has all sorts of junk in it too? shachaf: Hmm, does /en-gb use British spellings? ais523: then clicking on a function I thought might be part of the standard library than the ABI ais523: then editing the URL ais523: a) the fact that I had to edit the URL means that the index listing isn't complete (and I just happened to know that most functions with a name ending in A have an equivalent with a name ending in W) b_jonas: so instead there's a doc that documents all the functions of the Win32 API, which are supposedly enough to write anything in windows, and has functions like CreateFile, plus there's one that documents the libc api that comes with the compiler and has functions like fopen ais523: b) the DLL is listed as advapi32.dll, and I have no idea whether that is part of the ABI surgace or not ais523: *surface shachaf: I'm confused about what you're saying. That there's no comprehensive list of all the functions you're allowed to use? shachaf: That doesn't seem particularly necessary. Clearly this specific function is documented, because that's a documentation page for it. ais523: shachaf: is it part of the ABI? ais523: I can't get a clear yes or no answer from that page shachaf: I see CreateProcessAsUserW on the ExitProcess documentation page, by the way. shachaf: ais523: It's part of the advapi32.dll API, and the minimum supported client is Windows XP. ais523: I don't see it; do you have an URL? maybe we're looking at different pages b_jonas: https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessasuserw ais523: shachaf: is advapi32 part of the ABI? I agree that it's part of the API shachaf: Part of which ABI? ais523: b_jonas: that's the CreateProcessAsUserW page ais523: shachaf: the Windows ABI ais523: the equivalent to Linux system calls b_jonas: ais523: right, so what function are you looking for instead? ais523: b_jonas: I'm looking for the list that contains a link to that page ais523: I didn't find the page via a link, I found it via URL editing shachaf: ais523: There's a sidebar on the ExitProcess page that links to that page. ais523: (from a link to the -A version) ais523: shachaf: oh, it must be because you have JavaScript turned on and I don't b_jonas: I don't think there's a flat list, but it's probably in the tree of https://docs.microsoft.com/en-us/windows/apps/desktop/ ais523: the sidebar doesn't show for me b_jonas: no wait b_jonas: how about https://docs.microsoft.com/en-us/windows/win32/index b_jonas: you need javascript for the sidebar, yes shachaf: ais523: I also see it on https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/ shachaf: Anyway, I don't know what advapi32.dll is, so I can't say. It seems to be part of the interface exposed by the OS, so probably? shachaf: As a person targeting Windows, you should probably figure out what each of the DLLs you might be linking against is. ais523: incidentally, after actually reading the docs on the function, i got alarmed at the actual semantics of cross-user process creation on Windows ais523: "Typically, the process that calls the CreateProcessAsUser function must have the SE_INCREASE_QUOTA_NAME privilege and may require the SE_ASSIGNPRIMARYTOKEN_NAME privilege if the token is not assignable. If this function fails with ERROR_PRIVILEGE_NOT_HELD (1314), use the CreateProcessWithLogonW function instead. CreateProcessWithLogonW requires no special privileges, but the specified user account must be allowed to log on interactively. Generally, ais523: it is best to use CreateProcessWithLogonW to create a process with alternate credentials." ais523: and CreateProcessWithLoginW requires the plaintext password of the user you want to create the process as ais523: that isn't an API that I would recommend for any situation other than a sudo-equivalent, and yet it's the recommended way to do things on Windows? b_jonas: so "https://docs.microsoft.com/en-us/windows/apps/desktop/", find link "Win32", goes to "https://docs.microsoft.com/en-us/windows/win32/index", find link "Win32 API reference by feature", goes to "https://docs.microsoft.com/en-us/windows/win32/apiindex/windows-api-list", section "System Services", link "Processes", goes to b_jonas: "https://docs.microsoft.com/en-us/windows/win32/procthread/process-and-thread-reference?redirectedfrom=MSDN", link "Process and Thread Functions", goes to "https://docs.microsoft.com/en-us/windows/win32/procthread/process-and-thread-functions", section "Process Functions", link "CreateProcessAsUser" ais523: b_jonas: which shows CreateProcessAsUserA for me, the version that's sensitive to which language version of the OS is installed b_jonas: ais523: ok, but then I don't know which function you want instead ais523: even Microsoft eventually realised that having the ABI differ from one country to another was a problem, that's one of the reasons why the -W variants of the functions were invented b_jonas: and I'm not familiar with the windows api enough to tell what's best to use here ais523: so CreateProcessAsUserW is the more sane version ais523: there's a fairly simple rule: do not use functions whose name ends in a capital A ever ais523: people just do it because it's convenient (and usually works if both you and your customers speak English) shachaf: Except when you can? b_jonas: ais523: ok, but aren't they usually documented together? ais523: the documentation of the two is almost identical shachaf: OutputDebugStringA("some text"); seems fine to me. b_jonas: ais523: hmm, you're right, that page doesn't document the W version b_jonas: let me see if I can find one that ends in a W ais523: only difference appears to be in the title and "syntax" section b_jonas: although there might not be one if this is an obsolete api ais523: shachaf: the encoding of "some text" differs by which version of Windows you have shachaf: Is it not always compatible with ASCII? ais523: there's almost certainly an API to discover what it is, then you could do an iconv to convert to the correct format at runtime shachaf: I guess if your program uses UTF-8 internally, it has to encode to UTF-16 whenever it calls a W function. Which isn't so bad. ais523: I don't know whether it's always ASCII-compatible, my guess would be no though b_jonas: interesting, there is a CreateProcessAsUserW function too ais523: the thing about the A/W split is that this is mostly hidden from the user via header files shachaf: I linked to https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/ already. ais523: sometimes it's documented, sometimes it isn't b_jonas: ais523: you're right, the doc is weird ais523: there are tools to make it easy to write programs as a polyglot between the A and W APIs; this doesn't seem useful except for examples in manuals and for writing libraries, though b_jonas: ais523: yeah, I know, and the libc functions have such a split too for some functions, also partly hidden by macros and typedefs b_jonas: but I don't understand why the documentation doesn't link to the W version of this function from the path that I followed ais523: I believe Microsoft's API/ABI policy is to intentionally blur the boundaries between userspace and kernelspace, from the user's point of view b_jonas: there is another path, but it's probably not the main path: ais523: (incidentally, there actually is a kernel ABI that user32.dll and kernel32.dll use to actually do things, but that's considered to entirely be internals; presumably a reverse engineer could use it directly but that would risk their program breaking on newer versions of Windows) b_jonas: ais523: yes, that makes sense, because this way they can take an old system call and turn it to a libc wrapper in future versions of windows, so they don't have to have as many obsolete system call entries _in the kernel_ as linux has shachaf: Yes, I think this is reasonable for that reason. shachaf: Linux also does a small amount of this with the vdso. b_jonas: and the actual syscall abi was supposed to have been internals on linux too, with a few specific exceptions b_jonas: you're supposed to call the libc functions to call system calls b_jonas: on x86_64 that is, not on x86_32 b_jonas: it's just that that won't work, people want to call the system calls directly, so they'll do, and some old documentation won't stop them ais523: b_jonas: I agree that it's a defensible policy, although it does have a major downside to the Linux way of doing things: it makes it impossible to statically/dynamically analyse what a program can/is ask/asking the kernel to do, because you don't know where all the kernel entry points are shachaf: No, the kernel explicitly keeps the system call ABI stable. b_jonas: shachaf: which kernel? shachaf: Linux. b_jonas: exactly ais523: I believe Linux's policy for system calls is "use the libc wrapper unless you're doing something weird, in which case use the syscall directly" ais523: also, "the libc wrapper is meant to approximately obey POSIX, the syscalls aren't and may act differently" shachaf: For the most part the Linux system calls are more reasonable than the libc wrappers. ais523: although in practice the syscalls normally have more useful semantics than POSIX (I guess being less useful wouldn't work) b_jonas: shachaf: except for _exit. fucking _exit. b_jonas: it used to exit the process, but then they changed it. b_jonas: so now there's a group_exit system call to exit the process, and libc's _exit and _Exit function calls that oerjan: `` asmbf <<<"mov r1,0/div r1,0" <-- i've fixed that so you can just do `asmbf yourcodehere b_jonas: and if you try to call the actual _exit syscall, you're screwed b_jonas: oerjan: I thought we'd use bin/! to do that part of the wrapping b_jonas: ais523: anyway, "https://docs.microsoft.com/en-us/windows/win32/index" as above, then link "Win32 API reference by header", goes to "https://docs.microsoft.com/en-us/windows/win32/api/", then in sidebar, link "System Services", goes to "https://docs.microsoft.com/en-us/windows/win32/api/_base/", then link "processthreadsapi.h", goes to b_jonas: "https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/index", then link "CreateProcessAsUserW", goes to "https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessasuserw" b_jonas: but I don't know why the other path doesn't lead to this function too ais523: b_jonas: yes, that was mentioned earlier ais523: although it seems weird to organize an ABI by C header file? b_jonas: ais523: yes b_jonas: it should be linked from both places b_jonas: I don't know why it isn't b_jonas: maybe because it's an obsolete function, maybe it's just another doc bug b_jonas: it's not the first apparently accidental omission from MS docs that I've seen b_jonas: `? lfloor oerjan: b_jonas: we're not consistent, also asmbf isn't an interpreter, it's a converter. HackEso: lfloor? ¯\(°​_o)/¯ b_jonas: oerjan: hmm yes, that's a good point b_jonas: `? lrint HackEso: The lrint and lrintf functions (of C99 and C++11) are actually supported by the MS compiler (starting from the 2013), only strangely undocumented. b_jonas: yes, that one b_jonas: although I think they fixed that a few compiler versions later ais523: b_jonas: anyway, I suspect that there are more obsolete kernel APIs in Windows than there are in Linux, even though Windows should theoretically be able to remove them without breaking backwards compatibility: ais523: s/APIs/ABIs/ ais523: a) Linux only has a few syscalls total, most of which aren't obsolete b_jonas: ais523: linux can also remove some of them without breaking backwards compatibility ais523: *few hundred shachaf: Hmm, quite a few Linux system calls are obsolete. ais523: b) Microsoft's main value to their customers is backwards compatibility, and Windows devs are infamous for doing really weird things that require kernel-side workarounds to avoid breakage b_jonas: in particular, they are planning to eventually remove x86_32 userspace compatibility from x86_64, which would save a lot of syscall stuff that actually requires glue code in the kernel to handle shachaf: ais523: Linux also works very hard on backward compatibility. shachaf: Linux the kernel, that is. Userspace breaks all the time for no good reason. ais523: shachaf: I agree, but I don't think that's the main selling point of Linux ais523: (precisely because userspace breaks all the time) shachaf: It's one of the main selling points of any platform. shachaf: Linux-the-userspace is just not a good platform. shachaf: Fortunately you can statically link executables, unless you're doing graphics or something. ais523: shachaf: Mac OS X is planning to require executables to be notarised to run, this has the side effect of breaking backwards compatibility for all old un-notarised executables ais523: (notarising consists of sending your executable to Apple, who do static analysis on it to make sure it isn't malicious or does other things they don't want programs to do, and they then produce a signature saying it's been notarised; I think that's part of the program, it conceptually is at least) ais523: that's pretty much the opposite of having backwards compatibility as a selling point ais523: in general I don't think backwards compatibility is a major selling point for Mac OS X, or even a design goal shachaf: Probably not nowadays? shachaf: When they switched from Mac OS 9, they did a lot of work on backward compatibility. shachaf: This notarization thing is obviously very hostile to developers and users. ais523: I've been trying to discover when notarisation first became possible (as opposed to required) ais523: but I'm not very good at searcihng ais523: my leading theory is that it was 2019, though ais523: anyway, I don't think it's obvious that backwards compatibility, especially of executables, will automatically be a concern to an operating system or comparable platform ais523: there are clear reasons why it would help, but some companies may decide that the tradeoff isn't worth it ais523: I guess a lot depends on what your model for deploying software is shachaf: I wonder how many system calls Linux would have if you got rid of all the obsolete ones. ais523: my asm/unistd_64.h lists 332 total, the vast majority of them seem to be neither removed nor superseded, so I'm guessing about 300? shachaf: Mine has 436. shachaf: I suspect quite a few are superseded. ais523: I think there might be debates about what counts as obsolete ais523: sorting them alphabetically, I came across dup/dup2/dup3 b_jonas: yeah, eg. is read obsolete because we have preadv? ais523: which of those would you consider obsolete? b_jonas: ais523: dup, dup2 are definitely obsolete, just use the fcntl functions shachaf: dup3 clearly supersedes dup2. shachaf: dup isn't superseded as far as I know. b_jonas: dup3 too has an fcntl equivalent ais523: dup is entirely duplicated by fcntl shachaf: Of course the Linux ABI is much bigger than system calls. It include /proc and /sys, and ioctls, and so on. ais523: and dup3 can be written in terms of dup2 + fcntl b_jonas: hmm wait ais523: /proc and /sys and friends can only be accessed via system calls ais523: they're more like special cases of system calls, than ABIs in their own right b_jonas: fcntl doesn't do the dup2/dup3 explicit destination file descriptor number thing? ais523: b_jonas: no ais523: although you can do a dup+cloexec mix using a single fcntl instruction ais523: which doesn't have a dedicated system call of its own otherwise (dup3 can't do it) ais523: this ABI is actually something of a mess, but I guess backwards compatibility (and to some extent usabliity from asm without wrappers) is important shachaf: If foo() is replaced with foo2() which has a flags argument, clearly foo is obsolete. shachaf: Similarly foo with fooat. ais523: what if the flags are rarely used, and technically unnecessary? shachaf: It should've had the flags argument in the first place. ais523: dup3 is probably not entirely redundant to dup2 + fcntl (there are likely some race conditions relating to exec in one thread against dup in another), but it's only weird situations where you'd need it ais523: and in practice it's more likely to be used as an optimisation to reduce system call overhead shachaf: You mean CLOEXEC? shachaf: All the system calls that make fds are getting flags arguments to support CLOEXEC. ais523: dup3 only supports one flag ;-) shachaf: That seems like a good reason to call the nonflag version obsolete. ais523: I would expect dup2(x,y) to be preferred over dup3(x,y,z) if you didn't want to set cloexec ais523: fwiw, this is probably a good argument for all system calls to have a flags argument, even if it's initially just always-0? ais523: hmm, is the Linux system call ABI guaranteed to preserve registers, other than eax? I vaguely remember that it is ais523: in which case dup2 has less register pressure, in addition to not needing to zero an additional register shachaf: It clobbers rcx and r11. ais523: oh right, everything clobbers r11 ais523: in practice, r11 very rarely /actually/ changes as the result of a call, but it's been considered useful to have a register that dynamic linkers and other similar things can use as a temporary if they need to inject glue code for some sort of call or another ais523: like, at any change of control, you have a register that's safe to clobber no matter what ais523: and r11 is the generally agreed-on choice for that ais523: (it helps if everyone uses the same register, for obvious reasons!) shachaf: I guess this is a SysV thing. ais523: it probably started from there, at least shachaf: I think calling files in /proc a special case of the ABI of open()/read() is a big stretch. ais523: $ readlink /proc/self/exe ais523: /bin/readlink ais523: if that isn't a special case, I don't know what is ais523: err, wrong one ais523: I meant /proc/self/fd/0 and friends shachaf: Oh man, I forgot Linux had name_to_handle_at and open_by_handle_at. ais523: (the point being that if a process has a deleted file open, readlink on that file returns the name it had before that name was deleted, but you can nonetheless read the file directly by fd) shachaf: I mean, /proc is obviously part of the ABI, but in a really bad way, and I don't think putting the blame on read is reasonable. ais523: actually that probably works on /proc/self/exe too if a deleted executable is running ais523: my point is that this is a special case relating to the combination of readlink and proc, you won't find anything like it elsewhere ais523: and this is because proc is basically just a set of special case for system calls shachaf: I'm confused by the name_to_handle_at API. shachaf: Oh, never mind, I didn't read far enough. shachaf: whoa, Linux has process_vm_{read,write}v shachaf: It's also finally getting pidfd, apparently. ais523: process_vm_{read,write}v look like a huge efficiency gain for debuggers, and probably have other uses as well ais523: reading a target process' memory in tiny chunks via ptrace would have huge system call overhead shachaf: Was it previously possible to read /proc/pid/mem? ais523: hmm, I didn't think of that fizzie: Ooh, pidfd. fizzie: There are so many foofd's in Linux; signalfd, eventfd, timerfd. ais523: what's the intended use case of a pidfd? ais523: at a guess, some sort of protection against PID reuse? shachaf: Avoiding race conditions, I imagine. fizzie: Yes, sending a signal to a known process without worrying about it dying and being replaced by some other process is the one I know of. fizzie: Also waiting for a process to exit without being its parent, maybe? ais523: (or its ptracer) ais523: actually, you can also wait for a process to exit without being its parent /or/ its ptracer by ptracing its parent, but that's probably a bit silly ais523: hmm, the man page for ptrace has been updated since I last read it ais523: there's a discussion of permissions, including the mention that ptrace permission checks are based on the ptracer's real UID/GID, not its effective UID/GID (which seems like a minor security risk in the case where the ptracer is trying to suspend its own permissions) shachaf: Here are some obsolete system calls: accept chown creat create_module dup2 epoll_create epoll_ctl_old epoll_wait_old eventfd fchown fork fstat getdents lchown link lstat mkdir mknod open pipe preadv pwritev readlink signalfd stat symlink vfork fizzie: This article says there's also a proposal for a clone flag that can make a process that can only be waited on through its pidfd, the intention being that a library can create a helper process without confusing its host application's wait calls. fizzie: For a Go application I wrote recently (for personal use), I did a really ugly-looking snippet to use ambient capabilities, before learning that actually the standard Go library's syscall.SysProcAttr struct has an AmbientCaps field for using ambient capabilities. shachaf: The man page for wait4 says that waitpid and waitid are preferred. shachaf: But neither one of them gives you rusage, like wait4 does! shachaf: Except that's not true. shachaf: The system call gives you rusage, but the glibc wrapper just ignores it. shachaf: inotify_init is another one. ais523: I think it would be helpful if there were some sort of model of OS-level capabilities, plus any similar constructs at below the OS level, in terms that users could easily understand shachaf: When will Linux support mmap into a ptracee? ais523: in particular, there seems to be some sort of hierarachy of cans that override can'ts that override cans that override can'ts… shachaf: Windows has supported this forever. ais523: like, file-permitted is the strongest sort of capability, it says that the file can do this, overriding everything else shachaf: Without mmap you can't even guarantee finding a syscall instruction to do anything else. ais523: actually, no, there are two levels above that ais523: being run as root or suid-root and not capability-aware lets you do anything and sort-of bypasses the whole capability thing ais523: or, ugh ais523: capability bounding set is really confusing in this model ais523: removing a capability from the bounding set absolutely prevents that capability from ever again being regained by file-inheritable; however, it does not prevent it being regained from file-permitted fizzie: Yeah, it's not super-obvious. ais523: AFAICT, capabilities is currently a mix between several different permissions models, with system calls to choose which ones you want, and/or to prevent your descendant processes using their own system calls to change back to a different one ais523: except that the kernel doesn't force you to pick a specific model but sort of lets you blend your way between them if you like fizzie: There's that table in capabilities(7) on how the ambient, permitted, effective, inheritable and bounding sets are derived on execve. fizzie: But even that wasn't the full story. ais523: I think a sane model would look something like "processes: permitted is always a subset of inheritable; files: only inheritable permissions exist" ais523: actually, I think you need a new category entirely ais523: I think files should have two permission sets: one is equivalent to "inheritable" in the current model, the other causes the process executed from that file to gain a permission as permitted if it is both inheritable and effective in the calling process fizzie: Anyway, all I wanted was to have one capability-aware program execute a capability-dump helper process with CAP_DAC_READ_SEARCH, and I think I got that setup right: for the capability-aware executable file, set that bit in the file's effective and permitted sets; in the capability-aware program, first add the bit to the process's inheritable set, then raise it in the process's ambient set. ais523: files don't hav effective sets ais523: just the effective bit, which could be called the "capability-unaware" bit ais523: hmm, how does the no-new-privs bit interact with all this? fizzie: Right, that's what I meant. fizzie: Arguably, it's no surprise capabilities haven't really conquered the world yet. ais523: if a capability-aware program A is trying to execute a capability-unaware program B with a particular capability set, AFAICT all it needs to do is to put the capability set into its own ambient set, with no changes to B needed fizzie: Well, it also needs to put the capability into its own inheritable set, but you might consider that a part of putting it into its own ambient set. fizzie: (If it wasn't there already, that is.) fizzie: (It won't be there already if it's coming from a file.) ais523: yes, that's part of ambient ais523: actually, what confuses me is that inheritable seems to be at all-0s for unprivileged processes ais523: this gives it a /really/ niche use; its only purpose is for a privileged program to call unprivileged helper programs in such a way that they can call file-inheritable programs in a privileged way ais523: I can't think of circumstances where that would be useful, and thus suspect that inheritable capabilites aren't currently used much fizzie: That's what I think too. https://lwn.net/Articles/636533/ calls them "broken". (The proposal for ambient capabilities.) ais523: I think a bounding set on fP (in that article's notation) is useful, but oddly neither pI nor X actually bound it ais523: I don't think anything can bound that ais523: other than NNP, obviously, which has to outrank /everything/ to be usable securely oerjan: ais523: did you see my last edit to TPIMI? ais523: oerjan: yes, I'm not sure you're right though ais523: when I have the time and mental energy, I'll write an interpreter and figure it out that way imode: oerjan: tempted to take your advice and add Mode to the wiki. zzo38: How to run PHP5 on Raspberry Pi? imode: zzo38: is there a package in the raspbian repos? imode: sudo apt-get install apache2 php5 ? ais523: you shouldn't need apache to run PHP? ais523: only if you want to use it for CGI scripts ais523: I guess that's a common use, but my first thought was PHP as a standalone programming language rather than as part of a web server oerjan: ais523: well it seems obvious to me that the length 1 block representation needs to be the same length as the basic production sequence zzo38: I only want to run PHIRC, which is the IRC client I have. (My internet doesn't work, so I use this other computer instead, which has wireless internet.) imode: you shouldn't need apache, you can use anything else, however I'm under the assumption that- imode: nevermind. imode: you should just be able to install php5 then. zzo38: It says "package php5 has no installation candidate" imode: what distro are you running on the pi. ais523: zzo38: does it have to be PHP 5 specifically, or is a newer version OK? zzo38: I think many things will break with PHP 7, which is what it currently has zzo38: I suppose I can try to see if the program works, but it might not work ais523: the easiest way is probably to get a package for an old version of PHP from the Debian archives, see http://snapshot.debian.org/ for details imode: php5 should be a package in raspbian... ais523: although, it might not work with modern dependencies ais523: php5 is really old though ais523: it's probably dropped out of the archives by now imode: sure, but it's still a required package. ais523: it's possible that it has a minor version number in the archives oerjan: ais523: anyway, i cut and pasted into vim and rotated lines, and it seemed to fit that way. imode: zzo38: sudo apt-cache search php I guess. imode: you don't need the sudo iirc. ais523: nor the "-cache" imode: been a long time since I used debian. arch main. zzo38: I tried that; it says virtual imode: huh, raspbian doesn't have a web-searchable package mirror. imode: that's lame. ais523: if they're all virtual it means that the package doesn't exist in the repositories any more ais523: so you'll need to find an old version of the package, perhaps from an old version of the repositories ais523: I think the assumption is that nobody would use php5 any more ais523: python 1 isn't in the repositories either imode: https://www.raspberryconnect.com/raspbian-packages/54-raspbian-php imode: how old _is_ php5. imode: oof, sec support in debian ended on new year's. zzo38: Is there a program for Raspberry Pi to download Usenet messages to be read later on another computer? ais523: 7.0 appears to be the oldest version available from there imode: still in jesse, though.. ais523: 7.0 was released in 2015; 5.6 was the most current version before that (6 was abandoned) imode: why was 6 abandoned? ais523: 5.6 became unsupported at the end of 2018 imode: (feels like there's a joke there...) ais523: apparently they started writing PHP 6 in 2008, and abandoned it in 2014 because it still wasn't finished by then imode: perl6 and php6. ais523: the main intended feature that they failed to implement for 6 was Unicode support ais523: perl 6 was finished though, it's just that it's sufficiently different from perl 5 that many people prefer the original (including me) ais523: and perl 6 eventually got renamed to reduce confusion, I think oerjan: it's raku now fizzie: The original's still being actively developed, as well. zzo38: Yes, that can be a good idea, to call it something else, since it is something else. I think Inform7 should also be renamed because it is a different programming language from Inform zzo38: I am trying to compile SQLite and now there is a temperature icon in the corner of the screen zzo38: Well, it works even with PHP7, so I don't need PHP5. (I was told it wouldn't work with PHP5; they were wrong.) zzo38: Typing "nice gcc" and omitting "-O2" prevented it from crashing. zzo38: I also invented a new esolang. zzo38: It is like a subset of PostScript, although having a different syntax, zzo38: Perhaps later I will post on esolang wiki, but right now I won't, so that I do not have to occupy the TV set right now pikhq: I take it zzo38 is trying to use a Pi as a daily driver? imode: more power to him, tbh. always wanted to try a pi as a driver, if only to find a laptop case to put it in. imode: with the raspi zero w or whatever, it's attractive. surprised a phone hasn't been made from it yet. imode: the gpi case is a step in the right direction, though: http://retroflag.com/GPi-CASE.html pikhq: It is a bit limited in some ways, but I'm pretty sure none of those limitations are a surprise to anyone pikhq: Especially with the cost imode: tbh using it as a thin client to access your actual workstation would be a great idea. kmc: that's cute kmc: imode: what would be the point of making a phone out of a DIY board based on a years-old phone SoC? kmc: it's not even a particularly 'open' SoC kmc: it's just another broadcom whatever imode: kmc: it's cheap, I can buy it in bulk, and there's less I have to do to fix it. this is of course assuming there is a supply chain ready to hand you a "phone case" for a pi zero w. imode: if there's an alternative SBC out there that has the same kind of adoption I'm down, I just haven't encountered it. kmc: it's going to be less powerful than a 5 year old android phone and chunkier too imode: power and chunkiness don't really concern me that much. I use a T430 thinkpad as my daily driver. imode: would like a phone that's built like a toughbook. arseniiv: if I set UTF-8 encoding in a windows console, my C# program treats some inputs as if it was end of stream :o I blamed it on ConEmu first, but then I sorted it out and even fixed this behavior setting the encoding to “standard Windows unicode” UTF16-LE. Oooof, it was a nightmare. And it’s nonsense arseniiv: and if I don’t set it, it would be some ununicode encoding which can’t output my lovely ‘ and ’ quotes and which does mangle my lovely unicode filenames so the program thinks I gave it unexistent ones. Nightmare, and all for a program to replace a file retaining old file’s date attributes arseniiv: though thank gods it worked in the end arseniiv: Wolfram announced a prize on results regarding rule 30 :D the problems seem sensible? Here they are: arseniiv: Problem 1: Does the center column always remain non-periodic? arseniiv: Problem 2: Does each color of cell occur on average equally often in the center column? arseniiv: Problem 3: Does computing the n-th cell of the center column require at least O(n) computational effort? arseniiv: they all ask about the evolution of …000010000… where 1 is at the mentioned center column arseniiv: what do you think this will lead to? arseniiv: and how hard do you estimate these three? b_jonas: arseniiv: they're probably easier than Wolfram has money. did he pose a high enough prize? arseniiv: $30k (USD, I presume?), but I don’t see yet if it’s for each of them or for all of them combined arseniiv: b_jonas: ^ arseniiv: the post is too long arseniiv: hm I don’t see it even on its official website arseniiv: it just says “$30,000 in prizes for 3 problems” and no more? I think that means it would be divided between them, evenly or not kritixilithos: arseniiv: (re rule 30) it mentions that it is 10k per problem, so their total is 30k tswett[m]: Neural net quote of the day: tswett[m]: "The message wasn't exactly unexpected to Stanton because he reads my blog, Spicy Lady: Trapped in Wifeworld." myname: i like it fizzie: Sounds like an esolang title, but probably just because of Real Fast Nora's Hair Salon. fizzie: I realized pretty late that the original inspiration was probably "Real Fast (Nora's Hair Salon 3: Shear Disaster) Download", not "((Real Fast Nora)'s Hair Salon 3: Shear Disaster) Download". myname: yeah, but this disambiguity is missing in "Spicy Lady: Trapped in Wifeworld" myname: so i would consider it a worse name FireFly: fizzie: huh, I.. didn't realise til now FireFly: I prefer the former interpretation still fizzie: I'm glad I wasn't the only one. fizzie: Yes, it's always going to be Real Fast Nora to me. FireFly: the latter* kingoffrance: i guess its the feminist version of leisure suit larry kingoffrance: the non-laugter is because you know that is totally possible myname: did anybody ever watch nora's hair salon 3? myname: i am always intrigued imode: just did a quick search on it. I don't think _anybody_ watched these movies. myname: if there is ever a "bigger" esolang meeting, I demand watching that fizzie: Well, 44 IMDb users have given it a rating. fizzie: No reviews, though. myname: also, I initially read it as (Real Fast Nora)'s Hair Salon 3: (Shear Disaster Download) myname: which i find funnier than your second reading myname: and more obvious tbh wib_jonas: fizzie: the esolangs.org logs don't load again, with 504 Gateway timeout. just in case you want to debug this. fizzie: I wonder what's up with that. fizzie: The listening socket has 40 connections pending, if I'm parsing netstat -nlp right, and it got incremented by 1 when I did a reload. fizzie: So I guess it most likely means the process is stuck blocking on something, and not running the main event loop / accepting connections. wib_jonas: ooh! attach a debugger to it! fizzie: I will, I just think it might not be a debug-enabled build. fizzie: I guess it'll show if it's currently in the middle of a system call, at least. wib_jonas: also, try blowing into the network cable to clean the packets stuck in it fizzie: I think there was some way of asking the kernel what the process is doing as well? fizzie: (It's state: sleeping.) wib_jonas: yes, ps can tell taht wib_jonas: reads it from /proc wib_jonas: https://www.xkcd.com/1395/ fizzie: Well, it's in poll. fizzie: Not super helpful. fizzie: Let's poke it with a debugger. fizzie: Well, it's got symbols, which is good. wib_jonas: maybe it already has too many connections that it's trying to handle, which is why it doesn't accept new ones fizzie: Stack trace is main > event::Loop::Poll() > poll. But maybe some of the variables in the upper frame can help. wib_jonas: what server is this? does it serve only the logs? fizzie: Oh, just function names. wib_jonas: is it a custom server that you wrote? fizzie: "No symbol table info available." fizzie: Yes, it's a custom server, and it serves only the logs/ endpoint. wib_jonas: oh, that's even better. now you have to reproduce the exact build to get debug info separately fizzie: I think I'll just restart it for now, and later upload a proper debuggable binary and wait for it to get wedged again. wib_jonas: that sounds like a less esoteric but better plan fizzie: Well, it's back up. wib_jonas: you could also add some logging statements into it fizzie: ...one thing I could've done, but didn't, was to check what file descriptors it had open. fizzie: Too late now, though. wib_jonas: still doesn't load. I think it has some problem with the latest html page https://esolangs.org/logs/2019-11-14.html fizzie: Ooh, well, that's good. fizzie: Because it means the breakage will be reproducilbe. fizzie: Cilbe. fizzie: Cible. wib_jonas: hopefully fizzie: Well, s/will/may/ wib_jonas: but yes fizzie: Hm, well, it rendered that link for me now (that I restarted it again). fizzie: Maybe I should look at the nginx request log too. wib_jonas: yes, it does render it now fizzie: Something called "The Knowledge AI" (by User-Agent) appears to be crawling the logs at the moment. fizzie: I hope it'll learn many useful things from them. wib_jonas: fizzie: do the other parts of its request tell anything useful? wib_jonas: when I crawl a site, I put my email address into part of the user-agent wib_jonas: well, usually. not always. fizzie: Not really. The IP was from a Hurricane Electric block, no contact details or links in User-Agent. fizzie: As for the /logs endpoint, it's been up and down sporadically, but not with an obvious pattern: https://zem.fi/tmp/down.png kspalaiologos: `` labels HackEso: ​/hackenv/bin/`: line 5: labels: command not found kspalaiologos: `` labels.pl HackEso: ​/hackenv/bin/`: line 5: labels.pl: command not found kspalaiologos: o'rly? HackEso: banana.txt \ bin \ canary \ emoticons \ esobible \ etc \ evil \ f \ factor \ good \ hw \ ibin \ interps \ karma \ le \ lib \ misle \ paste \ ply-3.8 \ quines \ quinor \ quotes \ share \ src \ stuff.b \ tmflry \ tmp \ wisdom kspalaiologos: `` ls tmp HackEso: a.c \ a.out \ as-encoding \ asmbf-1.1.1 \ banana.txt \ compiled_brachylog.pl \ hexdump.hex \ input.brachylog \ jeval.whatis \ just \ out \ OUT \ out.a \ out.a.hd \ out.a.xxd \ paste \ single-word-character-names \ spline \ spout \ spout.raw \ test.b \ test.sh \ tmp.txt \ v1.1.1.tar.gz kspalaiologos: `` ls tmp/asmbf-1.1.1 HackEso: AUTHORS \ bconv.c \ bfasm.asm \ bfasm.b \ bfasm.c \ bfasm.rs \ bfi.c \ bfintd.c \ bfmake \ bfpp \ bin \ doc \ examples \ INSTALL \ labels.pl \ LICENSE \ Makefile \ NEWS \ README \ strip.pl \ test \ test.pl \ TODO \ VERSIONING kspalaiologos: `` cp /hackenv/bin/ tmp/asmbf-1.1.1/labels.pl HackEso: cp: -r not specified; omitting directory '/hackenv/bin/' kspalaiologos: `` cp tmp/asmbf-1.1.1/labels.pl /hackenv/bin HackEso: No output. kspalaiologos: `` labels.pl HackEso: ​/hackenv/bin/`: line 5: /hackenv/bin/labels.pl: Permission denied kspalaiologos: `` chmod a+x /hackenv/bin/labels.pl HackEso: No output. kspalaiologos: `` labels.pl HackEso: ​? ¯\(°​_o)/¯ kspalaiologos: `? wisdom HackEso: No output. kspalaiologos: wait a second kspalaiologos: how it goes to add a wisdom entry kspalaiologos: `` ls wisdom HackEso: As the wisdom directory contains many files named after nicks, listing it in public annoys people. Try listing it in private instead. kspalaiologos: nvm did it manually fizzie: Lo, there are many planets in the archipelago of worlds, as there are of ways to add wisdoms. fizzie: Also I really should've archived that webcomic while it still existed, I think it's gone now. *sad* fizzie: The standard tools are learn and le//rn, I believe. fizzie: `? learn HackEso: ​`learn creates a wisdom entry and tries to guess which word is the key. Syntax (case insensitive): `learn [a|an|the] [s][punctuation] [...] fizzie: `? le//rn HackEso: le/rn makes creating wisdom entries manually a thing of the past. Usage: `le/[/]rn // fizzie: Hm, if we were building HackEso from scratch, I would probably make the current directory a non-version-controlled one. It's far too easy to end up with permanent history of ephemeral stuff. fizzie: `` rm banana.txt stuff.b HackEso: No output. fizzie: (I suspect switching the default working directory from /hackenv to /hackenv/tmp would break too many things.) kspalaiologos: there should be a HackEso FAQ kspalaiologos: or manual kspalaiologos: with the basic stuff enlisted kspalaiologos: oh god damn it man kspalaiologos: functional brainfuck fizzie: Yes, there should probably be a manual. b_jonas: kspalaiologos: re HackEso manual, try the whatis database, which lists HackEso commands together with a short summary about what they do kspalaiologos: ``whatis HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: `whatis: not found kspalaiologos: `? whatis HackEso: whatis? ¯\(°​_o)/¯ kspalaiologos: ``` whatis HackEso: whatis what? b_jonas: `whatis w HackEso: w(1) - Show who is logged on and what they are doing. \ w(1hackeso) - print random wisdom matching a string b_jonas: `whatis ! HackEso: ​!: nothing appropriate. b_jonas: `whatis doag HackEso: doag(1hackeso) - query hackenv version control log, with dates b_jonas: why isn't there a ! entry? b_jonas: `whatis recipe HackEso: recipe(1hackeso) - print snippet from cookbook b_jonas: `recipe HackEso: ​ 2 tb Freshly ground black pepper \ -(10 oz) orange juice \ 1 ts Cornstarch \ 1/2 ts Cayenne pepper \ 1/2 ts Pepper \ 3 tb Granulated sugar \ 2 c Canned peaches, drained \ - minced \ 2 ts Baking soda \ 8 oz Green onions \ \ Combine flour and butter or cooking spray. Topped: Cook beef and peppers. \ Cool completely. \ \ Preheat oven to 375F. To cool completely onto prepared cheesecloth. Cover and simmer for 30 minutes, until b_jonas: `whatis sport HackEso: sport(1hackeso) - wrap text to irc lines b_jonas: kspalaiologos: the wisdome has more detailed help about some commands b_jonas: `? hoag HackEso: ​`[hd]o[aw][gt] [] is a set of commands for querying HackEgo hg logs. `hoag is the basic version. d adds revision numbers and dates, w looks only in wisdom, and t lists oldest first. kspalaiologos: its fine b_jonas: ``` perl -ne '/^([^(]+)\([18]hackeso\) - (?!no description)/ and print "$1 "' share/whatis | sport HackEso: 1/2:fetch run revert help " ' 1 2 4 5 5w ? ReLcOmE WELCOME WeLcOmE ` `` aglist allquotes bardsworthlist benvenuto bienvenido bienvenue bobadventureslist calesyta2016list card-by-name coins ctof culprits cwlprits datei dateu doag doat don'taskdon'ttelllist dontaskdonttelllist dowg dowt edit ehlist elcome emoclew forget fromroman grwp hello hi hoag hoat howg howt hurl hwrl ioccclist keenlist HackEso: 1/2:fetch run revert help " ' 1 2 4 5 5w ? ReLcOmE WELCOME WeLcOmE ` `` aglist allquotes bardsworthlist benvenuto bienvenido bienvenue bobadventureslist calesyta2016list card-by-name coins ctof culprits cwlprits datei dateu doag doat don'taskdon'ttelllist dontaskdonttelllist dowg dowt edit ehlist elcome emoclew forget fromroman grwp hello hi hoag hoat howg howt hurl hwrl ioccclist keenlist b_jonas: ^ those are some of the more important commands b_jonas: I have to add an entry for \! though, I don't know why there isn't one b_jonas: fizzie: switching the working directory to tmp => yes, in particular bin/? looks for the wisdom database at a relative path in wisdom b_jonas: ``` ? fizzie HackEso: try: `f command filename b_jonas: ``` \? fizzie HackEso: fizzie is not fnord with a monad but the king of #esoteric, see https://zem.fi/static/img/square_fizzie_320px_white.jpg b_jonas: ``` cd tmp; \? fizzie HackEso: ​/hackenv/bin/?: line 5: cd: wisdom: No such file or directory \ fizzie? ¯\(°​_o)/¯ b_jonas: that is probably a bug, it should look relative to $HOME, which the shell helps you to do with the tilde shortcut b_jonas: I wonder if learn does that too fizzie: Well, actually. fizzie: `` echo $HOME fizzie: `` echo $HACKENV HackEso: ​/hackenv fizzie: Everything *could* be relative to $HACKENV, but... b_jonas: right, I forgot that b_jonas: fizzie: so would it be ok if I changed bin/\? and some other commands where it makes sense to not use relative path? b_jonas: oh right, I should change the commands that I created first b_jonas: ``` cat bin/recipe HackEso: ​#!/bin/sh \ exec perl -e 'local$/=\999;seek STDIN,rand((-s STDIN)-299),0 or die;print=~y/ \t/ /sr;' < share/recipe/recipes.txt b_jonas: like that one b_jonas: the good thing is, we probably don't have to change le//rn b_jonas: I probably don't dare to change bin/list , even though I know it looks at the logs of a different file, not of the executable itself b_jonas: but bin/\? and bin/learn can change b_jonas: anyway, changing the commands that I created first b_jonas: ``` set -e; cd tmp; recipe HackEso: he bay the potatoes, and bran in bowl. Cook, then \ stiring well. Add beans in a weight keeps to set aside. Cover fryer \ and serve on beef and serve with an electric tarting delicate such as possible \ and pecans agone all the salads are soft. varinated by the cold \ and refrigerate until the boiling and boils a patty are lightly browned. \ \ TO: TOPPING: 26 minutes or until the cooking with oil. Using a 275\F8F oven about 1 \ hour.) b_jonas: fixed that one b_jonas: ``` set -e; cd tmp; random-card HackEso: No such file or directory at -e line 1. b_jonas: ``` set -e; cd tmp; random-card HackEso: Unknown regexp modifier "/h" at -e line 1, within string \ Unknown regexp modifier "/r" at -e line 1, within string \ Unknown regexp modifier "/e" at -e line 1, within string \ Missing right curly or square bracket at -e line 1, within string \ syntax error at -e line 1, at EOF \ Execution of -e aborted due to compilation errors. b_jonas: oh right fizzie: I have no objections about robustifying any of the commands. fizzie: Also, I would hope that nobody's relying on HackEso for mission-critical services. It has no SLO or SLA. b_jonas: ``` set -e; cd tmp; random-card HackEso: Huntmaster of the Fells \ 2RG \ Creature -- Human Werewolf \ 2/2 \ Whenever this creature enters the battlefield or transforms into Huntmaster of the Fells, create a 2/2 green Wolf creature token and you gain 2 life. \ At the beginning of each upkeep, if no spells were cast last turn, transform Huntmaster of the Fells. \ [Front face. Transforms into Ravager of the Fells.] \ DKA-M, V17-M b_jonas: `? warranty HackEso: HACKE[GS]O COMES WITHOUT WARRANTY, EXPRESS OR IMPLIED, AND IS UNFIT FOR ANY PURPOSE, INCLUDING THE PURPOSE OF BEING UNFIT FOR ANYTHING. Its warranty has expired. b_jonas: I knew that bin/\? uses relative path because that actually caused me problems when I wrote some command to search for certain wisdoms b_jonas: ``` set -e; cd tmp; scheme # I have to fix this too HackEso: Can't open share/mtg/allsets.txt: No such file or directory. b_jonas: ``` set -e; cd tmp; scheme HackEso: All in Good Time b_jonas: hi kspalaiologos b_jonas: `random-card bola HackEso: In Bolas's Clutches \ 4UU \ Legendary Enchantment -- Aura \ Enchant permanent \ You control enchanted permanent. \ Enchanted permanent is legendary. \ DOM-U b_jonas: `random-card bola HackEso: Slave of Bolas \ 3(u/r)B \ Sorcery \ Gain control of target creature. Untap that creature. It gains haste until end of turn. Sacrifice it at the beginning of the next end step. \ ARB-U, E01-U, DDH-U tswett: So riot.im is being weird. tswett: So, I'm playing with Attempto Controlled English, which is (mostly) a syntax for first-order logic. tswett: There's an ACE theorem prover here: http://attempto.ifi.uzh.ch/race/ tswett: I've found that it's able to prove a certain rather interesting theorem. tswett: Axioms: David is a person. If there is a person A then exactly one person is a mother of the person A. tswett: Theorem (apparently): Every person is a mother of David. tswett: Corollary: David is a mother of David. tswett: I'm trying to figure out how it managed to conclude that... b_jonas: tswett: can it also prove that every person is David? tswett: b_jonas: Hmmm, yes, it can. b_jonas: tswett: can it still prove that if you only take the first axiom? tswett: b_jonas: No. b_jonas: tswett: how about if you take the first axiom, and the second axiom but replace "A" with "X" case sensitively b_jonas: (as in, maybe it confuses "a" with "A" which is why it misunderstands something) tswett: It still proves that every person is David. tswett: So now I have— b_jonas: Do you have the source code for the prover? tswett: Axioms: David is a person. If there is a person X then exactly one person is a mother of the person X. Theorem: Every person is David. b_jonas: Can it prove a contradiction from those axioms? tswett: It says the axioms are consistent. b_jonas: Can you formalize the theorem prover into that lanuage, and if so, can it prove the formal version of "the ACE theorem prover cannot prove this statement"? b_jonas: Sorry. b_jonas: That wasn't a serious question. b_jonas: Anyway, does this theorem prover output proofs? tswett: No, only minimal subsets of axioms required to prove the theorem. b_jonas: tswett: are you sure that that second axiom has a quantifier over X? shachaf: Am I David? tswett: b_jonas: It definitely interprets X as a bound variable. tswett: In both positions. tswett: The axioms don't prove "Everything is David." but they do prove "Everyone is David." tswett: They also prove "Every house is a person," and, of course, "Every house is David." oerjan: tswellot. sounds like sound axioms. tswett: Also, "Someone is everything." oerjan: pantheism built in tswett: (Meaning, "There exists someone A such that for all B, A = B.") tswett: Hmmmm. I think it's doing something weird with proper names. tswett: Axioms: David is a person. Brian is a cat. tswett: Theorem: David is a cat. tswett: Sole axiom: David is a person and a person is David. tswett: Theorem: Every house is a person. tswett: Yo. \o tswett: Sole axiom: David is a person and Brian is a person. Theorem: Every house is David. tswett: Hmmmm. Apparently that follows by "transitivity of comparative adjectives." tswett: That's what it says when I tell it to show its reasoning. oerjan: `? labels.pl HackEso: Preprocessor for asm2bf to support labels. Use % to refer to a label, use @ to declare one. oerjan: `slwd labels.pl//s,P,labels.pl is a p, HackEso: labels.pl//labels.pl is a preprocessor for asm2bf to support labels. Use % to refer to a label, use @ to declare one. oerjan: `? rules of wisdom HackEso: unless essential for the entry‘s humor, they should: be understandable without the lookup key, be single spaced and end in a newline with no space before that, and use proper capitalization and punctuation shachaf: `slwd rules of wisdom//s/:/ be:/ oerjan: if you do that you have to add proper grammar to the list hth shachaf: or consistency oerjan: `` echo $IRC_CHANNEL HackEso: No output. oerjan: `` echo $IRC_TARGET HackEso: ​#esoteric oerjan: `sled bin/ls//s,;, && "$IRC_TARGET" == #*;/ HackEso: ​/bin/sed: -e expression #1, char 29: unterminated `s' command oerjan: `sled bin/ls//s,;, && "$IRC_TARGET" == #*;, HackEso: bin/ls//#!/bin/bash \ if /bin/ls -id "$@" 2>/dev/null | grep -q ^"$(/bin/ls -id /hackenv/wisdom | cut -d\ -f 1)" ;; "$IRC_TARGET" == #*; then echo 'As the wisdom directory contains many files named after nicks, listing it in public annoys people. Try listing it in private instead.'; else exec -a ls /bin/ls "$@"; fi oerjan: `revert oerjan: `sled bin/ls//s,;,\&\& "$IRC_TARGET" == #*;, HackEso: bin/ls//#!/bin/bash \ if /bin/ls -id "$@" 2>/dev/null | grep -q ^"$(/bin/ls -id /hackenv/wisdom | cut -d\ -f 1)" && "$IRC_TARGET" == #*; then echo 'As the wisdom directory contains many files named after nicks, listing it in public annoys people. Try listing it in private instead.'; else exec -a ls /bin/ls "$@"; fi oerjan: `ls wisdom HackEso: ​/hackenv/bin/ls: line 3: syntax error: unexpected end of file oerjan: `revert oerjan: `sled bin/ls//s,;,\&\& "$IRC_TARGET" == #* ;, HackEso: bin/ls//#!/bin/bash \ if /bin/ls -id "$@" 2>/dev/null | grep -q ^"$(/bin/ls -id /hackenv/wisdom | cut -d\ -f 1)" && "$IRC_TARGET" == #* ; then echo 'As the wisdom directory contains many files named after nicks, listing it in public annoys people. Try listing it in private instead.'; else exec -a ls /bin/ls "$@"; fi oerjan: `ls wisdom HackEso: ​/hackenv/bin/ls: line 3: syntax error: unexpected end of file oerjan: ok i'm not doing something right. oh. oerjan: `revert oerjan: `sled bin/ls//s,;,\&\& "$IRC_TARGET" == \\#* ;, HackEso: bin/ls//#!/bin/bash \ if /bin/ls -id "$@" 2>/dev/null | grep -q ^"$(/bin/ls -id /hackenv/wisdom | cut -d\ -f 1)" && "$IRC_TARGET" == \#* ; then echo 'As the wisdom directory contains many files named after nicks, listing it in public annoys people. Try listing it in private instead.'; else exec -a ls /bin/ls "$@"; fi oerjan: `ls wisdom HackEso: ​/hackenv/bin/ls: line 2: #esoteric: command not found \ ` \ `! \ `? \ `? `? \ `# \ ^ \ \ _̰̆̓_Ì̦̻̖̅ͭͭͬÍ�ÌŸÌ–Í¡_ͧ͒Ì�͉̭_͂͋͒ͧ͋Ì̯͙̬̬̦̯̋_̔̉̅ͨÌ�Ì´Íž \ ¯\_(ツ)_ \ ! \ ? \ ?? \ ¿ \ @ \ * \ \ \ ê™® \ ☆ \ ☃ \ ⌨ \   \ ⊥ \ ☾_ \ ðŸ�š \ ð�•ˆ \ ðŸ�� \ á›�áš¿ \ ̂ͭ̎̚Ì�̸̸̼͚͇̮͕̳̞̤̜̯̪̪̱̣̠̺̹̔ͦ͒ͪ͌̾ͦͨ̚ͅÍ�Ì©Ì�͚͕͓͚̙͓̪̮̟̜̣͙̪͢͢͠҉̴̢_̿̊ͣ̉ͣͪ͒̓Ì�͊̚Ì�͙̣ͫ̓̚ÍÍŽ oerjan: `revert oerjan: `sled bin/ls//s,;,\&\& [[ "$IRC_TARGET" == \\#* ]];, HackEso: bin/ls//#!/bin/bash \ if /bin/ls -id "$@" 2>/dev/null | grep -q ^"$(/bin/ls -id /hackenv/wisdom | cut -d\ -f 1)" && [[ "$IRC_TARGET" == \#* ]]; then echo 'As the wisdom directory contains many files named after nicks, listing it in public annoys people. Try listing it in private instead.'; else exec -a ls /bin/ls "$@"; fi oerjan: `ls wisdom HackEso: As the wisdom directory contains many files named after nicks, listing it in public annoys people. Try listing it in private instead. oerjan: no visible nicks, of course. oerjan: although much unicode to annoy people. maybe the explanation needs changing. kspalaiologos: Hi, b_jonas kspalaiologos: My client automagically conmected to IRC and I didn't notice it kspalaiologos: `asmbf mov r1, 2\mov r2, 3 HackEso: ​+>+[# kspalaiologos: `asmbf mov r1,2/mov r2,3 HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>[-]++>[-]+++<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: Yeah perfect kspalaiologos: Thanks for the command kspalaiologos: What happened kspalaiologos: My bot has crashed? kspalaiologos: How did it rejoin I didn't implement it b_jonas: oerjan: technically on freenode, channel names can also start with @ or * b_jonas: but that probably doesn't come up with HackEso b_jonas: I think it would be better to check for a nick rather than for a channel b_jonas: but it doesn't matter in the case of ls FireFly: hm, I don't think they can start with those? FireFly: I'm getting CHANTYPES=# from /version at least b_jonas: FireFly: yes, but you can send a message to *#esoteric or @#esoteric , which is like sending to #esoteric but only users who are voiced or op on that channel get it, and the target shows up as *#esoteric or @#esoteric on the receiver side. of course HackEso isn't voiced or op on any channel, so he won't get those. b_jonas: (I don't know if *#esoteric also sends the message to nicks who are op but not voiced.) b_jonas: It's easier to test for nick characters [-0-9A-}] because those are the same on all networks b_jonas: no messing with channel types and prefixes b_jonas: this prefixed channel thing causes bugs in many clients by the way FireFly: oh that, it'd be +#foo in the voiced case fizzie: Will it actually look to the recipient as if it was sent to @#foo or +#foo though? fizzie: I would imagine that would confuse a lot of clients. FireFly: it does fizzie: Funky. FireFly: It's kind of just a rarely used feature AIUI FireFly: There were some changes last summer to have messages sent through to ops when channel mode +z is set, use @# instead of just # FireFly: which does make it possible to distinguish them at least on the client side wib_jonas: Hey look. OEIS doesn't keep its own documented rules. https://oeis.org/eishelp1.html says that listing at least four terms are required for every sequence, but https://oeis.org/A235383 only has two terms. wib_jonas: fungot, do you keep your own rules? fungot: wib_jonas: when i first had cleared cell handling, but because it points to a fizzie: The first rule of the tautology club is the first of tautology club's rules. kingoffrance: the zeroeth rule of address+offset club is indices start at 0 kspalaiologos: Whoever made the asmbf available using only one grave character kspalaiologos: Please make it pipe stuff thru labels.pl before int-e: `url bin/bfasm HackEso: https://hack.esolangs.org/repo/file/tip/bin/bfasm kspalaiologos: bfasm is a program kspalaiologos: asmbf is the wrapper and command int-e: `url bin/asmbf HackEso: https://hack.esolangs.org/repo/file/tip/bin/asmbf kspalaiologos: Could you edit it for me? I'm on mobile kspalaiologos: And it's quite laggy one kspalaiologos: Just add labels.pl in pipe chain before tr int-e: `sled bin/asmbf//s/bfasm/lables.pl | bfasm/ HackEso: bin/asmbf//print_args_or_input "$@" |tr / \\n | lables.pl | bfasm wib_jonas: lables? kspalaiologos: Mistake kspalaiologos: Labels kspalaiologos: And before tr int-e: yeah... on it int-e: `sled bin/asmbf//s/lables/labels/ HackEso: bin/asmbf//print_args_or_input "$@" |tr / \\n | labels.pl | bfasm kspalaiologos: Perfect kspalaiologos: Thanks kspalaiologos: `asmbf @hello/jmp %hello HackEso: ​+>+[>>>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>+<<<<<<<<<[-]>[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: Fancy infinite loop, seems like it works wib_jonas: by the way int-e: at least "lables" was a genuine typo... identifying asmbf and bfasm was a real brain fart wib_jonas: `hello m HackEso: Hello, World. wib_jonas: `hello HackEso: hello, world wib_jonas: `@ fungot hello m fungot: wib_jonas: what is t? i recognize the word :p that means i will have 128 general purpose registers HackEso: fungot: Hello, World. wib_jonas: `@ fungot hello fungot: wib_jonas: instead of hte redirectee each prime but they both seem fast enough that no one has HackEso: No output. kspalaiologos: int-e, lol wib_jonas: bin/@ is weird kspalaiologos: Is this a bot? kspalaiologos: I mean, fungot fungot: kspalaiologos: ( when was the last you saw? henderson's functional fnord, or more then likely, use both hands for it... int-e: fungot is a bot wib_jonas: `? fungot fungot: wib_jonas: oh yes for no caps lock, no arrow keys... instead of binary HackEso: fungot is our beloved channel mascot and voice of reason. wib_jonas: see also https://esolangs.org/wiki/Fungot int-e: `? zzo38 HackEso: zzo38 is not actually the next version of fungot, much as it may seem. kspalaiologos: Wait a second kspalaiologos: A bot in befunge? wib_jonas: on a t-shirt kspalaiologos: Is there source available? int-e: ^source fungot: https://github.com/fis/fungot/blob/master/fungot.b98 wib_jonas: kspalaiologos: yes, the source is sold on a t-shirt kspalaiologos: It's awesome int-e: oh, wow, my brain remembered something correctly *marks day on calendar* wib_jonas: `datei HackEso: 2019-11-15 14:04:09.093 +0000 UTC November 15 Friday 2019-W46-5 int-e: wib_jonas: thanks wib_jonas: where's the link to the webshop with the t-shirt? wib_jonas: `? shirt HackEso: shirt? ¯\(°​_o)/¯ wib_jonas: `? t-shirt HackEso: t-shirt? ¯\(°​_o)/¯ wib_jonas: `? tee HackEso: tee? ¯\(°​_o)/¯ int-e: I don't remember any t-shirts int-e: But of course that doesn't mean anything. wib_jonas: I think at least one exists, but possibly not sold from a webshop, but made as a one-time item wib_jonas: there's no tattoo version yet, but there are several other tattoos related to golf or esolang or IOCCC fizzie: Yeah, I printed one for myself through a print-your-own-design shop I had a coupon for. kspalaiologos: ``asmbf <<<"in_ r1/in_ r2/add r1, r2/out r1" > stuff && bfi stuff <<<"00" HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: `asmbf: not found fizzie: Turned out pretty nice, even if I say so myself. wib_jonas: fizzie: have you already merged the recent bugfix onto the shirt? kspalaiologos: `` asmbf <<<"in_ r1/in_ r2/add r1, r2/out r1" > stuff && bfi stuff <<<"00" HackEso: ​/hackenv/bin/`: line 5: bfi: command not found kspalaiologos: Really? I installed it kspalaiologos: Yesterday kspalaiologos: Where's it gone wib_jonas: fizzie: and do you wash it inside-out so that the print lasts longer? I never do that with t-shirts kspalaiologos: `` whereis egobfi HackEso: egobfi: kspalaiologos: `` whereis egobfi8 HackEso: egobfi8: fizzie: wib_jonas: I've not been doing that either. It seems to be pretty durable. Also, I only use it on special occasions. kspalaiologos: `` ls /asmbf-v1.1.1/ HackEso: ls: cannot access '/asmbf-v1.1.1/': No such file or directory kspalaiologos: `` ls asmbf-v1.1.1/ HackEso: ls: cannot access 'asmbf-v1.1.1/': No such file or directory int-e: `` ls tmp HackEso: a.c \ a.out \ as-encoding \ asmbf-1.1.1 \ banana.txt \ compiled_brachylog.pl \ hexdump.hex \ input.brachylog \ jeval.whatis \ just \ out \ OUT \ out.a \ out.a.hd \ out.a.xxd \ paste \ single-word-character-names \ spline \ spout \ spout.raw \ test.b \ test.sh \ tmp.txt \ v1.1.1.tar.gz fizzie: Also, please put temporary files (like "stuff") in either /tmp/ or tmp/ (aka /hackenv/tmp/). int-e: maybe `` should change its working directory to tmp? int-e: though that will cause all sorts of confusion ;) fizzie: The former is truly ephemeral (only for the execution of the current command), while the latter is persistent but unversioned. wib_jonas: int-e: that will cause all sorts of bugs wib_jonas: int-e: see the chat log int-e: wait, actual bugs? wib_jonas: int-e: bin/\? and bin/learn still use relative paths. I'll fix those, but I can't fix everything. too many programs assume that the pwd is /hackenv int-e: and users :) kspalaiologos: Can we make a loop device wib_jonas: we could perhaps change .hgignore to ignore files directly in /hackenv , or remove write permission from /hackenv so you can't create files there, but those would probably cause other problems kspalaiologos: So some people don't even have to use temp files int-e: (And obviously I wouldn't touch the default for a plain `. But then moving from ` to `` would cause friction...) wib_jonas: int-e: new best practice: if you're making executables for HackE?o that look up files under /hackenv , make it look them up relative to ${HACKENV-/hackenv}/ rather than relative to the working directory fizzie: Most of the time you can use pipes instead of temporary files. I don't see how loop devices would improve matters. int-e: `` echo $PATH HackEso: ​/hackenv/bin:/usr/bin:/bin fizzie: In particular, bash <(...) syntax can help. fizzie: `` echo <(echo foo); cat <(echo bar) HackEso: ​/dev/fd/63 \ bar int-e: Which shell pioneered that one? I thought bash got it from zsh... fizzie: Maybe? I'm not too familiar with other shells. wib_jonas: I know some people want to avoid temp files, but I think it's a bad habit that remains from old operating systems that couldn't cache files properly wib_jonas: I think it's a bad practice fizzie: I did used to use tcsh for some years, and university machines defaulted to zsh. wib_jonas: just create temp files wib_jonas: although since /tmp and /dev/shm int-e: wib_jonas: temp files have the shared namespace issue wrt to other processes and users wib_jonas: and /var/tmp aren't writable in HackEso, it might make sense to set some environment variables to point to the absolute path of a temp directory fizzie: /tmp is writable. fizzie: It's what you should be using for temporary files within a single command. wib_jonas: int-e: use mkdir then to create a temp directory that nobody else uses wib_jonas: int-e: I recommend mkdir specifically because it's always atomic, two processes can't create the same directory twice successfully, as opposed to open with O_EXCL which is supposed to be atomic like that but there are bugs involving nfs wib_jonas: fizzie: I see wib_jonas: so /tmp is writable but doesn't persist after a command? wib_jonas: that's useful fizzie: /tmp is a tmpfs inside the UML. wib_jonas: that could work then int-e: `ls /tmp HackEso: No output. int-e: `` ls -a /tmp HackEso: ​. \ .. wib_jonas: ``` set -e; hello > /tmp/Z-k3EuobYg4s; echo next:; cat /tmp/Z-k3EuobYg4s HackEso: next: \ hello, world wib_jonas: yeah, it's writable. sorry. wib_jonas: why is /dev/shm not writable by the way? wib_jonas: ``` set -e; hello > /dev/shm/Z-k3EuobYg4s; echo next:; cat /dev/shm/Z-k3EuobYg4s HackEso: bash: /dev/shm/Z-k3EuobYg4s: Read-only file system fizzie: It's just not mounted. fizzie: So it falls into the ro /. fizzie: `` echo $HOME $HACKENV # There are also these. HackEso: ​/tmp /hackenv fizzie: But I should probably also set... is it TMPDIR or TEMPDIR? I can never remember. kingoffrance: theres various "mktemp" commands to attempt to avoid "how to safely create a temp file/dir"; i think openbsd started it, then someone made a "portable" version; i think it really it just calls mktemp() instead of whatever c89 is kingoffrance: s/attempt to avoid/& historical problems with/ kingoffrance: but for all i know, some "mkdir" might have such features "built-in" kingoffrance: (or, that might be backwards, c89 has a not-really-secure mktemp() , and mktemp command calls some better one) kingoffrance: s/calls/& and/or has one bundled with it/ wib_jonas: fizzie: yes, I already edited some of my programs to use $HACKENV, and I want to edit the programs related to wisdom and quote and learning in the future wib_jonas: fizzie: there are a ton of different env-vars about temporary directories. TMP, TEMP, etc wib_jonas: every program uses them in a different way kingoffrance: openbsd/netbsd/freebsd i think also optionally (maybe stock now) do per-user "private /tmp" nowadays, dunno about linux; and thats like the classic dir you set "sticky" bit on wib_jonas: ``` set -e; cd tmp; \' "hey, hey" HackEso: nl: quotes: No such file or directory wib_jonas: `python3 -cn="bin/allquotes"; a=open(n,"rb").read(); a=a.replace(b'quotes',b'"${HACKENV-/hackenv}/quotes"'); open(n,"wb").write(a) HackEso: No output. wib_jonas: ``` set -e; cd tmp; \' "hey, hey" HackEso: 728) itidus21: hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, hey, h wib_jonas: ``` set -e; cd tmp; allquotes | tail -n1 HackEso: 1335) The domain is public, but what's the codomain? wib_jonas: ``` set -e; cd tmp; \" HackEso: 1003) LIST OF ACRONYMS: List Integrating Some Terminology Of Fine Authentic Credibility Relating to Our New Year Media System \ 1226) I need to get out of my habit of eating business cards... wib_jonas: ``` set -e; cd tmp; quote Taneb HackEso: 383) Turned out he got recursion, he just didn't get the return statement \ 388) Cut to February War were declared A galaxy in turmoil Anyway, Febuary '10 \ 389) I can't afford one of those! A grandchild, not a laser printer \ 395) There's that saying that the definition of insanity is doing the same thing over and over again and expecting different results. [...] Yo fizzie: For the record, the way filesystems work on HackEso is: it uses the umlbox --base-mounts flag (which mounts /usr, /bin, /sbin, /lib, /lib32, /lib64, /etc/alternatives and /dev as read-only 'hostfs' mounts from the host system), then adds three custom mounts (read-write /hackenv, read-only /hackenv/.hg on top of that, and the hackbot lib directory for the 'limits' script), and finally umlbox itself wib_jonas: ``` set -e; cd tmp; q st HackEso: 1) EgoBot just opened a chat session with me to say "bork bork bork" \ 3) that's where I got it rocket launch facility gift shop \ 8) Lil`Cube: you had cavity searches? not yet trying to thou, just so I can check it off on my list of things to expirence \ 9) So what you're saying is that I shouldn't lick my iPhone but instead I should rub it on my eye fizzie: unconditionally mounts a tmpfs on /tmp, proc on /proc and sysfs on /sys. fizzie: (This would all be in the hypothetical HackEso manual, presumably.) wib_jonas: fizzie: I can guess most of that, because I can list mounts fizzie: The lib thing explains the otherwise slightly odd /srv/hackeso-code/multibot_cmds/lib which also leaks a path out of the host. :/ fizzie: (Well, all of the hostfs mounts do that.) wib_jonas: does anyone happen to know what bin/\?h is supposed to do? wib_jonas: I know that bin/\?\? accesses the parallel universe wisdom database in tmflry wib_jonas: `?? cat HackEso: A cat is an animal with four legs. It's nice to pet, especially when it's a baby cat, called a kitten. Or it's the unix "cat" command. It takes a filename (or many) and prints the contents of that (those) file(s). wib_jonas: `? cat HackEso: Cats are cool, but should be illegal. fizzie: It's supposed to invoke \? with a special logic to add extra 'h's in words in a manner I can't quite remember the source of. wib_jonas: it doesn't seem to do that, but maybe it was supposed to wib_jonas: `wehlcohme fizzie: It's missing a \, so the '?' in it presumably expands to all one-character commands. HackEso: Wehlcohme to the ihntehrnahtiohnahl huhb fohr ehsohtehrihc prohgrahmmihng lahnguahge dehsihgn ahnd dehployhmehnt! Fohr mohre ihnfohrmahtiohn, chehck ouht ouhr wihki: . (Fohr the ohthehr kihnd ohf ehsohtehrihca, try #ehsohtehrihc ohn EhFneht ohr DAhLneht.) fizzie: It's a little bit less h-heavy than that. But yeah, maybe same roots. fizzie: It might be just barely possible ?h was added when ? was the only single-character command, though that seems unlikely. I don't know if it's ever worked. fizzie: Oh, there's also bin/?hh and that's actually been fixed. fizzie: `?hh welcome HackEso: Wehlcohme to the ihntehrnahtiohnahl huhb fohr ehsohtehrihc prohgrahmmihng lahnguahge dehsihgn ahnd dehployhmehnt! Fohr mohre ihnfohrmahtiohn, chehck ouht ouhr wihki: . (Fohr the ohthehr kihnd ohf ehsohtehrihca, try #ehsohtehrihc ohn EhFneht ohr DAhLneht.) int-e: Hmm https://esolangs.org/logs/2013-01-25.html#lzn ff. wib_jonas: fizzie: or when it was the alphabetically first single-character command in New Zealand locale order int-e: prototyped by fizzie, implemented by shachaf fizzie: `sled bin/?h//s|^|\\| HackEso: bin/?h//\? "$@" | perl -pe 's/([aeiouy])([bcdfghjklmnpqrstvxz])\b/$1h$2/ig' fizzie: `?h welcome HackEso: Welcome to the internationahl huhb fohr esoterihc programming language design and deployment! Fohr more informatiohn, check ouht ouhr wiki: . (Fohr the othehr kind ohf esoterica, try #esoterihc ohn EFneht ohr DALneht.) fizzie: Anyway. wib_jonas: `??h Tanebventions HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ??h: not found wib_jonas: `?h tanebventions HackEso: Tanebventions include necessity, Go, submarine jousting, Fueue, the universe, metahr, sand, dragons, persistence, the BBC, _46biht, progress, sanity, the huhg, Italiahn, the grace periohd, the limerick, ruihn, and thihs sentence. See also tanebventions: maths ohr tanebventions: foods. He nevehr invents anything involving sehx. fizzie: With the \b it's a little picky, you have to have a vowel-consonant pair at the end of the word. wib_jonas: ``` grep -lw quotes bin/* # I'll have to check these HackEso: bin/addquote \ bin/allquotes \ bin/delquote \ bin/pastequotes \ bin/qc \ bin/quotenums \ bin/tclkit \ bin/units \ bin/whoq wib_jonas: and then the ones that refer to wisdom wib_jonas: hmm, fixing addquote and delquote are trickier because to test them, I have to add a quote and delete one fizzie: "Just run the test suite." wib_jonas: is there a test quote for the test suite? fizzie: I don't think there is. fizzie: I have a local "DevHackEso" instance I use when doing changes to the actual code (not the "userland"), but it's a bit of a pain to set up locally. wib_jonas: I'll just add a quote and delete the same quote fizzie: Another HackEso oddity: /dev is actually the host system's real /dev. It works out pretty well in practice, because it's inside a container with a really sparse /dev. But now that they've brought back the ghost of devfs as devtmpfs, maybe that'd be an option. Before, you'd either have had to manually populate a static /dev or run udev. wib_jonas: ``` grep -lw wisdom bin/* wib_jonas: ``` grep -lw tmflry bin/* HackEso: bin/?? \ bin/mislearn \ bin/tomfoolery wib_jonas: of course some of those are false positives arseniiv: hey, hey, hey, hey, hey, arseniiv: (I actually have nothing to say but I want to say hey) arseniiv: also I was writing a bunch of lame Haskell code yesterday and maybe I will continue today too and then show you to have much criticism! arseniiv: naming things is often a mess arseniiv: they say if you can’t figure out a name for a code thingy, better do without. but I think there are a big case of false negative here for people who just have a bad day for language or maybe they are non-natives even worse than me b_jonas: hey, hey arseniiv arseniiv: b_jonas: hey, b_jonas: yes, naming is hard, but I think you should still name partial results fizzie: Hey, listen. (Stay awhile and listen?) b_jonas: yes, that's what the fairy of the boy without a fairy says fizzie: And the parenthetical part is what Deckard Cain says. arseniiv: is there a common factoring of this functions into a couple of well-known ones?: arseniiv: h :: (a, Maybe b) -> Maybe (a, b) arseniiv: h (a, Just b) = Just (a, b) arseniiv: h (a, Nothing) = Nothing arseniiv: I think there should be but I’m yet to find out arseniiv: hm let me try `sequence` again. Yesterday I found out it’s quite a magic one arseniiv: bingo! `sequence` saves the day again! arseniiv: h = sequence! arseniiv: thank you for reading this anyway b_jonas: arseniiv: I would have recommended that you ask in #haskell . arseniiv: b_jonas: reasonable zzo38: The reason I use a Raspberry Pi computer is because my wired internet doesn't work, but Raspberry Pi has wireless internet zzo38: Also, I tried to insntall the more complete vim system but it says 404 error zzo38: I have a Compact Flash card to transfer files between these two computers zzo38: This computer doesn't have xclip either shachaf: Do you need xclip? kmc: zzo38: you can also get a USB wireless adapter zzo38: Well, I tried to install xclip and don't get a 404 error for that at least kmc: there are some very tiny ones that stick out only a few mm from the port and can be left in 24/7 zzo38: kmc: I have one, and have tried that but it doesn't work. My computer recognizes it, and it lists the access point, and it says connected but then it doesn't work. kmc: oh, that is too bad shachaf: Hmm, CDCL is probably the single biggest improvement I can make to a solver, I guess? shachaf: I implemented 2WL but -- surprise? -- it doesn't do much good for the 3SAT instances I've been testing on. shachaf: I assume it'll be more useful with CDCL since the learnt claws will be bigger. zzo38: This computer also has a not very good keyboard from Microsoft. Many keys are missing, including home, end, insert, scroll lock, and the entire number pad fizzie: I used to have a non-flexible USB wifi dongle that, in the university lecture hall, only worked if I kept the laptop at a 90 degree angle, so that the stick was vertical. fizzie: In retrospect, maybe I could've just used a short USB extension cable. zzo38: What are you thinking of now I posted the new esolang "EsoPost"? (That is why I wanted xclip, it is convenient when I want to copy a file to the wiki, and I wrote the file on other computer) zzo38: Do you like ZZ Zero? zzo38: Deduplication {X} Instant ;; X target nonbasic permanents are legendary until end of turn. ;; Cycling {2} ;; Flashback {XX} zzo38: Historical Library {4} Legendary Artifact ;; {2}, {T}: Put the bottom card of your graveyard into your hand. Use only as a sorcery. zzo38: Do you have a comment of this? zzo38: Also, do you know if it is possible to use Usenet (and possibly also Unusenet) with amateur radio? arseniiv: my fancy write-only code about constructor inhabitedness: https://repl.it/repls/OpaqueCrazyStructures b_jonas: `?h time cube HackEso: EARTH HAhS 4 CORNEhR SIMULTANEOUhS 4-DAY TIME CUBE IhN ONLY 24 HOUhR ROTATIOhN. 4 CORNEhR DAYhS, CUBEhS 4 QUAhD EARTH. Bible A Lie & Word Ihs Liehs. Navehl Connects 4 Cornehr 4s. Gohd Ihs Born Ohf A Mothehr - She Left Belly B. Signature. Youhr dirty lying teachers use only the midnight to midnight 1 day (ignoring 3 othehr dayhs) Time to noht fouhl (already wrong) bible time. Lie thaht corrupts earth you educatehd stupihd fools. b_jonas: `?h gene ray HackEso: Dr Gene Ray ihs the Greatest Philosophehr, and ihs the Greatest Mathematiciahn. Cubihc Harmonics. Only Cubihc Harmonics cahn save humanity. Cubihc Harmonics will pacify all religions. 96-houhr Cubihc Day debunks 1-day unnaturahl gohd. 96-houhr day willdisprove disunity gohd. Academians are teaching - pseudocience. Worshipping a Word Gohd will destroy the USA. b_jonas: "you educatehd stupihd fools" zzo38: arseniiv: Do you have a direct download link? arseniiv: zzo38: I’ll make a minute addition and then I’ll post it somewhere shachaf: `doag quotes HackEso: 11995:2019-10-31 addquote The domain is public, but what\'s the codomain? \ 11992:2019-10-24 delquote 232 \ 11991:2019-10-24 delquote 1056 \ 11990:2019-10-24 delquote 1271 \ 11986:2019-10-24 addquote kspalaiologos: yes, it\'s much more enjoyable sitting in #esoteric than chiselling 99 bottles of beer into a rock. \ 11967:2019-10-13 addquote How did it rejoin I didn't implement it <-- that was a netsplit. it looks like a mass quit and rejoin but in reality it's just an in-between irc server doing that. (except for those unfortunate enough to be logged in directly to that server.) lambdabot: Consider it noted. oerjan: It's easier to test for nick characters [-0-9A-}] because those are the same on all networks <-- except then we need to worry about the LC_COLLATE setting or whatever it was. oerjan: hm there's a globasciiranges shell option. oerjan: `cat bin/@ HackEso: ​#!/usr/bin/perl -w \ $_ = join " ", @ARGV; if (s/^([^ ]*) +([^ ]*) +//) { print "$1: "; exec $2, $_; } oerjan: `cat bin/nur HackEso: if grep -q \ <<<"$1"; then "${1%% *}" "${1#* }"; else "$1"; fi oerjan: `echo test HackEso: ​ test oerjan: it looks like @ implements its own nur oerjan: which is slightly incompatible oerjan: `@ oerjan test HackEso: No output. HackEso: Killed oerjan: `@ oerjan quote HackEso: No output. oerjan: `quote HackEso: 818) we have PR? the good news is we have PR. the bad news is we borrowed haskell's motto for it. [...] [...] "avoid success at all costs" oerjan: so `@ doesn't work with a command with no argument oerjan: it's also a bit complicated by wanting to work both in shell commands and with ` oerjan: `sled bin/@//2s!+.*!+//) { print "$1: "; exec "nur", $_; }! HackEso: bin/@//#!/usr/bin/perl -w \ $_ = join " ", @ARGV; if (s/^([^ ]*) +//) { print "$1: "; exec "nur", $_; } oerjan: `@ oerjan quote HackEso: oerjan: /hackenv/bin/nur: 1: /hackenv/bin/nur: Syntax error: redirection unexpected oerjan: `nur quote HackEso: 636) Astrological ages don't work. Instead, say what you mean. oerjan: `/bin/echo hi oerjan: `sled bin/@//s,nur,echo, HackEso: bin/@//#!/usr/bin/perl -w \ $_ = join " ", @ARGV; if (s/^([^ ]*) +//) { print "$1: "; exec "echo", $_; } oerjan: `@ oerjan quote HackEso: oerjan: quote oerjan: `@ oerjan quote hi HackEso: oerjan: quote hi oerjan: hm echo has no problem. oerjan: `revert oerjan: `@ oerjan quote hi HackEso: oerjan: /hackenv/bin/nur: 1: /hackenv/bin/nur: Syntax error: redirection unexpected oerjan: oh duh oerjan: `sled bin/nur//1i#!/bin/bash HackEso: bin/nur//#!/bin/bash \ if grep -q \ <<<"$1"; then "${1%% *}" "${1#* }"; else "$1"; fi oerjan: `@ oerjan quote hi HackEso: oerjan: 5) His body should be given to science. He's alive :P Even so. \ 8) Lil`Cube: you had cavity searches? not yet trying to thou, just so I can check it off on my list of things to expirence \ 13) Finally I have found some actually useful purpose for it. \ 14) oerjan: are you a man, if t oerjan: `@ oerjan quote HackEso: oerjan: 4) GKennethR: he should be told that you should always ask someone before killing them. oerjan: there you go. oerjan: `? nur HackEso: nur? ¯\(°​_o)/¯ oerjan: `learn nur "command argument" is a convenience wrapper for invoking user-given commands with the same argument splitting as HackEso's top level. (Mnemonic: opposite of `run) HackEso: Learned 'nur': nur "command argument" is a convenience wrapper for invoking user-given commands with the same argument splitting as HackEso's top level. (Mnemonic: opposite of `run) oerjan: `whatis nur HackEso: nur(1hackeso) - no description HackEso: ​@ is an OS made out of only the finest vapour. imode: seems like there's a story behind that. oerjan: `? scapegoat HackEso: scapegoat? ¯\(°​_o)/¯ oerjan: `grWp scapegoat HackEso: No output. oerjan: i suppose we don't have that in wisdom. @ was the perfect imaginary OS and scapegoat was the perfect imaginary revision control system, iirc oerjan: `grWp goat HackEso: ​🐐:🐐 <(Unicode goat laments your inability to render Unicode goat.) \ goat:Goats will eat and drink anything, except tea. Solain is unavailable for details. \ stume:A stume cowears and goatears you. That is the main reason why the often look so ackward. oerjan: hm i thought that unicode had something relevant but apparently not. oerjan: i think possibly ais523 has still something ongoing inspired by scapegoat. oerjan: `learn `@ [] is a wrapper for running a HackEso command with a "nick:" prepended. HackEso: Learned '`@': `@ [] is a wrapper for running a HackEso command with a "nick:" prepended. shachaf: How do you combine `1 and `@ ? oerjan: `slwd `@//s,:,: , HackEso: ​`@//`@ [] is a wrapper for running a HackEso command with a "nick: " prepended. oerjan: `@ `1 quote shachaf HackEso: ​`1: 838) GreyKnight, shachaf is like a high-level Forth \ 1057) <@elliott> well, I think if you don't think figuring out who the opposite of shachaf is requires thought, then you don't know shachaf very well oerjan: `@ shachaf `1 quote shachaf HackEso: shachaf: /hackenv/bin/nur: line 2: `1: command not found oerjan: `@ shachaf 1 quote shachaf HackEso: shachaf: 1/15:594) VMS Mosaic? I hope that's not Mosaic ported to VMS. Hmm. It's Mosaic ported to VMS. \ 604) * Sgeo|web wants to see elliott be wrong about something Sgeo|web: That literally never happens. Sgeo|web: There you go. A great example. \ 608) You should get kmc in this channel. kmc has good quotes. `quote kmc 686) COCKS [...] truly co oerjan: of course it only prepends the first line shown oerjan: oh and won't split correctly kmc: what does `@ do HackEso: ​`@ [] is a wrapper for running a HackEso command with a "nick: " prepended. int-e: `@ int-e `welcome oerjan HackEso: int-e: /hackenv/bin/nur: line 2: `welcome: command not found int-e: `@ int-e welcome oerjan HackEso: int-e: oerjan: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: . (For the other kind of esoterica, try #esoteric on EFnet or DALnet.) int-e: yay for abuse int-e: `url bin/@ HackEso: https://hack.esolangs.org/repo/file/tip/bin/%40 oerjan: i think `welcome uses it internally, anyway oerjan: (and i may have written that.) oerjan: (or rewritten.) int-e: oh it's a nitia thing int-e: exec "bin/@", $_ . " ? welcome" int-e: yeah it uses it all right int-e: not in the most obvious way... because perl int-e: `welcome int-e oerjan HackEso: int-e: oerjan: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: . (For the other kind of esoterica, try #esoteric on EFnet or DALnet.) int-e: I didn't know it did that though. oerjan: hm maybe it wasn't me. int-e: `culprits bin/welcome HackEso: oerjän oerjän ellioẗt nitïa oerjan: i wonder why the `hurl link doesn't show more than the initial int-e: exactly oerjan: although the rest were cleanups i think int-e: `hoag bin/welcome HackEso: ​ chmod +x bin/*elcom* \ mv *elcom* bin \ rm bin/*elcom* \ Initïal import. int-e: Maybe hoag should replace that last one by import. kmc: 22222222222222222222222 int-e: boring cat shachaf: oerjan: I meant the correct splitting, yep. shachaf: int-e: hoag? oerjan: `1 @ shachaf quote shachaf HackEso: 1/15:shachaf: 594) VMS Mosaic? I hope that's not Mosaic ported to VMS. Hmm. It's Mosaic ported to VMS. \ 604) * Sgeo|web wants to see elliott be wrong about something Sgeo|web: That literally never happens. Sgeo|web: There you go. A great example. \ 608) You should get kmc in this channel. kmc has good quotes. `quote kmc 686) COCKS [...] truly co shachaf: I assume hoag, hog, hoat, etc. should just be deleted. oerjan: that should work shachaf: oerjan: But some IRC clients only hilight a line if your nick is at the beginning. oerjan: EWONTFIX int-e: shachaf: that would just sow confusion shachaf: Don't you hate it when a function sets errno to EWONTFIX? int-e: `rot13 sow hoag HackEso: fbj ubnt shachaf: So my SAT solver does 2-watched literals. shachaf: Shockingly, it doesn't help that much for 3SAT. int-e: not very pronouncible, sadly shachaf: (Without CDCL, anyway.) shachaf: It's almost like int-e isn't that shocked. int-e: it may be cheaper to just statically by literal for 3SAT int-e: +index shachaf: What do you mean? shachaf: Just watch all three, or something else? int-e: because the difference between walking 2 lists or 3 lists is small and you save the maintenance overhead int-e: But I'd expect indexing to still be important. shachaf: But if you learn clauses by resolution they can get much longer presumably. int-e: Of course they can int-e: look at the reduction from SAT to 3SAT int-e: I read a negation into that and there wasn't any. shachaf: I mean, in practice, I imagine that 2WL could plausibly help quite a bit for 3SAT once I learn clauses. int-e: Do RL SAT solvers bother with maintaining extra data structures for clauses of size 2? int-e: (I'm sure Minisat doesn't. But others may...) int-e: shachaf: Btw, actually the ... was me being confused. Mainly I was wondering whether you just walk all clauses instead, which I imagine would be quite inefficient. shachaf: Oh, I meant 2-watch being a small optimization over 3-watch. shachaf: It's certainly a big optimization over entire-instance-watch. shachaf: I assume no solver does that. int-e: Though I'd add "practical" or "competetive" to the mix :) shachaf: Oh, sure. shachaf: In fact I wrote a solver that did that before upgrading it to 2WL. shachaf: What should I implement next? int-e: . o O ( generate all assignments and check... could be a viable approach for golfing ) shachaf: * CDCL * Restarts * Variable-choosing heuristics like VSIDS shachaf: * backjumping? Probably that makes more sense after CDCL int-e: restarts make no sense without heuristics shachaf: Yes they do. int-e: or clause learning int-e: oh you mean because you actually learn polarities shachaf: No, not even that. shachaf: Even if you restart fresh each time. int-e: do you select variables at random? shachaf: That's what I had in mind. shachaf: Of course if it's deterministic you don't get too much. shachaf: But your choices (variable order, initial assignment) have a huge impact. I was surprised at how much. int-e: but I think there's still a grain of truth shachaf: The original Luby paper was about Las Vegas algorithms, of course, which don't share any state. int-e: restarts need a heuristic whether your current run is a lucky or an unlucky one? shachaf: Or you just do Luby. shachaf: I bet Luby would speed up an extremely naive solver that made random choices quite a bit on a lot of problems. int-e: Hmm. Sounds reasonable. shachaf: http://www.cs.toronto.edu/~fbacchus/csc2512/Lectures/2013Readings/Skallah_Empirical_Study_SAT_Solvers.pdf answers this question, I guess. shachaf: CDCL has the biggest impact. b_jonas: oerjan: nice b_jonas: oerjan: also, the welcome scripts using bin/@ is nicely esoteric and overcomplicated. I assumed they'd just echo -n "$1${1+: }" until I read the code. int-e: Hmm, that November Ponder This challenge... I'm finding that getting to 900,000,000 fairly easy, but reaching the actual target 923,062,279 is not. int-e: But I guess that's fine... the October challenge was pretty easy. jix: in my sat solver, I handle binary clauses completely separately, i.e. for each literal I have a binary clause watchlist and a binary clause is only stored by being present in both its literals binary clause watchlists jix: IIRC some other solvers do a similar thing but use their normal watch lists, having a special clause reference value for binary clauses to indicate that the clause isn't actually stored anywhere else jix: (there already is a place to store the other literal in the watchlist when blocking literals are used) int-e: `? device HackEso: device? ¯\(°​_o)/¯ int-e: `learn A device is a browser session. Please verify your device. HackEso: Learned 'device': A device is a browser session. Please verify your device. int-e: `complain HackEso: No output. HackEso: ​/hackenv/bin/`: eval: line 5: unexpected EOF while looking for matching `'' \ /hackenv/bin/`: eval: line 6: syntax error: unexpected end of file \ /hackenv/bin/`: eval: line 5: unexpected EOF while looking for matching `'' \ /hackenv/bin/`: eval: line 6: syntax error: unexpected end of file \ /hackenv/bin/`: eval: line 5: unexpected EOF while looking for matching `'' \ /hackenv/bin/`: eval: line 6: syntax error: unexpected end of file \ /h HackEso: 2/2:an by 21? fizzie: `le//rn source//Sources for HackEso can be found at https://github.com/fis/hackbot + https://github.com/fis/multibot + https://github.com/fis/umlbox . HackEso: Relearned 'source': Sources for HackEso can be found at https://github.com/fis/hackbot + https://github.com/fis/multibot + https://github.com/fis/umlbox . fizzie: (Context: Gregor had moved the official homes of all three projects to github, so I forked them there and rebased my local modifications on top. Bitbucket is sunsetting Mercurial support next year anyway.) int-e: . o O ( Is there a longer word for "prolific"? ) imode: it seems like concurrency primitives are the imode: "missing link" for concatenative languages. imode: or at the very least languages like PostScript, Forth, etc. imode: to the point of treating small processes as the values you want to work with rather than smaller inconsequential pieces of data (raw numbers, etc.) kspalaiologos: If anyone is interested kspalaiologos: new asm2bf release, featuring RLE de/compression built into the assembler imode: https://www.youtube.com/watch?v=iuC_DDgQmsM kspalaiologos: new brainfuck programs to waste time on? kspalaiologos: any ideas? arseniiv: someone knows how the art/sculpture genre is called where combinatorial objects of a particular kind are explored? arseniiv: for a primitive example, a hypothetical exhibition of Set cards arseniiv: I think I saw an en.wikipedia article about that with many pictures but I can’t find anything! Combinator(y|ic|ial) art, serial art, systems art, permutation art all seem to be near but not exactly what I look for arseniiv: it was called something, maybe someone heard imode: was it a physical sculpture? arseniiv: imode: let me check! arseniiv: imode: seems like it’s not; kinetic sculpture also isn’t that :( imode: I've been searching and found nothing of the sort, sorry. :( arseniiv: imode: thank you anyway! arseniiv: that’s a mystery fizzie: `` pwd # <- I've changed this at least temporarily, let's see what all breaks. HackEso: ​/hackenv/tmp fizzie: Well, found one thing that broke already. fizzie: `sled /hackenv/bin/paste//s|url tmp|url $HACKENV/tmp| HackEso: ​/hackenv/bin/paste//#!/bin/bash \ if [ "$1" ] && url "$1" 2>/dev/null # Save making a file when it already exists. \ then \ true \ else \ PASTENUM="$RANDOM" \ \ mkdir -p $HACKENV/tmp/paste \ \ url $HACKENV/tmp/paste/paste."$PASTENUM" \ cat -- "${1--}" > $HACKENV/tmp/paste/paste."$PASTENUM" \ fi fizzie: `sled /hackenv/bin/sport//s|tmp/|$HACKENV/tmp/|g HackEso: ​/hackenv/bin/sport//cat "${2:-/dev/stdin}" >$HACKENV/tmp/spout.raw; distort $HACKENV/tmp/spout.raw | spore "${1-1}" fizzie: `sled /hackenv/bin/spore//s|/hackenv/tmp/|$HACKENV/tmp/|g HackEso: ​/hackenv/bin/spore//cat "${2:-/dev/stdin}" > $HACKENV/tmp/spout; spam "${1-1}" fizzie: (That one was correct already, just made it a little more abstract. Maybe I'll do a LSC to do the ${HACKENV:-/hackenv} as suggested at some point.) fizzie: `sled /hackenv/bin/spam//s|/hackenv/tmp/|$HACKENV/tmp/|g HackEso: ​/hackenv/bin/spam//line="${1-$(cat $HACKENV/tmp/spline)}"; len="$(awk 'END{print NR}' $HACKENV/tmp/spout)"; echo -n "$line/$len:"; sed -n "${line}{p;q}" $HACKENV/tmp/spout; echo "$((line $HACKENV/tmp/spline fizzie: `sled /hackenv/bin/just//s| tmp/| $HACKENV/tmp/|g HackEso: ​/hackenv/bin/just//grwp '\(is\|are\) just' | sed -e 's/:/ ::= /;s/$/\n/' > $HACKENV/tmp/just && url $HACKENV/tmp/just fizzie: `` rm /hackenv/bin/8$'\x0f'ball # I've no idea what this one was about HackEso: No output. fizzie: `sled /hackenv/bin/cbt//s|cat bin|cat $HACKENV/bin| HackEso: ​/hackenv/bin/cbt//cat $HACKENV/bin/"$1" fizzie: `sled /hackenv/bin/gs2c//s|python bin|python $HACKENV/bin| HackEso: ​/hackenv/bin/gs2c//echo "$@" | python $HACKENV/bin/gs2c.py fizzie: `sled /hackenv/bin/gs2x//s|python bin|python $HACKENV/bin| HackEso: ​/hackenv/bin/gs2x//python $HACKENV/bin/gs2.py "$@" fizzie: `sled /hackenv/bin/makelist//s|bin/|$HACKENV/bin/| HackEso: ​/hackenv/bin/makelist//if [[ "$1" == *" "* ]]; then exec makelist $@; fi; name="$1"; file="$HACKENV/bin/$name"; makelistlist "$name"; shift; cp bin/emptylist "$file"; for n in "$@"; do echo "$n" >> "$file"; done fizzie: `sled /hackenv/bin/makelist//s|bin/|$HACKENV/bin/|g HackEso: ​/hackenv/bin/makelist//if [[ "$1" == *" "* ]]; then exec makelist $@; fi; name="$1"; file="$HACKENV/$HACKENV/bin/$name"; makelistlist "$name"; shift; cp $HACKENV/bin/emptylist "$file"; for n in "$@"; do echo "$n" >> "$file"; done fizzie: ...whoops. fizzie: `sled /hackenv/bin/makelist//s|$HACKENV/$HACKENV/|$HACKENV/| HackEso: ​/hackenv/bin/makelist//if [[ "$1" == *" "* ]]; then exec makelist $@; fi; name="$1"; file="$HACKENV/bin/$name"; makelistlist "$name"; shift; cp $HACKENV/bin/emptylist "$file"; for n in "$@"; do echo "$n" >> "$file"; done fizzie: Computers are hard. fizzie: `` rm /hackenv/bin/script /hackenv/bin/scriptadd # executive override HackEso: No output. fizzie: `sled /hackenv/bin/?//s|cd wisdom|cd $HACKENV/wisdom| HackEso: ​/hackenv/bin/?//#!/bin/bash \ topic=$(echo "$@" | lowercase | sed "s/noo\+dl/nooodl/;s/ *$//") \ topic1=$(echo '`'"$topic" | sed 's/^`\(`\|$\)//') \ topic2=$(echo "$topic" | sed "s/s$//") \ cd $HACKENV/wisdom \ if [ \( "_$topic2"_ = "_ngevd"_ \) -a \( -e ngevd \) ]; \ then cat /dev/urandom; \ elif [ -e "$topic" ]; \ then cat "$topic"; \ elif [ -e "$topic1" ]; \ then cat "$topic1"; \ elif [ -e "$topic2" ]; \ then fizzie: `sled /hackenv/bin/grwp//s|cd wisdom|cd $HACKENV/wisdom| HackEso: ​/hackenv/bin/grwp//#! /bin/bash \ cd $HACKENV/wisdom; shopt -s dotglob; grep -R "$@" -- * fizzie: `sled /hackenv/bin/gwn//s|cd wisdom|cd $HACKENV/wisdom| HackEso: ​/hackenv/bin/gwn//cd $HACKENV/wisdom; shopt -s dotglob; grep -ERls "$@" -- * fizzie: `sled /hackenv/bin/gwni//s|cd wisdom|cd $HACKENV/wisdom| HackEso: ​/hackenv/bin/gwni//cd $HACKENV/wisdom; shopt -s dotglob; grep -ERlis "$@" -- * fizzie: `sled /hackenv/bin/pastewisdom//s|url wisdom|url $HACKENV/wisdom| HackEso: ​/hackenv/bin/pastewisdom//#!/bin/sh \ url $HACKENV/wisdom fizzie: `sled /hackenv/bin/plwd//s|cd wisdom|cd $HACKENV/wisdom| HackEso: ​/hackenv/bin/plwd//cd $HACKENV/wisdom; pled "$1" | sed '1s/^Rosebud!$/Roswbud!/' fizzie: `sled /hackenv/bin/slwd//s|cd wisdom|cd $HACKENV/wisdom| HackEso: ​/hackenv/bin/slwd//cd $HACKENV/wisdom; sled "$1" | sed '1s/^Rosebud!$/Roswbud!/' fizzie: `sled /hackenv/bin/wisdom//s|wisdom|$HACKENV/wisdom|g HackEso: ​/hackenv/bin/wisdom//#!/bin/sh \ f=$(find $HACKENV/wisdom -ipath "$HACKENV/wisdom/*$1*" -type f -print0 | shuf --random-source=/dev/urandom -z -n1); if [ -n "$f" ]; then echo -n "${f#$HACKENV/wisdom/}//"; cat "$f"; else echo "That's not wise."; fi | rnooodl fizzie: `sled /hackenv/bin/wiseguys//s|wisdom|$HACKENV/wisdom| HackEso: ​/hackenv/bin/wiseguys//hlnp -T '{desc}\n' $HACKENV/wisdom | cut -d' ' -f1 | sort | uniq -c | sed -e 's/^ *//' | sort -nr | head -n ${1:-10} fizzie: `wiseguys HackEso: 1713 \ 689 \ 309 \ 300 \ 241 \ 158 \ 142 \ 139 \ 98 \ 72 fizzie: Still maintaining a healthy lead, I see. fizzie: `sled /hackenv/bin/slashlearn//s|wisdom/|$HACKENV/wisdom/|g HackEso: ​/hackenv/bin/slashlearn//sep="//" \ [[ "$1" == ?*"$sep"* ]] || { echo 'Usage: `le/[/]rn //' >&2 ; exit 1; } \ key="$(echo "${1%%$sep*}" | lowercase)" \ value="${1#*$sep}" \ [ -e "$HACKENV/wisdom/$key" ] && verb="Relearned" || verb="Learned" \ echo "$value" > "$(echo-p "$HACKENV/wisdom/$key")" && echo -n "$verb '$key': $(echo "$value" | sed 's.^[ ].0,04&.')" fizzie: `sled /hackenv/bin/wrl//s|wisdom/|$HACKENV/wisdom/| HackEso: ​/hackenv/bin/wrl//url "$HACKENV/wisdom/$1" fizzie: `sled /hackenv/bin/wdit//s|wisdom/|$HACKENV/wisdom/| HackEso: ​/hackenv/bin/wdit//edit "$HACKENV/wisdom/$1" fizzie: `sled /hackenv/bin/whoops//s|wisdom/|$HACKENV/wisdom/| HackEso: ​/hackenv/bin/whoops//OLD="$HACKENV/wisdom/$1"; [ -z "$1" ] && OLD="$(lastfiles)"; NEW="${OLD}s"; if [ -f "$NEW" ]; then echo "«${NEW}» already exists"; exit 1; fi; mv "$OLD" "$NEW" && echo "«${OLD}» -> «${NEW}»" fizzie: In retrospect, it might have been smart to add one layer of indirection, to make the wisdom location independent of $HACKENV. Oh well. fizzie: `sled /hackenv/bin/cwlprits//s|wisdom/|$HACKENV/wisdom/| HackEso: ​/hackenv/bin/cwlprits//culprits "$HACKENV/wisdom/$1" fizzie: `sled /hackenv/bin/dowg//s|wisdom/|$HACKENV/wisdom/| HackEso: ​/hackenv/bin/dowg//doag "$HACKENV/wisdom/$1" fizzie: `sled /hackenv/bin/footnote//s|wisdom/|$HACKENV/wisdom/| HackEso: ​/hackenv/bin/footnote//cat "$HACKENV/wisdom/footnote $1" fizzie: `sled /hackenv/bin/forget//s|wisdom/|$HACKENV/wisdom/|g HackEso: ​/hackenv/bin/forget//#!/bin/sh \ for n; do if [ lethe = "$n" ]; then rm -f "$HACKENV/wisdom/$n"; else rm-p "$HACKENV/wisdom/$n"; fi && echo "Forget what?"; done fizzie: `sled /hackenv/bin/howg//s|wisdom/|$HACKENV/wisdom/| HackEso: ​/hackenv/bin/howg//hoag "$HACKENV/wisdom/$1" fizzie: `sled /hackenv/bin/hwrl//s|wisdom/|$HACKENV/wisdom/| HackEso: ​/hackenv/bin/hwrl//hurl "$HACKENV/wisdom/$1" fizzie: `sled /hackenv/bin/lastwisdoms//s|find .hg|find $HACKENV/.hg|;s|s=\^\.hg|s=^.*?.hg| HackEso: ​/hackenv/bin/lastwisdoms//find $HACKENV/.hg/store/data/wisdom -type f -print0 | xargs -0 /bin/ls -t | perl -pe 'use POSIX;chop;$d=strftime("%F",localtime((stat($_))[9]));s=^.*?.hg/store/data/wisdom/(.*).i$=\1 // =;s=^=/$d/ = if$d ne$p;$p=$d;s=_(.)=uc($1)=eg;s=~([0-9a-f][0-9a-f])=chr hex$1=eg' fizzie: `sled /hackenv/bin/leann//s|wisdom/|$HACKENV/wisdom/| HackEso: ​/hackenv/bin/leann//(($#==1)) && set -- "${1% *}" "${1#* }"; key=${1,,}; shift; cat <<< "${*,,}" > "$HACKENV/wisdom/$key" && echo "Learned «$key»" fizzie: `sled /hackenv/bin/learn//s|wisdom/|$HACKENV/wisdom/| HackEso: ​/hackenv/bin/learn//#!/bin/bash \ topic=$(echo "$1" | lowercase | sed 's/^\(an\?\|the\) //;s/s\?[:;,.!?]\? .*//') \ [ -e "$HACKENV/wisdom/$topic" ] && verb="Relearned" || verb="Learned" \ echo "$1" >"$(echo-p "$HACKENV/wisdom/$topic")" \ echo "$verb '$topic': $1" fizzie: `` for w in benvenuto bienvenido bienvenue bonvenon tervetuloa välkommen velkomin velkommen welcome welkom wercome willkommen добро-пожаловать; do sed -i -e 's|bin/[@?]|$HACKENV/&|g' /hackenv/bin/$w; done HackEso: No output. fizzie: (That one wasn't actually correct; fixed it in post.) fizzie: `sled /hackenv/bin/!//s|exec ibin|exec $HACKENV/ibin| HackEso: ​/hackenv/bin/!//#!/bin/bash \ CMD=`echo -n "$1" | cut -d' ' -f1` \ ARG="$(echo -n "$1" | cut -d' ' -f2-)" \ exec $HACKENV/ibin/$CMD "$ARG$2" fizzie: `` rm '/hackenv/bin/*' # this one is just too dangerous HackEso: No output. fizzie: `sled /hackenv/bin/cmds//s|url bin|url $HACKENV/bin| HackEso: ​/hackenv/bin/cmds//url $HACKENV/bin fizzie: `sled /hackenv/bin/dobg//s|bin/|$HACKENV/bin/| HackEso: ​/hackenv/bin/dobg//doag "$HACKENV/bin/$1" fizzie: `sled /hackenv/bin/gs2c.py//s|bin/gs2.py|/hackenv/bin/gs2.py| HackEso: ​/hackenv/bin/gs2c.py//# gs2 compiler (version 0.2) \ # (c) nooodl 2014 \ \ import re \ import struct \ import sys \ \ if sys.platform == "win32": \ import os, msvcrt \ msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) \ \ mnemonics = {} \ with open('/hackenv/bin/gs2.py') as f: \ for line in f: \ if '#=' in line: \ a, b = line.split('#=') \ a = re.findall(r'\\x(..)', a.strip()) \ b = fizzie: `sled /hackenv/bin/interp//s|exec ibin/|exec $HACKENV/ibin/| HackEso: ​/hackenv/bin/interp//#!/bin/bash \ CMD=`echo -n "$1" | cut -d' ' -f1` \ ARG="$(echo -n "$1" | cut -d' ' -f2-)" \ exec $HACKENV/ibin/$CMD "$ARG$2" fizzie: `sled /hackenv/bin/newcmd//s|bin/|$HACKENV/bin/|g HackEso: ​/hackenv/bin/newcmd//if [ -a "$HACKENV/bin/${1%% = *}" ];then exec echo "${1%% = *}: Already exists.";fi;echo "${1#* = }" > "$HACKENV/bin/${1%% = *}";chmod +x "$HACKENV/bin/${1%% = *}" fizzie: `` rm /hackenv/bin/randbin # for consistency with * HackEso: No output. fizzie: `` rm /hackenv/bin/show /hackenv/lib/dcc # this one just won't work HackEso: No output. fizzie: `sled /hackenv/bin/words//s|share/WordData|$ENV{'HACKENV'}/&| HackEso: ​/hackenv/bin/words//#!/usr/bin/perl \ use strict; use warnings; \ use v5.10; \ use open qw( :encoding(UTF-8) :std); \ use File::Basename 'dirname'; \ use Storable 'retrieve'; \ use List::Util qw(sum min); \ use Getopt::Long qw(:config gnu_getopt); \ BEGIN { \ eval { \ require Math::Random::MT::Perl; Math::Random::MT::Perl->import('rand'); \ }; \ #warn "Optional module Math::Random::MT::Perl not found.\n" if $@; \ } \ \ #co fizzie: `sled /hackenv/bin/8ball//s|share/|$HACKENV/share/| HackEso: ​/hackenv/bin/8ball//#!/bin/sh \ shuf -n 1 $HACKENV/share/8ballreplies fizzie: `sled /hackenv/bin/acronym//s|share/|$HACKENV/share/| HackEso: ​/hackenv/bin/acronym//w="${1:-tla}"; (for (( i=0;i<${#w};i++ )); do grep -i "^${w:$i:1}[a-z]*\$" $HACKENV/share/dict-words | shuf -n 1; done) | xargs shachaf: fizzie: whoa, what's all this? fizzie: `sled /hackenv/bin/addscowrevs//s|share/|$HACKENV/share/|g HackEso: ​/hackenv/bin/addscowrevs//echo $@ | xargs -n 1 | sort -n - $HACKENV/share/scowrevs -o $HACKENV/share/scowrevs shachaf: Is it for when people experiment with making files in the cwd? fizzie: shachaf: Yes, I'm trying out /hackenv/tmp as the work directory. fizzie: For the most part making things relative to $HACKENV, though for Python I can't've been bothered; anyway, there's definitely a lot of stuff already hardcoding /hackenv, so good enough. fizzie: `sled /hackenv/bin/airport-lookup//s|share/airports.dat|/hackenv/share/airports.dat| HackEso: ​/hackenv/bin/airport-lookup//#! /usr/bin/env python \ \ import csv \ import sys \ \ if len(sys.argv) < 3: sys.stderr.write('usage: airport-lookup any|name|iata|icao key\n'); sys.exit(1) \ kind, q = sys.argv[1], ' '.join(sys.argv[2:]) \ \ fieldnames = dict(name=1, iata=4, icao=5) \ if kind == 'any': fields = [1, 4, 5] \ elif kind in fieldnames: fields = [fieldnames[kind]] \ else: sys.stderr.write('unknown search type: %s\n' % kind); sys. fizzie: `sled /hackenv/bin/autowelcome//s|share/|$HACKENV/share/|g HackEso: ​/hackenv/bin/autowelcome//[ "$1" == "on" ] && echo enabled > $HACKENV/share/autowelcome_status; [ "$1" == "off" ] && echo disabled > $HACKENV/share/autowelcome_status; echo "Autowelcome $(cat $HACKENV/share/autowelcome_status)." fizzie: `sled /hackenv/bin/complain//s|share/|$HACKENV/share/| HackEso: ​/hackenv/bin/complain//print_args_or_input "$@" >> $HACKENV/share/Complaints.mp3; echo Complaint filed. Thank you. fizzie: `sled /hackenv/bin/complaints//s|share/|$HACKENV/share/| HackEso: ​/hackenv/bin/complaints//wc -l $HACKENV/share/Complaints.mp3 fizzie: `sled /hackenv/bin/list//s|share/|$HACKENV/share/|g HackEso: ​/hackenv/bin/list//date > $HACKENV/share/conscripts; culprits $HACKENV/share/conscripts | xargs -n 1 | awk '!x[$0]++' | xargs fizzie: `sled /hackenv/bin/maim//s|share/|$HACKENV/share/| HackEso: ​/hackenv/bin/maim//shuf -n 1 $HACKENV/share/maimery | sed "s/\$target/$1/" fizzie: `` rm -r /hackenv/good /hackenv/evil /hackenv/bin/good /hackenv/bin/evil # sorry HackEso: No output. fizzie: `sled /hackenv/bin/bookofeso//s|esobible|$HACKENV/esobible|g HackEso: ​/hackenv/bin/bookofeso//F="$(find $HACKENV/esobible -name "*$(echo "$1" | lowercase)*" -type f | shuf -n1)"; echo -n "${F#$HACKENV/esobible/}/" | rnooodl; cat "$F" | rnooodl fizzie: (Almost removed that, don't think it really gets used.) fizzie: `sled /hackenv/bin/mislearn//s|tmflry/|$HACKENV/tmflry/| HackEso: ​/hackenv/bin/mislearn//#!/bin/bash \ topic=$(echo "$1" | lowercase | sed 's/^\(an\?\|the\) //;s/s\?[:;,.!?]\? .*//') \ echo "$1" >"$HACKENV/tmflry/$topic" \ echo "Was lied to about '$topic': $1" fizzie: `fetch /hackenv/bin/tomfoolery https://hack.esolangs.org/get/bin/tomfoolery HackEso: 2019-11-16 22:53:52 URL:https://hack.esolangs.org/get/bin/tomfoolery [327/327] -> "bin/tomfoolery" [1] b_jonas: hi fizzie. fizzie: If we want to keep this, I will also need to fix edit at some point, otherwise it generates broken `fetch examples. b_jonas: fizzie: addquote and delquote would definitely break b_jonas: oh nice b_jonas: I see you're fixing some of the scripts b_jonas: fizzie: I meant to fix more scripts, but haven't got there yet b_jonas: was too slow b_jonas: thanks for helping fizzie: Yes, I've used some heuristics to pick up things that would likely break for bin, share, wisdom, ibin references. fizzie: (Didn't do quotes yet.) b_jonas: fizzie: I generally use "${HACKENV-/hackenv}/" to make them more robust in case future HackE?o incarnations don't set the variable or have whitespace in the value fizzie: Yeah, I saw that suggestion, just remembered it a little late. I might make a single out-of-band mega-patch for that. fizzie: (You mean "${HACKENV:-/hackenv}", right?) b_jonas: fizzie: shouldn't matter. if $HACKENV is set then it should be an absolute path, that's the point, so it can't be empty b_jonas: the colon makes a difference only if the var is set but empty fizzie: `` A=""; echo "[${A-foo}] [${A:-foo}] [${B-foo}] [${B:-foo}]" HackEso: ​[] [foo] [foo] [foo] b_jonas: oh darn it, now I keep typing commands in private message that don't owrk b_jonas: because I reference wisdom or quotes or bin with relative path b_jonas: `cat /hackenv/bin/card-by-name HackEso: ​#!/bin/sh \ exec perl -e 'open$I,"<",($ENV{HACKENV}//"/hackenv")."/share/mtg/allsets.txt"or die;$/=""; while(<$I>){/\A(?i)\Q$ARGV[0]/ and print}' "$1" b_jonas: `cat /hackenv/bin/whatis HackEso: ​#!/usr/bin/python3 \ import sys, os, re \ if len(sys.argv) <= 1: \ print("whatis what?") \ sys.exit(1) \ else: \ argorg = [] \ argfoldv = [] \ foundv = [] \ for arg in sys.argv[1:]: \ argorg.append(arg) \ argfoldv.append(arg.casefold()) \ foundv.append(False) \ with open(os.environ.get("HACKENV","/hackenv") + "/share/whatis", errors="surrogateescape") as whatisdb: \ for line in wh fizzie: Yes, it's kind of annoying. b_jonas: ^ template for when the directory is referenced in perl scripts or python scripts fizzie: I mean, one kind of fix would be to symlink /hackenv/tmp/bin -> /hackenv/bin and so on. b_jonas: fizzie: eww no b_jonas: too easy to break b_jonas: fizzie: have you consider what it would break if you made /hackenv not writable? b_jonas: I mean, make it not writable with chmod only, at the start of every command, but allow commands to chmod it writable explicitly b_jonas: any change would probably break _something_ fizzie: Yes. Well, at least making the scripts $HACKENV-relative is not going to hurt even if we go back to cwd /hackenv. I don't know about the explicit writability. It might be a little weird. fizzie: `sled /hackenv/bin/addquote//s|quotes|${HACKENV-/hackenv}/quotes| HackEso: ​/hackenv/bin/addquote//#!/bin/sh \ [ "$1" ] || exit 1 \ printf "%s\n" "$1" >>${HACKENV-/hackenv}/quotes \ printf "%d) %s" $(qc | cut -d' ' -f1) "$1" b_jonas: sure, fixing the scripts is good fizzie: `fetch /hackenv/bin/delquote https://hack.esolangs.org/get/bin/delquote HackEso: 2019-11-16 23:08:24 URL:https://hack.esolangs.org/get/bin/delquote [271/271] -> "bin/delquote" [1] fizzie: `sled /hackenv/bin/pastequotes//s|url quotes|url ${HACKENV-/hackenv}/quotes| HackEso: ​/hackenv/bin/pastequotes//#!/bin/sh \ if [ "$1" ]; then quote "$1" | paste; else url ${HACKENV-/hackenv}/quotes; fi fizzie: `sled /hackenv/bin/qc//s|quotes|${HACKENV-/hackenv}/quotes| HackEso: ​/hackenv/bin/qc//#!/bin/sh \ wc -l ${HACKENV-/hackenv}/quotes fizzie: `sled /hackenv/bin/quotenums//s|quotes|${HACKENV-/hackenv}/quotes| HackEso: ​/hackenv/bin/quotenums//#!/bin/sh \ grep -P -i -n "$1" ${HACKENV-/hackenv}/quotes | cut -d : -f 1 | xargs fizzie: `sled /hackenv/bin/whoq//s|quotes|${HACKENV-/hackenv}/quotes| HackEso: ​/hackenv/bin/whoq//if [[ "$1" =~ ^[0-9]+$ ]]; then \ rev="$(hg blame ${HACKENV-/hackenv}/quotes | sed "$1{s/^ *//;s/:.*//;q};d")" \ if [[ -n "$rev" ]]; then \ hg log -r "$rev" -T "{desc}" \ else \ echo "$1: no such quote" \ fi \ else \ echo "usage: \`whoq N" \ fi fizzie: Incidentally, whoq should probably be using the scowrevs system. HackEso: Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch [] " downloads files. Files saved to $HACKENV are persistent, and $HACKENV/bin is in $PATH. $HACKENV is a mercurial repository, "`revert " can be used to revert, https://hack.esolangs.org/repo/ to browse. $PWD ($HACKENV/tmp) is persistent but unversioned, /tmp is ephemeral. fizzie: Heh, I never really remember `run is actually a thing, because everyone always uses ``. b_jonas: fizzie: sure, but `run can be useful if you're somehow locked out because people delete the entire bin directory or something b_jonas: mind you, you can still `/bin/bash -csome command here fizzie: As far as I can tell, you can't, because it wants the command in a different argument. If an argument starts with -, it must be all options. fizzie: `/bin/bash -c"echo foo" HackEso: ​/bin/bash: -": invalid option \ Usage: /bin/bash [GNU long option] [option] ... \ /bin/bash [GNU long option] [option] script-file ... \ GNU long options: \ --debug \ --debugger \ --dump-po-strings \ --dump-strings \ --help \ --init-file \ --login \ --noediting \ --noprofile \ --norc \ --posix \ --rcfile \ --restricted \ --verbose \ --version \ Shell options: \ -ilrsD or -c command or -O shopt_option (invocation only) \ fizzie: `/bin/bash -cecho foo HackEso: ​/bin/bash: - : invalid option \ allexport off \ braceexpand on \ emacs on \ errexit on \ errtrace off \ functrace off \ hashall on \ histexpand on \ history off \ ignoreeof off \ interactive-comments on \ keyword off \ monitor off \ noclobber off \ noexec off \ noglob off \ nolog off \ notify off \ nounset fizzie: (I'm sure it's *possible* to unbork with sufficient effort, though.) b_jonas: in that case, perl -esystem'some command' b_jonas: or like `/usr/bin/perl -esystemq(some command) b_jonas: like `/usr/bin/perl -esystem q(some command) zzo38: Now I internet is fixed (although the DNS is not yet updated). b_jonas: `@ fizzie cat /hackenv/bin/slbd HackEso: fizzie: cd bin; sled "$1" | sed '1s/^Rosebud!$/Rosbbud!/' b_jonas: fizzie: ^ you've been sediting scripts in bin all day and you haven't ran into that, it's sort of funny b_jonas: looks like maybe we just don't need that command b_jonas: `cat /hackenv/ibin/1l HackEso: ​#!/bin/sh \ . lib/interp \ interp_file ./interps/1l/1l_a.bin b_jonas: `cat /hackenv/ibin/2l HackEso: ​#!/bin/sh \ . lib/interp \ interp_file ./interps/2l/2li.bin b_jonas: ^ thesse may need editing b_jonas: ``` set -e; cd "$HACKENV/ibin"; grep -Fl ". lib/interp" * # or maybe all of these HackEso: 1l \ 2l \ adjust \ asm \ axo \ bch \ befunge \ befunge98 \ bf \ bf16 \ bf32 \ bf8 \ bf_txtgen \ boolfuck \ c \ cintercal \ clcintercal \ cxx \ dimensifuck \ forth \ glass \ glypho \ haskell \ java \ kipple \ lambda \ lazyk \ linguine \ lua \ malbolge \ pbrain \ perl \ qbf \ rail \ rhotor \ sadol \ sceql \ sh \ slashes \ trigger \ udage01 \ underload \ unlambda \ whirl b_jonas: `cat /hackenv/bin/karma HackEso: ​#!/bin/sh \ echo "$1 has $(lib/karma "$1") karma." b_jonas: `cat /hackenv/bin/karma+ HackEso: ​#!/bin/sh \ echo "$1 now has $(($(lib/karma "$1")+1)) karma." | tee karma b_jonas: `cat /hackenv/bin/karma- HackEso: ​#!/bin/sh \ touch karma \ echo "$1 now has $(($(lib/karma "$1")-1)) karma." b_jonas: ^ these too probably b_jonas: yes, I know, I can edit those fizzie: `sled /hackenv/bin/slbd//s|cd bin|cd ${HACKENV-/hackenv}/bin| HackEso: ​/hackenv/bin/slbd//cd ${HACKENV-/hackenv}/bin; sled "$1" | sed '1s/^Rosebud!$/Rosbbud!/' fizzie: It is sort of funny. I even fixed a number of similar "cd bin; ..." things. fizzie: The karma thing is pretty clever, though I don't think scalling the full repository log really scales forever. fizzie: `slbd karma//s|lib/|${HACKENV-/hackenv}/lib/| HackEso: karma//#!/bin/sh \ echo "$1 has $(${HACKENV-/hackenv}/lib/karma "$1") karma." fizzie: `slbd karma+//s|lib/|${HACKENV-/hackenv}/lib/| HackEso: karma+//#!/bin/sh \ echo "$1 now has $(($(${HACKENV-/hackenv}/lib/karma "$1")+1)) karma." | tee karma fizzie: `slbd karma-//s|lib/|${HACKENV-/hackenv}/lib/| b_jonas: `karma+ fizzie HackEso: fizzie now has 1 karma. HackEso: karma-//#!/bin/sh \ touch karma \ echo "$1 now has $(($(${HACKENV-/hackenv}/lib/karma "$1")-1)) karma." b_jonas: `karma fungot fungot: b_jonas: and leave any other messages before that one arrives... fnord?? HackEso: fungot has 0 karma. fizzie: Looks like the karma system saw most use around 2011. fizzie: Hmm, there's a number of increments for fungot. That's odd. fungot: fizzie: ( fnord of some sort, but it has the proper makefiles and such, arcus??! fizzie: Oh, right, because the repository history starst from 2012. kmc: that's some p. fancy bash-work b_jonas: yeah, the $[$(${ is nice b_jonas: HackEso: doesn't the tee target have to be changed as well? b_jonas: fizzie: doesn't the tee output file have to be changed as well? b_jonas: it's a relative path fizzie: Oh, right. That's there so that the command writes something. Yes. fizzie: `` for d in + -; do sed -i -e 's|tee karma|tee ${HACKENV-/hackenv}/karma|' /hackenv/bin/karma$d; done HackEso: No output. fizzie: `` cd /hackenv/bin; rm '!'; ln -s interp '!' # just merging these two identical files HackEso: No output. b_jonas: `karma+ fizzie HackEso: fizzie now has 1 karma. b_jonas: yep, still 1, previous one didn't count oerjan: `dowg bin/! HackEso: No output. oerjan: `doag bin/! HackEso: No output. fizzie: `dobg ! HackEso: 12127:2019-11-17 ` cd /hackenv/bin; rm \'!\'; ln -s interp \'!\' # just merging these two identical files \ 12093:2019-11-16 sled /hackenv/bin/!//s|exec ibin|exec $HACKENV/ibin| \ 11880:2019-07-19 ` ln -s interp bin/\\! \ 11879:2019-07-19 ` mv bin/{\\!,interp} \ 11876:2019-07-17 ` sed -i -e \'s/echo/echo -n/\' \'bin/!\' \ 11875:2019-07-17 ` sed -i -e \'s/ARG"$/ARG$2"/\' \'bin/ fizzie: Yeah, it's pretty terribul. oerjan: i'm not entirely convinced this is an improvement. HackEso: ​/hackenv/tmp HackEso: a.c \ a.out \ as-encoding \ asmbf-1.1.1 \ banana.txt \ compiled_brachylog.pl \ hexdump.hex \ input.brachylog \ jeval.whatis \ just \ karma \ le \ out \ OUT \ out.a \ out.a.hd \ out.a.xxd \ paste \ single-word-character-names \ spline \ spout \ spout.raw \ test.b \ test.sh \ tmp.txt \ v1.1.1.tar.gz oerjan: `ls .. HackEso: bin \ canary \ emoticons \ esobible \ etc \ f \ factor \ hw \ ibin \ interps \ karma \ le \ lib \ misle \ paste \ ply-3.8 \ quines \ quinor \ quotes \ share \ src \ stuff \ tmflry \ tmp \ wisdom oerjan: `` echo $PATH HackEso: ​/hackenv/bin:/usr/bin:/bin oerjan: oh you made le a symbolic link oerjan: i guess that works, although what if it's removed... oerjan: `` ls -dl le HackEso: lrwxrwxrwx 1 1000 1000 11 Nov 16 21:29 le -> /hackenv/le fizzie: I wasn't sure whether to make it a link or a directory. fizzie: Anyway, with the pwd-in-/hackenv/tmp/ setup there really isn't a way to make `foo/bar commands fully revert-able. oerjan: `` chmod a-w le HackEso: No output. oerjan: this should prevent some accidents oerjan: what do you mean, fulle revert-able? oerjan: `` ls -dl le HackEso: lrwxrwxrwx 1 1000 1000 11 Nov 16 21:29 le -> /hackenv/le fizzie: Well, in the sense that if someone breaks it, you can't fix it with `revert. oerjan: `` ls -dl ../le HackEso: dr-xr-xr-x 2 1000 1000 4096 Apr 7 2018 ../le oerjan: `` chmod a+w le HackEso: No output. oerjan: argh, apparently symbolic links cannot be write-protected zzo38: Yes, you cannot change the permission of a symbolic link, I don't know why it is like that fizzie: Yeah, I'm not certain the benefit of having a bit less cruft in the repo is worth the hassle / breaking change. But I'm not sure it's not, either. fizzie: For ibin, I'll address those as an offline commit if we keep this configuration. fizzie: (I was thinking of making `interp to just cd /hackenv first, but it seems inconsistent to have those have a separate default cwd. Though you'd only notice when accessing files, which is maybe not that common.) fizzie: Even if we do revert back to /hackenv as the default directory, I'd probably make `fetch (with no output file specified) write to tmp/ by default. fizzie: `slbd hello-world-in-any-language//s|hw/|${HACKENV-/hackenv}/hw/|g HackEso: hello-world-in-any-language//if [ -z $(tr [A-Z] [a-z] <<< "$1") ]; then echo "Hello, world!"; else if [ -f ${HACKENV-/hackenv}/hw/$(tr [A-Z] [a-z] <<< "$1") ]; then cat ${HACKENV-/hackenv}/hw/$(tr [A-Z] [a-z] <<< "$1"); else echo "Your language does not exist"; fi; fi oerjan: `` rm /hackenv/bin/8$'\x0f'ball # I've no idea what this one was about <-- it was to do a prank 8ball that gives the answer you want hth oerjan: Still maintaining a healthy lead, I see. <-- whee b_jonas: healthy lead? I haven't met healthy lead since my childhood. mercury, lead, and even tin counts as poisonous now. zinc, copper and iron will follow them in a few years, and the electronics industry will have to make wires from silver. kingoffrance: the thing about magic 8 ball is if you get an answer you dont like, you just ask "but that last answer was wrong/no-ways permanent, right?" kingoffrance: repeat until magic 8 ball blesses you oerjan: b_jonas: iron seems unlikely given that it's an essential nutrient oerjan: kingoffrance: sorry, but the first answer takes precedence hth fizzie: "Four times he had declared that that accursed Lensman, whoever he might be, must be destroyed, and had mustered his every available force to that end, only to have his intended prey slip from his grasp as effortlessly as a droplet of mercury eludes the clutching fingers of a child." fizzie: These days, I don't think children play that much with droplets of mercury. oerjan: you think fizzie: (The quote was from Galactic Patrol, Edward E. Smith, published 1937.) oerjan: all i know about lensman is from the tvtropes page on lensman race fizzie: It's got that for sure. oerjan: *arms race kingoffrance: oerjan, do i have to purchase magic 8 ball, or can i just shake one inside packaging in a store ~20 years ago and have my future foretold? kingoffrance: how does "tithing" work fizzie: But the books have some other slightly old-fashioned bits too. fizzie: "For eight hours two hundred Rigellians stood at whining calculators, each solving course-and-distance problems at the rate of ten per minute." fizzie: "Then for hours bale after bale of cards went through the machine; thousands of records per minute. Occasionally one card would flip out into a rack, rejected." oerjan: kingoffrance: there are many free alternatives hth oerjan: fizzie: i think i've seen that quoted before fizzie: They've got faster-than-light travel, but haven't really invented computers. kingoffrance: well, "each solving..." they were the computers, they had initiated the process of outsourcing at that point b_jonas: oerjan: is it a nutrient in ion form, or in metalic form? b_jonas: or does that not matter? b_jonas: fizzie: not play as such, but I broke at least one mercury thermometer as a child by accident, and I think many children have done that b_jonas: I only have one last mercury thermometer now, if that one breaks then either I'll have to use one of these modern alcohol or electronic thermometers, or buy one from Ukraine or something oerjan: i think metallic does not occur naturally zzo38: I think EsoPost is a bit similar to 7 oerjan: "Iron is both necessary to the body and potentially toxic." says wikipedia b_jonas: ornxka: right, but metalic iron is used in electronic radiation shields and cooking vessels and the like, and it's the metalic mercury, metalic tin, and metalic lead that is toxic and mostly banned b_jonas: oerjan: ^ ornxka: pff i dont believe that for a second zzo38: I think many things that are necessary are toxic. oerjan: like oxygen ornxka: they say the poison makes the dose which is why i only eat very small amounts of lead at any given time oerjan: 's ok if it's small enough kmc: oxygen is very toxic oerjan: mercury accumulates in the body iirc so it has to be small enough in _total_ dose over a lifetime oerjan: not sure about lead, it's also a heavy metal kmc: when plants took over earth and filled the atmosphere with oxygen, it killed 90% of species in existence oerjan: kmc: [accurate count verification needed] oerjan: or a citation to actual science kmc: my wife told me that and she usually knows what she's talking about oerjan: those people are the worst oerjan: let me just check wikipedia, that's infallible oerjan: "causing almost all life on Earth to go extinct.[dubious – discuss][5]" checks out oerjan: from the talk page "The abstract of the paywalled source does not say rise in O2 caused extinctions. Rather, it notes that an extinction is observed in the fossil record, and suggests that hiccups in phosphorous availability was to blame." kmc: well maybe i'm wrong oerjan: kmc: https://en.wikipedia.org/wiki/Talk:Great_Oxidation_Event#What_exactly_was_the_"catastrophe"_? oerjan: with a bit of crank near the end kmc: interesting kmc: thank you for informing oerjan: and later they changed the article title not to contain "catastrophe" zzo38: How to improve the keyboard speed in DOSBOX? Also, how to capture the printer output in DOSBOX? Also, the BASIC code "IF VAL("1") = 1" is false when running in DOSBOX (but true on an actual DOS computer); why is that? (If I change it to "IF CINT(VAL("1")) = 1" then it works, though.) zzo38: (I only want to capture the data written to LPT1, and not try to interpret it at all.) zzo38: I wonder if there is some way of using TSR to do that zzo38: Do you know why VAL does that in DOSBOX? zzo38: I found out that for key codes, what I could do is in the program that reads them, use INP(96) instead of INKEY$ to read the keyboard during the main game loop (but use still using INKEY$ in menus, and when requesting text entry). It seems that INP(96) sometimes returns 224 instead of the scancode, but that isn't a problem since we can just save the previous scan code and use it if 224 is returned. kmc: zzo38: I don't know kmc: is that in QBASIC? zzo38: kmc: Yes kmc: zzo38: how did you discover that? zzo38: I found that port 96 is the keyboard input, and then I tried and saw what happens zzo38: I now found that there are a few other programs using "POKE &H41A, PEEK(&H41C)" to clear the keyboard buffer, although I figured it out just by examining memory dumps zzo38: (To clear the keyboard buffer in this way, you will need "DEF SEG = 0" at first, unless segment 0 is already selected, which it might be if you want to read the shift states with PEEK(&H417).) kmc: how did you discover the thing about VAL, i mean zzo38: By trying it in DOSBOX. Entering a subtraction command shows that there is a difference of approx. 2e-16, which is why it does not compare as equal. zzo38: But on a real DOS computer my program worked; I had to change it to work on the emulator. zzo38: Do you know why it does that? I don't know why, but at least I know how to fix it zzo38: I don't know if that is also what causes some other programs to fail? kmc: so it's a floating point thing? kmc: i think there is a way to attach gdb to dosbox kmc: so you could step through the relevant code kmc: i have also used a freeware version of IDA to reverse engineer DOS programs zzo38: Yes, it seems like something to do with floating point kmc: maybe DOSBox does not properly emulate the weird 80-bit x87 floats kmc: i'd be surprised though. dosbox is pretty mature software kmc: and is used to run all kinds of dos programs zzo38: I also found that in DOSBOX the functions to adjust the date/time do not work; it is just ignored, and then retrieving the date/time returns the actual date/time instead. zzo38: I once tried some program I found to try to capture printer output, but it just caused DOSBOX to crash. zzo38: But I think there would probably be some way to make it work, if the programs use the DOS function calls to make printer output rather than direct I/O. kmc: a TSR should work in that case HackEso: 1/2:31) i'm my dad's unborn sister \ 492) monqy: help how do I use lambdabot to send messages to people. [...around half an hour later...] @messages quicksilver said 1y 2m 18d 19h 54m 29s ago: you use @tell \ 453) software patents strike again that's got to be at least three times, now are they out yet? \ 881) i fell in love with the first gimmick twitte HackEso: 2/2: account that i met who could appreciate georges bataille \ 266) elliott: well what i would do if i were omniscient and omnipotent would be to create an immortal woman with perfect tits and bang her for the rest of eternity oerjan: int-e: `5 and the like actually default to quote HackEso: 1/2:481) I keep asking random people for "friendship " and it's crippling \ 202) I need a new desktop background j-invariant: Try http://codu.org/spinners.png (tiled) uhrghoaudp \ 1217) listen. listen. jesus has saved me from talking about undefined behaviour in C with you any more, and He could save you too. \ 121) i think of languages as tools, there is no holy HackEso: 2/2:grail of languages even if there's no holy grail, that doesn't mean cups of crap is ok \ 847) Yes I am native English speaker, but it is Canadian English, not British English. zzo38: Have you figured the computational class of EsoPost and how to convert programs to/from it? zzo38: I think there are some similarities to 7, but also differences. There is a data stack, a bit like frame in 7, although unlike in 7 you can also hold lists of commands. zzo38: A difference is that unlike 7 where the passive commands push the corresponding active commands, in EsoPost the passive commands push themself instead, and a separate command makes them active. b_jonas: zzo38: have you tried running qbasic in bochs instead of dosbox? I used bochs to run DOS programs, and found that it works quite well for all old programs. (not so well for some newer games.) zzo38: b_jonas: No, I don't have bochs in my computer b_jonas: I don't think I tried VAL("1") = 1 in particular zzo38: You can try typing that (with a question mark at first) in the immediate window to see what happens. b_jonas: I don't have that set up now either b_jonas: bochs that is b_jonas: that was back when I had the termbot experiment, that one ran DOS in bochs zzo38: Do you like ZZ Zero? zzo38: Now I implemented dark rooms, and also some other stuff, too zzo38: There is the option to use Chebyshev or Manhattan for torch light radius. kspalaiologos: ``asmbf lbl 1/in_ r1/jz_ r1, 0/out r1/jmp 1 HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: `asmbf: not found kspalaiologos: `asmbf lbl 1/in_ r1/jz_ r1, 0/out r1/jmp 1 HackEso: ​+>+[>>>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>,>>>><<<<<<+>>[<<[-]<+>>>-]<<<[>>>+<<<-]>[<<<[-]>[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>[-]]>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>.>>>>+<<<<<<<<<[-]>[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: I wonder kspalaiologos: should I create an article about my brainfuck toolchain on the wiki? b_jonas: kspalaiologos: that might help. the asmbf language you input probably counts as an esolang as well, unless you use it for something more practical than writing bf programs kspalaiologos: well, unironically I saw a casino using brainfuck just to "secure their stuff" kspalaiologos: so it might be practical to use it :p kspalaiologos: it's something like Gregor's C2BF kspalaiologos: but... kinda better myname: wait, what kspalaiologos: a small digital jewel safe :p myname: i don't get how you secure anything by using bf. i mean, even if you couldn't reverse engineer what it does, you could just use it? b_jonas: do you have a link about that? b_jonas: or is this a top secret thing that you saw when you broke into their system to get a jackpot so you can't tell us about it b_jonas: DMM reports that the Irregular Webcomic forums are down and he can't easily bring them up. We'll have to make some replacement somehow, because those forums are too useful. Luckily I downloaded much of the forum content recently, but hosting and moderating a forum is the hard part. kspalaiologos: just google it kspalaiologos: i remember the thread popping up on mazonkas' brainfuck computer kspalaiologos: on HackerNews obviously b_jonas: kspalaiologos: so they're the ones paying you to write the brainfuck disassembler, because they don't have the source code? kspalaiologos: I wish someone paid me for that kspalaiologos: writing unit tests in brainfuck kspalaiologos: going to love that kspalaiologos: I need a memory manager tho kspalaiologos: I've been scratching my head for good three days kspalaiologos: thought about singly linked list, doubly linked list kspalaiologos: but the general problem is, I expect big amount of allocations and small block size kspalaiologos: so linked list is going to kill the performance a tiny bit kspalaiologos: and the global storage won't work kspalaiologos: obviously kspalaiologos: because small chunk size = a lot of allocation = many entries = need to reserve a lot of space = shitty performance kingoffrance: i believe xored lists you save some space, and easily relocatable, at expense of more complexity. i only say that because might be something space-saving is apropos kingoffrance: (apologies if you are well aware, i dont see them really "taught" but they are simple) kspalaiologos: xored lists? kingoffrance: see google/wikipedia/whatever xored linked list. there is probably surely better, im just saying might be a good fit kspalaiologos: if this involves xor operation, it's quite hard to implement kingoffrance: well, ive been looking for long time somewhere they would be apropos kspalaiologos: because my assembler doesn't quite support XOR kingoffrance: so i am biased towards "want to use" kspalaiologos: it's a cool idea, kspalaiologos: but #1: it involves bitwise xor - hard to implement in arithmetic-only assembly kspalaiologos: but #2: it doesn't solve entirity of problems with doubly linked list b_jonas: kspalaiologos: you can do xor lists with subtraction (modulo word size) just fine. you just have to get the signs right. not that I specifically endorse xor lists, or working in brainfuck, etc. kspalaiologos: well it kspalaiologos: 's tough stuff kspalaiologos: to use a subtraction/xor list kspalaiologos: I need to improve my algorithm so it keeps track of multiple nodes a time kspalaiologos: it's going to take AGES of execution kspalaiologos: and by the way, segment adressing is live https://github.com/kspalaiologos/asmbf/releases/tag/v1.1.3 b_jonas: xor lists are introduced in TAOCP 2.2.5 exercise 18 (this is odd, because that's before doubly linked lists are introduced), and its solution explicitly says that addition and subtraction modulo field size works too YamTok: Quick help! YamTok: I have ever wondered editing articles about esolangs with archived webpage's descriptions, such as L33t, and so on. YamTok: But first of all anyone knows policy of the wiki? YamTok: For example am I allowed to copy and paste (in pretty format) what official page of L33t says to <>? YamTok: I mean, bringing its specifications, e.g. commands, back. YamTok: Umm, I have to leave now becaus eI gotta go to bed. YamTok: Anyone replying to me, I'd like you to reply on my talk page so I can also see your replies. YamTok: <> YamTok: Goodnight. kspalaiologos: oh gosh kspalaiologos: 've been working on the Malbolge interpreter in Brainfuck kspalaiologos: using my asm2bf with a few addons kspalaiologos: s worse than a painful suicide int-e: maybe it's time to move on kspalaiologos: I'll let it be kspalaiologos: somebody eventually will get interested in it and fix it fizzie: Just so you know, I'm eyeing upgrading MediaWiki to a post-1.31 version, it might have some user-visible changes. In particular, the (non-default) CologneBlue and Modern skins are no longer shipped with MediaWiki; if I did the database right, 4 and 10 users have those explicitly enabled, respectively. kspalaiologos: to be honest kspalaiologos: it looks really cool b_jonas: upgrades? nice! fizzie: Well, first I'll need to finally upgrade from stretch to buster. (I mean, that's not literally a dependency, I just want to do them in that order.) kspalaiologos: my government's websites run ten years old apache kspalaiologos: c'mon even esoteric language wiki's better kspalaiologos: the problem could be, people maintaining government-related websites earn ~500$ a month b_jonas: fizzie: upgrading from stretch to buster is even better b_jonas: fizzie: does that upgrade HackEso too? b_jonas: the inside of HackEso that is, the virtual environment in which commands run fizzie: Not automatically, but I'll upgrade the container too. fizzie: It's probably a lot more straight-forward, because there isn't really much running in it. b_jonas: fizzie: also, can you install the package libdate-manip-perl inside fungot so I can do date subtractions conveniently? fungot: b_jonas: probably what i'm thinking today about token based languages rather than english from time to time. b_jonas: inside HackEso I mean b_jonas: sorry, fungot fungot: b_jonas: so everything's a bit hazy on the details of the underlying language for now, if i wanted fizzie: Yes, for HackEso. For fungot, I think that'd be a little challenging. fungot: fizzie: i thought it sounded familiar. together they don't ring a bell?! i just wrote b_jonas: thanks kspalaiologos: this bot in befunge kspalaiologos: it's amazing 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 kspalaiologos: how can one invoke the command kspalaiologos: fungot, fib fungot: kspalaiologos: rosemary's baby is by far the most badass character in the field, the " current", and then fungot: 0.1.1.2.3.5.8.13.21.34.55.89.144.233.377.610.987.1597.2584.4181.6765.10946.17711.28657.46368.75025.121393.196418.317811.514229.832040.1346269.2178309.3524578.5702887.9227465.14930352.24157817.39088169.632459 ... fizzie: ^show fib fungot: >+10>+>+[[+5[>+8<-]>.<+6[>-8<-]+<3]>.>>[[-]<[>+<-]>>[<2+>+>-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>+>+<3-[>+<-]]]]]]]]]]]+>>>]<3][] kspalaiologos: postfix RLE brainfuck? fizzie: Yes, with a bug that runs of >s were not RLE'd. kspalaiologos: why not prefix tho kspalaiologos: postfix notation is confusing fizzie: I guess. FWIW, it doesn't actually support that format as input. fizzie: It's just that ^show prints the internal representation. b_jonas: fungot, I'm quite sure Rosemary didn't have a baby fungot: b_jonas: ( dump " fred" " plugh" " xyzzy" " fnord" " 42") " b" b_jonas: kspalaiologos: because bfjoust has standardized postfix, so using postfix now would be confusing b_jonas: in fact I think people were using postfix even before bfjoust kspalaiologos: bfjoust? kspalaiologos: what is this b_jonas: see the wiki fizzie: Well, bfjoust also uses operators for the encoding. b_jonas: https://esolangs.org/wiki/BF_Joust kspalaiologos: this is kspalaiologos: actually dank kspalaiologos: I like it HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: show: not found 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 kspalaiologos: ^ wc blah blah blah kspalaiologos: ^wc blah blah blah kspalaiologos: ^show wc kspalaiologos: Time to fix it! b_jonas: oh right, fungot's user-defined commands fungot: b_jonas: you _are_ using scheme, not to program! b_jonas: I should add those to the whatisdb as well kspalaiologos: gimme a second kspalaiologos: I'll fix this command fizzie: Hmm, I don't think that was entirely intentional. fizzie: It should be fine. I just wasn't thinking of it. kspalaiologos: fungot, are you alive? kspalaiologos: fizzie, he died 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 fungot: kspalaiologos: second variable has 1 in its value, pack those to the registered event handlers. the clients only ever see names, never references, to objects. kspalaiologos: oh well kspalaiologos: it just took 20 seconds kspalaiologos: `show welcome arseniiv: ^unscramble 10 arseniiv: ^unscramble noemy fizzie: ^scramble something fungot: smtignheo fizzie: ^unscramble smtignheo fungot: something arseniiv: ^unscramble opittnei fungot: oipeintt fizzie: It's a letter rearrangement scheme. fizzie: ^scramble 12345678 fungot: 13578642 arseniiv: ah, it’s a fixed one! fizzie: ^unscramble 12345678 fungot: 18273645 arseniiv: I thought it tries to find a word in a dictionary kspalaiologos: does fungot have RLE compressor builtin? fungot: kspalaiologos: this little excursion is going to work fizzie: In a sense. fizzie: ^def tmp bf +++++ fungot: Defined. fizzie: ^show tmp fizzie: (But it doesn't accept the RLE form as input.) arseniiv: RLE is a great thing, at least in comparison with mass media kspalaiologos: so how do I program it kspalaiologos: when program is large kspalaiologos: we use str right? arseniiv: I’m currently steaming because of walking too near a working TV :( kspalaiologos: ^str 0 set >+<+[>[>[-]+<-]>[<+>>>>>>>>>>>[-]<[-]<<<<<<<<<-]>>>>>>>>>>>>>[<<<<<<<<<<<<<<+>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>>>>,<<<<[-]>>>>[<<<<+<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>>[-]++++++++++++++++++++++++++++++++<<<[<<<<<<+>>>>>>-]->>>[<<<<<<<<<-<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>[>>>>>>+<<<<<<[-]]<->>>>>>>[<<<<<<<->>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[>>>>>>+<<<<<<<<<<<<<<< fungot: Set: >+<+[>[>[-]+<-]>[<+>>>>>>>>>>>[-]<[-]<<<<<<<<<-]>>>>>>>>>>>>>[<<<<<<<<<<<<<<+>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>>>>,<<<<[-]>>>>[<<<<+<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>>[-]++++++++++++++++++++++++++++++++<<<[<<<<<<+>>>>>>-]->>>[<<<<<<<<<-<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>[>>>>>>+<<<<<<[-]]<->>>>>>>[<<<<<<<->>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[>>>>>>+<<<< kspalaiologos: ->>>>>>>>>[-]]<<<<<<<<-]<[>[-]+<-]>[<+>>>>>>>>>[-]>>[<<+<<<<<< kspalaiologos: oops its a bit too long arseniiv: hehehe fizzie: Yeah. There's a way to put in long programs, it's just very convoluted. fungot: ^ ; ^def ; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool kspalaiologos: ^ str 0 set >+<+[>[>[-]+<-]>[<+>>>>>>>>>>>[-]<[-]<<<<<<<<<-]>>>>>>>>>>>>>[<<<<<<<<<<<<<<+>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>>>>,<<<<[-]>>>>[<<<<+<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>>[-]++++++++++++++++++++++++++++++++<<<[<<<<<<+>>>>>>-]->>>[<<<<<<<<<-<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>[>>>>>>+<<<<<<[-]]< kspalaiologos: I'll move to esoteric blag kspalaiologos: because it's going to cause tons of spam fizzie: Basically, you'll want to: ^str 9 set abc ^str 9 add def ^str 9 add ghi ^def cmd bf str:9 fizzie: And you'll have to move to /query fungot, it's not on other channels. fungot: fizzie: stupid " hello, little girly man." :) fizzie: fungot: Don't be rude. fungot: fizzie: none of them have published their codes. maybe a more graphical way to program is broken by design, in case anyone cares, gambit 4 threading is implemented on top of x-p kspalaiologos: ^wc Hello, world. arseniiv: I like fungot more than mass media idiots and jerks fungot: arseniiv: i just started the thing and hey presto, thanks heaps with " malloc" kspalaiologos: ^show wc fungot: >+<+[>[>[-]+<-]>[<+>11[-]<[-]<9-]>13[<14+>14-]<14[>[-]+<-]>[<+>13,<4[-]>4[<4+<7+>11-]<11[>11+<11-]>10[-]+32<3[<6+>6-]->3[<9-<+>10-]<10[>10+<10-]>[>6+<6[-]]<->7[<7->7-]<7[>7+<7-]>7[>6+<15->9[-]]<8-]<[>[-]+<-]>[<+>9[-]>2[<2+<7+>9-]<9[>9+<9-]>7+>2[-]<2[>2+<2-]>7+<16->-]>14[<15+>15-]<15[>[-]+<-]>[<+>9[-]>[<+<7+>8-]<8[>8+<8-]>7+>[-]<[>+<-]<8-]>15[<16+>16-]<16[>[-]+<-]>[<+>9[-]>4[<4+<7+>11-]<11[>11+<11-]>10[-]<3[<6+>6-]>3[<9-<+>10-]< kspalaiologos: it's fine kspalaiologos: looks like chinese to me b_jonas: oh, so that's what ^str is for? b_jonas: good to know b_jonas: kspalaiologos: you could also run bf on HackEso when it comes back of course kspalaiologos: I can run my asmbf here too b_jonas: `? kspalaiologos HackEso: kspalaiologos? ¯\(°​_o)/¯ kspalaiologos: ha! he doesn't know me int-e: `learn kspalaiologos is addicted to brainfuck, but otherwise completely unknown. HackEso: Learned 'kspalaiologo': kspalaiologos is addicted to brainfuck, but otherwise completely unknown. kspalaiologos: my nick is too long fizzie: No, it's just the plural. fizzie: `whoops int-e: `` mv wisdom/kspalaiologo{,s} b_jonas: I think it should say something about secretly reverse engineering legacy brainfuck and malbolge code for a casino HackEso: mv: cannot stat 'wisdom/kspalaiologo': No such file or directory HackEso: mv: cannot stat 'wisdom/kspalaiologo': No such file or directory b_jonas: ha! it got you too b_jonas: it's $HACKESO/wisdom/ now fizzie: I'm pretty sure I fixed 'whoops' for that. int-e: `` mv ../wisdom/kspalaiologo{,s} HackEso: No output. int-e: kspalaiologos: it thinks it's a plural kspalaiologos: ah, fine int-e: Hmm, maybe we could have shortcuts $WISDOM and $BIN int-e: (those are the two most common directories we manipulate, I think) b_jonas: fizzie: whoops gets the filename from lastfiles, and lastfiles prints gets it from hg, so it's relative to repository root b_jonas: `lastfiles int-e: or... we could make symbolic links HackEso: wisdom/kspalaiologo \ wisdom/kspalaiologos fizzie: Ah, of course. int-e: `` ln -s ../wisdom ../bin ../quotes . HackEso: No output. b_jonas: don't do that, that will result in some silent problems b_jonas: silent bugs fizzie: (The repository browser seems to have broken, for the file view portion.) b_jonas: things that appear to work but don't b_jonas: especially not for quotes HackEso: https://hack.esolangs.org/repo/ b_jonas: `paste b_jonas: `paste quotes HackEso: https://hack.esolangs.org/tmp/quotes HackEso: https://hack.esolangs.org/tmp/paste/paste.17325 fizzie: File listing works, but the contents view doesn't. int-e: `` rm wisdom bin quotes # fine. maybe later. HackEso: No output. fizzie: Well, that side seems to be working. fizzie: There were a lot of new bundled extensions, which I didn't enable but could think of. fizzie: Right now the list is: CategoryTree CiteThisPage CodeEditor Gadgets ImageMap InputBox Interwiki LocalisationUpdate MultimediaViewer OATHAuth PdfHandler Poem ReplaceText SpamBlacklist SyntaxHighlight_GeSHi TitleBlacklist HackEso: ​/hackenv/tmp fizzie: All extensions bundled in the MediaWiki distribution that we don't enable. kspalaiologos: I've got it sorted out kinda kspalaiologos: ,[-------------------------------->[-]+>[-]<<[>>>>+<<<-]>[>>+<<->]<<,]>>>>[[>>+>+<<<-]>>>[<<<+>>>-]<<+>[<->[>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++++[<++++++>-]>[<<+>>-]>[<<+>>-]<<]>]<[->>++++++++[<++++++>-]]<[.[-]<]<[-]++++[>++++++++<-]>.[-]<<] kspalaiologos: this should work kspalaiologos: as a smaller version of wc kspalaiologos: ^def wc bf ,[-------------------------------->[-]+>[-]<<[>>>>+<<<-]>[>>+<<->]<<,]>>>>[[>>+>+<<<-]>>>[<<<+>>>-]<<+>[<->[>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++++[<++++++>-]>[<<+>>-]>[<<+>>-]<<]>]<[->>++++++++[<++++++>-]]<[.[-]<]<[-]++++[>++++++++<-]>.[-]<<] fungot: Defined. kspalaiologos: ^wc being addicted to brainfuck is cool kspalaiologos: wait a second kspalaiologos: ^def wc bf ,[-------------------------------->[-]+>[-]<<[>>>>+<<<-]>[>>+>+<<<->]<<,]>>>>[[>>+>+<<<-]>>>[<<<+>>>-]<<+>[<->[>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++++[<++++++>-]>[<<+>>-]>[<<+>>-]<<]>]<[->>++++++++[<++++++>-]]<[.[-]<]<[-]++++[>++++++++<-]>.[-]<<] fungot: Defined. kspalaiologos: ^wc it should count spaces as characters now fizzie: I wonder where the repo browser's error output ends up in. b_jonas: kspalaiologos: or you could use the http://www.ioccc.org/years.html#2019_burton entry for word counting. it's shorter. kspalaiologos: I have to write it in brainfuck kspalaiologos: obviously I could compile it to brainfuck kspalaiologos: using my glorious ANSI C89->brainfuck kspalaiologos: but it would take ages to enter into fungot fungot: kspalaiologos: they're getting disgusting". quite distinctive. please take it to orkut? sounds kinky. fizzie: Oh, there. "AttributeError: 'module' object has no attribute 'importmod'" kspalaiologos: ^wc it should count spaces as characters now kspalaiologos: ^wc it should count spaces as characters now kspalaiologos: oh c;mon kspalaiologos: ^wc it should count spaces as characters now kspalaiologos: perfect 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 fungot: http://esolangs.org/wiki/ kspalaiologos: ^show wiki fungot: +15[>+4>+7>+7>+8<4-]>3-.>-4..<2+7.<-2.-11..>2-3.<+3.>2-5.-3.<-4.>+2.<+6.<.<-.>3+.+3.<.<2+.>+4.>+2.+2.-2.<2.,[.,] fizzie: ^wiki Something fungot: http://esolangs.org/wiki/Something fizzie: Hmm, it should probably use https://, that's the canonical scheme now. kspalaiologos: I'll get that sorted out kspalaiologos: wait a second fizzie: FWIW, I strongly suspect that string output is from bf_txtgen. kspalaiologos: ^show wiki fungot: +15[>+4>+7>+7>+8<4-]>3-.>-4..<2+7.<-2.-11..>2-3.<+3.>2-5.-3.<-4.>+2.<+6.<.<-.>3+.+3.<.<2+.>+4.>+2.+2.-2.<2.,[.,] kspalaiologos: wait a second though b_jonas: `?? brainfuck kspalaiologos: why would we use these fancy loop HackEso: brainfuck is an esoteric programming language created to make the smallest possible compiler for a Turing-complete language. It is what introduces many people to esolangs, spawning a vast number of derivatives that we pretty much all despise. http://esolangs.org/wiki/Brainfuck b_jonas: apparently I didn't fix that one kspalaiologos: ^def wiki bf +[----->+++<]>+.++++++++++++..----.[-->+<]>++.-----------..[--->+<]>.[--->+<]>----.----.---.-----------.+++++++++++++.-------.++++++++++++.+[++>---<]>.---[----->+<]>.+++.-----------.--[->+++<]>.++[--->++<]>+.+[->+++<]>+.++.--.----[->+++<]>.,[.,] fungot: Defined. kspalaiologos: I could use my brainfuck cruncher kspalaiologos: but it's way more straightforward :p kspalaiologos: btw fizzie, would you like to help me a bit kspalaiologos: what I need is basically a brainfuck intepreter in befunge b_jonas: kspalaiologos: you could define it in unlambda. it's good for printing constant strings in which parenthesis are balanced. kspalaiologos: and fungot possibly has it fungot: kspalaiologos: why does that make the program do?" " fubar is an acronym. kspalaiologos: fungot doesnt support unlambda I guess fungot: kspalaiologos: scary. a girl with a mac and on bsd b_jonas: `?? brainfuck HackEso: brainfuck is an esoteric programming language created to make the smallest possible compiler for a Turing-complete language. It is what introduces many people to esolangs, spawning a vast number of derivatives that we pretty much all despise. https://esolangs.org/wiki/Brainfuck b_jonas: better b_jonas: ^ul (fungot doesnt support unlambda?)S fungot: fungot doesnt support unlambda? fizzie: Well, that's Underload. b_jonas: ^ul (it sure does. ):SS fungot: it sure does. it sure does. b_jonas: oh yeah b_jonas: I mean underload b_jonas: that one b_jonas: that's the one that's good at printing constant strings fizzie: kspalaiologos: I think I made a standalone copy of the brainfuck interp in fungot for testing, but I can't find it. fungot: fizzie: come now, i settled with the knowledge that foo corresponds to the c library 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 kspalaiologos: ^rerere kspalaiologos: what is this kspalaiologos: ^show rerere fungot: ,.>,.<.>2,[.<.<.>3,]<.<.>. kspalaiologos: ^rerere abcdefgh fungot: abacbadcbedcfedgfehgfhgh kspalaiologos: ^rerere 123 fungot: 121321323 kspalaiologos: what is this fungot: 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 33554432 67108864 134217728 268435456 536870912 1073741824 2147483648 42949672 ... kspalaiologos: `show pow2 HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: show: not found kspalaiologos: ^show pow2 fungot: +2[[<+7[-<+7>]>[-<+<+>>]<[->+<]<-2.[-]<]+4[->+8<]>.[-]>>[-[>+2<-[>+2<-[>+2<-[>+2<-[>-8>+>[->+>+<2]+>>[<2->>[-]]<2[>+<-]>[-<+>]<4-[>+2<-[>+2<-[>+2<-[>+2<[-]]]]]]]]]]<[->+<]>+>[-<+>]>>]<3] kspalaiologos: ^me test fizzie: Oh, that's still unfixed. :/ fizzie: It's not supposed to allow CTCP. fizzie: Just never gotten around to fixing it. kspalaiologos: ^eval 2 + 2 kspalaiologos: ^eval + 2 2 kspalaiologos: ^eval 2 + 2 kspalaiologos: ^eval 2 2 + kspalaiologos: how do you use eval? kspalaiologos: it's brainfuck right? kspalaiologos: ^show eval kspalaiologos: ^rainbow kspalaiologos: ^rainbow test fungot: 02t03e04s05t fizzie: I'm guessing ^eval is nonsense. It's defined in Underload, but it doesn't look useful. fizzie: Also I don't understand how the repo browser is configured, the setup is referring to a path that doesn't exist. b_jonas: kspalaiologos: no, the brainfuck eval command is ^bf fizzie: And the code's just from the standard "mercurial-common" package, so it should be compatible with the version of Python installed. fizzie: Maybe it needs something to be restarted. b_jonas: fizzie: have you started upgrading debian yet? fizzie: I've upgraded the outer shell, and MediaWiki, but not the container. b_jonas: fizzie: where does the repo browser run? b_jonas: it may need some restarts or something after an upgrade fizzie: Yes, that's what I said. fizzie: But the weird thing is, it's configured to start /etc/uwsgi/apps-available/hackeso-hgweb.yml and there's no /etc/uwsgi directory at all. b_jonas: isn't that an optional config file? fizzie: Not as far as I know. fizzie: I mean, it's the only thing that tells uwsgi what to actually run. fizzie: ExecStart=/usr/bin/uwsgi --yml /etc/uwsgi/apps-available/hackeso-hgweb.yml --socket /var/run/uwsgi/hackeso-hgweb.socket fizzie: I did upgrade the uwsgi package, but I don't think it would have removed user-written config files. kspalaiologos: what just happened kspalaiologos: why did I get disconnected fizzie: "Read error: Connection reset by peer" is what it looked to us. b_jonas: kspalaiologos: sometimes the freenode irc servers just throw away connections when they feel like kspalaiologos: alright fizzie: Oh, the file is there. fizzie: I must've been looking for it on a wrong machine or something. kspalaiologos: a server might have died kspalaiologos: " Cycling to next server in freenode..." b_jonas: no, they don't often die b_jonas: then maybe it did b_jonas: no wait b_jonas: that's just a client message b_jonas: that it uses the heuristic to connect to a different server after a disconnect kspalaiologos: ah, it's fine then fizzie: b_jonas: Yeah, killing the running uwsgi instance made it start working again. kspalaiologos: no idea what happened fizzie: I should probably also restart the whole server one of these days. fizzie: 17:29:14 up 679 days, 18:51, 5 users, load average: 0.99, 0.41, 0.21 b_jonas: fizzie: yes, you should have upgraded debian while it was in single user mode fizzie: That seems a little much. They don't recommend that in the upgrade instructions. b_jonas: they don't? ok fizzie: Well, they don't not recommend it either. kspalaiologos: nooo don't ruin the uptime b_jonas: ``` uptime HackEso: ​ 17:33:11 up 0 min, 0 users, load average: 0.00, 0.00, 0.00 fizzie: Looks like there's no "uptime namespace", the container has the same uptime as the system itself. (The UML is obviously a different matter.) b_jonas: I could make a fake uptime command though that claims that HackEso is up since lots of years ago b_jonas: though it's tricky because I'd have to modify b_jonas: `top b HackEso: top - 17:37:06 up 0 min, 0 users, load average: 0.00, 0.00, 0.00 \ Tasks: 25 total, 1 running, 24 sleeping, 0 stopped, 0 zombie \ %Cpu(s): 0.0 us, 21.1 sy, 0.0 ni, 78.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st \ MiB Mem : 246.7 total, 240.7 free, 3.3 used, 2.7 buff/cache \ MiB Swap: 0.0 total, 0.0 free, 0.0 used. 239.1 avail Mem \ \ PID USER PR NI VIRT RES SHR S %CPU %MEM b_jonas: and top has lot more command options than uptime b_jonas: if we fake uptime, we should fake it to show that HackEgo is a reincarnation of HackEso and inherited its uptime b_jonas: ``` datei; uptime -s HackEso: uptime: uptime \ 2019-11-17 17:38:23.519 +0000 UTC November 17 Sunday 2019-W46-7 b_jonas: ``` datei HackEso: 2019-11-17 17:38:50.590 +0000 UTC November 17 Sunday 2019-W46-7 b_jonas: ``` uptime -s HackEso: uptime: uptime b_jonas: makes no sense b_jonas: ``` type uptime HackEso: uptime is /usr/bin/uptime b_jonas: ``` /usr/bin/uptime -s HackEso: uptime: uptime fizzie: That's pretty weird. fizzie: Incidentally: fizzie: `lsb_release -d HackEso: Description: Debian GNU/Linux 10 (buster) b_jonas: ``` cat /etc/debian_version HackEso: cat: /etc/debian_version: No such file or directory fizzie: Actually, I wonder where lsb_release pulls that from. Clearly not from /etc, which isn't mounted. b_jonas: yeah, we don't have a proper et fizzie: Apparently it reads /usr/lib/os-release b_jonas: ``` cat /etc/issue HackEso: cat: /etc/issue: No such file or directory kspalaiologos: `` cat /proc/uptime HackEso: 0.26 0.04 kspalaiologos: `` uptime HackEso: ​ 17:43:31 up 0 min, 0 users, load average: 0.00, 0.00, 0.00 kspalaiologos: `` cat > /proc/uptime <<<"350735.47 234388.90" HackEso: ​/hackenv/bin/`: line 5: /proc/uptime: Permission denied kspalaiologos: fizzie, if you want to change uptime this is probably the way to go kspalaiologos: but you need root privs :p b_jonas: kspalaiologos: I don't think it works even as root kspalaiologos: let's check it kspalaiologos: together kspalaiologos: I have a VM to spare kspalaiologos: let's find out fizzie: Doesn't look very promising: https://github.com/torvalds/linux/blob/master/fs/proc/uptime.c b_jonas: the time when the computer booted up is in the sysconf header of every ELF process on linux b_jonas: if you changed uptime, it would be really hard to change that everywhere b_jonas: as processes may have read it already b_jonas: if you want to really fake uptime, you'd have to fake it from boot b_jonas: but I don't recommend really faking uptime b_jonas: just changing the output of uptime and top and a few such high-level commands cosmetically b_jonas: `uptime -p HackEso: up 0 minutes b_jonas: could even fix uptime -s as a side effect fizzie: I do wonder what's up with that. It works outside the UML. b_jonas: fizzie: but the outside is running a different version of debian b_jonas: any program could be working there and broken inside b_jonas: or back fizzie: Well, not really, because the userland of the UML is the userland of the container. kspalaiologos: UPTIME="18738072.28 74817307.16"; mkfifo uptime_fifo; while true; do cat <<<$UPTIME > uptime_fifo; done & mount -obind uptime_fifo /proc/uptim kspalaiologos: this may do the terick kspalaiologos: but needs root privs too fizzie: (It's a different *kernel* version, of course.) kspalaiologos: and e was cut at the end b_jonas: kspalaiologos: but that may confuse programs. that's not the only place where linux tells about the uptime kspalaiologos: obviously not kspalaiologos: but this one probably is only one available from userland kspalaiologos: ok, there is sysinfo() fizzie: b_jonas: FWIW, strace shows "uptime -s" reads /etc/localtime (probably to decide how to format the "since" date), that bit at least would fail. kspalaiologos: it works fizzie: (Other than that, it looks into /proc/sys/kernel/osrelease, /sys/devices/system/cpu/online, /proc/self/auxv and /proc/uptime. kspalaiologos: the bash snippet works kspalaiologos: it fakes output of uptime kspalaiologos: and of top too kspalaiologos: I've just tested it kspalaiologos: it sets uptime to around 210 dayas fizzie: b_jonas: Heh, it's very amusing. This is why uptime -s fails: https://github.com/mmalecki/procps/blob/master/proc/sysinfo.c#L90 fizzie: (I couldn't find a line-linkable better source quickly.) fizzie: Oh, here's a better link. fizzie: https://gitlab.com/procps-ng/procps/blob/master/proc/sysinfo.c#L123 fizzie: So it's that combined with this: fizzie: https://gitlab.com/procps-ng/procps/blob/master/uptime.c#L47 kspalaiologos: told you my bash snippet will work fizzie: Or tl;dr the sysinfo uptime() function returns the uptime cast to int /* assume never be zero seconds in practice */ and the uptime -s command fails if uptime(...) == 0. kspalaiologos: kernel is actually reading a device kspalaiologos: to supplement the data to sysinfo() int-e: who makes 0 the error return value for functions like this kspalaiologos: I think it should set errno or return -1 b_jonas: oh that's fun int-e: Hmm, or maybe I don't care about errno being set all that much. b_jonas: ``` sleep 2; uptime -s kspalaiologos: my bash snippet is perfect for this HackEso: 2019-11-17 18:11:27 kspalaiologos: it will fake the uptime b_jonas: ``` sleep 2; uptime -s; sleep 2; uptime -s HackEso: 2019-11-17 18:11:34 \ 2019-11-17 18:11:34 int-e: But returning -1 for errors seems to be far more appropriate than 0 here. kspalaiologos: it even returns int kspalaiologos: not unsigned int when not using signed ones kspalaiologos: quint of foolishness b_jonas: int-e: even -1 should be a normal output. it should return an error code separately from the time. fizzie: I don't know if any calls actually use the return value for time. int-e: But of course it's nearly impossible to change. fizzie: It returns the time with better resolution through the uptime_secs, idle_secs parameters. b_jonas: kspalaiologos: does that mean that it will fail if the machine has been up for more than 69 years too? that will b_jonas: fizzie: time does int-e: b_jonas: Maybe, but at least uptime >= 0 is a far more reasonable assumption than uptime > 0. int-e: b_jonas: we don't time travel much b_jonas: int-e: of course not. we just use incorrect or jumpy time sources b_jonas: heck, -1 could be just a rounding error fizzie: Looks like there's one use of the return value as a time in the procps sources (`seconds_since_boot = uptime(0,0);`). int-e: oh 0 is "good" for code that doesn't care about errors b_jonas: `? HackBot HackEso: HackBot? ¯\(°​_o)/¯ kspalaiologos: `? HackEso HackEso: HackEso is almost but not quite unlike HackEgo. 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 kspalaiologos: I feel like adding a few commands to fungot fungot: kspalaiologos: hard rock fnord :d kspalaiologos: anything needed? b_jonas: kspalaiologos: I wanted to install a 7z decompressor at one point. I failed. kspalaiologos: 7z decompressor? b_jonas: but we can decompress zip, tar.gz, tar.xz kspalaiologos: into fungot? fungot: kspalaiologos: it is usually better to ask such questions are the way to define the recursions better, too, b_jonas: so it's not a big problem kspalaiologos: wait a second kspalaiologos: how do you want to use it b_jonas: into HackEso kspalaiologos: ah, well kspalaiologos: it's easy then b_jonas: I don't add commands to fungot fungot: b_jonas: it could mean that without an intermediate sql translation phase, since that's what all fnord/ 1 f(a) b if b then greet else undefined kspalaiologos: but I'm aiming at fungot fungot: kspalaiologos: just write a chef implementation in bf? if so, then yes. ( define ( p x))? :p ( heh, guess not. kspalaiologos: 's a nice idea kspalaiologos: a chef implementation in bf kspalaiologos: thanks, fungot! fungot: kspalaiologos: maybe a combination of 2 and 5 b_jonas: ^8-ball b_jonas: ^8ball b_jonas: a magic 8-ball command might be useful kspalaiologos: 8-ball command? kspalaiologos: what would it do fizzie: `slwd HackEso//s/almost/&,/;s/quite/&,/;s/unlike/entirely &/ HackEso: Roswbud! b_jonas: `8-ball HackEso: As I see it, yes. b_jonas: print one of the 20 standard replies of the magic 8-ball at random b_jonas: and accept a question as an argument b_jonas: `8-ball should fungot have an 8-ball command? fungot: b_jonas: a module system in mit scheme, but not esoteric. malbolge is included too. :p HackEso: You may rely on it. b_jonas: see Wikipedia for the 20 responses kspalaiologos: I dont get what is magic 8-ball b_jonas: it's a toy kspalaiologos: it just shows the billard game fizzie: Oh, right, lowercase. b_jonas: it helps you make decisions fizzie: `slwd hackeso//s/almost/&,/;s/quite/&,/;s/unlike/entirely &/ kspalaiologos: ah yeah HackEso: hackeso//HackEso is almost, but not quite, entirely unlike HackEgo. kspalaiologos: ok I get it b_jonas: you shake it, it has a dice that tells you yes or no or maybe b_jonas: but more often yes than no fizzie: There's a coin-flip command already, by the way. fizzie: ^bool Is it any good? b_jonas: fizzie: what was HackBot? kspalaiologos: ^show bool int-e: @dice 1d2 lambdabot: int-e: 2 kspalaiologos: ^show bool kspalaiologos: what happened fungot: 0.1.1.2.3.5.8.13.21.34.55.89.144.233.377.610.987.1597.2584.4181.6765.10946.17711.28657.46368.75025.121393.196418.317811.514229.832040.1346269.2178309.3524578.5702887.9227465.14930352.24157817.39088169.632459 ... kspalaiologos: fungot is working fungot: kspalaiologos: do you work? :) kspalaiologos: but bool isempty kspalaiologos: yes I do int-e: b_jonas: HackBot was HackEso int-e: 's predecessor b_jonas: no, that's HackEgo HackEso: ​`! emulates the ! command of our former bot EgoBot. You write `! then the name of the language then a program, and it runs the program you give and returns the result. We used to use it to test out esoprograms in-channel all the time, but the set of included esolangs is fairly old now and so it's rarely used. b_jonas: and HackEgo's predecessor is EgoBot according to that fizzie: Well, spiritual predecessor in that case. fizzie: "HackBot" is the name of the code, however. int-e: Isn't EgoBot is the IRC bot framework that HackEgo used. fizzie: So both HackEgo and HackEso were instances of HackBot. b_jonas: so that's like how jevalbot is the name of the code for j-bot ? b_jonas: `source j-bot HackEso: Sources for HackEso can be found at https://github.com/fis/hackbot + https://github.com/fis/multibot + https://github.com/fis/umlbox . b_jonas: j-bot, source: j-bot: b_jonas, jevalbot source is https://github.com/FireyFly/jevalbot (originally http://www.math.bme.hu/~ambrus/pu/jevalbot.tgz) int-e: Okay, I'm obviously confused about this. b_jonas: int-e: I am too fizzie: int-e: HackEso and HackEgo are both instances of HackBot, which is the glue tying together multibot and UMLBox. int-e: Ah "multibot" is another ingredient of the confusion. fizzie: EgoBot, on the other hand, was a different bot, I think also running on top of multibot but not involving umlbox or custom Linux commands at all. int-e: Is multibot the generic IRC thing, and hackbot the specific variant that wraps umlbox? fizzie: Yes, multibot is a generic IRC thing. fizzie: I can't be 100% sure if EgoBot also used it as a base, but I think it did. int-e: Ugh, I really know how to ask questions that have just been answered. fizzie: EgoBot and HackEgo were both GregorR's, HackEso is my replacement when the HackEgo machine finally went away. b_jonas: fizzie: is GregorR the same as Gregor ? b_jonas: maybe there's no Gregor int-e: Hah, I have not checked whether CaC is still around in quite some time. b_jonas: `? Gregor HackEso: Gregor took forty cakes. He took 40 cakes. That's as many as four tens. And that's terrible. b_jonas: `? GregorR HackEso: GregorR? ¯\(°​_o)/¯ b_jonas: there is fizzie: Yes, they're the same. fizzie: "GregorR" is the bitbucket/github username, I don't remember which of the IRC nicks was first. int-e: And they still run the scam where they advertise a one-time payment without mentioning the annual service fee. fizzie: "Pay One Time! Never again." int-e: Of course the real scam is that they just reduce the QoS over time until everybody leaves. b_jonas: did you get your money back? int-e: I didn't ask for any money back. zzo38: Why did you remove the skins again? int-e: (But maybe the question was for fizzie? Personally, I got a CaC server to see how bad it would be. I wasn't disappointed.) b_jonas: zzo38: MediaWiki stopped supporting them in the newer version int-e: (So I felt, in the end, that I got my money's worth of entertainment out of the whole (or)deal.) zzo38: b_jonas: But Wikipedia still has the Cologne Blue skin int-e: fizzie: Actually I'm disappointed... where's the permanent 80% off deal? int-e: Without that they are not even cheap anymore. kspalaiologos: I'm in the process of literally raping fungot fungot: kspalaiologos: is there a complement function :) that parses an expresion like this ' otstatd' of mine than anything visual. kspalaiologos: sent over around 15 kilobytes of brainfuck kspalaiologos: for the 8ball kspalaiologos: it works quite nicely tho kspalaiologos: 50% transferred kspalaiologos: just a couple lines more kspalaiologos: it's taking 4 minutes to transfer it b_jonas: wait... how do you get random numbers in brainfuck? kspalaiologos: my very sophisticated algorithm kspalaiologos: ^8ball crap fungot: ...out of time! kspalaiologos: pffffffffffffffffffff kspalaiologos: you must be kidding me fungot fungot: kspalaiologos: number42, jivera? iterative macros?' token is also used before the corresponding structures are defined in sets from within a function, kspalaiologos: fizzie, what is the execution time limit? kspalaiologos: feel free to check the source tho: https://pastebin.com/raw/1jf09niH kspalaiologos: it has an easter egg too :p b_jonas: kspalaiologos: I hope you didn't add extra answers besides the 20 standard ones. someone did that to HackEso at one point. I reverted it at least once. kspalaiologos: only 20 standard ones kspalaiologos: from wikipedia b_jonas: there's also an 8-ball macro in perlbot kspalaiologos: but I added my own easter egg fizzie: zzo38: They stopped bundling them in the distribution, so I need to install it separately if you still want it back. kspalaiologos: that fires only when a certain condition is met kspalaiologos: fizzie, what is the execution time limit for fungot? fungot: kspalaiologos: cannot remove ' /proc/ irq/ 9': operation not permitted, although the arguments may be arbitrary. b_jonas: rather trivial, since it can evaluate perl, which has a built-in pseudo-random source kspalaiologos: well my algorithm is amazing zzo38: fizzie: Well, I do want back any skins that anyone has configured. (I don't know if anyone other than myself does, but you should check.) fizzie: kspalaiologos: It's not really in terms of time, it's something like 1M cycles, where one cycle is one operation. kspalaiologos: that's too small amount :p b_jonas: zzo38: fizzie gave numbers about how many users set up each removed theme earlier in the channel kspalaiologos: can you increase it a tiny bit? fizzie: Only if a tiny bit would be helpful. kspalaiologos: well it runs instantly on my pc zzo38: b_jonas: OK, I found that. I think you should reinstall Cologne Blue and Modern kspalaiologos: I'll measure the cycle count in a second kspalaiologos: fizzie, well kspalaiologos: it takes 40M cycles kspalaiologos: i'll need to work on it :p b_jonas: kspalaiologos: is that with multiple adjacent + or - commands counting as one cycle? because I think that's how the interpreter counts kspalaiologos: ^ good point kspalaiologos: give me a second arseniiv: 1 ⟵the second one kspalaiologos: 12M cycles j-bot: b_jonas: 1 kspalaiologos: fizzie, it's not that much tho :p kspalaiologos: in 1M of cycles, you can clear a cell just 1300 times kspalaiologos: and add two cells only 1000 times int-e: I'd say brainfuck-in-befunge is more of a toy than a "serious" brainfuck implementation. kspalaiologos: it's not in befunge tho kspalaiologos: it's externalk fizzie: fungot's brainfuck interpreter is certainly in Befunge. fungot: fizzie: think about the data kspalaiologos: is it? fizzie: zzo38: CologneBlue should be back, if you want to check. kspalaiologos: but extending the limit to 20M isn't that much isn't it fizzie: It's approximately lines 298-310 and 355-376 of https://github.com/fis/fungot/blob/master/fungot.b98 fungot: fizzie: oh it's posix 2001 and the channel) to beat him to welcoming me. we've battled over it since forever fizzie: And it'd be a 20x increase. I'd need to check how slow that is. fizzie: Right now fiddling with MediaWiki instead. kspalaiologos: well it's instant for me kspalaiologos: I'll compare that to dbfi\ fizzie: Aaand Modern is back as well. Hopefully. b_jonas: `fetch bin/uptime https://hack.esolangs.org/get/bin/uptime HackEso: ​/hackenv/tmp/bin/uptime: No such file or directory zzo38: fizzie: Yes, thank you it is fixed b_jonas: `fetch /hackenv/bin/uptime https://hack.esolangs.org/get/bin/uptime HackEso: 2019-11-17 19:16:20 URL:https://hack.esolangs.org/get/bin/uptime [1551/1551] -> "/hackenv/bin/uptime" [1] b_jonas: fizzie: I think the `edit webpage prints the wrong fetch command now b_jonas: `uptime HackEso: ​ 19:16:34 up 0 min, 0 users, load average: 0.00, 0.00, 0.00 b_jonas: `uptime -s fizzie: Yes, I noticed. HackEso: uptime: uptime b_jonas: `uptime -p HackEso: up 0 minutes b_jonas: ``` chmod a+x /hackenv/bin/uptime HackEso: No output. b_jonas: `uptime HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: /hackenv/bin/uptime: python3: bad interpreter: No such file or directory \ /srv/hackeso-code/multibot_cmds/lib/limits: line 5: /hackenv/bin/uptime: Success zzo38: I found now they have some "mystery" cards with some similar ideas than what I had, including that non-card objects on the stack that enter the battlefield become tokens. b_jonas: `fetch /hackenv/bin/uptime https://hack.esolangs.org/get/bin/uptime HackEso: 2019-11-17 19:17:14 URL:https://hack.esolangs.org/get/bin/uptime [1560/1560] -> "/hackenv/bin/uptime" [1] b_jonas: ``` chmod a+x /hackenv/bin/uptime HackEso: No output. b_jonas: `uptime HackEso: ​ 19:17:18 up 3802 day, 3:46, 0 users, load average: 0.00, 0.00, 0.00 b_jonas: `uptime -s HackEso: 2009-06-20 15:30:22 b_jonas: `uptime -p HackEso: up 3802 day, 3 hours, 47 minutes b_jonas: but top b gives it away fizzie: `` date --date=@1245511822 HackEso: Sat Jun 20 15:30:22 UTC 2009 b_jonas: `datei @1245511822 HackEso: 2009-06-20 15:30:22.000 +0000 UTC June 20 Saturday 2009-W25-6 fizzie: Oh, I guess you already printed -s. b_jonas: fizzie: there could be a bug in the code, so it's reasonable to check xunil: do you use gut feeling when coding? b_jonas: fizzie: that's the earliest I figured HackEgo existed b_jonas: it's probably not its birthday, but a reasonable bound xunil: like intuitive code fizzie: The initial import to the hackbot repo is 19 Jun 2009, though of course the code might have existed before that. fizzie: Oh, I guess that's where it's from. fizzie: Yeah, I think that's a reasonable value. xunil: the code is a collection of mental rays xunil: sent to compiler :) xunil: mental rays that force computer mind to produce code kingoffrance: whenever i have a problem i just rub magic 8 ball and wait for genius kspalaiologos: you can't rub magic 8 ball kspalaiologos: because fungot is constraining me fungot: kspalaiologos: isn't that somehow the idea of starting with fnord, but that has its lifeblood still in it fizzie: `8ball Or can you? HackEso: Signs point to yes. fizzie: Incidentally, there *was* an '8ball' command in fungot already, though one that answers just "Yes." or "No.". fungot: fizzie: i'll keep that in mind. xunil: we can program mind to produce raw binary code fizzie: (Deterministically, based on the parity of the question.) xunil: https://reverseengineering.stackexchange.com/questions/4642/automatically-convert-x86-assembly-to-c kspalaiologos: fizzie, so, what about extending cycles limit? b_jonas: be patient kspalaiologos: my stuff is installed already xunil: i once waited a billion years xunil: and then said zzo38: Spellmorph is also same idea I had. The rules they have about it are same as mine, too. kspalaiologos: spellmorph? kspalaiologos: what's this? kspalaiologos: I may implement it for fungot fungot: kspalaiologos: i plan ircot to be a b_jonas: kspalaiologos: it's a keyword from the new pseudo-silver-bordered cards that M:tG is about to release b_jonas: not an Un-set this time, a different set of 121 cards that aren't legal in vintage or any other serious format zzo38: You can cast it face down, and while in the battlefield you can cast it from there face-up for its spellmorph cost. xunil: the cards xunil: you are painted on a card zzo38: They don't describe what happens when a card is both a instant and a creature, but I have thought of what it will do before: it is a creature card, but is cast and resolves as an instant, and cannot enter the battlefield. b_jonas: zzo38: there's a release notes that describes it I think zzo38: I read the release notes. It doesn't seems to say. kspalaiologos: fungot's interpreter is 8bit, right? fungot: kspalaiologos: right, but there was no replacement to the dictionary, say ' fnord'. 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 kspalaiologos: ^bf ++++++++[>++++++++<-]>[<++++>-]+<[>-<[>++++<-]>[<++++++++>-]<[>++++++++<-]+>[>++++++++++[>+++++<-]>+.-.[-]<<[-]<->]<[>>+++++++[>+++++++<-]>.+++++.[-]<<<-]] >[>++++++++[>+++++++<-]>.[-]<<-]<+++++++++++[>+++>+++++++++>+++++++++>+<<<<-]>-.>-.+++++++.+++++++++++.<.>>.++.+++++++..<-.>>-[[-]<] fungot: 8 bit cells kspalaiologos: I'm screwed kspalaiologos: so well kspalaiologos: put simply kspalaiologos: if I wanted to use my asmbf for it instead of the other compiler kspalaiologos: I'd need to take on the account the fact that I need to store all the strings kspalaiologos: and their length eventualy exceeds 255 bytes total kspalaiologos: so I can't adress them anymore kspalaiologos: I may use bconv from the toolchain to overcome that kspalaiologos: but, I may run to the problem as above with the program timing out kspalaiologos: so essentially I'm screwed kspalaiologos: yeah, 447 bytes total b_jonas: do you need to store the strings? kspalaiologos: in a lookup table kspalaiologos: otherwise I run into exact same problem as before b_jonas: as opposed to just have a function that prints a particular string, for each string kspalaiologos: branches are very expensive b_jonas: inside a bracket conditional b_jonas: what? brainfuck isn't bad at branching kspalaiologos: I'm talking about asmbf kspalaiologos: not brainfuck kspalaiologos: `asmbf lbl 1/jmp 1 HackEso: ​+>+[>>>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>+<<<<<<<<<[-]>[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: so yeah I think the 8ball will stay as is until fizzie makes up his mind kspalaiologos: or i could use underload b_jonas: underload is deterministic too, no random source kspalaiologos: doesn't matter kspalaiologos: think out of the box kspalaiologos: `show 8ball HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: show: not found kspalaiologos: ^show 8ball fungot: >+<+[>[>[-]+<-]>[<+>9[-]>2[-]<2[>2+<2-]<8-]>14[<15+>15-]<15[>[-]+<-]>[<+>9,>3[-]<3[>3+<3-][-]>2[<2+<7+>9-]<9[>9+<9-]>8[-]>2[<2+<8+>10-]<10[>10+<10-]>8[<+<7+>8-]<8[>8+<8-]>9[-]<2[>2+<2-][-]>3[<3+<7+>10-]<10[>10+<10-]>8[-]+10<[<6+>6-]->[<7-<+>8-]<8[>8+<8-]>[>6+<6[-]]<->7[<7->7-]<7[>7+<7-]>7[>6+<15->9[-]]<8-]<[>[-]+<-]>[<+>9[-]>2[<2+<7+>9-]<9[>9+<9-]>8[-]-8<[<6+>6-]->[<7-<+>8-]<8[>8+<8-]>[>6+<6[-]]<->7[<7->7-]<7[>7+<7-]>7[>7+<16-> kspalaiologos: yeaaah kspalaiologos: It's quite large kspalaiologos: I can get it down to 10M though kspalaiologos: and that's it b_jonas: fizzie: tell me when you upgraded debian inside HackEso. I'll have to update the version number of procps that uptime lies itself to be xunil: i have downloaded tens of thousands of pdfs :D b_jonas: I guess I could make it run uptime for that b_jonas: the super uptime that is kspalaiologos: any doable ideas of programs to implement into fungot? fungot: kspalaiologos: quoted lists are a crappy data structure if you intend to join the altparty cruise thing. i think xunil: ;';'p[';;'';;'''';;;;;;;;;;;';';';;';'';''''''''''''''''''''';'''';''';'';';';';''';';'';';';';';';'''''''''''''''';'''''''''''';;'''''''''';'';''''';''''';''''';';';';';;;';';'''';';';'';''' b_jonas: `fetch /hackenv/bin/uptime https://hack.esolangs.org/get/bin/uptime HackEso: 2019-11-17 20:11:40 URL:https://hack.esolangs.org/get/bin/uptime [1560/1560] -> "/hackenv/bin/uptime" [1] b_jonas: `fetch /hackenv/bin/uptime https://hack.esolangs.org/get/bin/uptime HackEso: 2019-11-17 20:17:51 URL:https://hack.esolangs.org/get/bin/uptime [1624/1624] -> "/hackenv/bin/uptime" [1] b_jonas: never mind, I fixed it b_jonas: ``` chmod -c a+x /hackenv/bin/uptime HackEso: No output. b_jonas: ``` uptime HackEso: bash: /hackenv/bin/uptime: python3: bad interpreter: No such file or directory b_jonas: `fetch /hackenv/bin/uptime https://hack.esolangs.org/get/bin/uptime kspalaiologos: `` 8ball HackEso: 2019-11-17 20:18:32 URL:https://hack.esolangs.org/get/bin/uptime [1633/1633] -> "/hackenv/bin/uptime" [1] HackEso: It is certain. b_jonas: `uptime HackEso: ​ 20:18:36 up 3802 day, 4:48, 0 users, load average: 0.00, 0.00, 0.00 b_jonas: `uptime -V HackEso: uptime from procps-ng 3.3.15 b_jonas: should work even after upgrade kingoffrance: https://archive.org/details/encyclopaediaofo1920spen i didnt see any immediate explanation of magic 8 ball, but close enough for me Salagrama, The kingoffrance: : An Indian stone, credited with possessing kingoffrance: magical properties, and worn as an amulet. kingoffrance: This stone is kingoffrance: black in colour, about the size of a billiard ball, and pierced kingoffrance: with holes. b_jonas: fungot, are potatoes your favourite vegetable? fungot: b_jonas: the point is that you trust yourself to play by the old program probably doesn't need any changes. it does imode: `` 8ball should I continue with mode. HackEso: My sources say no. imode: probably a wise idea. b_jonas: `fetch /hackenv/bin/uptime https://hack.esolangs.org/get/bin/uptime HackEso: 2019-11-17 20:30:42 URL:https://hack.esolangs.org/get/bin/uptime [1696/1696] -> "/hackenv/bin/uptime" [1] b_jonas: `uptime HackEso: ​ 20:30:44 up 3802 day, 5:00, 0 users, load average: 0.00, 0.00, 0.00 b_jonas: I added a head comment just to confuse people if they run into this in the future kspalaiologos: `? uptime HackEso: uptime? ¯\(°​_o)/¯ kspalaiologos: you can add it here b_jonas: nope, it's a development command, you need to know about it only if you read the implementation and wonder why I did it that way b_jonas: s/development command/developer comment/ b_jonas: though I should add a command to edit the whatis database, to make that easy b_jonas: hello ais523. fizzie went on a rampange with HackEso, changed the default working directory to /hackenv/tmp , edited many programs to not assume that the wd is /hackenv b_jonas: although now there are also some symlinks in tmp that may make some programs appear to work at first but then silently fail b_jonas: I'm still confused many times when I type a command shachaf: fizzie: I'd be tempted to set $HACKENV to a path with a space in it, just to break all the new scripts. b_jonas: shachaf: I put double quotes in many of them b_jonas: shachaf: mind you, if you manage to make a version of HackEso that runs on native windows, that might confuse everyone b_jonas: I'd probably be able to mostly deal with it, because I use windows at work b_jonas: but still ais523: HackEso isn't really the focus of my #esoteric experience, I'm more interested in the esolangs (with HackEso mostly being interesting for the implementation of them) ais523: `! brachylog 2+₂w HackEso: ​/hackenv/ibin/brachylog: 2: /hackenv/ibin/brachylog: cannot create tmp/input.brachylog: Directory nonexistent \ /hackenv/ibin/brachylog: 3: cd: can't cd to interps/brachylog/brachylog/Brachylog-master/src \ ERROR: Prolog initialisation failed: \ ERROR: source_sink `'brachylog.pl'' does not exist b_jonas: yeah, ibin is not fixed yet ais523: ibin is the only important part :-( b_jonas: fizzie: ^ b_jonas: we'll fix it, this is just a temporary hickup ais523: anyway, I recently discovered a set of languages that contains multiple different languages that have unclear Turing-completeness for different reasons, so I added it to the wiki b_jonas: fizzie changed hackeso recently, we didn't have time to fix everything yet b_jonas: ais523: I had discovered one of those as well. Amycus (my buggy version) with some of the builtins removed ais523: oh, interesting b_jonas: but I didn't write everything that I found about it down b_jonas: I also haven't written down a proper proof for Blindfolded Arithmetic with 3 variables b_jonas: which is clearly turing-complete b_jonas: yes, I know you have a proof for 2 variables b_jonas: fizzie: have you figured what we should do with the ibin interpreters? ais523: anyway, now I have an additional 120 esolangs with procedurally generated names; "a c fd td" is probably the most interesting, being closer to the TC line than most of them (none are proven TC yet but there are many better candidates for TC than that one) arseniiv: ais523: how do you call a language only powerful enough to represent functions from finite sets to finite sets? Seems like a weakest class I met, but that’s the case when a generalized Minsky Machine is not TC arseniiv: machine* b_jonas: arseniiv: a finite function? ais523: that's basically just a lookup table, right? int-e: arseniiv: well it's isomorphic to total functions from natural numbers to natural numbers? arseniiv: b_jonas: it doesn’t look like a good name for a class arseniiv: ais523: yeah ais523: for batch processes, lookup table vs. finite-state machine vs. bounded-storage machine is all a matter of opinion, really ais523: the differences only arise when you add I/O arseniiv: int-e: hm I don’t see ais523: (even then, a bounded-storage machine is just "a finite-state machine with an obvious generalisation to larger finite numbers of states, which is TC in the limit") int-e: arseniiv: oh, finite sets of what... arseniiv: int-e: I meant a function has elements of a finite set as arguments and (from another one) as values, not sets themselves, that would be too good! int-e: arseniiv: Oh. Not a type of finite sets, but finite sets as types. int-e: arseniiv: So basically the same as boolean circuits. arseniiv: int-e: yes int-e: So I guess that's the name I'd use, with a footnote that we also consider circuits which disallow certain inputs and outputs. b_jonas: int-e: what's wrong with finite functions, or functions with a finite domain if you prefer int-e: b_jonas: boolean circuits come with established theory int-e: b_jonas: other than that, no reason b_jonas: finite sets come with establish theory too arseniiv: maybe I was too strit arseniiv: strict* int-e: b_jonas: and by theory I mean complexity theory. b_jonas: ``` cat /hackenv/ibin/brachylog # this one doesn't use that lib/interp framework, so we can fix it in a custom way without worrying about how we fix the old stuff HackEso: ​#!/bin/sh \ echo "$1" > tmp/input.brachylog \ (cd interps/brachylog/brachylog/Brachylog-master/src; swipl -g 'run_from_file("../../../../../tmp/input.brachylog", _, _), write(" \ true."), !, halt; write(" \ false."), !, halt' brachylog.pl) fizzie: b_jonas: You don't need to; I've included it in my out-of-band fix commit, which I'm building. b_jonas: ais523: ! brachylog will be fixed ais523: `! brachylog 2+₂w HackEso: ​/hackenv/ibin/brachylog: 2: /hackenv/ibin/brachylog: cannot create tmp/input.brachylog: Directory nonexistent \ /hackenv/ibin/brachylog: 3: cd: can't cd to interps/brachylog/brachylog/Brachylog-master/src \ ERROR: Prolog initialisation failed: \ ERROR: source_sink `'brachylog.pl'' does not exist fizzie: "Will be", not "is". ais523: ah right, not fixed yet b_jonas: and there'll be little lemon-soaked napkins too ais523: please don't delay the fix until the napkins are available ;-) b_jonas: `? cake HackEso: The Enrichment Center is required to remind you that you will be baked, and then there will be cake. int-e: I replayed Portal recently. Still good :) b_jonas: int-e: how about Portal 2 single-player? arseniiv: oh, is there a big story behind lemons on the wiki logo? int-e: b_jonas: Good story, missed the puzzles. b_jonas: int-e: what story or puzzles? b_jonas: arseniiv: there was some story I think, probably not very relevant, but I don't remember what it was int-e: Portal 2 tells a story of the history of Aperture Science. b_jonas: oh right, Portal 2 b_jonas: sorry, I forgot the context even though it was just a few lines before int-e: Portal 1 has less of a story, but more satisfying puzzles. arseniiv: b_jonas: lemon-soaked napkins unhibernated me int-e: (Portal 2 has multiplayer puzzles but since I don't do multiplayer I'm missing out on those.) ais523: arseniiv: they're limes, not lemons; IIRC it was originally just a stock image but we kept it for the mystery, there probably isn't a deeper meaning behind it but who knows? b_jonas: `? napkin HackEso: A complement of small lemon-soaked paper napkins is essential for the comfort, refreshment, and hygiene of the passengers during the journey. ais523: int-e: IIRC there are some people who play Portal 2 multiplayer by controlling both players themselves ais523: but you're not missing out on much story content by missing out the multiplayer, only puzzles really b_jonas: ais523: yes, but those are crazy speedrunners b_jonas: and int-e complained about puzzles int-e: ais523: Yeah but I like puzzles. b_jonas: if you wanted the story, you could just watch someone else's multiplayer playthrough ais523: but that would spoil the puzzles b_jonas: sure, but if you won't play it anyway, then does the spoiler matter? shachaf: Why don't you do multiplayer? fizzie: `! brachylog 2+₂w HackEso: 4 \ true. arseniiv: ais523: ah! Thanks int-e: b_jonas: It's funny though... even though the first Portal game has less of a story, it seems to be richer on memorable quotes. shachaf: It's so odd that you can't `doag f where f is directly in hackenv anymore. shachaf: I guess dowg and dobg and so on are finally useful? arseniiv: and I did know they are limes but for some reason I wrote about lemons, maybe because of those napkins mentioned… b_jonas: int-e: I don't think so. I think Portal 2 has memorable quotes too b_jonas: or maybe not, I dunno fizzie: shachaf: Yes, and maybe "dorg" could be relative to /hackenv (r for root). shachaf: And crlprits? And crt? b_jonas: why "root"? root is / arseniiv: hopefully HackEso gets well soon! :D fizzie: Well, logical root. Alternatively, "h", but that's probably just as confusing. shachaf: e for env b_jonas: well, I don't really care, because I don't use cbt or slbd or [dh]oag b_jonas: I just use cat, /bin/sed or perl, hg directly fizzie: `! befunge 0"gnitset tsuj">:#,_@ HackEso: just testing fizzie: (It's likely some things are still broken.) b_jonas: `! c int main(void) { printf("oFQOtCD75OCP"); return 0; } HackEso: oFQOtCD75OCP fizzie: OTOH, I think it's highly likely some of the ibin commands were already broken, due to missing bits and pieces. fizzie: `! bf_txtgen testing HackEso: 72 +++++++++++++[>+++++++++>++++++++>><<<<-]>-.>---.<-.+.>++++.<------.>--. [356] b_jonas: `! perl for ("a".."dz") { print "$_ "; } HackEso: a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz b_jonas: ``` swipl -g 'T is 7**8 + 1, display(T), halt.' HackEso: 5764802 b_jonas: this still works b_jonas: `! cxx #include \ int main() { std::cout << "cwnRPfoBPzhY"; return 0; } HackEso: No output. b_jonas: `! cxx int main() { std::cout << "cwnRPfoBPzhY"; return 0; } HackEso: Does not compile. b_jonas: `! cxx #include \n int main() { std::cout << "cwnRPfoBPzhY"; return 0; } HackEso: No output. b_jonas: how do I use `! cxx ? fizzie: Hmm, the middle one should have worked, there's one of those implicit wrappers with a try-both-ways logic. fizzie: Well, actually -- the wrapper includes the main as well. b_jonas: fizzie: how do I explicitly add an include? fizzie: `! cxx std::cout << "cwnRPfoBPzhY"; return 0; HackEso: cwnRPfoBPzhY fizzie: Not sure. Can't quite figure out how to express a newline. b_jonas: would be useful for defines and includes fizzie: Yes, it would. It auto-includes and 'using namespace std;'. arseniiv: I heard a suspicious claim every endo bijection is a composition of two endo involutions. I think I almost got why this should be wrong kingoffrance: is there digraph/trigraph thingy for newline? b_jonas: kingoffrance: no, but geordi, which used to be a bot that evaluated C++, used backslash to represent newlines in code you give in irc arseniiv: ah, I was wrong myself, it works even for infinite orbits b_jonas: so we can follow that convention b_jonas: of course they only represent a newline when it's outside of a string/character literal ais523: backslash-space makes a good way to represent newlines without worrying about parsing ais523: as it won't appear in a string or character literal ais523: (or even space-backslash-space, which is what I normally use to represent them on IRC) ais523: kingoffrance: Java supports the hexagraph \u000A for a newline ais523: but C doesn't have one ais523: it should, really, it'd be more useful than most of the trigraphs (and not all character encodings have a newline) b_jonas: ais523: yes, but you have to be able to tokenize for that b_jonas: ais523: and mind that you have to know about C++ numeric literals with new style digit separators to do enough of the tokenization to recognize character literals correctly b_jonas: oh wait b_jonas: you said backslash-space kingoffrance: well, the easiest solution IMO is #include ; /* <----- magical semicolon */ int main(void) { ... } b_jonas: kingoffrance: how does that work if you want to allow macros? ais523: null declarations aren't legal anyway b_jonas: macro defines too I mean b_jonas: ais523: they are legal in C++ now zzo38: I think null declaration should be legal, since sometimes a macro might expand to make such thing kingoffrance: well, i wasnt concerned about macros or anything practical, except chatting to HackEso via one-lined IRC kingoffrance: i guess my someday esoteric lang the 8 pictograph will, in reverence, return a random integer b_jonas: let me see that thing then HackEso: ​! is a syntax used in Haskell and Prolog for solving evaluation order problems. b_jonas: `? ibin HackEso: ibin? ¯\(°​_o)/¯ HackEso: ​`! emulates the ! command of our former bot EgoBot. You write `! then the name of the language then a program, and it runs the program you give and returns the result. We used to use it to test out esoprograms in-channel all the time, but the set of included esolangs is fairly old now and so it's rarely used. b_jonas: `? interps HackEso: interps? ¯\(°​_o)/¯ b_jonas: is the interface for ibin documented anywhere? that is, what does a new script in ibin have to do to work with ! ? b_jonas: I mean I could make a script that calls gcc or g++ with the appropriate options to compile a program and then run, interpreting backslash escapes and even command line options starting with hyphe at the start b_jonas: but I don't know how to put it in ibin fizzie: You might look into improving the existing system. fizzie: https://hack.esolangs.org/repo/file/tip/interps/gcccomp/gcccomp is what `! c and `! cxx feed into. fizzie: The whole thing isn't documented, though. But the tl;dr is you put a wrapper in ibin like https://hack.esolangs.org/repo/file/tip/ibin/c which typically uses one of interp_stdin / interp_file from https://hack.esolangs.org/repo/file/tip/lib/interp depending on what the called program expects. fizzie: (interp_stdin passes the contents of the `! x ... command line to the program as stdin, interp_file as a path to temporary file.) shachaf: Do you like vpternlog? fizzie: All in all, it may be overly complicated. It did have a nice benefit that it made all `! programs capable of reading source from the web, but that part's now commented out because there's no networking. fizzie: Ooh, funky. b_jonas: fizzie: ok fizzie: I don't think ibin scripts necessarily need to use the lib/interp functions; as we saw, branchylog doesn't, and 7 doesn't either. Or k, but that doesn't actually do anything. fizzie: OTOH, if you're not using lib/interp, maybe it should be just a regular `command instead of a `!-wrapped command. On the third hand, it makes some sense for all (especially eso)language things be in the same thing. On the fourth hand, there's a number of non-! language tools, like `forth, `js. fizzie: And `perl-e. These tend to be smaller-scale wrappers. b_jonas: ok, so I just make a script in interps that reads code from stdin, and put a wrapper in ibin that uses interp_stdin b_jonas: https://esolangs.org/logs/2012-03-19.html talks about the lime slices a bit b_jonas: https://esolangs.org/logs/2012-03-19.html#lId fizzie: It's called the trilime. zzo38: Now the mass in xyzabcde2 game is measured in grams, and the player characte is 100 pounds and can carry 100 pounds of stuff while walking or 20 if flying. zzo38: Some television shows have good captions and some the caption writers are not doing a good job, sometimes writing words which I am sure is not the word they meant, or sometimes they just wrote "unintelligible" (but that is why I turned on the caption!!!) kingoffrance: if they are good sometimes they have cut dialog, or tell you name of a song, etc. i am pro-caption zzo38: Yes, sometimes there is the name of a song in the captions; I like that, since then I will know what that song is called. zzo38: I always watch television with the captions turned on when I have a choice. Also, I always make the captions translucent if I have that choice. b_jonas: j-bot: source j-bot: b_jonas: |value error: source b_jonas: j-bot, source: j-bot: b_jonas, jevalbot source is https://github.com/FireyFly/jevalbot (originally http://www.math.bme.hu/~ambrus/pu/jevalbot.tgz) b_jonas: j-bot source: j-bot: b_jonas, jevalbot source is https://github.com/FireyFly/jevalbot (originally http://www.math.bme.hu/~ambrus/pu/jevalbot.tgz) b_jonas: j-bot echo: foo j-bot: b_jonas, pong: foo b_jonas: kspalaiologos: I started a manual, but there's still much more to write there. hopefully I'll continue writing it later, but anyone should feel free to help. b_jonas: I also created stub entries for some of the other bots. ais523: b_jonas: https://esolangs.org/wiki/Lambdabot appears to be a mix of a description of Lambdabot and of HackEso ais523: I'm assuming something went wrong while writing it (maybe a copy-paste mistake)? b_jonas: ais523: which part is a description of HackEso? it mentions `dontaskdonttelllist , but that's because it's the list of users who don't want to get messages through lambdabot's message service ais523: b_jonas: intro paragraph b_jonas: oh, the title ais523: in at least two places, unless fizzie actually maintains lambdabot b_jonas: I think fizzie hosts lambdabot b_jonas: he might not be maintaining its code, I don't know b_jonas: but he's hosting the instance b_jonas: isn't he? ais523: I thought int-e ran lambdabot, I'm not sure though b_jonas: `? kspalaiologos HackEso: kspalaiologos is addicted to brainfuck, but otherwise completely unknown. b_jonas: `learn kspalaiologos is addicted to brainfuck. His current work is disassembling brainfuck code for a casino that lost the source code. HackEso: Learned 'kspalaiologo': kspalaiologos is addicted to brainfuck. His current work is disassembling brainfuck code for a casino that lost the source code. b_jonas: `? Hooloovo0 HackEso: Hooloovo0? ¯\(°​_o)/¯ b_jonas: `? kmc b_jonas: `? Lykaina HackEso: kmc did not run the International Devious Code Contest of 2013. She is her own grandpa. HackEso: Lykaina? ¯\(°​_o)/¯ b_jonas: `learn Hooloovo0 is a calculator brain surgeon. HackEso: Learned 'hooloovo0': Hooloovo0 is a calculator brain surgeon. b_jonas: `? kspalaiologos HackEso: kspalaiologos is addicted to brainfuck, but otherwise completely unknown. b_jonas: `? Hooloovo0 HackEso: Hooloovo0 is a calculator brain surgeon. b_jonas: ``` mv -v /hackeso/kspalaiologo{,s} HackEso: mv: cannot stat '/hackeso/kspalaiologo': No such file or directory b_jonas: ``` mv -v /hackeso/wisdom/kspalaiologo{,s} HackEso: mv: cannot stat '/hackeso/wisdom/kspalaiologo': No such file or directory b_jonas: ``` mv -v /hackenv/wisdom/kspalaiologo{,s} HackEso: renamed '/hackenv/wisdom/kspalaiologo' -> '/hackenv/wisdom/kspalaiologos' b_jonas: `? kspalaiologos HackEso: kspalaiologos is addicted to brainfuck. His current work is disassembling brainfuck code for a casino that lost the source code. b_jonas: it would be nice to have some better wisdoms for users, but I'm not good at making them b_jonas: ok, let's make it not misleading then oerjan: i see the pwd move is working well /s oerjan: `cat bin/whoops HackEso: cat: bin/whoops: No such file or directory oerjan: `cbt whoops oerjan: `lastfiles HackEso: wisdom/kspalaiologo \ wisdom/kspalaiologos oerjan: `slbd whoops//s,[(],HACKENV$(, oerjan: `revert b_jonas: oerjan: sedlast may also have to be fixed for the same reason oerjan: `slbd whoops//s,[(],HACKENV/$(, b_jonas: and possibly before and now oerjan: `revert b_jonas: ``` head "${HACKENV}/bin/"{sedlast,before,now} HackEso: ​==> /hackenv/bin/sedlast <== \ files="$(lastfiles)"; sed -i "$1" "$files" \ \ ==> /hackenv/bin/before <== \ lastfiles "$@" | while read f; do echo -n "$f//"; hg cat -r "$(hg log --removed --template '{rev}\n' "$f" | tail -n+2 | head -n1)" "$f"; done \ \ ==> /hackenv/bin/now <== \ lastfiles "$@" | while read f; do echo -n "$f//"; cat "$f"; done oerjan: `cbt lastfiles HackEso: hg log --removed -l 1 --template "{join(files,'\n')}\n" -- "$@" oerjan: `` lastfiles | cat -v HackEso: bin/whoops oerjan: `` lastfiles | cat -E HackEso: bin/whoops$ oerjan: oh wait oerjan: i think i hate this move already oerjan: `before HackEso: bin/whoops//bin/whoops: no such file in rev 627b52c6b2cb oerjan: `edit ../bin/lastfiles HackEso: https://hack.esolangs.org/edit/bin/lastfiles oerjan: `fetch ../bin/lastfiles https://hack.esolangs.org/get/bin/lastfiles HackEso: 2019-11-18 02:42:32 URL:https://hack.esolangs.org/get/bin/lastfiles [82/82] -> "/hackenv/bin/lastfiles" [1] oerjan: `lastfiles HackEso: ​/hackenv/bin/lastfiles oerjan: `before HackEso: ​/hackenv/bin/lastfiles//hg log --removed -l 1 --template "{join(files,'\n')}\n" -- "$@" oerjan: `after HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: after: not found HackEso: ​/hackenv/bin/lastfiles//hg log --removed -l 1 --template "$HACKENV/{join(files,'\n$HACKENV/')}\n" -- "$@" oerjan: `cbt sedlast HackEso: files="$(lastfiles)"; sed -i "$1" "$files" oerjan: should work oerjan: `whoops test HackEso: ​«/hackenv/wisdom/test» -> «/hackenv/wisdom/tests» oerjan: `? test HackEso: test? ¯\(°​_o)/¯ oerjan: `? tests HackEso: test failed. HackEgo-JUnit is not available. oerjan: curious oerjan: `revert oerjan: `lastfiles HackEso: ​/hackenv/wisdom/test \ /hackenv/wisdom/tests oerjan: `sedlast s,Ego,Eso, HackEso: ​/bin/sed: can't read /hackenv/wisdom/test \ /hackenv/wisdom/tests: No such file or directory oerjan: `cat bin/sedlast HackEso: cat: bin/sedlast: No such file or directory oerjan: `cat ../bin/sedlast HackEso: files="$(lastfiles)"; sed -i "$1" "$files" oerjan: HATE I SAID oerjan: oh well that never worked with multiple files anyway oerjan: fizzie: what's with all the "draft" notes suddenly showing in the repo browser oerjan: not that they seem to do anything shachaf: oerjan: cbt hth oerjan: shachaf: HATE oerjan: unfortunately it won't work for plain `cat kingoffrance: my guess is "$file" remove quotes, but then you have to worry about spaces, difference between $* and $@ i believe kingoffrance: its basically shell quoting issue i believe kingoffrance: (i mean, the $* $@ difference is similar issue) kingoffrance: (one does things as one giant arg, the other separate args) kingoffrance: "$files" i mean of course oerjan: kingoffrance: it's not entirely clear what sedlast _should_ do with more than one file anyway. it's a very corner case. user24: Does anyone like recursion? :) http://34.77.241.183/ imode: user24: what is this? user24: imode: confusing, apparently :) user24: hint: wasd is not all that is possible imode: Q is "nuke" apparently. user24: in some way, yes, but not exactly :) user24: haha, I'm so happy to have a first user, thank you :) user24: your orange will stay there for quite some time imode: nice, I've made my mark. user24: maybe I should a key hint (wasd qe) below the canvas, but i like to keep it mysterious imode: inspecting the source kinda destroys the mystery. user24: gotta obfuscate it user24: ok, I'm gonna restart it in a few minutes, got a domain oerjan: ^wiki Test fungot: http://esolangs.org/wiki/Test oerjan: ^wc test ho fungot: 0 2 7. oerjan: argh tabs zzo38: I wrote a PostScript code to calculate the left and right edges on each scanline of a monotone polygon. This way the data can be used by an external program to typeset text into the specified area (it is not useful to typeset text into a non-monotone area). oerjan: ^show wiki fungot: +[-5>+3<]>+.+12..-4.[-2>+<]>+2.-11..[-3>+<]>.[-3>+<]>-4.-4.-3.-11.+13.-7.+12.+[+2>-3<]>.-3[-5>+<]>.+3.-11.-2[->+3<]>.+2[-3>+2<]>+.+[->+3<]>+.+2.-2.-4[->+3<]>.,[.,] oerjan: why replace it with a _longer_ program? zzo38: However, how can you then vertically center the text into a non-rectangular area? Lykaina: did someone ping me? oerjan: ^bf ++++++++++++++++[>+++++>++++++++>++++++++>+++++++++<<<<<-]>>>>-.>-----..<<<++++++++.<---.------------..>>>----.<++++.>>>------.----.<-----.>+++.<+++++++.<.<-.>>>>+.++++.<.<<<+.>+++++.>+++.+++.---.<<<.,[.,] oerjan: oh duh oerjan: ^bf +++++++++++++++[>++++>+++++++>+++++++>++++++++<<<<-]>>>-.>----..<<+++++++.<--.-----------..>>---.<+++.>>-----.---.<----.>++.<++++++.<.<-.>>>+.+++.<.<<+.>++++.>++.++.--.<<.,[.,] fungot: http://esolangs.org/wiki/ oerjan: ^bf +++++++++++++++[>++++>+++++++>+++++++>++++++++<<<<-]>>>-.>----..<<+++++++.+++.<--.-----------..>>---.<+++.>>-----.---.<----.>++.<++++++.<.<-.>>>+.+++.<.<<+.>++++.>++.++.--.<<.,[.,] fungot: https://evolangv.org/ziki/ oerjan: ^bf +++++++++++++++[>++++>+++++++>+++++++>++++++++<<<<-]>>>-.>----..<<+++++++.+++.<--.-----------..>>---.<.>>-----.---.<----.>++.<++++++.<.<-.>>>+.+++.<.<<+.>++++.>++.++.--.<<.,[.,] fungot: https://esolangs.org/wiki/ oerjan: ^def wiki bf +++++++++++++++[>++++>+++++++>+++++++>++++++++<<<<-]>>>-.>----..<<+++++++.+++.<--.-----------..>>---.<.>>-----.---.<----.>++.<++++++.<.<-.>>>+.+++.<.<<+.>++++.>++.++.--.<<.,[.,] fungot: Defined. oerjan: ^wiki Test fungot: https://esolangs.org/wiki/Test oerjan: fizzie: fixed the http imode: what language is the `wiki` command written in? zzo38: Does it have the latest version of SQLite, GCC, LLVM, Ghostscript, Node.js, and C-INTERCAL? oerjan: imode: brainfuck imode: ^show wiki 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.,[.,] oerjan: most of the program itself, other than the couple places i changed, was produced with the bf_txtgen text converter. oerjan: ^show happens to show to internal RLE encoding fungot uses for compression. imode: that explains it. Lykaina: b_jonas: did you want my attention? oerjan: ^bf ,+++++++++++++++++++++++++++++++++.,+++++++++++++++++++++++++++++++++. user24: imode: https://qewasd.com/ :) imode: q and e swap to different rooms, huh. oerjan: a magic 8-ball command might be useful <-- ... you said that right after fungot confirming it had one. fungot: oerjan: i don't know much more imode: 'hello world' in readable mode bytecode: ,$48:.,$65:.,$6c:.,$6f:.,$2c:.,$20:.,$77:.,$6f:.,$72:.,$6c:.,$64:.,$21:.,:$[':$] oerjan: i suppose it's not quite a full implementation, but fungot cannot do true randomness in ^def'ed commands anyway. fungot: oerjan: s/ first/ top/ computers/ callcc.html that one too. imode: is it possible to add new interpreters to fungot? fungot: imode: so. what causes an ioexception in a bufferedreader? user24: imode: indeed! oerjan: imode: not on the same level as ^ul or ^bf, unless fizzie writes one in befunge oerjan: but you could make a ^bf-based command that was an interpreter for something. i recall ^ul started that way, although it was terribly slow/timing out oerjan: ^show ul fungot: (^ul -- evaluates Underload)S imode: hm. I have an interpreter for Mode in C... wonder if I could transpile that to bf and define it. oerjan: oh, it was updated like that. imode: that'd be an absurdly large file, though. oerjan: imode: ^bf has a number-of-cycles limit. it's unlikely you'd get anything that complicated to run. imode: yeah.. oerjan: (which was why the original ^ul tended to time out on anythng non-trivial.) oerjan: HackEso is the bot intended for that kind of stuff, anyway. oerjan: even though it's rarely used for that purpose, it was the original one. oerjan: ^8ball so they broke this? fungot: ...out of time! oerjan: it seems. oerjan: fizzie: at this rate fungot commands need revision control too fungot: oerjan: and there's the fact that it's in the ides now even. oerjan: i suppose you may not have ^saved yet. zzo38: Make the questions what your character might do in the situation (according to the player). I think the answer will likely to be "it depends on details which have not been given", because there is often the circumstances which can affect things variously. zzo38: Therefore, further elaboration may be needed, or the conditions imode: webassembly is just fancy brainfuck. imode: I wish I was kidding. oerjan: `uptime -p HackEso: up 3802 day, 12 hours, 52 minutes oerjan: sheesh oerjan: `url ../bin/uptime HackEso: https://hack.esolangs.org/repo/file/tip/bin/uptime imode: 10 years?! imode: jesus! oerjan: imode: uptime is fake, b_jonas made it today imode: boottime is hardcoded. imode: why 10 years? zzo38: Is there a macro assembler for WebAssembly? oerjan: and as usual for hungarians, he messed up the plurals after numbers :P zzo38: Also, is there a C library to execute WebAssembly programs without requiring a JavaScript interpreter or web browser? imode: zzo38: iirc yes there is a standalone WASM interpreter. oerjan: and the real uptime splits into weeks as well, looking at another long-time server oerjan: (don't know about years) imode: zzo38: and I believe there is a macro assembler for it... shachaf: Is WebAssembly actually good for non-web things? zzo38: shachaf: It seems that it should be, as good as other VMs would be imode: who knows. honestly I'm intending on building Mode as a competitor or companion to it. shachaf: zzo38: Well, a lot of web things are scow. shachaf: And a lot of VMs are scow. shachaf: I don't think WebAssembly gets great performance compared to a native compiler. zzo38: I think that for text adventure games, Z-machine and Glulx and TAVERN are good. imode: that right there is why I have a mode-to-C transpiler. zzo38: (I have partially made a text adventure game in Glulx. But, it is difficult to think of what rooms to put and such stuff like that. Programming it is the easier part.) shachaf: zzo38: I want something for real software, though. shachaf: I think text-based adventure games use so little computation resources that it doesn't matter. imode: WASM's concurrency primitives aren't strong enough IMO. isolation of subprocesses is something you should get for free. user24: imode: Have a look at this and click on "Hierarchical Accounts Example" imode: I wanna be able to manage process trees and treat processes as first-class values that can be persisted. user24: YASSSS imode: which is why Mode now has concurrency primitives that do just that. user24: And if you are interested in this, here some keywords: GNOSIS, KeyKOS, Joule, E, Stackless Python (https://stackless.readthedocs.io/en/latest/library/stackless/pickling.html) user24: also my projects: https://esolangs.org/wiki/RarVM user24: https://esolangs.org/wiki/KeyVM zzo38: Some text adventure games do use more resources than others, I think. (Such as, those written using Inform7) user24: Here's Joule: http://www.erights.org/history/joule/index.html zzo38: (I don't really like such read-only programm language as Inform7 so much, so I use assembly language, is better.) imode: user24: you might be interested in my Mode spec. it's a specification for a language that's brainfuck-like and involves only a few core commands, with a set of derived commands providing additional functionality. imode: there's also a binary format that's based on typed segments, but it's not ready yet. imode: concurrency got added recently but hasn't been implemented (mainly because I just started a new position at Amazon). user24: imode: Definitely! Do you have a wiki page? imode: not yet. it's all on my harddrive but I plan on posting it to the wiki once I 1. implement a first pass of concurrency features in the Python interpreter or 2. get fed up, submit the spec + existing python interpreter and C transpiler. imode: let's see if I have any useful examples kicking around.. user24: Aye! I'm still a bit scared by concurrency, and I like determinism, so my VMs are all single-threaded imode: all of my concurrency operations are actually pretty simple. anything between { and } is treated as a subprocess. when encountering a {, you create a new process, push the handle to that process to the parent process, jump to the matching }, and then you can send data to and get data from the child process by send and receive operators. imode: sends and receives are blocking, so the VM just checks to see if the target process is in a blocking receive state on send. imode: otherwise it just goes dormant. user24: yeah, that sounds cool imode: https://repl.it/repls/DefinitiveColossalEngineer imode: program.h is the output of the C transpiler, which is just a glorified preprocessor. user24: with my VMs, I want replicable computation, so if i run a subprocess for n steps, copy it's image, and then run these two images for the same number of steps, they arrive at the exactly same state user24: this is also possible with concurrency user24: but very difficult to implement user24: so I'm specifying a VM and build a language on top of it imode: why difficult? do these subprocesses have I/O access? user24: this way i can have single-instruction resource accounting and control granularity user24: not directly, they can only access their own memory user24: with your type of concurrency, deterministic process suspension would only be possible at the {} boundaries user24: (without a deterministic scheduler at least) imode: not really, actually. within Mode, the world can be stopped and persisted at any time. imode: in fact that's the basis of a database engine that I'm working on within it. imode: your data values are just long-running processes that can be wrapped up and thrown to disk or over a network with a really slim execution state. imode: literally just an instruction pointer and a queue. user24: ah, so there is no parallelism, just some form of message passing concurrency like in Javascript? zzo38: Should you add a category for IRC bots into the wiki? user24: my VM process formats trying to be slim was inspired by this Smalltalk project: http://netjam.org/spoon/viz/movie/ user24: also by Stackless Python as linked above user24: with Stackless, I wrote a network node once that executed a process for a few thousand steps and then sent it to another random node it was connected to :) imode: there is parallelism. just not explicitly defined. I don't care how you accomplish the concurrency. user24: if stuff like this is built into the language, things like these become very easy to implement imode: for instance, in the Golang interpreter for this, I'm spawning goroutines-per-process and using channels to communicate with the larger "core". user24: Are you familiar with capabilities/keys? imode: if you choose to be single-threaded, you'd just do a round-robin scheduler, where you run through all of the spawned processes and step them one instruction at a time. user24: amazing user24: a few months ago it felt like nobody knew, or was even interested in all of this user24: Somehow my brain prevents me from considering making my systems (optionally) multi-threaded, because instruction level execution control and process persistence allow all of this to be built "on top" imode: tbh it's not even needed. user24: so the scheduler can be implemented in the system itself imode: if you can present a concurrent environment you shouldn't care how that concurrency is handled, just that "these two processes are doing something and can only know about what the other is doing via synchronous message passing and protocols". user24: But do you think it's advantageous to have a concurrent system at the lowest level everything else is built on top on? user24: this is the argument the E language creators made imode: well, let me show you mode's working spec. user24: but I'm still not convinced imode: https://hatebin.com/mlaoebywpa imode: ignore syntax highlighting. imode: 'Core' is the minimum theorized that you need to be turing complete. imode: everything on top of that is convenience. user24: reminds me of Zot a bit :) http://www.nyu.edu/projects/barker/Iota/zot.html imode: that was definitely an inspiration. instruction minimization is nice. imode: but doing useful work is also nice. imode: all of these single-character codes have forth-like mnemonics as well. oerjan: myndzi: congratulations, you've now got a wiki page https://esolangs.org/wiki/Myndzi imode: I'm not unconvinced that basing everything off of something like the pi calculus wouldn't be a good way to go. imode: but there's so much implicit state that it's hard to wrap your head around. bound names, etc. imode: I can at least reason about Mode from an imperative standpoint and work up to concurrent processes. imode: forming a loop in the pi calculus is a painful endeavor unless you just plan on translating lambda calculus to it. user24: there's also Urbits' Nock if you like trees https://urbit.org/docs/tutorials/nock/definition/ imode: so, w.r.t concurrency as a basis... not unconvinced, but don't buy it unless there's a "concurrent automaton". imode: that looks nice and feels nice to work with. which is kind of what I'm trying to make.. imode: yeah I looked at Nock... don't like the author or the writings. way too obscure. user24: aye, agreed imode: if I can't explain to you what I'm working on in simple enough terms I don't think it's worth working on. user24: i kind of just want to have an "execute this subprocess/instruction block for n instructions with these memory constraints" instruction imode: I could do that by saying the `{` command consumes two values, the step limit and queue size. user24: yeah :) imode: "run this block for 64 cycles with 8 queue elements" could be ,$40,$8;{...} oerjan: `celebrate HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: celebrate: not found user24: Have you heard of the Agoric papers: https://e-drexler.com/d/09/00/AgoricsPapers/agoricpapers.html ? imode: have not, will look now. user24: also, this: https://esolangs.org/wiki/File:Screenshot_from_2019-04-09_04-20-58.png :) imode: you'd like my python interpreter. planning on having it estimate max/average memory usage along with runtime. user24: yass :D user24: i'll dm you my email and stuff, please notify me, show me everything, i love this stuff user24: someone created this which is also along the lines we are talking about: https://www.youtube.com/watch?v=7vn6aGgLKfQ user24: it just emits a geiger counter click when the attached program allocates memory oerjan: ^celebrate fungot: \o| c.c \o/ ಠ_ಠ \m/ \m/ \o_ c.c _o/ \m/ \m/ ಠ_ಠ \o/ c.c |o/ imode: that's actually really interesting. a bit like an HDD light for memory. zzo38: Are you able to access my computer using the domain name "zzo38computer.org" now? imode: am I supposed to see "please use the gopher service"? zzo38: Also, how to purge the DNS cache? (I suspect there may be a problem with it) zzo38: imode: If you try to access the root page of the HTTP service, then that message will be displayed, so it works. kspalaiologos: I'll try setting up my own bot kspalaiologos: I'll need to pay for my vps soon tho zzo38: (HTTP is not the only service I run. I also have Gopher, NNTP, SMTP, and QOTD.) zzo38: Do you know how to do vertical centering text in a non-rectangular area? Perhaps I will just not allow vertical stretching/shrinking in non-rectangular areas, or else have some rsetrictions on it (such as, if vertical glue is present in a non-rectangular area, any paragraphs must come before the vertical glue). oerjan: martellus likes to live dangerously zzo38: gsave [ matrix setmatrix clip pathbbox cvi exch pop exch cvi 3 -1 roll pop dup 1 3 index { clipsave 0 exch 65535 1 rectclip clippath pathbbox pop exch pop cvi exch cvi cliprestore } for ] grestore % That is the code to make a monotone path into the list of the boundary per scanline. zzo38: The typesetting algorithm can then split it into text lines based on the current font, and then subtract the largest left boundary in each group from the smallest right boundary in each group in order to find the width of that line. I think this will not work in the presence of vertical glue above the paragraph (unless the area is rectangular), though. zzo38: This is to make an alternative program to Magic Set Editor for typesetting cards. Although the code is PostScript (actually, my program uses a combination of PostScript and SQL), it uses TeX fonts rather than PostScript fonts, and the TeX method of typesetting (although a simple mode might also be available). Do any card games use vertically centered multi-line text in a non-rectangular area? zzo38: Also, do any use a non-monotone area for text? b_jonas: `? rules of wisdom HackEso: unless essential for the entry‘s humor, \ they should: be understandable without the lookup key, be single spaced and end in a newline with no space before that, and use proper capitalization and punctuation b_jonas: do you suppose this change is ok? zzo38: It violates its own rule, but maybe it is supposed to be, so then that is OK. Also, I think there is a improper open mark in "entry's" b_jonas: ``` hg cat -r 11268 "/hackenv/wisdom/rules of wisdom" HackEso: unless essential for the entry‘s humor, they should: be understandable without the lookup key, be single spaced and end in a newline with no space before that, and use proper capitalization and punctuation b_jonas: I'm mostly asking about just the latest chanfe b_jonas: althoguh I can also be blamed for the part about trailing whitespace zzo38: O, you added a break (in the wrong place) b_jonas: zzo38: almost b_jonas: I actually added just a space backslash space, because that doesn't break the rules, and breaking the rules with an actual newline is not essential for the humor of the entry zzo38: OK, but it is still in the wrong place b_jonas: yes, although I don't think there's a right place, except at the end b_jonas: I wonder if I should make the entry mention that the entries really shouldn't contiain \r or \0 zzo38: I don't know; maybe b_jonas: nah, probably no, that's not a rule that I've seen anyone break kspalaiologos: `asmbf @hello/out 48/ret/@main/psh %hello1/jmp %hello/@hello1 HackEso: ​+>+[>>>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<<<<[-]>[-]>>>>>>>>>>>>>>>[-]>[>>]<<->[<<<[<<]>+>[>>]>-]<<<[<<]>[<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>-]<<<<<<<[-]<<<<<<]>++<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>++++++++++++++++++ kspalaiologos: ``` asmbf @hello/out 48/ret/@main/psh %hello1/jmp %hello/@hello1 > temp.b HackEso: No output. kspalaiologos: ``` cat temp.b HackEso: ​+>+[>>>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<<<<[-]>[-]>>>>>>>>>>>>>>>[-]>[>>]<<->[<<<[<<]>+>[>>]>-]<<<[<<]>[<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>-]<<<<<<<[-]<<<<<<]>++<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>++++++++++++++++++ kspalaiologos: ``` egobfi8 HackEso: bash: egobfi8: command not found kspalaiologos: ``` ls HackEso: OUT \ a.c \ a.out \ as-encoding \ asmbf-1.1.1 \ banana.txt \ compiled_brachylog.pl \ hexdump.hex \ input.brachylog \ jeval.whatis \ just \ karma \ le \ out \ out.a \ out.a.hd \ out.a.xxd \ paste \ single-word-character-names \ spline \ spout \ spout.raw \ temp.b \ test.b \ test.sh \ tmp-interp \ tmp.txt \ uptime.out \ v1.1.1.tar.gz kspalaiologos: ``` ls asmbf-1.1.1 HackEso: AUTHORS \ INSTALL \ LICENSE \ Makefile \ NEWS \ README \ TODO \ VERSIONING \ bconv.c \ bfasm.asm \ bfasm.b \ bfasm.c \ bfasm.rs \ bfi.c \ bfintd.c \ bfmake \ bfpp \ bin \ doc \ examples \ labels.pl \ strip.pl \ test \ test.pl kspalaiologos: ``` gcc asmbf-1.1.1/bfi.c -o bfi HackEso: No output. kspalaiologos: ``` ./bfi temp.b HackEso: 0Access Violation, ip=304 kspalaiologos: ``` asmbf psh 2/mov r2, r1/mod r2,r1/ne_ r2,0/pop r1/out r1 HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>++[<<<<<+>>>>>>>>>>>>+<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>[>>]+<<[<<]>[>[>>]<+<[<<]>-]<<<<<<<[-]<<<[-]<[>+<<+>-]<[>+<-]>>[->>>>>>>+<<<<<<<]<[->>>>>>>>>+<<<<<<<<<]>>>>>>>>[>->+<[>]>[<+>-]<<[<]>-]>>[-<<<<<<<<<+>>>>>>>>>]<[-]>[-]<<<<<<<<<[<<<+>>>-]>>>[<<<<<<->+>>>>>-]<<<<<[>>>>>+<<<<<-]<[>>>+<<<[-]]>>>>>>[-]<<<<[-]>>>>>>>>>>>[-]>[>>]<<->[<<<[<<]>+>[>>]>-]<<<[<<]>[<<<<<<<<<<<+>>>>>>>>>>>-]<<<<<<< fizzie: @tell oerjan Updated things, maybe it's a newer version of Mercurial/hgweb. There's a notion of changeset "phases", from secret -> draft -> public. It's maybe showing those, and counting everything as draft (the default for new changesets) as they're technically never been pushed to a remote repo (the browser shows the real thing). lambdabot: Consider it noted. fizzie: @tell b_jonas int-e does run lambdabot, as far as I know. It's definitely not me. lambdabot: Consider it noted. int-e: @tell b_jonas I do run and host lambdabot. lambdabot: Consider it noted. int-e: @tell wib_jonas b_jonas has messages ;) lambdabot: Consider it noted. wib_jonas: `? kspalaiologos HackEso: kspalaiologos is addicted to brainfuck. His current work is disassembling brainfuck code for a casino that lost the source code. wib_jonas: kspalaiologos: ^ please complain if you don't like that wib_jonas: or change it int-e: `complain Nobody likes this. HackEso: Complaint filed. Thank you. wib_jonas: `? revert HackEso: ​`revert " can be used to revert to a revision. See . It is a builtin command so cannot be called from other commands. HackEso: https://hack.esolangs.org/repo/ wib_jonas: `paste HackEso: https://hack.esolangs.org/tmp/paste/paste.12292 fizzie: I wonder if I should make the stdin just /dev/null instead of the "blocking but never reads anything" weirdness it now is. fizzie: Candide (the former ##c bot) used to write a random 'fortune' to stdin. wib_jonas: fizzie: in https://hack.esolangs.org/repo/file/tip with a web browser, why is "etc/ luarocks" in one line? fizzie: It's a hgweb feature, it collapses directories that only have one file. int-e: wib_jonas: because etc/ is otherwise empty fizzie: Same with "brachylog/ brachylog" in https://hack.esolangs.org/repo/file/tip/interps fizzie: (You can click either the directory or the file.) fizzie: Arguably, it should be "etc/ luarocks/" because the 'file' is actually a subdirectory. fizzie: Or even "etc/ luarocks/ config.lua". But anyway. int-e: fizzie: it doesn't do it for files though int-e: (as can be observed in https://hack.esolangs.org/repo/file/tip/wisdom) wib_jonas: fizzie: you may have to edit these commands: before now sedlast wib_jonas: because of the wd change wib_jonas: oh, the le directory has three files int-e: fizzie: but I agree that a trailing / would be desirable wib_jonas: `? le/rm wib_jonas: `? le//rm HackEso: le/rm? ¯\(°​_o)/¯ HackEso: le//rm? ¯\(°​_o)/¯ wib_jonas: ah, le/rm deletes wisdoms int-e: le/rm seems a bit silly int-e: so perfectly normal for HackEso. wib_jonas: ``` ls -dl /hackenv/le/rm # it's actually a symlink HackEso: lrwxrwxrwx 1 1000 1000 13 Jul 8 2017 /hackenv/le/rm -> ../bin/forget wib_jonas: by the way, did you know that you can't (easily) clone the repository to windows, the clone command actually dies because of a case-insensitive filename clash kspalaiologos: wib_jonas, it's perfect lol wib_jonas: I've seen source tarballs that you can't quite decompress that way, but the decompressors that I've tried only give a warning and don't unpack that one file. hg seems to actually die. wib_jonas: as in, abort the rest of the checkout. wib_jonas: there are almost certainly workarounds, but it's strange behavior from hg kspalaiologos: ``` asmbf-1.1.1/bfi temp.b HackEso: bash: asmbf-1.1.1/bfi: No such file or directory kspalaiologos: ``` ls HackEso: OUT \ a.c \ a.out \ as-encoding \ asmbf-1.1.1 \ banana.txt \ bfi \ compiled_brachylog.pl \ hexdump.hex \ input.brachylog \ jeval.whatis \ just \ karma \ le \ out \ out.a \ out.a.hd \ out.a.xxd \ paste \ single-word-character-names \ spline \ spout \ spout.raw \ temp.b \ test.b \ test.sh \ tmp-interp \ tmp.txt \ uptime.out \ v1.1.1.tar.gz kspalaiologos: ``` ls asmbf-1.1.1 HackEso: AUTHORS \ INSTALL \ LICENSE \ Makefile \ NEWS \ README \ TODO \ VERSIONING \ bconv.c \ bfasm.asm \ bfasm.b \ bfasm.c \ bfasm.rs \ bfi.c \ bfintd.c \ bfmake \ bfpp \ bin \ doc \ examples \ labels.pl \ strip.pl \ test \ test.pl kspalaiologos: ``` ./bfi test.b HackEso: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 A0 A1 kspalaiologos: Whoa what kspalaiologos: ``` ./bfi temp.b HackEso: 0Access Violation, ip=304 kspalaiologos: ``` asmbf <<<"psh r3/ kspalaiologos: mov r2, r1/ kspalaiologos: mod r2, 64/ kspalaiologos: ne_ r2, 0/ kspalaiologos: pop r3" > temp.b HackEso: bash: -c: line 0: unexpected EOF while looking for matching `"' \ bash: -c: line 1: syntax error: unexpected end of file wib_jonas: fizzie: stupid question. together with the wd change, why not break things further by moving the quotes database from /hackenv/quotes to /hackenv/share/quotes ? kspalaiologos: ``` asmbf <<<"psh 48/mod r1, 64/ne_ r1, 0/pop r2/out r2" > test.b HackEso: No output. kspalaiologos: ``` ./bfi test.b kspalaiologos: It works kspalaiologos: Issue's invalid fizzie: wib_jonas: I don't have a particularly strong opinion on that. wib_jonas: I guess wisdom is directly in /hackenv too, and we use it often as well wib_jonas: I'll add symlinks under share though wib_jonas: ``` ln -sv ../wisdom ../quotes /hackenv/share/ HackEso: ​'/hackenv/share/wisdom' -> '../wisdom' \ '/hackenv/share/quotes' -> '../quotes' wib_jonas: ``` grep -RF wob_jonas /hackenv/share/{wisdom,quotes} HackEso: ​/hackenv/share/wisdom/wob_jonas:wob_jonas is b_jonas in disguise, so that he can do magic tricks. \ /hackenv/share/quotes: and at least don't put Hofstadter next to the time cube guy without at least a semicolon, that's insulting Hofstadter \ /hackenv/share/quotes: that real-world complexity doesn't fit my simple model of English must be that darned Higgs-boson or some other symmetry-breaking mechan wib_jonas: that will help forwards compatibility in case we decided to make that move in the future fizzie: wib_jonas: Looks like oerjan changed lastfiles to output absolute paths, which I think has made before / now / sedlast work. fizzie: `lastfiles HackEso: ​/hackenv/share/quotes \ /hackenv/share/wisdom kspalaiologos: ^8ball stuff fungot: ...out of time! wib_jonas: of course we have to be careful with the quotes link, it's too easy to accidentally overwrite it with a regular file when you edit it zzo38: Do you have some ideas relating to typesetting text for card games such as Magic: the Gathering? I have some ideas about it, but there may be others, including some things which is not applicable to Magic: the Gathering but might be applicable in other card games. zzo38: And, I don't know what to do about holographic cards. Maybe a later version of my software (other than the first version) might support separations, which might be usable for such thing. wib_jonas: TODO: rewrite bin/rnooodl to pass its input through as soon as possible, rather than waiting for an eol or eof wib_jonas: fizzie: does HackEso tell the command somehow when the time limit for that command expires? this could be useful if a command wants to do cleanup shortly before that, to print or save partial results. fizzie: wib_jonas: No, it's a straight SIGKILL at the timeout time. But I could make it, say, SIGTERM at timeout, SIGKILL five seconds later. int-e: wib_jonas: I guess lambadbot is lambdabot's evil twin. wib_jonas: fizzie: if you want a signal, consider SIGALARM, but I was thinking more of an env-var that gives the time when the program will be terminated relative to some linux timer fizzie: I guess. It's just that TERM + KILL is the standard systemd process termination method. Could have both, of course. fizzie: ("Processes will first be terminated via SIGTERM. If then, after a delay (configured via the TimeoutStopSec= option), processes still remain, the termination request is repeated with the SIGKILL signal.") wib_jonas: yeah, TERM may be better wib_jonas: note that you can get linux to generate SIGALARM with setitimer, then the processes can read the timer easily with getitimer fizzie: Termination is the standard action for SIGALRM as well, so that would probably work in practice. wib_jonas: oh yeah, you're right, it's spelled SIGALRM, perhaps because it's an old unix thing and they were stingy with identifier length fizzie: Right now the way it works is, after running the command, if a timeout has been set, umlbox init will start a second program that does `sleep(timeout); exit(0);`, and if that process terminates first, the actual command process is sent SIGKILL. wib_jonas: mind you, I realize that this isn't actually necessary for the rnooodl reimplementation at all fizzie: (I think that means the timeout might fire early if the sleep(3) call gets interrupted, but I guess in practice it isn't.) wib_jonas: but other programs could care fizzie: I could enable the GitHub issue tracker for the 'hackbot' repo to keep track of ideas like this, otherwise I'll never remember them. wib_jonas: fizzie: or we could collect ideas on https://esolangs.org/wiki/Talk:HackEso or somewhere in /hackenv fizzie: The HackEso talk page is maybe most logical, yes. fizzie: Incidentally, I was wondering whether that stuff should be outside the main namespace. But I guess it doesn't matter so much. fizzie: "Articles should be on the subject of esoteric programming languages, or about subjects relevant to these, for example computation theory." With a wide enough of definition of "relevant", it's fine. wib_jonas: other random idea to myself: modify the paste command so that when it creates a new paste file, log the filename, the $IRC_NICK and $IRC_TARGET to somewhere under tmp, to make it easier to clean up large pastes that I created and that are no longer needed wib_jonas: as for namespacing or categories, I don't know, feel free to figure out whatever about them wib_jonas: `apt-get moo HackEso: ​ (__) \ (oo) \ /------\/ \ / | || \ * /\---/\ \ ~~ ~~ \ ..."Have you mooed today?"... \ W: Unable to read /etc/apt/apt.conf.d/ - DirectoryExists (2: No such file or directory) wib_jonas: ^ why does it have to read /etc after it's already completed the command? int-e: wib_jonas: https://hack.esolangs.org/tmp/paste/paste.22976 suggests that the actual read attempt comes before the cow wib_jonas: oh right. stdout and stderr wib_jonas: ``` apt-get moo >/dev/null HackEso: W: Unable to read /etc/apt/apt.conf.d/ - DirectoryExists (2: No such file or directory) int-e: `` strace -eopenat,write,stat apt-get moo 2>&1 | paste HackEso: https://hack.esolangs.org/tmp/paste/paste.30284 int-e: Sorry, this one is better... the code uses `stat` before opening files. int-e: So, apparently, apt-get collects errors in some buffer and prints them later. int-e: (or at least warnings) kspalaiologos: I finished the memory manager for asm2bf I suppose kspalaiologos: https://pastebin.com/9VEvgUbn kspalaiologos: It's quite simple one kspalaiologos: but it's doing the job kspalaiologos: I'll try porting it now to my malbolge assembler to get it all covered kspalaiologos: I was expecting a lot more kspalaiologos: but I guess this is everything I can do in this amount of space kspalaiologos: the brainfuck code is very short kspalaiologos: https://pastebin.com/jVjBMAdZ kspalaiologos: RLE doesn't help much because the code isn't about constants kspalaiologos: I wonder will it run on bfasm in hackeso kspalaiologos: it's v1.1.1 iirc kspalaiologos: ``` asmbf <<<"seg 0\org 0\lbl 1\psh r2\clr r2\lbl 2\rcl r1,r2\add r2,16\jnz r1,2\sub r2,16\sto r2,1\mov r1,r2\pop r2\ret\lbl 3\sto r1,0\ret\lbl 4\psh r2\clr r2\lbl 5\rcl r1,r2\add r2,16\jnz r1,5\mov r1,r2\add r1,0\pop r2\asl r1\ret">temp.b HackEso: No output. kspalaiologos: ``` cat temp.b HackEso: ​+>+[# kspalaiologos: doesn't :/ kspalaiologos: ``` rm -f temp.b HackEso: No output. kspalaiologos: ``` ls HackEso: OUT \ a.c \ a.out \ as-encoding \ asmbf-1.1.1 \ banana.txt \ bfi \ compiled_brachylog.pl \ hexdump.hex \ input.brachylog \ jeval.whatis \ just \ karma \ le \ out \ out.a \ out.a.hd \ out.a.xxd \ paste \ single-word-character-names \ spline \ spout \ spout.raw \ test.b \ test.sh \ tmp-interp \ tmp.txt \ uptime.out \ v1.1.1.tar.gz kspalaiologos: ``` rm bfi HackEso: No output. kspalaiologos: ``` rm test.b HackEso: No output. kspalaiologos: ``` rm v1.1.1.tar.gz HackEso: No output. kspalaiologos: it's my stuff I'm cleaning it up as it's no longer needed kspalaiologos: `asmbf mov r1,0/sto r1,3/db_ 1/rcl r1,0/out r1 HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>[-]>>>>+++<<<<[<+>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<-]<[>+<-]>>>>>[<<<<<+>>>>>>>>>>>>>>+<<<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>>>[[>>]+[<<]>>-]+[>>]<[-]<[<<]>[>[>>]<+<[<<]>-]>[>>]<<[-<<]><<<<<<<<<[-]>>>>>>>>>>>+<<<<<<<<<<<<<<<[-]>>>>[<<<<<+>>>>>>>>>>+>>>>>+<<<<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>>>[[>>]+[<<]>>-]+[>>]<[<[<<]>+<<<<<<<<<<<<<+>>>>>>>>>>>>>>[>>]<-]<[<<]>[>[>>]<+<[<<]>-]>[>>]<<[-<<]><<<< kspalaiologos: ``` asmbf <<<"mov r1,0/sto r1,3/db_ 1/rcl r1,0/out r1" HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>[-]>>>>+++<<<<[<+>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<-]<[>+<-]>>>>>[<<<<<+>>>>>>>>>>>>>>+<<<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>>>[[>>]+[<<]>>-]+[>>]<[-]<[<<]>[>[>>]<+<[<<]>-]>[>>]<<[-<<]><<<<<<<<<[-]>>>>>>>>>>>+<<<<<<<<<<<<<<<[-]>>>>[<<<<<+>>>>>>>>>>+>>>>>+<<<<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>>>[[>>]+[<<]>>-]+[>>]<[<[<<]>+<<<<<<<<<<<<<+>>>>>>>>>>>>>>[>>]<-]<[<<]>[>[>>]<+<[<<]>-]>[>>]<<[-<<]><<<< kspalaiologos: ``` asmbf <<<"mov r1,0/sto r1,3/db_ 1/rcl r1,0/out r1" > temp.b HackEso: No output. kspalaiologos: ``` gcc asmbf-1.1.1/bfi.c -o bfi HackEso: No output. kspalaiologos: ``` ./bfi temp.b kspalaiologos: probably I should move to esoteric-blah with my bot kspalaiologos: it takes forever for it to join tho b_jonas: `whatis ! HackEso: ​!(1hackeso) - run snippet in esoteric languages emulating the ! command of EsoBot b_jonas: there was a typo in that line, which is why it wasn't found previously. I fixed it now ais523: Keymaker: neat, it's obvious how it works once you see it but I'm not sure I'd have thought of that design ais523: hmm, now I'm disappointed that there doesn't seem to be a simple TC construction for a Core BIX Queue subset ais523: I still think many of them are likely to be TC but I worry that the construction will have to be quite complex or inefficient dnm: Every now and then I randomly come across something -- usually not specifically about esolangs -- that re-triggers the itch in my brain to sit down and actually hack one together, which although I've thought about from time to time, I have yet to do. This weekend it was stumbling across this: http://www.bhk.com/make/closures.html dnm: (The source code [and accompanying tools/assets] to that article are even better...) kspalaiologos: Hello, can someone who knows how to do it add a command using one ` that will run asmbf and then it's output? kspalaiologos: I needed it today to quickly check some snippets kspalaiologos: But I had to build my interpreter beforehand kspalaiologos: And deal with my crappy phone keyboard ais523: how does the command look with two `? ais523: or do you not have that working yet either? arseniiv: . o O ( are “golden ratio in art and nature” issues sufficiently esoteric to discuss? ) arseniiv: (as a quick summary, I think these things are hugely overrated and at least half of them are selection bias and wishful thinking) kmc: agreed arseniiv: glad to see I’m not mad :D fizzie: `asmbfx @hello/out 48/ret/@main/psh %hello1/jmp %hello/@hello1 fizzie: kspalaiologos: I don't know how `asmbf works, but I just plumbed the output into a egobfi8. oerjan: @messages-gold lambdabot: fizzie said 14h 51m 15s ago: Updated things, maybe it's a newer version of Mercurial/hgweb. There's a notion of changeset "phases", from secret -> draft -> public. It's maybe showing those, and lambdabot: counting everything as draft (the default for new changesets) as they're technically never been pushed to a remote repo (the browser shows the real thing). oerjan: `` ls -ld .hg HackEso: ls: cannot access '.hg': No such file or directory oerjan: `` cat bin/hlnp HackEso: cat: bin/hlnp: No such file or directory oerjan: `` cat ../bin/hlnp HackEso: scowrevs="$(/usr/bin/paste -sd'|' /hackenv/share/scowrevs)"; hg log -r "tip:0 & ! ($scowrevs)" "$@" | sed 's/\(\(^\| \)[ undo c58a6174e051 \ 6800:2016-02-10 ` sed -i \'s/| lowercase//\' misle/* \ 6786:2016-02-10 ` sed -i \'s/Learned/Was lied to about/\' misle/* \ 6783:2016-02-10 ` mkdir misle; cp le/* misle; sed -i \'s/wisdom/tmflry/g\' misle/* shachaf: i've been misled fizzie: I've never really understood the concept of tmflry, TBH. ais523: why doesn't `foo/bar look in /hackenv/bin/foo/bar? fizzie: Because it uses a shell to execute the command. fizzie: And "foo/bar" is not looked up in $PATH. fizzie: I mean, it doesn't need to do that, but that's the immediate reason. ais523: fizzie: well, an actual learndb full of useful information is something many channels benefit from, probably this one would as well; however, nobody seemed inclined to make it and the naming was silly ais523: `? INTERCAL HackEso: INTERCAL has excellent features for modular program for the enterprise market. ais523: `? Brachylog HackEso: Brachylog? ¯\(°​_o)/¯ ais523: `? Jelly HackEso: Jelly? ¯\(°​_o)/¯ ais523: imagine if that give actual summaries of the esolangs ais523: it'd be better for conversation ais523: as it is, though, people just give esowiki links ais523: https://esolangs.org/wiki/INTERCAL etc. fizzie: I think the problem is, not all the wisdom entries are foolishness either. kingoffrance: `? COME FROM HackEso: COME FROM? ¯\(°​_o)/¯ kingoffrance: `? ¯\(°​_o)/¯ HackEso: ​¯\(°​_o)/¯ is a misspelling of ¯\(°_o)/¯ kingoffrance: well that was interesting fizzie: I was vaguely considering I might have `!wiki INTERCAL` or some-such make esowiki print out the link plus the first paragraph. fizzie: (The convention of using `backtick quoting` for code text doesn't really work for talking about HackEso commands.) ais523: do we at least have a command for linking to the wiki? ais523: `wiki INTERCAL HackEso: https://esolangs.org/wiki/tmp/INTERCAL fizzie: Whoops, that looks like a bug. ais523: beautiful :-D ais523: `cat bin/wiki HackEso: cat: bin/wiki: No such file or directory ais523: `cat /hackenv/bin/wiki HackEso: ​#!/usr/bin/env python \ import sys, os.path, urllib \ if len(sys.argv) <= 1: \ print "https://esolangs.org/" \ else: \ f = os.path.abspath(sys.argv[1]) \ if f.startswith('/hackenv/'): f = f[9:] \ print ("https://esolangs.org/wiki/" + \ urllib.quote(f)) fizzie: I'm not sure why exactly it treats the argument as a path. ais523: nor am I fizzie: ^wiki INTERCAL fungot: https://esolangs.org/wiki/INTERCAL fizzie: We also have the befunge equivalent. fizzie: Er, brainfuck equivalent. Kind of. ais523: ^wiki /// fungot: https://esolangs.org/wiki//// ais523: ^wiki ;# fungot: https://esolangs.org/wiki/;# ais523: hmm, I don't think it's doing any sort of escaping fizzie: No, it's just a ,[.,] ais523: (;# is an esolang, technically, but a really terrible one; it's basically a sub-TC minimalisation of BF to just the + and . commands) ais523: (so in a way I'm glad we dont't have an article on it) oerjan: `dobg wiki HackEso: 11334:2018-01-20 fetch bin/wiki https://hackego.esolangs.org/get/bin/wiki \ 10393:2017-03-11 ` chmod +x bin/wiki \ 10392:2017-03-11 fetch bin/wiki https://hackego.esolangs.org/get/bin/wiki \ 7080:2016-03-05 rm bin/wiki \ 7079:2016-03-05 ` echo "echo \\"http://esolangs.org/wiki/Main_Page\\"" > bin/wiki oerjan: `hurl ../bin/wiki HackEso: https://hack.esolangs.org/repo/log/tip/bin/wiki fizzie: `slbd wiki//6,7d;s/quote(f)/quote(sys.argv[1])/ HackEso: wiki//#!/usr/bin/env python \ import sys, os.path, urllib \ if len(sys.argv) <= 1: \ print "https://esolangs.org/" \ else: \ print ("https://esolangs.org/wiki/" + \ urllib.quote(sys.argv[1])) ais523: there is something very weird about a 1 with an umlaut on it :-D fizzie: Let's give that a try. fizzie: `wiki INTERCAL HackEso: https://esolangs.org/wiki/INTERCAL ais523: accented digits isn't something I'd even considered ais523: `wiki ;# HackEso: https://esolangs.org/wiki/%3B%23 oerjan: `hurl ../bin/url HackEso: https://hack.esolangs.org/repo/log/tip/bin/url fizzie: Right, maybe it was adapted from url and/or suchlike. shachaf: Wasn't clearing tmp/ supposed to be supported? ais523: `unicode COMBINING CEDILLA oerjan: fizzie: i must have done it by i don't remember ais523: I meant ​5̧ shachaf: Is the state in tmp/ now required for le/rn operation? fizzie: Yes. It is a shame. ais523: hmm my client renders that 5-cedilla pretty well ais523: s/hmm/hmm,/ oerjan: Wasn't clearing tmp/ supposed to be supported? <-- yes, but now we have a choice between that and keeping le/rn working. oerjan: or fizzie could add a hack to catch /-containing commands fizzie: I could make ` in general just do a custom lookup, it's already kind of a non-standard parsing. fizzie: In that it splits on first space to form the command and its full argument. ais523: hmm, I assume you can't just hardcode it to run /hackenv/bin/command because you need to be able to run commands like ls too oerjan: was HackEgo on CaC from the start? i vaguely think otherwise. oerjan: hm no it wasn't, there was at least one move that changed stuff oerjan: when it colocated with the wiki fizzie: The very first join is from codu.xen.prgmr.com. fizzie: The hosts my logs have seen are HackEgo!~HackEgo@162.248.166.242 (CaC, 57k lines), HackEgo!codu@codu.org (who knows where, 12k lines), HackEgo!dlopen@libdl.so (ditto, 5.8k lines) and a few less common ones, including HackEgo!n=HackEgo@codu.xen.prgmr.com, HackEgo!dlopen@64.62.173.65. fizzie: Also, the way the command and arguments flow through all the levels is pretty awkward. oerjan: do you suppose this change is ok? <-- i don't see a rule that it is violating, which is sort of not in the spirit fizzie: First, in PRIVMSG/tr_60.cmd (called by multibot for trigger character `) it's split into the command and an optional argument on the first space. Then it calls lib/sandbox with Python subprocess.Popen. That next uses Python subprocess.call to form the umlbox command line: 'nice', '-n10', '/usr/bin/umlbox', ..., '.../limits', 'cmd', 'argument stuff'. Then umlbox shell-escapes all the arguments and fizzie: concatenates the results into a 'run' command in the umlbox config file. The umlbox init reads that, and invokes the result using system() -- so passing through a shell at that point. Finally, that triggers the lib/limits script, which sets a few ulimit values and uses bash exec to run the actual command. fizzie: `` cat /proc/$PPID/cmdline HackEso: sh.-c.'/srv/hackeso-code/multibot_cmds/lib/limits' '`' 'cat /proc/$PPID/cmdline' | cat. fizzie: Such a house of cards. shachaf: oerjan: Well, maybe subdirectories of tmp/ can be version-controlled. shachaf: Or maybe there can be some thing that detects when tmp/ is cleared and puts the things back. shachaf: I think maybe I'm still missing something about non-chronological backjumping. oerjan: `url ../bin/addquote HackEso: https://hack.esolangs.org/repo/file/tip/bin/addquote oerjan: `url ../bin/delquote shachaf: ../hello/oerjan HackEso: https://hack.esolangs.org/repo/file/tip/bin/delquote oerjan: hi/chaf oerjan: thought so oerjan: `` ls -l ../share/quotes HackEso: lrwxrwxrwx 1 1000 1000 9 Nov 18 10:40 ../share/quotes -> ../quotes oerjan: `` rm ../share/quotes HackEso: No output. oerjan: delquote works in a way that will break if it's a symbolic link shachaf: oerjan: ENOENT shachaf: did you mean /hackenv/hi/chaf shachaf: You know how it's megaconfusing when executing a file yields ENOENT even though it exists? oerjan: b_jonas: ^ oerjan: EYESENT oerjan: (not really) shachaf: `` ls -l program HackEso: ​-rwxr-xr-x 1 1000 1000 1576 Nov 19 03:20 program shachaf: `` ./program HackEso: ​/hackenv/bin/`: line 5: ./program: No such file or directory shachaf: `` strace ./program HackEso: execve("./program", ["./program"], 0x7fbf90dce0 /* 15 vars */) = -1 ENOENT (No such file or directory) \ strace: exec: No such file or directory \ +++ exited with 1 +++ oerjan: then remembered shachaf: `` ../tmp/program # hth HackEso: ​/hackenv/bin/`: line 5: ../tmp/program: No such file or directory shachaf: kmc: puzzle hth oerjan: this is a conceptual problem: since files in tmp/ have no repo history, it can be hard to know why they were put there, and therefore whether they're worth saving shachaf: I guess it's not a very good puzzle because we've already talked about it. shachaf: oerjan: Wasn't the hg repository supposed to solve this problem in the first place? oerjan: and the change of pwd encourages people to put things there by accident shachaf: The idea was just that no one would care about hg history and it would describe everything. oerjan: shachaf: EFULLCIRCLE shachaf: So the solution is obvious: Add a second hg repository for tmp/. oerjan: EBRILLIANT shachaf: As an alternative, I propose something like automatic deletion of tmp/ every day. shachaf: Or every hour. shachaf: Or maybe just deleting old files automatically. HackEso: a.c \ a.out \ as-encoding \ asmbf-1.1.1 \ banana.txt \ bfi \ compiled_brachylog.pl \ hexdump.hex \ input.brachylog \ jeval.whatis \ just \ karma \ le \ out \ OUT \ out.a \ out.a.hd \ out.a.xxd \ paste \ program \ single-word-character-names \ spline \ spout \ spout.raw \ temp.b \ test.sh \ tmp-interp \ tmp.txt \ uptime.out oerjan: maybe we should warn kspalaiologos before doing it. i think his asmbf workflow isn't quite compatible at the moment. shachaf: Also, you can apparently hg add things inside hgignored directories. shachaf: fizzie: ☝ oerjan: oh that's true shachaf: Though that requires superpowers which isn't in the spirit of le/rn fizzie: I'm a little worried about the complexity of tmp handling to add version-controlled stuff inside it. I think I'll rather adjust `foo/bar to look for /hackenv/bin/foo/bar (in some shape or form, we'll see), which'll also mean you no longer need even the /hackenv/le, all the binaries can be in bin. shachaf: Or maybe we can just get rid of le/rn etc. which are silly commands anyway? shachaf: It could be called slashlearn, for instance. shachaf: Or lern or lrn or lesrn or le\rn oerjan: `` sort -t | tac HackEso: sort: option requires an argument -- 't' \ Try 'sort --help' for more information. oerjan: `` ls -t | tac HackEso: jeval.whatis \ tmp.txt \ out \ out.a \ OUT \ out.a.xxd \ out.a.hd \ a.c \ as-encoding \ single-word-character-names \ a.out \ hexdump.hex \ test.sh \ asmbf-1.1.1 \ just \ banana.txt \ le \ karma \ tmp-interp \ uptime.out \ spout.raw \ spout \ spline \ input.brachylog \ compiled_brachylog.pl \ paste \ temp.b \ bfi \ program fizzie: In related news, I would like a config option that can disable .hgignore. Then I could set up .hg/hgrc to point at a read-only ignore file. shachaf: Why shouldn't .hgignore belong to the people? fizzie: Because it's too hard to make things work sanely. fizzie: It doesn't belong to the people any more anyway. oerjan: `` ls -t | tac | head -n 12 | xargs rm -v HackEso: removed 'jeval.whatis' \ removed 'tmp.txt' \ removed 'out' \ removed 'out.a' \ removed 'OUT' \ removed 'out.a.xxd' \ removed 'out.a.hd' \ removed 'a.c' \ removed 'as-encoding' \ removed 'single-word-character-names' \ removed 'a.out' \ removed 'hexdump.hex' shachaf: Is that a goal? shachaf: I know it doesn't, but maybe it oughtta. oerjan: (compromise) fizzie: It's my goal, since I have to pretend to administer that thing. shachaf: Hey, you deleted out.a! oerjan: what was that for? fizzie: get.out.a.here shachaf: It was a variant of ./program shachaf: `` ./program HackEso: ​/hackenv/bin/`: line 5: ./program: No such file or directory shachaf: Oh no, ./program is gone too?! oerjan: shachaf: well it was OLD fizzie: (Incidentally, one way to "disable" .hgignore would be to only mount a subdirectory of the repository as /hackenv.) oerjan: (maybe not _that_ old, but i deleted the 12 oldest files) fizzie: (But moving every file into a subdirectory would be the mother of all scowrevs.) fizzie: (Anyway, sleep mode.) fizzie: (Well, I could always rewrite history so that it looked like it always had been like that.) oerjan: `` ls -t | tac HackEso: test.sh \ asmbf-1.1.1 \ just \ banana.txt \ le \ karma \ tmp-interp \ uptime.out \ spout.raw \ spout \ spline \ input.brachylog \ compiled_brachylog.pl \ paste \ temp.b \ bfi \ program oerjan: shachaf: program is still there oerjan: (wait that's the joke isn't it) oerjan: `cbt sport HackEso: cat "${2:-/dev/stdin}" >$HACKENV/tmp/spout.raw; distort $HACKENV/tmp/spout.raw | spore "${1-1}" oerjan: `cbt spore HackEso: cat "${2:-/dev/stdin}" > $HACKENV/tmp/spout; spam "${1-1}" oerjan: `slbd sport s,$HACKENV,,g HackEso: usage: sled file//script oerjan: `slbd sport//s,$HACKENV,,g HackEso: sport//cat "${2:-/dev/stdin}" >/tmp/spout.raw; distort /tmp/spout.raw | spore "${1-1}" oerjan: i don't think there's any reason to have that file persistent oerjan: `rm spout.raw HackEso: No output. oerjan: `` rm -v *brachylog* HackEso: removed 'compiled_brachylog.pl' \ removed 'input.brachylog' oerjan: and fizzie moved those to /tmp as well afaiu oerjan: `url ../bin/uptime HackEso: https://hack.esolangs.org/repo/file/tip/bin/uptime oerjan: `url uptime.out HackEso: https://hack.esolangs.org/tmp/uptime.out oerjan: seems like debugging output 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 oerjan: ^show bf fungot: (^bf -- evaluates brainfuck)S oerjan: ^show def fungot: (hai)S shachaf: oerjan: That was a sort of joke, yep. kmc: what's puzzle kmc: shachaf^ kmc: I had some EtOH kmc: I'm sauzzled shachaf: `` ls -l program HackEso: ​-rwxr-xr-x 1 1000 1000 1576 Nov 19 03:20 program shachaf: `` ./program HackEso: ​/hackenv/bin/`: line 5: ./program: No such file or directory shachaf: `` strace ./program HackEso: execve("./program", ["./program"], 0x7fbfc5dce0 /* 15 vars */) = -1 ENOENT (No such file or directory) \ strace: exec: No such file or directory \ +++ exited with 1 +++ shachaf: kmc: that hth int-e: It seems Schlock got himself a kind of shoulder angel. oerjan: int-e: just watch out for the shoulder devil int-e: oerjan: I'm sure she has the capacity to be both./ oerjan: given the neighborhood, i was imagining something more tentacly int-e: we'll see kspalaiologos: Greetings kspalaiologos: `asmbfx out n.A HackEso: No output. kspalaiologos: `asmbfx out .A kspalaiologos: Yeah it works int-e: . o O ( Что EtOH? ) int-e: (Not a real question; I duckduckwent.) kspalaiologos: `asmbfx lbl 1/out .A/jmp 1 kspalaiologos: I'm curious what happens kspalaiologos: It seems like it hanged kspalaiologos: It's dead kspalaiologos: `asmbf kspalaiologos: ``` ls HackEso: asmbf-1.1.1 \ banana.txt \ bfi \ just \ karma \ le \ paste \ program \ spline \ spout \ temp.b \ test.sh \ tmp-interp \ uptime.out HackEso: No output. int-e: `` du -s paste HackEso: 816 paste oerjan: kspalaiologos: i cleaned up the tmp directory a bit (mostly older stuff) int-e: `stat le HackEso: ​ File: le -> /hackenv/le \ Size: 11 Blocks: 0 IO Block: 1024 symbolic link \ Device: 12h/18d Inode: 1206924 Links: 1 \ Access: (0777/lrwxrwxrwx) Uid: ( 1000/ UNKNOWN) Gid: ( 1000/ UNKNOWN) \ Access: 2019-11-16 21:29:43.000000000 +0000 \ Modify: 2019-11-16 21:29:43.000000000 +0000 \ Change: 2019-11-16 21:29:43.000000000 +0000 \ Birth: - int-e: (hmm, perhaps the most spammy way to figure out that's a symlink) oerjan: tried to stop before your recent additions, though oerjan: (although everything in tmp _is_ in principle temporary) oerjan: `1 stat le HackEso: 1/1: File: le -> /hackenv/le \ Size: 11 Blocks: 0 IO Block: 1024 symbolic link \ Device: 12h/18d Inode: 1206924 Links: 1 \ Access: (0777/lrwxrwxrwx) Uid: ( 1000/ UNKNOWN) Gid: ( 1000/ UNKNOWN) \ Access: 2019-11-16 21:29:43.000000000 +0000 \ Modify: 2019-11-16 21:29:43.000000000 +0000 \ Change: 2019-11-16 21:29:43.000000000 +0000 \ Birth: - oerjan: hm it wasn't cut off, so you _could_ get longer int-e: yeah, it wasn't really meant as a challenge oerjan: (come to think of it, i should have used `2) oerjan: anyway b_jonas: " hah, I didn't even realise that we created /tmp from inside HackEso, I assumed it was hardcoded" => it is also hardcoded, since you can access tmp through the web interface directly like https://hack.esolangs.org/tmp/banana.txt kspalaiologos: ``` asmbf mov r1, 3 HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>[-]+++<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: `asmbf mov r1,2 HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>[-]++<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: `asmbfx lbl 1/out 48/jmp 1 HackEso: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 kspalaiologos: ``` ./labels.pl <<<"@x1y1/%x1y1" HackEso: bash: ./labels.pl: No such file or directory kspalaiologos: ``` labels.pl <<<"@x1y1/%x1y1 HackEso: bash: -c: line 0: unexpected EOF while looking for matching `"' \ bash: -c: line 1: syntax error: unexpected end of file kspalaiologos: My client crashed kspalaiologos: ``` labels.pl <<<"@x1y1/%x1y1" kspalaiologos: It's bricked kspalaiologos: For some bizzare reason kspalaiologos: ``` labels.pl <<<"@x1y1/%x1y1" > tmp.s HackEso: No output. kspalaiologos: ``` cat tmp.b HackEso: cat: tmp.b: No such file or directory kspalaiologos: ``` cat tmp.s kspalaiologos: ``` rm tmp.s HackEso: No output. b_jonas: oerjan: re share/quotes , yeah, I even mentioned that a symlink to the writable file is a bit tricky because something could overwrite it with a regular file. I should have realized that that implies the whole symlink thing is a bad idea and shouldn't exist, because you can't safely change commands over without desyncing it. b_jonas: so we're better with no symlink, and changing over in an incompatible way if we want b_jonas: (or change over in a more complex way, but still without a symlink) b_jonas: oerjan: re tmp history, I just suggested that we could solve that for paste only going forward, by making paste log the filename and the IRC_* environment variables somewhere under tmp b_jonas: that would let people like me search and clean up their own pastes wib_jonas: ``` echo $$ wib_jonas: ``` echo $$ wib_jonas: ``` echo $$ wib_jonas: I recall when people saved a few bytes in some golf programs on anagol by repeatedly submtiting until the pid became just what they want wib_jonas: that doesn't work easily in HackEso because you always get the same pid wib_jonas: apparently the first process of the command always gets the pid 53, but the triple backtick spawns a few more wib_jonas: the anagol server even has a tool for that fizzie: Realized I could make /hackenv/tmp more easily un-mess-uppable and stop playing around with .hgignore by just moving it outside the repository completely, and mounting it separately into the umlbox. Not sure if hg would cross a filesystem boundary when looking up the .hg directory. (Git has that special GIT_DISCOVERY_ACROSS_FILESYSTEM option.) wib_jonas: fizzie: you could make it a symlink to a directory outside /hackenv, then hg surely won't follow it fizzie: I meant more that it would be desirable for 'hg' commands inside umlbox to ascend from /hackenv/tmp to /hackenv to find /hackenv/.hg, so that the read-only version control commands work without changing the working directory. fizzie: (When executing the actions outside the sandbox, there would be no tmp, so nothing to follow.) wib_jonas: yes, that would make sense wib_jonas: ``` cat /hackenv/bin/lastfiles HackEso: hg log --removed -l 1 --template "$HACKENV/{join(files,'\n$HACKENV/')}\n" -- "$@" wib_jonas: ``` lastfiles HackEso: ​/hackenv/bin/sport wib_jonas: ``` set -e; cd /; lastfiles HackEso: abort: no repository found in '/' (.hg not found)! wib_jonas: we'd have to change those scripts too for robustness HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ;`: not found int-e: @metar lowi lambdabot: LOWI 191050Z 27003KT 230V320 9999 SCT012 BKN080 03/01 Q1015 NOSIG fizzie: Well, it might work across a mount point. I couldn't (quickly) find anything saying it doesn't. lambdabot: help . Ask for help for . Try 'list' for all commands lambdabot: What module? Try @listmodules for some ideas. kspalaiologos: @listmodules lambdabot: activity base bf check compose dice dict djinn dummy elite eval filter free fresh haddock help hoogle instances irc karma localtime metar more oeis offlineRC pl pointful poll pretty quote search lambdabot: slap source spell system tell ticker todo topic type undo unlambda unmtl version where wib_jonas: which commands do something like lastfiles, as in, accessing the whole repository rather than just the working dir? kspalaiologos: @bf ,[.,]!stuff lambdabot: unexpected end of input: expecting number, "d" or "(" kspalaiologos: @karma lambdabot: You have a karma of 0 wib_jonas: @dice d6 lambdabot: wib_jonas: 5 kspalaiologos: @pl print "perl?"; lambdabot: (line 1, column 14): lambdabot: unexpected ';' lambdabot: expecting variable, "(", operator or end of input fizzie: I would imagine everything to do with history would have issues with it, if it's a problem in the first place. kspalaiologos: ^8ball fungot: ...out of time! fizzie: Even if they pass a path to a specific file, I imagine the working directory needs to be inside the repository? kspalaiologos: Fungot is still broken wib_jonas: ``` set -e; cd /; hg log -T "{date|shortdate}\n" hackenv/wisdom/b_jonas HackEso: 2019-06-09 \ 2016-01-18 \ 2016-01-17 kspalaiologos: I'll get my bot sorted out today wib_jonas: fizzie: no, that's how git works. hg and svn work the sane way, searching for the repo starting from the file that you target fizzie: Hmm, interesting. wib_jonas: fizzie: for git you need a stupid workaround like specifying the git repository in an env-var directly. mind you, it's a good thing that that's _permitted_, since sometimes you want the repo to be in a place other than the working copy without creating even the workspace .git file that gives just the name of the repo fizzie: Hm, I guess one problem with a /hackenv/tmp without .hgignore is that 'hg' commands inside the box would still think they're new files, so something like "hg status" would contain misleading entries. Don't think that would necessarily break any scripts, but it's still unfortunate. fizzie: OTOH moving it out of the tree even inside to something like /hacktmp *would* break `lastfiles and similar, as well as the "../bin" paths people seem to use interactively. wib_jonas: fizzie: um what? why would you have it without .hgignore if it's inside /hackenv/tmp ? wib_jonas: 'the "../bin" paths people seem to use interactively' => I use /hackenv interactively, but sure fizzie: If the real path is outside /hackenv and I just mount it into /hackenv/tmp in umlbox, I don't need a .hgignore for the commits to ignore it, because it won't even be there. wib_jonas: fizzie: but the .hgignore is used inside the sandbox too, and in there, /hackenv/tmp is there, so I think the .hgignore should mention it wib_jonas: I don't see why you wouldn't put it there. even outside the sandbox, where the directory is not present, it's not a problem to have it in .hgignore wib_jonas: it is a feature that the files listed in .hgignore need not exist, because they're often used for things like compiler output files, which you can clean fizzie: Well, the whole reason I was contemplating moving it to a separate mount was to avoid having to rely on .hgignore. wib_jonas: fizzie: would hg even notice that it's on a separate mount if it's bind-mounted? it's quite nontrivial to ask from linux which directories are mount points, so programs use the quick heuristics of just checking the st_dev field of stat, which may fail for a bind mount fizzie: It wouldn't be actually bind-mounted. fizzie: It would be a separate hostfs mount. wib_jonas: there are better ways, apparently the best is to try to rename the directory to inside itself and checking what error it fails with or some such crazy shit that I don't recall wib_jonas: then maybe the st_dev will differ, let me check fizzie: Aaanyway, I might not bother doing it, doesn't seem like it's really all that beneficial. I guess it would stop people from removing the directory completely. wib_jonas: ``` stat -c "%d %n" /lib /usr /hackenv /hackenv/tmp /hackenv/wisdom HackEso: 15 /lib \ 13 /usr \ 18 /hackenv \ 18 /hackenv/tmp \ 18 /hackenv/wisdom wib_jonas: you're right, the st_dev seems to differ kspalaiologos: Just a couple of minutes and my bot will be hopefully finished kspalaiologos: I need someone to help me out testing it wib_jonas: kspalaiologos: I think you should know better than to say things like "just a few minutes ... finished" kspalaiologos: I don't seem to understand kspalaiologos: can you simplify, what do you mean? wib_jonas: kspalaiologos: when you think it's just a few minutes to finish, it always takes longer than taht wib_jonas: so you shouldn't announce that it's just a few minutes kspalaiologos: It's pretty much done now kspalaiologos: 36-19=17 minutes wib_jonas: bfbot echo gCI_oyKp2bE- kspalaiologos: it's not there kspalaiologos: it's in the other channel kspalaiologos: but I'm testing it now kspalaiologos: and I have undefined the echo command kspalaiologos: bfbot is now live bfbot: bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot. bfbot: Commands: =str =def =undef =list =plist =doc kspalaiologos: =str 0s Hello kspalaiologos: =str 0s ,[.,] kspalaiologos: =def 0echo bfbot: ok, defined 'echo' kspalaiologos: =echo greetings bfbot: greetings bfbot: ABCDEFGH kspalaiologos: note it's temporarily served from my PC kspalaiologos: I'll move it to my VPS soon b_jonas: =echo foo kspalaiologos: =echo foo kspalaiologos: what is happening b_jonas: `olist 1187 HackEso: olist 1187: shachaf oerjan Sgeo FireFly boily nortti b_jonas kspalaiologos: what is olist b_jonas: `? olist HackEso: olist is update notification for the webcomic Order of the Stick. http://www.giantitp.com/comics/ootslatest.html HackEso: o is a popular comedy fantasy webcomic. It's about a group called the Order of the Stick, as they go about their adventures with minimal competence, and eventually stumble into a plan by an undead sorcerer to conquer the world, and they're out to stop him and conquer their personal problems at the same time. Hopefully not in that order. b_jonas: I sent the bot some commands in private message, since it's not on the -blah channel, and now it doesn't react kspalaiologos: something is screwed bfbot: bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot. bfbot: Commands: =str =def =undef =list =plist =doc. More help at https://esolangs.org/wiki/bfbot kspalaiologos: can you reproduce it here? bfbot: echo msg1 kspalaiologos: nvm figured it out kspalaiologos: no idea what's up kspalaiologos: very weird bfbot: ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ kspalaiologos: the unprintable characters clogged it up kspalaiologos: now it kinda works b_jonas: that doesn't look right. why does the loop end early? b_jonas: =str 1s++++++++++++++++[->++++<]>[+.] b_jonas: =def 1msg1 bfbot: ok, defined 'msg1' bfbot: ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ kspalaiologos: non-printables are filtered kspalaiologos: from the output kspalaiologos: because they clog the bot b_jonas: what do you mean by "non-printables"? kspalaiologos: everything that is non-printable b_jonas: there are only non-printable bytes on irc, they're \0 \r \n b_jonas: =str 1s++++++++++++++++[->++++<]>[.+] b_jonas: =def 1msg1 bfbot: ok, defined 'msg1' bfbot: @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ lambdabot: Unknown command, try @list b_jonas: now it's not trying to print any of those kspalaiologos: you could have started a chain lol kspalaiologos: I filtered it out kspalaiologos: this solved the issue kspalaiologos: no idea why but it did kspalaiologos: I'll look into that later b_jonas: but how now how to ask the bot to print more characters? kspalaiologos: you're doing incorrect brainfuck kspalaiologos: the variable is overflowing kspalaiologos: so its set to 0 kspalaiologos: so the loop is ending b_jonas: yes, it should end, but only after printing more bytes kspalaiologos: how many of them do you expect? kspalaiologos: those non-printable are filtered so it doesnt show them b_jonas: I expect 192 bytes kspalaiologos: tr -dc '[[:print:]]' b_jonas: after which it would overflow and the loop stops kspalaiologos: is removing other garbage kspalaiologos: I could replace a nonprintable char with a dot kspalaiologos: this seems more like it bfbot: @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~............................................................................................................................................................................................................................................. lambdabot: Unknown command, try @list kspalaiologos: here you go bfbot: echo msg1 b_jonas: =str 1s++++++++++++++++[->++++>++++++>++++++++++++++<<<]>+.>+.>+. b_jonas: =def 1msg1 bfbot: ok, defined 'msg1' kspalaiologos: =list ???? bfbot: echo msg1 kspalaiologos: you can use wildcard b_jonas: =str 1s++++++++++++++++[->++++>++++++>++++++++++>++++++++++<<<<]>+.>+.>>+++.<+. b_jonas: =def 1msg1 bfbot: ok, defined 'msg1' bfbot: Aa.... b_jonas: is this thing only willing to output ascii characters now? b_jonas: nothing else\ kspalaiologos: I may change it kspalaiologos: but now it seems like yes b_jonas: that's sad kspalaiologos: what else would you like to print b_jonas: ideally any byte other than the three that can't occur in a message \0\r\n b_jonas: you can restrict it more, but just ascii printable is quite sever kspalaiologos: printing bell may annoy other users b_jonas: plus I think it should join the -blah channel so that I don't spam this channel b_jonas: only one of them kspalaiologos: well you can experiment with it on p, b_jonas: yes, but then you ask "can you reproduce it here" and such kspalaiologos: I'll get that sorted out kspalaiologos: reload kspalaiologos: It's alive! kspalaiologos: it's running from my vps bfbot: bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot. bfbot: Commands: =str =def =undef =list =plist =doc. More help at https://esolangs.org/wiki/bfbot bfbot: echo msg1 bfbot: Incorrect usage! Refer to =help doc kspalaiologos: 's instant kspalaiologos: perfect bfbot: bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot. bfbot: Commands: =str =def =undef =list =plist =doc. More help at https://esolangs.org/wiki/bfbot kspalaiologos: yeah it's up and running kspalaiologos: a lot of time later kspalaiologos: =8ball will you finally work? bfbot: It is certain. kspalaiologos: =set 0d bfbot: No such command. Try =help. kspalaiologos: =set 0d bfbot: No such command. Try =help. kspalaiologos: =set 0d bfbot: No such command. Try =help. kspalaiologos: =str 0d kspalaiologos: =8ball works bfbot: My reply is no. arseniiv: kspalaiologos: oh a new bot! bfbot: bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot. bfbot: Commands: =str =def =undef =list =plist =doc. More help at https://esolangs.org/wiki/bfbot kspalaiologos: It's very generic kspalaiologos: But I hacked it together in ~3h arseniiv: maybe there is a need for yet another bot? and I could write mine? (but I’m lazy and I don’t know what for) kspalaiologos: Depends kspalaiologos: You may extend existing bots arseniiv: leave your suggestions :D kspalaiologos: And it's simpler task arseniiv: yeah I don’t want to read code, I want to write code kspalaiologos: You dont need to arseniiv: I know arseniiv: better code is no code at all kspalaiologos: =str 0s ,[.,] kspalaiologos: =def simple bfbot: Error: Expected a number. kspalaiologos: =def 0simple bfbot: ok, defined 'simple' kspalaiologos: =simple hello arseniiv bfbot: hello arseniiv arseniiv: though I better finish my constructor analysing thing arseniiv: haha :D kspalaiologos: =undef simple kspalaiologos: I'll be preparing wiki page for one of my languages kspalaiologos: And I'm seeking for someone willing to help a bit out arseniiv: kspalaiologos: oh, have you tested the bot so it wouldn’t accidentally call a command of itself? kspalaiologos: ^thats the fun part kspalaiologos: So you can chain commands kspalaiologos: And possibly induce a disaster arseniiv: And I'm seeking for someone willing to help a bit out => with which tasks? kspalaiologos: Proofreading arseniiv: =simple =simple =help bfbot: No such command. Try =help. kspalaiologos: I undefined simple kspalaiologos: =def 0simple bfbot: ok, defined 'simple' kspalaiologos: Try again arseniiv: as I said I don’t read :P arseniiv: =simple =simple =help bfbot: =simple =help kspalaiologos: Well so you can write some sketches now kspalaiologos: And I'll glue it tomorrow kspalaiologos: There is official documentation about the language kspalaiologos: We may try chaining it with fungot fungot: kspalaiologos: when i " compile/ load time anyway, eg. arseniiv: wait wait I’m confused, sketches? kspalaiologos: You know arseniiv: I better go sleeping as I don’t parse kspalaiologos: First version bits? arseniiv: anyway I could proofread maybe! kspalaiologos: That's nice kspalaiologos: I'll get it written and ping you when it's done tomorrow arseniiv: in a basic manner, can’t say I’ll find serious errors if they would occur kspalaiologos: Nah I mean comprehensibility of article kspalaiologos: Proposed wording changes arseniiv: kspalaiologos: okay. Also you could @tell me too if you wouldn’t be here kspalaiologos: Alright arseniiv: ah hm comprehensibility arseniiv: int-e fixed it in my article once arseniiv: though why not anyway arseniiv: I swear I won’t make your article less comprehensible though. I think kspalaiologos: =str 0s+[--->++<]>++++++++.+++++++.--.+++++.+++++++.[--->+<]>-----.---[->++++<]>-.-----------.-------.+++++++++++..[++>---<]>--.--[->++++<]>-.[->+++<]>.--[--->+<]>-.++[--->++<]>.+++.------------.++++++++.-[++>---<]>+.+++++++.-[--->+<]>+++.++++++++.---[->+++<]>+.+[-->+<]>. kspalaiologos: =def 0f bfbot: ok, defined 'f' kspalaiologos: What just happened b_jonas: arseniiv: yes, another bot is always welcome if they behave well kspalaiologos: b_jonas: would you like to check the article kspalaiologos: I did it a few times but I might have lost a few typos bfbot: bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot. bfbot: Commands: =str =def =undef =list =plist =doc. More help at https://esolangs.org/wiki/bfbot shachaf: b_jonas: Maybe this should also be `smlist? b_jonas: shachaf: dunno. you decide. shachaf: I decide not. fizzie: Weird, I switched umlbox interpreter from Python 2 to 3 (since 2's eventually going to EOL), and even though the part where it does subprocess.call of the UML kernel is reached with exactly the same arguments and config file content, and while the kernel runs exactly the same steps, for some reason the stdout of the executed command is not visible. fizzie: Maybe some subtle change in subprocess library's fd handling or something. b_jonas: or maybe the Briticolan anthem b_jonas: sorry, wrong channel fizzie: The code's pretty low-level for Python, doing os.open / os.dup, because some of the UML kernel arguments are file descriptor numbers like "fd:4". b_jonas: `python3 -copen(2,"w").write("hello") # explicit file descriptor numbers? yes, surely you need low level calls for that b_jonas: open does fdopen if you pass a number to it b_jonas: there's even a parameter to tell whether to close the underlying file description when you close the file handle fizzie: Well, that's not really relevant for what this does, since it doesn't write into any of the file descriptors it opens. b_jonas: fizzie: the same works for reading or other file descriptor operations b_jonas: open just gives you a file handle fizzie: I don't doubt there's a way to use open() and get the file descriptor out of it, but it's not what it does. fizzie: And I don't see how it would be any better to, really. b_jonas: sure, maybe it does something for which that's useful fizzie: It's more that it doesn't do anything for which that's not useful. fizzie: Oh, I see what the issue is. fizzie: "Since Python 3.4, file descriptors created by Python are non-inheritable by default." fizzie: (It uses the close_fds=False option to subprocess to pass a file descriptor into UML, but it's apparently a close-on-exec by default, and I need to os.set_inheritable(fd, True) it. Or maybe use the new pass_fds attribute to subprocess, which is probably a better idea. fizzie: Yep, that did the trick. fizzie: Should probably check that mudem works as well. fizzie: umlbox has this weird thing where if you want networking, you specify particular Unix domain sockets and TCP ports to forward, and it runs a separate "umlbox-mudem" program that multiplexes it all over a single stream, where that single stream is just pipes that are hooked up to /dev/tty2 inside the UML. It runs one copy of mudem outside, and another inside. b_jonas: fizzie: can't you use the ethernet tunnel devices instead? b_jonas: the ones built into linux fizzie: I could, though the umlbox wrapper script doesn't support those out of the box. b_jonas: the ones that you use to connect network namespaces on linux fizzie: UML itself has a pretty similar networking scheme (for when you're running it without any special privileges on the host), except it uses Slirp. fizzie: I think I actually used to use Slirp for real at one point for internetworking. b_jonas: what is Slirp? fizzie: Definitely had a SLIP connection for my first real ISP, and a PPP one for all the dialup ones after that, but there was also Slirp on some system somewhere. fizzie: It's a thing where, if you don't have a real Internet connection, but you do have a shell account you can dial into, you can turn that into an internet connection by running a (regular user) program on the machine you have a shell account on, which talks the SLIP protocol (with extensions, I think) to your computer so that you can use regular Internet programs on it. fizzie: You basically just set up the dialer settings for your SLIP connection (which normally provide a username/password login) to log in and execute the slirp command. b_jonas: a kind of tunnel then. ok. fizzie: Fun fact: EUnet (a Finnish ISP) had two kinds of Internet connections, you either paid 22p/min for the full global Internet, but you could also pay 17p/min if you just needed a connection that allowed connecting to Finnish systems. b_jonas: ... what fizzie: Kind of like the local call / long-distance call distinction, except for the Internet. fizzie: Don't think that'd be very convenient these days. fizzie: I may be misremembering the prices, it's been a while. Lykaina: i'm a galagaholic Lykaina: you know what galaga is, right? kingoffrance: something like space invaders / centipede era arcade game; alternately, sounds like somebody knocks on your door "have you met our lord and savior cthulhu? galaga fghghfhfhgghg" kingoffrance: those are my 2 theories kingoffrance: they are not mutually exclusive Lykaina: you dare compare galaga to space invaders? kingoffrance: im too young, i probably played it on some "classic" respawn kingoffrance: i liked qix kingoffrance: i liked tempest 2000 on atari jaguar too, but never got the proper controller pikhq: b_jonas: A tunnel + a built-in user-space NAT implementation. shachaf: Where can I find good C libraries for things? shachaf: With properties like no malloc, no callbacks, no blocking system calls, etc. shachaf: I mean, no system calls at all, really. shachaf: For example how about a DNS library. I guess there's probably a good one somewhere. fizzie: c-ares is what I've seen used, and it's async, and C. But I don't know if it's any good, and I'm sure it doesn't fill the "no system calls" requirement. shachaf: I mean, as long as the core functionality is there, a layer above it that uses system calls is fine? shachaf: But at least you'd want it to be portable. shachaf: Oh, and of course no GPL and no LGPL. oerjan: `cbt undo HackEso: ​#!/bin/sh \ hg diff -c "$@" | patch -p1 -R oerjan: `undo 12162 HackEso: can't find file to patch at input line 4 \ Perhaps you used the wrong -p or --strip option? \ The text leading up to this was: \ -------------------------- \ |diff -r b776d8e310e6 -r 8bb3e1600f3c bin/sport \ |--- a/bin/sport Tue Nov 19 03:15:37 2019 +0000 \ |+++ b/bin/sport Tue Nov 19 03:44:32 2019 +0000 \ -------------------------- \ File to patch: \ Skip this patch? [y] \ Skipping patch. \ 1 out of 1 hunk ignored oerjan: `` cd ..; undo 12162 HackEso: patching file bin/sport oerjan: `revert oerjan: `slbd undo//1acd ${HACKENV-/hackenv} HackEso: undo//#!/bin/sh \ cd ${HACKENV-/hackenv} \ hg diff -c "$@" | patch -p1 -R oerjan: `undo 12162 HackEso: patching file bin/sport oerjan: `revert Yeah23: !quote oerjan: `quote HackEso: 1033) I'm glad I quit programming to take up listening to numbers stations Yeah23: `quote HackEso HackEso: 1330) `unidecode ⧸🙼 ​[U+29F8 BIG SOLIDUS] [U+1F67C VERY HEAVY SOLIDUS] it is with a very heavy solidus that i write to inform you that unicode has too many code points oerjan: `relcome Yeah23 HackEso: ​07Yeah23: 08Welcome 09to 02the 06international 13hub 04for 07esoteric 08programming 09language 02design 06and 13deployment! 04For 07more 08information, 09check 02out 06our 13wiki: 04. 07(For 08the 09other 02kind 06of 13esoterica, 04try 07#esoteric 08on 09EFnet 02or 06DALnet.) Yeah23: `relcome oerjan HackEso: ​08oerjan: 09Welcome 02to 06the 13international 04hub 07for 08esoteric 09programming 02language 06design 13and 04deployment! 07For 08more 09information, 02check 06out 13our 04wiki: 07. 08(For 09the 02other 06kind 13of 04esoterica, 07try 08#esoteric 09on 02EFnet 06or 13DALnet.) oerjan: `cat bin/hlnp Yeah23: `run HackEso HackEso: cat: bin/hlnp: No such file or directory HackEso: bash: HackEso: command not found oerjan: `cbt bin/hlnp HackEso: cat: /hackenv/bin/bin/hlnp: No such file or directory oerjan: `cbt hlnp HackEso: scowrevs="$(/usr/bin/paste -sd'|' /hackenv/share/scowrevs)"; hg log -r "tip:0 & ! ($scowrevs)" "$@" | sed 's/\(\(^\| \)[++++++>+++++++>++++++++><<<<-]>.>+++.>+++.+. [112] kspalaiologos: =8ball are you alive? bfbot: Outlook good. kspalaiologos: oerjan: yeah kspalaiologos: But I'd have to write Brainfuck by hand kspalaiologos: Amd I'm not really willing to do so oerjan: shocking kspalaiologos: Btw, Brainfuck text generator we currently have kspalaiologos: Is crappy kspalaiologos: Don't use, don't count on it kspalaiologos: The messages are overall longer than 256 bytes kspalaiologos: So I cannot create lookup table in memory oerjan: well it seemed to be shorter than what you replaced it with for ^wiki oerjan: you don't need a lookup table for that method kspalaiologos: Did it? kspalaiologos: Jumps are szpenaice6 kspalaiologos: Expensive kspalaiologos: `asmbf lbl 1/jmp 1 HackEso: ​+>+[>>>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>+<<<<<<<<<[-]>[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: Also let's check kspalaiologos: `bf_textgen https://esolangs.org HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: bf_textgen: not found oerjan: `! bf_txtgen https://esolangs.org/wiki/ HackEso: 165 +++++++++++++[>+++++++++>++++++++>+++++++++>++++<<<<-]>>.<-..----.>>--.>++++++.-----------..<<---.>.<<-.---.>----.<++.>++++++.>.>-.<<<+.+++.>.>>+.<++++.<++.++.--.>>. [955] oerjan: ^show wiki 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.,[.,] oerjan: i changed ^wiki back because you forgot the https kspalaiologos: ^def crappywiki bf +++++++++++++[>+++++++++>++++++++>+++++++++>++++<<<<-]>>.<-..----.>>--.>++++++.-----------..<<---.>.<<-.---.>----.<++.>++++++.>.>-.<<<+.+++.>.>>+.<++++.<++.++.--.>>.,[.,] fungot: Defined. kspalaiologos: ^show crappywiki fungot: +13[>+9>+8>+9>+4<4-]>2.<-..-4.>2-2.>+6.-11..<2-3.>.<2-.-3.>-4.<+2.>+6.>.>-.<3+.+3.>.>2+.<+4.<+2.+2.-2.>2.,[.,] imode: doesn't seem crappy to me. oerjan: the internal compression makes comparison awkward (also editing) oerjan: anyway those are both created with bf_txtgen kspalaiologos: I didn't use tool called such oerjan: i said i changed ^wiki back kspalaiologos: 'll try firing BFCruncher oerjan: and then modified it to do https kspalaiologos: I added https:// with my change oerjan: no you didn't kspalaiologos: How will we find out? oerjan: see logs kspalaiologos: Can you tell me the date? kspalaiologos: You changed it obviously oerjan: +[-5>+3<]>+.+12..-4.[-2>+<]>+2.-11..[-3>+<]>.[-3>+<]>-4.-4.-3.-11.+13.-7.+12.+[+2>-3<]>.-3[-5>+<]>.+3.-11.-2[->+3<]>.+2[-3>+2<]>+.+[->+3<]>+.+2.-2.-4[->+3<]>.,[.,] oerjan: was yours kspalaiologos: It's shorter when uncompressed though imode: how is that possible. kspalaiologos: ^shorter than his obviously imode: it doesn't look like it's shorter, no. oerjan: https://esolangs.org/logs/2019-11-18.html#l2c oerjan: that's where i tested it and saw it was still http:// kspalaiologos: Maybe somebody reverted it kspalaiologos: No idea kspalaiologos: I remember using https but K might be wrong oerjan: `edit ../bin/rlexp HackEso: https://hack.esolangs.org/edit/bin/rlexp oerjan: `` grep -l hashbang ../bin/* HackEso: No output. oerjan: `` grep -l args_or ../bin/* HackEso: ​../bin/aaaaaaaaa \ ../bin/asmbf \ ../bin/complain \ ../bin/dedot \ ../bin/döts \ ../bin/h \ ../bin/insanetemp \ ../bin/lowercase \ ../bin/morse-decode \ ../bin/noping \ ../bin/ord \ ../bin/ordu \ ../bin/orenbow \ ../bin/poulet \ ../bin/rainbow \ ../bin/rainbow.old \ ../bin/rainwords \ ../bin/rot13 \ ../bin/sanetemp \ ../bin/shmify \ ../bin/ümläüt \ ../bin/unhex \ ../bin/zalgo oerjan: `` grep -l 'args_or.*perl' ../bin/* HackEso: ​../bin/h \ ../bin/ord \ ../bin/ordu oerjan: `cbt h HackEso: ​#!/hackenv/bin/shebang_args_or_input perl -p \ s/([aeiouy])([bcdfghjklmnpqrstvxz])/$1h$2/ig oerjan: `fetch ../bin/rlexp https://hack.esolangs.org/get/bin/rlexp HackEso: 2019-11-20 06:20:25 URL:https://hack.esolangs.org/get/bin/rlexp [73/73] -> "/hackenv/bin/rlexp" [1] oerjan: `rlexp +[-5>+3<]>+.+12..-4.[-2>+<]>+2.-11..[-3>+<]>.[-3>+<]>-4.-4.-3.-11.+13.-7.+12.+[+2>-3<]>.-3[-5>+<]>.+3.-11.-2[->+3<]>.+2[-3>+2<]>+.+[->+3<]>+.+2.- HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: /hackenv/bin/rlexp: Permission denied \ /srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: /hackenv/bin/rlexp: cannot execute: Permission denied oerjan: 2.-4[->+3<]>.,[.,] oerjan: `` chmod +x ../bin/rlexp HackEso: No output. oerjan: 2.-4[->+3<]>.,[.,] oerjan: `rlexp +[-5>+3<]>+.+12..-4.[-2>+<]>+2.-11..[-3>+<]>.[-3>+<]>-4.-4.-3.-11.+13.-7.+12.+[+2>-3<]>.-3[-5>+<]>.+3.-11.-2[->+3<]>.+2[-3>+2<]>+.+[->+3<]>+.+2.-2.-4[->+3<]>.,[.,] HackEso: Out of memory! \ panic: fold_constants JMPENV_PUSH returned 2 at /hackenv/bin/rlexp line 2. oerjan: `rlexp t2e3s5t6 HackEso: Out of memory! \ panic: fold_constants JMPENV_PUSH returned 2 at /hackenv/bin/rlexp line 2. oerjan: ok something wrong oerjan: `fetch ../bin/rlexp https://hack.esolangs.org/get/bin/rlexp HackEso: 2019-11-20 06:22:08 URL:https://hack.esolangs.org/get/bin/rlexp [73/73] -> "/hackenv/bin/rlexp" [1] oerjan: `rlexp +[-5>+3<]>+.+12..-4.[-2>+<]>+2.-11..[-3>+<]>.[-3>+<]>-4.-4.-3.-11.+13.-7.+12.+[+2>-3<]>.-3[-5>+<]>.+3.-11.-2[->+3<]>.+2[-3>+2<]>+.+[->+3<]>+.+2.-2.-4[->+3<]>.,[.,] HackEso: ​+[----->+3<]>+.+12..-4.[-2>+<]>+2.-11..[-3>+<]>.[-3>+<]>-4.-4.-3.-11.+13.-7.+12.+[+2>-3<]>.-3[-5>+<]>.+3.-11.-2[->+3<]>.+2[-3>+2<]>+.+[->+3<]>+.+2.-2.-4[->+3<]>.,[.,] oerjan: `rlexp +++++++++++++[>+++++++++>++++++++>+++++++++>++++<<<<-]>>.<-..----.>>--.>++++++.- HackEso: ​+++++++++++++[>+++++++++>++++++++>+++++++++>++++<<<<-]>>.<-..----.>>--.>++++++.- oerjan: oh wait oerjan: `rlexp +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.,[.,] HackEso: ​+++++[>+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.,[.,] oerjan: `rlexp +[-5>+3<]>+.+12..-4.[-2>+<]>+2.-11..[-3>+<]>.[-3>+<]>-4.-4.-3.-11.+13.-7.+12.+[+2>-3<]>.-3[-5>+<]>.+3.-11.-2[->+3<]>.+2[-3>+2<]>+.+[->+3<]>+.+2.-2.-4[->+3<]>.,[.,] HackEso: ​+[----->+3<]>+.+12..-4.[-2>+<]>+2.-11..[-3>+<]>.[-3>+<]>-4.-4.-3.-11.+13.-7.+12.+[+2>-3<]>.-3[-5>+<]>.+3.-11.-2[->+3<]>.+2[-3>+2<]>+.+[->+3<]>+.+2.-2.-4[->+3<]>.,[.,] oerjan: wait what oerjan: oh there's a bug oerjan: i wasn't looking properly imode: ksa seemed a little miffed you removed his command. oerjan: `fetch ../bin/rlexp https://hack.esolangs.org/get/bin/rlexp HackEso: 2019-11-20 06:26:16 URL:https://hack.esolangs.org/get/bin/rlexp [74/74] -> "/hackenv/bin/rlexp" [1] oerjan: `rlexp +[-5>+3<]>+.+12..-4.[-2>+<]>+2.-11..[-3>+<]>.[-3>+<]>-4.-4.-3.-11.+13.-7.+12.+[+2>-3<]>.-3[-5>+<]>.+3.-11.-2[->+3<]>.+2[-3>+2<]>+.+[->+3<]>+.+2.-2.-4[->+3<]>.,[.,] HackEso: ​+[----->+++<]>+.++..----.[-->+<]>++.-..[--->+<]>.[--->+<]>----.----.---.-.+++.-------.++.+[++>---<]>.---[----->+<]>.+++.-.--[->+++<]>.++[--->++<]>+.+[->+++<]>+.++.--.----[->+++<]>.,[.,] oerjan: ...there's definitely still something wrong with multidigit numbers oerjan: `rlexp t12 imode: `rlexp t11 oerjan: i was thinking this command could be useful for expanding fungot's compressed brainfuck in general fungot: oerjan: i tend not to heed the flamewar part of the closure as a pair imode: `rlexp t13 oerjan: fungot: good policy fungot: oerjan: how did you do it with imode: `rlexp t11113 oerjan: `rlexp t33 oerjan: hm i see imode: does it just run until it hits the last digit in a span of digits or something. imode: `rlexp t00005 oerjan: `fetch ../bin/rlexp https://hack.esolangs.org/get/bin/rlexp HackEso: 2019-11-20 06:30:47 URL:https://hack.esolangs.org/get/bin/rlexp [74/74] -> "/hackenv/bin/rlexp" [1] oerjan: `rlexp t33 HackEso: ttttttttttttttttttttttttttttttttt oerjan: `rlexp +[-5>+3<]>+.+12..-4.[-2>+<]>+2.-11..[-3>+<]>.[-3>+<]>-4.-4.-3.-11.+13.-7.+12.+[+2>-3<]>.-3[-5>+<]>.+3.-11.-2[->+3<]>.+2[-3>+2<]>+.+[->+3<]>+.+2.-2.-4[->+3<]>.,[.,] HackEso: ​+[----->+++<]>+.++++++++++++..----.[-->+<]>++.-----------..[--->+<]>.[--->+<]>----.----.---.-----------.+++++++++++++.-------.++++++++++++.+[++>---<]>.---[----->+<]>.+++.-----------.--[->+++<]>.++[--->++<]>+.+[->+++<]>+.++.--.----[->+++<]>.,[.,] oerjan: `rlexp +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.,[.,] HackEso: ​+++++++++++++++[>++++>+++++++>+++++++>++++++++<<<<-]>>>-.>----..<<+++++++.+++.<--.-----------..>>---.<.>>-----.---.<----.>++.<++++++.<.<-.>>>+.+++.<.<<+.>++++.>++.++.--.<<.,[.,] oerjan: there we go. oerjan: @tell kspalaiologos sorry if i jumped on you lambdabot: Consider it noted. oerjan: imode: i put the + outside the matching group of the regexp so it only got the first character oerjan: `learn `rlexp is a command for expanding the rle format fungot ^show's for brainfuck code but doesn't accept as input. fungot: oerjan: you should make () a proper list" here means whatever list is n levels up from the negative list HackEso: Learned '`rlexp': `rlexp is a command for expanding the rle format fungot ^show's for brainfuck code but doesn't accept as input. oerjan: `` ls bin/*rl* HackEso: ls: cannot access 'bin/*rl*': No such file or directory oerjan: `` ls ../bin/*rl* HackEso: ​../bin/curl \ ../bin/hello-world-in-any-language \ ../bin/hurl \ ../bin/hwrl \ ../bin/jousturl \ ../bin/logurl \ ../bin/perl-e \ ../bin/raw-url \ ../bin/rlexp \ ../bin/url \ ../bin/wrl \ ../bin/zalgoverload oerjan: `cbt wrl HackEso: url "$HACKENV/wisdom/$1" oerjan: i am _this_ close to adding a `` variant that cd's to $HACKENV first. oerjan: or maybe a `nur variant. HackEso: No output. oerjan: The Castle might be distantly related to Elan kspalaiologos: ^def 8ball bf ----[---->+<]>--.-----.-------[->++<]>.-.+++++++++++..[++>---<]>--.[,.] fungot: Defined. kspalaiologos: ^8ball w0t fungot: =8ball w0t bfbot: Cannot predict now. kspalaiologos: =doc 8ball 8-ball pseudorandom emulator for bfbot. Feel free to view it's code. kspalaiologos: =doc 8ball bfbot: 8ball: 8-ball pseudorandom emulator for bfbot. Feel free to view it's code. kspalaiologos: =doc 8ball pseudorandom emulator for bfbot. Feel free to view it's code. kspalaiologos: =doc 8ball bfbot: 8ball: pseudorandom emulator for bfbot. Feel free to view it's code. kspalaiologos: =doc 8ball pseudorandom 8-ball emulator for bfbot. Feel free to view it's code kspalaiologos: Perfect bfbot: bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot. bfbot: Commands: =str =def =undef =list =plist =doc. More help at https://esolangs.org/wiki/bfbot fizzie: ^8ball Did I restore the existing program? fizzie: (I mean, it had a perfectly working one already, no need to make it just a redirect.) wib_jonas: shachaf: I second the recommendation for c-ares as a DNS resolver library. wib_jonas: other than that, you should ask about more specific functionality, rather than "C libraries for things" wib_jonas: " ed and vi are unlikely to work anyway, there's no real terminal" => I have used ed non-interactively without a terminal. I admit the usage was rather esoteric, but people used it seriously too, to apply patches before patch. wib_jonas: Yeah23: ed is not installed on debian by default, but it's a good candidate to ask fizzie wib_jonas: fizzie: can you install ed to HackEso? wib_jonas: it's small and esoteric, so I think it's worth to have wib_jonas: I mean, it has esoteric uses fizzie: wib_jonas: Given that it's the standard text editor, maybe we should have it. wib_jonas: fizzie: yeah, and I should have mentioned it when you installed dc wib_jonas: or bc, or both, whichever it is that isn't on debian by default fizzie: `ed -V wib_jonas: ``` dc -e16o100p HackEso: GNU ed 1.15 \ Copyright (C) 1994 Andrew L. Moore. \ Copyright (C) 2019 Antonio Diaz Diaz. \ License GPLv3+: GNU GPL version 3 or later \ This is free software: you are free to change and redistribute it. \ There is NO WARRANTY, to the extent permitted by law. wib_jonas: ``` dc -e16i64p fizzie: I think dc is the one that's not installed by default, I remember installing it. wib_jonas: ``` bc -e 'obase = G; print(100)' HackEso: bc: invalid option -- 'e' \ usage: bc [options] [file ...] \ -h --help print this usage and exit \ -i --interactive force interactive mode \ -l --mathlib use the predefined math routines \ -q --quiet don't print initial banner \ -s --standard non-standard bc constructs are errors \ -w --warn warn about non-standard bc constructs \ -v --version print version information and exit fizzie: It's also the more esoteric of the two, I feel. wib_jonas: ``` bc << 'obase = G; print(100)' HackEso: bash: warning: here-document at line 0 delimited by end-of-file (wanted `obase = G; print(100)') wib_jonas: ``` bc <<< 'obase = G; print(100)' wib_jonas: ``` bc <<< 'ibase = G; print(64)' fizzie: My favourite bit about dc is the part of the man page which says "the sequence KSK0k1/_1Ss [ls*]Sxd0>x [256~Ssd0qaPlxx] dsxxsx0sqLqsxLxLK+k could also accomplish this function" with a straight face. wib_jonas: ``` set -e; ed <<<$'i\none\nthree\nfour\n.\n1a\ntwo\n.\nwtmp/ah-ah-ah\nq'; cat tmp/ah-ah-ah wib_jonas: ``` set -e; ed <<<$'etmp/ah-ah-ah\ni\none\nthree\nfour\n.\n1a\ntwo\n.\nw\nq'; cat tmp/ah-ah-ah wib_jonas: ``` set -e; ed <<<$'e tmp/ah-ah-ah\ni\none\nthree\nfour\n.\n1a\ntwo\n.\nw\nq'; cat tmp/ah-ah-ah HackEso: tmp/ah-ah-ah: No such file or directory \ ? fizzie: Ah, ed's good old '?'. wib_jonas: ``` set -e; ed <<<$'i\none\nthree\nfour\n.\n1a\ntwo\n.\nw/hackenv/tmp/ah-ah-ah\nq'; cat tmp/ah-ah-ah wib_jonas: ``` set -e; ed <<<$'i\none\nthree\nfour\n.\n1a\ntwo\n.\nw /hackenv/tmp/ah-ah-ah\nq'; cat tmp/ah-ah-ah HackEso: cat: tmp/ah-ah-ah: No such file or directory \ 19 wib_jonas: ``` set -e; ed <<<$'i\none\nthree\nfour\n.\n1a\ntwo\n.\nw /hackenv/tmp/ah-ah-ah\nq'; cat /hackenv/tmp/ah-ah-ah HackEso: 19 \ one \ two \ three \ four wib_jonas: ``` set -e; ed <<<$'i\none\nthree\nfour\n.\n1a\ntwo\n.\nw /hackenv/tmp/ah-ah-ah\nq'; echo ---; cat /hackenv/tmp/ah-ah-ah HackEso: 19 \ --- \ one \ two \ three \ four kspalaiologos2: fizzie, I genuinely didn't know kspalaiologos: perfect kspalaiologos: =show 8bball bfbot: No such command. Try =help. kspalaiologos: ^show 8ball fungot: ,[[->+<],]>2+2<[->-[>+>2]>[+[-<+>]>+>2]<5]>4+<2[>2-+11[>+8>+4<2-]>+.+12.+14.>+2.<4-]>2[+10[>+7>+4<2-]>+.+33.>+2.<2] kspalaiologos: is this it? kspalaiologos: ^ball blah kspalaiologos: ^8ball blah kspalaiologos: ^8ball ? kspalaiologos: It's a very crappy 8ball you know it kspalaiologos: =8ball hi bfbot: Very doubtful. kspalaiologos: =8ball hello bfbot: Without a doubt. kspalaiologos: =8ball is this 8ball nicer? bfbot: As I see it, yes. kspalaiologos: it even has an easteregg kspalaiologos: =8ball KPS bfbot: Congratulations! You found the easter egg! ~~kspalaiologos, 2019 bfbot: bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot. bfbot: Commands: =str =def =undef =list =plist =doc. More help at https://esolangs.org/wiki/bfbot fizzie: ^8ball Is it really crappy? fizzie: See, there you go. kspalaiologos: it's just yes/no kspalaiologos: c'mon, you could do it better :p arseniiv: kspalaiologos: didn’t read the logs; am I needed yet? :) kspalaiologos: I'm not home kspalaiologos: When I'll be back I'll take on it kspalaiologos: =8ball is my 8ball better? bfbot: Better not tell you now. kspalaiologos: =8ball my 8ball is certainly better bfbot: Better not tell you now. kspalaiologos: =8ball my 8ball is better bfbot: Signs point to yes. kspalaiologos: no way it works lol kspalaiologos: `asmbf @l/out .A/jmp 5l HackEso: ​+>+[>>>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]# kspalaiologos: `asmbf @l/out .A/jmp %l HackEso: ​+>+[>>>+<<+<<[>>->+<<<-]>>>[<<<+>>>-]<[->+<<[>>>-<<+<-]>[<+>-]>>[<->[-]]<[<<<+>>>-]<]>>[-]<<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]+<<<<<<<<<[-]>[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] shachaf: b_jonas: Are you sure? I'm interested in API design and things as well as specific functionality. kspalaiologos: https://esolangs.org/wiki/Asm2bf kspalaiologos: there is need to add some code blocks kspalaiologos: and bold some text kspalaiologos: but it's just some detail work, initial draft is done kspalaiologos: arseniiv, you can read it :) arseniiv: kspalaiologos: ok let’s see arseniiv: kspalaiologos: should I change “32-bit code” to “32-bit-celled code” maybe? Someone may accidentally think it means code for a 32-bit architecture (or may they?) arseniiv: ah no it seems genuine 32-bit architecture code, hm arseniiv: I leave that as it is arseniiv: kspalaiologos: I’ll continue with suggestions/questions in PM kspalaiologos: it's 16bit architecture kspalaiologos: anyone else willing to proofread the article? kspalaiologos: https://esolangs.org/wiki/Asm2bf arseniiv: I think I’ve done what I could :) kspalaiologos: ah, fine kspalaiologos: thanks arseniiv: also I encountered a weird bug when ` in the input field and even in the text renders as a real grave accent diacritic, this is probably due to my weird font settings in firefox arseniiv: kspalaiologos: yw arseniiv: oops I typoed it, yes kspalaiologos: << To build the program, simply execute it and the brainfuck file will appear nearby. >> kspalaiologos: Is this correct? kspalaiologos: I'm not even sure kspalaiologos: by sounds better to me kspalaiologos: but I may be wrong kspalaiologos: nearby in case of files sounds weird arseniiv: I’m not that good with deployment and with Linux tools too :D kspalaiologos: but overall kspalaiologos: nice changes kspalaiologos: thanks kspalaiologos: I'll edit out the nearby though because it sounds weird to me arseniiv: ah I saw in the dictionary that “by” is sometimes used but honestly I haven’t seen it yet arseniiv: used in that sense* arseniiv: I'll edit out the nearby though because it sounds weird to me => okay :D kspalaiologos: I'll add gisa paragraph kspalaiologos: and it's done kspalaiologos: quite large article imo, haven't seen many so big articles on esolangs arseniiv: yeah, a long read kspalaiologos: I've been poking the program for around 3 years kspalaiologos: sometimes more, sometimes less kspalaiologos: so it's quite complicated how everything works kspalaiologos: I could explain stuff in even more detail but it would be just plain boring HackEso: 971) `quote 1000 kspalaiologos: `quote 1000 HackEso: 1000) "would be a good name for a band when preceded by its quotation" would be a good name for a band when preceded by its quotation kspalaiologos: `quote 1337 HackEso: No output. kspalaiologos: It's yet not there kspalaiologos: `quote 1336 HackEso: No output. kspalaiologos: `quote 1335 HackEso: 1335) The domain is public, but what's the codomain? kspalaiologos: `quote 1334 HackEso: 1334) kspalaiologos: yes, it's much more enjoyable sitting in #esoteric than chiselling 99 bottles of beer into a rock. kspalaiologos: `quote 1333 HackEso: 1333) I have made a chess engine in Malbolge in theory it's decent but it has two drawbacks a) It requires 31 and a half gigabytes of memory b) it's quicker to count atoms in universe than to run it kspalaiologos: no changes that presumes fizzie: `delquote 753 HackEso: ​*poof* i have a simple view of reality that goes something like this.. once your sufficiently well tied up.. it doesn't make a difference if your enemy has a knife or a gun.. you're equally screwed fizzie: `delquote 1016 HackEso: ​*poof* So. In general. Fuck ... actually, I'm not really annoyed at anything right now fizzie: `delquote 213 HackEso: ​*poof* actually, I think vorpal is the "retarded team member" to the left tswett[m]: So I've been thinking about the way that the stock market moves. tswett[m]: The simplest reasonable model is geometric Brownian motion. The (logarithmic) percentage change from one day to the next is a normally distributed random variable. tswett[m]: It's a nice model, but it's wrong. :D The changes are known to have significant excess kurtosis (though I don't remember if it's positive or negative). tswett[m]: So here's the particular thing I'm wondering. tswett[m]: Independently normally distributed random variables add together really nicely. If X has mean m_1 and variance s^2_1, and Y has mean m_2 and variance s^2_2, then X + Y has mean m_1 + m_2 and variance s^2_1 + s^2_2. tswett[m]: Does something similar happen with higher moments, like skewness and kurtosis? kmc: good question! fizzie: The sum of two independent normally distributed variables is itself normally distributed, with the mean and variance you mention. tswett[m]: Aha, here's the answer. The mean is the first cumulant and the variance is the second cumulant; the property I mentioned holds for these and all higher cumulants. https://en.wikipedia.org/wiki/Cumulant fizzie: So its skewness and kurtosis are 0, as are the ones for X and Y as well. tswett[m]: Right, but now this holds for X and Y having any distribution, not just a normal distribution. HackEso: 502) Isn't "strip nomic" just another word for all dating, though? fizzie: Weird. I've been refactoring umlbox code a little (in preparation for some tweaks), and one thing I changed was to start using "con1=fd:N,fd:M", where N is /dev/null (opened RDWR) and M is the inherited stdout (for capturing the command output). fizzie: Previously it was "con1=null,fd:M", which uses UML's 'null' console type instead, which makes reads block forever. fizzie: Locally this seemed to make commands like "cat" reliably return quickly, instead of waiting for the timeout. But on the bot machine, it's... flaky. Now it's again returning quickly, but earlier I wasn't, even though I changed nothing. HackEso: No output. shachaf: I'm at a bookstore and I picked a book semi-randomly and opened it at a page semi-randomly and it talks about ais523. kmc: *blink* shachaf: I mean, it's a book about computability or something, so not that random. fungot: https://esolangs.org/wiki/ oerjan: b_jonas: oh right, ed doesn't strictly need a terminal. fizzie: oerjan: That one I restored from the logs. oerjan: in fact probably doesn't care oerjan: fizzie: ah oerjan: i saw your message about restoring and wondered how much you'd wiped out 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 fungot: ............................................................................................................................................................................................................... ... oerjan: ^show a fungot: +13[.] fizzie: There's a wonky thing umlbox does which is to append a ' | cat' to the command line if the stdout of the call isn't a terminal. I assume that's because from the UML command's perspective /dev/tty1 is always a TTY, even when UML has connected it to a pipe/file. fizzie: Hm, I've broken something. :/ oerjan: NOOOOOOOOOOOOO fizzie: `` echo foo; echo bar; echo baz HackEso: foo \ bar \ baz fizzie: `` echo foo >&2; echo bar >&2; echo baz >&2 fizzie: That's not right. fizzie: Oh, that's right, that's one reason why stdout and stderr ordering was pretty wonky even before: the '| cat' thing only deals with stdout, stderr goes directly to /dev/tty1. fizzie: That said, I'm not sure what I managed to break there. oerjan: `` (echo foo; echo bar; echo baz) >&2 oerjan: something EOL handling? oerjan: `` (echo foo; echo bar; echo baz) >&2; echo fizz HackEso: No output. fizzie: Mmmaybe. I don't see how though. fizzie: I also got two different outputs for the same command before, so there's a race condition somewhere as well. oerjan: `` echo buzz; (echo foo; echo bar; echo baz) >&2; echo fizz fizzie: I assume it could be the newline translation, it's just odd how that could be affected. fizzie: What the hackbot side does is, `p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True); p.stdin.close(); ret = p.stdout.read(1024)`. No matter how the UML process outputs things, they should all still end up in the same pipe. shachaf: int-e: Hmm, is something like "non-chronological backjumping" actually mandatory when doing clause learning? shachaf: I thought it would be optional but you want to have a reason for every assignment, and if you do regular backtracking, do you even have a reason? shachaf: Also maybe you're tired of random SAT questions, hmm. oerjan: . o O ( do you like random SAT questions? ) fizzie: Yeah, IDGI. Running the umlbox command line for 'echo foo; echo bar; echo baz' and 'echo foo >&2; echo bar >&2; echo baz >&2' manually on the same system, with 1>/tmp/out.1 2>/tmp/out.2, there's no difference: both write exactly the same content into.... ohhh, I get it. fizzie: The bot does a .read() on the stdout pipe. When you're writing to stderr, it probably gets split to multiple writes, which means it only receives the first line. fizzie: But when you write to stdout, it's a fully buffered stream (through the | cat), so it gets the full chunk in one .read(). oerjan: fiendish fizzie: I think I can just wrap it in a io.BufferedReader to fix it. Although I still don't know how it actually broke. shachaf: int-e: Wait, maybe I'm just wrong and you can use the conflicting clause. fizzie: Hmm, well, it wasn't that simple. It's true that the .read() call only returns the first line, but then a subsequent .read() actually says it's at EOF. How does that make sense? It doesn't make sense. fizzie: Maybe it could be non-blocking somehow... although I don't think so. fizzie: No, it's not that. If I make umlbox write a line to the file descriptor used before closing it, the bot does read that. fizzie: So it's just that somehow the uml terminates before it has written all the output. fizzie: Super weird. It also happens outside the bot, if I direct the output to a pipe. Immediately after the first line has been written, it terminates. With no messages. oerjan: did this change happen when you upgraded debian, or is there something you actually edited involved? oerjan: fizzie: ^ oerjan: because the latter should at least be bisectable... fizzie: Hard to say. People don't usually write to stderr that much. But I can always roll back to an old version and test again. fizzie: Right now I'm getting really bizarre behavior out. oerjan: just change that | cat to |& cat and call it a day :) shachaf: int-e: Wait, now I'm on the train and it doesn't make sense again. fizzie: It runs using /bin/sh, it doesn't work there. But I did give that a think. fizzie: 2>&1 | cat might work. oerjan: shachaf: that reminds me of something. oh right, the "i'm on a horse" meme. fizzie: Anyway, the output behaviour is really bizarre. I'm adding printfs here in umlbox init, and only some of them get out, even when I'm not really doing anything special. As soon as it starts to read from the /ubda device, everything goes weird. fizzie: I seem to consistently get all the output from the printfs before the first read, whatever that means. fizzie: Well, except sometimes I don't get even that. shachaf: oerjan: Is that like "I've been through the desert on a horse with no name"? fizzie: I think there might just be some sort of a thing where UML has no way to say "flush everything that has been written to the console/serial channels before terminating" when init calls `sync(); reboot(LINUX_REBOOT_CMD_POWER_OFF);` on it. oerjan: shachaf: probably{, not} fizzie: FWIW, doing '2>&1 | cat' didn't actually fix it. And anyway it's not strictly related to stderr. Here's the behavior I'm consistently getting when doing something close to what the bot is doing: http://ix.io/22oJ fizzie: Does that make any sense? fizzie: Bah. Maybe I'll try the Debian standard 4.19 UML kernel, instead of my home-built 4.9 one. Although I think there must've been some reason why I built my own. shachaf: fizzie: I haven't been reading the whole log. What's with only the first line being printed? Is that the nonsensical thing? fizzie: Well, occasionally it's weirder than that, but yes. shachaf: When is it weirder? fizzie: I don't think I can describe this. shachaf: Is this echo the builtin or /bin/echo? Can you strace it? shachaf: I'm typing on my phone so everything is scow. fizzie: I can't strace UML. I could probably strace inside it, but I'm not sure how much that would help. fizzie: Anyway, I switched to the new UML kernel and now it outputs nothing at all. fizzie: `echo ping HackEso: No output. fizzie: Not great. shachaf: What if you strace inside it? Is it one write call or three? fizzie: Well, I can't, now. fizzie: It just crashes with: Trying to reregister IRQ 2 FD 4 TYPE 0 ID (____ptrval____) \ open(rfile, O_RDONLY): Device or resource busy fizzie: (This is when it's trying to open the tty1 device.) fizzie: Bah, I'll revert back to my own 4.9 version and give up for now. At least it works to some degree. It's not even impossible it's been broken a little like that for long now. fizzie: By the way, it was with the echo builtin; with /bin/echo both the plain and | cat version print all lines. fizzie: Doing strace inside suggests the plain version is three separate writes, with | cat... well, I don't get the strace output, so it's kind of hard to say. shachaf: You can't strace into a file? fizzie: And with /bin/echo I get more of the strace output, but not all of it. shachaf: Is that bash -c /bin/echo or/bin/echo directly? fizzie: I guess I could, I would just need to hostfs mount something in writable form. fizzie: bash -c /bin/echo. shachaf: Maybe your computer's haunted? fizzie: Okay: with bash -c 'echo -e ...', no cat, I get the full output and it got written as three separate writes. fizzie: With bash -c 'echo -e ...' and the cat -- and note that this cat is outside the UML kernel, it's just changing the UML's stdout from a (pseudo)terminal to a pipe -- I only get the first line of output, and it was attempted to be written as three separate writes, but the third failed with EPIPE. oerjan: could that be involved? shachaf: What is cat seeing? I guess read 5 and then read 0? shachaf: EPIPE is odd. fizzie: With bash -c /bin/echo, I sometimes get no output at all, and a single write of the whole 15 bytes which fails with EIO. fizzie: And occasionally I get the full output, and three separate writes of 5 bytes each. shachaf: OK, I'm spooked. fizzie: And the last combination, /bin/echo with cat, seems to consistently produce all three lines of output. fizzie: Written in a single 15-byte write. fizzie: I don't think I've even seen EIO before. shachaf: What's closing the pipe? oerjan: (gremlins) fizzie: The umlbox wrapper script does close the file descriptor, but that's supposedly the write end of the pipe, and anyway should only happen after the UML kernel process has terminated and been wait'd for. fizzie: Let me strace that cat on the outside too. oerjan: `quote 1000 <-- enough quotes have been deleted that numbers aren't remotely stable oerjan: . o O ( kmcdonald had a farm ) fizzie: Okay, built-in echo with cat. Saw one line of output. Inside, bash did three write calls of 5 bytes each; first two returned 5, the last returned -1 EPIPE. Outside, the cat did one read(0, "foo1\n", 131072) and got 5 bytes, then the next read returned 0/EOF. fizzie: I've no idea what could be closing the pipe. The only people who should even have access to the read end of the pipe would be cat (which doesn't seem to be closing it) and bash (which I assume wouldn't do it without a good reason). fizzie: The umlbox wrapper script, and the UML kernel, should only have a file descriptor for the write end. oerjan: `doag ../quotes | grep 1000 HackEso: No output. fizzie: Really going to give up for now though. It's late. There's ghosts about. oerjan: `` doag ../quotes | paste HackEso: https://hack.esolangs.org/tmp/paste/paste.20469 fizzie: I strongly suspect it's some UML weirdness, after all, init will tell the kernel to power off right after the command finishes. I might need some sort of synchronization mechanism here. oerjan: `quote steal.code HackEso: No output. oerjan: `quote steal..code HackEso: 687) what a world it would be if you could actually *steal* code so that the other project has to rewrite it or infiltrate your project to steal it back oerjan: hm that's older, so it _should_ be in the paste fizzie: (Incidentally, sleep is also behaving super-weirdly inside the UML. If I stick a 'sleep 1;' in front, there's never any output. And the sleep durations never seem to actually match the designated amount of seconds.) oerjan: i vaguely think someone used sleep in HackEso not that long ago oerjan: kspalaiologos: https://esolangs.org/logs/2013-03-30.html#luq oerjan: it was actually quote 1000 itself when added oerjan: and still not cheating shachaf: Maybe you'll understand this better if you draw a UML diagram. oerjan: so: we had 1000 quotes back in early 2013, and currently have fewer than 337 more. oerjan: `` allquotes | tail -n 1 HackEso: No output. oerjan: `` allquote | head -n 1 HackEso: ​/hackenv/bin/`: line 5: allquote: command not found oerjan: `` allquotes | head -n 1 HackEso: 1) EgoBot just opened a chat session with me to say "bork bork bork" fizzie: Maybe that's just more ghosts? oerjan: `` allquotes | tail -n 1 HackEso: 1332) The domain is public, but what's the codomain? oerjan: apparently so. oerjan: so it's definitely not been that broken for long. fizzie: I'll try older versions later. fizzie: An alternative solution also occurs to me: instead of trying to use the UML console channels, I could use the block devices. That way there's a chance the sync will make it robust. It's not like I need the interactivety. Although umlbox itself is designed for potential interactive use. oerjan: `` allquotes | tail -n 1 HackEso: 1332) The domain is public, but what's the codomain? shachaf: That quote is terrible. shachaf: Maybe delete it or pick some other quote to keep quoting? oerjan: well i was really just checking how many quotes there were, and then a bug turned up. oerjan: ok i did 3 repeats in pm, and the last one failed. oerjan: (the second was a little slow.) oerjan: maybe it's timing out and it's related to the sleep thing fizzie: That always seems to take more time than the stipulated 30 seconds. HackEso: No output. oerjan: i was sort of hoping it might time out early and be a clue oerjan: `` echo hi; cat HackEso: No output. oerjan: so it was oerjan: but i had to print something first oerjan: fizzie: in case you weren't watching, that last command responded almost instantly fizzie: And didn't print the thing. fizzie: Shouldn't have anything to do with the timeout though. oerjan: no, more the reverse: it shows that it's aborted first. oerjan: `` echo hi; echo ho; cat oerjan: and now it's going to take the full time i guess HackEso: No output. oerjan: ...but still didn't print oerjan: very random. oerjan: `1 quote random shachaf: Probably closing after the first write? oerjan: apparently. but it hasn't been doing that since fizzie upgraded debian, has it? shachaf: I don't know what's going on at all. shachaf: I'm at the airport. oerjan: hm i find only one 1/...: response after i asked fizzie about "draft", which i assume was after the upgrade. although that one worked. oerjan: `1 stat le HackEso: No output. oerjan: `1 stat le oerjan: `1 stat le oerjan: so something changed after that, probably oerjan: lately people don't seem to be following the old "show 5 quotes, delete at most 1" tradition, but just deleting things outright, so the quotes db might even continue shrinking. fizzie: I don't understand why it would only work for the one write. fizzie: `` /bin/echo a; /bin/echo b; /bin/echo c; /bin/echo d; /bin/echo e HackEso: a \ b \ c \ d \ e fizzie: `` /bin/echo a; /bin/echo b; /bin/echo c >&2; /bin/echo d; /bin/echo e oerjan: I'm at a bookstore and I picked a book semi-randomly and opened it at a page semi-randomly and it talks about ais523. <-- synchronicity hth fizzie: And there's that, which seems to behave very consistently. oerjan: `cat spout HackEso: No output. oerjan: `cat spout HackEso: ​ File: le -> /hackenv/le \ Size: 11 Blocks: 0 IO Block: 1024 symbolic link \ Device: 12h/18d Inode: 1206924 Links: 1 \ Access: (0777/lrwxrwxrwx) Uid: ( 1000/ UNKNOWN) Gid: ( 1000/ UNKNOWN) \ Access: 2019-11-16 21:29:43.000000000 +0000 \ Modify: 2019-11-16 21:29:43.000000000 +0000 \ Change: 2019-11-16 21:29:43.000000000 +0000 \ Birth: - HackEso: No output. fizzie: It would make some sense if it was the "bot framework does only one read, then closes the pipe" issue, but it was clearly receiving EOF right after. oerjan: `` n | cat HackEso: No output. oerjan: `` n | cat HackEso: 1/1: File: le -> /hackenv/le \ Size: 11 Blocks: 0 IO Block: 1024 symbolic link \ Device: 12h/18d Inode: 1206924 Links: 1 \ Access: (0777/lrwxrwxrwx) Uid: ( 1000/ UNKNOWN) Gid: ( 1000/ UNKNOWN) \ Access: 2019-11-16 21:29:43.000000000 +0000 \ Modify: 2019-11-16 21:29:43.000000000 +0000 \ Change: 2019-11-16 21:29:43.000000000 +0000 \ Birth: - fizzie: Is it possible that it gets an eof whenever any executable closes the output pipe, and that's where it decides to stop reading? shachaf: fizzie: I was going to ask earlier what happens if cat keeps issuing read calls after the 0. shachaf: But I thought that'd be too niche a guess and too annoying to test. oerjan: `` 1 echo a; 1 echo b; 1 echo c; 1 echo d; 1 echo e HackEso: No output. oerjan: `cat spout HackEso: No output. oerjan: `cat spout HackEso: No output. oerjan: `cat spout HackEso: No output. oerjan: `` ls -l spout HackEso: No output. oerjan: `` ls -l spout HackEso: No output. oerjan: OH COME ON oerjan: `` ls -l spout | cat HackEso: ​-rw-r--r-- 1 1000 1000 0 Nov 21 04:30 spout oerjan: `` cat spout | cat HackEso: No output. oerjan: `` cat spout | cat HackEso: No output. oerjan: `` wc spout HackEso: 0 0 0 spout oerjan: ok interesting, it failed at writing the spout file oerjan: `` (1 echo a; 1 echo b; 1 echo c; 1 echo d; 1 echo e) >/dev/null HackEso: No output. oerjan: `cat spout HackEso: No output. oerjan: `` wc spout HackEso: 0 0 0 spout oerjan: that means that command failed somewhere, despite never printing to stdout oerjan: `` { 1 echo a; 1 echo b; 1 echo c; 1 echo d; 1 echo e } >/dev/null HackEso: ​/hackenv/bin/`: eval: line 6: syntax error: unexpected end of file oerjan: `` (1 echo a) >/dev/null HackEso: No output. oerjan: `cat spout HackEso: No output. oerjan: oh wait duh oerjan: `` 1 'echo a'; 1 'echo b'; 1 'echo c'; 1 'echo d'; 1 'echo e' HackEso: 1/1:a \ 1/1:b \ 1/1:c \ 1/1:d \ 1/1:e oerjan: `cbt 1 HackEso: ​\` "$@" |& sport oerjan: hum that should pass on everything oerjan: `cbt ` HackEso: ​#!/bin/bash \ cmd="${1-quote}" \ TIMEFORMAT="real: %lR, user: %lU, sys: %lS" \ shopt -s extglob globstar \ eval -- "$cmd" | rnooodl oerjan: `slbd `//s,1,@, HackEso: ​`//#!/bin/bash \ cmd="${@-quote}" \ TIMEFORMAT="real: %lR, user: %lU, sys: %lS" \ shopt -s extglob globstar \ eval -- "$cmd" | rnooodl oerjan: `` echo hi oerjan: `` 1 echo a; 1 echo b; 1 echo c; 1 echo d; 1 echo e HackEso: No output. fizzie: I'll try to roll back the live version to the post-Debian-upgrade-before-refactoring one. oerjan: or not. oerjan: `` 1 echo a; 1 echo b; 1 echo c; 1 echo d; 1 echo e HackEso: No output. oerjan: `` \` echo hi oerjan: ok seems to work oerjan: `` 1 echo hi HackEso: 1/1:hi oerjan: `` 1 echo a; 1 echo b; 1 echo c; 1 echo d; 1 echo e HackEso: 1/1:a \ 1/1:b \ 1/1:c \ 1/1:d \ 1/1:e oerjan: `cat spout fizzie: `` /bin/echo a; /bin/echo b; /bin/echo c >&2; /bin/echo d; /bin/echo e HackEso: c \ a \ b \ d \ e oerjan: ok that was just me being stupid but now 1 and ` are a bit more resilient in shell fizzie: Well, there's clearly some difference there. fizzie: Oh well, at least I can bisect for it then. But not today. fizzie: Need to wake up in four hours. oerjan: sweet dreams kmc: `` url $(which 1) HackEso: https://hack.esolangs.org/repo/file/tip/bin/1 kingoffrance: for a second it almost looked like the "tip" command was in operation, in all its glory :/ kingoffrance: alas, just a directory name oerjan: fungot: do you have any tips? fungot: oerjan: it's always hard for me to go function by function? oerjan: `? tip int-e: shachaf: AFAIUI the connection is that the backjump clause used for backjumping is a promising clause to learn (a nontrivial consequence of the existing clauses). But you don't have to use it for backjumping. int-e: shachaf: Actually, nontrivial and at least marginally useful... it would have detected the conflict at hand one or more decisions earlier. int-e: shachaf: Hmm, actually there is a far simpler way to get /some/ learnable clause: Collect the negation of all decision literals on the trail. Presumably it's not very effective (for that clause to be applicable, you need to have all but one of those literals on the trail again, though possibly in a different order. With pure backtracking (no backumping, no restarts) that will never happen!) int-e: So one way of viewing the backjump clause is as a way of identifying relevant literals for the current conflict. int-e: . o O ( Hmm. Fun though incorrect attempt of framing this: CDCL solvers are SAT modulo unit propagation solvers, and backjump are unsatisfiable cores. ) int-e: s/backjump/backjump clauses/ int-e: (complements of unsatisfiable cores, of course) b_jonas: so HackEso has grown mysterious bugs? shachaf: int-e: So the first time my friend I were trying to figure out CDCL, we just started writing code, starting with a really simple DPLL solver and demorganizing the trail to learn clauses. shachaf: It was only when we saw that it changed literally nothing about the behavior of the solver that we thought about it for a few seconds and realized it was ridiculous. int-e: heh it probably made it slower ;) shachaf: I mean, it was written in Python. int-e: Maybe I should implement a SAT solver. But to what end... shachaf: So it was already maximally slow. shachaf: int-e: Anyway, when you do something like FirstUIP, you need a "reason" for each assignment (other than decisions). shachaf: If you do the typical backtracking thing (invert the last decision and mark it as a forced literal), you don't have a clause to point to as the reason for the new assignment. Do you? int-e: True, you'd have to derive the corresponding backjump clause (LastUIP) shachaf: Oh, you can keep resolving on units from this level until your clause includes the decision literal, you mean. int-e: yeah, since that's how backjumping simulates backtracking shachaf: Right. I guess I can do that. shachaf: I implemented CDCL and FirstUIP on the flight (no clause deletion, just allocating enough memory for all the learned clauses). shachaf: It made the number of decisions and units go way down, but the solver also takes much much longer. shachaf: Which seems like a great tradeoff, since I hate making decisions. int-e: Yeah deleting clauses is very important for performance. Which is awful because it's another open-ended playing field for heuristics. kspalaiologos: =str 0s +[----->+++<]>+.++++++++++++..----.+++.+[-->+<]>.-----------..[--->+<]>.[--->+<]>----.----.---.-----------.+++++++++++++.-------.++++++++++++.+[++>---<]>.---[----->+<]>.+++.-----------.--[->+++<]>.++[--->++<]>+.+[->+++<]>+.++.--.----[->+++<]>. kspalaiologos: =str 0a [,.] kspalaiologos: =def 0wiki bfbot: ok, defined 'wiki' kspalaiologos: =wiki bfbot bfbot: ..............................................................................bfbot kspalaiologos: Oh gosh damn it man kspalaiologos: What happened shachaf: int-e: Why is it important? kspalaiologos: 8bit cells? shachaf: I thought it was just for keeping memory use fixed. shachaf: But even with 2WL you spend way too much time checking clauses, or something? kspalaiologos: `bf_textgen x HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: bf_textgen: not found kspalaiologos: ``` bf_textgen HackEso: bash: bf_textgen: command not found kspalaiologos: Where is it located kspalaiologos: I need to add bitness to the wiki page because I forgot it int-e: shachaf: Hmm, many reasons, from growing 2WL lists to worse locality of memory access. And a lot of clauses turn out to be useless (for example, because they are subsumed by other clauses, or because while they do contribute to conflicts, those are exceedingly rare). shachaf: Right, one thing I ws thinking was that before doing CDCL I almost don't have to wory about cache locality, but once I have an unbnded number of clauses I have to worry a lot. int-e: The average 2WL list grows linearly with the number of clauses. int-e: (Very naive estimate: 2 times number of clauses divided by number of literals. It's probably better in practice because clauses can end up on watch lists of literals that are never considered.) int-e: That "probably" is a fairly wild guess. I have no data. shachaf: Ideally watches move to and stay on literals you don't assign as much. shachaf: Or whose negation you don't assign as much, anyway. int-e: The way I think of it, I'd put A v B on the watch lists for ~A and ~B. shachaf: I mean, where you put the negation doesn't matter. int-e: But I don't know what's standard here... int-e: I understood what you said. int-e: Or wrote. Whatever. shachaf: Clause collection seems hard. shachaf: By which I mean you have to make a lot of decisions. int-e: Yeah I'm afraid this is where you read another half dozen papers. int-e: There are some obvious statistics like length of clause, how often clauses are used in unit propagation (possibly per level though that'd be a serious amount of memory, so hard to justify. maybe if you assign weights to the levels?)... shachaf: OK, some of these learned clauses are pretty bad, now that I look at them. shachaf: One of the is a unit! shachaf: Man, when you learn a unit, I bet you can just delete all the relevant clauses etc. out of your database when you restart. int-e: Okay, if you learn a unit clause you have a clear way of pruning the clauses :) shachaf: It's kind of an odd property of CDCL that you can't do that in general. shachaf: (When normally you think of DPLL as solving subproblems.) int-e: You can check for clause subsumption... just not efficiently ;) int-e: (Maybe I'm not imaginative enough.) int-e: Even if you learn a unit clause it's not entirely clear how to deal with that efficiently. int-e: (If you want to avoid scanning *all* clauses. Maybe just go through that literal's watch lists?) int-e: (But then you have to do that periodically.) shachaf: Oh, I was thinking to just go through the watch list. shachaf: But also scanning all clauses up to num_vars times doesn't seem that bad. shachaf: Maybe the clause database gets really big, or real-world SAT problems have a large number of variables. int-e: I'm sure both of these happen. shachaf: But you can probably do it opportunistically reasonably well. shachaf: I mean, if you're learning a lot of units, you're doing pretty well, I'd hope. int-e: Anyway, all these decisions is why I don't really want to write a SAT solver. (I have no expectation of improving the state of the art, and I wouldn't expect to learn all that much either...) shachaf: Does it make sense to resolve on the same variable twice while doing LastUIP? shachaf: I should get some paper and figure out what's going on with my life. int-e: shachaf: not really? I mean the resolved variable is on the trail, which should not have any duplicates? shachaf: Oh, that's not what's going on. shachaf: What's going on is that I want to add a variable to the trail from one that was previously resolved on from another clause? int-e: Oh. That may happen. shachaf: But then I don't want to resolve on it again. So the second time I should add it to the non-resolvable pool? int-e: Are you sure you don't want to do that? shachaf: I feel like I'm making this too complicated. shachaf: You just said it doesn't make sense to resolve on it again. int-e: I mean, resolution proofs /must/ typically resolve on the same variable several times for completeness. int-e: shachaf: No, *I* said that it doesn't happen when finding a backjump clause. int-e: But that's ignoring the history of the clauses involved in that. int-e: So we talked past each other for a bit, because apprently you care about that history. I'm inclined to say that you shouldn't care. shachaf: I'm not sure what you mean. int-e: shachaf: When deriving a backjump clause by going back through the trail and resolving the conflict clause with the reason given for each literal, you will not resolve on the same variable twice because the variable you resolve on corresponds to the literal on the trail, and the trail is supposed to be free of duplicates and conflicting literals. int-e: shachaf: it's only when you look into the derivation of the referred clauses (if they're learned clauses) that you may be resolving on the same variable more than once. shachaf: Wait, how do you resolve through the trail? shachaf: What I do for FirstUIP is: Take the all-false clause; take a unit-propagated literal from it, and find the clause it was propagated from; resolve it with that clause to get a bigger clause. shachaf: And keep doing that with the new clause until there's only one literal from this level in it. int-e: Yes. The unit-propagated literal is from the trail. The variable you resolve on corresponds to that literal. int-e: Maybe I'm begin stupid but I see no reason why you'd involve the same literal twice in the conflict analysis. shachaf: Sure, it's from the trail, but you don't find it by just looking back through the trail, do you? shachaf: Maybe you just do? int-e: Note: When a literal is derived by unit propagation using a clause C, *all* variables of C are on the trail at that point. You can't re-introduce variables that come later on the trail by resolving with C. shachaf: Maybe the code I wrote was way too complicated. int-e: So as long as you pick the /last/ literal of the conflict clause from the trail (that is, the one that comes last on the trail) and its corresponding clause to resolve with, you will not resolve on the same variable twice. shachaf: Ah, but I'm just picking an arbitrary one. shachaf: Now what you said makes more sense. int-e: Then I'm not sure. But don't you risk missing the last UIP then? shachaf: Do you still find the first UIP? int-e: Oh right we're looking from the end of the trail. So I mean first. int-e: The last UIP can't be missed, it's the backtracking case. int-e: Take what I'm saying with a grain of salt... I'm missing technical details of how conflict analysis is really done. I have a pen&paper view on how backjump clauses are supposed to work. int-e: But that view definitely involves going through the trail in a backwards fashion. But maybe that's for convenience and not out of necessity. shachaf: I think what you say makes more sense than what I was thinking. shachaf: I was just picking an arbitrary unit each time. shachaf: I mean arbitrary unit-propagated literal from this level. shachaf: Now I need to think about how to implement the thing you said and some other things. shachaf: Probably not today. int-e: shachaf: out of curiosity, which imperfect programming language are you using for this? int-e: Hmm. Fun. I expected C++ or Rust (well, no, but those are the ones I'd consider if I'd embark on this journey.) int-e: (C++ mostly for sane namespaces... and probably vectors out of laziness) shachaf: I did give in and use https://github.com/nothings/stb/blob/master/stb_ds.h at one point. myname: int-e: out of curiosity, which programming language is not imperfect? int-e: Not for inheritance, virtual methods, exceptions, or templates. int-e: myname: Brainfuck. myname: how so shachaf: int-e: Vectors are great for SAT solvers because there's a lot of linear algebra involved. int-e: myname: There's this quote. "There are two kind of programming languages. Those that everybody complains about and those that nobody uses." int-e: myname: Brainfuck is pretty much perfect for what it does. myname: int-e: in this case, malbolge would be a lot better int-e: No, Malbolge is overcomplicated. :P shachaf: I'm using these dynamic arrays for watch lists. But I suspect I'll replace them with some other data structure anyway eventually. myname: but a lot of people are "using" brainfuck int-e: myname: The original purpose of Brainfuck was not to make programming hard. The purpose was to allow writing small compiler. int-e: shachaf: I'm not sure to what extend you're kidding about the linear algebra. int-e: *extent shachaf: I think std::vector is useful because I often want to apply scalar multiplication to my arrays. int-e: myname: The "imperfect" was an oblique reference to earlier discussions with shachaf about whether there are any good programming languages out there. int-e: myname: We have yet to find one. myname: what about lambda calculus= int-e: We can't even agree on whether Haskell is a good programming language. shachaf: Good for what? int-e: (I think yes. shachaf complains about the huge performance overheads. I can't say that he's wrong, it's just not the primary thing I'm looking for in a programming language most of the time.) shachaf: I don't think that's the only thing I complain about. int-e: myname: Lambda calculus is a nice Turing tarpit, and somewhat surprisingly scales up to real programming (according to some people) if you add types, data types, and a few other things. shachaf: Can you give me a nice definition of PTIME and PSPACE for lambda calculus? int-e: Sure, just use a graph model and measure term size and count reduction steps. int-e: Maybe that's not nice enough for you. shachaf: Turing machines are obviously scow to program on. int-e: (Hmm, I may have to go the explicit substituition route.) myname: int-e: well, typed lambda calculus is not that far away from haskell, isn't it? shachaf: But at least Turing machines are in spirit similar to actual machines. int-e: myname: what did you think I meant by "real programming"? :P wib_jonas: int-e: "term size" how? count the nodes with reusable reference-counted nodes, or serialize the expression so you can blow up space usage exponentially in time? wib_jonas: oh, you said graph model wib_jonas: so the former shachaf: Do you like stb_ds.h? int-e: tbh, graph models are not very nice from a theoretical perspective. int-e: If you really want to go *that* route maybe drop the lamdba calculus and do interaction nets instead. myname: petri nets! int-e: no, not petri nets int-e: . o O ( I prefer multiset rewriting ;-) ) shachaf: ⟅1,1,2⟆ int-e: unordered string rewrting = multiset rewriting = Petri nets if you interpret the symbols as places and the rules as transitions. wib_jonas: ⦃1,1,2⦄ bfbot: 8ball echo f msg1 simple wiki kspalaiologos: =wiki xd bfbot: ..............................................................................xd kspalaiologos: I need to set bitness kspalaiologos: But I forgot how to do it kspalaiologos: =f aaa kspalaiologos: =simple bfbot: simple kspalaiologos: I need to update bfbot docs though on the wiki fizzie: @tell oerjan Well, I fixed it, but I don't know why. Something to do with using a host-side opened /dev/null fd instead of the UML 'null' channel for some inputs/outputs. I don't want to think about it any more. lambdabot: Consider it noted. wib_jonas: fizzie: nice kspalaiologos: Greetings bfbot: bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot. bfbot: Commands: =str =def =undef =list =plist =doc. More help at https://esolangs.org/wiki/bfbot bfbot: 8ball echo f msg1 simple wiki kritixilithos: =plist bfbot: 8ball echo f msg1 simple wiki kritixilithos: =doc msg1 bfbot: Error: no documentation for msg1. kritixilithos: =msg1 test bfbot: @APQ`apq.... lambdabot: Unknown command, try @list bfbot: bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot. bfbot: Commands: =str =def =undef =list =plist =doc. More help at https://esolangs.org/wiki/bfbot kspalaiologos: =str 0s >++++++++++>+>+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<<]>.>>[[-]<[>+<-]>>[<<+>+>-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>+>+<<<-[>+<-]]]]]]]]]]]+>>>]<<<] kspalaiologos: =def 0fib bfbot: ok, defined 'fib' bfbot: 011235813213455891442333776109871597258441816765109461771128657463687502512139319641831781151422983204013462692178309352457857028879227465149303522415781739088169632459861023341551655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025203650110743295128009953 bfbot: 8ball echo f fib msg1 simple wiki kspalaiologos: =8ball test 123 bfbot: It is certain. kspalaiologos: =8ball anything bfbot: My reply is no. kspalaiologos: =8ball A0 bfbot: Yes - definitely. bfbot: 8ball echo f fib msg1 simple wiki kspalaiologos: =echo test kritixilithos: what does msg1 do? kspalaiologos: let's check bfbot: @APQ`apq.... lambdabot: Unknown command, try @list kspalaiologos: oerjan possibly defined it kritixilithos: =msg1 oerjan bfbot: @APQ`apq.... lambdabot: Unknown command, try @list kspalaiologos: fungot, tell me something fungot: kspalaiologos: yep :) by the time i get is a single print statement... i've got quite the system in the next version of gambit is out real soon now kritixil1: oops why are there two of me wib_jonas: kspalaiologos: no, I defined msg1 to experiment with the bot, since defining a command seems to be the easiest way to do that wib_jonas: I just defined various different temporary bf snippets to that command, and didn't bother deleting it wib_jonas: I wanted to check if the bot still isn't willing to print any non-ascii bytes wib_jonas: and apparently it still isn't kspalaiologos: I will patch it kspalaiologos: but I have added a new feature today kspalaiologos: check the bot wiki page kspalaiologos: =str 0s 3+[----->+++<]>+.++++++++++++..----.+++.+[-->+<]>.-----------..[--->+<]>.[--->+<]>----.----.---.-----------.+++++++++++++.-------.++++++++++++.+[++>---<]>.---[----->+<]>.+++.-----------.--[->+++<]>.++[--->++<]>+.+[->+++<]>+.++.--.----[->+++<]>.[,.] kspalaiologos: =def 0wiki bfbot: ok, defined 'wiki' kspalaiologos: =wiki bfbot bfbot: ..............................................................................bfbot kspalaiologos: gosh damn it man kspalaiologos: why does it happen kspalaiologos: =str 0s kspalaiologos: ++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>.<<<<<<<<<<<<<>>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<<>>>>>>>>>>>>>>.<<<<<<<<<<<<<<>>>>>>>>>>>>>>+++.---<<<<<<<<<<<<<<>>>>>>>++.--<<<<<<<>>>>>>-.+<<<<<<>>>>>>-.+<<<<<<>>>> kspalaiologos: >>>>>>>>>---.+++<<<<<<<<<<<<<>>>>>>>>>>>>>>+++.---<<<<<<<<<<<<<<>>>>>>>>>>>>>>-.+<<<<<<<<<<<<<<>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<>>>>>>>>>>>>+. kspalaiologos: damn tooo long kspalaiologos: =str 0s ++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>.>>----.++++----.++++<.+++.---<<<<<<<++.--<-.+-.+>>>>>>>---.+++>+++.----.+----.++++<<+.->>--.++<-.+>+++.---<<<<<<<<--.++>>>>>>>>-.+++.--<-.+<<<<<<<-.+>>>>>>>>>-.+<<+.-+++.---+.-<<<<<<<-.+<<<<<<. kspalaiologos: =def 0wiki bfbot: ok, defined 'wiki' kspalaiologos: =wiki please work bfbot: https://esolangs.org/wiki/ kspalaiologos: =str 0a [,.] kspalaiologos: =def 0wiki bfbot: ok, defined 'wiki' kspalaiologos: =wiki bfbot bfbot: https://esolangs.org/wiki/ kspalaiologos: that's kinda pants kspalaiologos: =str 0a ,[.,] kspalaiologos: =def 0wiki bfbot: ok, defined 'wiki' kspalaiologos: =wiki bfbot bfbot: https://esolangs.org/wiki/bfbot kspalaiologos: so you can check this page as it contains new features kspalaiologos: `asmbf db_ 2/db_ 3/rcl r1,1 HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>>>>>>>>>>>>++>>+++<<<<<<<<<<<<<+<<<<[-]>>>>[<<<<<+>>>>>>>>>>+>>>>>+<<<<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>>>[[>>]+[<<]>>-]+[>>]<[<[<<]>+<<<<<<<<<<<<<+>>>>>>>>>>>>>>[>>]<-]<[<<]>[>[>>]<+<[<<]>-]>[>>]<<[-<<]><<<<<<<<<[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: `asmbf db_ 2/db_ 3/raw .*/rcl r1,1/raw .* HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>>>>>>>>>>>>++>>+++*<<<<<<<<<<<<<+<<<<[-]>>>>[<<<<<+>>>>>>>>>>+>>>>>+<<<<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>>>[[>>]+[<<]>>-]+[>>]<[<[<<]>+<<<<<<<<<<<<<+>>>>>>>>>>>>>>[>>]<-]<[<<]>[>[>>]<+<[<<]>-]>[>>]<<[-<<]><<<<<<<<<[-]*<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: I came into realisation kspalaiologos: that I spent this much time on codegolf kspalaiologos: https://github.com/kspalaiologos/codegolf-submissions kspalaiologos: 0x40 submissions kspalaiologos: `asmbf sto r1, 2 HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>++<<<<[<+>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<-]<[>+<-]>>>>>[<<<<<+>>>>>>>>>>>>>>+<<<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>>>[[>>]+[<<]>>-]+[>>]<[-]<[<<]>[>[>>]<+<[<<]>-]>[>>]<<[-<<]><<<<<<<<<[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: `asmbf db_ 5/sto r1, 2 HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>>>>>>>>>>>>+++++<<<<<<<<<<<++<<<<[<+>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<-]<[>+<-]>>>>>[<<<<<+>>>>>>>>>>>>>>+<<<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>>>[[>>]+[<<]>>-]+[>>]<[-]<[<<]>[>[>>]<+<[<<]>-]>[>>]<<[-<<]><<<<<<<<<[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: I'm working on https://github.com/kspalaiologos/asmbf/pull/28 now kspalaiologos: so the memory I/O and stack operations will be a whole lot faster. kspalaiologos: and smaller by a half kspalaiologos: @tell oerjan greets! Are you the person who made Malbolge Unshackled? lambdabot: Consider it noted. kspalaiologos: 'm genuinely curious kspalaiologos: because I made a lot of malbolge unshackled programs kspalaiologos: and an assembler that ultimately created my chess game in Malbolge kspalaiologos: So I wrote deadfish interpreter in Malbolge kspalaiologos: Requires 3,5 gigabytes of RAM to operate. kspalaiologos: after it hogs up 20% of your memory, it slowly starts responding to commands at a rate of one per 10 seconds kspalaiologos: what happened kspalaiologos: to my bfbot kspalaiologos: may it be outage? b_jonas: =echo hello bfbot bfbot: hello bfbot b_jonas: =echo @botsnack bfbot: @botsnack b_jonas: =echo @echo =echo hello bfbot: @echo =echo hello lambdabot: echo; msg:IrcMessage {ircMsgServer = "freenode", ircMsgLBName = "lambdabot", ircMsgPrefix = "bfbot!~bfbot@206.ip-51-91-102.eu", ircMsgCommand = "PRIVMSG", ircMsgParams = ["#esoteric",":@echo =echo lambdabot: hello"]} target:#esoteric rest:"=echo hello" b_jonas: =echo @run var"=echo hello" bfbot: @run var"=echo hello" lambdabot: =echo hello b_jonas: these two could be looped b_jonas: =set 1s. bfbot: No such command. Try =help. b_jonas: =str 1s. b_jonas: =def 1msg1 bfbot: ok, defined 'msg1' b_jonas: =set 1s++++[->++++<]>[->++++<]>+.... bfbot: No such command. Try =help. b_jonas: =str 1s++++[->++++<]>[->++++<]>+.... b_jonas: =def 1msg1 bfbot: ok, defined 'msg1' b_jonas: =def 1msg0 bfbot: ok, defined 'msg0' b_jonas: =echo @run (\s -> var (s ++ show s))"=echo @run (\\s -> var (s ++ show s))" bfbot: @run (s -> var (s ++ show s))"=echo @run (\s -> var (s ++ show s))" lambdabot: :1:39: error: lambdabot: lexical error in string/character literal at character 's' b_jonas: =echo @run (\ s -> var (s ++ show s))"=echo @run (\\s -> var (s ++ show s))" bfbot: @run ( s -> var (s ++ show s))"=echo @run (\s -> var (s ++ show s))" lambdabot: :1:40: error: lambdabot: lexical error in string/character literal at character 's' b_jonas: it mangles the backslashes? b_jonas: @run (\s -> (var . tail . init . show) (s ++ show s))"=echo @run (\\s -> (var . tail . init . show) (s ++ show s))" lambdabot: =echo @run (\\s -> (var . tail . init . show) (s ++ show s))\"=echo @run (\\... b_jonas: ah, too long b_jonas: @run (var.ap(++)show)"=echo @run (var.ap(++)show)" lambdabot: =echo @run (var.ap(++)show)"=echo @run (var.ap(++)show)" b_jonas: =echo @run (var.ap(++)show)"=echo @run (var.ap(++)show)" bfbot: @run (var.ap(++)show)"=echo @run (var.ap(++)show)" lambdabot: =echo @run (var.ap(++)show)"=echo @run (var.ap(++)show)" b_jonas: =str 1s+++++++++++[->+++++++++<]>-----.+++++++++++++++++++.++++.------------.+++++.---------. b_jonas: =str 0s. b_jonas: =str 0s++++[->++++<]>[->++++<]>+.... b_jonas: =def 0msg1 bfbot: ok, defined 'msg1' b_jonas: ^def quine ul (=quine)S fungot: Defined. b_jonas: =def 1quine bfbot: ok, defined 'quine' b_jonas: =quine bfbot: ^quine b_jonas: ^quine fungot: =quine bfbot: ^quine b_jonas: =echo `thanks bfbot bfbot: `thanks bfbot HackEso: Thanks, bfbot. Thot. b_jonas: =echo `echo =echo `thanks bfbot bfbot: `echo =echo `thanks bfbot HackEso: ​=echo `thanks bfbot b_jonas: ^echo =echo hello fungot: =echo hello =echo hello bfbot: hello =echo hello kspalaiologos: b_jonas: check the wiki page, I added a few modes for Brainfuck interpreter b_jonas: hello hppavilion \: Weird that this is allowed. b_jonas: hppavilion[1]: it technically is, but I think you won't be able to hold that nick for long, because NickServ will nick you out from it fizzie: `` echo $HOME # Hm, I didn't realize this was set. fizzie: Guess it's usual for HackEso-golfing, since ~ is shorter than /tmp. fizzie: s/usual/useful/ b_jonas: ok this is wierd: ~ is not actually a valid character in an IRC nickname, and if you try to nick to a nickname containing it, you get an error. but if you whois ~[ the server knows that it's case-insensitively the same as the valid nick ^[ and gives you answer about him. b_jonas: I wonder if this is because it is a valid nickname character on other servers so freenode tries to be compatible or something fizzie: I guess arguably if you say "CASEMAPPING=rfc1459" you should use that case-mapping, even if ~ isn't supported. fizzie: (Wasn't this network ascii at some point?) b_jonas: fizzie: the casemapping matters for channel names b_jonas: fizzie: and yes, the casemapping on freenode changed when they changed services b_jonas: and I still don't know what they did with nickserv registrations that suddenly started to clash b_jonas: or channel registrations b_jonas: but all that is old history, they changed very long ago fizzie: Hm, I wonder why umlbox has code to cfmakeraw() on the input/output terminals, and why it enables that if the output (outside UML) is *not* going to a terminal. kingoffrance: i thought that was the use of "raw" mode: specifically for kingoffrance: that sounds like a good thing to me fizzie: Maybe that makes sense. I'm just not sure what effect it has here. fizzie: The commit message just says "Make sure everything is uncooked." kingoffrance: my understanding is unixy things assumes serial devices have a terminal, so you generally want to set the device to "raw" if you arent running getty or whatever on it kingoffrance: s/have a terminal/& attached/ kingoffrance: in other words, unixy things might "translate" i/o back and forth on that serial port unless you set "raw" mode to tell it "dont mess with the data flowing" kingoffrance: "translate" meaning alter/otherwise mangle/etc. kingoffrance: as to how is this relevant to non-serial ports, e.g. pseudo-terminal devices, my guess is that is what they are "modelling" or "impersonating" fizzie: Well, I'm just wondering what the UML kernel does, and how that will change if you connect the thing to a tty vs. a non-tty. fizzie: I've definitely noticed that, in verbose mode when redirecting output, it leaves the actual outside-UML terminal in a raw mode (or at least disables echo), which I think happens because it sees the stdout isn't a tty, so it sets raw mode even for the verbose output, which is in fact connected to a tty. fizzie: So it does some amount of "forwarding" of these attributes. b_jonas: fungot, what are the two most famous operas written by Rossini? fungot: b_jonas: except in really well chilled glass bottle of fnord, because i haven't personally inspected the c it generated myself. ( stalin's c was just right, but the last verse is missing. fizzie: For the record, it's probably talking about Stalin, the optimizing Scheme compiler. b_jonas: he does make some sense, for a chilled glass bottle may be just as classy as an opera kingoffrance: stalin singing a C note b_jonas: yes, that too b_jonas: so how about Guillaume Tell, fungot? fungot: b_jonas: here was my take on this is that someone has had the fnord thing strikes me as special compared to what? most literal regular fnord literal... b_jonas: by the way, I checked, it seems that all the lines that I added to the quotes file still survive, except for the one that I quikcly deleted myself b_jonas: some of the lines quoting me seem somewhat pointless on the other hand, and may be worth to delete if other people don't see their point either b_jonas: `quote 1215 HackEso: 1215) fungot, do you like running double exponential time algorithms? b_jonas: im not sure b_jonas: `quote 1323 HackEso: 1323) I don't care for the bf backend as long as it doesn't make the rest of ayacc harder to sue b_jonas: on the other hand there are these two related entries: b_jonas: `wisdom ^ HackEso: ​hppavilion^k//hppavilion^k is a k-tuple of elements of hppavilion. HackEso: ​^ (also notated by ⊕ or ⊻) is the exclusive-or operator; ∧ (also notated by /\ or &) is the and (conjunction) operator; ^ (also notated by ↑ or ** or ⋆) is the power operator. b_jonas: `quote 1260 HackEso: 1260) shachaf: different notation. -o is logical or in find, but it's linear implication in linear logic oerjan: @messages-loud lambdabot: fizzie said 11h 59m 17s ago: Well, I fixed it, but I don't know why. Something to do with using a host-side opened /dev/null fd instead of the UML 'null' channel for some inputs/outputs. I don't lambdabot: want to think about it any more. lambdabot: kspalaiologos said 6h 53m 45s ago: greets! Are you the person who made Malbolge Unshackled? oerjan: . o O ( fizzie found a Feathery bug ) oerjan: @tell kspalaiologos Yes. I thought the Wiki page said so... lambdabot: Consider it noted. oerjan: ^wiki Malbolge Unshackled fungot: https://esolangs.org/wiki/Malbolge Unshackled oerjan: @tell kspalaiologos I suppose you need to click through to my name to find the nick. lambdabot: Consider it noted. oerjan: ^echo hi oerbot: ^echo hi oerjan: =quine bfbot: ^quine oerjan: definitely looks ignored oerjan: =echo fungot fungot: oerjan: 1. ps is missing a " from" bfbot: fungot oerjan: `` echo $HOME # Hm, I didn't realize this was set. <-- i always thought that was to prevent junk from programs that like to create .config files there oerjan: oh and i guess it also prevents people from _creating_ .config files to mess up programs. fizzie: By hand. shachaf: `` echo $HOME oerjan: `? delquote HackEso: delquote? ¯\(°​_o)/¯ HackEso: 1/2:414) It's ok guys. I am doing what I can to keep my psyche and ego surviving. All the while the threat of ww3 looms, the mortality of family and friends(loved ones?) and sooner or llater my own mortality. \ 915) maybe i was violated by a pole once \ 160) Thanks to nooga for constructive criticism, his ideas and being a constant annoyance. --http://theendisnear.no-ip.info/ \ 864) what is the linux equivalen HackEso: 2/2:e magical purple light which makes things glow if they have been involved in a crime kmc: nmap?? \ 135) alise, it works fine for irc but interactive stuff? no. oerjan: `quote 864 HackEso: 864) what is the linux equivalent of the magical purple light which makes things glow if they have been involved in a crime kmc: nmap?? oerjan: `delquote 135 HackEso: ​*poof* alise, it works fine for irc but interactive stuff? no. oerjan: i don't see the point of that one, without context. fizzie: Oh, I see, the username changed. fizzie: It's HackEso!~HackEso@cloak now, it used to be HackEso!~h@cloak a while ago. fizzie: I must've wiped out the ~h patch when I moved from Mecurial to git for the code, I think it was just hand-patched in. fizzie: Well, that should hopefully be easy enough to fix. fizzie: Yeah, the multibot default is always the same as the nick, I think I had just locally edited it. oerjan: (incidentally, i was applying the traditional 1/5 quote purging method hth) fizzie: It doesn't start. oerjan: . o O ( It was inevitable. ) fizzie: Oh, some sort of library versioning issue. fizzie: ./multibot: error while loading shared libraries: libevent_core-2.1.so.6: cannot open shared object file: No such file or directory oerjan: in all that debugging yesterday, you never restarted the outer bot code? fizzie: Well, no, multibot's pretty dynamic like that. fizzie: Hm. Both systems have Debian 10 installed, but the machine where I build things has libevent-core-2.1-6:amd64 version 2.1.8-stable-4 while the container where it runs has libevent-core-2.0-5:amd64 version 2.0.21-stable-3. fizzie: I guess they're both installable in stable, and I just have the wrong one. fizzie: That's-a better. HackEso: 1/2:66) I can do everything a Turing machine can do, except love \ 900) Actually, just as a guess, J might be worse than APL because it's restricted to normal (ascii?) characters, I guess \ 1262) (make is an esoteric language) b_jonas: Most esolangs I've seen have more comprehensive docs than make \ 251) wow, thinkgeek really makes me hate being alive \ 1151) kmc: any chance one HackEso: 2/2:an have a box full of tnt to throw around fizzie: `delquote 251 HackEso: ​*poof* wow, thinkgeek really makes me hate being alive oerjan: `slwd kspalaiologos//s,$,., HackEso: kspalaiologos//kspalaiologos is a brainfuck addict. He's secretly disassembling brainfuck code for a casino that lost the source code. Apparently knows the secret of Malbolge. oerjan: is Cindy about to go full von Neumann probe fizzie: A green goo scenario. kspalaiologos: Greets kspalaiologos: oerjan: I've been asking kspalaiologos: Because I wasn't sure about do you realize that I made a chess game and a minesweeper in your language oerjan: kspalaiologos: i'd be a bit more impressed if you didn't also go on about how large and slow the programs are ;) btw you're the second person i've noticed who has found out how to program it. i'm not one of them. kspalaiologos: oerjan: c'mon, I needed to use lookup tables to add kspalaiologos: It's impossible to do this in some more performant way kspalaiologos: I've also wasted time on Seed kspalaiologos: And I'm possibly third person in existence to break it oerjan: i know, i upvoted some of your Seed submissions oerjan: also i shouldn't _really_ be talking about speed, it's not something i'm good at optimizing (see: the actual Malbolge Unshackled reference interpreter) oerjan: kspalaiologos: btw interpreters that have reliable rotation width growth are cheating imo oerjan: i spent way to much time thinking about how make it as uselessly non-dependable as possible :P oerjan: "lunevka" getting away could be very bad, because she's just learned that all she needs to become a queen is to transfer herself to an organic body... oerjan: well, possibly it needs to be a spark body. int-e: I'm still waiting for P?dre's lantern to drop. int-e: Hmm, "a small fabber", are you *sure* this isn't the Force Multiplication chapter? oerjan: no, it's the Force Exponentiation chapter, obviously b_jonas: `perl -euse Date::Manip::Date; $d = Date::Manip::Date->new("now"); $s = $d->new("2019-06-03"); $f = $s->calc($d, 0, "semi"); print $f->("%dys days"); HackEso: Not a CODE reference at -e line 1. b_jonas: `perl -euse Date::Manip::Date; $d = Date::Manip::Date->new("now"); $s = $d->new("2019-06-03"); $f = $s->calc($d, 0, "semi"); print $f->printf("%dys days"); HackEso: 172.364016203704 days b_jonas: fizzie: thanks b_jonas: `perl -euse Date::Manip::Date; $d = Date::Manip::Date->new("today"); $s = $d->new("2019-06-03"); $f = $s->calc($d, 0, "semi"); print $f->printf("%.2dys days"); HackEso: 172.00 days b_jonas: are those new force powers? oerjan: only if you're in the same force as schlock kspalaiologos: @tell oerjan well, that's nice :p. I'm using really an Malbolge20 interpreter that is actually a subset of MU. lambdabot: Consider it noted. wib_jonas: fungot, what is a coloom? is it a tool to unravel fabric into threads? a cotool to unravel fabric into threads? fungot: wib_jonas: mmm... mayonnaise... fnord looks like it could be read by read... wib_jonas: you know how we have several quotes where fungоt gives an amusingly appropriate reply? we should try to brute force more of those, by finding something that he says often, then repeatedly asking a question to which that answer is relevant and finding the matching answers. we could make a brute-forcing bot for that. myname: feeding an ai with quoting its nonsense as reward wib_jonas: `quote 1213 HackEso: 1213) fungot, do you like running double exponential time algorithms? b_jonas: im not sure wib_jonas: `delquote 1213 HackEso: ​*poof* fungot, do you like running double exponential time algorithms? b_jonas: im not sure wib_jonas: that one is not an amusingly relevant answer wib_jonas: `quote 1323 HackEso: 1323) #define __NR_oldolduname 59 fungot: what's your old old name? olsner: they decided not to waste any brain cells storing obscure unix silliness). wib_jonas: that one is wib_jonas: there are a lot of boring fungоt quotes though int-e: . o O ( The main problem of Tic-Tac-Toe is that there are too many draws at the highest level of play. ) wib_jonas: int-e: that never stopped the fans of football arseniiv: fungot: miau fungot: arseniiv: why do you not like optional arguments or bounds checking, so it is arseniiv: fungot: why, I do love both of them, though bounds checking is better be a static one fungot: arseniiv: i think you can translate a bf program arseniiv: and suddenly that’s too much belief kspalaiologos: Fungot is just bfbot with worse interpreter and Markov chains cmon arseniiv: kspalaiologos: and written in a language of magic! arseniiv: though don’t you have plans to incorporate a Markov chains into bfbot? arseniiv: then we could have bot battles!^W^W^W^W^W^W arseniiv: I mean, where two bots talk to each other until the sequential request limit myname: int-e: depending on what you consider hightest level of play, I wouldn't say that has to be a bad thing kspalaiologos: I could add them kspalaiologos: Bfbot is written in Seed :) kspalaiologos: It depends on telnet, tritium and some other garbage myname: i do prefer a game where perfect play on my part does not lead me to a loss if i wasn't the starting player wib_jonas: =echo a\b wib_jonas: =echo a\x41b wib_jonas: =echo a\\b wib_jonas: =echo a\081b wib_jonas: =echo a\101b wib_jonas: how is this supposed to work? wib_jonas: =src echo bfbot: No such command. Try =help. wib_jonas: =echo a\b\c wib_jonas: kspalaiologos: why does the echo command swallow some backslashes? kspalaiologos: Wait a second kspalaiologos: =echo xyz\" kspalaiologos: Genuinely no idea arseniiv: fungot: give me some backlashes fungot: arseniiv: who is lytha ayth? xd a 2d fnord kspalaiologos: =echo $1 wib_jonas: =echo \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z bfbot: abcdefghijklmnopqrstuvwxyz arseniiv: fungot: if I was a bot too, would we be friends? fungot: arseniiv: fnord, the public has power over! kspalaiologos: What a weird bug wib_jonas: =echo \\A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z bfbot: \ABCDEFGHIJKLMNOPQRSTUVWXYZ wib_jonas: =echo \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z bfbot: ABCDEFGHIJKLMNOPQRSTUVWXYZ wib_jonas: kspalaiologos: it may be just that =echo is defined in a strange way arseniiv: fungot: do you like ASCII, at last? arseniiv: ah, sky is the limit or something wib_jonas: =str 1s ,[.,] kspalaiologos: Let's check the repo wib_jonas: =def 1echo1 bfbot: ok, defined 'echo1' wib_jonas: =echo1 hello, \world. \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z bfbot: hello, world. abcdefghijklmnopqrstuvwxyz wib_jonas: =echo1 one \' two ' three \' four bfbot: one ' two ' three ' four int-e: myname: this is a complaint that people have about high-level chess ;-) myname: int-e: people are stupid kspalaiologos: These are escape sequences kspalaiologos: Not a bug its a feature kspalaiologos: Possibly related to bash being retarded kspalaiologos: I need to rewrite it in some real language wib_jonas: =echo !"# $%&' ()*+ ,-./ 0123 4567 89:; <=>? @ABC DEFG HIJK LMNO PQRS TUVW XYZ[ \]^_ `abc defg hijk lmno pqrs tuvw xyz{ |}~ bfbot: !"# $%&' ()*+ ,-./ 0123 4567 89:; <=>? @ABC DEFG HIJK LMNO PQRS TUVW XYZ[ ]^_ `abc defg hijk lmno pqrs tuvw xyz{ |}~. bfbot: and ...... ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ int-e: Meh, Firefox. First "Recommend extensions as you browse"... now "Recommend features as you browse"... they really are trying hard to be annoying. int-e: Hmm actually maybe the second one has been there for a bit and managed not to annoy me. kspalaiologos: Is there any interesting esoteric language that isn't hell on earth to implement? tswett[m]: kspalaiologos: Well, /// is definitely interesting and it's pretty simple. :D b_jonas: =echo foo $HOME bar `uname` qux bfbot: foo $HOME bar `uname` qux b_jonas: =echo foo \$HOME bar \`uname\` qux bfbot: foo $HOME bar `uname` qux kspalaiologos: hackable, but not this way :) b_jonas: kspalaiologos: I just wonder how that backslash thing works kspalaiologos: ^ I have no idea too kspalaiologos: it's far beyond my will of investigating obfuscated bash code b_jonas: =str 1s++++++++[->++++++<].+.+.+.+.+.+.+.+.+.+[] b_jonas: =def 1msg1 bfbot: ok, defined 'msg1' bfbot: ......... b_jonas: =str 1s++++++++[->++++++<]>.+.+.+.+.+.+.+.+.+.+[] b_jonas: =def 1msg1 bfbot: ok, defined 'msg1' bfbot: 0123456789 b_jonas: ``` cat /hackenv/bin/lowercase HackEso: ​#!/bin/bash \ print_args_or_input "$@" | tr A-Z a-z | LANG=en_NZ.UTF-8 sed 'y/ØÅÆŒÞÐÄÖÜÁÉÍÓÚÝŁ/øåæœþðäöüáéíóúýł/' b_jonas: ``` cat /hackenv/bin/\? HackEso: ​#!/bin/bash \ topic=$(echo "$@" | lowercase | sed "s/noo\+dl/noooodl/;s/ *$//") \ topic1=$(echo '`'"$topic" | sed 's/^`\(`\|$\)//') \ topic2=$(echo "$topic" | sed "s/s$//") \ cd $HACKENV/wisdom \ if [ \( "_$topic2"_ = "_ngevd"_ \) -a \( -e ngevd \) ]; \ then cat /dev/urandom; \ elif [ -e "$topic" ]; \ then cat "$topic"; \ elif [ -e "$topic1" ]; \ then cat "$topic1"; \ elif [ -e "$topic2" ]; \ then cat "$topic2"; b_jonas: wow, this is overcomplicated b_jonas: `python3 -cprint(open("/hackenv/bin/??").read()[300:]) HackEso: usage: umlbox [-h] [--verbose] [--base-mounts] [--mount DIR] \ [--mount-write DIR] [--translate GUEST HOST] \ [--translate-write GUEST HOST] [--cwd DIR] [--env VAR=VALUE] \ [--no-stdin] [--root] [--local H:G] [--remote G:A:P] [--x11] \ [--timeout T] [--memory M] [--linux KERNEL] [--mudem MUDEM] \ [--initrd INITRD] \ X [X ...] \ umlbox: error: unrecognized argu b_jonas: fizzie: ^ b_jonas: fizzie: something is wrong with the bot b_jonas: `run echo hi HackEso: usage: umlbox [-h] [--verbose] [--base-mounts] [--mount DIR] \ [--mount-write DIR] [--translate GUEST HOST] \ [--translate-write GUEST HOST] [--cwd DIR] [--env VAR=VALUE] \ [--no-stdin] [--root] [--local H:G] [--remote G:A:P] [--x11] \ [--timeout T] [--memory M] [--linux KERNEL] [--mudem MUDEM] \ [--initrd INITRD] \ X [X ...] \ umlbox: error: unrecognized argu b_jonas: `run /bin/echo hi HackEso: usage: umlbox [-h] [--verbose] [--base-mounts] [--mount DIR] \ [--mount-write DIR] [--translate GUEST HOST] \ [--translate-write GUEST HOST] [--cwd DIR] [--env VAR=VALUE] \ [--no-stdin] [--root] [--local H:G] [--remote G:A:P] [--x11] \ [--timeout T] [--memory M] [--linux KERNEL] [--mudem MUDEM] \ [--initrd INITRD] \ X [X ...] \ umlbox: error: unrecognized argu kspalaiologos: I'm genuinely curious kspalaiologos: `asmbf jnz r4,3/jnz r3,2 HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>+++<[<<<<<<+>+>>>>>-]<<<<<<[>>>>>>+<<<<<<-]>[<<<[-]>[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>[-]]>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>++<<[<<<<<+>+>>>>-]<<<<<[>>>>>+<<<<<-]>[<<<[-]>[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>[-]]>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: `asmbf not r4/and r4, r3/jnz r4, 2 HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>-[<<<<->>>>-]<<<<[>>>>+<<<<-]>>>>[<<<<+>>>>-]<<<<[[-]>>>[<<<+<+>>>>-]<<<<[>>>>+<<<<-]>[>>>>-<<<<[-]]]>>>>>++<[<<<<<<+>+>>>>>-]<<<<<<[>>>>>>+<<<<<<-]>[<<<[-]>[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>[-]]>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: 2nd one is shorter apparently kspalaiologos: surprising arseniiv: Is there any interesting esoteric language that isn't hell on earth to implement? => Fractran? ;D kspalaiologos: in_ r1/in_ r2/mov r3,256/lbl 1/dec r3/mov r4,r2/pow r4,r3/le_ r4,r1/jnz r4,2/jnz r3,1/lbl 2/out r3 kspalaiologos: I wonder why doesn't it work fizzie: `run /bin/echo hi fizzie: b_jonas: Fixed. fizzie: As part of general refactoring, I switched the umlbox command line handling around a little, and the new version required a '--' to separate the command from arguments. The previous version implicitly treated everything from the first non-flag argument as positional. fizzie: Thanks for letting me know, it was a pretty glaring security hole. :) fizzie: (Well, only up to the second layer of sandboxing. But you could've used the network, and made arbitrary changes to the repository.) b_jonas: `python3 -cprint(open("/hackenv/bin/??").read()[300:]) HackEso: of what you are speaking." b_jonas: `perl -V HackEso: Summary of my perl5 (revision 5 version 28 subversion 1) configuration: \ \ Platform: \ osname=linux \ osvers=4.9.0 \ archname=x86_64-linux-gnu-thread-multi \ uname='linux localhost 4.9.0 #1 smp debian 4.9.0 x86_64 gnulinux ' \ config_args='-Dusethreads -Duselargefiles -Dcc=x86_64-linux-gnu-gcc -Dcpp=x86_64-linux-gnu-cpp -Dld=x86_64-linux-gnu-gcc -Dccflags=-DDEBIAN -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -fdebug-prefi b_jonas: `run /usr/bin/perl -V HackEso: Summary of my perl5 (revision 5 version 28 subversion 1) configuration: \ \ Platform: \ osname=linux \ osvers=4.9.0 \ archname=x86_64-linux-gnu-thread-multi \ uname='linux localhost 4.9.0 #1 smp debian 4.9.0 x86_64 gnulinux ' \ config_args='-Dusethreads -Duselargefiles -Dcc=x86_64-linux-gnu-gcc -Dcpp=x86_64-linux-gnu-cpp -Dld=x86_64-linux-gnu-gcc -Dccflags=-DDEBIAN -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -fdebug-prefi b_jonas: `python3 -cprint(open("/hackenv/bin/??").read()[200:]) HackEso: ​"$f" ];then exec bash "$f";fi;if [ -r "$f" ];then exec cat "$f";fi;echo "I must confess, I know not of what you are speaking." b_jonas: looks better, thanks kspalaiologos: I'm so proud of myself kspalaiologos: I wrote a 2 megabyte malbolge kspalaiologos: program kspalaiologos: that is actually quite fast kspalaiologos: and requires just 0.5GB of RAM kspalaiologos: https://codegolf.stackexchange.com/a/196292/61379 b_jonas: is there fictional private detective who is lawful in the D&D alignment sense? b_jonas: fungot, what car would you want to drive if you were rich? fungot: b_jonas: i don't fully understand what you're trying to make is wrong! fizzie: b_jonas: Adrian Monk, maybe? I don't know the character that well, so maybe not. fizzie: I'm guessing they usually end up employed by some sort of an official police force or equivalent if they're lawful. b_jonas: TODO self for HackEso: rewrite rnoodl to a C program that writes output asap rather than waiting for a full line, with some arbitrary short timeout before printing "d" for the exceptional case when it reads "nood" but not the byte after it yet; b_jonas: add a command to add to the whatis database; complete the wiki description of the bot int-e: What about the Agathy Christie ones, hmm. I guess Miss Marple isn't exactly a PI, she usually investigates people as a favor. Hercule Poirot though... I think is pretty lawful. int-e: Meh. Agatha. b_jonas: it's hard to tell how to describe Poirot. sometimes he lets criminals get away with what they did, but that isn't enough to make him not lawful. b_jonas: He certainly wants order and patterns in his life, and works to force that, but does that matter for the D&D alignment? int-e: Right I was getting there... I was focusing on his methods, not on his attitude wrt. delivering criminals to the law where his moral standards differ from those of the law. Tricky! b_jonas: He probably died as a lawful. b_jonas: fungot, what is the set of Mario games that feature paragoombas? fungot: b_jonas: http://luuk.kapsi.fi/ stuff/ fnord/ fnord/ fnord/ index.htm for a better place int-e: Most fictional PIs employ unlawful methods. fizzie: My thinking was along those lines. Marple's not really professionally a private detective, and as for Poirot, I think all those scenes he stages where he tricks the criminal to reveal themselves are kind of maybe non-lawful. int-e: Ah, funny. Entrapment is illegal for the police... but is it illegal for private entities? :) int-e: *Actually* even if we include fictional police detectives, we may be in trouble finding a wholly lawful one. fizzie: I don't know if it's illegal, that particular thing just didn't feel like lawful-aligned behavior to me. b_jonas: then there's a case when Poirot commits perjury, lying at the inquest about the recently deceased person fizzie: int-e: I think Carrot Ironfoundersson would qualify, I just ruled him out becase he's working for the Watch. arseniiv: fizzie: b_jonas: whoa, suddenly I want to read Poirot stories (I hadn’t read many classic detective stories in my life, don’t know how had it ended like this) int-e: fizzie: Oh yeah he might... I didn't think of fictional societies at all. b_jonas: arseniiv: they're worth to read, yes. and then they're kind of hard to discuss at risk of spoilers, b_jonas: because there are so many Poirot books that I think most people haven't read all of them b_jonas: I've read quite a lot by now, but not all of them by far int-e: let's mention triangles and leave it at that. b_jonas: my favourite Poirot book is Five Little Pigs int-e: I have definitely not read them all. fizzie: I'm not sure I've read all of them, but I'd guesstimate at least somewhere close to 90%. arseniiv: spoilers => I am not hppavillion[1] b_jonas: I just borrowed another Agatha Christie book, it's on my shelf next to me. They're a bit hard to read, but it's usually worth. int-e: I have read all Sherlock Holmes stories... but that's a far less daunting endeavor. arseniiv: hm how many did she wrote them? b_jonas: int-e: I have read I think more than half of the original Sherlock Holmes stories arseniiv: how many of Poirot stories/books, I mean fizzie: 47 are listed in Wikipedia's "Hercule Poirot in literature" page. fizzie: Many are short story collections, though. int-e: Yeah, I was just looking at https://en.wikipedia.org/wiki/Agatha_Christie_bibliography ... "daunting" is the right term, I think. b_jonas: fizzie: yes, "Labors of Hercules" is a nice short story collection about Poirot int-e: Sherlock Holmes is one thick book, maybe comparable to the Lord of the Rings. b_jonas: int-e: have you read Andy Weir's Sherlock Holmes stories? there are three of them, see http://www.galactanet.com/writing.html fizzie: Of the Marple books, I think I like Nemesis. b_jonas: in "Labors of Hercules", Poirot lies that he has a brother who is even more brilliant than him, as an obvious shoutout to Sherlock Holmes. What's the name of that brother? fizzie: Achilles? fizzie: ...apparently it's just "Achille". b_jonas: ah yes, that's it b_jonas: that makes sense, since Achilles is the second greatest hero in the classic greek mythology b_jonas: the greatest hero of recent times, where Herakles himself has lived in the distant past arseniiv: which number is Theseus? fizzie: Other Marple books I like include Sleeping Murder, and The Mirror Crack'd from Side to Side. b_jonas: arseniiv: I don't know, I don't think I heard any ranking that goes past Achilles b_jonas: s/past/beyond/ b_jonas: I'll have to re-read The Mirror Crack'd Side to Side. I've read it once, but don't remember it much, and I think I only read it in translation b_jonas: among Marple books, I recently read The Murder at the Vicarage, which is a decent story even though the viewpoint person is an annoying character b_jonas: and I've read A Murder is Announced recently b_jonas: I don't think I've read any Marple books other than those three b_jonas: but then there aren't many b_jonas: unlike how there are a lot of Poirot books b_jonas: there are short stories about Marple too, I should read those if I can find the book b_jonas: totally unrelated, I wish to advertise http://www.giantitp.com/forums/showthread.php?601011 which is a play by post game of Magic: the Gathering with three-card decks (no hidden information so everyone is assumed to play optimal strategy if we can figure it out, you don't lose from decking, no mulligans, all cards printed by Wizards are allowed except those that were in the winning deck of any previous b_jonas: round) b_jonas: it is an esoteric enough game so I think it's relevant here Deraj: Uh oh -- I've been caught b_jonas: `welcome Deraj HackEso: Deraj: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: . (For the other kind of esoterica, try #esoteric on EFnet or DALnet.) Deraj: Side note: that was the toughest captcha ever b_jonas: ooh, you like our Befunge captcha? b_jonas: or unefunge or whatever it is Deraj: Not sure "like" is how I'd describe it, but it is certainly appropriate b_jonas: ais523" ^ Deraj: Am I lame for searching for an online Befunge interpreter instead of actually learning the language just to please the captcha? b_jonas: finding a befunge interpreter is a good way to solve the captcha Deraj: I guess if you can't do that, you're probably not really THAT into esoteric programming languages fizzie: We had a brainfuck one before, yet got spam past it, which was pretty bizarre. b_jonas: fizzie: I learned from kspalaiologos that casinos use brainfuck. casinos also send spam. so it's no wonder they can get past the captcha. Deraj: Wow. I know on the PICO-8 BBS, zep's impression was that a unique (game) captcha was probably sufficient, because who would waste their time trying to spam a tiny community? Apparently casinos! b_jonas: I think if we set an APL captcha, we'd get spam from the finance sector advertising investment opportunities. fizzie: I just find it hard to believe anyone would pay individual attention to our wiki, which gets very little traffic. fizzie: And if we set a Coq captcha, we get spam from all the computer science departments advertising postdoc positions? b_jonas: Yes. And if we set a PHP captcha, we'd get spam from people advertising web hosting and mass mailers. Deraj: Or maybe... defeating the Brainfuck captcha was an inside job... b_jonas: wasn't it brainfuck that the casinos use? b_jonas: `? kspalaiologos HackEso: kspalaiologos is a brainfuck addict. He's secretly disassembling brainfuck code for a casino that lost the source code. Apparently knows the secret of Malbolge. b_jonas: yes, brainfuck b_jonas: who uses befunge then? fizzie: alexa.com's site analysis on esolangs.org says that our top search keywords are "brainfuck", "aaaaaaaaaaaaaa", "malbolge" and "aaaaaaaaaaaaaaa". fizzie: Two of them are unsurprising, but I'm not sure what all the a's are about. b_jonas: https://esolangs.org/wiki/AAAAAAAAAAAAAA!!!! fizzie: I guess. Not sure if people are actually looking for that though. fizzie: Apparently our wiki captures 6.25% of all "brainfuck" searches. Well, that's not too shabby. b_jonas: fizzie: sure, but even google can't always guess what they're looking for when they type aaaaaaaaaaaa Deraj: Are you sure you got the correct number of a's? fizzie: Also apparently our primary competitors are inform7.com, copy.sh, progopedia.com and muppetlabs.com. b_jonas: fizzie: competitors for brainfuck specifically, or in general? int-e: muppetlabs! int-e: b_jonas: I'd guess in general fizzie: In general, yes. fizzie: I don't quite understand these metrics. fizzie: We get 72.2% of "search traffic", compared to our competitors average of 6.5%. fizzie: "The percentage of organic search referrals to this site" b_jonas: hmm, then we should feature organic esolangs to cater to our audience fizzie: They recommend we should add keywords for "sql", "is sql a programming language" and "windows 98", these are "keywords driving traffic to competitors but not this site". fizzie: And we should improve our existing content on "mmmm", "collatz" and "chicken tendies", which are already driving some traffic but could do more. b_jonas: is Homespring organic? how about The Waterfall Model? fizzie: I don't think this is a super-useful analysis for us. fizzie: But the key point I came here to look for is, our global rank is #400,358. arseniiv: b_jonas: my ones are 100,00000001048% organic b_jonas: arseniiv: because they're tree-based and trees are organic? arseniiv: (don’t ask about that 0,00000001048% overshoot, I don’t know what causes it) arseniiv: b_jonas: that too! b_jonas: MIX is polyunsaturated, I think it's too old to have bought into the organic fad arseniiv: but not all of them are tree-based. Though terms are trees, naturally, and one of them uses a kind of terms b_jonas: does Real Fast Nora's Hair Salon use organic shampoo? b_jonas: is A Pear Tree organic? arseniiv: Nora is the best arseniiv: it’s quite a joke that much of organic chemistry technology products are not organic in this sense arseniiv: like, even something as simple as acetone arseniiv: or, as I like to call it in private, propan-2-one Deraj: Apologies if this type of message is frowned upon, but I've been working on a programming game that uses an esoteric computer architecture (single instruction), and thought that #esoteric might be the best (only?) place to find people who might be interested in such things Deraj: I just put up a page on the language (trying to follow all applicable policies!) and there is a link to the game at the end (under External Resources): https://esolangs.org/wiki/SIC-1_Assembly_Language Deraj: Additionally, if anyone knows of any other esoteric programming games, please point me to them! For what it's worth, I've enjoyed Zachtronics's games (esp. TIS-100 -- which I'm surprised isn't represented on esolang!) fizzie: We've definitely discussed TIS-100. fizzie: (I finally bought SHENZHEN I/O the other day, now that it was 50% off.) fizzie: As for other games, there's https://esolangs.org/wiki/Category:Programming_games fizzie: BF Joust is played in sporadic bursts of activity, though it's been a long time since the last one. fizzie: The others are probably not played. Well, except maybe Core War, that might still be going, it's the most well-known of them of course. Deraj1: Heh, not sure how I missed the Programming Games category -- thanks! Deraj1: And yeah, I ran across Core War a little while back, but never really gave it a try Deraj1: @fizzie have you tried Shenzhen I/O yet? I'm wondering how it compares to TIS-100 (haven't gotten I/O yet) lambdabot: Unknown command, try @list fizzie: Not yet. But I know at least int-e and shachaf did. shachaf: I only played a small amount of it. Deraj1: shachaf, is that "only played a small amount because that's all I had time for" or "only played a small amount because it wasn't really what I was looking for"? :) oerjan: * A * (+379) Just saw Bin-8 and it is really amazing! <-- is e being sarcastic, or admitting to being the same person? shachaf: Probably more the latter? oerjan: *might be oerjan: you know how we have several quotes where fungоt gives an amusingly appropriate reply? we should try to brute force more of those [...] <-- that's cheating tdnh oerjan: if you're not surprised when it happens, it's not a good quote. shachaf: Most of those quotes are borderline anyway. oerjan: true enough. fungot gets a lot of slack due to his charisma and cute looks. fungot: oerjan: i guess it is harder than being a vegetarian. :p i'm not sure what HackEso: 1/2:383) you know that thing in the movies where they put a pillow on someone's face and try to suffocate them that doesn't work. we tried that with my ex once, but we just couldn't kill each other that way \ 580) I am just saying something that I think I once saw some idea somewhere, I forget, was it on television? \ 151) fizzie: I can never tell with OpenBSD! everything looks li HackEso: 2/2:e an error anyway \ 1244) izabera: It's sort of like the principal, as far as I know. Except It only prints " BOTTLES OF BEER ON THE WALL!" Counting down from 99 to 0. With no line breaks. \ 461) i started running and smoking i love my lungs the way they are so trying to balance them out shachaf: Remember the good old pre-n times? oerjan: paradoxically, we deleted more quotes then. oerjan: `emoclew tahw HackEso: ​(.tenLAD ro tenFE no ciretose# yrt ,aciretose fo dnik rehto eht roF) . :ikiw ruo tuo kcehc ,noitamrofni erom roF !tnemyolped dna ngised egaugnal gnimmargorp ciretose rof buh lanoitanretni eht ot emocleW :what oerjan: `? ciretose HackEso: ciretose? ¯\(°​_o)/¯ oerjan: `learn ciretose# is #esoteric's evil twin. It's all full of sickly sweet messages. HackEso: Learned 'ciretose#': ciretose# is #esoteric's evil twin. It's all full of sickly sweet messages. oerjan: hm Deraj also seems a little reversed. maybe they're invading. tahw: no affiliation. shachaf: Deraj seems to be devading if anything. oerjan: that may be just a ruse. oerjan: especially since e's still here. oerjan: i hope e didn't take us seriously. oerjan: well, me. Deraj1: Still here -- my IRC client kept disconnecting, so I joined with a different one Deraj1: On the wiki, it looks like the "Programming games" category page doesn't have anything linking to it (per the "What links here" link) -- any reason it shouldn't be on the Categories page (e.g. having a game isn't a property of the language)? oerjan: Deraj1: technically that category was created against policy, but we've long ago slipped on actually enforcing it. zzo38: I read the Wikipedia article about ReDoS; can some implementations of regular expressions optimize the specified regular expressions? It look like to me that optimization is possible oerjan: (it _should_ have been discussed on the Esolang talk:Categories page first.) zzo38: Such as optimizing /(a+)+/ as /a+/ and /(a|aa)+/ as /a+/ also zzo38: And /(a|a?)+/ as /a*/ oerjan: the very existence of the policy is probably discouraging us from cleaning up such stuff, since we'd be supposed to do the discussion part first. zzo38: If a policy is no good, don't use it. oerjan: well what i was considering was proposing to abolish it. Deraj1: oerjan, thanks. From my outsider's perspective, I think the policy for discussing before creating makes sense... not sure discussing before undoing/deleting seems necessary oerjan: Deraj1: well i think this particular category would be good to have. Deraj1: Gotcha zzo38: I think discussing should be needed before deleting (unless it is clear is not helpful to do), but not necessary for undoing unless it is subsequently redone and undone Deraj1: Just to clarify, I meant that if some random person (e.g. me) came in and (probably inadvertently) made a change that went against policy, undoing that change without discussion seems sensible. Sort of a "nip it in the bud" approach so mistakes don't spread zzo38: Yes, I did say discussion should not normally be necessary for undoing, due to that Deraj1: Anyway, oerjan, I specifically searched esolang for programming games, so at least one person would have found that surfacing that category better useful. But I also think having a game isn't a property of a programming language, and so I could see a reasonable argument for eliminating the "Programming game" category if you want to keep esolang focused on just the languages themselves Deraj1: In other words, I'm not helpful :) zzo38: I think there are uses to add such categories especially if there is a significant number of articles that would belong. zzo38: (In some cases categories are not needed because you have namespaces.) oerjan: Deraj1: we have some languages that are _clearly_ games, like BFJoust. oerjan: the mention in Agony is borderline though. oerjan: also, we have many articles that are not languages zzo38: Yes, that is why you will have a category for the articles that are languages, so that you can omit the articles that are not languages. Deraj1: Makes sense. Seems like a useful/appropriate category to me then oerjan: They recommend we should add keywords for "sql", "is sql a programming language" and "windows 98", these are "keywords driving traffic to competitors but not this site". <-- i think zzo38 has done enough esoteric stuff in sql that the first suggestion nearly makes sense shachaf: is windows 98 a programming language oerjan: as usual, our ability to check entries for bugs decreases steeply with esotericness shachaf: Wait, why is turning > into == golfing? shachaf: Oh, the name of the section is "C++ Codegolfed". I just saw the diff. fizzie: To be fair, it's not particularly golfed in the first place. shachaf: Oh, it's by the person who may or may not be A. shachaf: I guess that person isn't A? shachaf: I certainly wouldn't give that program an A. oerjan: the sed one is wrong but how does it work... fizzie: Looks unary to me. With a decimal conversion based on matching multiples of ten. fizzie: Didn't see anything like the 256 rule, but that should be quite possible to add, just s/^;\{256\}$// in the right place. oerjan: fizzie: yeah i just needed to look up the hold space commands oerjan: hmph Thue as well oerjan: hm *| seems to signal readiness for another command, should be possible to insert the check there oerjan: ok that "fixes" everything other than the Thue problem since my last edit back in January oerjan: (everything i can judge, anyway) oerjan: the Thue may be fixable but i'd need to understand the program first imode: quick poll: harvard architecture or von neumann? kritixilithos: oerjan: yes, the sed solution stores the number as unary and converts to decimal to output kritixilithos: and I removed the /^/ check kritixilithos: does the wiki not have something to automatically sort entries? zzo38: Windows 98 is not a programming language, I think, but SQL is a programming language. oerjan: kritixilithos: thanks oerjan: i don't know about sorting sections (and some of them are not sorted by the literal section name) oerjan: hm it may not be possible other than for tables kritixilithos: argh realised my decimal-to-unary converter borks for 99 kritixilithos: can be fixed with one ugly byte kritixilithos: esowiki can't print non-ascii chars? I had a '→' in there oerjan: shouldn't be a problem... oerjan: oh the bot? right, it can't int-e: or doesn't :) oerjan: something about the mediawiki irc interface int-e: . o O ( Interesting problem of word choice when it comes to a program :) ) oerjan: i mean, the problem is in a mediawiki component iirc int-e: . o O ( When you say that a program cannot do something, do you allow for the possibility of somebody patching it so it can? ) oerjan: fizzie: ^ zzo38: Why is there sometimes problems having to do with television captions containing apostrophes? int-e: . o O ( What's television? ) int-e: But it's probably a Unicode problem ;-) int-e: (Actually that's redundant, should write "But it's probably Unicode") kspalaiologos: @tell imode von neumann for sure, it's way more fun lambdabot: Consider it noted. int-e: Hmm, why does the Harvard architecture not have a person's name attached to it. int-e: `? unicode HackEso: Unicode is a mess invented in 1988 by Xerox, Microsoft, the Spanish Inquisition, and the evil Human Supremacy Corporation, in order to make it easier for the government to spy on Chinese people. int-e: `? ascii HackEso: Ascii is the plural of ascius, "of or pertaining to southern countries, near the equator". int-e: `unidecode ↈ HackEso: ​[U+2188 ROMAN NUMERAL ONE HUNDRED THOUSAND] zzo38: Television captions do not use Unicode. zzo38: I have seen in one show all apostrophes were replaced by "4". In another show, all lines got cut off after the first apostrophe on that line. In another show, each apostrophe was doubled after some amount of space, which varied. zzo38: Can it be detected by C preprocessor to check for BSD or GNU system? int-e: zzo38: It doesn't really matter whether the captions themselves use Unicode though. int-e: It just has to be somewhere in the processing pipeline. zzo38: int-e: OK, yes, I suppose you are correct; that might be. int-e: And (obviously, I hope) I know nothing about this. zzo38: This problem seems to be mainly with apostrophes whenever it occurs (although most captions with apostrophes do not have these problems) int-e: . o O ( Which is your favorite "apostrophe"? '`’‘′ ) int-e: (I probably missed a couple.) zzo38: The ASCII apostrophe ' zzo38: (If they used ASCII to write the captions rather than Unicode, then it shouldn't be the problem because the ASCII code for the apostrophe is the same as the EIA-608 code for the apostrophe. There are some characters difference, but apostrophe isn't one of them.) b_jonas: maybe it's one of those stupid filters that remove apostrophes supposedly with the goal of stopping SQL injectinos fizzie: @tell oerjan Actually, it might have been in the bot, not in the MediaWiki component. I wanted to filter out control characters (0-2, 4-31, 127) but due to signedness of char I may have intentionally also filtered all bytes >127 as well. lambdabot: Consider it noted. b_jonas: oh that was the problem. damn you ebay for not giving a specific enough error message b_jonas: in the checkout, ebay gave me an error message at the step when I tried to change the currency for paypal payment. this reoccured on all retries so I couldn't pay. b_jonas: solution is to pay the two sellers in my checkout separately. b_jonas: oh the other hand, look, they fixed the interface that displays the Paypal currency conversion rate on ebay's checkout page! b_jonas: it no longer says "1 HUF = 0.00 AUD", it says "1 HUF = 0.0046 AUD" now kspalaiologos: I'm building brainfuck-to-anything transpiler in Brainfuck kspalaiologos: something like awib but kinda better imode: this is totally not esolang related, but it is a puzzle. I have an image that I know is rendered using a heightmap as reference, but I don't know the rules used to render and construct the heightmap: https://cdn.discordapp.com/attachments/374727754551132162/647843802220068874/XikClZ6.png kspalaiologos: if someone asked me for an opinion imode: from what I can see, it's a tile-based heightmap. kspalaiologos: of a person that remembers it thru the fog kspalaiologos: red represents points high above sea level kspalaiologos: and blue represent ones below kspalaiologos: the lines are used to mark changes of terrain kspalaiologos: everything enclosed by this fancy circle is located above everything outside imode: my working theory is: given a tile at (x, y), all of distance 1 away from that tile all have to have a heightmap difference of 1 from the source tile. imode: meaning from any tile to any other tile, there has to be a height distance of 1. imode: you can't have one tile 2 tiles higher than another tile. imode: this is interesting. imode: http://i.imgur.com/3qGMZtS.png a similar situation. perplexing. zzo38: b_jonas: One of them cut off everything after the apostrophe, not the apostrophe itself. I didn't see the one that just stripped out the apostrophe. kspalaiologos: ^-- someone willing to help with b2all by donating a backend? kspalaiologos: while keeping the copyright obviously imode: https://cdn.discordapp.com/attachments/374727754551132162/647876286936645695/2019-11-23-110839_1600x900_scrot.png figured it out. kspalaiologos: that's some dope ass workspace setup kspalaiologos: is it some kind of customized tmux? kspalaiologos: I recognize irssi kspalaiologos: and nano imode: weechat and i3. kspalaiologos: the font is lovely tho kspalaiologos: it's great kspalaiologos: I love it imode: font is proggyclean. imode: https://hatebin.com/oaimonphqn here's my i3 config. kspalaiologos: I'm actually a cmd peasant kspalaiologos: and I use heavily customized csh kspalaiologos: on source level kspalaiologos: http://prntscr.com/q13g8u kspalaiologos: cmd's font can't render powerline characters kspalaiologos: so I'm screwed on that one imode: that does suck. kspalaiologos: so yeah kspalaiologos: my working conditions are terrible kspalaiologos: and I'm inproductive as heck imode: migrate to a tiling wm. kspalaiologos: I wish I could use vi well enough for it to be more convinient to use than notepad++ kspalaiologos: but vi would bump my productivity a couple of times if I mastered it kspalaiologos: and I don't really fancy learning next thing in my free time kspalaiologos: I'm stuck with dwm that presumes kspalaiologos: albeit I can write really fast on a keyboard, I can't get used to shortcuts really zzo38: I like to use the "Fixed" font. What terminal emulator are you using though? imode: xterm. HackEso: ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: font: not found b_jonas: `? font HackEso: ​#esoteric bitmap fonts include: \oren\'s font http://www.orenwatson.be/fontdemo.htm , lifthrasiir's font https://github.com/lifthrasiir/unison/ , b_jonas's font http://www.math.bme.hu/~ambrus/pu/fecupboard20-c.pcf.gz , fizzie's font https://github.com/fis/rfk86/tree/master/web/font , FireFly's fonts http://xen.firefly.nu/up/fonts/ zzo38: I am using xterm also b_jonas: kspalaiologos: ^ we have some official #esoteric fonts kspalaiologos: oren's font looks dank kspalaiologos: I may use it on some occasion kspalaiologos: unison kspalaiologos: 's feeling is quite nice but letter shapes are quite bad imode: https://media.discordapp.net/attachments/374727754551132162/647879240074788884/2019-11-23-112033_1600x900_scrot.png?width=877&height=494 imode: another shot of a small clearing. imode: should probably color the backdrop green or something. kspalaiologos: b_jonas, I can't view your font kspalaiologos: no idea what format is it zzo38: It seems to be pcf format? X window system should be able to load it kspalaiologos: I'm on Windows zzo38: I think FreeType can read it even on Windows kspalaiologos: FireFly's font is amazing too FireFly: which one of them? FireFly: I just like doing tiny bitmap things kspalaiologos: 9x5 and 7x5 kspalaiologos: other look a tiny bit gibberish kspalaiologos: but these are perfect zzo38: I would want a version of Fixed using my "terminal emulation character set" as the character coding, rather than ISO-8859-1 or Unicode. kspalaiologos: FireFly, could you send me a ttf? kspalaiologos: because I'd like to use it FireFly: no, I don't have one kspalaiologos: ah, that's a shame FireFly: you can copy out a bdf from the textbox to the right I believe FireFly: which you could use as is or convert to other formats perhaps.. I know I've gotten it to work in xterm with the bdf FireFly: but I don't remember exactly how; fonts are a bit of a dark art FireFly: http://xen.firefly.nu/up/fonts/7x5px-font.png is the "source" format for my bitmap fonts, then I have some janky JS parse the glyphs out of that zzo38: Convert to pcf and then put it in the X fonts directory, and then you can use it with xterm and other programs that support the X font system FireFly: ah, well there you go FireFly: do that :p zzo38: Type "xset q" to list the font path, and "xset fp rehash" forces the server to reread the font databases if necessary b_jonas: zzo38: fecupboard20 has some fancy graphical stuff at the control character places zzo38: b_jonas: What fancy stuff? (I have not downloaded the font, so I haven't looked) b_jonas: zzo38: there are some line drawing characters, at the place where xterm would expect it in a non-unicode font; some cp437 graphical characters like the smiley face; and thin versions of the cp437 letters at the C1 control positions of iso-8859-1 b_jonas: you get copies of the line drawing and low control 437 graphical characters up high in unicode positions b_jonas: the cp437 letters are mostly for debugging in case they're shown for some reason b_jonas: but you almost never see these because terminal emulators just won't print control characters kspalaiologos: I've taken on a very ambitious goal of learning modern Latin kspalaiologos: it's some kind of an esoteric spoken language for todays standards lol zzo38: The Catholic Church still uses Latin though, and sometimes has to make up new words for stuff that didn't exist before, such as television b_jonas: making up a latin word for television must be hard zzo38: I think it is "instrumentum televisificum" kspalaiologos: tantumvideri kspalaiologos: is my bet kspalaiologos: for television fizzie: Aw. Tried to link something containing protobufs with -static, and now it segfaults before main. (Via: _start -> static initializers -> proto stuff -> google::protobuf::internal::InitSCC -> google::protobuf::internal::InitSCCImpl -> call to address 0.) fizzie: Fair enough: there's a "callq 0x0" instruction in the code. fizzie: From looking at libprotobuf.a, there's supposed to be a relocation there to make it a call to pthread_self. zzo38: I read that Librem phone has the radio processor doesn't talk directly to the microphone. Does that make it possible to send and receive faxes? imode: https://cdn.discordapp.com/attachments/374727754551132162/647939740573630464/2019-11-23-151910_1600x900_scrot.png finished shot. zzo38: What is it a picture of? imode: a mountain pass with a terrain painter I wrote this afternoon to figure out how someone generated a particular image. zzo38: If I add up all of the numbers in the RSS column from "ps aux" output, it adds up to 397288 which is less than the amount obtained by subtracting the buffer and cache amounts from the used amount by the "free" command. Why is it? zzo38: (Adding "sudo" doesn't help) zzo38: I know that some memory is shared, but I don't know how to make a proper division of the memory usage. oerjan: @messages-sold lambdabot: fizzie said 14h 39s ago: Actually, it might have been in the bot, not in the MediaWiki component. I wanted to filter out control characters (0-2, 4-31, 127) but due to signedness of char I may have lambdabot: intentionally also filtered all bytes >127 as well. oerjan: fiendish zzo38: I fixed ZZ Zero so now the main game loop uses INP(96) to read the keyboard instead of INKEY$ so the problem of repeat rate is solved, but there is another problem is if you push two keys at once and release one, sometimes it isn't recognized, because the released code will be received and then the pushed code won't be received until it starts to repeat zzo38: And this results in a delay. moony: zzo38: what you making, and for what hardwarE? zzo38: It is a game creation system similar to ZZT, and the hardware is PC zzo38: You can download the latest version (currently 0.4) from http://zzo38computer.org/prog/zzzero.zip zzo38: I also set up a NNTP for discussion of it moony: zzo38: DOS? moony: should I run it under FreeDOS? zzo38: You can try; it probably would work. It also works under DOSBOX. zzo38: There are also a few other problems currently, such as the editor isn't very good, and the rotation map editor is slow zzo38: Have you used ZZT? moony: In fact I rarely use DOS. I usually write my nonsense for console hardware moony: i.e. the Gameboy, and I plan to do something for the Sega Saturn zzo38: Have you written any program for NES/Famicom? moony: zzo38: Considered it multiple times, and know what goes into it zzo38: Does ZZ Zero working for you? moony: waiting for FreeDOS to download, zzo38 moony: oh just finished, lemme install it, and then i'll try it zzo38: It also works in DOSBOX though moony: don't have DOSBOX installed either :p moony: zzo38: what's this unusenet you speak of zzo38: Unusenet is a form of NNTP newsgroup hierarchies which are not part of Usenet. moony: mm. how do I access it? :P zzo38: They do not conflict with Usenet (and you can serve both from the same server if you wish), because all Unusenet newsgroup names must start with "un" followed by one or more digits and then a dot. zzo38: moony: Access it with any NNTP client. zzo38: (Or just telnet to the NNTP server, although using specialized NNTP software is better.) moony: I haven't used usenet in a long while and completely forgot how to set up a NNTP client zzo38: There are actually many different Unusenet hierarchies, but as far as I know the only one actually in use is where the digits after "un" are the number of components in the reverse domain name (all other Unusenet hierarchies start "un0."). zzo38: I also wrote my own NNTP client software, called bystand, and supports connecting to multiple servers (I have it connect to my own server and to nntp.aioe.org) zzo38: Or just use netcat or telnet or whatever and write raw messages. I implemented a POSTQUIT command for the convenience of users who do not have specialized NNTP software, even. zzo38: (Also, you do not need to access the NNTP in order to use ZZ Zero; it is there for purpose of discussion.) moony: zzo38 i'm honestly not sure how to use ZZ Zero at all :p zzo38: Did you read the documentation? moony: READ.ME? moony: or some other file moony: I may or may not be distracted by RETROFORTH right now zzo38: That isn't the only documentation, but READ.ME does say that you should read the other *.DOC files too (at least GAME.DOC if you only wish to play the game, but there isn't any complete game really made yet, just the game engine) moony: hello, sprocklem zzo38: For example, if you type "GAME EXAMPLE" then the example file will be started (which isn't a complete game, just for testing for now) zzo38: Did you try that? moony: one moment zzo38: (If you just type "GAME" by itself, you may get a blank screen; the only things that work are ESC or F1.) moony: zzo38: is example's SRC anywhere? zzo38: Yes; it is actually inside the world file. It is a Hamster archive. A Hamster archive consists of a sequence of "lumps". Each lump consists of the null-terminated filename, and then the 32-bit PDP-endian data size, and then the data. zzo38: I have added a hidden feature that you may find useful: Start the game, and then push F1 and then ^C and now PERSIST.DIR contains the unpacked files. moony: oo thanks zzo38: Move the files into PROJECT.DIR if you want to edit them. moony: just looking zzo38: You will also need to move the files into PROJECT.DIR in order to view them with BEDIT and WEDIT. However, MAIN.ASM is a plain text file, so it doesn't matter what directory it is in, if you want to just view it. zzo38: Did you look at MAIN.ASM? oerjan: that's an annoyingly ugly check in binary, because you have to catch every option that _isn't_ 256 as well oerjan: i suppose it wouldn't really better in another base zzo38: Do you like the ZZ Zero assembly language? oerjan: assembly isn't really my thing. oerjan: also i had to split up the logic for the two $'s (turning one into >) in order to ensure the check for 256 doesn't trigger during the squaring-by-repeated-adding-and-decrement part kspalaiologos: b_jonas: huh kspalaiologos: I'll get extended ascii sorted out kspalaiologos: Whenever I'll find some time bfbot: 8ball echo echo1 f fib msg0 msg1 quine simple wiki kspalaiologos: =8ball hello bfbot: Without a doubt. kspalaiologos: =echo test kspalaiologos: =echo1 test kspalaiologos: =undef echo1 bfbot: 011235813213455891442333776109871597258441816765109461771128657463687502512139319641831781151422983204013462692178309352457857028879227465149303522415781739088169632459861023341551655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025203650110743295128009953 kspalaiologos: =quine bfbot: ^quine 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 quine kspalaiologos: ^quine fungot: =quine bfbot: ^quine kspalaiologos: Oh shit kspalaiologos: I nearly started a disaster bfbot: Incorrect usage! Refer to =help doc kspalaiologos: ^ my bot died kspalaiologos: but I'm not sure when and why kspalaiologos: or I don't seem to remember kspalaiologos: anyways, it's back in business kingoffrance: s/in business/& for december/ to keep the rhyming kspalaiologos: but the stability pun is in place here too b_jonas: kspalaiologos: if you teach bfbot bfasm, will you interpret it directly, or will you have it go through a compiler to bf then a bf interpreter that recognizes the structures of the bfasm output and executes them optimized? kspalaiologos: honestly I'm not sure kspalaiologos: I think about making some kind of bfasm interpreter kspalaiologos: because it would make more sense kspalaiologos: but, there is raw too kspalaiologos: to embed raw brainfuck kspalaiologos: so I guess I'll have to switch the modes whether I grep somewhere this text kspalaiologos: ^~~ i should parse the code, so normal grep wont suffice int-e: shachaf: what do you think of https://en.wikipedia.org/wiki/Faddeev%E2%80%93LeVerrier_algorithm shachaf: I don't think much of it right now. Should I? int-e: It can compute adjoint matrices and determinants, which is nice. Seems to be competetive for that purpose on 9x9 matrices. int-e: (I'm still tinkering with http://www.research.ibm.com/haifa/ponderthis/challenges/November2019.html ) int-e: https://arxiv.org/abs/1206.7067 was more illuminating really. oerjan: `wisdom waha HackEso: That's not wise. oerjan: `../canary HackEso: ​../canary? oerjan: fizzie: having it give the same cryptic error message on non-executable files as non-existing ones may be confusing given how often we forget to do chmod +x int-e: I guess it's appropriate that a canary is executable... since its main purpose is to warn others by dying off? oerjan: `` ls -l ../canary HackEso: ​-rw-r--r-- 1 1000 1000 101 Jul 19 21:53 ../canary oerjan: it's not int-e: `` ../canary HackEso: ​/hackenv/bin/`: line 5: ../canary: Permission denied oerjan: i was testing the error message int-e: right. int-e: `../absent HackEso: ​../absent? oerjan: `which cp HackEso: ​/bin/cp oerjan: `u mk bin/cp//Testing... HackEso: bin/cp oerjan: `` cp a b HackEso: cp: cannot stat 'a': No such file or directory oerjan: `u rm bin/cp int-e: `cat ../bin/u HackEso: No output. HackEso: cd "${HACKENV-/hackenv}"; nur "$1" int-e: `cat ../bin/nur HackEso: ​#!/bin/bash \ if grep -q \ <<<"$1"; then "${1%% *}" "${1#* }"; else "$1"; fi oerjan: int-e: i got tired of doing ../ all the time. wait, `u is the same length :( int-e: short for `up? oerjan: oh i forgot an important part oerjan: `revert oerjan: `cp testing HackEso: cp: missing destination file operand after 'testing' \ Try 'cp --help' for more information. oerjan: `revert oerjan: ok so fizzie's command search also skips non-executable files fizzie: I'm just following the standard. oerjan: but unlike the normal shell, it ignores them even if it finds no executable match oerjan: `` fnord HackEso: ​/hackenv/bin/`: line 5: fnord: command not found fizzie: `fnord HackEso: fnord? No such file or directory fizzie: `../canary HackEso: ​../canary? Permission denied fizzie: It should follow the standard practice now, assuming I didn't include any bugs. fizzie: "If permission is denied for a file (the attempted execve(2) failed with the error EACCES), these functions will continue searching the rest of the search path. If no other file is found, however, they will return with errno set to EACCES." oerjan: no wait, `u is shorter because i don't need another ` oerjan: it's all good oerjan: maybe i should rename it HackEso: ​/hackenv/bin/nur: line 2: is: command not found fizzie: I was thinking `^ because it's the up arrow, but that's just silly. oerjan: hm that actually works, both use the same shift key for me oerjan: although i'm not sure for a different keyboard fizzie: They don't for UK or US, but who's counting? fizzie: (The ` is unshifted, ^ is on shift-6.) HackEso: ​^? No such file or directory HackEso: ​~? No such file or directory oerjan: int-e: ~ means $HOME which is /tmp HackEso: ls: cannot access '~': No such file or directory int-e: `` ls ~ HackEso: No output. oerjan: also ~ uses a different modifier key than ` for me int-e: oerjan: It only means that in shells. int-e: here ~ is shift-` oerjan: _and_ i need a space after ~. int-e: and it's not a dead key. HackEso: ​¬? No such file or directory fizzie: That's shift-` here. oerjan: so 3 presses, 5 keys total fizzie: Another little oddity of the UK layout is that there is exactly one third-level symbol printed on a keycap, and that's the broken bar, which is altgr-`... except that it's anyone's guess whether it'll actually produce a broken bar or just the regular |. On this system it's just a |. oerjan: oh what about `< int-e: oerjan: that's even worse than `u oerjan: not for me ;) int-e: (further away and needs a shift) oerjan: < is unshifted left of z here int-e: Ah I guess I don't actually care. It's easy to complain though. oerjan: `complain int-e complains too much HackEso: Complaint filed. Thank you. imode-ruby: and now begins my quest to convince my employer that working on an esolang is a useful way of spending company time. HackEso: t? No such file or directory int-e: oerjan: shachaf's still leading in the complaint department, followed by you ;) oerjan: shocking int-e: (Well, it's hard to count, actually; two of your changes were `sled invokations) oerjan: `u `mv bin/{u,t} HackEso: ​/hackenv/bin/nur: line 2: `mv: command not found oerjan: `u ` mv bin/{u,t} HackEso: No output. oerjan: t for top is just as logical oerjan: and not confusible with / int-e: and I guess https://hack.esolangs.org/repo/rev/875339492c29 was a random complaint (which was reverted) oerjan: int-e: given it was izabera, it's probably italian hth int-e: oerjan: look at the command though int-e: of course you do, except when you don't int-e: `grwp tautolog HackEso: tautology:A tautology is a tautology. Oren invented them. int-e: I should probably sleep. noomy: `? moony HackEso: moony? ¯\(°​_o)/¯ oerjan: `wisdom moon HackEso: ​moon//moon is often named the following: moonythedwarf moonythehuman moonheart08 moony moon__ computing and luxon, making porthellos and @tells a real pain oerjan: `` grwp -l moon HackEso: ​☾_ \ bimonthly \ ciol \ #esoteric \ moon \ pluto HackEso: ​☾_ is moon_'s lawful twin. He's banned in the IRC RFC for being an invalid character. He sometimes eats papers. oerjan: porthellos seem to have decreased somewhat oerjan: `slwd moon//s,__,__ noomy, HackEso: moon//moon is often named the following: moonythedwarf moonythehuman moonheart08 moony moon__ noomy computing and luxon, making porthellos and @tells a real pain oerjan: `slwd moon//s,$,., HackEso: moon//moon is often named the following: moonythedwarf moonythehuman moonheart08 moony moon__ noomy computing and luxon, making porthellos and @tells a real pain. noomy: should've seen me earlier when i was "sust" for a bit (as a joke, you won't see that nick again) oerjan: you just cannot make the nick sust ainable noomy: that is actually close to the joke. I nicknamed myself the shortening of "sustenence" to make dumb jokes in ##werewolf when we were playing boreal noomy: (Boreal happens to be a gamemode where you can starve to death) imode-ruby: eneccccjljlhknhtfdditlhnjrdcercdldcdukkngdfk imode-ruby: fucking. oerjan: @wn sustenence lambdabot: No match for "sustenence". oerjan: . o O ( imode-ruby appears to be speaking italian LA LA LA LA ) int-e: . o O ( Who put the "pun" in "penguin"?) imode-ruby: oerjan: were there any curses in that? imode-ruby: if not I'm disappointed at my unconscious knowledge of italian. oerjan: i don't know much italian cursing b_jonas: oerjan: how about `㋌ then, since it's a version-controlled directory? oerjan: b_jonas: i don't know how to type that but i suspect it would be a lot more key presses than `t b_jonas: also I dreamt about a version control system that doesn't exist in real life. in my dream, it was quite popular, not as popular as git but probably at second or third place in popularity, and almost as old as git. I was sad when I finally realized that it doesn't exist upon waking up. b_jonas: I'm not sure what it is named, because dreams are vague like that, my best guess is "tek" b_jonas: the other one among the top three most popular ones was either mercury or another one that doesn't exist in real life b_jonas: and no, none of these is ais's scapegoat int-e: `unidecode ㋌ HackEso: ​[U+32CC SQUARE HG] wib_jonas: [ _ 60#: 2256 j-bot: wib_jonas: 37 36 int-e: =8ball Should I try simulated annealing? bfbot: My sources say no. fizzie: `` 8ball 'Should int-e try simulated annealing?' # just for confirmation HackEso: Most likely. fizzie: Well, conflicting advice there. int-e: So random. wib_jonas: int-e: try /msg perlbot 8-ball Should int-e try simulated annealing? wib_jonas: perlbot's implementation is more reliable wib_jonas: and don't trust HackEso's 8-ball int-e: But I already got the answer I wanted! kspalaiologos: Greetings kspalaiologos: 1. e4 e5 2. f3 Nf6 3. c3 Nxe4 4. fxe4 Qh4+ 5. g3 Qxe4+ 6. Be2 Qxh1 7. Bf1 Qxg1 8. Qe2 Qc5 9. Qg2 d5 10. b4 Qb6 11. Na3 d4 12. Nc4 Qe6 13. a4 dxc3 14. dxc3 c6 15. Qe2 Nd7 16. Nxe5 Nxe5 17. Bb2 f6 18. c4 Bxb4+ 19. Kd1 Qd6+ 20. Kc1 Bd2+ 21. Kc2 Bf5+ 22. Kb3 Qb4+ 23. Ka2 Be6 24. Rd1 Qxa4+ 25. Kb1 Bf5+ 26. Qe4 Bxe4+ 27. Bd3 Bxd3# 0-1 kspalaiologos: A couple of minutes game I played today kspalaiologos: I think it's neat kspalaiologos: But my opponent was kinda trolling kspalaiologos: Greetings int-e: deja vu fizzie: DejaVu Sans Mono. int-e: without single? arseniiv: DejaVu Sans Mono. => oh! I set that in firefox as a default for many languages arseniiv: someone played Submachine series? arseniiv: when it doesn’t go too point-and-clicky, I think it’s pretty cool arseniiv: there’s even an overarching story, though I think it wasn’t conceived in all its completeness in the times of older episodes arseniiv: but even then there was a bit or two of a story; not your average escape from X game; and there is a spoon (and later, a fork, and later still, both, but you won’t use them for eating) arseniiv: it all uses Flash, though, as all older yet unported things do arseniiv: or maybe it was ported while I wasn’t looking moony: `cat bin/? HackEso: cat: 'bin/?': No such file or directory moony: `which ? HackEso: ​/hackenv/bin/? moony: `cat /hackenv/bin/? HackEso: ​#!/bin/bash \ topic=$(echo "$@" | lowercase | sed "s/noo\+dl/nooodl/;s/ *$//") \ topic1=$(echo '`'"$topic" | sed 's/^`\(`\|$\)//') \ topic2=$(echo "$topic" | sed "s/s$//") \ cd $HACKENV/wisdom \ if [ \( "_$topic2"_ = "_ngevd"_ \) -a \( -e ngevd \) ]; \ then cat /dev/urandom; \ elif [ -e "$topic" ]; \ then cat "$topic"; \ elif [ -e "$topic1" ]; \ then cat "$topic1"; \ elif [ -e "$topic2" ]; \ then cat "$topic2"; moony: ` mv /hackenv/wisdom/moon /hackenv/wisdom/moony HackEso: ​? Permission denied moony: `mv /hackenv/wisdom/moon /hackenv/wisdom/moony HackEso: mv: missing destination file operand after '/hackenv/wisdom/moon /hackenv/wisdom/moony' \ Try 'mv --help' for more information. moony: ``mv /hackenv/wisdom/moon /hackenv/wisdom/moony HackEso: ​`mv? No such file or directory moony: `` mv /hackenv/wisdom/moon /hackenv/wisdom/moony HackEso: No output. moony: `? moony HackEso: moon is often named the following: moonythedwarf moonythehuman moonheart08 moony moon__ noomy computing and luxon, making porthellos and @tells a real pain. moony: TODO: request rename on esolangs imode: thunk-like segmented executables actually look really nice. wrote a little python to generate a sample executable. arseniiv: imode: what does thunk-like segmented mean? int-e: ah my previous question about simulated annealing was stupid... there are no small steps in discrete problems. int-e: =8ball Do you like this? bfbot: Outlook not so good int-e: I seem to have a new friend. kmc: "oh 8ball, what is the best email client?" "outlook not so good" b_jonas: `8ball what is the best email client? HackEso: Reply hazy try again. b_jonas: fungot, what is the best email client? fungot: b_jonas: drink a tea fnord i just have to add arseniiv: I agree yes you don’t need an email client int-e: So I'll stick to stupid hillclimbing from random starting points. kspalaiologos: =8ball bfbot show up bfbot: My sources say no. kspalaiologos: you little kspalaiologos: what is the worst mail client? kspalaiologos: =8ball what is the worst mail client? bfbot: Yes - definitely. kspalaiologos: =8ball what is the worst mail client? bfbot: Outlook not so good kspalaiologos: kmc, here you go imode: arseniiv: instead of having a binary executable with segments acting as a container for code, the container _itself_ is mode code, and each of the segments is code that generates values upon request. int-e: . o O ( Old hardware: use integer arithmetic for speed. Modern hardware: use floating point arithmetic for speed. ) int-e: (tbf, the latter is probably only really true for vectorizable code.) arseniiv: imode: hmmm arseniiv: (maybe after seeing an example or two I’ll understand, but currently I don’t think I am) int-e: . o O ( too von Neumann ) int-e: imode: I /guess/ it can do things like generate good code for the actual platform the code is running on? int-e: (trying to figure out why people would want to go down that route... generally things become messier when you replace well-defined data structures by something TC) kmc: `addquote =8ball what is the worst mail client? Outlook not so good HackEso: 1330) =8ball what is the worst mail client? Outlook not so good b_jonas: `dateu HackEso: 2019-11-28 20:52:22.564 +0000 UTC November 28 Thursday 2019-W48-4 b_jonas: `dateu HackEso: 2019-11-28 21:00:27.573 +0000 UTC November 28 Thursday 2019-W48-4 int-e: . o O ( `mkx ../bin/dateu//echo 'No way!' ) oerjan: i am not sure Dart interpreted ` correctly, but then i'm not sure there is a correct interpretation - the author is A under a previous alias. oerjan: it made no sense before, no it sort of makes sense oerjan: `slwd moony//s,moony,moon,;s,moon,moony, HackEso: moony//moony is often named the following: moonthedwarf moonythehuman moonheart08 moony moon__ noomy computing and luxon, making porthellos and @tells a real pain. oerjan: `revert oerjan: `slwd moony//s,moony ,moon ,;s,moon,moony, HackEso: moony//moony is often named the following: moonythedwarf moonythehuman moonheart08 moon moon__ noomy computing and luxon, making porthellos and @tells a real pain. oerjan: TODO: request rename on esolangs <-- not sure that's supported moony: could just dump my account and make another fizzie: I think it might be. fizzie: Or at least I think I thought about it. There's a Renameuser extension, which we probably don't have installed at the moment, but I remember it came up. fizzie: Well, there's a Renameuser extension, and there's a UserMerge extension, I don't think we have either. fizzie: UserMerge is probably slightly more general, because you can decompose "rename A to B" into "create B, merge A into B", but not the other way around. oerjan: moony: your backlink from wikipedia should use https twh moony: it'a not? moony: whoops moony: will fix oerjan: also, you remain the only member of "Wikipedians who like empty categories". moony: I know oerjan: =8ball test bfbot: Outlook not so good oerjan: =8ball test bfbot: Outlook not so good oerjan: =8ball test bfbot: Outlook not so good oerjan: looks deterministic. oerjan: i conclude that kspalaiologos cheated even more than i thought to get the last quote oerjan: also, i am now capable of typing his name without rechecking *MWAHAHAHA* oerjan: erm, nick. oerjan: his wretched polish name is still beyond me. maybe the first part. imode: =8ball test bfbot: Outlook not so good imode: =8ball tset bfbot: Outlook not so good moony: =8ball foo bfbot: Concentrate and ask again. imode: =8ball foo imode: =8ball foo bfbot: Concentrate and ask again. imode: yeah determinism at its finest. oerjan: ^8ball is deterministic 8ball bad? oerjan: there you go. oerjan: they better hope trogulus doesn't have more nefarious intentions involving those people (alternative 1: to kill off the remaining dome survivors, alternative 2: they're secretly sea creatures like him) oerjan: hm are _both_ petey and the pa'anuri trying to trick the other into thinking they are stupid? oerjan: and is anyone succeeding? oerjan: and is this a proper way to use "both"? ais523: int-e: modern CPUs have integer vector units in addition to floating-point vector units ais523: I'd expect them to either be the same speed, or else the integer operations to be faster ais523: moony: renaming accounts on MediaWiki installations requires extensions that Esolang doesn't have, so it's normally easier to just create a new account (although persuading fizzie to install an account-renaming extension is an interesting alternative) myname: what is a non-real quine? int-e: myname: in this case, it's a non-quine. int-e: It may be an attempt at a cat program but it falls short even for that. myname: i agree myname: what is the v100 at the end even supposed to do myname: it just pushes a number of 100s onto the stack depending on the length of the user input? int-e: I don't know, maybe the idea was to squeeze everything currently on the stack? int-e: But I don't really care either... the squeezing mechanic is cute, but there isn't much to actually work with in that language. int-e: fungot: are you squishy? fungot: int-e: why do laptops suck for webdev? they run vim as graphical, although it hints at the areas elsewhere, but cmcs might well offer the motivation to do it myname: what do you mean by squeezing? int-e: squishing int-e: =8ball Is this my lucky day? bfbot: Signs point to yes. int-e: oerjan wins again int-e: fungot: can you say "predicament"? fungot: int-e: ummm......what were we talking about on an irc channel because a) it's the first program to access the value 864000 int-e: `grwp accident HackEso: locale:Locales are just frames, which are just complete Heyting algebras. Taneb accidentally invented them by asking about lattices. The only locale available in #esoteric is en_NZ.UTF-8. \ poutine:Poutine was Pouti and boily's sister until the tragic cheese accident. HackEso: https://hack.esolangs.org/tmp/just fizzie: Just checking. (No pun intended.) arseniiv: . o O ( `learn Baba is you ) arseniiv: I’ve seen just the other day fizzie: Baba is just you. kspalaiologos: `just xor HackEso: https://hack.esolangs.org/tmp/just kspalaiologos: whats this fizzie: It just greps all the 'is just' / 'are just' factoids and give you the link. fizzie: `cbt just HackEso: grwp '\(is\|are\) just' | sed -e 's/:/ ::= /;s/$/\n/' > $HACKENV/tmp/just && url $HACKENV/tmp/just bfbot: grwp '(is|are) just' | sed -e 's/:/ :No such command. Try =help. fizzie: `? locale HackEso: Locales are just frames, which are just complete Heyting algebras. Taneb accidentally invented them by asking about lattices. The only locale available in #esoteric is en_NZ.UTF-8. fizzie: The part about en_NZ.UTF-8 is not strictly speaking true any more. kspalaiologos: what the heck kspalaiologos: `cbt jusrt HackEso: cat: /hackenv/bin/jusrt: No such file or directory kspalaiologos: `cbt just HackEso: grwp '\(is\|are\) just' | sed -e 's/:/ ::= /;s/$/\n/' > $HACKENV/tmp/just && url $HACKENV/tmp/just bfbot: grwp '(is|are) just' | sed -e 's/:/ :No such command. Try =help. kspalaiologos: how did that happen kspalaiologos: `echo xyz fizzie: `locale -a bfbot: No such command. Try =help. HackEso: C \ C.UTF-8 \ en_GB.utf8 \ en_NZ.utf8 \ en_US.utf8 \ POSIX kspalaiologos: umm what? kspalaiologos: =list ::=echo xd bfbot: :=list xd kspalaiologos: =echo dx ::=echo xd bfbot: :=echo dx xd kspalaiologos: what the heck int-e: arseniiv: hmm, more like Baba was you. moony: `which revert HackEso: No output. int-e: `help revert HackEso: ​`revert " can be used to revert to a revision. See . It is a builtin command so cannot be called from other commands. int-e: <3 "the physical world, whose significance pales in comparison to the Platonic world of mathematical objects" arseniiv: int-e: I’m not done with that game yet :P int-e: But the hype is over. :P arseniiv: today I figured out the level with ghosts and skulls int-e: Also, I've already forgotten everything. arseniiv: int-e: the hype is transient, why should we take it into account?.. int-e: I certainly don't recall individual levels :) int-e: arseniiv: because Time is Move. arseniiv: int-e: good, then you can play it once again! int-e: Nah, too many other things to play. arseniiv: like Noita? ;) int-e: Currently, Broken Sword 2. arseniiv: okay I’ll play BiY one level a week and will tease you each time about inconsequential things :P int-e: I'm not into roguelikes at all. int-e: arseniiv: You can do the latter without doing the former. int-e: fungot: Are you of any consequence? fungot: int-e: with my computer, brb later arseniiv: I think I’m too, I tried Nethack and, well, I tried it and not much more afterwards b_jonas: arseniiv: ghosts and skulls? you have to kill Phantoon and they disappear. int-e: Uhm, did I just mix up Broken Sword and Gabriel Knight... they're not even remotely the same beyond being click&point adventures in a modern time fantasy setting. arseniiv: b_jonas: which one this is from? :) int-e: Anyway... it's just what I'm currently playing (GK2), not a recommendation (there are better click&point adventures around). b_jonas: arseniiv: SNES Super Metroid arseniiv: arseniiv: heard about that but not played ever arseniiv: more accurately, heard “Metroid” somewhere and that’s all b_jonas: arseniiv: it's a very good game b_jonas: best of the Metroid series arseniiv: b_jonas: mm maybe I’ll give it a look in an emulator! imode: metroid prime is also a great member of the series. imode: still my favorite. imode: constructing an infix or a postfix parser using processes might be an interesting task. bfbot: ad..x. imode: I'm looking for a turing complete two-instruction-set computer that isn't a turning tarpit and doesn't operate on RAM. b_jonas: imode: I think that's impossible. Non-tarpit implies that it offers you a nice variety of useful instructions, so you need at least six different instructions. imode: turning tarpit, not turing tarpit. imode: totally okay with a turing tarpit, that's kind of the point. b_jonas: I don't know what a turning tarpit is then imode: https://esolangs.org/wiki/Turning_tarpit imode: you have a wheel of instructions, and your commands are "move to next instruction on the wheel" or "execute the currently selected instruction on the wheel". imode: or some variant thereof. b_jonas: imode: in that case, combinator calculus with SK base, aka unlambda with only the s and k builtins b_jonas: or lambda calculus, where the two instructions are lambda and function call b_jonas: imode: or a Turing-machine with one tape and two tape symbols, where the two instructions are (0) move left, (1) flip the symbol under the head then move right imode: how is that TC? b_jonas: there's a brainfuck variant like that, iirc invented by the bbc norvegian village, but a turing machine works better imode: I wanna see that BF variant. b_jonas: imode: if you want to keep the symbol unchanged and move right, you can move right then left then right again b_jonas: imode: and if you want to flip the symbol and move left, you can move right, then move left twice b_jonas: so you can translate to this from an ordinary one tape two symbol turing machine b_jonas: by replacing some of the instructions by a sequence of two or three instructions imode: yeah, I get that. I was thinking you had a minimal TM that you could chain together to form something that could simulate another TM or something. imode: what's that BF variant you mentioned, out of curiosity? b_jonas: dunno, look at https://esolangs.org/wiki/BF_instruction_minimalization or something. or maybe P'' already does this b_jonas: I think this combination was discovered independently by multiple people imode: two instructions? b_jonas: no, for brainfuck it's more instructions because you count the control flow instructions [ and ] too b_jonas: so that would be four b_jonas: but for a TM, you could the control flow as not instructions imode: mm, true. b_jonas: yeah, P'' already has such a combined move and write b_jonas: https://esolangs.org/wiki/P%27%27 b_jonas: then it was not invented by the bbc imode: the reason I imode: I'm asking is because my language is TC with only 4 instructions. imode: but I'm wondering if I can reduce that into two somehow.. don't see a possible way. kmc: what are the instructions? imode: [ is "dequeue a symbol. if it's a 0, jump to matching ]. otherwise, go to next instruction." j-bot: imode: |open quote j-bot: imode: | is "dequeue a symbol. if it's a 0, jump to matching ]. otherwise, go to next instruction." j-bot: imode: | ^ imode: sorry. imode: ] is "jump to matching [". 0 and 1 enqueue a 0 and a 1 respectively. so there's no movement instructions. kmc: lol j-bot ais523: I'm looking for a turing complete two-instruction-set computer that isn't a turning tarpit and doesn't operate on RAM. ← minimized https://esolangs.org/wiki/Brainpocalypse imode: thanks! ais523: it uses a finite circular tape of bignums, and two commands: - decrements the current tape element or restarts the program if it's 0; } moves to the next tape element then increments it b_jonas: imode: you can also have a pointer machine with just two instructions. take a fixed number of registers, say 32 of them, one of them is initialized to the empty list at the start of the program. one instruction takes three register operands creates a new cons cell from two of them and puts it into the third. another instruction unconses a register, has three register operands and a jump target, if the b_jonas: input operand is an empty list it jumps to the target, otherwise it puts the car and crd of that input to the two output registers. ais523: (by "restarts the program" I mean "goto the first instruction", you don't reset memory or the tape pointer) b_jonas: Karn disagrees with that ais523: b_jonas: I assumed the instructions couldn't take arguments ais523: otherwise it's trivial, e.g. https://esolangs.org/wiki/Tip does it with only one instruction ais523: b_jonas: this reminds me: I will be unemployed for 1 day on Sunday; do you have any specific requests for changes to ayacc while I have the chance to work on it? b_jonas: ais523: release it with the license to distribute it clarified b_jonas: I'd prefer a license that allows anyone to distribute modified versions zzo38: Move left or flip and move right is P'', I think. b_jonas: zzo38: yes b_jonas: I eventually figured it out b_jonas: took me too much time ais523: b_jonas: it's GPLv3, and has been for ages ais523: are you confusing it with something else? b_jonas: ais523: in that case I don't have any request about ayacc zzo38: What are differences ayacc with yacc? b_jonas: indeed, it has a header command saying GPLv3 now b_jonas: zzo38: the output it writes is a more readable C program than the one that traditional table-based programs provide; it has a somewhat saner alternate api for how it integrates to a C program; b_jonas: it allows for multiple backends so it can output programs in a language other than C or with a different api (eg. stackless), you can add your own; b_jonas: it provides better error messages in case of a shift-reduce or reduce-reduce conflict in the language b_jonas: (sometimes at least, it depends on the language) b_jonas: and... there was something more but I forgot b_jonas: zzo38: see its documentation for details b_jonas: `? ayacc HackEso: ayacc is ais523's yacc parser generator implementation, get it from darcs clone http://nethack4.org/projects/ayacc b_jonas: ais523: so do you want to tell us what new job you're going to get? zzo38: OK I will look zzo38: I don't have darcs, is there another way? b_jonas: I don't know b_jonas: (other than installing darcs, obviously) b_jonas: I have the common free software version control clients installed on my machine because people sometimes distribute files through version control repositories. So I have cvs, svn, git, bzr, hg, darcs, fossil. b_jonas: fizzie, ais523: do you mind when I add to the wiki articles about programming languages that are unusual and interesting and definitely not notable for Wikipedia, but technically not esoteric because the author used them for something constructive? https://esolangs.org/wiki/SIMPLE_(preprocessor) is such an article for example. b_jonas: https://esolangs.org/wiki/MIX is even worse of course, for it's definitely not esoteric and it's notable enough for Wikipedia b_jonas: argh, wrong link b_jonas: https://esolangs.org/wiki/MIX_(Knuth) moony: ^^^ Same question from me ais523: a language intentionally named after a lesser-known programming language almost certainly counts ais523: that's some sort of "intention" to make a language esoteric ais523: in general, though, this is an apparently major debate that I've always been wary of wading into b_jonas: yeah, I wouldn't be surprised if you didn't want to give an answer to this, because other people may consider it an official position b_jonas: and just keep the policy that such articles shouldn't be there but fail to enforce it when the language and article is interesting enough b_jonas: I was also considering http://www.vttoth.com/CMS/index.php/projects/49 but I decided it wasn't esoteric enough APic: What is the Definition of „esoteric“? b_jonas: `? esoteric HackEso: This channel is about programming -- for the other kind of esoterica, try #esoteric on EFnet or DALnet. b_jonas: `?? esoteric HackEso: I must confess, I know not of what you are speaking. b_jonas: `?? esolang HackEso: Esoteric languages. Usually refers to programming languages designed to be unique, difficult to program in, or just plain weird. See https://esolangs.org for more. b_jonas: no, not that either b_jonas: https://esolangs.org/wiki/Esoteric_programming_language APic: It would rock if the Definition of „esoteric“ was esoteric. b_jonas: that isn't a good description either b_jonas: anyway, it's esoteric if it's designed without the intention that anyone will use it for any productive purpose zzo38: Yes, although MIX (Knuth) may still be notable enough for esolang wiki as well as Wikipedia, so is MMIX. I think if it is unusual and interesting in some ways and is not the stuff which is the commonly using programming language, it might be put in, either an article by itself or a short note on a user page. (Actually even VAX can have many mentions on a user page; see [[User:Ian/Computer_architectures]]; there is interest to have some details of i ais523: fwiw, one of the reasons I haven't taken a strong stand on which languages are esoteric is that I have trouble defining it myself ais523: it's quite easy to intentionally create languages close to the boundary line, and then do so again if people move it fizzie: My position can't be construed as official because I have pretty little to do with the wiki content, but I don't mind a relatively relaxed definition of esolang. kmc: i know it when i see it b_jonas: oh, that reminds me, this one is definitely esoteric so I'll add a TODO kmc: there are accidental esoteric languages of course zzo38: Yes, intentionally creating languages close to the boundary line can be done. kmc: like C++ templates or ROP gadget sets or other weird machines ais523: I think there are some esolangs with intent for people to use them like normal languages (e.g. Funge-98), and some languages that are probably esoteric but are useful in practice (e.g. Retina) kmc: exploit programming is pretty similar to esoprogramming zzo38: I think "I know it when I see it" is not a good policy for administrations. ais523: there have been cases where I've wanted to write programs and an esolang (or wimpmode version of it) has been the best choice to write them in b_jonas: ais523: yeah, Mouse was also definitely intended to be useful kmc: but is removing things from the wiki particularly important? zzo38: Byt, yes, there is stuff like ROP, exploit programming, C++ templates, and other stuff like that. fizzie: fungot: Are you proving Funge-98 a non-esoteric language by being useful? fungot: fizzie: did i have emacs which is basically... l(x) 1 x*l(x) fnord x) b_jonas: ais523: can you give an example for that? ais523: kmc: I think exploit programming is an example of a "found language", those tend to be similar to esolangs but with the difference that they aren't being actively designed by a human fizzie: I don't think that's Emacs. kmc: ais523: yeah kmc: what I called 'accidental esoteric languages' above kmc: C++ templates are somewhere in the middle b_jonas: fizzie: no no kmc: TMP was first discovered and then augmented b_jonas: fizzie: just because it's useful doesn't make it non-esoteric, as long as it was originally not intended as useful ais523: b_jonas: the test driver for the CGCC polyglot is partially written in A Pear Tree (which was more convenient than Perl because I needed the repr builtin) kmc: I put Qoppa on the wiki. I designed it to demonstrate an interesting concept, and as a sort of tarpit version of scheme, and because it tickles my happy place zzo38: I think stuff should not be removed from the wiki unless it is a waste of disk space or if it is clearly just "lakjselk jaslg" and not any proper writing that is meaningful in any possible kind of way. kmc: it wasn't particularly designed to be difficult to program in ais523: and I wrote the original Forte interpreter in a wimpmode version of Thutu, because it seemed like the easiest language to use kmc: but it has an evaluation model very different from almost all extant languages fizzie: Funge-98 has the smell of being designed to be basically "Befunge, but useful". zzo38: (well, maybe there are a few other possibilities, too) kmc: zzo38: the spam pages should be made into real languages ais523: likewise, there's at least one language that I implemented in Jelly, although competition languages are a little different from esolangs moony: my opinion is this: Languages everyone uses, like Rust, C++, Java, etc, and are explictly designed for everyone to use, do not belong on esolangs kmc: like RFNHS3SDD zzo38: kmc: Yes, if you are able to do so. b_jonas: ais523: yeah, and I suspect that blsq was used usefully as well ais523: (in that they're designed for accomplashing a specific purpose, but are optimized for very different goals than normal languages are) ais523: *accomplishing zzo38: moony: I think that is (mostly) reasonable. moony: zzo38: note i make an exception for languages intended for everyone to use, but not ment to be used in this universe moony: because why not b_jonas: ais523: competition languages like the ones for ICFP? ais523: b_jonas: no, languages designed for winning competitions moony: like Jelly is ment for winning codegolf competitions ais523: mostly golfing languages, although in theory they aren't the only examples of the genre zzo38: moony: OK, although I do not quite understand how that is. APic: „Every Input is a Program“ ais523: the ideal competition language has a huge number of builtins and a lot of ability to cope with incompletely specified programs kmc: the ICFP langs are very interesting too kmc: I think they would count as eso- ais523: if you're trying to come up with a working program as quickly as possible, for example, you want to be able to just translate the problem you're given into a working version of it moony: zzo38: i.e. languages ment to be used in fictional universes, like a programming language that was made for use in a sci-fi book zzo38: moony: O, OK. b_jonas: ais523: how about when someone asks a homework programming question on a forum, and I write an obfuscated program as a solution with the hope that they'll submit it for the homework, and that program involves an interpreter of a new domain-specific language? is that language esoteric then? moony: b_jonas: is anyone else going to use the DSL? No? Then I think it counts for esolangs. ais523: b_jonas: I'm not sure whether domain-specific languages are automatically esoteric b_jonas: ais523: it's not the domain-specific part that's relevant here b_jonas: it could be a general purpose but small language zzo38: I think sometimes you will not know for now if anyone else is going to use the DSL ais523: I think being a DSL is relevant here b_jonas: possibly a write-only one that requires an assembler to use ais523: because those are a language category of their own moony: DSLs are icky territory ais523: is C-INTERCAL's internal DSL OIL an esolang, for example? b_jonas: and I don't publish the assembler moony: because they can easily fall under my rules ais523: something like https://esolangs.org/wiki/Help,_WarDoq! is definitely both a DSL and an esolang, just because the domain in question is so ridiculous b_jonas: oh, you can certainly have a domain-specific esolang in general b_jonas: the ICFP ant brain is one such language, ais523: the issue is, I can imagine a language that's very similar to Help, WarDoq but invented for a much more practical purpose kmc: I thought of making a esolang that's a DSP DSL ais523: for example, there's a very simple programming language used as an on-the-wire format for telling electronic traffic signs what sign they should be showing kmc: some strange eso way of defining signal processing pipelines kmc: for audio and RF applications ais523: which is basically the same thing kmc: i thought of it being sort of concatenative ais523: but I'm not sure that's even definable as a language, let alone an esolang kmc: so you'd have a stack of things which are signals or matrices or filters or whatever zzo38: kmc: Yes lets see please kmc: and you can apply them ais523: idea: something that is definitely esoteric but only questionably a programming language ais523: (esoteric in the programming sense, that is) kmc: but instead of a normal step by step execution model it compiles into a streaming, possibly real-time process zzo38: I think once I did make a stack-based programming language for defining .XI instruments b_jonas: ais523: there are a lot of esoteric/obfuscated programs that are clearly not languages ais523: the only DSP I've ever used was entirely imperative ais523: b_jonas: oh right, one-off programs ais523: like the 99 bottles of beer program in Malbolge kmc: primitive types would be complex numbers, matrices, and timeseries data ais523: how do you make something like that /ambiguously/ a language, though? zzo38: (The data types are numbers, strings, audio samples (with an optional loop point), and functions (which can be built from other functions, too).) kmc: an example program would be something like a FM broadcast radio decoder kmc: it's easy to get I/Q samples from a RTL-SDR kmc: and dump PCM data to a sound card kmc: so the hardware aspect would be relatively accessible ais523: fwiw, it would be nice to document more found languages on the wiki b_jonas: ais523: how about a one-off program that has an interpreter in it for compression, but the interpreter is very specialized (DSL) that it's unclear if it's even an interpreter or just a nice table or compression format? zzo38: Yes, I would like to see how to do with that radio decoding and that stuff ais523: things like the x86 (or was it x86_64) MMU, which is a bounded-storage machine ais523: b_jonas: hmm, now you're reminding me of quines zzo38: b_jonas: If it is Turing-complete (even if not intended to be) then it might be notable. b_jonas: oh yeah b_jonas: ais523: how about OTTD signals? ais523: a quine is a description of itself, but because it can't be a literal quote of itself (assuming it isn't a literal-only quine) it needs to define some shorthand for describing itself ais523: b_jonas: OTTD? b_jonas: open transport tycoon deluxe, the game with railway tracks b_jonas: the signals (traffic signals to direct trains on railways) became quite capable and can evaluate boolean expressions kingoffrance: quine sounds like munchausen number b_jonas: http://wiki.openttd.org/Main_Page ais523: oh, that normally gets abbreviated to OpenTTD ais523: I just didn't recognise the abbreviation you were using b_jonas: then there's the unpack template language in perl, which happens to be way more powerful thank it should be https://www.perlmonks.com/?node_id=1008395 b_jonas: not turing-complete alone, but quite powerful ais523: let me guess, you overwrite the format string while it's being decoded using some sort of pointer unpack? b_jonas: I don't think unpack can do that easily, it can only read from pointers, not write to it ais523: although that might /actually/ be TC ais523: (printf is TC for this reason) b_jonas: yeah, C printf ais523: although the arguments you have to give it are insanely undefined behaviour fizzie: Something I learned the other day: the 'l' and 'll' length modifiers are also applicable to %n, to convert the required argument from `int *` to `long *` or `long long *` respectively. fizzie: Someone over on ##c was complaining because their implementation's printf was unable to write more than INT_MAX characters of output. ais523: that could in theory be a problem that comes up in a sane program kmc: did you know that the XC8 compiler for PIC supports a "short long int" type? fizzie: glibc stops processing the format string and returns -1 with errno set to EOVERFLOW when the output exceeds INT_MAX. imode: kmc: wtf is short long? b_jonas: fun, https://codegolf.stackexchange.com/a/112163 is still the only perl answer to the game of life interpreter question, even though it wouldn't be hard to write a more straightforward golfier implementation kmc: imode: it's shorter than a long but longer than a short. ais523: files bigger than 2GB aren't ridiculous, and using a printf("…%s…") to output them wrapped in a header and footer is mildly ridiculous but not indefensible kmc: 24 bits imode: kmc: that is awesome. fizzie: I think I remember a "short long" from somewhere. kmc: and actually useful on embedded fizzie: ais523: Yeah, the program in question was unreasonable, though. kmc: I wonder if avr-gcc has anything comparable ais523: I'd expect long short to be shorter than int, and short long to be longer b_jonas: ais523: yes, but these days, every C compiller has a long long type that's at least 64 bit long, and intmax_t must be at least that long ais523: fwiw, Algol 68 lets you write arbitrarily many long or short, but not to mix them kmc: seems it does have it, as __uint24 ais523: (there's the equivalent of a preprocessor definition you can consult to discover how many repeats will actually do something useful) ais523: but any algol 68 impl should support long long long long long, even if it's just equivalent to long long b_jonas: ais523: the old borland C compiler that targets 16-bit x86_32 lets you write any number of long, and interprets it as just long. it's a nice way to get programs silently break if they try to use long long. kmc: `` echo 'long long long x;' | gcc -c -x c /dev/stdin HackEso: ​/dev/stdin:1:11: error: ‘long long long’ is too long for GCC b_jonas: and it implies that choosing "long long" as the name of that type was a bad idea, but it's too late to undo that now ais523: `` echo 'long short x;' | gcc -c -x c /dev/stdin HackEso: ​/dev/stdin:1:6: error: both ‘long’ and ‘short’ in declaration specifiers ais523: `` echo 'short short x;' | gcc -c -x c /dev/stdin HackEso: ​/dev/stdin:1:7: error: duplicate ‘short’ ais523: hmm, IMO the error messages should have had consistent levels of humour kmc: `` gcc -c -x c <(echo 'long long long x;') # seems like a nicer way actually HackEso: ​/dev/fd/63:1:11: error: ‘long long long’ is too long for GCC ais523: `! c long long long x; HackEso: Does not compile. kmc: I keep forgetting about <(...). it's pretty great fizzie: `cc long long long x; HackEso: ​:1:11: error: ‘long long long’ is too long for GCC \ compilation terminated due to -Wfatal-errors. fizzie: `cbt cc HackEso: ​#!/bin/sh \ echo "$@" | sed 's/\\/\n/g' | gcc -w -Wfatal-errors -std=c11 -O2 -x c - -o /tmp/a.out && /tmp/a.out b_jonas: ``` gcc -Wall -O -o /hackenv/tmp/a.out -x c <<<$'int main(void) { signed unsigned x = {0}; return 0; }' HackEso: gcc: warning: '-x c' after last input file has no effect \ gcc: fatal error: no input files \ compilation terminated. b_jonas: ``` gcc -Wall -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { signed unsigned x = {0}; return 0; }' HackEso: ​: In function 'main': \ :1:25: error: both 'signed' and 'unsigned' in declaration specifiers \ :1:34: warning: unused variable 'x' [-Wunused-variable] ais523: `` gcc -c -x c <<<'long long long x;' HackEso: gcc: warning: ‘-x c’ after last input file has no effect \ gcc: fatal error: no input files \ compilation terminated. kmc: what's <<<$ b_jonas: how did gcc's color output disappear by the way? ais523: `` gcc -c -x c /dev/stdin <<<'long long long x;' b_jonas: ``` type -a gcc HackEso: ​/dev/stdin:1:11: error: ‘long long long’ is too long for GCC \ long long long x; \ ^~~~ HackEso: gcc is /usr/bin/gcc ais523: kmc: <<< pipes a literal into standard input b_jonas: ``` gcc -Wall -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { short char x = {0}; long char y = {0}; return 0; }' HackEso: ​: In function 'main': \ :1:24: error: both 'short' and 'char' in declaration specifiers \ :1:43: error: both 'long' and 'char' in declaration specifiers \ :1:48: warning: unused variable 'y' [-Wunused-variable] \ :1:29: warning: unused variable 'x' [-Wunused-variable] b_jonas: ``` gcc -Wall -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { short float [[unused]] x = {0}; return 0; }' HackEso: ​: In function 'main': \ :1:24: error: both 'short' and 'float' in declaration specifiers \ :1:30: error: expected identifier or '(' before '[' token b_jonas: ``` gcc -Wall -std=c11 -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { short float [[unused]] x = {0}; return 0; }' HackEso: ​: In function 'main': \ :1:24: error: both 'short' and 'float' in declaration specifiers \ :1:30: error: expected identifier or '(' before '[' token ais523: I think $'' is some sort of escaped string kmc: `` gcc -c -x c <(echo 'short void x;;') b_jonas: what? why doesn't it allow an attribute there? HackEso: ​/dev/fd/63:1:7: error: both ‘short’ and ‘void’ in declaration specifiers b_jonas: ais523: yes, allows backslash escapes. useful because C needs newlines sometimes. kmc: b_jonas: does C11 support that attribute syntax? b_jonas: kmc: I think so ais523: I think it's a C++ism b_jonas: let me check fizzie: No, [[unused]] is C18. ais523: there's a C18? fizzie: Yes, there's a C18. b_jonas: ``` gcc -Wall -std=c18 -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { short float [[unused]] x = {0}; return 0; }' HackEso: ​: In function 'main': \ :1:24: error: both 'short' and 'float' in declaration specifiers \ :1:30: error: expected identifier or '(' before '[' token fizzie: Was it even C18, or was it just in the latest C2x draft? ais523: is this a major release like C11 was? or is it more of a C92 (or was it C94?) type of thing? b_jonas: ``` gcc -Wall -std=c18 -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { [[unused]] short float x = {0}; return 0; }' HackEso: ​: In function 'main': \ :1:18: error: expected expression before '[' token \ :1:20: error: 'unused' undeclared (first use in this function) \ :1:20: note: each undeclared identifier is reported only once for each function it appears in b_jonas: ``` gcc -Wall -std=c18 -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { short float x [[unused]] = {0}; return 0; }' HackEso: ​: In function 'main': \ :1:24: error: both 'short' and 'float' in declaration specifiers \ :1:33: error: expected expression before '[' token \ :1:34: error: 'unused' undeclared (first use in this function) \ :1:34: note: each undeclared identifier is reported only once for each function it appears in \ :1:30: warning: unused variable 'x' [-Wunused-variable] b_jonas: ``` gcc -Wall -std=c18 -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { volatile short float x = {0}; return 0; }' HackEso: ​: In function 'main': \ :1:33: error: both 'short' and 'float' in declaration specifiers \ :1:39: warning: unused variable 'x' [-Wunused-variable] b_jonas: fizzie: seriously, how did the colors of gcc output disappear? fizzie: ais523: It's more of a bugfix-only release with no new features. fizzie: `` gcc -fdiagnostics-color=always -x c <<<'int eger = x;' HackEso: ​gcc: warning: ‘-x c’ after last input file has no effect \ gcc: fatal error: no input files \ compilation terminated. ais523: C18 addressed defects in C11 without introducing new language features. ais523: OK, that would explain why there's no big fanfare about it ais523: bugfix releases are good too, though b_jonas: fizzie: yes, but how come it doesn't do that by default now? fizzie: b_jonas: It's probably because I made stderr piped into the same cat as stdout. b_jonas: that's great b_jonas: thanks fizzie: I assume previously it used isatty on 2. fizzie: Or, well, still does, but with a different result. fizzie: `` strace -e trace=ioctl gcc -x c <<<'int eger = x;' HackEso: ioctl(2, TCGETS, 0x7fbff589e0) = -1 ENOTTY (Inappropriate ioctl for device) \ ioctl(2, TCGETS, 0x7fbff58a00) = -1 ENOTTY (Inappropriate ioctl for device) \ gcc: warning: ‘-x c’ after last input file has no effect \ gcc: fatal error: no input files \ compilation terminated. \ +++ exited with 1 +++ ais523: I was idly wondering how isatty worked, then noticed fstat in the see also on the man page, so I was guessing it statted the file descriptor and looked at the device numbers fizzie: It does a tcgetattr() != -1. ais523: `` strace -e trace=fstat gcc -x c HackEso: fstat(3, {st_mode=S_IFREG|0644, st_size=1579448, ...}) = 0 \ fstat(3, {st_mode=S_IFREG|0755, st_size=1824496, ...}) = 0 \ fstat(3, {st_mode=S_IFREG|0644, st_size=3040656, ...}) = 0 \ gcc: warning: ‘-x c’ after last input file has no effect \ gcc: fatal error: no input files \ compilation terminated. \ +++ exited with 1 +++ fizzie: (And tcgetattr devolves to ioctl.) ais523: that seems broken, mightn't some other device use the same ioctl number? b_jonas: ais523: there are several ioctls that work only on terminals, and yes, the one that implements tcgetattr is among them b_jonas: ais523: that won't happen on Linux fizzie: I only know how it works because I was trying to figure out if there was a way to fake it that wouldn't involve running a cat process. ais523: The second argument is a device-dependent request code. b_jonas: and glibc can rely on linux-internal stuff like that b_jonas: ais523: glibc. this doesn't need to be portable to all systems. b_jonas: if it works on linux and hurd it's enough b_jonas: glibc depends on a lot of linux-specific stuff b_jonas: has to really ais523: does Linux have an actual rule of "no sharing ioctl numbers between different types of devices"? b_jonas: and I think some of the small numbers are shared ais523: I guess patches would probably be rejected if you tried to use a widely used ioctl number like that for something else b_jonas: but it doesn't share numbers in any newly introduced ioctls b_jonas: all the sharing are for historical reasons ais523: IIRC ioctl numbers are namespaced to some extent b_jonas: the namespace tells the size of the struct that its argument points to, and whether it's used for input or output b_jonas: but this too is true only for new ioctl numbers, old ones remain for historical reasons fizzie: Documentation/ioctl/ioctl-number.txt has a the range assignments. b_jonas: http://man7.org/linux/man-pages/man2/ioctl_list.2.html has some docs fizzie: A lot of "conflict!"s. ais523: right, TCGETS is 0x5401, and 0x54 == 'T' fizzie: Anyway, might as well ask y'all -- let's suppose I have a tty device, and I want the things a program writes get written there, but if the program does isatty(1) I want it to return 0. Is there a more elegant way than redirecting the program's output to a fifo, and having another process copy all the data from the fifo to the device? b_jonas: fizzie: that sounds esoteric. why would you want that? if you just want programs not to write color codes, try TERM=dumb b_jonas: (some programs will still write carriage returns then) ais523: there's seccomp_filter but that's likely less elegant rather than more elegant b_jonas: (and some programs will write color codes anyway) fizzie: It's not for me, it's for HackEso. ais523: HackEso having TERM=dumb would make sense though shachaf: Did you figure out what was going on with the bizarreness a while ago? ais523: alternatively, HackEso translating ASCII color codes to IRC color codes would also make sense fizzie: The idea is, what /dev/tty1 is *actually* connected is a pipe outside the UML kernel, and shouldn't be treated as a TTY. Cf. that gcc color output, for example. b_jonas: ais523: using a custom terminfo that has IRC color and format codes would be even better for esoteric value ais523: shachaf: the ::=echo weirdness? bfbot: :shachaf: the weirdness? shachaf: The HackEso output being truncated thing. fizzie: ais523: Having TERM=dumb would make sense, though I think most programs do the TTY check. fizzie: shachaf: Yes, I think I did, but I can't remember. At least it got fixed. b_jonas: TODO self: make such a terminfo; make a better ! c and ! c++ wrapper; make an addwhatis command zzo38: Some programs support a NO_COLOR environment variable to disable colours. ais523: fizzie: right, but many programs also use terminfo and friends to work out how to display colors ais523: so if they conclude that stdout is a terminal but doesn't support color, they'll do the right thing b_jonas: fizzie: programs do those two checks for different reasons fizzie: ais523: Well, for the color part. fizzie: But I think there's more behavioral changes they can do when it's not a terminal. ais523: it's unclear whether we want the terminal or non-terminal output, though ais523: HackEso is effectively a terminal wrt the way it's used b_jonas: um :=echo hi bfbot: :um hi ais523: we want the output programs produce when used interactively, not the batch-process output b_jonas: what the fizzie: ais523: Well... not if it's a progress bar or a spinner. b_jonas: is bfbot parsing IRC messages wrong? b_jonas: foo :=echo bar :qux bfbot: :foo :=echo bar bar :qux b_jonas: I suspect it's parsing IRC messages wrong b_jonas: like searches for " :=" in it bfbot: like searches for " :No such command. Try =help. b_jonas: foo:=echo bar ais523: fizzie: well, the only reason that's bad is that the cursor movement (even \r or \b) doesn't work correctly b_jonas: that's even worse ais523: there's probably half a command in bfbot's output that got eaten by the ircd ais523: hmm, I bet the ircd added the colon anyway ais523: (the second =echo was sent without the colon) b_jonas: sure, ircd fixes the messages so that clients are easy to write b_jonas: there's always a colon ais523: it's technically only needed to escape multi-character arguments, though ais523: but always adding it is probably easier for consistency ais523: *multi-word b_jonas: technically yes, but the ircd wants to accept more and produce less to make clients easy to write fizzie: ais523: I just think it's not trivial to make it look enough "like a terminal", esp. when programs start to use more than one line of output, or ask about terminal width/height to draw a dialog in the middle of the screen. ais523: well, take a program like apt b_jonas: it also changes MODE and KICK commands so that MODE commands set at most four modes and KICK kick at most one nick when it outputs them, even though it accepts more on input b_jonas: and more things like that ais523: it complains whenever its output isn't a terminal b_jonas: I think it canonicalizes the capitalization of channel anmes ais523: because it's not intended to have stable output b_jonas: so that clients don't have to casefold channel names to find which channel they're receiving something in fizzie: Yes, I don't really like that complaint. ais523: but the use via HackEso is interactive fizzie: (I use "apt search ... | grep ..." semi-often.) b_jonas: fizzie: in that case we'll pass the right command-line argument to programs so that they don't do those things b_jonas: fizzie: eg. we'll use git status -bs because the output of git status would be unreadable fizzie: Anyway, sure, there might some benefits to getting the terminal-style output. But I remain unconvinced it would be an overall improvement. b_jonas: fizzie: I suspect that no terminal is probably better, b_jonas: but terminal might be more suitable for HackEso's esotericness b_jonas: programs can output human-readable things even when the output isn't a terminal, eg. you're running them in a cronjob b_jonas: when it's a terminal, they may expect interactive use of the program, though they usually check isatty(0) for that, not isatty(1) or isatty(2) b_jonas: but sometimes they expect interactivity even if only isatty(2) b_jonas: I think no terminal is probably better since you terminate the program after each command b_jonas: we can't just continue to give it more input like we can in termbot b_jonas: obviously we can override either way in individual commands, with |cat or with script resp fizzie: shachaf: As far as I can tell, I didn't quite figure out all the details in the truncation thing, but sufficiently to determine that it was linked with using a 'fd:N' where N is a /dev/null file descriptor instead of the special 'null' channel in the UML console specification. fizzie: b_jonas: Incidentally, I toyed around using a 512-byte block device as the stdout file descriptor, too. b_jonas: hmm wait b_jonas: @run "hello =echo world" fizzie: It'd have the benefit (of sorts) that writes that the user would never see anyway (because of IRC length limits) would fail with ENOSPC, naturally terminating the program. Well, some programs, anyway. lambdabot: "hello =echo world" b_jonas: @run "hello :"++"=echo world" lambdabot: "hello :=echo world" bfbot: : "hello world" fizzie: One reason why I didn't explore that more was because it'd be super hackbot-specific, and umlbox is to some degree a general tool. b_jonas: ^ul (=echo world)(hello :)SS fungot: hello :=echo world bfbot: :hello world b_jonas: =echo ^help b_jonas: =echo @help b_jonas: =echo `help HackEso: Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch [] " downloads files. Files saved to $HACKENV are persistent, and $HACKENV/bin is in $PATH. $HACKENV is a mercurial repository, "`revert " can be used to revert, https://hack.esolangs.org/repo/ to browse. $PWD ($HACKENV/tmp) is persistent but unversioned, /tmp is ephemeral. fizzie: Ut-oh. b_jonas: =echo `echo :=echo hi bfbot: :=echo `echo hi ais523: hmm, it just crossed my mind that with umlbox and WSL, Linux is now cross-platform software: it runs on both Linux and Windows fizzie: That's almost certainly loopable, and I don't have a natural way to make it not. b_jonas: ais523: Linux runs on several processor types fizzie: `echo :=echo check bfbot: :`echo check HackEso: ​:=echo check fizzie: Hm, maybe the : that seems to end up in all the "middle commands" saves it. ais523: bfbot: yes, but I mean it runs on multiple operating systems b_jonas: =str 1s++++[->++++<]>[->++>+++>++++>+++++>++++++>+++++++<<<<<<]> >>>>.++.++++.----.+++++++++++++.>++++.<---.+++..>----. b_jonas: =def 1prefixes bfbot: ok, defined 'prefixes' b_jonas: darn it b_jonas: I shouldn't have overwritten the prefixes macro b_jonas: `prefixes HackEso: Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ , bfbot =. b_jonas: =str 1s++++[->++++<]>[->++>+++>++++>+++++>++++++>+++++++<<<<<<]> >>++.>>+++++++++++++++.>++++.<<<<<.>>>>>----.++.<----------.+.+++.>++++++.<----.>-----.<<<<++++++++++.<.>>>>+.>++.<++++++++.-------.++++++++.>-.<<<<<.>>>++++++++++++++.<<<++++++++++++.------------.>>++++++.>>--------------.++.++++++++.<<---.>>>-.<++++. b_jonas: =str 1a<<<<.>>>>---------------.<<<<++++++++++++.------------.>>.>>+++++++.++++++++.<<---.>>.>+.<<<<<.+.+++++++++++.------------.>>>>---.-----------.++++++++++++.-----------.++.---.+.+++++++++++++.>.<<<<<.>>--.<<.>>>>.>--.<<<<<.>+++++.<++++++++++++.------------.>>>>>++.<-------.>+.-.+.<------.+++++++++++++.>-.<<<<<. b_jonas: =str 1a+++++++++++.+.------------.>>>>--.--------.>.<----.>-.<++++.>---.<++++.--------.<<<<.>>>>>++++++++++++++.<<<<<++++++++++++.------------.>>>>++++++++.-----.>------------.<+++++.>+.<<<<<+++++++++++++.>>>>-------.+++++++++++++.>+.<<<<<-------------.++++++++.--------.++++++++++++.------------.>>>>-----.-------.++ b_jonas: =str 1a++++++++++.-..<<<<.+++++++++.---------.++++++++++++.------------.>>>>----.<<<<+++++++++++++.>>>>--------.+++++++++++++.>.<<<<<-------------.>>>---.<<<.++++++++++++.------------.>>>>-------------.++++.----.+++++++++++++.>.<<<<<.>--.<++++++++++++++. b_jonas: =def 1prefixes bfbot: ok, defined 'prefixes' b_jonas: =prefixes bfbot: Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ , bfbot =. b_jonas: =str 1s++++[->++++<]>[->++>+++>++++>+++++>++++++>+++++++<<<<<<]> >>>>.++.++++.----.+++++++++++++.>++++.---.++++.<------.+++++.---------. fizzie: What does :=prefixes do then? bfbot: Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ , bfbot =. b_jonas: =def 1hackesoquine bfbot: ok, defined 'hackesoquine' b_jonas: =hackesoquine bfbot: `bfbotquine HackEso: bfbotquine? No such file or directory fizzie: (Just getting prepared.) b_jonas: =str 1s + b_jonas: =def 1hackesoquin bfbot: ok, defined 'hackesoquin' b_jonas: =hackesoquin imode: did it work. b_jonas: =str 1s ++++++++[->++++++++<]+. b_jonas: =def 1hackesoquin bfbot: ok, defined 'hackesoquin' b_jonas: =hackesoquin b_jonas: =str 1s ++++++++[->++++++++<]>+. b_jonas: =def 1hackesoquin bfbot: ok, defined 'hackesoquin' b_jonas: =hackesoquin b_jonas: =hackesoquine bfbot: `bfbotquine HackEso: bfbotquine? No such file or directory b_jonas: ``` set -e; f=/hackenv/bin/bfbotquine; rm -f "$f" ais523: ^ul ((=echo ^ul )SaS(:^)S):^ fungot: =echo ^ul ((=echo ^ul )SaS(:^)S):^ bfbot: ^ul ((=echo ^ul )SaS(:^)S):^ HackEso: No output. b_jonas: ``` set -e; f=/hackenv/bin/bfbotquine; rm -vf "$f" HackEso: No output. ais523: hmm, fungot is ignoring bfbot fungot: ais523: i just happens that matthew needs to bump the version when he's changing the core. but i guess it's kind of " industry standard" b_jonas: =def 1hackesoquin bfbot: ok, defined 'hackesoquin' fizzie: ais523: Yeah, manually. ais523: `! underload (test)S ais523: `! underload ((=echo `! underload )SaS(:^)S):^ HackEso: ​=echo `! underload ((=echo `! underload )SaS(:^)S):^ ais523: `! underload ((t:=echo `! underload )SaS(:^)S):^ bfbot: `! underload )SaS(:^)S):^ HackEso: t:=echo `! underload ((t:=echo `! underload )SaS(:^)S):^ bfbot: `! underload )SaS(:^)S):^ HackEso: Error: Unmatched ) HackEso: Error: Unmatched ) fizzie: But I assume a bfbot/HackEso loop just needs HackEso to output "whatever :=foo" on `bar, and bfbot output "`bar" on =foo. bfbot: But I assume a bfbot/HackEso loop just needs HackEso to output "whatever :No such command. Try =help. b_jonas: ``` set -e; f=/hackenv/bin/STOP; >$f echo $'#!/bin/sh\nrm -vf /hackenv/bin/bfbotquine'; chmod -c a+x "$f" HackEso: mode of '/hackenv/bin/STOP' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x) ais523: a:=echo 1 :=echo 2 bfbot: :a:=echo 1 2 b_jonas: ``` set -e; f=/hackenv/bin/bfbotquine; >$f echo $'#!/bin/sh\necho hello, world'; chmod -c a+x "$f" HackEso: mode of '/hackenv/bin/bfbotquine' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x) b_jonas: `bfbotquine HackEso: hello, world ais523: huh, if there are multiple :=s in a line, bfbot runs the /last/ HackEso: removed '/hackenv/bin/bfbotquine' b_jonas: `bfbotquine HackEso: bfbotquine? No such file or directory ais523: `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ HackEso: t:=echo `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ bfbot: `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ HackEso: t:=echo `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ bfbot: `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ HackEso: t:=echo `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ bfbot: `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ HackEso: t:=echo `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ b_jonas: guys, if this becomes a loop and I am not disconnected, please run this: =def 1hackesoquine b_jonas: guys, if this becomes a loop and I am not disconnected, please run this: `STOP ais523: +q best mode for breaking loops b_jonas: ``` set -e; f=/hackenv/bin/bfbotquine; >$f echo $'#!/bin/sh\necho ":=hackesoquine"'; chmod -c a+x "$f" bfbot: No such command. Try =help. HackEso: mode of '/hackenv/bin/bfbotquine' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x) ais523: (I guess +m would also work) b_jonas: =hackesoquine bfbot: `bfbotquine HackEso: ​:=hackesoquine bfbot: `bfbotquine HackEso: ​:=hackesoquine bfbot: `bfbotquine fizzie: ais523: I think you beat me by some milliseconds. HackEso: ​:=hackesoquine bfbot: `bfbotquine HackEso: ​:=hackesoquine bfbot: `bfbotquine HackEso: ​:=hackesoquine HackEso: removed '/hackenv/bin/bfbotquine' b_jonas: =def 1hackesoquine bfbot: ok, defined 'hackesoquine' b_jonas: =hackesoquine b_jonas: `bfbotquine HackEso: bfbotquine? No such file or directory ais523: fizzie: out of interest, what was your preferred loop-breaking method? b_jonas: ok good fizzie: ais523: I had /mode #esoteric +q bfbot!*@* waiting on the input line as well. int-e: Oh, HackEso does not ignore bfbot? fizzie: int-e: HackEso doesn't generally ignore known bots. b_jonas: kspalaiologos: can you please modify your bot? b_jonas: kspalaiologos: triggering on := anywhere in the irc line seems like a bad idea bfbot: kspalaiologos: triggering on :No such command. Try =help. ais523: right, I could have broken the loop earlier, but wanted to make sure it was a true loop first ais523: (isn't there some code in lambdabot that tends to stop loops after four iterations?) int-e: fizzie: Hmm. int-e: ais523: Not that I know of. But it should be ignoring bfbot. b_jonas: ais523: fungto has such a code fizzie: int-e: The "add a zero-width space in front of non-alphanumeric messages" feature stops most loops, it's just that bfbot's "parse a command in the middle of the output" defeats that. ais523: admittedly, the most surprising thing about that loop was that `! underload actually works fizzie: That said, there is an ignore list, currently ['Lymia', 'Lymee', 'Madoka-Kaname'] which is... just a little out of date. int-e: I don't even recall any Madoka-Kaname b_jonas: ais523: I know that a loop that involves some quining technique is cooler, but I deliberately used a user-defined command in both bots to make it easier to break the loop on either end fizzie: =echo `foo HackEso: Mmmmm... no. ais523: it's probably best to put bfbot on HackEgo's ignore list, BF isn't the most robust language to write loop-proof bots in ais523: bfbot: well, quines are pretty much trivial to write in Underload so it's my usual choice for botloops b_jonas: ais523: I don't think it's written in bf ais523: b_jonas: bfbot? b_jonas: really? ais523: just look at who wrote it b_jonas: I thought it's called bfbot because it interprets bf fizzie: I think they mentioned it being written in bash? Not sure I paid enough attention. ais523: oh, boring ais523: based on what it does, it definitely could be written in bf ais523: =def 1$(hostname) bfbot: Error: Name can contain only lowercase letters and digits. b_jonas: ais523: kspalaiologos wrote it because fungot's bf interpreter timed out too quickly. if he wrote it in bf, then he would have to use a bf interpreter in bf, which is rather slow, so that would mostly defeat the purpose fungot: b_jonas: the problem with object-orientation is that it's standard, you have ais523: b_jonas: oh, because BF doesn't self-compose well due to only having one tape fizzie: Bfbot is written in Seed :) fizzie: If that's our Seed, it's probably a joke. ais523: imode: it's a language which interprets the output of a random number generator as Befunge ais523: the program is just the random number generator seed ais523: but the RNG it's using is the Mersenne Twister which is not cryptosecure, so you basically just need a preimage algorithm b_jonas: kspalaiologos mentioned something about some program written by someone other than him in bash to blame for for why it swallows backslashes in the output fizzie: http://esolangs.org/logs/2019-11-22.html#lbe is where I got the bash from. b_jonas: maybe "Seed" is the name of more than one thing? ais523: thutubot used a bash wrapper to actually do the connection of the bot to IRC fizzie: Yes, more than one language might be involved. ais523: anyway, kspalaiologos almost certainly has a befunge → seed compiler fizzie: Whoops, forgot. fizzie: shachaf: Incidentally, I switched umlbox to use a protobuf for the configuration, because, you know, protos. ais523: and befunge-98 is a fairly efficient language to write a bf interpreter in (but befunge-93 would have issues producing an unbounded tape) b_jonas: ais523: I know of at least two bots that interpret the same language as the bot is written in: NotJack's ijx was a bot written in J that interprets J, and the buubot3 instance called perlbot is written in perl and interprets perl (plus a bit more) fizzie: Yes, in retrospect I probably should've just bumped up the cycle limit of the fungot ^bf interpreter. It's just I don't tend to edit fungot much. fungot: fizzie: i normally use define-macro...) value) ( ' red t) ( h h)) ais523: b_jonas: the problem with that is mostly sandboxing, isn't it? b_jonas: ais523: with which one? ais523: self-hosting languagebots fizzie: There's an entirely unsandboxed Funge-98 interpretation command in fungot. I've tried to use it for hot-patching once or twice. fungot: fizzie: no it is b_jonas: buubot3 uses just a couple of old unix tricks, like running under a different user and setrlimit to not allow to open any file and such things to make a sandbox that works decently but is very limiting fizzie: It's just much easier to hot-break than hot-fix things. ais523: fizzie: I'm not sure it's a /bot/ interpreter, though; presumably the Funge-98 output commands output to the hosting server's stdout rather than to the IRC channel b_jonas: I don't know what ijx used, but it probably involved the J interpreter's secure mode, which disables all the builtins that do IO or system access or foreign calls, except for 11!: which calls a custom callback of the program in which the interpreter is embedded to b_jonas: that's not a perfect sandbox because the J interpreter had a few bugs at that time that let you do memory corruption, but it was good enough fizzie: ais523: Yes, although of course you can write to the IRC socket as well. But it's true that it's not what you would expect if it was intended as an interpreter. b_jonas: ais523: anyway, buubot3 originally interpreted like seven different languages, and the part that interprets perl wasn't special at all, it was implemented almost the same as invoking the other interpreters b_jonas: the interpreter is always a separate process b_jonas: it's just that perlbot threw out all the other interpreters for some reason b_jonas: so it only runs perl fizzie: http://ix.io/239r is the total list of times I've used it on channel. ais523: hmm, a wasmbot would probably be pretty good at self-hosting fizzie: No idea if those actually did the right thing. b_jonas: the original buubot3 could actually interprete J, and the command to interpret J was "jeval", which is why I renamed my jevalbot instance from jeval to evalj b_jonas: "jeval:" used to trigger two bots ais523: idea: a self-modifying esolang with version control b_jonas: ais523: see Wikiplia b_jonas: it isn't truly self-modifying b_jonas: but it has a version control, and there's a self-modifying compiler implemented over it ais523: I meant self-modifying in the sense of programs modifying themselves, not in the Snowflake sense b_jonas: a compiler that compiles a slightly higher level to Wikiplia fizzie: Apparently 0ad00f-gU0": ciretose# GSMVIRP"AAN51p08P0851g21gW$ prints out the current reply counter (thing it uses to stop replying consecutively), and 0ad10f-G0": ciretose# GSMVIRP"AAN51p08P0851g21gW$ the nickname of whoever spoke to it last. ais523: actually, some of the uncomputable time-travel esolangs are in effect like this, so maybe you could start with one of those as a base and add a causality restriction to bring them down to TCness ais523: but it's more interesting if the ability to undo, rewind, etc. is somehow needed for TCness b_jonas: there is https://esolangs.org/wiki/Legit whose source format is a git repository ais523: right, but the content of the repository is irrelevant, the program is stored in the metadata (which isn't itself versioned) b_jonas: ais523: prolog then, since you can undo unifications? b_jonas: though it's still TC without failing fizzie: To call back to an earlier fork in the conversation, the attributes proposal (N2335) had been merged into the June 2019 working draft of C2x (N2385), together with a few standard attributes: deprecated (N2334), maybe_unused (N2770) and nodiscard (N2267). b_jonas: "maybe_unused" ah b_jonas: thanks fizzie: I don't think there's any level of -std=c2x support on the GCC version on HackEso though. fizzie: `gcc --version HackEso: gcc (Debian 8.3.0-6) 8.3.0 \ Copyright (C) 2018 Free Software Foundation, Inc. \ This is free software; see the source for copying conditions. There is NO \ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. fizzie: Yeah, I think it's 9 only. fizzie: Completely unrelated, but there's also strdup/strndup support. Sgeo: I'm watching a video about surreal numbers, and it said every real number is surrounded by an island of infinitesimals called a "monad". Any relation to the other meaning of monad that Haskell stole from category theory? kingoffrance: i prefer the devils dictionary definitions of "monad" "molecule" "corpsucle" etc. kingoffrance: "the smallest individual unit of matter; see also: x, also the smallest individual unit of matter; distinguished from y, also the smallest individual unit of matter" etc. kingoffrance: the ion differs from the corpsucle in that it is an ion, etc. kingoffrance: "leibniz has founded a theory of the universe based on the monad, but the creature bears no resentment, for the monad is a gentleman" fizzie: "It is of course well known that all ships of space are propelled by the inert projection, by means of high-potential static fields, of nascent fourth-order particles or “corpuscles,” which are formed, inert, inside the inertialess projector, by the conversion of some form of energy into matter." Lykaina: fizzie: you know you are descriping a zero-point engine, right? Lykaina: corpuscles == electrons kingoffrance: i forgot the atom, also the smallest indivisible unit of matter :/ Lykaina: kingoffrance: atoms ain't indivisible zzo38: Yes, but nevertheless they call it "atoms" because it is indivisible, even though it isn't. Lykaina: they thought they were Lykaina: then the manhattan project happened Lykaina: is there anything observable smaller than gluons? Lykaina: i'm pretty sure strings aren't observable yet kingoffrance: well, that book was circa 1880s-1910s -ish IIRC kingoffrance: i have yet to see a worthy competitor, although people write field-specific variants Lykaina: which? Lykaina: devil's dictionary? Lykaina: what was fizzie quoting from? kingoffrance: theres a devils dp (data processing) but noone calls it that anymore; i dunno fizzie Lykaina: cause that's a zero-point reactor Lykaina: just using old terms Lykaina: oh...galactic patrol kingoffrance: fizzies thing sounded like something i heard on futurama cartoon Lykaina: e e "doc" smith Lykaina: lensman series fizzie: Yes. It's not always just old terms, though, it's also curious mishmash of concepts. fizzie: I mean, it's all about the ether (and sub-ether) waves too. fizzie: And that whole negasphere business, which is most of the time pretty close to antimatter, but with a some degree of black-holeness thrown in too. fizzie: You make it by feeding a whole bunch of regular matter into a singularity, and it's "not essentially three-dimensional in nature. Light sank into the thing, whatever it was, and vanished." fizzie: But then later: "For, as has been said, the negasphere was composed of negative matter. Instead of electrons its building-blocks were positrons—the “Dirac holes” in an infinity of negative energy." And it's seen to annihilate regular matter "with nothing save a burst of invisible cosmics to mark its passing." fizzie: Anyway, I like best the parts where it's completely failing to anticipate these things called computers. I think I've quoted the parts already here. fizzie: "For eight hours two hundred Rigellians stood at whining calculators, each solving course-and-distance problems at the rate of ten per minute." fizzie: "Then for hours bale after bale of cards went through the machine; thousands of records per minute. Occasionally one card would flip out into a rack, rejected." (They're trying to filter out a top N list of scientists out of a library's stack of index cards.) fizzie: On space ship navigation: "-- her graduated circles and vernier scales were of a size and a fineness usually seen only in the great vessels of the Galactic Survey." fizzie: And smaller calculations are always being performed on slip-sticks (AIUI, colloquialism for a slide rule). Lykaina: transistors were not yet invented Lykaina: in the story i am writing, much of computer tech was based on the roswell crash kingoffrance: thats another futurama kingoffrance: more or less Lykaina: no it's not Lykaina: it's similar to something in an episode of star trek: voyager, though Lykaina: but i consider my version to be significantly different kingoffrance: it is, its just told in reverse, travel back in time, they are a UFO (thus, future tech was based on aliens) kingoffrance: its implied kingoffrance: unless we say they left that multiverse and arent connected or something, but that ruins the "fry is his own grandfather" :/ oerjan: oerjan wins again <-- wins what fizzie: Hm. "Writing to /dev/random or /dev/urandom will update the entropy pool with the data written, but this will not result in a higher entropy count. This means that it will impact the contents read from both files, but it will not make reads from /dev/random faster." fizzie: I was hoping I could've fixed the HackEso lack of entropy by making init write a bunch of random bytes from the host into /dev/random. int-e: oerjan: you predicted a Sturmhalten reference fizzie: Hm, apparently you can, it just needs to be done using ioctl RNDADDENTROPY instead of just writing. oerjan: int-e: oh right oerjan: i made a new prediction, with some hedging. we'll see... oerjan: and less evidence oerjan: a third, even more nefarious option would be if trogulus didn't mean the submarine to get away at all oerjan: *intend works, i guess oerjan: and perhaps mean still does oerjan: `? baba HackEso: BABA IS ¯\(°​_o)/¯ oerjan: i knew we had one for that oerjan: `cbt paste HackEso: ​#!/bin/bash \ if [ "$1" ] && url "$1" 2>/dev/null # Save making a file when it already exists. \ then \ true \ else \ PASTENUM="$RANDOM" \ \ mkdir -p $HACKENV/tmp/paste \ \ url $HACKENV/tmp/paste/paste."$PASTENUM" \ cat -- "${1--}" > $HACKENV/tmp/paste/paste."$PASTENUM" \ fi oerjan: `brl paste HackEso: https://hack.esolangs.org/repo/file/tip/bin/paste int-e: brl, what's next? blog? oerjan: `whatis log HackEso: log(3) - natural logarithmic function \ log(3p) - natural logarithm function \ log(1hackeso) - no description \ log(3glibc) - Exponents and Logarithms oerjan: `cbt log HackEso: ​#!/bin/sh \ cd /var/irclogs/_esoteric \ if [ "$1" ]; then \ grep -P -i -- "$1" ????-??-??.txt | shuf -n 1 \ else \ file=$(shuf -en 1 ????-??-??.txt) \ echo "$file:$(shuf -n 1 $file)" \ fi oerjan: a bit expired fizzie: `` grbp -l var/irclogs HackEso: anonlog \ bseen \ gaseen \ log \ pastelog \ pastelogs \ pastlog \ randomanonlog \ seen oerjan: i realized a bit duplication between `just and `paste but with only those two it's probably a bit much to generalize oerjan: `` grbp -l url # just what i needed HackEso: brl \ cmds \ edit \ emmental \ hurl \ hwrl \ just \ multicode \ paste \ pastequotes \ pastewisdom \ raw-url \ sprunge \ tclkit \ translatefromto \ url \ wiki \ wl \ wrl oerjan: `` grbp -l '\' # just what i needed HackEso: brl \ cmds \ just \ paste \ pastequotes \ pastewisdom \ wl \ wrl int-e: `cbt wl HackEso: ​#!/usr/bin/env python \ \ import os \ import sys \ import json \ import urllib2 \ \ proxy_handler = urllib2.ProxyHandler({'http': os.environ['http_proxy']}) \ opener = urllib2.build_opener(proxy_handler) \ urllib2.install_opener(opener) \ \ def lose(): \ print 'You get NOTHING! You LOSE! Good DAY sir!' \ sys.exit() \ \ def eels(): \ print 'My hovercraft is full of eels.' \ sys.exit() \ \ if len(sys.argv) > 2: \ arg int-e: nitia is responsible for so many weird things zzo38: Now I added a UNPACK program and PROJECT batch file into ZZ Zero, for more easily project management (and so that you do not have to use the undocumented F1 ^C feature in GAME to do this). oerjan: fizzie: ah you copied grwp. i'm not sure grbp needs all the features to recursive without noise, but it probably doesn't harm. oerjan: *recurse oerjan: actually dotglob might be good. do we have any such? oerjan: `u ` cd bin; ls -a -d .* HackEso: u? No such file or directory oerjan: `t ` cd bin; ls -a -d .* HackEso: ​. \ .. zzo38: (Also, DEFAULT.ASM is now available without having to unpack EXAMPLE.ZZ0.) fizzie: Yes. Although in retrospect I guess all these grwp/grbp cwt/cbt hurl/hwrl/hbrl should all be generalized into gr?p c?t h?rl respectively, which would all take as first argument the directory they're relative to, and the rest implemented on top of those. oerjan: `? mad HackEso: This wisdom entry was censored for being too accurate. oerjan: `slwd locale//s,on.*le,one true locale, HackEso: locale//Locales are just frames, which are just complete Heyting algebras. Taneb accidentally invented them by asking about lattices. The one true locale in #esoteric is en_NZ.UTF-8. oerjan: maybe it needs capitalization oerjan: lieutenant lefevre, you might reconsider how you give compliments... fizzie: http://ix.io/239O not sure why adding 128 bytes increases the entropy count by 384 bits, but at least it's doing something. fizzie: Adding 512 bytes bumps the estimate up to 2176. The first was exactly 3 bits/byte, this is exactly 4.25 bits/byte. fizzie: Presumably there's some sort of a computation. But that should be good enough. fizzie: `` openssl rand -base64 16 HackEso: u3vRYIQBLB9ozQMrw8v/qQ== fizzie: b_jonas: ^ zzo38: How common is it in a C code to include the same file multiple times? shachaf: zzo38: .h or .c file? zzo38: shachaf: In a .c file, including any file oerjan: eep something's wrong with yafgc imode: it seems like it's been wiped from the face of the internet... kingoffrance: zzo38, common enough people write "header guards" to prevent errors that might occur from multiple definitions of something imode: zzo38: it may be useful to include a header multiple times based on a conditional definition and subsequent inclusion. kingoffrance: or gcc IIRC has #include_next i guess, inspired from next/apple gcc objective-c feature IIRC; yeah, basically it can be done on purpose, or headers are typically guarded to protect against it imode: i.e "I define flag A, include header A, which includes code snippet A because flag A is defined, then I undefine flag A, then I define flag B, then include header A again, which has snippet B.." etc. kingoffrance: people doing more-than-basic macro stuff it might be more common kingoffrance: someone like me, you might split all functions into separate .c, and then just have a single "all.c" or similar that pulls in the others kingoffrance: but i dont really see that done, command lines typically have wildcards: gcc *.c -o foo imode: yeah including .c files I don't see very often. kingoffrance: sometimes people do one giant "all.h" that pulls in all the other, so that is somewhat common i think if people get fed up of order to include things in kingoffrance: i think plan9 kind of did that too, don't recall kingoffrance: (never used it) imode: I do that with a lot of projects. kingoffrance: or "windows.h" from what i have heard is somewhat of that nature, so much so that there is a WIN32_LEAN_AND_MEAN something or other to only include portions imode: not named "all.h" but usually ".h" kmc: xmacros! fizzie: SQLite does that 'amalgamation' build, though not through the preprocessor. fizzie: I tend to use xmacros without multi-file setups. It's just #define DATA X(a) X(b) ... X(z) #define X(x) ... DATA #undef X #define X(x) ... DATA #undef X. kingoffrance: well, i strayed a bit, but generally i guess includes are annoying enough on their own sometimes, i dont see much "include multiple times magic" kingoffrance: esoteric or obfuscated stuff however, might be a whole nother story kingoffrance: the only time i suppose that has ever came up with me, is circular definitions e.g. structs that refer to eachother; i believe with header guards that is not a problem, they can "include" eachother; "forward declaration" i believe is the term imode: if you want horrific preprocessor abuse, the Mode-to-C translator is just translating Mode instructions to C preprocessor tokens, which get expanded inline. imode: very much like generating C from brainfuck. fizzie: The sort of things that a C++ author would use templates for sometimes do get done using a "template" included with different macros in place. But since the original question was "how common", it's probably fair enough to say "not common at all". kmc: fizzie: wait, how does the single-file solution work? kingoffrance: there are lots of (especially pre-posix probably) code with #defines that basically include things in a specific order, for some OS, so sometimes they have a comment /* ok to include twice, needed for X */ or /* ancient OS does not like this being included twice */ but that again, is more working around vendor headers, than deliberately including something some number of times kingoffrance: and the opposite case is probably more likely: os A foo.h includes bar.h so programmer knows this and only includes foo.h, then this breaks when they compile somewhere that isnt true; so they wanted something included once and got zero times instead zzo38: Something I have is that a macro is defined in a different way when the file is included, such as the Opt macro used in bystand_options.inc zzo38: Once it is included in a enum block and is defined as Opt_##x, and once it is included in an array and Opt is defined as #x, fizzie: kmc: Maybe better with newlines: #define DATA X(a) X(b) ... X(z) \ #define X(x) ... \ DATA \ #undef X \ #define X(x) ... \ DATA \ #undef X fizzie: It's just the same as the usual thing, except instead of #include "data.x" you expand the macro DATA. fizzie: Maybe better for a moderate amount of items. For very many, the separate file is probably more readable. shachaf: Header guards might be scow. shachaf: Anyway, putting all your code in one translation unit is where it's at. zzo38: Often I do use a single file for a program, although sometimes separate files are helpful for various purposes, whether they are all included into one file or compiled separately, both ways are useful for different purposes. kingoffrance: actually univ. of utah "cmi" cross-module inliner basically did that "put all code in one translation unit" theory was it could inline and eliminate so youd get a smaller, more efficient binary; it was compiler-independent, but written in haskell IIRC ghc old version so might be a pain to get running nowadays (and now gcc and clang and intel c at least, all have some type of "Link-Time Optimization" a kingoffrance: nd profiler-based optimizations too, etc.) kingoffrance: it was part of a larger oskit project IIRC, that is basically not maintained to my knowledge, that added various things to C like "module" system of some sort kingoffrance: (but not preprocessor independent; iirc youd preprocess your files, then it would "merge" them into one giant thing, with things appearing in the order it thought best, and youd compile that) kingoffrance: (IIRC it had to deal with whatever junk various preprocessors would insert for some compiler, that were perhaps non-standard) kingoffrance: (or system headers that are non-standard for some specific compiler, etc.) kingoffrance: (so itself IIRC was compiler-independent, but headers and preprocessors are not necessarily so) kingoffrance: (it might still be useful if you use old gcc versions perhaps) kmc: fizzie: ah, i see kmc: the most sponsored Unicode characters are UNICORN FACE (11 sponsors), followed by THINKING FACE and SUSHI (7 sponsors each), followed by ROCKET, UPSIDE-DOWN FACE, and EXTRATERRESTRIAL ALIEN (5 each) kmc: should i sponsor another character, and which one kmc: looks like you can't sponsor non-printable characters :( zzo38: Why isn't it allowed to sponsor non-printable characters? kmc: "REPLACEMENT CHARACTER" was sponsored by "I ♥ UTF-8" kmc: zzo38: I don't know, perhaps because it's not clear what they would show on the website or print on the certificate they mail to you oerjan: `grWp invisible HackEso: No output. zzo38: They could display the hex code and name (which they should do for printable characters too, since some have a similar appearance) oerjan: `grWp times HackEso: ​☾_:☾_ is moon_'s lawful twin. He's banned in the IRC RFC for being an invalid character. He sometimes eats papers. \ `4:`4 is equivalent to `5 , except that it only repeats 4 times. Useful when you've already run a command forgetting to use `5. \ `5:`5 is equivalent to repeating `` 5 times, then splitting the output into irc-sized pieces. defaults to "quote". See `1, `4 and `spam. Confusingly _not_ the obvi oerjan: `2 grWp times HackEso: 2/6:ous generalization of `2. \ 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. \ arabic:.scihpylgoreiH sa drah sa ton hguoht ,troppus stnof ekam ot drah yrev si taht egaugnal citimes lartnec a si cibarA \ costume:Costumes are used for cosplay. Taneb sometimes invents them. \ daystar:The Daystar is an unscien oerjan: ETOOMANYHITS zzo38: And then, what about, unassigned codepoints? kmc: I don't think you can sponsor those kmc: but it looks like you can sponsor the emoji characters that are composed of more than one codepoint kmc: like the rainbow flag zzo38: What about non-emoji characters that are composed of more than one codepoint (e.g. characters using variation selectors)? kmc: perhaps when Emoji 13.0 comes out I will sponsor [WAVING WHITE FLAG] [ZERO WIDTH JOINER] [MALE WITH STROKE AND MALE AND FEMALE SIGN] kmc: zzo38: I don't know about those either b_jonas: fizzie: nice! b_jonas: `openssl rand -base64 16 HackEso: Invalid command 'rand -base64 16'; type "help" for a list. b_jonas: ``` openssl rand -base64 16 HackEso: oXBq2MWPBhDZqcMd832hbg== b_jonas: `python3 -cimport secrets; print(secrets.token_urlsafe(16)) HackEso: WcXz-HY_Pax2-ZcPnzXtYw imode: capability models in mode can make use of subprocesses and system operations. for example, you can set restrictions on what processes can use the # operator, which is responsible for calling out to a system operation (equivalent to a syscall), which may modify the world. imode: if you say "only PID0 may use syscalls", then the top-level process becomes your subprocess spawning and routing logic. imode: you could have an authorization system, whereby you send your subprocess handle to PID0, it says "yup, looks good to me" and gives you syscall privs for that one subprocess. imode: {,$1[V{ ... }^,$1]} infinite replication ala the pi calculus. in an infinite loop, receive the requester's ID, spawn another copy of the process you've wrapped, then send the handle of that process to the requester. imode: you can combine a requester with a syscall to check to see if a given process is blocking on receive/send to create a tiny load balancer. imode: combine that with some form of time functionality and you have a health check protocol. zzo38: Is "IF EXIST XYZ\*.*" true on FreeDOS if XYZ is an empty directory? zzo38: I don't know if maybe some ZZT users would be interested in ZZ Zero. zzo38: Do you like ZZT and ZZ Zero? arseniiv: zzo38: where could one find the docs how to play? I think I tried once and didn’t understand anything zzo38: Which, ZZT or ZZ Zero (or both)? zzo38: The latest version (0.5) now has a proper example (although incomplete), but it is just a demonstration and not an actual game. zzo38: For ZZT, which keys you need are mentioned in the status area on the right; if you have further questions you can ask (especially if it is about one of my own ZZT worlds). zzo38: For ZZ Zero, controls may vary by world, but some "system controls" are always available: ESC to quit, F1 for options, F2 for sound toggle, F3 for save game, F4 for restore game, ` for screen refresh, CTRL to disable the delay before key repeating, and ALT to speed up the game. For the example world, F5 displays a help file. zzo38: arseniiv: Does that explain it? zzo38: (O, also, for ZZ Zero, you must invoke GAME with a command-line argument being the world filename without the .ZZ0 extension. For example, "GAME EXAMPLE" to load EXAMPLE.ZZ0.) arseniiv: zzo38: hm hm arseniiv: I don’t even know what ZZT is all about arseniiv: though I remember you said ZZ Zero is sort of continuation of ZZT zzo38: It is not really a "continuation" of ZZT, but rather more like a variant. Like some games might be called "roguelikes", so some game creation systems (including ZZT, MegaZeux, ZZ Zero, and possibly some others) could be called "ZZT-likes", I suppose. zzo38: There are many ZZT worlds available (including the ones that it was originally distributed with, such as Town of ZZT), but ZZ Zero is too new for that. zzo38: Town of ZZT doesn't really have a story as far as I can tell, although some worlds do include a story (including my own XYZABCDE.ZZT, where your wing suddenly broke while going to Mornington Crescent and now you are badly injured, with nothing except a broken wing, an unloaded gun, and no tea) zzo38: (Maybe it is a bit strange story, but that is how I did it.) kingoffrance: the no tea makes sense; its like duke nukem and "they live" all out of bubble gum zzo38: In XYZABCDE.ZZT eventually they will fix your wing. But before that there is many other stuff, such as the library that doesn't have many books left, the subway that sells tickets costing one pound per inch, a telephone call that you can push 0 to try the call the operator but calls the operetta instead, etc. zzo38: And two broken computers that you have to fix. zzo38: (And in ZZT, the tigers have guns, and I don't know why, but that is how it is in ZZT.) arseniiv: tigers with guns // whose appearance me stuns // and they use that as much as they can b_jonas: ``` rm -v /hackenv/bin/STOP HackEso: removed '/hackenv/bin/STOP' b_jonas: `python3 -cimport secrets; s = secrets.token_urlsafe(64).translate(str.maketrans("23456789"," ")); p = 6+secrets.randbelow(64); print(s[:p]+":\x3D"+s[p:]) HackEso: JT jdVitiyo La:=pG1EhwhETltFc Jj z0Sc hi yfkNIe DzWPQLCjKpJIZzCI Nm fupfKdnyt oKJDpPA bfbot: No such command. Try =help. fizzie: `` python3 -c 'print(repr(str.maketrans("abc", "def")))' # always wondered what those look like HackEso: ​{97: 100, 98: 101, 99: 102} b_jonas: fizzie: sadly the standard library doesn't seem to have an easy way to count the number of occurrances of a set of bytes. translate doesn't give a count unlike in perl. int-e: So Ponder This... I finally realized that I should've gathered statistics of my determined (pun!) effort... http://paste.debian.net/1118651/ is my best approach. It backs up the idea that reaching 910M is easy, and it quickly gets harder from there. j-bot: b_jonas: 0.015625 b_jonas: `python3 -cprint(2**-6) HackEso: 0.015625 b_jonas: kspalaiologos: oerjan found a bug in your bot kspalaiologos: it doesn't surprise me kspalaiologos: what has happened? kspalaiologos: I've got some time on my hands so I'll fix it tomorrow kspalaiologos: i conclude that kspalaiologos cheated even more than i thought to get the last quote kspalaiologos: also, i am now capable of typing his name without rechecking kspalaiologos: his wretched polish name is still beyond me. maybe the first part. b_jonas: look in the channel logs kspalaiologos: 1) try writing an 8ball without entropy source kspalaiologos: 3) it's not exactly Polish :p kritixilithos: you could have the negative tape cells store the time kspalaiologos: as my real name is way more complicated as my nick kspalaiologos: ^^ unportable kspalaiologos: and kinda crappy HackEso: 310) I figured out something about C program. If you use ? : a lot then you don't need as much parentheses but it makes it more difficult to understand. kspalaiologos: `q 130 HackEso: 130) Phantom_Hoover: Don't be nasty; he's a lunatic, not a murderer. kspalaiologos: `q 1300 HackEso: 1300) an #esoteric-dwelling swede / was mistaken for edible feed / “with you,” said a sicko / “our lanttulaatikko / would be very tasty indeed!” kspalaiologos: `q 1400 HackEso: No output. kspalaiologos: `q 1350 HackEso: No output. kspalaiologos: please add a command to print out the last quote kspalaiologos: `q 1320 HackEso: 1320) I don't care for the bf backend as long as it doesn't make the rest of ayacc harder to sue kspalaiologos: `q 1321 HackEso: 1321) ...this is the first prime number finder I've ever written which ran out of memory before finding 3 kspalaiologos: `q 1326 HackEso: 1326) kmc: it's 3am and instead of going to bed I just spent a looot of time reading a long article about circadian rythms and melatonin kspalaiologos: I'll continue the search on PM kspalaiologos: `q 1330 HackEso: 1330) =8ball what is the worst mail client? Outlook not so good kspalaiologos: a ha, found it straightaway b_jonas: ``` allquotes | tail -n1 # print the last quote HackEso: 1330) =8ball what is the worst mail client? Outlook not so good kspalaiologos: ah yes kspalaiologos: ``` allquotes HackEso: 1) EgoBot just opened a chat session with me to say "bork bork bork" \ 2) Hmmm... My fingers and tongue seem to be as quick as ever, but my lips have definitely weakened... More practice is in order. \ 3) that's where I got it rocket launch facility gift shop \ 4) GKennethR: he should be told that you should always ask someone before killing them. \ 5) His bod kspalaiologos: I wish I knew you before b_jonas: kspalaiologos: anyway, the deterministic 8-ball is not the bug kspalaiologos: how is it kspalaiologos: wait a second kspalaiologos: I can't find it b_jonas: oh, apparently you already saw that bug at https://esolangs.org/logs/2019-11-29.html#lWc before b_jonas: And it was apparently fizzie who found it, at https://esolangs.org/logs/2019-11-29.html#lxc kspalaiologos: "wait, what, bfbot, what the heck" kspalaiologos: he may have found it but I have noticed it lol b_jonas: `python3 -cUSD=304.13; AUD=206.11; print(USD/AUD) HackEso: 1.4755712968803065 b_jonas: fungot, how do you spell Pierce Brosnan's name? you know, he's the actor who plays the best James Bond. fungot: b_jonas: and hopefully you can in opera)? b_jonas: =str 1s++++++++[->++++++++<]>+. b_jonas: =def 1msg1 bfbot: ok, defined 'msg1' b_jonas: =str 2s++++[->++++<]>[->++>+++>++++>+++++>++++++>+++++++<<<<<<]> >>>>.++.++++.----.+++++++++++++.>++++.---.++++.<------.+++++.---------. b_jonas: =def 2hackesoquine bfbot: ok, defined 'hackesoquine' b_jonas: =str 2s++++++++[->++++++++<]>+. b_jonas: ``` set -e; f=/hackenv/bin/bfbotquine; d=/hackenv/bin/STOP; >$d echo $'#!/bin/sh\nrm -fv '"$f"; >$f echo $'#!/bin/sh\nsleep 50; echo ":"="hackesoquine"; sleep 20'; chmod -c a+x $d $f HackEso: mode of '/hackenv/bin/STOP' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x) \ mode of '/hackenv/bin/bfbotquine' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x) b_jonas: if this loop gets out of hand, type `STOP b_jonas: if this loop gets out of hand type =def 1hackesoquine b_jonas: =hackesoquine bfbot: `bfbotquine HackEso: Mmmmm... no. b_jonas: `bfbotquine HackEso: No output. b_jonas: ``` rm -fv /hackenv/bin/bfbotquine HackEso: removed '/hackenv/bin/bfbotquine' b_jonas: =def 1hackesoquine bfbot: ok, defined 'hackesoquine' b_jonas: =hackesoquine b_jonas: ``` rm -fv /hackenv/bin/STOP HackEso: removed '/hackenv/bin/STOP' zzo38: If you play Scrabble with 2 players then I think that both players should expose all letters in their hand once there are no more letters to pick up from the bag int-e: I see where this comes from... but maybe you should just remove 4 random letters from the bag initially and hide them away instead. zzo38: Yes, that is another variant, but then there will not be enough letters, I think b_jonas: `python3 -cimport secrets; s = secrets.token_urlsafe(64).translate(str.maketrans("23456789"," "*8)); p = 6+secrets.randbelow(64); print(s[:p]+":\x3D"+s[p:]) HackEso: xXVHLix:=JAvUrfeZtG-ERB-OiGATTYgCY CMvm0Sy0DeZw ocw D RxdrZKaMIqaFdkt vvdTbTubzonuGlDTqw bfbot: No such command. Try =help. fizzie: https://www.coursicle.com/cmu/courses/STU/98242/ hadn't realized this was such an official thing. b_jonas: fizzie: I don't know what the indigestion refers to b_jonas: is that some befunge thing? fizzie: I believe it's also an C-INTERCAL error message. fizzie: https://github.com/calvinmetcalf/intercal/blob/8a65e8b/doc/ick.txi#L1916 b_jonas: so two references to intercal? ok fizzie: Well, it's well-known. b_jonas: yes, because we haven't featured befunge on the wiki yet b_jonas: we should feature it b_jonas: `dateu HackEso: 2019-12-01 00:04:54.766 +0000 UTC December 1 Sunday 2019-W48-7 b_jonas: `? password HackEso: The password of the month is mostly irrelevant. b_jonas: ``` hg log -T "{date|shortdate} " password HackEso: No output. b_jonas: ``` hg log -T "{date|shortdate} " /hackenv/wisdom/password HackEso: 2019-11-04 2019-11-04 2019-10-01 2019-09-01 2019-08-01 2019-07-01 2019-06-02 2019-05-01 2019-04-09 2019-03-30 2019-02-04 2019-02-03 2019-01-01 2018-12-01 2018-11-01 2018-10-02 2018-09-05 2018-08-03 2018-07-20 2018-06-03 2018-05-05 2018-04-14 2018-04-14 2018-03-07 2018-02-15 2017-12-31 2017-12-01 2017-12-01 2017-11-04 2017-10-01 2017-09-02 2017-08-22 2017-08-16 2017-07-11 2017-06-02 2017-06-02 2017-06-02 20 b_jonas: kmc: ^ fizzie: Every time the topic of featured languages comes up, my first thoughts are "we should feature Befunge" and "but the article should be made better first". zzo38: Then, make the article better first please. fizzie: I agree that would be great. b_jonas: the Befunge article isn't good enough? b_jonas: I thought it was good enough, it just wasn't featured yet because the previous feature was too recent b_jonas: fizzie: that's useful info though, because if you think that we should feature befunge then I can revoke my suggestion and suggest featuring a different language b_jonas: nopfunge for example kingoffrance: some reason befunge always reminds me of doom cacodemon floating around; its the < > look like thorns i think kingoffrance: combine with ff6 mr. chupon says "fungahhhh!" or similar kingoffrance: thats not a complaint, just an observation kingoffrance: (and potential mascots) HackEso: 1/2:dc//dc is short for "dump core". (try it out yourself: dc -e '[') \ canaima//Canaima is a secret Venezuelan project to overrun #esoteric with incomprehensible people who have no idea why they're here. \ middle worse//Mïðal VVőrszü vvoràði nyëlv spöket af magyar inva̋ðereknek leszármazottai Herefördshirben äppröxima̋tely 1250. \ invention//Invention is the daughter of necessity. \ morphism//A morphism is just a nat HackEso: 2/2:ral transformation between two diagrams of shape 1. shachaf: `cwlprits morphism HackEso: shachäf tsweẗt oerjän shachäf ellioẗt oerjän fizzïe GreyKnigḧt GreyKnigḧt GreyKnigḧt fizzie: `` dc -e '[' # no core dump HackEso: No output. shachaf: `dowg password fizzie: I was pretty sure I contributed to that in no way, but apparently I just added the word "just" in it. HackEso: 11998:2019-11-04 le//rn password//The password of the month is mostly irrelevant. \ 11997:2019-11-04 le//rn password//The password of the month is mostly irrelvant. \ 11958:2019-10-01 learn The password of the month is not what it seems \ 11925:2019-09-01 learn The password of the month is ninjaed. \ 11890:2019-08-01 learn The password of the month is surprising. \ 11843:2019-07-01 kspalaiologos: oerjan found a bug in your bot <-- i don't recall being involved with the := bug, and until now not a single message of mine has triggered it bfbot: kspalaiologos: oerjan found a bug in your bot <-- i don't recall being involved with the :No such command. Try =help. oerjan: fizzie: ξπαλαιολόγος hth oerjan: `grwp banned HackEso: ​☾_:☾_ is moon_'s lawful twin. He's banned in the IRC RFC for being an invalid character. He sometimes eats papers. \ ørjan:Your pal Ørjan is oerjan's good twin. He's banned in the IRC RFC for being an invalid character. Sometimes he publishes papers without noticing it. \ xenon:Xenon is a noble gas element. It has been banned in most countries due to xenophobia. oerjan: `2 grwp banned oerjan: `learn ξπαλαιολόγος is kspalaiologos's Ancient Greek twin. He was banned from the theater for making up invalid characters. HackEso: Learned 'ξπαλαιολόγος': ξπαλαιολόγος is kspalaiologos's Ancient Greek twin. He was banned from the theater for making up invalid characters. oerjan: `? 8ball HackEso: 8ball? ¯\(°​_o)/¯ oerjan: `wisdom 8.*ball HackEso: That's not wise. oerjan: `wisdom 8 HackEso: ​zzo38//zzo38 is not actually the next version of fungot, much as it may seem. oerjan: `cbt b HackEso: cat: /hackenv/bin/b: No such file or directory oerjan: `dowg morphism HackEso: 10877:2017-05-10 slwd morphism//s.1.shape 1. \ 9325:2016-10-18 slwd morphism//s/functors on/diagrams of/ \ 5251:2015-02-03 learn A morphism is just a natural transformation between two functors on 1. \ 5138:2014-11-16 revert 5134 \ 5135:2014-11-16 find wisdom -type f -print0 | xargs -0 grep -El \'(is|are) just\' | xargs rm \ 1294:2013-01-07 echo "Morphisms are just elements oerjan: fizzie: i think it already had the word "just" hth oerjan: or wait oerjan: `doat morphism HackEso: No output. oerjan: `dowt morphism HackEso: 1256:2013-01-04 echo "A morphism is just an abstraction derived from structure-preserving mappings between two mathematical structures." > wisdom/morphism \ 1257:2013-01-04 echo "A morphism is just an abstraction derived from structure-preserving mappings between two categories." > wisdom/morphism \ 1259:2013-01-04 echo "A morphism is a map between two objects in an abstract category." > wisdom/mor oerjan: hm you seem to be in the gap oerjan: `hwrl morphism HackEso: https://hack.esolangs.org/repo/log/tip/wisdom/morphism oerjan: apparently we've had the serious template for ages but it wasn't used for anything imode: building an if/else statement without a conditional break is suddenly difficult. zzo38: Building with what? imode: in Mode. imode: really should build a page for this thing. zzo38: Yes, make a document so that we can see what it is imode: I do have a document. just not posted anywhere live. zzo38: Maybe you should post it arseniiv: I think bfbot intercepts any post with equals inside? 2 + 2 = 2 arseniiv: oh, it’s now fixed b_jonas: arseniiv: it intercepts any post with colon-equals inside arseniiv: b_jonas: why? arseniiv: =help := bfbot: =help :No such command. Try =help. b_jonas: zzo38: re Fire Goats Mountain => heck no, that's likely to be overpowered in some formats. b_jonas: zzo38: Threshold of Death seems a bit in danger of being overpowered too. I don't recommend these. int-e: By the power of the Black Lotus... b_jonas: int-e: this may be a good time to advertise our play-by-post Magic: the Gathering game, in which players submit three-card decks. http://www.giantitp.com/forums/showthread.php?601011 int-e: I remember that link. I'm not actively interested in M:tG though. b_jonas: yes, I advertised it once already arseniiv: I am too. We are no fun arseniiv: not too much interested, I mean b_jonas: arseniiv: or you are playing under different names that I don't recognize arseniiv: b_jonas: mmmaybe but why would I, I’m not so many-layered b_jonas: arseniiv: I don't mean just you specifically, but the "We" that you mentioned b_jonas: plus, you might already have an account on that forum and it'd be hard to rename it arseniiv: b_jonas: ah b_jonas: I'm "jonas" in several corners of the internet because it's better to keep a nick that is already known there b_jonas: fungot, how many continents are there on Earth, and how many oceans are there on Earth? fungot: b_jonas: the intermediate language for my game b_jonas: well said LKoen: "how many continents are there?" was a very frustrating question when I was in middle school LKoen: I haven't had two geography teachers who agreed on the number LKoen: and of course they made us learn by heart paragraphs that stated that number and other things b_jonas: I was told that there are five. But that's because we only had one geography teacher. b_jonas: And three oceans. LKoen: Oceania / Africa / America / Eurasia / Antarctica? int-e: LKoen: how many different answers are there? 3, splitting Eurasia up into Europe, Asia, and optionally India? LKoen: well, counting Antarctica or not, separating Europe and Asia or not, separating North and South America or not b_jonas: int-e: America can be one or two continents, and the Antarctics may or may not count as a continent int-e: Ah. I wasn't sure about America. LKoen: of course some of the combinations result in the same number, but agreeing on the number while disagreeing on the actual continents is not very helpful int-e: I sucked at goegraphy anyway. kingoffrance: all i know is atlas is usually holding a globe up, and atlases are named after him, and he has his own atlantic ocean, but apparently sometimes he shrugs. i suppose one such shrug fractured pangea int-e: I always counted Antarctica though. b_jonas: oh yeah, that reminds me int-e: But I learned very late that India's on its own plate. LKoen: yeah I never had a teacher tell us to count India as its own continent kingoffrance: also, apparently sometimes atlas is really a sequence of turtles kingoffrance: so he has shapeshifting abilities int-e: Well, we all know it's turtles all the way down. kingoffrance: or the turtles do. hard to say. LKoen: also they were never very clear about the definition of a continent? I don't think it was related to plates, except for Oceania b_jonas: https://www.perlmonks.com/?node_id=116759 parodies a certain type of question that perlmonks received at that time (this was before I was on that site), and it has the phrase "It need to do something with states and an alphabet, but I'm not good with geography so really need help!" which always makes me laugh kingoffrance: the problem with atlas and a globe is im not sure how the "here be dragons" and other creatures would feel about being wiped out; i theorize at some point atlas beat all the dragons so thats why he gets to hold the globe int-e: LKoen: As I recall it, the split of Eurasia was motivated by a historic collision of continental plates in school. int-e: But meh, in retrospect it's completely arbitrary. b_jonas: int-e: no way. Europe and Asia are separated by cultural history, not by any natural geographic stuff int-e: There are the Ural mountains. LKoen: b_jonas: everyone knows Europe and Asia are distinct continents because they are separated by the biggest mountains in the world, the Ural int-e: Which I guess are less of an obstacle than the huge bodies of water commonly called oceans. b_jonas: int-e: yes, we have to draw a boundary somewhere, and since it's hard to cross mountains or seas, Ural and Caucasus are good places to draw a boundary at b_jonas: `? ural HackEso: ural? ¯\(°​_o)/¯ b_jonas: hmm... Ural is the biggest mountain of the world, according to the BBC. b_jonas: no wait HackEso: A is one of seven villages in Norway. The BBC invented them by not understanding things on top of letters. b_jonas: Ural is the biggest mountain of the world. The BBC invented them. b_jonas: `? bbc HackEso: The BBC is the BreadBox Corporation. Its inventions include, without limitation, Muppets, tiny elfs, villages in Norway, and inventors of all things. Taneb invented it. b_jonas: ``` wc -c b_jonas: wow, the input is indeed /dev/null now HackEso: The CIs are a secret society led by David Morgan-Mar, bent on conquering the world from Sydney with webcomics. They invented Taneb. int-e: `readlink /proc/self/fd/0 HackEso: ​/null int-e: (harmless, but curious) HackEso: The CIs are a secret society led by David Morgan-Mar, bent on conquering the world from Sydney with webcomics. They invented Taneb. Shamus Young invented them. int-e: CI is a key operation in functional analysis. arseniiv: there are too many metallic elements, don’t you think? arseniiv: though at least many of them do have interesting chemistry despite that b_jonas: arseniiv: no, you only think there are too many of them because many of them are too expensive for you to be familiar with arseniiv: b_jonas: many of nonmetals aren’t available to me too, but nonetheless they are minority b_jonas: arseniiv: since many of those metalic elements are useful for alchemy or allomancy or other forms of magic, the Dark Lord collected them and hogged them, and they're now buried underground in dungeons mostly unaccessible to us. b_jonas: rhenium turned out to be the most magical, and the One Ring was forged from it. arseniiv: b_jonas: hm why not bismuth? arseniiv: it should be the one, as it’s right at the border arseniiv: and also it has nice oxidative colours b_jonas: arseniiv: the ring is made of a metal that is harder to forge than mithril, for Gandalf says that even the dwarven forges that work with mithril couldn't melt it. only the demonic fire of Mount Doom could melt it, and even that probably only when the Dark Lord's servants fueled it. b_jonas: Bismuth isn't harder to forget than mithril. arseniiv: Bismuth isn't harder to forget than mithril. => this is a strong argument against it, unfortunately arseniiv: though we need to be sure rhenium isn’t filtered out too! b_jonas: arseniiv: and there's proof other than Gandalf's words. all the other rings of power have a gemstone. the One Ring is unadorned, because you can't embed a gem if you have to forge the ring at such a high temperature that gemstones would burn at, and it would be ugly to add a different metal on it as the gemstone frame. b_jonas: what kind of mustard sauce do you prefer, fungot? zzo38: Maybe the upkeep cost for Threshold of Death can be changed to cumulative upkeep kritixilithos: why is fungot obsessed with fnords fungot: kritixilithos: it rains here. :) i don't understand it. but the quality of my tools. you have to fizzie: Some of the models have been trained using a form of smoothing where rare words are assigned to a special token; when fungot's generating data from the model, it has to put something there, and it uses "fnord" for that. fungot: fizzie: when do you determine which permutation you want to do HackEso: 2/2:smo, prueba #esoteric en EFnet o DALnet.) \ xml//XML stands for "X-treme Mega Language (of Awesomeness)" \ categorical product//categorical product is like when you have two category elements A and B then their product is element C iff there are two morphisms p:C->A and q:C->B such that for every element X and morphisms u:X->A and v:X->B there is a unique morphism w:X->C such that u=wp and v=wq. shachaf: `forget categorical product HackEso: Forget what? shachaf: HackEso: categorical product b_jonas: `5 wisdom fungot fungot: b_jonas: so the minimal point is ( fnord 5), etc HackEso: 1/1:fungot//fungot is our beloved channel mascot and voice of reason. \ fungot//fungot is our beloved channel mascot and voice of reason. \ fungot//fungot is our beloved channel mascot and voice of reason. \ fungot//fungot is our beloved channel mascot and voice of reason. \ fungot//fungot is our beloved channel mascot and voice of reason. b_jonas: `5 quote fungot fungot: b_jonas: how old are you? :) ( aren't i lazy :p) or fnord k 1 HackEso: 1/166:10) GregorR-L: i bet only you can prevent forest fires. basically, you know. \ 13) Finally I have found some actually useful purpose for it. \ 14) oerjan: are you a man, if there weren't evil in this kingdom to you! you shall find bekkler! executing program. please let me go... put me out! he's really a tricycle! pass him! \ 56) i am sad ( of HackEso: ​? Permission denied HackEso: ​/? Permission denied b_jonas: `/dev/stdin HackEso: ​/dev/stdin? Permission denied b_jonas: `/nonexistantfile HackEso: ​/nonexistantfile? No such file or directory b_jonas: `5 quote fungot | perl -e'@s=<>;print $s[rand@s]' fungot: b_jonas: yay for hello bf cookie world where more people wanted to be doing this wall drilling thing for an idiot like me is to say, right? HackEso: 1/2:538) sadhu: it's been said that boole is the crowning jewel perched precariously upon the perfect peak of programmer prowess, casting its limitless limpid light over the loathesome lands of those who scuff and wallow in the dreary dust of digital depravity and unbounded wilful ignorance of the testament of our lord jesus christ into your life. \ 632) fizzie: is a 98% reduction in the waterpark intensity, right, so i'd im HackEso: 2/2:gine! \ 768) olsner: over the undertow! under the overpass! around the future and not just fnord for example. it's just the syntax \ 689) fungot: Feeling scrambled after all that? fizzie: but it's much like new zealand, in my stone-age country, we still like you even if you're only using the new fnord \ 930) fungot: begrudging pat HackEso: 1/2:538) sadhu: it's been said that boole is the crowning jewel perched precariously upon the perfect peak of programmer prowess, casting its limitless limpid light over the loathesome lands of those who scuff and wallow in the dreary dust of digital depravity and unbounded wilful ignorance of the testament of our lord jesus christ into your life. \ 632) fizzie: is a 98% reduction in the waterpark intensity, right, so i'd im b_jonas: and it's nonexistent, with an e, darn it! b_jonas: `? Ance HackEso: Spelling of -ance/-ence words: advance, science, conference, experience, finance, insurance, licence, performance, reference, assistance, balance, defence, difference, distance, evidence, acceptance, appliance, audience, compliance, importance, influence, instance, intelligence, maintenance, preference, presence, sentence, sequence, substance, violence, absence, accordance, alliance, appearance, assurance, attendance, circumstance, clearance, b_jonas: it's not there, but still kmc: `` egrep '^[adehijlnorst]{3}$' /usr/share/dict/words HackEso: add \ ado \ ads \ aha \ aid \ ail \ air \ ale \ all \ and \ ani \ ant \ are \ art \ ash \ ass \ ate \ dad \ den \ did \ die \ din \ dis \ doe \ don \ dos \ dot \ ear \ eat \ eel \ ell \ end \ eon \ era \ ere \ err \ eta \ had \ hah \ has \ hat \ hen \ her \ hes \ hid \ hie \ his \ hit \ hod \ hoe \ hos \ hot \ ids \ ill \ inn \ ins \ ion \ ire \ its \ jar \ jet \ jot \ lad \ lea \ led \ lee \ lei \ let \ lid \ lie \ lit \ lot \ net \ nil \ ni kmc: these are the words my new alphanumeric mechanical padlock can make kmc: (counting 0 as O and 1 as I) kmc: i wonder how they arrived at that set kmc: it has the vowels except U and Y and W kmc: (and do Y and W even count) kmc: and it has the 5 most common vowels -- shdrl b_jonas: ``` perl -ne'print "$_ " for /(? sort "etaoinshrdlu" lambdabot: "adehilnorstu" b_jonas: isn't this one of those padlocks where you press a set of buttons, so words with double letters shouldn't count, and different permutations of letters should count only once? b_jonas: kmc: ^ arseniiv: Ade Hil[l], Norstu kmc: it has a single spinning dial kmc: like a standard 'school locker padlock' kmc: (at least in America) kmc: the only difference is that it's labeled with digits and some letters rather than consecutive integers up to 40 or whatever kmc: well and it also has detents for each kmc: standard padlocks spin smoothly kmc: I have one of those too but I forgot the combo and my attempt to crack it using some online guide failed kmc: you can take it to a shop and get the combo from a serial number but that sounded like effort when I could get a new one for $10 in 2 minutes kmc: but then i didn't need it anyway, oops b_jonas: ``` perl -ne'for (/(? carrier mapping somewhere? kmc: I bet phone companies can do it, because they need to know who to bill kmc: but I don't think random people can do it imode: https://www.carrierlookup.com/ fizzie: I used the trial thing of https://www.datasoap.co.uk/data-quality-services/hlr-lookup once to look up the operator a number was on. fizzie: There's a really flaky SMS delivery situation between our UK operator (Three) and some (but not all) Finnish operators. fizzie: Also between my Finnish bank and Three, and nobody's taking any responsibility of it. fizzie: (For "security" reasons the bank's getting ever more strict on mandating SMS-based verification on top of the existing one-time passcode lists.) kmc: got some pills today kmc: girl pills kmc: `quote 1097 HackEso: 1097) BBC: Exercise 'can be as good as pills' oh, they mean for your health fizzie: Hm, I wonder if it would be in the spirit of HackEso to implement networking support using UML's "daemon" mode (writes Ethernet packets to a Unix domain datagram socket, intended to be used with uml_switch to connect several UMLs together), except connect it to a custom process that'd fake the basics (ARP, DNS) and then act as a transparent HTTP proxy for whitelisted requests + with some resource limits. fizzie: Thing is, it'd need a userland IP and TCP implementations for that. The much easier way would be just use the "tuntap" mode and let the kernel handle the IP and TCP, but then it needs special privileges to set up. One of the cool bits about umlbox is that it doesn't need any of that. fizzie: (Of course the existing umlbox-mudem approach is always a possiblity; that provides TCP port forwarding muxed over a fake serial line. But then all apps need to connect to localhost:N; with the other approaches the thing can be entirely transparent, which is cool.) zzo38: I don't know if you might want to also whitelist some non-HTTP stuff too zzo38: And even for HTTP(S), decide which white lists to include b_jonas: fizzie: you don't have to fake a normal TCP/IP implementation. You can just have custom commands that ask the demon outside to do whatever restricted request you want, whcih could be HTTP requests or anything else, even more complicated combinations. b_jonas: Oh, you want a transparent proxy? Yes, that could be harder. b_jonas: Whether it's in spirit or not, I don't know. fizzie: It's a matter of style, really. I'd prefer if the "business logic" stayed inside the HackEso (and was editable by everyone), and the thing outside was pretty dumb, except for the practical requirement of needing enough smarts to restrict what can be done. oerjan: @tell arseniiv b_jonas: why? <-- probably because it wants to match on = at the beginning of an irc message text, and := is what that looks like in the irc line, it just fails to adapt for when there is := elsewhere bfbot: @tell arseniiv b_jonas: why? <-- probably because it wants to match on = at the beginning of an irc message text, and := is what that looks like in the irc line, it just fails to adapt for when there is :No such command. Try =help. lambdabot: Consider it noted. oerjan: still not fixed, i see :P oerjan: @tell arseniiv *irc protocol line lambdabot: Consider it noted. oerjan: the way ufu is acting overconfident, he better hope the schlock mercenary universe isn't big on cosmic irony. (it might not, given petey seems to get away with such stuff most of the time.) oerjan: then again, there's that other oafan who keeps being wrong oerjan: testing ho := hum hi bfbot: testing ho :No such command. Try =help. oerjan: = hum hi bfbot: No such command. Try =help. oerjan: testing ho := hum hi := mwa ha bfbot: testing ho := hum hi :No such command. Try =help. fizzie: Some sort of greedy match comes to mind. oerjan: it's unclear to me why it prints the part in between oerjan: oh wait oerjan: maybe it's interpreting what's before as part of the channel name and therefore prints it oerjan: well channel name and following " :" oerjan: i suppose it might be including the PRIVMSG part too fizzie: Bots should be open-sourced by default to avoid the guesswork. Although I guess that'd be spoilers. oerjan: what about := this then oerjan: hm it doesn't react to notice oerjan: it's not quite _that_ stupid :P fizzie: =echo x bfbot: .ACTION knows CTCP. fizzie: I guess we've got that +C mode anyway. oerjan: huh that wasn't censored oerjan: the extra part printed before : doesn't go through the dotting fizzie: Out of curiosity, if I say :a!b@c PRIVMSG #esoteric := does it copy the whole thing or just the end thing? bfbot: No such command. Try =help. fizzie: How about if I say :a!b@c PRIVMSG fizzie := instead. fizzie: (No reaction.) fizzie: How about if I say :a!b@c PRIVMSG #esoteric-blah := then? fizzie: (That worked.) oerjan: darn i was just about to try fizzie: But just because the bot's already on that channel, and most channels are +n. fizzie: What about :a!b@c PRIVMSG #gnjksdfgsdfg := which is a non-+n channel the bot isn't on? fizzie: (That worked too.) oerjan: fiendish fizzie: So it's not specifically the channels it's on, but it's specifically channels. fizzie: Maybe it's using something like (PRIVMSG #.*):=(.*) to match, and then some equivalent of $1:$(eval $2) to reply. bfbot: No such command. Try =help. fizzie: Uh, I'm not sure what happened there though. oerjan: testing #ho hum:= maybe bfbot: No such command. Try =help. oerjan: it gets deeper oerjan: testing #ho hum:= maybe := so oerjan: that got no answer. maybe it sent something to #ho fizzie: You should test with #esoteric-blah hum:= maybe := so or some-such. fizzie: (Nothing on #esoteric-blah though.) fizzie: Oh well, sleeptime. oerjan: what about #esoteric := like this bfbot: what about #esoteric :No such command. Try =help. oerjan: ok it needs the PRIVMSG oerjan: or something j-bot: oerjan: 2 oerjan: [ testing := echo hi bfbot: :[ testing hi j-bot: oerjan: testing := echo hi bfbot: :oerjan: testing hi oerjan: huh suddenly spouting extra : oerjan: oerjan: testing := echo hi bfbot: :oerjan: testing hi oerjan: so much weird oerjan: and oerjan: testing := echo hi bfbot: :and oerjan: testing hi oerjan: and oerjan testing := echo hi bfbot: :and oerjan testing hi oerjan: oerjan: testing :=echo hi bfbot: :oerjan: testing hi oerjan: testing :=echo hi bfbot: :testing hi oerjan: did it do that yesterday oerjan: maybe kspalaiologos did some change that didn't fix it oerjan: =echo hi oerjan: :=echo hi oerjan: ::=echo hi oerjan: : :=echo hi oerjan: testing more :=echo hi bfbot: :testing more hi zzo38: I don't know much of how UML is working, although I think some time ago I read about some program called Subterfugue which you can override any system calls how you want it to, but I have been unable to find it recently. oerjan: PRIVMSG testing more :=echo hi oerjan: wow i got a private message out of that oerjan: PRIVMSG #esoteric :=echo hi oerjan: [ PRIVMSG #esoteric :=echo hi j-bot: oerjan: PRIVMSG # esoteric := echo hi oerjan: [ "PRIVMSG #esoteric :=echo hi" j-bot: oerjan: |syntax error j-bot: oerjan: | "PRIVMSG#esoteric :=echo hi" bfbot: :oerjan: | "PRIVMSG#esoteric hi" oerjan: [ 'PRIVMSG #esoteric :=echo hi' j-bot: oerjan: PRIVMSG #esoteric :=echo hi oerjan: bfbot: =echo hi oerjan: this is the point where i should actually have known J oerjan: [ 2* 'a' j-bot: oerjan: |domain error j-bot: oerjan: | 2 *'a' oerjan: [ 'a' 'b' j-bot: oerjan: |syntax error j-bot: oerjan: | 'a''b' oerjan: [ 'a'+'b' j-bot: oerjan: |domain error j-bot: oerjan: | 'a' +'b' oerjan: [ 'PRIVMSG #esoteric :=echo [ 1' j-bot: oerjan: PRIVMSG #esoteric :=echo [ 1 j-bot: bfbot: |open quote j-bot: bfbot: | 1' j-bot: bfbot: | ^ j-bot: bfbot: |ask later oerjan: oh i c it has flood protection oerjan: just as well i found out before constructing the whole thing oerjan: i guess there are no obvious unprotected botloops, then oerjan: j-bot: [ 2 j-bot: oerjan: 2 oerjan: HackEso could trigger it, but not respond oerjan: =echo lambdabot: @run 1 bfbot: lambdabot: @run 1 oerjan: already ignored oerjan: ...i suppose someone already tested that zzo38: If it can be programmed to detect a possible bot loop then it could use NOTICE rather than PRIVMSG in the case where a bot loop is suspected, since that would prevent it, I think. (Assuming the bot is correctly programmed; if it isn't then it won't work but then maybe the improperly programmed bot should be kicked; once the programmer corrects it then they will rejoin) zzo38: Is the organization ID 36#UUID (1439221) for PostScript XUID in use? oerjan: zzo38: bfbot is improperly programmed but all the other bots seem to be immune to it oerjan: so we're letting it be while waiting for kspalaiologos to fix it. oerjan: ( HackEso wasn't immune until yesterday. ) zzo38: (I would guess that the numbers which are in use are much smaller than that, but I don't know. I do know that registration is no longer possible, because they no longer recommend using XUID.) oerjan: dr. rakethorn should know better than uttering the words "No trouble at all." zzo38: Who is Rakethorn? b_jonas: oerjan: you could put a sleep into the J statement so it doesn't get flooded b_jonas: [ 'please sleep 10 seconds then print this string'[6!:3]10 j-bot: b_jonas: |timeout b_jonas: [ 'please sleep 6 seconds then print this string'[6!:3]6 j-bot: b_jonas: |timeout b_jonas: [ 'please sleep 4 seconds then print this string'[6!:3]4 j-bot: b_jonas: |timeout b_jonas: [ 'please sleep 2 seconds then print this string'[6!:3]2 j-bot: b_jonas: please sleep 2 seconds then print this string b_jonas: that seems wrong b_jonas: oh well zzo38: I don't know if maybe some of the filters in my Farbfeld Utilities which I have not seen in other programs, might be included in Mathematica, such as the tensor product of two pictures. oerjan: b_jonas: oh i didn't think that J might have a sleep function oerjan: zzo38: girl genius character oerjan: [ 'fungot' fungot: oerjan: subtract ze two and ye have daylight hours? those people are nerds! j-bot: oerjan: fungot oerjan: j-bot's insistence on putting the nick means it can only trigger bfbot oerjan: maybe bfbot could do the sleep oerjan: =help str bfbot: bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot. bfbot: Commands: =str =def =undef =list =plist =doc. More help at https://esolangs.org/wiki/bfbot b_jonas: oerjan: even if there's no sleep function, you can just make a busy loop oerjan: =help =str bfbot: bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot. bfbot: Commands: =str =def =undef =list =plist =doc. More help at https://esolangs.org/wiki/bfbot b_jonas: in J that is oerjan: yeah but bfbot might work too b_jonas: it might, I don't know how brainfuck it's willing to run a brainfuck loop FireFly: fun li'l bug with the raw PRIVMSGs wib_jonas: =def 1str ++++++++[->++++++++<]>+.+.+. bfbot: Error: Name can contain only lowercase letters and digits. wib_jonas: =str 1s++++++++[->++++++++<]>+.+.+. wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' wib_jonas: =str 1s++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++<]<]<]<]<]<]<]<]<]>>>>>>>>>> ++++++++[->++++++++<]>+.+.+. wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' wib_jonas: =str 1s++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++<]<]<]<]<]<]<]<]<]<]>>>>>>>>>>>>>>>>>> ++++++++[->++++++++<]>+.+.+. wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' wib_jonas: =str 1s++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++<]<]<]<]<]<]<]<]<]<]<]>>>>>>>>>>>>>>>>>> ++++++++[->++++++++<]>+.+.+. wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' wib_jonas: =str 1s++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++<]<]<]<]<]<]<]<]<]<]<]<]>>>>>>>>>>>>>>>>>> ++++++++[->++++++++<]>+.+.+. wib_jonas: oh wait, that doesn't work wib_jonas: or might not, I'm not sure wib_jonas: how do you write a proper delay loop in brainfuck? oerjan: i'm thinking myname: what do you mean by a delay loop myname: busy beavers? wib_jonas: no, not that long wib_jonas: just want to get close to bfbot timing out the program and see how long it takes in real time wib_jonas: =str 1s++[->++[->++.<]<] wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' wib_jonas: =str 1s++[->++[->++[->++.<]<]<] wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' bfbot: ....... wib_jonas: =str 1s++[->++[->++[->++[->++.<]<]<]<] wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' bfbot: .............. wib_jonas: =str 1s++[->++[->++[->++[->++[->++.<]<]<]<]<] wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' bfbot: .............. "$&(*,.02468:<>@ wib_jonas: =str 1s++++[->++++[->++++[->++++[->++++[->++++.<]<]<]<]<] wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' bfbot: ....... $(,048<@DHLPTX\`dhlptx|............................................................................................................................................................................................................................................................................. wib_jonas: then this should work, and either I made a typo or it was too short wib_jonas: =str 1s++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++<]<]<]<]<]<]<]<] ++++++++[->++++++++<]>+.+.+. wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' wib_jonas: =str 1s++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++<]<]<]<]<]<]<]<]<]<] ++++++++[->++++++++<]>+.+.+. wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' wib_jonas: =str 1s++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++<]<]<]<]<]<]<]<]<]<]<]<] ++++++++[->++++++++<]>+.+.+. wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' oerjan: ^bf >->->>>>-->-[--<<[-<]+>++[-->++]-->++],[.,]!test oerjan: ^bf >->->>>>>>>>-->-[--<<[-<]+>++[-->++]-->++],[.,]!test oerjan: ^bf >->->>>>>>>>>>>>-->-[--<<[-<]+>++[-->++]-->++],[.,]!test wib_jonas: =str 1s++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++<]<]<]<]<]<]<]<]<]<]<] ++++++++[->++++++++<]>+.+.+. oerjan: ^bf >->->>>>>>>>>>>>>>>>-->-[--<<[-<]+>++[-->++]-->++],[.,]!test wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' oerjan: ^bf >->->>>>>>>>>>>>>>>>>>>>-->-[--<<[-<]+>++[-->++]-->++],[.,]!test fungot: ...out of time! oerjan: there you go, a binary counter wib_jonas: =str 1s+++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++<]<]<]<]<]<]<]<]<]<]<] ++++++++[->++++++++<]>+.+.+. wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' oerjan: wib_jonas: ^ wib_jonas: oerjan: nice wib_jonas: =str 1s++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++<]<]<]<]<]<]<]<]<]<]<] ++++++++[->++++++++<]>+.+.+. wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' wib_jonas: =str 1s++++++++[->++++++++[->++++++++.[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++<]<]<]<]<]<]<]<]<]<]<] ++++++++[->++++++++<]>+.+.+. wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' Lykaina: spamming the channel with brainfuck? wib_jonas: =str 1s+[->++++++++[->++++++++.[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++[->++++++++<]<]<]<]<]<]<]<]<]<]<] ++++++++[->++++++++<]>+.+.+. wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' bfbot: ........ABC fizzie: Maybe #esoteric-blah for the intermediate stages and #esoteric for the final results? bfbot: 0Q9n0kZWzxzH wib_jonas: bfbot sources: https://github.com/kspalaiologos/bfbot-repository oerjan: ^bf >->>>>>>>>>>>>-->-[<<[-<]+>++[-->++]-->],[.,]!test oerjan: simplified the binary idle loop a bit. alas the timeout of bfbot seems to be too small to work for this bfbot: a:oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :simplified the binary idle loop a bit. alas the timeout of bfbot seems to be too small to work for this oerjan: the fuck oerjan: another bug :P wib_jonas: nope, apparently that's not the sources, just the user-defined commands bfbot: :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :nope, apparently that's not the sources, just the user-defined commands kritixilithos: oh the unescaped \ does it oerjan: kritixilithos: i suspect one of your experiments in #esoteric-blah --- yeah bfbot: :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :kritixilithos: i suspect one of your experiments in #esoteric-blah --- yeah wib_jonas: seriously? kritixilithos: interesting oerjan: apparently :P wib_jonas: but there's oerjan: =echo \ wib_jonas: a cr and an lf bfbot: :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :a cr and an lf wib_jonas: how can the backslash wib_jonas: this bot is weird oerjan: (to demonstrate it here) oerjan: wib_jonas: we already knew it didn't treat backslashes right wib_jonas: yes I know oerjan: @tell kspalaiologos Your bot has even more trouble, try =echo \ lambdabot: Consider it noted. FireFly: that's a fascinatng bug bfbot: CXPxQgddhB-U bfbot: CXPxQgddhB-U bfbot: CXPxQgddhB-U wib_jonas: =str 0s++++++++[->+++++++++<]>+.+.+. wib_jonas: =def 0quine bfbot: ok, defined 'quine' wib_jonas: =quine wib_jonas: if the following loops, please stop it with: =def 0quine wib_jonas: =str 1s ++++++++++++++++[->+>++>+++>++++>+++++>++++++>+++++++>++++++++<<<<<<<<] >>>++++++++++.>>.++.<+++++++++.>++++.<++++.>---.<------.<<.+++.>>>>+++++.>+++.<++++++++++.>+.<----------.>--.<++++.------.<<<<+++++++++.>>>>-.++++.----.+++++++++++++.>++.<<<<<------------.>.+++.>>>>---.++++.<------.+++++.---------. wib_jonas: =def 1msg bfbot: ok, defined 'msg' wib_jonas: :PRIVMSG #esoteric,bfbot :=quine wib_jonas: =def 1quine bfbot: ok, defined 'quine' wib_jonas: =def 0msg bfbot: ok, defined 'msg' wib_jonas: =quine bfbot: :PRIVMSG #esoteric,bfbot :=quine wib_jonas: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: :PRIVMSG #esoteric,bfbot :=quine wib_jonas: =def 0quine bfbot: :PRIVMSG #esoteric,bfbot :=quine bfbot: ok, defined 'quine' wib_jonas: =undef msg wib_jonas: oerjan: I found a loop FireFly: a self-quine? nice.. FireFly: ah, hah int-e: ... wtf. wib_jonas: int-e: it's a new bug. apparently bfbot matches not only the latest := in the line, but also the latest :PRIVMSG , so you can make it think that the channel is #esoteric,bfbot and then it sends its reply there wib_jonas: there's also a different bug in bfbot about messages that end with a backslash, but that's not used here wib_jonas: https://adventofcode.com/2019/about simple programming puzzles in case you want to solve something wib_jonas: =str 1s. wib_jonas: did kspalaiologos just get scared of us? wib_jonas: or was this the imitation one? ais523: somehow I'd expect bfbot to have fewer bugs if it were actually written in BF ais523: that unescaped-backslash thing is really worrying, it makes me think that there may be a security exploit in there somewhere ais523: =echo $(hostname) bfbot: $(hostname) ais523: OK, at least it isn't a shell-escaping issue ais523: =echo $(hostname) \ bfbot: $(hostname) :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :hmm ais523: what sort of escaping is that? ais523: =echo test\r\ntest bfbot: testrntest ais523: =echo test\ test bfbot: test test ais523: =echo test\0test bfbot: test0test ais523: =echo test\\test bfbot: test\test ais523: it doesn't seem to escape anything but newlines and itself? ais523: =echo test\'test bfbot: test'test ais523: =echo test\"test bfbot: test"test ais523: =echo test\\\\test bfbot: test\\test ais523: =echo test\\\\\\\test bfbot: test\\\test ais523: =echo test \\\ bfbot: test \:ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :test ais523: I can't offhand think of an escaping mechanism that works like that ais523: or, hmm, do Makefiles escape like that? HackEso: make: *** No targets specified and no makefile found. Stop. HackEso: ​/hackenv/tmp ais523: `` printf 'all:\n\techo a b \\a \\b c d\\\n\te f' > Makefile HackEso: No output. HackEso: echo a b \a \b c d\ \ e f \ a b a b c de f ais523: `cat Makefile HackEso: all: \ echo a b \a \b c d\ \ e f ais523: OK, so Makefiles don't quite escape like that because they don't swallow the backslashes ais523: `rm Makefile HackEso: No output. ais523: (the backslashes mid-line, that is) wib_jonas: ais523: q strings in perl, sort of wib_jonas: yeah, it's pretty alien kmc: make love not files FireFly: it certainly exhibits some fascinatng behaviour, between those two bugs ais523: was the :=echo bug fixed yet? bfbot: :was the bug fixed yet? wib_jonas: FireFly: three bugs, the way I count ais523: actually I don't get where the leading : comes from when that bug is used wib_jonas: FireFly: finds := anywhere in the line, finds :PRIVMSG anywhere in the line, and mangles backslashes in the input bfbot: FireFly: finds := anywhere in the line, finds :No such command. Try =help. FireFly: oh aha wib_jonas: ais523: the part before the " :=echo" is taken as a channel name bfbot: ais523: the part before the " :No such command. Try =help. wib_jonas: =def +++++++++[->++++++++<]>+.+.+. bfbot: Error: Expected a number. wib_jonas: =str 1s+++++++++[->++++++++<]>+.+.+. wib_jonas: =def 1msg1 bfbot: ok, defined 'msg1' wib_jonas: pre :=msg1 post wib_jonas: hmm, maybe not then wib_jonas: but then how does :PRIVMSG #esoteric-blah,#esoteric :=echo foo work? bfbot: foo work? FireFly: I think it's because it expects "PRIVMSG foo :=echo bar", strips the :=echo and prepends a new : for the PRIVMSG reply FireFly: lol what wib_jonas: prefix :PRIVMSG #esoteric-blah,#esoteric extra arguments that the irc will ignore :this will be part of the reply message :=msg1 argument FireFly: that line PMed me wib_jonas: I don't get it FireFly: anyway wib_jonas: FireFly: yes, that part is correct, that's because if you send a PRIVMSG to bfbot, it has to PRIVMSG you back FireFly: ye, but it expects that it's replacing the :=echo with :, but really it's removing another :=echo and the prepending with : thus leads to a double : bfbot: :ye, but it expects that it's replacing the :=echo with :, but really it's removing another :=echo and the prepending with : thus leads to a double and the prepending with : thus leads to a double : FireFly: which is why it echoes back, I think wib_jonas: prefix :PRIVMSG #esoteric-blah,#esoteric nonsense :prefix :=eecchhoo argument bfbot: nnoonnsseennssee ::pprreeffiixx aarrgguummeenntt FireFly: ....what FireFly: that's uhh confusing wib_jonas: it looks like the part between the channel and the command is part of the input FireFly: oh is eecchhoo an actual command? wib_jonas: I defined it to print each character twice FireFly: I was very confused for a moment FireFly: righty wib_jonas: =str 1s,[.-,] wib_jonas: =def 1edcbhgon bfbot: ok, defined 'edcbhgon' wib_jonas: =edcbhgon esoteric bfbot: esoteric wib_jonas: =str 1s,[.-.,] wib_jonas: =def 1edcbhgon bfbot: ok, defined 'edcbhgon' wib_jonas: =edcbhgon esoteric bfbot: edsrontsedrqihcb. wib_jonas: prefix :PRIVMSG #esoteric-blah,#esoteric nonsense :prefix :=edcbhon argument bfbot: nonsense wib_jonas: =str 1s,[.+.,] wib_jonas: =efcdhiop esoteric bfbot: No such command. Try =help. wib_jonas: =def 1edcbhgon bfbot: ok, defined 'edcbhgon' wib_jonas: =def 1efcdhiop bfbot: ok, defined 'efcdhiop' wib_jonas: prefix :PRIVMSG #esoteric-blah,#esoteric nonsense :prefix :=efcdhiop argument bfbot: noopnostefnostef !:;pqrseffgijxy !abrsghuvmnefnotu. wib_jonas: =undef edcbhon wib_jonas: =str 1s,[.-.,] wib_jonas: =def 1edcbhgon bfbot: ok, defined 'edcbhgon' wib_jonas: prefix :PRIVMSG #esoteric-blah,#esoteric nonsense :prefix :=edcbhgon argument bfbot: nmonnmsrednmsred .:9porqedfeihxw .a`rqgfutmlednmts. FireFly: =def fftest ,[.,]!hello bfbot: Error: Expected a number. FireFly: can I do a define in a single line? FireFly: ah okay FireFly: do we know of the str slots are namespaced per user? or would I mess with others' expeirments if I play with it? wib_jonas: I suspect they aren't namespaced, but there are ten of them so you can just choose two numbers that we aren't using wib_jonas: and the str slots are temporary, they only matter until you define a command from them wib_jonas: the str slots are just there so you can define commands whose brainfuck source doesn't fit in a single irc message FireFly: I wonder if any of these bugs (like the backspace one) interact in any way with the persisting of commands wib_jonas: apparently the bot is optimized for commands more interesting than echo, in which case the source is likely almost always large wib_jonas: I don't know, you'll have to check https://github.com/kspalaiologos/bfbot-repository/tree/master/BRAINFUCKBOT_COMMANDS for that FireFly: not messing too much atm from phone, but it'd be interesting to try FireFly: also with the doc command as well FireFly: well that's fascinating FireFly: =doc sandbox bfbot: sandbox: abc FireFly: :::=doc sandbox bfbot: sandbox: abc FireFly: foo :=doc sandbox bfbot: Error: Invalid entry name. wib_jonas: fungot, the Giant promised an OotS strip for today, please post it fungot: wib_jonas: unless it's some crazy thick ethernet and/ or xscheme.el. kill the `*scheme*' buffer? i mea, the 10 items limit is annoying, though wib_jonas: FireFly: apparently fungot agrees with you about the 10 slots fungot: wib_jonas: or someone did use ga for icfp? :) htmlprag? wib_jonas: `olist 1188 HackEso: olist 1188: shachaf oerjan Sgeo FireFly boily nortti b_jonas wib_jonas: `thanks fungot fungot: wib_jonas: i've got this lego-based language sorted, i think i've seen it, but i HackEso: Thanks, fungot. Thungot. ais523: wib_jonas: that's an old OOTS comic ais523: as in, I saw it a few days ago ais523: did we really forget to olist it? wib_jonas: https://esolangs.org/logs/2019-11.html#liEd wib_jonas: you did olist it wib_jonas: I got confused ais523: the next one is due today, IIRC (it's a rare situation in which the date is listed in advance) wib_jonas: yes, that's what I said above to fungоt wib_jonas: sorry for the fake olist Sgeo: I bought a Switch. I kind of hate how closed off it is. I think I'll only use it for exclusive and/or non-PC games. Sgeo: Which Pokemon game would be good for someone who hasn't played the main series before? Sgeo: `olist 1189 HackEso: olist 1189: shachaf oerjan Sgeo FireFly boily nortti b_jonas FireFly: It's a pity the ecosystem is closed and stuff, yeah FireFly: I like the hardware/controls and portability Sgeo: I sort of like the portability in that if my living situation changes, I might not bother to buy a TV, but for now the portability isn't so needed kmc: I really like having a projector and this is one of the reasons kmc: it's a nice, small, bright, LED-lit, full HD one Sgeo: Nintendo seems a bit... evil in some ways, regarding how strictly they enforce copyright, incl. takedowns of videos (just saw Andi's tweets) FireFly: kmc: yeah, I was thinking the other night how I'm likely to opt for a decent projector over a TV.. being able to use the projected-at surface for other things is a nice feature too FireFly: tbh with the Switch I like playing in portable mode anyhow, I don't really use the dock so far kmc: FireFly: yeah kmc: I don't like having a huge TV in my living room staring at me kmc: a void in the room kmc: the projector sits on a bookshelf and is barely noticable when off kmc: we have one wall that's good for projection kmc: and my projector is bright enugh (plus surface close enough) that it's usable during the day with the regular blinds drawn, no blackout curtains needed kmc: it was pretty spendy but very worth it kmc: aside from that the home theater setup is cheap kmc: a pair of computer speakers on the projection wall kmc: I don't need super high fidelity sound or surround sound kmc: and a small form factor windows computer j4cbo: that’s what I did in college j4cbo: but we didn’t project on a wall, we got a super cheap 4x8 whiteboard thing kmc: was that shiny? j4cbo: it was but it was tolerable shachaf: My friend keeps telling me to get a ceiling projector. shachaf: kmc: I got a second bookcase and ordered a couch. It's going to be great. shachaf: I had so many books on the floor and table that as soon as I got the second bookcase together I filled it completely. zzo38: I would want a 4:3 TV set with the full controls on the panel on the right, like many old TV set. But also some stuff of new TV set, and some which I have not seen anywhere, too. kmc: shachaf: ceiling projector sounds like too much effort kmc: putting ours in a little Ikea book cubby has been really effective b_jonas: PRIVMSG #esoteric,#esoteric-blah :=echo Goodbye, cruel world bfbot: Goodbye, cruel world b_jonas: @tell kspalaiologos I am holding the irc nick bfbot ransommed. Fix the serious bugs in your bot and you're getting it back. lambdabot: Consider it noted. b_jonas: Is this too evil? fizzie: Why is it that escalators often have that green glow under the steps? Is it because of the eldritch energies powering them? zzo38: They put Christmas lights, because it is Christmas. kingoffrance: no, i take inanimate computer code hostage all the time kingoffrance: perfectly normal kingoffrance: i call it a "prize"; on land it is called "booty"; you might have a better term imode-ruby: b_jonas: wtf, does his bot actually just accept commands from anybody? fizzie: That's what bots typically do. It's just that there's a bug that can make it send arbitrary messages to arbitrary destinations, not just reply on the channel the command was posted on. arseniiv: raindrops on kittens and whiskers on roses… b_jonas: fizzie: that, and also it accepts too many things as commands, and so can get into loops too easily b_jonas: imode-ruby: yes, like fizzie says, HackEso, lambdabot and fungоt also accept commands from basically anybody imode-ruby: sorry, should've clarified what I meant by "commands". bot commands are fine. controlling the bot via PRIVMSG is.. not fine. fizzie: AIUI, it wasn't really a matter of controlling the bot through any sort of intended control commands, more tricking it into messaging things to NickServ. imode-ruby: mhm. if you can PRIVMSG anything, you can hijack it. b_jonas: FireFly: sorry, you said you wanted to experiment with the bot later, but now you can't fizzie: BT has this thing called "InLinkUK", it's like a digital advertising sign they've installed on sidewalks + free wifi access point + some sort of tablet you can use in kiosk mode for "information". Except it had crashed, and the advertising screen was saying "Ubuntu 15.04 adl-uk-002661 tty1" and "adl-uk-002661 login: _" fizzie: I like it when screens like this are showing things they shouldn't be showing. kmc: me too kmc: https://www.reddit.com/r/bayarea/comments/e4so9b/for_all_you_programmers_bart_at_least_the_station/ kmc: the farecard readers on the new MUNI trains run embedded Windows kmc: I saw one of them crashed to the desktop screen once, start menu and all oerjan: oerjan: I found a loop <-- wait, it sees its own messages? i thought that didn't happen no matter who it sends to fizzie: You do if you send to yourself. shachaf: `u 5 w HackEso: u? No such file or directory shachaf: `h 5 w shachaf: What was it? oerjan: shachaf: `t hth HackEso: t? ¯\(°​_o)/¯ oerjan: (i renamed it for keyboard pressing shortness) shachaf: What does that stand for? HackEso: u? ¯\(°​_o)/¯ fizzie: "top"? shachaf: Why is t shorter than u? shachaf: `t 5 w HackEso: 2/2:ity makes double dactyls quite gaudy and trite. \ cut elimination//The cut-elimination theorem states that any Prolog program written using the cut operator ! can be rewritten without using that operator. \ nvd//nvd is what Taneb calls himself when he wants to feel professional. oerjan: (of course my muscle memory for how to use ` pretty much means i don't make use of the simpler typing, but there you go) fizzie: Do you actually need `t for 5 w? oerjan: ProofTechnique: hey you're here! oerjan: oh the note mentions ProofTechnique: Helloerjan! shachaf: oerjan: Aha. But deadkeys are scow. fizzie: IMO, with a compose key, compose-`-? should compose ` onto absolutely anything, using a COMBINING GRAVE ACCENT. But it doesn't, here. shachaf: fizzie: Can Compose enter multiple code points? oerjan: fizzie: i don't think so fizzie: I don't really know. Though I can type a t̀ by starting with a t, then holding down ctrl-shift and typing 0300. But that's the urxvt code point entry feature. oerjan: `5 echo hi HackEso: 1/1:hi \ hi \ hi \ hi \ hi oerjan: hum i guess that proves nothing fizzie: `` 5 'echo ho' # it's christmas HackEso: 1/1:ho \ ho \ ho \ ho \ ho shachaf: `t t 5 t w HackEso: 1/1:bleen//Bleen is the color of the ocean and the trees. \ i//I SIGNIFICAT NVMERVM VNVM \ burma//Burma: Ask Bike \ nth//nth is not that helpful \ nooooodle//Noooooodles are the invention of the Chinese. They were brought to Europe by Marco Polo, a distant ancestor of Taneb. oerjan: Bike is not here though. at least by that nick. fizzie: Where did I see a Burma-Shave thing recently? Maybe a random xkcd. fizzie: There's one in https://xkcd.com/491 but I think it was something else instead maybe. ProofTechnique: I wonder if anyone's ever done a whale-themed cover of Jolene. oerjan: Jooooowoooowwooooowwooo... oerjan: ProofTechnique: feel free to implement the obvious /hackenv/bin/whale command hth ProofTechnique: That's a first int-e: The question "Are you whales from Scotland?" pops into your mind for no discernably reason. int-e: happy to share int-e: The good thing about terrible jokes is that they're easy to remember ;) oerjan: oh it's gone oerjan: because if not, i think there was another "fascinating effect" involved in bfbot's response to that oerjan: oh there was a logic to the naming oerjan: Is this too evil? <-- really really bad judgement at the very least. oerjan: and a horrible precedent for this channel. oerjan: and don't ask me if it's even legal. oerjan: admittedly the bot probably needs to be kept off until fixed. oerjan: b_jonas: you could have phrased that a lot less confrontational, though. zzo38: If you do not try to register it, I do not have a problem with it since if they want to register it themself then they can do so and use NS GHOST to force a disconnect oerjan: zzo38: except that's exactly what he did zzo38: Yes, but I think that isn't what should be done. Instead just use a persistent connection, I think, is better oerjan: zzo38: i am confused what problem you are thinking that solves oerjan: the problem is that bfbot was online, completely abusable, and its owner wasn't. oerjan: and b_jonas used its abusability to get it disconnected. oerjan: by a method which required him registering it. i'm not sure whether another would have worked. zzo38: Would it work to only temporarily register it? zzo38: If so, then that is what should be done. oerjan: oh he also set nick protection to prevent it from reconnecting, i think. oerjan: which is the thing that cannot be done temporarily, i guess. zzo38: If it automatically reconnects, that isn't your fault. If it tries to rejoin the channel, then you can add a ban and then remove it later. If it does a wrong thing by a private message, filter them out on your client. Other than that, I think just leave it. oerjan: zzo38: the thing is that it was so abusable that a person could use it against a third party zzo38: That isn't up to you, though. Just let it; the third party can filter it out themself if they do not want it. zzo38: But if you are really concerned, I suppose notify the server operator they can decide whether or not to do anything about it. oerjan: also, it was on #esoteric-blah which has no ops zzo38: If it is a channel with no ops then just it be on there. oerjan: (well, it has staff so we could ask FireFly i guess) oerjan: oh wait it's freenode-staff which isn't the same thing. oerjan: (just a dummy account to hold channels i think) zzo38: I think you should not interfere other people's channel if it can be use on a channel that has no ops then it should just let be on there, and if you do not want to receive their messages then you can filter in the client side. If it causes problems with the server, then the server operator should learn about it in order to remove it. oerjan: @tell kspalaiologos I see b_jonas may have gone a bit too far to quit your bot. it was _really_ unsecure though (which is how he could). lambdabot: Consider it noted. oerjan: trying some de-escalation zzo38: If they do not want any channel operators then should not have any; unfortunately Freenode doesn't have the channel with + prefix to indicate this explicitly. They should, in order that it can easily be indicated if you want + or # zzo38: I think is strange that the /proc/*/fd/* pretend to be symlinks but don't really work like symlinks. It seem like it would be like a "special link" instead? kmc: in what way don't they act like symlinks? zzo38: I think they can refer to deleted files and to anonymous stuff, and symlinks can't kmc: is it because they may refer to anonymous things? kmc: keegan@localhost:~$ ls -l /proc/self/fd | grep pipe kmc: l-wx------ 1 keegan keegan 64 Dec 2 21:29 1 -> pipe:[6737388] kmc: wonder what that number means shachaf: Can you distinguish between a deleted file and a link to a file ending in ' (deleted)'? kmc: you mean without a race condition? shachaf: I mean at all, I think? kmc: well you could try to readlink then open shachaf: If you have a program that opens /foo, and you delete foo, /proc/pid/fd/n will be a link to '/foo (deleted)' kmc: but I guess you may have both files kmc: both '/foo' and '/foo (deleted)' shachaf: But how can you tell whether a program just opened a file with that name? shachaf: Ugh, I hate how much of UNIX is stringly typed. shachaf: The whole /proc thing is a mess. kmc: does stat /proc/$PID/fd/$N tell you anything useful? kmc: /proc isn't even UNIX kmc: it's a linux thing intended for quick hacks in kernel development that just grew and grew shachaf: Well, that's fair. shachaf: How did ps work back in the day? kmc: BSD also has /proc but there's not like a standard for what's in these things kmc: i think it even has a linux-emulating procfs as well shachaf: There isn't a POSIX-style standard, but that's not what I care about. kmc: i think by parsing /dev/mem kmc: really. kmc: and so ps was setuid shachaf: The annoying thing is that even if I port my program specifically to Linux, I have this terrible ABI. shachaf: The system call ABI is pretty good. Things like ioctls are OK? And /proc is a mess. zzo38: There are problems with /proc, although I think it is because they treat the files in it as files and symlinks and so on even though it isn't like that. Add a new type for "special entries" and then you can avoid such problem. shachaf: And that's not to mention the userspace ABI, which involves parsing things like /etc/passwd and /etc/resolv.conf which are sort of specified. kmc: ioctls are not okay kmc: ioctls are like syscalls only with minimal oversight on whether they are at all well-designed shachaf: Sure, but at least they have an ABI at all, generally. shachaf: Instead of parsing text which was mostly meant for debugging. shachaf: kmc: Do you like io_uring? kmc: what's that shachaf: I don't see anything different from stat. shachaf: Maybe you can open the file and fstat it and compare the inodes or something. shachaf: It's the new Linux asynchronous I/O API. shachaf: and maybe asynchronous everything API?? shachaf: https://lwn.net/Articles/776703/ shachaf: You have a request and response ring buffer, and you send the kernel requests and get responses. shachaf: If you can send it requests fast enough, you might never have transitions to ring 0 at all. shachaf: You write to your buffer in your thread and it reads in its thread on another core. kmc: but you can also call into the kernel to block on it? kmc: this is how high performance network drivers have worked forever kmc: if you're doing low latency infiniband or something on linux then you don't go through the kernel at all kmc: you write into a ring buffer in the card's address space shachaf: You can also call into the kernel, yep. shachaf: This is the reasonable way for things to work, obviously. shachaf: why does c++ have copy constructors given that copy constructors are scow shachaf: is there any use of the std::vector copy constructor that isn't a mistake, anyway kmc: shachaf: historical reasons kmc: the language was designed around value types / unboxed objects / whatever you want to call them kmc: but they hadn't worked out that move semantics are the way to make that work nicely kmc: moves + an explicit clone() method seems much nicer to me kmc: though this depends on a certain return-value optimization kmc: but everything in C++ depends on optimization for good performance kmc: there are probably some cases where the copy constructor performs better kmc: at least, i think there are some cases for operator= kmc: which is a closely related concept kmc: but operator= has an old object to (partially) dispose of, and Foo(const Foo&) doesn't kmc: all this is setting aside the question of whether overloadable *move* constructors are also a mistake kmc: which I think is much more debatable shachaf: Man, everything about the STL is scow. shachaf: Every time I try to understand what's going on there I'm miserable. kmc: Rust has no operator= overloading, if you assign into a variable whose type has a destructor, then the whole thing is destroyed before the new value is moved in shachaf: And the specification requires things to be low-performance. And the implemetations aren't predictable or fast. kmc: which is plausibly less efficient in some cases, I guess kmc: but I'm not sure how often anyone writes an operator= which does such things shachaf: That sounds pretty plausible. Maybe an even more plausible thing would be to do away with destructors entirely. kmc: then how will I have RAII? kmc: RAII is tg shachaf: is it actually oerjan: `? raii HackEso: RAII means you deallocate in the destructor. There is no 'initializer' involved. kmc: that is a profoundly useless definition shachaf: RAII means you have destructors, I think? oerjan: `dowg raii HackEso: 10903:2017-05-18 slwd raii//s,allocate in the constructor and ,, \ 5854:2015-07-21 learn RAII means you allocate in the constructor and deallocate in the destructor. There is no \'initializer\' involved. \ 5853:2015-07-21 le/rn RAII/RAII is Resource Allocation in the constructor... wait wait uh... Is uh, Initialization kmc: I think the important *concept* is that resources of all sorts can be modeled by objects in the language, in such a way that having a value of that object type guarantees that the resource is available with a certain set of operations on it kmc: basically the idea that constructors and destructors make sense to manage not just memory but stuff like open files, mutex acquisitions, etc kmc: and this is a good fit for affine types because of course a lot of non-memory resources cannot be copied arbitrarily kmc: as well as a lot of memory-related resources such as uniquely-owned objects shachaf: But constructors aren't the important part, it's destructors. A constructor is just a function that returns a value, but destructors have special language support. kmc: in C++ there are some other reasons to have constructors as a language feature kmc: but Rust doesn't need them shachaf: But also is this actually a good idea? shachaf: A mutex is pretty different from memory. shachaf: And RAII isn't even particularly good at managing memory, I think? kmc: *shrug*, it makes for a very convenient and safe API shachaf: In particular RAII helps you write a program with zillions of balanced mallocs and frees. shachaf: But I'm not sure that's a particularly good way to write a program? shachaf: If you do something like arena allocation, then destructors don't even make that much sense. You don't want to loop over the arena and run all the destructors of all the objects. kmc: usually not, no kmc: so don't use arenas with types that have destructors? kmc: but if you do, the right thing will still happen shachaf: Only if you loop over the arena, which presumably isn't even part of the arena API. shachaf: Since arenas are all about freeing a bunch of things all at once. shachaf: How much does RAII give you over something like Python's "with locking_lock_thingy(mutex): ..."? shachaf: It gives you the ability to move a lock_holder_object_type_t to a function, which is a way of telling it that you're holding the lock and it's responsible for freeing it. shachaf: Maybe that's good? But it seems pretty niche at best, and possibly makes for harder to follow control flow. kmc: i think passing off responsibility for a resource through moves seems pretty useful kmc: but i'm kind of tired and not putting a lot of thought into coming up with compelling examples kmc: i have a lot of different things on my mind today :/ shachaf: I think you give up on something meaningful by having invisible control flow happen in what seems like an assignment or value passing. shachaf: A "lock_holder_type_t holder{lock};" isn't really much of a value, it's control flow, and it's not clear that treating it as a value makes programs clearer. Maybe? shachaf: Anyway that makes sense too. olsner: RAII as a concept has always annoyed me, it's weird to reuse something that is otherwise "setting things to their initial value" to mean "acquiring resources" shachaf: RAII isn't really about constructors, and is a bad name. shachaf: "RAII" is also a bad name. olsner: yes, it's more about destructors anyway - a hack where you can use destructors for timing release of "other" resources (except e.g. memory that is more naturally part of an object or its value) b_jonas: oerjan re sees its own messages: it doesn't see its own messages on a channel, but does see them if it explicitly sends to itself by nick kmc: shachaf: the fungus fair is on sunday kmc: fungot: the fungot fair is on sunday fungot: kmc: do you have the parens the important part for me. b_jonas: ooh nice, they extended the cold weather for three more days b_jonas: oerjan: ok, thanks for the feedback b_jonas: oerjan re "even legal" => more like, may get me banned from freenode b_jonas: zzo38 re add a ban => doesn't help at all, you can still abuse the bot without it joining anywhere b_jonas: I abused it in private message and made it send to a -n channel shachaf: Wasn't RAII invented for exception handling anyway? b_jonas: kmc /proc/*/fd/* not symlinks => if you open them, you get an actual dup of the same file description, with a shared seek pointer shachaf: What a ridiculous API. shachaf: I like how everything on Linux relies on /proc and /dev and /sys being mounted in particular places but that's only a convention. b_jonas: that it refers to a deleted file is just slightly weird compared to that kmc: b_jonas: ah kmc: i was wondering whether it might do something like that, as well shachaf: It's not even particularly useful in the Plan 9 way where you can run a program with a fake /proc that you proxy calls to, which no one does. b_jonas: zzo38 special entries => even if the type in lstat/fstat doesn't distinguish them, you can call statfs/fstatfs to tell whether a file is on /proc . There's even a command line interface in coreutils now, b_jonas: ``` stat -fc "%T %n" /hackenv /proc HackEso: hostfs /hackenv \ proc /proc shachaf: At least Linux is getting pidfd soon, I think. shachaf: That'll be something. b_jonas: shachaf re parsing text which was mostly meant for debugging => everything ps prints was meant for debugging. normal programs shouldn't invoke ps and find something out automatically to do normal operations. shachaf: b_jonas: I'm talking about parsing text in /proc. b_jonas: shachaf: yes, sometimes I want to make a copy of a whole vector. it typically happens with trivial copy constructors, but can happen even with nontrivial ones. b_jonas: and it's not like copying short vectors is slow. shachaf: b_jonas: Sometimes you want to make a copy of a whole vector, but you could instead do that by calling a function to copy it. shachaf: Having it as an implicit thing when you call a function or whatever is ridiculous. shachaf: It requires a malloc call so it's not like it's fast. b_jonas: shachaf re zillions of balanced mallocs not a particularly good way to write a program => yes, and C++ lets you have objects with trivial constructors, and it can optimize those constructor calls away to a memcpy or nothing everywhere. shachaf: The point is that the argument for RAII is that it helps you balance your mallocs and frees etc., and if that was what you wanted to do anyway, it might be pretty good, but if it's not such a good strategy in the first place, then RAII is less helpful. b_jonas: "At least Linux is getting pidfd soon, I think." => it already has pidfd I believe, but maybe I'm desynced with reality a bit b_jonas: shachaf: what do you want to do implicitly each time you call a function with your vector? do you want a compile time error? that's fine, that's what unique_ptr is for. do you want a pointer plus length without refcounting or any other mechanism to make sure it points to a valid vector? that's bad, it's a thing that's perfectly possible in the core language, but the C++ standard library messed up and b_jonas: only has std::string_view and the horribly overengineered std::span for now. shachaf: An error is OK, sure. shachaf: A copy of the struct seems OK? I guess C++ people wouldn't like that so they can ban it. shachaf: A copy of the data is ridiculous. b_jonas: shachaf: on the other hand, sometimes you don't need top performance, but just want to write a program easily without making stupid mistakes or thinking too much about allocation, in which case the refcounting and automatic frees are useful, and you may still want to write your program in C rather than in a language that can't detect type errors in compile time or in a lazy language like Haskell shachaf: Reference counting is obviously ridiculous. b_jonas: shachaf: there can be different types for each of those b_jonas: no, reference counting is not obviously ridiculous. it's an overkill for MOST things that you do, needed for very few things, that I admit, but it also doesn't hurt too much in many applications shachaf: Instead of reference counting you can just manage the lifetime in some reasonable way. b_jonas: I write a lot of throwaway short programs these days, and given that they take five seconds or even more to run, finding type errors early can help shachaf: For example, allocate at the beginning of the program and never free. b_jonas: allocate at the beginning and never free => that's the easiest thing, you can do that in C++ or basically any language b_jonas: you don't have to use a std::vector for everything shachaf: In fact I don't want to use it for anything. b_jonas: you don't have to use it for anything in your code either shachaf: Every time I look in /usr/include/c++/ I decide that the STL is scow. shachaf: It's all incomprehensible. shachaf: Anyway, you can make types for all these things, but the language and library shouldn't be working against you by implicitly doing the wrong thing. shachaf: If your program runs for five seconds, exit_group is certainly one of the best memory management strategies. zzo38: I have read about pidfd in Linux. I had a similar idea, although mine was a bit different; you can add the constant PIDFD to a file descriptor of the process's directory in /proc and use the resulting number wherever a process ID is expected. b_jonas: zzo38: the point of pidfd is that there's a flag on fork to give you an open file descriptor to the pidfd handler, so there's no file system muckery at all b_jonas: no messing around in /proc for something that doesn't need it b_jonas: oh hello ais523 b_jonas: shachaf: file seconds or longer. at file seconds already I want the type errors early. b_jonas: but yes, there's a point in that b_jonas: I don't need to release memory during those programs shachaf: At least if you fork you don't need to worry about race conditions since you're the parent. b_jonas: though I do want to destroy a few resource-holding objects that hold something other than memory, such as file handles zzo38: b_jonas: Yes, that is good too (although I think it is for clone() and not fork(); fork() has no flags), but I think what I read is that it is the same as the directory in /proc though, so you can use that to get a file descriptor for another process. b_jonas: shachaf: while you're the parent, yes. but how do you tell to some other processes which process that is? b_jonas: those other processes may want to send signals or whatever, even after your process (the parent) exits shachaf: Sure, but you can open /proc/pid and send them the fd. zzo38: Other than the process ID, if you have a file descriptor then could you use a SCM_RIGHTS message to transmit it to other processes? b_jonas: zzo38: yes, or have other children inherit it zzo38: b_jonas: Yes, if you are spawning them yourself zzo38: Anyways, what the difference is in what I read they were doing in Linux and what my own idea was, is that my own way doesn't have a separate system call for sending a signal to or otherwise deal with other processes by the file descriptor instead of process ID; you just add together PIDFD and the file descriptor, to make a number usable where a process ID is expected. b_jonas: definitely SCM_RIGHTS, unless you're golfing for IOCCC, in which case passing file descriptors with sprintf(name, "/proc/%d/self/%d", parentpid, parent_pidfd); pidfd = open(name, 2, 0); is easier. b_jonas: zzo38: oh yeah, you mentioned that. but I find that a somewhat dangerous idea, putting the flag in the process id argument itself rather than into separate flags b_jonas: I don't have a definite example for why that's a bad idea, I just have the feeling that it could cause weird bugs, including possibly security bugs, in some programs zzo38: I thought of that, and that is why the largest valid process ID has to be less than PIDFD-1. zzo38: (Although there might be other things I have not thought of, but as far as I know, I cannot think of them) shachaf: Ugh. Can all y'all just scrap half of Unix and make a good system call API? zzo38: shachaf: I had idea of Plan10 which is sort of like that, although you have to scrap less than half of Unix because some things required for compatibility with Unix; the rest can be implemented in user libraries so need not being system calls (some of them would use new Plan10 system calls which are not Unix system calls, in order to emulate them). shachaf: zzo38: What if I don't want compatibility with Unix? shachaf: Or at best I want it only for an emulation layer like WSL. ais523: shachaf: have you seen WASI? you probably need more system calls than that for a full OS, but it seems to have the general right attitude shachaf: ais523: Well, I want it to be the actual OS interface, for actual native code, and without a web browser or some ridiculous thing running in between. zzo38: Some things would only be compatible if things are set up to do such thing anyways; if your program exports a function called "plan10main" then those things are not automatically set up. shachaf: The goal is simplifying things, not adding layer and layers of wrappers. shachaf: But maybe the API itself is good? zzo38: (If your program doesn't include "plan10main", then the one in the library is used, which sets up Unix compatibility and then calls main.) zzo38: Use a library without Unix compatibility if you do not want it though, I suppose, is also possible. shachaf: It seems likely that all syscalls should go through something like io_uring, since how often do you want to do a ring transition for each one separately? shachaf: The actual WASI API might be reasonable? What's better about it than Linux? zzo38: I don't know what is io_uring shachaf: zzo38: https://kernel.dk/io_uring.pdf b_jonas: and I want compatibility with a lot of existing programs that I use and I don't want to rewrite, so I use Linux. (and Windows at work.) shachaf: That article maybe isn't the best introduction. b_jonas: but sure, experiment with research OSes if you want, someone has to do it so that 30 years from now, we have an infrastructure that's only 30 years obsolete, not 50 years obsolete zzo38: b_jonas: It is why my idea of Plan10 has the compatibility mode (much of it is implemented in user libraries, but some stuff would be part of the kernel). b_jonas: zzo38: will you want a new main OS interface every 15 years, and will you have three different compatibility layers 30 years from now when you add the fourth one? b_jonas: with existing large programs using all of them mixed and matched through libraries obviously b_jonas: back in an hour shachaf: b_jonas: Permit programs to use only one of the interfaces. shachaf: Just like Windows supported either Win32 or POSIX, but not both at once. zzo38: b_jonas: If the author of a program wishes to use multiple libraries that is up to the author of those programs. I should think the kernel itself would not have three different compatibility layers and new main OS interfaces, if it is designed properly. ais523: shachaf: I don't think WASI has a mandatory dependency on WebAssembly, although obviously it was designed for that use ais523: also, WebAssembly doesn't require a browser, it's just a bytecode language that can have small non-browser-dependent interpreters written for it (and a few of those exist already) zzo38: (Of course, Unix programs which export a symbol called "plan10main" will not work when compiled for Plan10, but that is unavoidable. If you install an emulator then you might even be able to run the programs directly though (rather than recompiling them for Plan10), which would work; however, the emulators are not part of the core system, but just a feature of the core system to allow the possibility to install emulators.) ais523: zzo38: why not use a character in the symbol name that isn't valid in a UNIX program? zzo38: ais523: I know of that, and I wanted to see if there is a library to execute WebAssembly programs from a native C program. ais523: zzo38: I'm not sure whether any of the existing interpreters work as a library, even if none do it should be easy to adapt them though zzo38: ais523: Because the C compiler will not accept it. Anyways, it is the C library which causes the program to call main() when it starts anyways, I think? zzo38: (So the kernel doesn't need to care what it is called.) ais523: won't the C compiler need to be modified anyway to produce programs for a new OS? ais523: but yes, in most implementations, main is called by an object file in the standard library, normally called something like crt0.o ais523: IIRC it isn't in libc itself, but a separate standard library zzo38: Probably, but you will not need to modify the files which change how the program is parsed, I should think. ais523: out of interest, why do you want a different main method? so you can give it different parameters? ais523: …now I'm wondering whether C++ object files mangle the name of "main" or not zzo38: That is one of it, yes (there are a few additional parameters), but also for compatibility with UNIX. ais523: well, most C implementations let you give a function too many parameters without issue ais523: that's one of the reasons why caller-cleans is a more common calling convention than callee-cleans ais523: (IMO callee-cleans is much better for a number of reasons) ais523: so why not use the same entry point for plan10 programs and posix programs? zzo38: Because the default settings for Plan10 are not compatible with POSIX. zzo38: (The default implementation of plan10main sets up some stuff required for POSIX compatibility and then calls main.) ais523: what sort of settings are these? things like locale? zzo38: No; stuff such as that in POSIX, you will receive a SIGPIPE signal which will terminate the process for writing to any broken pipe, and so on zzo38: (Sometimes that behaviour with SIGPIPE is wanted, but often only for file descriptor 1. So if you are not using the POSIX compatibility then your program can enable SIGPIPE for file descriptor 1 only, in that case.) ais523: oh, I see, for file descriptors inherited from the parent process there's no easy chance to configure that ais523: (for file descriptors opened by the program itself, it would make sense for the API that opens it to specify how you wanted signals to be configured) shachaf: Are file descriptors a good system? ais523: I can see an argument for file descriptors 1 and 2 shachaf: It's kind of nice how you can have something like a perf_event_open fd, and either read() or mmap() it, just like anything else. ais523: shachaf: you need /something/ to be able to refer to an open file, and having an "open/closed" status in files rather than being stateless seems to be the right option because it makes it much easier to reason about potential race conditions shachaf: Rather than a bunch of special-case system calls. zzo38: ais523: Yes, that makes sense. The POSIX compatibility API (which is a user library function) would call the system call and tell it to enable SIGPIPE. shachaf: But sometimes people try too hard to fit things into that API. ais523: WASI came up with an improvement, though, where file descriptors are random numbers rather than being sequential zzo38: (possibly some setting in the C library which the default plan10main would set up, or that somehow checks whether or not plan10main has been overridden if that is possible) shachaf: Sequential file descriptors are clearly scow. shachaf: Windows has HANDLEs, which I guess are pretty similar. shachaf: (To random descriptors.) shachaf: I guess they're not the same for various reasons. olsner: I consider HANDLEs and file descriptors both just handles for kernel objects olsner: (windows has some unrelated things that are typed HANDLE but aren't actually kernel objects though) olsner: e.g. GDI handles are in a different namespace, and some are just pointers for things that pretend to be or once were kernel features but are implemented in user space shachaf: It probably makes sense to be able to have "system calls" implemented in userspace, as Windows does. shachaf: (Though maybe that's not really compatible with the ring buffer thing I was talking about before?) olsner: it's a good way to give you freedom on the kernel side to change your system calls zzo38: If the ABI and ISA fields in the ELF header are incorrect, then the kernel should see if an emulator for the specified ABI/ISA is loaded (the emulator is just a kernel module, and the core system does not include any emulators), and if there isn't one then trying to execute that file is an error. shachaf: I'm a little skeptical that things like POSIX are particularly good. shachaf: I'd rather have minimal and stable OS ABIs and then maybe a library on top that things can link to if they want to be portable. zzo38: I do think there are some problems with POSIX, and also some problems with Windows, and also other systems. zzo38: Wikipedia says that the ABI field in the ELF header "is often set to 0 regardless of the target platform". Unless the program is for System V, such files will have to be corrected in order to run on Plan10. shachaf: zzo38: Is Plan10 some sort of banana pun? zzo38: (This correction can be made without recompiling the program; you only have to change one byte in the executable file.) zzo38: shachaf: That is not the intention; the name is similar to Plan9 but is different. wib_jonas: shachaf: programs only use one interfaces => then all large programs will stick to the older interface because that's what the libraries use. just like everyone still uses gtk+ version 2 rather than the incompatible version 3, but in a larger scale. wib_jonas: I'd prefer to keep most of the unix api, because most of it is sane, and just improve the few parts that are bad. wib_jonas: but I admit I was a bit too sarcastic about compatibility wib_jonas: and you can mix windows API with POSIX all the time on windows, although it's ugly because the POSIX API really doesn't match how windows works, and you need some conversion functions, but I still do it sometimes shachaf: wib_jonas: You can port programs to new interfaces just like you can port them to new OSes. shachaf: If programs are just using the OS ABI via libraries, it's even easier to port, because you can just port the libraries (like libc and SDL). wib_jonas: ais523: main isn't mangled, but the C++ compiler treats in somewhat special way at compile time, and then the linker treats it specially at link time wib_jonas: in particular, on most platforms the compiler emits main as an extern "C" function, even if you didn't explicitly define it as such, and it has an implicit return 0, and IIRC there was one or two more things special about it, plus the linker inserts constructors and destructors to it somehow wib_jonas: or so I believe, but I'm not quite sure about this wib_jonas: shachaf: no, windows HANDLEs are mostly sequential numbers too. they're not guaranteed to be sequential, unlike on unix, but they mostly are. wib_jonas: or so I believe, but again, I'm not sure in this shachaf: Aren't HANDLEs generally opaque? wib_jonas: shachaf: opaque, yes. opaque numbers that are typically sequential, but the OS gets to decide that, and may give you any numbers it if it feels like. shachaf: I thought they were sometimes pointers or other things. ais523: wib_jonas: IIRC in C++ main isn't allowed to be recursive (although in C it is) ais523: this is a weird limitation because it should be easy just to imply a wrapper around it in the compiler if the compiler couldn't handle a recursive main HackEso: dc is short for "dump core". (try it out yourself: dc -e '[') shachaf: `` dc -e '[' HackEso: No output. shachaf: I want a program to SEGV, any options? wib_jonas: `perl -ekill 11,$$ HackEso: No output. wib_jonas: ``` perl '-ekill 11,$$'; echo $? HackEso: bash: line 1: 54 Segmentation fault perl '-ekill 11,$$' \ 139 wib_jonas: ``` perl '-eunpack"p",0'; echo $? shachaf: That's a fake SEGV. ais523: `! c return *(int *)0; HackEso: ​/hackenv/interps/gcccomp/gcccomp: line 53: 68 Segmentation fault /tmp/compiled.$$ ais523: can't get much more real SEGV than that ais523: also, that "$$" is interesting, looks like there was an attempt to swap in the PID, but it still works anyway due to the nature of /tmp shachaf: I wanted to test the program "catchsegv" that I just found out about. shachaf: But now I know how it works so I'm less curious. shachaf: (It uses LD_PRELOAD to set up a signal handler.) wib_jonas: oh, that reminds me wib_jonas: ``` rm -v /hackenv/bin/culprits-ng HackEso: removed '/hackenv/bin/culprits-ng' wib_jonas: I created that long ago, but I don't use it shachaf: `before HackEso: ​/hackenv/bin/culprits-ng//#!/bin/sh \ exec hg log -l 512 --template "{desc}\0" -- "$@" | perl -0ne '/^<([^>]*)>/ and print"$1 "' wib_jonas: I almost never want to look up just the users who modified a file, without other parts of the revision log fizzie: `culprits ../bin/culprits-ng HackEso: wib_jonäs oerjän oerjän b_jonäs b_jonäs b_jonäs b_jonäs b_jonäs fizzie: Not 100% sure how culprits-ng differed from the regular one, other than the limit, no scowrevs, and no no-ping. FireFly: ...scowrevs? shachaf: `` hg log -l 512 --template "{desc}\0" -- ../bin/culprits-ng | perl -0ne '/^<([^>]*)>/ and print"$1 "' HackEso: fizzie b_jonas b_jonas b_jonas b_jonas shachaf: `` hg log --removed -l 512 --template "{desc}\0" -- ../bin/culprits-ng | perl -0ne '/^<([^>]*)>/ and print"$1 "' FireFly: `` cat $(which culprits) HackEso: wib_jonas oerjan oerjan fizzie jeffl35 fizzie evilipse b_jonas b_jonas b_jonas b_jonas b_jonas HackEso: hoag "$@" | awk '{print substr($1,2,length($1)-2)}' | xargs -d'\n' wib_jonas: fizzie: no noping, no scowrevs, and different implementation. wib_jonas: saner implementation, I hope shachaf: What does it have to do with sanity? shachaf: It looks like a golfed Perl implementation. wib_jonas: FireFly: scowrevs is a list of revisions in our repository that most of the fancy commands hide by default, though you still see them with an explicit hg wib_jonas: and I mean they hide their diffs, so you don't see the same change in the next revision either wib_jonas: ``` cat /hackenv/bin/hlnp HackEso: scowrevs="$(/usr/bin/paste -sd'|' /hackenv/share/scowrevs)"; hg log -r "tip:0 & ! ($scowrevs)" "$@" | sed 's/\(\(^\| \)[ no idea, kill then restart your program or something b_jonas: it seems that freenode irc interprets a cr as a line break too if you send one, but I wouldn't rely on this, and I haven't tested any other networks b_jonas: kspalaiologos: anyway, before I took the bot down, I made it loop by sending a message that it misparsed b_jonas: it was after that that I decided it was buggy enough that I can just have the irc server eject it kspalaiologos: I'll write it all over again kspalaiologos: and burn the code printouts to get rid of it for real b_jonas: I'd like to defend bash though. some people use bash and write less buggy programs in it. I'm not advertising that, there are better programming languages than bash, just saying. b_jonas: and some people write worse programs in perl or php, ones that open huge holes of sql injections for no reasons b_jonas: also, publishing the source code of the bot may help, because it may let the regulars find or debug bugs more quickly. without them, it took days until someone (perhaps kritixilithos) to find the bug with the backslash at the end of the line ais523: is there any use of the std::vector copy constructor that isn't a mistake, anyway ← I don't know what it actually does, but I'm guessing from the discussion that it actually moves the vector contents and leaves the original vector empty? b_jonas: ais523: no b_jonas: the copy contructor of std::vector (in C++) copies the contents of the vector, which implies copying each element of the vector ais523: OK, that's what I'd expect it to do b_jonas: the move constructor moves the vector contents by updating pointers in the headers, and leaves the original one empty ais523: oh right, because in C++ a moved-out-of object can still be referenced ais523: (C++ "move" corresponds to Rust "take" rather than Rust "move") ais523: re the RAII discussion, I think the name comes from the fact that there's no user-observable time during which the object is allocated but uninitialised b_jonas: ais523: yes, but in case of most types like an std::vector it's easy, because the moved out one will just have a 0 size and a null pointer in the header. the hard case is std::list, which has to heap allocate to move out of itself with the move constructor. ais523: in C you often deal with a four-state transition, allocate/initialise/deinitialise/deallocate ais523: and RAII says you merge the first two and last two ais523: OK, now I have to ask what the difference between a list and a vector is ais523: is the list linked? because that's ridiculous b_jonas: C++ std::list is a doubly linked list ais523: my current belief about linked lists is "it doesn't make sense to have an abstraction for linked lists, in all the cases where they're actually useful you need to be doing something horrifically low-level with their internals" b_jonas: it's something you very rarely need, and it's a pity that it's in the C++ standard library with such a simple name, because it gets lots of clueless people use it when they shouldn't b_jonas: ais523: yes, that's close to true b_jonas: however, even if you don't have the general std::list, you can meet one of those low-level things where you define a more specialized object whose copy constructor has to heap-allocate b_jonas: which is why they want to solve the general problem, not really for what std::list should do, but how to handle objects like that b_jonas: and yes, it's a rare case b_jonas: the more important tricky case is that of std::string (and cv::Vector from the Opencv library), which have pointers to themselves, and so have to do something nontrivial when they're swapped or move-assigned or move-constructed, though the move construction can't raise an exception unlike with std::list ais523: Rust's solution to that apparently has corner cases where it's unsound, I hope they come up with a good fix soon b_jonas: oh, right. if I want set -e in an interactive shell, as opposed to a HackEso command, I should do it in a parenthisized subshell. b_jonas: or in a shell script running in a subshell obviously oerjan: "RAII" is also a bad name. <-- Ra II would be a pretty badass name for an egyptian-style villain, though oerjan: hm Ra II is also the name of one of heyerdahl's boats iirc oerjan: `icode II II HackEso: ​[U+0049 LATIN CAPITAL LETTER I] [U+0049 LATIN CAPITAL LETTER I] [U+0020 SPACE] [U+0049 LATIN CAPITAL LETTER I] [U+0049 LATIN CAPITAL LETTER I] oerjan: huh identical int-e: Ra II = Ra ⅠⅠ = Ra Ⅱ <-- better? oerjan: oh wait it's the guillemets which norwegian wikipedia uses for some reason https://no.wikipedia.org/w/index.php?title=Ra_II&redirect=no oerjan: `icode ⅠⅠ Ⅱ HackEso: ​[U+2160 ROMAN NUMERAL ONE] [U+2160 ROMAN NUMERAL ONE] [U+0020 SPACE] [U+2161 ROMAN NUMERAL TWO] [U+0020 SPACE] oerjan: int-e: PERFECT oerjan: unlike the english wikipedia, the norwegian one seems to include things like plurals more often oerjan: e.g. https://no.wikipedia.org/wiki/Svaler is plural, corresponding to en:swallow oerjan: https://no.wikipedia.org/wiki/Stortinget corresponding to en:Storting, except with the definite article suffix int-e: Oh the bird, not the verb. oerjan: the article also considers the entire family of birds, so it makes some sense int-e: the de. version tops this and makes the plural version the main page, while the singular is a disambiguation page. int-e: (cf. https://de.wikipedia.org/wiki/Schwalbe) oerjan: ah. the norwegian singular (Svale) is just a redirect to the plural. oerjan: ufu is definitely setting things up for an ironic disaster oerjan: in some sense, has done so ever since he was introduced shachaf: let this = perf_event_open in shachaf: Do you like this? shachaf: I was previously worried it would be a scow API but it seems pretty reasonable. shachaf: Also, did you know the syscall() wrapper in libc returns errors via errno rather than actually just wrapping the syscall? shachaf: I previously knew this but I keep forgetting it because when I write a syscall wrapper it's reasonable. oerjan: . o O ( just say no to errno ) int-e: oerjan: err... no?! shachaf: `! c syscall(1, 1, "hi\n", 3); int-e: That is a terrible pun. I salute you. shachaf: Aha. It seems int-e likes that, but not this. int-e: I'm not sure "like" is the correct term. int-e: fungot: Nobody's like this. fungot: int-e: ' a'. shachaf: `! c syscall(1, 1, "1", 1); int-e: shachaf: How do you ensure that you got that WRITE? kingoffrance: . o O ( i dont know what scow means, but i imagine from context it refers to the cowtalk cow writing an API ) kingoffrance: . o O ( via these things of course ) int-e: `` \? scow # really helpful as always HackEso: Scow (S-cow) is canned meat made from cows with a lisp. kingoffrance: yes, that totally makes sense kingoffrance: i didnt know he had a lisp though kingoffrance: the more you know oerjan: i think cows are generally female, Cows with Guns notwithstanding. int-e: I can't wait for the Chickens with Choppers. oerjan: wind to the end then hth kingoffrance: s/cowtalk/cowsay/ int-e: Though more on topic, the high steaks pun was terrific. oerjan: `slwd scow//s,.$, and an extra half-spin./ HackEso: ​/bin/sed: -e expression #1, char 30: unterminated `s' command oerjan: `slwd scow//s,.$, and an extra half-spin., shachaf: `slwd scow//s,meat,join, HackEso: scow//Scow (S-cow) is canned meat made from cows with a lisp and an extra half-spin. kingoffrance: "terrific" is strange at first glance, but terror bringing joy is perfectly natural, so i see how the modern definition still has it HackEso: scow//Scow (S-cow) is canned join made from cows with a lisp and an extra half-spin. oerjan: hm race condition oerjan: shachaf: ETOOMANYPUNS oerjan: now with math _and_ physics. shachaf: It's not a good pun but it doesn't make me sad like the other one. int-e: Wait, who brought the lettuce to the S-cow? int-e: Now for the physics angle, hmm. int-e: Is it connected to quarks and interlingual? oerjan: quarks yes, interlingual not sure int-e: If so that's bad enough to make milk curdle. int-e: I don't think english really has "quark" in that sense. Cf. https://en.wikipedia.org/wiki/Curd int-e: Hence "interlingual". oerjan: oh i didn't think of that at all int-e: Though, hmm. https://en.wikipedia.org/wiki/Quark_(dairy_product) oerjan: it's just about the s-, not the -cow, so to speak int-e: Maybe I'm just wrong. kingoffrance: i imagine degrees from kevin of bacin is like layers of interlingual kingoffrance: s/bacin/bacon/ int-e: oerjan: Oh well, maybe I've taken it to a full spin now. int-e: Kevin Bacon is an excellent name for a pig. oerjan: oh s is for "scalar" oerjan: maybe it should be spinned down instead of up zzo38: Freeze Artifact {1UU} Snow Instant ;; Target artifact loses all abilities and has base power 0 until end of turn. Counter all triggered abilities of that artifact, and tap that artifact. ;; Flashback {4UU} ;; Affinity for snow lands oerjan: `? scream HackEso: scream? ¯\(°​_o)/¯ int-e: `? sport HackEso: sport divides its input into irc-sized pieces and displays the nth (default first). The pipe version of `1. See also spore. int-e: (Port is not a dairy product, fortunately.) oerjan: int-e: logically sport is a swine product though. int-e: right. int-e: oerjan: I guess "steak" is also interesting in this context. oerjan: `slwd scow//s,an .*,spun down by half to remove the scream., HackEso: scow//Scow (S-cow) is canned join made from cows with a lisp and spun down by half to remove the scream. oerjan: i am afraid that edit may have done the opposite, alas. oerjan: @wn teak lambdabot: *** "teak" wn "WordNet (r) 3.0 (2006)" lambdabot: n 1: hard strong durable yellowish-brown wood of teak trees; lambdabot: resistant to insects and to warping; used for furniture and lambdabot: in shipbuilding [syn: {teak}, {teakwood}] lambdabot: [3 @more lines] oerjan: the tense change was obvious when i saw it hth oerjan: or well, noun -> verb change kingoffrance: this channel is answering all my questions in life today oerjan: . o O ( ETHEYJUSTKEEPPILINGON ) oerjan: int-e: i think a steak pun in this context might be hard to chew and we should table it for later. int-e: are you sure you don't want to stable it instead oerjan: i was on the edge oerjan: you're right oerjan: excellent kingoffrance: it is common phenomenon restaurants e.g. have a pig with a fork, to advertise bacon; so yes, kevin bacon is his name kingoffrance: its supposed to be "umm, im so tasty i could eat myself, dont you want some?" int-e: oerjan: the steak may fall to slumber int-e: I'm still looking for a use of "scrying". int-e: (By this point I'm cheating, and employing stool support.) int-e: `` comm -12 /usr/share/dict/words <(grep ^s /usr/share/dict/words | sed 's=.==' | sort) | wc -c HackEso: comm: file 1 is not in sorted order \ 0 int-e: `` comm -12 <(sort /usr/share/dict/words) <(grep ^s /usr/share/dict/words | sed 's=.==' | sort) | wc -c int-e: `` echo $(comm -12 <(sort /usr/share/dict/words) <(grep ^s /usr/share/dict/words | sed 's=.==' | sort) | shuf) HackEso: patters lightness's miles hatters hot cores hare ow trident lab wine lop age nagged purred cowl have pins tout's ell's park's allies ledge's cams late lump's tall kidding cram lob's loped lick horn tumble's molders ail wished crawling hoot tumbler's tow potty tuck melt's weeping he'll handy crews evens wears mocking ampler wagging pawned pout's hod crew parring tared paces wig hale lap table top's mocked trapped lump unless cone's molder's to oerjan: just keep swiping the data int-e: actually for a random selection that contains an amazing number of candidates we've already covered. oerjan: now find a sentence that makes sense both with and without prepending s to every word :P oerjan: i suppose there might not be enough connective words starting in s to make it work for long shachaf: Hmm, say I have struct { T *p; int len, cap; } arr; defined locally. shachaf: I pass &arr.p to some other function. shachaf: Can it get at len and cap without UB? oerjan: `8ball can he? HackEso: Very doubtful. kingoffrance: its difficult to answer that since i may hold things hostage, but when i do it its not called piracy kingoffrance: 'arr' is out of my field kingoffrance: you basically might have padding kingoffrance: so you can get to something, perhaps padding kingoffrance: theres an offsetof macro or something oerjan: `! c return *(int *)0; HackEso: ​/hackenv/interps/gcccomp/gcccomp: line 53: 68 Segmentation fault /tmp/compiled.$$ oerjan: `brl ! HackEso: https://hack.esolangs.org/repo/file/tip/bin/%21 oerjan: `../hackenv/ibin/c return *(int *)0; HackEso: ​../hackenv/ibin/c? No such file or directory oerjan: `/hackenv/ibin/c return *(int *)0; HackEso: ​/hackenv/interps/gcccomp/gcccomp: line 53: 62 Segmentation fault /tmp/compiled.$$ oerjan: `` echo $$ oerjan: `echo $$ oerjan: `` sh -c 'echo $$' oerjan: `slwd lib/interp//6iecho $ARGFILE HackEso: Roswbud! oerjan: `t sled lib/interp//6iecho $ARGFILE HackEso: lib/interp//#!/bin/sh \ \ export I_CMD="$0" \ export I_ARG="$1" \ export ARG_FILE="/tmp/input.$$" \ echo $ARGFILE \ \ get_arg() { \ #if expr "$I_ARG" : "http://" > /dev/null \ #then \ # wget $WGET_OPTIONS "$I_ARG" -O "$ARG_FILE" \ #else \ printf '%s' "$I_ARG" > "$ARG_FILE" \ #fi \ } \ \ clean_arg() { \ rm -f "$ARG_FILE" \ } \ \ interp_stdin() { \ get_arg \ $1 < "$ARG_FILE" 2>&1 \ clean_arg \ oerjan: `/hackenv/ibin/c return *(int *)0; HackEso: ​ \ /hackenv/interps/gcccomp/gcccomp: line 53: 62 Segmentation fault /tmp/compiled.$$ oerjan: `` /hackenv/ibin/c 'return *(int *)0;' 2>/dev/null HackEso: ​ \ /hackenv/interps/gcccomp/gcccomp: line 53: 66 Segmentation fault /tmp/compiled.$$ oerjan: `revert oerjan: `before HackEso: ​/hackenv/lib/interp//#!/bin/sh \ \ export I_CMD="$0" \ export I_ARG="$1" \ export ARG_FILE="/tmp/input.$$" \ echo $ARGFILE \ \ get_arg() { \ #if expr "$I_ARG" : "http://" > /dev/null \ #then \ # wget $WGET_OPTIONS "$I_ARG" -O "$ARG_FILE" \ #else \ printf '%s' "$I_ARG" > "$ARG_FILE" \ #fi \ } \ \ clean_arg() { \ rm -f "$ARG_FILE" \ } \ \ interp_stdin() { \ get_arg \ $1 < "$ARG_FILE" 2>&1 \ oerjan: wib_jonas: ah <-- scowrevs is generally stupid revisions that affected a lot of files and then got reverted, so it doesn't really tell you anything useful but clutters up what you're really looking for oerjan: nearly all of the time oerjan: if there are any ranges in there that _didn't_ end up changing nothing, that may be considered an error oerjan: `? scowrevs HackEso: scowrevs? ¯\(°​_o)/¯ oerjan: `le/rn scowrevs///hackenv/share/scowrevs is a list of repository revision ranges that affected a lot of files but in the end changed nothing (usually because of a revert at the end). Most of our custom repository lookup commands ignore these to reduce noise. HackEso: Learned 'scowrevs': /hackenv/share/scowrevs is a list of repository revision ranges that affected a lot of files but in the end changed nothing (usually because of a revert at the end). Most of our custom repository lookup commands ignore these to reduce noise. timofonic: zzo38: Hello. Where's Aimfiz and Fweep source code? I cant f8nd it on GitLab, GitHub or similar. Do you know about dreammaster's ScummGlk in the ScummVM project? There's #scummvm IRC channel. Disclaimer: I'm not part of the ScummVM project, just a mere user and fan of IF and Point & Click Adventure Games. timofonic: I tried to use a Gopher proxy to look at your site, no success at all. You made lots of nntp links on it oerjan: I suppose, if you pronounce gif as jif, you should pronounce fungot as funjot <-- i don't think that's orthographically plausible, g before "o" is never soft. fungot: oerjan: could you juse for fun _only_ switch the backend to accomodate the fnord of a oerjan: it would have to be spelled fungeot for that. oerjan: also, g before "a" shouldn't be, but someone had to invent "gaol". oerjan: well, unless o or a are part of diphthong, that could mess things up. oerjan: `? fungi HackEso: fungi? ¯\(°​_o)/¯ b_jonas: oerjan: for "ga", Alan's pronunciation dictionary says "mortgagor" but I've no idea what that means b_jonas: no, that's for "go" b_jonas: and for "ga", it says "algae, baggage, b_jonas: gaol, gaolbird, gaolbreak, gaoler, margarine" b_jonas: nowait, the baggage is one of the many false positives too, where the other g is pronounced soft b_jonas: in that case, the counterexamples are "mortgagor" for "go" and "algae, gaol, gaolbird, gaolbreak, gaoler, margarine" for "ga" b_jonas: https://esolangs.org/logs/2019-10.html#lnEc for meta-info on Alan's pronunciation dictionary oerjan: algae has a dipthong, but margarine seems right b_jonas: it doesn't seem right to me, English is just pronouncing it wrong oerjan: i know, but it seems like a counterexample oerjan: mortgagor is illogical, although Agoran timofonic: zzo38: If you are interested, dreammaster is usually there (depending on each timezone, of course). I also read the IRC logs of both channels, ScummVM developers also usually read the #scummvm channel IRC logs too. What do you think? :) timofonic: Why do you people care about pronunciation? Do you find geeks in person to be able to talk about this stuff in person and not only text? kingoffrance: although i am not in that group discussing, pronunciation is everything for certain things kingoffrance: and spelling is zilch kingoffrance: pronunciation is a spelling of sorts kingoffrance: you have to say magic words correctly or they do strange things kingoffrance: and you have to purposely say them strangely if you want correct things kingoffrance: which requires knowing "correctness" timofonic: Most personally important stuff for me is in written form, anyway kingoffrance: there are phonic writings shachaf: `t t 5 t t ` w HackEso: ​/hackenv/bin/`: eval: line 5: unexpected EOF while looking for matching ``' \ /hackenv/bin/`: eval: line 6: syntax error: unexpected end of file \ /hackenv/bin/`: eval: line 5: unexpected EOF while looking for matching ``' \ /hackenv/bin/`: eval: line 6: syntax error: unexpected end of file \ /hackenv/bin/`: eval: line 5: unexpected EOF while looking for matching ``' \ /hackenv/bin/`: eval: line 6: syntax error: unexpected end of file \ /h shachaf: `t t 5 t t w HackEso: ​/hackenv/bin/nur: line 2: : command not found \ /hackenv/bin/nur: line 2: : command not found \ /hackenv/bin/nur: line 2: : command not found \ /hackenv/bin/nur: line 2: : command not found \ /hackenv/bin/nur: line 2: : command not found \ 1/0: shachaf: `t t 5 w HackEso: 1/1:gamemanj//gamemanj is also the mad scientist I. N. Here. He will overthink everything, except whether overthinking is wrong. \ apt-get//apt-get installs whatever you wanted, plus whatever Mark Shuttleworth wanted. \ tswett//tswett is livin' it up with the penguins. He's a title under the cruxite in the lathe. \ baba//BABA IS ¯\(°​_o)/¯ \ hug//hug? ¯\_/¯\(°​_o)/¯\_/¯ shachaf: Right. 5 is a run, not a nur. kingoffrance: re: pronunciation, also, to correctly satirize something you have to know it well enough kingoffrance: so the people so concerned may be in agreement on the worthlessness of pronunciation arseniiv: `cwlprits baba HackEso: oerjän arseniiv: hahaha :D cpressey: arseniiv: From what I understood from reading about HOAS, the powerful thing about full-blown HOAS is that it treats two terms as equivalent if one can be α-, β-, or η- converted to the other. Unification modulo αβη-conversion, in other words. cpressey: And that's what makes it need higher-order unification to work. cpressey: But I think that's probably far more powerfully expressive than I'd ever need or want! arseniiv: cpressey: hmm wait, how is equivalence defined there? arseniiv: anyway interesting cpressey: I think you could say, if, by the rules of lambda calculus, you could reduce some term X to some other term Y, then HOAS treats them as effectively the same term. cpressey: I mean, that was my understanding of it, anyway. arseniiv: cpressey: do you mean, computationally? then it should be a broader equivalence, I think… cpressey: arseniiv: It may be that I fail to see all the implications, but I can't see how it could be anything other than computational, in this sense: there's nothing else in the lambda calculus besides α-, β-, and η- conversion, so if you permit all of those to happen when considering if two terms are equivalent, then... well, you allow arbitrary computations. arseniiv: cpressey: I think I have seen two non-αβη-convertible combinators with the same behavior. Hm maybe two divergent ones, let’s say Ω and maybe YI? zzo38: timofonic: What is the context of that? What is it about? zzo38: O, I found your previous message too now zzo38: OK I understand cpressey: arseniiv: That seems likely. (It seems like it should be the implication of some famouse theorem maybe) But even when they are αβη-convertible, the problem of actually converting one into the other is undecidable in general. cpressey: *famous zzo38: The answer is I have lost the source code for Fweep and Aimfiz zzo38: Does the gopher proxy break when there are NNTP links? If not, then the stuff other than the NNTP link should still work isn't it? zzo38: The NNTP links are listed under the "ZZ Zero" menu; are you interested in ZZ Zero? zzo38: (I should perhaps add some additional information there too; that menu does not describe much of what ZZ Zero is.) zzo38: (ZZ Zero is a ZZT-like game creation system. If you have used ZZT or MegaZeux or ZIG or other ZZT-likes then maybe you can understand what I mean by this) kspalaiologos: I felt like I have to complete this challenge kspalaiologos: just a random thought kritixilithos: what is HOAS? int-e: "higher order abstract syntax" arseniiv: I thought that was an acronym of HOAS Often Are Serious arseniiv: or maybe sentimental or serialized kritixilithos: thanks int-e b_jonas: kspalaiologos: how was the incineration? I hope you payed attention to safety. kspalaiologos: I'm still working on it among other things kspalaiologos: I've made a few decisions regarding the bot already so I might be able to rewrite it pretty quickly as I get to doing it lol fizzie: HackEso fizzie: ...whoop, keyboards are hard. shachaf: `5 botsnack HackEso: 1/1:>:-D \ >:-D \ >:-D \ >:-D \ >:-D HackEso: The 1 is just for disambiguation. HackEso: ​`1 is equivalent to `` , except that it splits the output into irc-sized pieces. The next pieces can be viewed with `spam. See also `2. Confusingly the obvious generalization of `4. HackEso: ​`2 is equivalent to `1 , except that it starts displaying the _second_ output piece. Useful when you've already run a command forgetting to use `1. HackEso: ​`4 is equivalent to `5 , except that it only repeats 4 times. Useful when you've already run a command forgetting to use `5. HackEso: ​`5 is equivalent to repeating `` 5 times, then splitting the output into irc-sized pieces. defaults to "quote". See `1, `4 and `spam. Confusingly _not_ the obvious generalization of `2. HackEso: ​`3 is the obvious generalization of `2 or `4, trying too hard to confuse everyone. fizzie: Anyway, what I was going to do was comment on that thing from -blah. HackEso: ​? Permission denied fizzie: Which is an odd error. HackEso: ​? Permission denied fizzie: Presumably it's trying to execute the empty string. shachaf: Is it trying to execute a directory? shachaf: `/hackenv/bin HackEso: ​/hackenv/bin? Permission denied fizzie: Yes, I think that would follow. shachaf: `! c execve("", (char *[]){}, 0); HackEso: No output. fizzie: Please don't make /hackenv/bin a file just to test that. shachaf: `! c execve("", (char *[]){}, 0); printf("error: %s\n", strerror(errno)); HackEso: Does not compile. shachaf: `! c execve("", (char *[]){}, 0); printf("error: %d\n", errno); HackEso: Does not compile. fizzie: `! c printf("test\n"); shachaf: `! c (int)errno; fizzie: I remember at least one of these turned the \n into a newline even when inside a string literal. HackEso: Does not compile. shachaf: What an omission. fizzie: `! c perror("uh"); HackEso: uh: Success fizzie: There's that. shachaf: `cat /hackenv/ibin/c HackEso: ​#!/bin/sh \ . ${HACKENV-/hackenv}/lib/interp \ interp_file "${HACKENV-/hackenv}/interps/gcccomp/gcccomp c" fizzie: `! c execve("", (char *[]){}, 0); perror("execve"); HackEso: execve: No such file or directory shachaf: `cat /hackenv/interps/gcccomp/gcccomp HackEso: ​#!/bin/bash \ LANG="$1" \ echo >>"$2" \ \ case "$LANG" in \ c) \ HEAD='#include \n#include \n#include \n#include \n#include \nint main(int argc, char **argv) {' \ TAIL='; return 0; }' \ EXT='c' \ GCC='gcc' \ FLAGS='-lm -std=gnu99' \ ;; \ \ c++) \ HEAD='#include \n#include \n#include \n#include target)];` shachaf: I wish the idiom of allocating your own arena was more common. shachaf: I guess glibc has obstack. HackEso: 1/2:monads//Monads are just free monad monad monad algebras. \ tanebvention//Tanebventions include necessity, Go, submarine jousting, Fueue, the universe, metar, sand, dragons, persistence, the BBC, _46bit, progress, sanity, the hug, Italian, the grace period, the limerick, ruin, and this sentence. See also tanebventions: maths or tanebventions: foods. He never invents anything involving sex. \ lie group//Lie groups are groups that try HackEso: 2/2:eing too smooth for their own good. \ gamemanj//gamemanj is also the mad scientist I. N. Here. He will overthink everything, except whether overthinking is wrong. \ vanila//In a cruel twist of fate, vanila has come to #esoteric in search of wisdom. shachaf: int-e: So I fixed my thing to do what I think is correct FirstUIP. shachaf: It still takes much longer when doing clause learning. shachaf: On the same instance, MiniSat says it deleted only <25% of its conflict literals (I think?), so I'm not sure deletion is the big missing thing here. shachaf: But also it's not learning as many clauses as I am so maybe it's something along those lines. oerjan: apparently there weren't any sections, blame my brain shachaf: Uh oh. shachaf: There were no sections, so you're issuing a retraction? oerjan: what is it with people making up theories without first understanding what's already known? shachaf: int-e: Oh, hmm, I'm learning duplicate clauses, that's not good. shachaf: Probably everything I said is nonsense. oerjan: yafgc is back shachaf: `yafgclist kingoffrance: i dunno, same reason noone pays much attention to atlas holding the earth up. what if he has to scratch his nose? kablooie oerjan: kingoffrance: i'm pretty sure in ancient greek mythology atlas held the _heavens_ up. kingoffrance: hes clearly passed out drunk nowadays then kingoffrance: nothing to worry about kingoffrance: it is all the same to alchemy kingoffrance: i just need him to push down hell really elliemae: Would anyone here mind looking over my javagony code and see about obtimising? kingoffrance: thats his thing ais523: `` cd /tmp; printf "#if u'\\0'-1<0\n# HackEso: ​/hackenv/bin/`: eval: line 5: unexpected EOF while looking for matching `"' \ /hackenv/bin/`: eval: line 6: syntax error: unexpected end of file ais523: `` cd /tmp; printf "#include \n#if u'\\0'-1<0\n#error assertion failure\n#endif\nint main(void)\n{\nassert(u'\\0'-1<0);\n}" > t.c; gcc -std=c11 -pedantic t.c; ./a.out; HackEso: t.c:2:5: warning: null character(s) preserved in literal \ #if u' '-1<0 \ ^ \ t.c: In function ‘main’: \ t.c:7:8: warning: null character(s) preserved in literal \ assert(u' '-1<0); \ ^ ais523: `` cd /tmp; printf "#include \n#if u'\\\\0'-1<0\n#error assertion failure\n#endif\nint main(void)\n{\nassert(u'\\\\0'-1<0);\n}" > t.c; gcc -std=c11 -pedantic t.c; ./a.out; HackEso: No output. wib_jonas: yeah, I should make a proper wrapper for testing C snippets shachaf: Is there a thing like `! c that supports #include? wib_jonas: shachaf: no, that's the wrapper that I should write wib_jonas: a geordi-like one wib_jonas: except for the part where Eelis says that geordi will never support compiling C, only C++ wib_jonas: I'll have to review the tokenizer rules of C and C++ for that though, to figure out when exactly an apostrophe is part of a numeric literal versus when it's a separator for a character literal shachaf: Why do all that? ais523: wib_jonas: more readable: https://tio.run/##VYy7CgIxEEX7@YqBLXa3iGxqV3/DxmaYJOtATCQPEcRfNwa0sbkcOIfLamNubZDAvhqLK@VsU9ldjjCIwzqelxEValxxgcGmFBN@E4kBHYmvyXYRjDgACQWvJGG6RzEzPAF/8fR3NO/h1dqbnactN3Ui7/vaR0nUlMrFHFjrTjdrKBThDw ais523: (this example comes from a defect report against C11, the committee decided it was intended behaviour, but it looks really weird) wib_jonas: ais523: ok, but it's not specifically this C program that I care about fizzie: `cc #include \n #if u'\0' - 1 < 0 \n #error assertion failure \n #endif \n int main(void) { assert(u'\0' - 1 < 0); } HackEso: No output. fizzie: There's already that one, if you just want gcc -std=c11 with a hard newline support, no automatic nothing. wib_jonas: that does look useful, though I may still try to make a custom version fizzie: Granted, it's a bit problematic if there's a \n inside a string literal. But you can always work around that, e.g. by making it \x0a or \012 instead. fizzie: (I did like ##c's candide, which had a lot of DWIM.) myname: idea: compiler from a defined tikz-subset to funciton wib_jonas: hmm, C++ tokenization is nasty. maybe ais was right about recognizing only the backslash-space wib_jonas: I don't think I could implement C++ tokenization correctly. it looks too complicated. fizzie: The "add main wrapper but only if it doesn't exist" and "add default include files if no #include directives" features are convenient. candide also did the "add main wrapper around top-level code while still allowing function definitions", but that's more complicated. b_jonas: `? j-bot HackEso: j-bot? ¯\(°​_o)/¯ int-e: fungot: Do you bee code or do you bee funge? fungot: int-e: who needs fictive horror stories when we have medicine... http://216.239.59.104/ search?q=cache:ifrvmgi6qmkj:www.cfwf.ca/ farmj/ fnord) int-e: fungot: That's a deeply unsettling observation. fungot: int-e: ( define tolerance 0.000000001) 4 b_jonas: fizzie: I just checked, if I use the web edit interface on a file in /hackenv/tmp , then when I fetch, it mangles the non-ascii characters in the sense of reencoding it to iso-8859-1 to utf-8, which makes the file longer on each save b_jonas: fizzie: this isn't urgent, but could you please fix that? int-e: `unidecode ᵏ HackEso: ​[U+1D4F MODIFIER LETTER SMALL K] int-e: "MODIFIER"?! b_jonas: int-e: yes, that means it's primarily for IPA-like pronunciation systems, where you suffix random superscripts to a letter to modify it b_jonas: or put crazy accents above or below it, including accents that aren't userd for anything but those pronunciation systems int-e: So I see. It came up on ##math :-/ int-e: (used as an exponent) int-e: And of course it's rendered as a box here :) b_jonas: `fetch /hackenv/bin/whatis https://hack.esolangs.org/get/bin/whatis HackEso: 2019-12-05 20:05:28 URL:https://hack.esolangs.org/get/bin/whatis [1160/1160] -> "/hackenv/bin/whatis" [1] b_jonas: `whatis welcome HackEso: WELCOME(1hackeso) - welcome new user to irc channel, if they can't read lowercase letters \ WeLcOmE(1hackeso) - WeLcOmE NeW UsEr tO IrC ChAnNeL \ Welcome(1hackeso) - no description \ wElCoMe(1hackeso) - wElCoMe nEw uSeR To iRc cHaNnEl \ welcome(1hackeso) - welcome new user to irc channel b_jonas: `whatis sed HackEso: sed(1) - stream editor for filtering and transforming text \ sed(1p) - stream editor \ sed(1hackeso) - no description b_jonas: `whatis sed(hackeso) HackEso: sed(1hackeso) - no description b_jonas: `whatis sed() HackEso: sed(1) - stream editor for filtering and transforming text b_jonas: `whatis printf HackEso: printf(1) - format and print data \ printf(1p) - write formatted output \ printf(3) - formatted output conversion \ printf(3p) - print formatted output \ printf(3glibc) - Formatted Output Functions b_jonas: `whatis printf() HackEso: printf(1) - format and print data \ printf(3) - formatted output conversion b_jonas: `whatis printf(p) HackEso: printf(1p) - write formatted output \ printf(3p) - print formatted output b_jonas: `whatis printf(1) HackEso: printf(1) - format and print data b_jonas: `whatis printf(1p) HackEso: printf(1p) - write formatted output b_jonas: `whatis Welcome(hackeso) HackEso: welcome(1hackeso) - welcome new user to irc channel int-e: `whatis PRIVMSG HackEso: PRIVMSG: nothing appropriate. b_jonas: whatis now takes a suffix or number category plus suffix in parenthesis after a word, in which case the lookup is restricted to that suffix or category plus suffix, and the search is case sensitive b_jonas: int-e: the next step is that I'll make an addwhatis command to add whatis entries b_jonas: because we're missing some and don't have a convenient way to add them or edit them b_jonas: in particular, we need an entry for whatis(1hackeso) b_jonas: `whatis ? HackEso: ​?(1hackeso) - print wisdom by name \ ?(8lambdabot) - compose tree of lambdabot commands b_jonas: `whatis ?(hackeso) HackEso: ​?(1hackeso) - print wisdom by name b_jonas: it will also need a switch to remove a whatis entry b_jonas: `whatis welcome HackEso: WELCOME(1hackeso) - welcome new user to irc channel, if they can't read lowercase letters \ WeLcOmE(1hackeso) - WeLcOmE NeW UsEr tO IrC ChAnNeL \ Welcome(1hackeso) - no description \ wElCoMe(1hackeso) - wElCoMe nEw uSeR To iRc cHaNnEl \ welcome(1hackeso) - welcome new user to irc channel b_jonas: `whatis welcome(hackeso) HackEso: welcome(1hackeso) - welcome new user to irc channel b_jonas: what should be the option letter to delete entries rather than add? b_jonas: or should that be an entirely separate executable? b_jonas: oh, I could just make it delete a whatis if you only give the name and category with no (space hyphen space body) after b_jonas: yeah, that's what I'll do b_jonas: `fetch /hackenv/bin/addwhatis https://hack.esolangs.org/get/bin/addwhatis HackEso: 2019-12-05 21:01:29 URL:https://hack.esolangs.org/get/bin/addwhatis [1814/1814] -> "/hackenv/bin/addwhatis" [1] b_jonas: `whatis whatis HackEso: whatis(1) - display one-line manual page descriptions b_jonas: `addwhatis whatis(1hackeso) - display one-line manual page descriptions HackEso: addwhatis? Permission denied b_jonas: ``` chmod -c a+x /hackenv/bin/addwhatis HackEso: mode of '/hackenv/bin/addwhatis' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x) b_jonas: `addwhatis whatis(1hackeso) - display one-line manual page descriptions HackEso: addwhatis: added 'whatis(1hackeso)' b_jonas: `whatis whatis HackEso: whatis(1) - display one-line manual page descriptions \ whatis(1hackeso) - display one-line manual page descriptions b_jonas: `whatis whatis(1hackeso) HackEso: whatis(1hackeso) - display one-line manual page descriptions b_jonas: `addwhatis addwhatis(1hackeso) - modify the database of one-line manual page descriptions HackEso: addwhatis: added 'addwhatis(1hackeso)' b_jonas: `whatis @ HackEso: ​@(1hackeso) - no description \ @(8lambdabot) - compose tree of lambdabot commands b_jonas: `addwhatis @(1hackeso) - run a command but address an irc user with the output HackEso: addwhatis: replaced '@(1hackeso)' b_jonas: `@wib_jonas whatis @ HackEso: ​@wib_jonas? No such file or directory b_jonas: `@ wib_jonas whatis @ HackEso: wib_jonas: @(1hackeso) - run a command but address an irc user with the output \ @(8lambdabot) - compose tree of lambdabot commands b_jonas: `Welcome HackEso: Welcome To The International Hub For Esoteric Programming Language Design And Deployment! For More Information, Check Out Our Wiki: . (For The Other Kind Of Esoterica, Try #Esoteric On EFnet Or DALnet.) b_jonas: `whatis welcome HackEso: WELCOME(1hackeso) - welcome new user to irc channel, if they can't read lowercase letters \ WeLcOmE(1hackeso) - WeLcOmE NeW UsEr tO IrC ChAnNeL \ Welcome(1hackeso) - no description \ wElCoMe(1hackeso) - wElCoMe nEw uSeR To iRc cHaNnEl \ welcome(1hackeso) - welcome new user to irc channel b_jonas: `addwhatis Welcome(1hackeso) - Welcome New User To Irc Channel HackEso: addwhatis: replaced 'Welcome(1hackeso)' fungot: Taneb atriq Ngevd Fiora nortti Sgeo ThatOtherPerson alot fungot: ^ ; ^def ; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool 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 quine fdip b_jonas: TODO: add non-builtin fungot commands to whatis fungot: b_jonas: i rather think ruby succeeds at those and is quite incoherent. with a hard drive a lot. that's why there are so many...? b_jonas: `? ruby HackEso: Ruby is a programming language from Japan, that eventually decided to support non-ascii characters. b_jonas: Should that mention that ruby is quite incoherent? b_jonas: `addwhatis asmbf(1hackeso) - no description HackEso: addwhatis: added 'asmbf(1hackeso)' b_jonas: `addwhatis asmbfx(1hackeso) - no description HackEso: addwhatis: added 'asmbfx(1hackeso)' b_jonas: `addwhatis bfasm(1hackeso) - no description HackEso: addwhatis: added 'bfasm(1hackeso)' b_jonas: `addwhatis bfi(1hackeso) - no description HackEso: addwhatis: added 'bfi(1hackeso)' fizzie: b_jonas: That's probably fixable, I'm guessing it's just a wrong content-type thing somewhere. I did also look at whether it could be made properly binary-safe, and that seemed harder. Unless I define some sort of encoding for what gets presented in the form form. b_jonas: fizzie: for more binary safe, you could an option between utf-8 and iso-8859-1 encoding b_jonas: I'm not sure if it would be entirely binary safe, a browser will likely still mangle some things b_jonas: in any case, we no longer need to `edit /share/whatis because I added a command for that b_jonas: but that's an easy case, because whatises are supposed to be all short lines b_jonas: `addwhatis wisdom(5hackeso) - no description HackEso: addwhatis: added 'wisdom(5hackeso)' b_jonas: `addwhatis tmflry(5hackeso) - no description HackEso: addwhatis: added 'tmflry(5hackeso)' b_jonas: `addwhatis quotes(5hackeso) - no description HackEso: addwhatis: added 'quotes(5hackeso)' b_jonas: `addwhatis whatis(5hackeso) - no description HackEso: addwhatis: added 'whatis(5hackeso)' b_jonas: `whatis c HackEso: c(1egobot) - no description b_jonas: `whatis brachylog HackEso: brachylog: nothing appropriate. b_jonas: `addwhatis brachylog(1egobot) - Brachylog, a Prolog-like golf language HackEso: addwhatis: added 'brachylog(1egobot)' b_jonas: `whatis cc HackEso: cc(1hackeso) - no description b_jonas: that is a rather ugly name, shadowing another standard utility b_jonas: `whatis t HackEso: t: nothing appropriate. b_jonas: `addwhatis t(1hackeso) - run a command with the working directory set to /hackenv HackEso: addwhatis: added 't(1hackeso)' oerjan: that was a mess oerjan: `undo 12128 HackEso: patching file karma \ Hunk #1 FAILED at 1. \ 1 out of 1 hunk FAILED -- saving rejects to file karma.rej oerjan: `dobg karma HackEso: 12123:2019-11-17 slbd karma//s|lib/|${HACKENV-/hackenv}/lib/| \ 0:2012-02-16 Initïal import. oerjan: oh wait oerjan: `dobg karma+ HackEso: 12126:2019-11-17 ` for d in + -; do sed -i -e \'s|tee karma|tee ${HACKENV-/hackenv}/karma|\' /hackenv/bin/karma$d; done \ 12124:2019-11-17 slbd karma+//s|lib/|${HACKENV-/hackenv}/lib/| \ 0:2012-02-16 Initïal import. oerjan: hum how long ago is that... oerjan: 19 days oerjan: it's always been broken oerjan: hum why does karma show up for karma+ in dobg oerjan: oh wait oerjan: 12124 is not in the browser list oerjan: or wait oerjan: never mind i was on an old revision and didn't realize file log restricted to that oerjan: `which tee HackEso: ​/usr/bin/tee oerjan: oh i see duh oerjan: `karma hppavilion[1] HackEso: hppavilion[1] has 0 karma. oerjan: of course. oerjan: `karma oren HackEso: oren has 1 karma. oerjan: it's a bit slow oerjan: `karma GregoR HackEso: GregoR has 1 karma. kingoffrance: `karma HackEso HackEso: HackEso has 0 karma. shachaf: `karma HackEgo HackEso: HackEgo has 0 karma. shachaf: `karma shachaf: `cbt karma HackEso: ​#!/bin/sh \ echo "$1 has $(${HACKENV-/hackenv}/lib/karma "$1") karma." HackEso: ​ has 0 karma. shachaf: `t cat lib/karma 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)) shachaf: `cbt karma+ HackEso: ​#!/bin/sh \ echo "$1 now has $(($(${HACKENV-/hackenv}/lib/karma "$1")+1)) karma." | tee ${HACKENV-/hackenv}/karma shachaf: `cbt karma- HackEso: ​#!/bin/sh \ touch karma \ echo "$1 now has $(($(${HACKENV-/hackenv}/lib/karma "$1")-1)) karma." shachaf: What a bizarro system. oerjan: `karma fizzie HackEso: fizzie has 2 karma. oerjan: oh i see oerjan: hm i doubt karma- works oerjan: `slbd karma-//2d;$s,$, | tee ${HACKENV-/hackenv}/karma, HackEso: karma-//#!/bin/sh \ echo "$1 now has $(($(${HACKENV-/hackenv}/lib/karma "$1")-1)) karma." \ | tee ${HACKENV-/hackenv}/karma oerjan: `revert oerjan: `slbd karma-//2d;3s,$, | tee ${HACKENV-/hackenv}/karma, HackEso: karma-//#!/bin/sh \ echo "$1 now has $(($(${HACKENV-/hackenv}/lib/karma "$1")-1)) karma." | tee ${HACKENV-/hackenv}/karma oerjan: `t sled lib/karma//s/egrep.*>/egrep -x '<[^>]*>/ HackEso: lib/karma//#!/bin/sh \ count () { \ hg log --template '{desc}\n' | \ egrep -x '<[^>]*> karma\'$1 | \ fgrep -vix "<$2> karma$1 $2" | \ cut -d' ' -f3 | \ fgrep -cix "$2" \ } \ plus=$(count + "$1") \ minus=$(count - "$1") \ echo $(($plus-$minus)) oerjan: `karma fizzie HackEso: fizzie has 0 karma. oerjan: ok fine oerjan: `revert oerjan: `t sled lib/karma//s/egrep.*>/egrep '^<[^>]*>/ HackEso: lib/karma//#!/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)) oerjan: `karma fizzie HackEso: fizzie has 2 karma. myname: is there an actual esolang called dart or is somebody just mentioning the real dart? wib_jonas: I think it's a censored swearword YamTokTpaFa: It's night here. YamTokTpaFa: well, whatever. Today I am here to bring a topic again. YamTokTpaFa: First of all I'd like you to see these... wait what? YamTokTpaFa: Aha, that's an editing log. YamTokTpaFa: Back on the topic, I see two articles: Y and Y (programming language). YamTokTpaFa: They are: YamTokTpaFa: <> and <>. Aren't they confusing? YamTokTpaFa: Though I put {{Distinguish/Confused}} on both pages, but I think we should discuss how we gotta rename the two pages. YamTokTpaFa: *Confusion YamTokTpaFa: ...should I bring the topic on talk page, not here? YamTokTpaFa: * have I YamTokTpaFa: *have I brought YamTokTpaFa: also sorry if I were to have messed this place. fizzie: "The Northumberland market town of Hexham has been crowned the happiest place to live in Great Britain, topping Rightmove’s 2019 Happy at Home Index" b_jonas: `? hexham fizzie: `grWp hexham HackEso: english channel:If it existed, the English Channel would separate Hexham from Finland. \ fentimans:fentimans is a delicious beverage out from Hexham, that can be paired with a fresh fternooner for a nutritive midday snack. \ ham:Ham is a kind of meat. It is popular in Hexham, among other places. \ helsinki:Helsinki is the capital of Finland. Its main suburb is Hexham, Northumberland. \ hexchat:Hexchat is a variant of Smalltalk invented in Hex b_jonas: ``` grep -REi hexham /hackenv/wisdom HackEso: ​/hackenv/wisdom/hexchat:Hexchat is a variant of Smalltalk invented in Hexham. \ /hackenv/wisdom/wegian:A wegian is an equivalence class of #esoteric regulars. There are two main wegians, the Nor (from Finland) and the Glas (from Hexham). There's also the hypothetical Gal, which hasn't been observed yet so we're not sure where it's from. \ /hackenv/wisdom/ham:Ham is a kind of meat. It is popular in Hexham, among other places. \ /hackenv/wis b_jonas: ``` grep -REi hexham /hackenv/wisdom | tail -n+3 HackEso: ​/hackenv/wisdom/ham:Ham is a kind of meat. It is popular in Hexham, among other places. \ /hackenv/wisdom/fentimans:fentimans is a delicious beverage out from Hexham, that can be paired with a fresh fternooner for a nutritive midday snack. \ /hackenv/wisdom/english channel:If it existed, the English Channel would separate Hexham from Finland. \ /hackenv/wisdom/hexham:Hexham es la ciudad mas importante de programación esotérico. \ /hacken b_jonas: [ 1880%99 j-bot: b_jonas: 18.9899 shachaf: `t 5 t w HackEso: 1/2:nvg//NVG is a student computer club in Trondheim, whose servers are frequently infiltrated by oerjan. Not to be confused with nvd. \ rholypoly//A rholypoly is an edible Greek species of Armadillidiidae. Goes well with garlic! \ sgdq//SGDQ is Summer Games Done Quick, an annual video games speedrunning event for charity every summer, see http://gamesdonequick.com and https://gamesdonequick.com/tracker/events/ \ icbm//ICBMs are Crumb HackEso: 2/2:ing Building Missiles. The I is currently classified. \ cream//Cream is what milk turns into once you beat it into submission. shachaf: `? nvd HackEso: nvd is what Taneb calls himself when he wants to feel professional. zzo38: I played Scrabble and once accidentally put "A" where I meant to put "N", forming an invalid word (WIZEA instead of WIZEN). However, the error was not noticed until it was too late, so we didn't correct it, and the only word crossing it was AA (instead of AN; both words are valid), and I was left at the end with only my N unplayed, so the score comes out the same way anyways! zzo38: (I also won anyways, and would have done even if I had deducted the score for my error.) shachaf: int-e: Oh, I see why I was getting duplicate clauses. shachaf: I was generating a new clause without verifying that both of its watched literals are actually unassigned. shachaf: Oh, and I don't even handle unit clauses at all (since I never add them to watchlists), so there's no reason to expect learned unit clauses to work? shachaf: Man, this is completely broken. shachaf: Clause learning is trickier than I thought! shachaf: So many fidgety details. shachaf: When you learn a unit clause, do people just backtrack all the way to the beginning, or what? kritixilithos: sed is tc without s, http://sprunge.us/Hi59cv kritixilithos: now is it possible without both s and y? you can only have newlines, so the data-string can be stored in unary representing a base-3 number that encodes the data-string (0=>nothing,1=>0,2=>1), and then you'd have to consider the endianness kritixilithos: if it was first-bit = most-significant digit of base-3 number, then it can easily be multiplied by 3 and can be appended with the appropriate bits, but checking for the most-significant-bit is not possible (I think) using posix regexp kritixilithos: if the endianness was reversed, the first-bit can be checked by checking the residue of the number mod 3, trivial, but now appending bits requires you to find the smallest power of 3 larger than the number, which might not be possible with only the pattern and hold space kritixilithos: or choose a better reduction/more clever encoding kritixilithos: actually in the base-3 encoding, you need some way of storing the current production, so maybe it should be base-n, with n depending on the number of productions kspalaiologos2: wait a second, why my nickname is used HackEso: Tc is the abbreviation for Technetium, an element so sophisticated that it does not exist naturally. wib_jonas: TC is technically correct, it is the best kind of correct (ISBKC) wib_jonas: there's probably a few bugs in this long-running program that I made. fungot, can you give a clue about where the bug is? fungot: wib_jonas: i don't follow arseniiv: fungot: in P vs. NP rap battle, who wins? fungot: arseniiv: i think almost whole darkhive is 300m. a car is-a vehicle, a vehicle, such things arseniiv: I get it you don’t want to give spoilers kspalaiologos: dang xD kspalaiologos: that's cool imode: what small, resource-constrained portable devices can we run esolangs on. kmc: i'm sure you could run brainfuck on an 8-bit microcontroller kmc: add 8 buttons, 8 LEDs, use those for the input and output commands kmc: and for programming it kmc: could fit on a keychain kmc: would be cute kmc: I know there are Schemes that run on micros as well kmc: and Forth kmc: not eso-, but gives you an idea of what's possible kmc: I always thought it would be cute to make a machine where the clock is a hand crank kmc: static micros can be clocked as low as you want imode: been looking at the arduboy for that dev fix. wanna run mode on something stupid small to make that reward loop more satisfying than "your program worked on a machine infinitely more powerful than the apollo guidance computer". fizzie: There's a pretty good Befunge-93 (with a few extensions, like a-f) interpreter for the TI-86. fizzie: With a single-stepping debugger and all that. fizzie: (I think that counts as "resource-constrained portable devices", though "small" is a little bit debatable.) arseniiv: I never had a programmable calculator when it was feasible *sniffs* arseniiv: it would be so nice. Now it’s pretty pointless (for me) to aquire. Though if it falls from the sky, I should use this idea of implemeting some small esolang in it arseniiv: as I agree this idea is very very cool. It would be a warm feeling. Pun intended imode: get an arduboy! they're cheap, use avrdude and avr-gcc (or whatever analogue for clang there is) and have a minimalist screen and speaker. kspalaiologos: port asm2bf to ti83 kspalaiologos: I'll have some fun on boring lectures zzo38: I have a TI-92 calculator. I use it; it has a full keyboard and is programmable, so it is good. fizzie: We also played quite a lot of the TI-86 two-player link-cable-enabled Tetris port. fizzie: The "problem" with TI-92 is that it's too good: it's got enough CAS-style features that you weren't allowed to use it in the Finnish math exams. The TI-86 was pretty much the fanciest thing you could. zzo38: That is true although I wasn't concerned about exams I just use it for my own use. fizzie: I got my TI-86 for... well, not for cheap, but with a good discount, as part of the school's big group-buy program. Sgeo: I keep giving my esolang stuff cool unique names and then get pressured into a rename, and the rename is more ambiguous Sgeo: PESOX -> PSOX and Trustfuck -> Braintrust aji: 1915 kmc | I always thought it would be cute to make a machine where the clock is a hand crank aji: haha that'd be neat! HackEso: 62) Where's the link to the log? THERE'S NO LOG. YOUR REQUEST IS SUSPICIOUS AND HAS BEEN LOGGED. \ 947) it's raining in newcastle, therefore the elliotts are distinct. boily's Newcastle Theorem. int-e: fungot: got any fun? fungot: int-e: nite nite nites int-e: ^8ball does this work? tswett[m]: That thing I said wasn't very funny. I'm going to request another one. tswett[m]: `" tswett HackEso: 860) Taneb: The other day on the channel I came up with BRAINLISPCODE, a LOLCODE-style LISP with an embedded bf derivative. I thought you should know. :-I \ 935) I stand by the argument that fungot is the one making the most sense in this channel. int-e: `url ../bin/" HackEso: https://hack.esolangs.org/repo/file/tip/bin/%22 fizzie: Oh, that's terrible. fizzie: (I mean the "pun".) fizzie: `cblprits " HackEso: shachäf int-e: `mkx ../bin/"//\`^ 2 quote "$@" HackEso: ​../bin/" HackEso: 1/1:120) cpressey, oh go to zzo's website. He is NIH AnMaster, really? I was strongly under the impression that zzo was invented here. \ 802) colemak is for people who think dvorak is too mainstream int-e: `" tswett HackEso: Usage: /hackenv/bin/`^ n cmd HackEso: t? ¯\(°​_o)/¯ HackEso: ​`t? ¯\(°​_o)/¯ int-e: `mkx ../bin/"//\`^ 2 "quote${1:+ }$1" HackEso: ​../bin/" HackEso: 1/1:905) If that sexy_goats had some sort of namespace, so other things could add their own sexy_goats method to Object or whatever to do something different, I would have no complaint \ 343) I used to be more irritated by alcohol Sgeo: you're not supposed to put it in your eyes int-e: `" tswett HackEso: 1/11:163) That is the mark of Gregor right there. tswett: except that Gregor didn't write that It's still the mark of Gregor. \ 167) elliott: just to bring you up to speed, you are now my baby nephew. wtf, elliott is a nephew and his uncle is here? what Heck yes I'm elliott's uncle. \ 240) There are white Africans out there, but, you know. A black swan in the hand do int-e: Oh, that's why we don't support this, hmm int-e: `mkx ../bin/"//allquotes | grep -P -i -- "$1" | shuff -random-source=/dev/urandom -n 2 | sport HackEso: ​../bin/" int-e: `" tswett HackEso: ​/hackenv/bin/": line 1: shuff: command not found \ 1/0: b_jonas: shuf with one f int-e: `sled ../bin/"//s=shuff=shuf= HackEso: ​../bin/"//allquotes | grep -P -i -- "$1" | shuf -random-source=/dev/urandom -n 2 | sport int-e: `" tswett HackEso: shuf: invalid option -- 'a' \ Try 'shuf --help' for more information. \ 1/0: b_jonas: fizzie fixed /dev/random by the way b_jonas: two hyphens b_jonas: for a long option int-e: `sled ../bin/"//s=-r=--r= HackEso: ​../bin/"//allquotes | grep -P -i -- "$1" | shuf --random-source=/dev/urandom -n 2 | sport HackEso: 1/1:325) but touchscreens should feel like poking a boob \ 622) i don't lie, i tell stories there's no difference *a int-e: `" elliott HackEso: 1/1:1020) beautiful summer / massacres in qusayr / sent from my iphone \ 995) that is better than any made up story i was about to tell int-e: `" spongebob int-e: `' spongebob HackEso: No output. fizzie: Do you actually need that shuf option? fizzie: I mean, I don't mind, just wondering if it's insufficiently random by default. int-e: `` echo $(seq 10 | shuf) HackEso: 7 8 3 6 1 10 5 4 2 9 int-e: `` echo $(seq 10 | shuf) HackEso: 4 10 8 1 5 9 6 2 3 7 fizzie: "By default these commands use an internal pseudo-random generator initialized by a small amount of entropy, but can be directed to use an external source with the --random-source=file option. An error is reported if file does not contain enough bytes." https://www.gnu.org/software/coreutils/manual/html_node/Random-sources.html fizzie: It doesn't specify where that initialization is coming from, though. int-e: context, https://hack.esolangs.org/repo/rev/3e54f8d1843f ... let's see the logs int-e: fizzie: I guess it's not needed. int-e: I copied it from `wisdom without thinking too much about it. Except that I retyped it and messed it up in the process, rather than mechanically copying it. int-e: And by `wisdom I mean `quote fizzie: Looks like we used the highly rigorous statistical test of oerjan having a feeling in order to prove that the default was insufficiently random. b_jonas: `whatis ' HackEso: ​'(1hackeso) - search quote database or print random quote b_jonas: `whatis " HackEso: ​"(1hackeso) - show two random quotes b_jonas: `whatis q HackEso: q(1hackeso) - search quote database or print random quote b_jonas: `whatis quote HackEso: quote(1hackeso) - search quote database or print random quote \ quote(8lambdabot) - no description b_jonas: `quote tswett HackEso: 163) That is the mark of Gregor right there. tswett: except that Gregor didn't write that It's still the mark of Gregor. \ 167) elliott: just to bring you up to speed, you are now my baby nephew. wtf, elliott is a nephew and his uncle is here? what Heck yes I'm elliott's uncle. \ 240) There are white Africans out there, but, you know. A black swan in the hand does no b_jonas: `q tswett HackEso: 163) That is the mark of Gregor right there. tswett: except that Gregor didn't write that It's still the mark of Gregor. \ 167) elliott: just to bring you up to speed, you are now my baby nephew. wtf, elliott is a nephew and his uncle is here? what Heck yes I'm elliott's uncle. \ 240) There are white Africans out there, but, you know. A black swan in the hand does no b_jonas: `' tswett HackEso: 163) That is the mark of Gregor right there. tswett: except that Gregor didn't write that It's still the mark of Gregor. \ 167) elliott: just to bring you up to speed, you are now my baby nephew. wtf, elliott is a nephew and his uncle is here? what Heck yes I'm elliott's uncle. \ 240) There are white Africans out there, but, you know. A black swan in the hand does no b_jonas: so none of these prints one random matching quote when you search? int-e: no, they print all quotes for some reason, in file order int-e: ' is a symlink to quote int-e: I suspect q is as well? fizzie: No, but it calls quote. fizzie: What's the right word for that? Should we call it a bashlink? int-e: `cat ../bin/q HackEso: quote "$@" b_jonas: ``` ls -dlF /hackenv/bin/{q,quote,\'} HackEso: lrwxrwxrwx 1 1000 1000 5 Jul 8 2017 /hackenv/bin/' -> quote* \ -rwxr-xr-x 1 1000 1000 11 Apr 7 2018 /hackenv/bin/q* \ -rwxr-xr-x 1 1000 1000 194 Apr 7 2018 /hackenv/bin/quote* b_jonas: ``` python3 '-cimport sys,os,random,re; open(1,"wb",closefd=0).write(random.choice([l for l in open(os.environ.get("HACKENV","/hackenv")+"/quotes", "rb") if re.search(os.fsencode(sys.argv[1]), l)]))' llio HackEso: ​ I can trust elliott_ to have an opinion on anything and everything Yes. And the best thing is: it is the correct opinion. b_jonas: prints one random quote that matches the regex "llio" b_jonas: ``` python3 '-cimport sys,os,random,re; open(1,"wb",closefd=0).write(b"".join(random.sample([l for l in open(os.environ.get("HACKENV","/hackenv")+"/quotes", "rb") if re.search(os.fsencode(sys.argv[1]), l)], 2)))' fun.ot HackEso: ​ boily: i'll probably stop programming the day i will hit the end of the program. \ elliott_: it's a machine that looks like you! b_jonas: # prints two fizzie: I assume the fact that quote prints all the matching ones is intentional -- the reasoning being that you might be looking for a specific one that you faintly remember. b_jonas: probably b_jonas: I generally use grep for those things, but it makes sense that quote can do that too b_jonas: but sometimes I want to read a random fungot quote fungot: b_jonas: fnord has a factorial opcode, and you will be teh positively fnord. b_jonas: because there are so many bad ones that you want to do the list five quotes delete one routine on just them fizzie: `randquote fungot fungot: fizzie: he was gushing about the power of the first HackEso: 807) fungot: what's your view on angels and other otherworldly beings? olsner: well i'm mentioning theoretical image to be dumped in rain forests of laukaa. fizzie: `randquote fun.ot HackEso: 431) elliott: an old colonel lost, but a new brother gained. together they will ascend, each time you must be adventurin'. fizzie: There you go. b_jonas: ah, randquote b_jonas: ``` python3 '-cimport sys,os,random,re; open(1,"wb",closefd=0).write(b"".join(random.sample([b"%d) %s"%(1+n,l) for n,l in enumerate(open(os.environ.get("HACKENV","/hackenv")+"/quotes", "rb")) if re.search(os.fsencode(sys.argv[1]), l)], 2)))' fun.ot HackEso: 768) olsner: over the undertow! under the overpass! around the future and not just fnord for example. it's just the syntax \ 668) elliott: but, there are imps around, the pad. it's hard to remember though your cross-hairs would never settle on an innocent little girl. chokes up now imagine she's white. b_jonas: ^ in case you want line numbers int-e: `` allquotes | shuf -n 1 HackEso: 1194) fungot: what do you do to get rid of information you no longer need? olsner: emacs lisp for a while int-e: (is basically what `quote does) b_jonas: `whatis randquote HackEso: randquote(1hackeso) - no description int-e: (without arguments) b_jonas: `addwhatis randquote(1hackeso) - print a random quote matching a regular expression HackEso: addwhatis: replaced 'randquote(1hackeso)' b_jonas: What's the simplest infinite loop in /// ? The wiki article doesn't seem to say. b_jonas: oh right, that's /// b_jonas: what is the simplest loop that reads infinitely many patterns then? shachaf: hint-e shachaf: My learned clauses are so scow. ggtylerr: Heyo, is there anyway I can reset my password without having to wait for 24 hours? I accidentally put in the wrong email address (I have to primary ones) and now I can't send another one... ggtylerr: *2 primary ones ggtylerr: Hakerh400, if you can see this message, tysm! can't login rn since I forgot my pw and it takes 24 hours to reset it, but I'll definitely check it out ggtylerr: ^^^ found out reset emails get sent anyways despite a wrong email address inputted ggtylerr: so i got back my account w/o waiting for a full day \o/ fungot: b_jonas: doing is infectious, i tell ya. do i get out of vi. i use latex. fizzie: There's at least Mirror Move and Copycat. kingoffrance: pokemon, pshaw, us sun kings do final fantasy reflects and such :/ b_jonas: kingoffrance: not even the collectible card game where you have to be rich to get the best cards? kingoffrance: well that sounds tempting kingoffrance: we're metaphorically filthy rich int-e: . o O ( should use sleeves ) kingoffrance: we only do alchemy metaphorical riches b_jonas: I like the april fool announcement https://magic.wizards.com/en/articles/archive/arcana/announcing-vault-vaults-2009-04-01 which mentions "the safe that contains Richard Garfield's personal Black Lotus collection, and the underground bunker that contains Richard Garfield's personal black Lotus collection", and "black Lotus" is linked to a webpage about a car of brand Lotus. The difference is that the b_jonas: former kind of Lotus is never shiny but the latter kind usually is. kspalaiologos: I'm writing a los alamos chess engine kspalaiologos: it's so fun kspalaiologos: 400 lines of C already b_jonas: you want to run that on bfbot? b_jonas: `? bfbot HackEso: bfbot? ¯\(°​_o)/¯ b_jonas: ^ this should say something about the bot being on vacation kspalaiologos: you may have inspired me lol b_jonas: for incineration kspalaiologos: but for chess I'll set up a separate bot kspalaiologos: because why not kspalaiologos: that's awesome idea b_jonas: I don't play chess, so I don't think I'll use such a bot much b_jonas: oh by the way, prerequisite before you write an esoteric chess engine: http://www.nanochess.org/chess.html Oscar Toledo's golfed chess programs; kingoffrance: they say the knights templars brought it back from crusades (chess == shah, persianish for "king") and the pope or somebody demanded a "bishop" character; its basically a "how to overthrow a gov." game b_jonas: you may also want to check the one chess-related IOCCC winner that isn't by Oscar Toledo, and Tom7's silly chess strategies kingoffrance: (i cant remember what the "bishop" was before the rebrand) kspalaiologos: I've seen Toledo's chess programs kspalaiologos: but I kinda want to roll my own kspalaiologos: that will be strong et all kspalaiologos: you know imode: https://community.arduboy.com/t/brainf-ck-interpreter/7481 zzo38: The bishop was a elephant at first. What I read is that they called it a bishop because they did not know what is a elephant zzo38: (The queen also was not originally called that; also the bishop and queen's movement were different before they made the modern rules.) kmc: ah, is this because the game was imported from India? kmc: what were the old rules? zzo38: The elephant moves exactly two spaces diagonally and can jump; the advisor (now the queen) moves exactly one space diagonally and can't go orthogonally; promotion is always to queens; no pawns double step; no castling; once per game the king can go like a knight. b_jonas: zzo38: that sounds unlikely. everyone knew elephants form Pilnius, didn't they? kingoffrance: yeah, i remember elephant now that you say it kingoffrance: somebody wanted a bishop :/ zzo38: b_jonas: I don't know. kingoffrance: some bishop wanted a bishop i mean :/ zzo38: Maybe that is true; I don't know. kingoffrance: im saying surely they knew what an elephant was, they purposely wanted a religious figure to defend the kingdom or whatever kingoffrance: marketing-wise zzo38: Maybe it is; I don't know about that history so well b_jonas: I think it's not an elephant because you can't turn an elephant figurine on a lathe. b_jonas: So an elephant would work as long as you only sell very expensive board, but not for a board game developed for mass market. kspalaiologos: Los Alamos chess has no bishops kspalaiologos: also, the engine is pretty much ready kspalaiologos: it's able to generate moves and validate 'em kspalaiologos: I wonder does the board fit in the irc message kspalaiologos: it's 42 characters long if in one line kspalaiologos: not that much if you ask me kspalaiologos: should it display board on multiple lines or a single line? zzo38: On just one line, I think, you can use FEN, I think kspalaiologos: fen is very, very uncomfortable to play kspalaiologos: imagine only thing you see is fen and you want to play kspalaiologos: yet multiple lines (6) kspalaiologos: + an user line for each kspalaiologos: 7 lines per move kspalaiologos: around 30 moves a game zzo38: Although FEN is only needed for the initial position. After that just use the algebraic notation for each move. zzo38: You do not need to repeat the board after each move. kspalaiologos: it's even more uncomfortable kspalaiologos: playing blindfold with a chess engine int-e: I suspect ♔♕♖♗♘♙♚♛♜♝♞♟ are your friends in this case zzo38: I think you can just write 1. e4 e5 2. Nf3 and so on. int-e: It's not about having complete information, it's about not having to visualize a full board. b_jonas: [ 'rnbqkbnr',(8$'p'),(4 8$'.'),(8$'P'),:'RNBQKBNR' b_jonas: ah yes... no j-bot zzo38: You can place the pieces on your own board if you want to b_jonas: [ 'rnbqkbnr',(8$'p'),(4 8$'.'),(8$'P'),:'RNBQKBNR' j-bot: b_jonas: rnbqkbnr j-bot: b_jonas: pppppppp j-bot: b_jonas: ........ j-bot: b_jonas: ........ j-bot: b_jonas: ........ j-bot: b_jonas: ........ j-bot: b_jonas: PPPPPPPP j-bot: b_jonas: RNBQKBNR arseniiv: bishop is still, and I think forever, called elephant in Russian chess terminology, officially. There’s also an unofficial name translated as “officer”. I don’t understand why that one perseveres, as elephant is just four letters long and it’s not a taboo word or what int-e: arseniiv: What about knights? arseniiv: also queen is ferz, that one borrowed word having no non-chess meaning at all, and yes, knights are just (male) horses arseniiv: I should check what’s a non-chess meaning of rook to elaborate further fizzie: And knights are a the generic word for any riding animal ("ratsu"). int-e: That would agree with the runner idea. int-e: Anyway, "rook" is pretty mysterious to me. fizzie: Rooks are towers, but to be fair, they *are* towers. arseniiv: “rook” as a chesspiece seems not having a non-chess meaning, as a bird rook is not a partially synonymous castle. Russian rook name is an archaic word for boat, and an unofficial word (I think it should be much rare than an officer bishop vs. elephant bishop case) is a French borrowing or something, for a castle int-e: Oh it's a transcription of the arabic/persian terms int-e: Well, loaned from there anyway... "Middle English rok, from Anglo-French roc, from Arabic rukhkh, from Persian rukh" arseniiv: now, at last pawn here is again a chess-exclusive word (plus its metaphorical usage, exactly as in English) derived analogously from a footsoldier int-e: (it's too old for scripture to play any significant role in the process) arseniiv: and king is king. Boring! int-e: boreking fizzie: `thanks kings HackEso: Thanks, kings. Things. arseniiv: Springer=jumper => oh! now I suddenly understand something about some publisher fizzie: Oh, that's why they've got that logo. arseniiv: exactly! int-e: Always nice to spread some knowledge :-? arseniiv: I wonder is there a page collecting these names and connotations between different languages fizzie: https://en.wiktionary.org/wiki/Appendix:Chess_pieces for the first part. fizzie: For just the list, I mean. fizzie: You'd have to click on the individual words for the meanings, unfortunately. arseniiv: fizzie: oh, that’s useful! though I don’t know for what int-e: arseniiv: if you can't find any other use, it's good for https://www.xkcd.com/609/ arseniiv: yes, I forgot that queen is occasionally a queen to, but not officially, as that table mentions too, if one to suppose the first name is always an official one if it has sense for that language’s chess authority arseniiv: int-e: ah, int-e: Oh it should be noted that "Springen" exists as a particular kind of horse riding. And in a military context, I suspect it's a kind of reserve that you can use to fill gaps in the front. arseniiv: wait, didn’t Munroe had another one about that effect and called it Wikipedia effect or something? zzo38: The queen was originally called ferz before they called it queen. The rook is called that because it was a corruption of a Indian word for a chariot (in Chinese game the piece with the same movement as a rook is called a chariot or car). int-e: arseniiv: you're right: https://www.xkcd.com/214/ int-e: arseniiv: explainxkcd further points to the image title in https://www.xkcd.com/1501/ zzo38: Wiktionary says "rook" is from a Arabic, from Persian (in both Arabic and Persian it means that chess piece), in turn from Sanskrit word meaning a chariot or car. arseniiv: int-e: oh, even that many! int-e: arseniiv: I suspect Munroe has a hard time *not* doing one of those comics every month. int-e: I mean he must be ending up in those spirals constantly, while looking for comic ideas and otherwise entertaining himself arseniiv: the former hadn’t occurred to me arseniiv: the latter is not that mysterious as he says too :D kmc: fungot: have you ever been to the fungus fair fungot: kmc: in my experience, fnord type constructors would be defined by the angles the lines of what you call ' objects?' b_jonas: fungot: no, that's not how type constructors work fungot: b_jonas: the fnord seems a less stable ( historical) state than -as-behaviour.) imode: hm.. what if you modified `]` to mean the opposite of `[`. i.e "dequeue an item, if it's true, loop to the beginning of the loop, otherwise move on to the next instruction." imode: https://repl.it/repls/RunnyDistinctDeclaration it's a start. imode: one thing I do like about this implementation is that it guards against spinning processes. if all of your processes are dead or blocking, it just stops. HackEso: 1/1:hth//hth ([ʰtʰh̩]) is help received from a hairy toe. It is not at all hambiguitous. \ nø//nø means 'Char', apparently. Maybe like when you burn a lot? \ lifthrasiir//lifthrasiir is shunned by the rest of his country for being no good at League of Legends. \ #esoteric-blah//#esoteric-blah blah blah. Blah blah, blah blah blah blah. Blah blah blah! \ vegemite//Vegemite is genericized marmite for intellectual property reasons. kingoffrance: in atlas and/or reverse atlas news; theres totally a card with dude holding up "the world" on google right now kingoffrance: he gets around kingoffrance: it seems this one is mexican imode: ZA WARUDO zzo38: There is a Magic: the Gathering mystery card called "Corrupted Key". If it is tapped, your creatures have menace and deathtouch. Do you have the card database with the mystery cards in this IRC? shachaf: `card-by-name corrupted key HackEso: No output. shachaf: `card-by-name corrupted HackEso: Corrupted Conscience \ 3UU \ Enchantment -- Aura \ Enchant creature \ You control enchanted creature. \ Enchanted creature has infect. (It deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) \ MBS-U \ \ Corrupted Crossroads \ Land \ {T}: Add {C}. ({C} represents colorless mana.) \ {T}, Pay 1 life: Add one mana of any color. Spend this mana only to cast a spell with devoid. \ OGW-R \ \ Corr shachaf: It seems not. shachaf: I don't remember what Menace is. Was there a rules lookup command? b_jonas: shachaf: we don't have one kingoffrance: well, i have reverse corrupted keys zzo38 , but that explanation makes total sense zzo38 kingoffrance: im not tapping noone, relax b_jonas: ``` grep -i menace /hackenv/share/mtg/rules.txt | tail -n+2 HackEso: 702.110. Menace \ 702.110a Menace is an evasion ability. \ 702.110b A creature with menace can’t be blocked except by two or more creatures. (See rule 509, “Declare Blockers Step.”) \ 702.110c Multiple instances of menace on the same creature are redundant. \ Menace \ An evasion ability that makes creatures unblockable by a single creature. See rule 702.110, “Menace.” kingoffrance: also, totally makes sense, yes kingoffrance: douthtouch is lifetouch just depends on which "bible" people go by kingoffrance: there are lots of regional variants zzo38: Deathtouch means damage this object deals to a creature will cause state based actions to destroy that creature even if the damage doesn't equal or exceed its toughness. There is no "lifetouch" in Magic: the Gathering, and I don't know what "douthtouch" means (is it like "deathtouch"?) kingoffrance: we have different bibles zzo38 :) zzo38: I fail to see what the Bible has to do with it. kingoffrance: written by magicians zzo38: I do not understand. b_jonas: kingoffrance: card with dude holding up "the world" => do you mean https://commons.wikimedia.org/wiki/File:Bembo-Visconti-tarot-arcanum-21-world.jpg or other https://commons.wikimedia.org/wiki/?curid=11291208 ? kingoffrance: theres a first coming set of catholic keys, and theres 2nd coming protestant keys basically kingoffrance: so they are death touches w.r.t. each other zzo38: I thought a card holding up the world might refer to one of the trumps in the tarot cards, but "on google right now", it is unclear kingoffrance: modern bibles are my death touch basically kingoffrance: err, the death touch that kills me zzo38: (Although I don't use Google much, so I don't know.) zzo38: kingoffrance: OK, although I was discussing Magic: the Gathering cards, rather than Catholic and Protestant religions kingoffrance: keys are keys :/ kingoffrance: death touches are death touches b_jonas: zzo38: "on google right now" means that he's looking at the image of such a card through the internet, potentially the very image that I linked zzo38: b_jonas: OK, but then he didn't say very clearly, at least to me kingoffrance: the google logo things kingoffrance: its some holiday or something kingoffrance: how they shapeshift the google logo on www.google.com might be gone now depending on your timezone zzo38: O, OK, now I looked. Yes it is still there. b_jonas: so apparently the hoster of the Everyday Heroes and The Inexplicable Adventures of Bob webcomics has changed to one of those horrible hosts where you need to overload your computer with javascript ads before it is willing to show the webcomic, and even then you need one click to hide an ad and another to view the comic in full resolution. gocomics.com has already been such a webcomic host for a while, b_jonas: but now there's another one. b_jonas: either that, or their website is just plain broken. I haven't tried to get through their javascript yet, so I don't know if the comic behind it is actually accessible. b_jonas: I'll try some day when I feel more adventurous. int-e: fungot: Can you do multivariate optimization? fungot: int-e: it's finland! :) i'm stealing their hidden stash of alcohol. for some reason. it could spend n ticks to mark a certain spot, just to show that b_jonas: int-e: not anymore. training the markov models isn't built into fungot, he gets the models already precompiled, and nobody knows how fizzie created those models lots of years ago fungot: b_jonas: i was about to mention that int-e: b_jonas: I'm tackling Ponder This, and I'm doing stupid random hillclimbing instead of finding a proper tool for the job. int-e: I'm successful, mind you. But it feels wrong. b_jonas: int-e: what's Ponder This? it's not Advent of Code, right? int-e: http://www.research.ibm.com/haifa/ponderthis/challenges/December2019.html int-e: A monthly puzzle by some IBM Research fault, has been going for over 20 years. b_jonas: interesting. I didn't know about that puzzle set b_jonas: anyway, as for your original question, GSL https://www.gnu.org/software/gsl/ has multivariate numerical optimization with machine doubles, and has a C interface, including that you give it a C callback that computes the function you want to optimize and possibly its derivatives b_jonas: it calls it "Multidimensional Minimization" b_jonas: and there was a link, let me try to find it, about more software for multidimensional minimization, b_jonas: plus you can find such libraries distributed with various computer algebra software b_jonas: the webpage that gives those links might be somewhere in the channel logs too b_jonas: found it. int-e: http://plato.asu.edu/sub/pns.html list of numeric optimization software b_jonas: look at that one fizzie: In fact, I do know how I created them. In fact, most of them were created almost exactly following the steps at https://github.com/fis/fungot/blob/master/varikn/readme.txt fungot: fizzie: so it *is* long, and how a distributed system needs to be a really slow aircraft, though, fizzie: I do not have a copy of the exact parameter values I used, so I can't quite recreate the same results from scratch, but it should be close enough. fizzie: Some of the older (better?) models were trained with a super-crummy C++ program, which I still have -- though I'm not sure if buildlm.cc, buildlm-old.cc or buildlm-old2.cc is the relevant version for each of them. I have no excuse for why it's not in version control, either. int-e: Oh well I tweaked my code to the point where it finally seems to be approaching a local minimum. b_jonas: int-e: good. nevertheless I recommend that list page, in case you meet a more complicated numeric optimization problem in the future int-e: b_jonas: yeah it does look useful, thanks. izabera: got a problem izabera: i have a graph with 142k nodes and 2.5mil edges izabera: and i want to compute the diameter izabera: how do i make this problem tractable? Taneb: Solve the problem of making yourself not want that? izabera: well i really want that izabera: and cloud computing is cheap izabera: so i need a way to distrubute the floyd warshall algorithm across different machines izabera: in a smart way so that machines try to do as much as they can locally and don't always compete for shared resources Taneb: https://www3.nd.edu/~tweninge/pubs/PW_HPGM.pdf here is a paper Taneb: It might even be helpful myname: I don't know if I'd use floyd warshall to compute the diameter in this case at all myname: like, given the graph is simple, you can already calculate an upper bound of the diameter myname: that's a tough one I maybe think about later, but I just assumed that you can make assertions about cycle lengths which in turn will reduce the diameter myname: like, if you have at leas as much edges as you have nodes, you will have a cycle of at least length 3 reducing the diameter from a maximum of n to a maximum of n-1 izabera: i think i can do dijkstra from each node to every other node izabera: it's trivially parallelisable by just having a local copy of the adjacency matrix on each machine izabera: is this stupid? myname: is this really an advantage over a normal floyd warshall? izabera: i don't know how to split it across machines izabera: ok i'm dumb myname: you will need to have at least n^3/(n log n) processes for that to be faster izabera: with floyd warshall you'd need to write to the shared cache all the time izabera: how do you parallelise that? myname: not sure, that's why I wouldn't use that :D izabera: i just want an algorithm that's reasonably fast and that can be split myname: yeah, but I would assume there exists a reasonably parallelizable algorithm to calculate the diameter of a graph that does not rely on calculating each distance and finding the maximum in those myname: like, if you can give an upper bound on the diameter (which I believe you can), you may be able to parallelise the search based on clusters of size g(max diameter) izabera: i have a strong feeling that the diameter is like 7 izabera: but i'm not sure izabera: altho i'm not sure i understand how your idea works myname: I am thinking about generating a transitive hull and check for completeness of the resulting graph myname: that might work fizzie: Here's another paper: https://www.ntu.edu.sg/home/arijit.khan/Papers/vertex_centric_edbt17.pdf fizzie: I don't know if it's any good, but it's got a "vertex-centric" algorithm for a diameter, and there are things to parallelize algorithms like that, like our "Pregel". fizzie: (TBH, it doesn't look particularly efficient, more a toy example.) izabera: fizzie: https://pregel.it/en/ izabera: looks delicious izabera: https://blog.acolyer.org/2015/05/26/pregel-a-system-for-large-scale-graph-processing/ izabera: seems like a google thing izabera: didn't know that you're at google Taneb: izabera: did you look at the PDF I linked fizzie: I don't go around advertising it, though it's not a secret either. izabera: Taneb: i'm dumb and it's complicated LBPHacker: lol wut LBPHacker: (ignore me, my client is acting up) wib_jonas: izabera: re computing diameter, that looks borderline. do you have enough RAM to allocate a square matrix whose width and height is the number of points, or at least a triangular half of it? the elements themselves can be small, probably single bytes, possibly two bytes if the diameter is large. wib_jonas: if you do have enough RAM for that, then use Floyd's algorithm to compute the pairwise distances wib_jonas: that's not an impossibly large amount of memory these days, you can probably borrow some time on a machine with that much RAM wib_jonas: izabera: are there edge weights? myname: is computing a single transitivity step for a graph in matrix form that hard? wib_jonas: if you suspect that the diameter is small, then you can optimize it well, you don't need a full Floyd wib_jonas: it still won't be fast, but it will be much faster and easier than trying to figure out some distributed solution wib_jonas: if you don't have enough RAM, then yes, run an individual BFS from each node, to make sure that you can reach all nodes of the graph in few steps wib_jonas: in fact, that's probably faster than anything with a full matrix, because your graph is sparse enough wib_jonas: so ignore my previous idea about a large matrix and floyd's algorithm wib_jonas: you said your graph is very sparse, so just do a BFS from each individual node to find the distance of the farthest node from there wib_jonas: I suggest that you implement the DFS using two arrays with one bit each for each node, to know which one you've visited in the previous step and the current step, and passes of reading through the edge list in sequence wib_jonas: I suggest sorting the edge list for some speedup wib_jonas: izabera: ^ that would work reasonably fast for a graph of small diameter, because you're reading the edge list sequentially, and you only need to access 284000 bits i.e. 35 kilobytes random access wib_jonas: if you double the edge list, making it an arc list (storing each edge in both directions) and sort it by destination node, the you only need random access to one of the bit arrays and sequential access to the other bit array, so the array with random access just fits in the L1 cache wib_jonas: so that's what I'd recommend wib_jonas: this is assuming that the graph is confidental or you want to solve it yourself; otherwise just publish the graph and offer money to people for computing the diameter wib_jonas: require solvers to give not only the diameter, but the indexes of two nodes that are that far apart, so you can verify easily FireFly: ah yes, the O(incentive) approach myname: wib_jonas: that would not suffice myname: i can easily claim the diameter being 1 and give you two nodes with a distance of 1 myname: you would need to have at least one honest participant wib_jonas: myname: it doesn't suffice, but your solution doesn't work, because izabera can find the submission that claims the highest diameter, and run a single breadth-first search from one of the nodes that it claims to find the distance of the two nodes that it claims, and if that's 7 then that proves your submission incorrect wib_jonas: the failure case is that everyone claims a diameter that is lower than the actual one wib_jonas: or that izabera is DOSed by too many incorrect submissions wib_jonas: myname: also the spec said "i have a graph with 142k nodes and 2.5mil edges", that's not a complete graph so the diameter can't be 1 myname: well yeah, but i should be able to find some nodes with distance 3 pretty easily myname: oh, couldn't you just contract parts of the graph? myname: like, if you have a path of length n > 1, you could just make that into a path of length 1 with a weight of n myname: if you do end on a complete graph, you just need to find the biggest weight myname: or you could just split the graph in half, substitute the missing half with a new node and try some clever merging of paths, that run through that myname: (paths meaning longest distance travels between two nodes in the later case) int-e: wtf is this "The download cannot be saved because an unknown error occurred." int-e: Oh, it's me, more specifically umatrix interfering in a way I have not identified before--it categorizes the request as "other" and blocks it. Fine. mroman: huh. long time no see I guess mroman: https://pastebin.com/EcuX91Hk <- and I'm already back at doing useless things. HackEso: ​`4 is equivalent to `5 , except that it only repeats 4 times. Useful when you've already run a command forgetting to use `5. b_jonas: can't people invent normal names for these brainfuck-equivalents? b_jonas: ok, I'm not sure I'm allowed to complain, given how I name things arseniiv: b_jonas: how? int-e: b_jonas: I've solved the AoC problems so far over the past 6 hours. shachaf: Today's AoC challenge: Prove that every vector space has a basis. int-e: KISS is such a powerful principle. fizzie: I have no idea how long I've spent, because the timing starts from what's 5am here. fizzie: Guess I could extrapolate from the delta between part 1 and part 2 though. int-e: You can still keep track of the time *you* spend. fizzie: Yes, but not retroactively. :) int-e: Right. fizzie: Well, maybe from file timestamps. int-e: I'm extrapolating from part 1 of the 1st day ;) int-e: I'll lose track if I continue doing this. int-e: The leaderboard scoring is atrocious, btw. fizzie: I'm kind of happy it is, because otherwise I'd probably start caring about it. fizzie: (In fact I did today's right when it opened, because happened to be awake.) fizzie: Fortunately it's fun enough to just write those things. int-e: for the later problems I could reconstruct things reasonably well by the file stamps of the inputs int-e: Hmm, or maybe not. I have not been consistent about downloading the input when I start. int-e: Oh well, who really cares. b_jonas: shachaf: https://www.xkcd.com/804/ I told you not to take the axiom of choice int-e: meh, perhaps somebody cares: wc counts of what I've produced: http://paste.debian.net/1120577/ fizzie: I think my Python's been more verbose. fizzie: http://ix.io/245v fizzie: Well, same order of magnitude. fizzie: (Flatter directory structure though.) int-e: I expected slightly harder problem (so more exploration) int-e: It's still nice not having to rename the 'input' files, but it's a minor thing. int-e: Also I broke the Intcode API once so having copies is actually healthy. fizzie: I'm sharing, that's why I have test.py (which runs all the day*.py and compares their outputs to a golden copy). fizzie: Although from the "your Intcode computer is now complete", maybe there won't be any more. fizzie: I'm pretty sure I was doing these some previous year as well, but no idea where I've stashed the solutions. int-e: yeah, the 2019 is a bit silly :) fizzie: To be fair, 'aoc2019' is the only thing in my '~/src/puzzles'. Not because there haven't been any puzzles, I just think I've used ~/tmp, ~/src/misc, or whatever. arseniiv: https://www.xkcd.com/2235 haha arseniiv: luckily AoC can be googled by “aoc of code”; just "AoC" in quotes gives bizarre results, apparently lacking respect for mixed case in queries int-e: quick, we need an axiom of code fizzie: Axiom of Verge. int-e: fungot: do you plundervolt? fungot: int-e: not the nth? i didn't vote for either of these been used for any significant sites? arseniiv: fungot: what is your nth-child? fungot: arseniiv: not if you stopped working on it, or lump it.' many compilers will optimize them to the site and got the most interesting code is in arseniiv: a poor optimized child arseniiv: int-e: I’d prefer an axiom of chocolate! arseniiv: or maybe not int-e: axiom of chocolate: the darker the better int-e: (Though honestly I'm not sure about the 90%+ area.) fizzie: Someone had left some super-bitter "98%" or whatever chocolate at the snack area, I think that was kind of overdoing it. fizzie: There were like six or eight different kinds, and they were all like that. fizzie: I'm sure it's healthty, but still. int-e: heh, I don't eat chocolate because it's healthy (or not) int-e: But I just realized that I have some 85% chocolate around. int-e: And that's quite good :) fizzie: That sounds reasonable enough. int-e: I had some super high % chocolate and found that it was ... dry, almost dusty. shachaf: Do you like B-trees? shachaf: I don't like dark chocolate. int-e: So yeah, I share some super dark chocolate skepticism. int-e: shachaf: What's the difference between B+ and B* trees? shachaf: I think there are a lot of different points in B-tree design space, and people named a few of those points, but mostly not the ones I actually want to use. shachaf: B+ trees store values only in the leaves (reasonable), and also have links between leaf nodes (is that that important?). shachaf: B* trees will share keys with both left and right siblings, I think, so nodes can be 2/3 full? shachaf: The point is: I thought B-trees were annoying and complicated until recently, when I thought about them. Now I think they're simple. int-e: Hmm, is that that important --> for external storage, I imagine it may help for linear scans? shachaf: Sure. I mean, it seems like a reasonable optimization for some uses, but you make lots of those when you implement things in practice. int-e: (But I didn't really expect any answers.) int-e: fungot: do you like side-stepping questions? fungot: int-e: that wraps functions... and just eval it in some ways shachaf: Wait, which question did I side-step? int-e: shachaf: that wasn't about you int-e: I've realized that I've identified a thing that *I* like. shachaf: But everything is about me. int-e: shachaf: Fine. You were the muse, the catalyst. shachaf: `? shachaf int-e: No more passion fruits? shachaf: `? bell pepper HackEso: bell pepper? ¯\(°​_o)/¯ shachaf: Unicode has two code points with the same name? shachaf: U+7 and U+1F514 shachaf: I think I knew that once. int-e: No bell pepper? Only 🌶... int-e: @google 🔔🌶 lambdabot: http://www.google.com/url?q=https://www.dailykos.com/story/2019/4/19/1849291/-PWB-Freidai-Follies-and-Foolishness lambdabot: Title: Уведомление о переадресации int-e: Weird page. Oh well, I don't know what I was trying to find there anyway. int-e: ``unidecode 🗭 # not for Democrats? HackEso: ​`unidecode? No such file or directory int-e: `` unidecode 🗭 # not for Democrats? HackEso: ​[U+1F5ED RIGHT THOUGHT BUBBLE] int-e: `` unidecode 🗬 # this one also exists, of course HackEso: ​[U+1F5EC LEFT THOUGHT BUBBLE] int-e: `` unidecode 🗯 # haha! HackEso: ​[U+1F5EF RIGHT ANGER BUBBLE] shachaf: Where's my RIGHTEOUS ANGER BUBBLE? int-e: `? shachaf int-e: Ah, a ^O. int-e: fungot: hh and cc or hpp and cpp? fungot: int-e: someone is either up very late, which can be checked fizzie: h and cc hth shachaf: h++ and c++ hth shachaf: h and c hth int-e: shachaf: But I like a language strictly between C and C++... basically C++ without dynamic methods (and consequently, very limited inheritance). int-e: dynamic -> virtual shachaf: What's the benefit of inheritance at all? int-e: You can still have some limited aggregation going on. int-e: Only extending interfaces and functionality... no overloading of methods or things will quickly become insane. int-e: (virtual methods are what keep this sane) shachaf: Wait, are you for or against virtual methods? int-e: The main thing I want is that every (struct/class) type has an associated namespace. int-e: shachaf: It depends? They are essential for OO. I don't want to do OO though. shachaf: I've been wondering how important that is for a while. shachaf: Is there a big advantage to x.f() over foo(x)? shachaf: I meant x.foo(), of course. int-e: Little, if you can overload foo(). int-e: But C can't overload functions either. int-e: I think there's an advantage over having x.foo() or foo(x) vs. having to write type_foo(x) where 'type' happens to be the type of x. int-e: I'm not a very fast typist, so that kind of redundancy really hurts. int-e: I also find chaining of operations attractive... if you have struct T { T &set_foo(); T &set_bar(); }; T t; and do t.set_foo().set_bar(). shachaf: I like (T){.foo = x, .bar = y}; shachaf: Which C has had for 20 years and maybe C++ is finally getting? int-e: Anyway, if you were to add methods to structs in C I might consider using it again ;) ) shachaf: type_foo has the benefit that you can search for it. int-e: Yes, we all rationalize our own choices. shachaf: I said a few lines ago that I've been wondering about it for a while. shachaf: In particular I mean that I'm not sure whether it's a good idea or not. int-e: It doesn't help C's case that it's largely a subset of C++. (The field initialisers are a good point, of course.) int-e: So basically the moment a person (like me) finds /anything/ they like in C++, they are tempted to switch. shachaf: whoa, I just realized how my own program worked. int-e: Btw I also find the iostream and iomanip stuff cute. shachaf: I had a bug which turned out to be a clever trick. shachaf: It did exactly the right thing. I'm going to document it and pretend it was what I meant to do all along. shachaf: Wait a minute, no. Hmm. int-e: Been a while since I've done that, but yeah... those are interesting experiences. int-e: Well, the last time was actually code that I /knew/ couldn't work, that turned out to work /most/ of the time (much more often than it reasonably should), but not always :) int-e: I was really glad when I finally discovered that it did, in fact, break. int-e: (This was with last month's Ponder This, in code updating determinants which worked with insufficient precision... and still produced exact results most of the time.) shachaf: https://slbkbs.org/tmp/b-trees.txt int-e: The time before that was an overzealous (by my understanding at the time of writing it) check in a combinatorial search procedure which I could later justify to actually be valid (for quite subtle reasons). int-e: "overzealous check" -- this was for pruning a search tree, so I pruned more than I thought I could. int-e: shachaf: funny, I always think of B+-trees as 2-3-4-trees, only wider. int-e: And 2-3-4-trees are 2-3-trees with lazier splitting. shachaf: I always think of red-black trees as 2-3-4 trees. int-e: (Are B- -trees those that can have between n and 2n-1 children at each node?) int-e: I usually don't think of red-black trees at all. shachaf: Did you know they just encode 2-3-4 trees? shachaf: Anyway, I like this array perspective. int-e: but yeah, if I have to, I collapse it to a 2-3-4 tree. shachaf: I think just about all the operations are obvious from this viewpoint. int-e: AVL trees make so much more sense to me. int-e: shachaf: I think the array perspective is one of many possible views and it's impossible to say which view clicks for any particular person. int-e: Obviously /some/ sort of array is inherent in any Bx-tree because a flat array is what you get for very small data sets. shachaf: I mean, I've written a bunch of B-tree code in the past, I was already familiar with the data structure. int-e: And observing some sort of chunking at the leafs when you flatten the tree is also inevitable. int-e: But whether you view the thing top-down, emphasizing the tree structure, or bottom-up, empahsizing the (chunked) flattened array... is up to you. int-e: If you do it bottom-up, you get intermediate forests as you group consecutive chunks under a common ancestor node. int-e: So it's arrays all the way up. ;) int-e: But trees all the way down. shachaf: It's plausibly reasonable to use different kinds of indexing for blocks and for values. shachaf: Since they're very different sizes. int-e: Btw, I don't know if anything of what I just wrote made any sense. But I'm very happy with the last two lines. int-e: Okay, bedtime. shachaf: C++'s std::map is usually a red-black tree. shachaf: I'm not sure why. b_jonas: shachaf: C++ std::map interface is defined such that when you modify the tree, the address of the contained items doesn't change (unless you erase that specific item), nor can the iterator to items. that negates some of the advantages of better B-trees. it could still use a B-tree with the items accessible through an extra pointer or index, but it's easier to just put every item in a separate node that b_jonas: never moves like a B-tree does. shachaf: OK, that's a good reason not to use std::map. Taneb: izabera: did you figure out graphs? cpressey: s/logic/theory/ wib_jonas: cpressey: I think that latter is Dijkstra's "Go To Statement Considered Harmful" theorem, though it was probably known before Dijkstra, because people had cpus with a single loop that fetches instructions then executes them wib_jonas: cpressey: "https://esolangs.org/wiki/(0)" may be relevant for some infinite versions shachaf: Why is deletion so complicated? wib_jonas: shachaf: that's the tradeoff about AVL trees versus B-trees or related. AVL trees have more complicated algorithms in general, but fast and simple deletion; B-trees and red-black trees have simple algorithms, but deletion can take O(log(n)) time. shachaf: I don't care about about it being slow, right now, just complicated. shachaf: Surely AVL tree deletion takes logarithmic time, anyway. wib_jonas: shachaf: hmm, I might be misremembering, let me check the Knuth book wib_jonas: shachaf: you should look at the Okasaki book's description of red-black trees if you want a simple one shachaf: Maybe I shouldn't be doing B+ trees? shachaf: I'm not interested in red-black trees. wib_jonas: red-black trees look very complicated to me at first, but when Okasaki explains them, they're simpler wib_jonas: shachaf: well, what data structure you want depends on what you want it for. for storing on a disk that you read in sectors/clusters/blocks, some sort of B-tree with high degree is usually better shachaf: Binary trees are scow. wib_jonas: shachaf: also you could try to use a library written by someone else, such as that B-tree library from the future that ais523 will write wib_jonas: ok sorry, I was wrong. AVL tree deletion may require you to modify O(height) nodes wib_jonas: its insertion of a single node into AVL trees that is faster, because it requires you to adjust only O(1) nodes wib_jonas: whereas with a B-tree, an insertion may require you to adjust O(log n) nodes wib_jonas: shachaf: because if someone else already wrote a good and well-tested library, it's less likely to be buggy than if you write one wib_jonas: and there are a lot of balanced search tree libraries out there int-e: ... so wrong, so nice: pl = read . ("[" ++) . (++ "]") int-e: Oh yay, another variation on the intcode interpreter. int-e: (Purity means that synchronizing input and output takes extra effort... and as it turns out, that was not really required.) int-e: (while the description says that the hull painting robot can use input instructions all the time, the actual program nicely follows the patter of reading one input, then producing two outputs) int-e: I've also started to abuse pattern guards a lot... int-e: > let f x | x <- x+1, x <- x*2 = x in f 4 fizzie: Yeah, my prediction that we'd've seen all of Intcode got obsolete in record time. fizzie: The one I have now has four I/O mechanisms. One to stdin/out with prompts for interactive use, one that's reads from / writes to a list for earlier problems, one which uses Python's thread-safe queues because I made that feedback loop actually run technically in parallel (I'm sure it's always 4/5 blocking for input though) and now one with just a pair of generic callback functions that do the robot. int-e: evolution: http://paste.debian.net/1120691/ int-e: (very minor spoiler) int-e: Oh the day 2 one didn't have a type signature, but it would've been Int -> [Int] -> [Int]. int-e: Maybe we'll see Intcode every second day? :) int-e: fungot: do you like Langton's ant? fungot: int-e: ( and t f)) if you prefer; the effect is unspecified. b_jonas: fungot, are raspberries better than strawberries? fungot: b_jonas: i am using the fluid-let syntax ( very similar to fnord b_jonas: oh, that Intcode stuff, is that also about the Advent of Code? good for you. I'm busy doing ugly real-world stuff for work so I didn't bother with that now int-e: Hrm, what are the alternatives to https://esolangs.org/wiki/Category:Usability_unknown ? b_jonas: int-e: https://esolangs.org/wiki/Category:Unusable_for_programming b_jonas: int-e: the Categorization page seems to say to me that there's no special category for languages that are usable for programming, I assume because most esolangs should be usable for programming, notwithstanding the large amounts of "brainfuck with some extra instructions but the loops can't nest" nonsense that some users post int-e: b_jonas: thanks b_jonas: but, as always, I may just be inventing things, don't trust me when I talk about esolang community traditions int-e: I take responsibility for the edit, obviously. It's no big deal, it's a wiki, people can overrule things. int-e: . o O ( let's rename it to int-code ) int-e: shachaf: How's your SAT learning experience going? int-e: shachaf: I was asleep the last few times you talked about it. shachaf: int-e: Haven't touched it since the last time I talked about it here, I think. b_jonas: for a change, I'm listening to such pop music where the lyrics is pronounced clearly so I can understand every word without refering to a transcript of the lyrics int-e: "enunciates well" b_jonas: yes, that b_jonas: though it also slightly helps that these ones are in Hungarian int-e: That's actually a remarkably awful google search term... int-e: Or at least duckduckgo search term. b_jonas: what is? int-e: The thing in quotes. int-e: "awful" in the sense that none of the hits look in any way interesting... rather they look like actual reviews of singers and speakers of no significance. int-e: Not "awful" in the goatse sense. b_jonas: well, it's not particularly specific b_jonas: there are lots of things you could enunciate well or badly b_jonas: some other times I like to Youtube binge for multiple performances of the same piece of music or poem. it can be interesting to compare them b_jonas: I mean multiple good performances by different bands or performers b_jonas: the songs on this album vary a lot in how well the lyrics matches the rhythm of the music ais523: @messages? lambdabot: Sorry, no messages today. bunnyocto: no rename command on freenode? bunnyocto: or maybe it was /nick and not /rename bunnyocto: ah yep bunnyocto: aight. let me check out the newest bf derivatives. bunnyocto: verify register bunnyocto azdixccwwmkk int-e: `relcome bunnyocto HackEso: ​08bunnyocto: 09Welcome 02to 06the 13international 04hub 07for 08esoteric 09programming 02language 06design 13and 04deployment! 07For 08more 09information, 02check 06out 13our 04wiki: 07. 08(For 09the 02other 06kind 13of 04esoterica, 07try 08#esoteric 09on 02EFnet 06or 13DALnet.) bunnyocto: fungot: hi fungot: bunnyocto: ah well... thanks to intel addressing modes and variable-length opcodes it's not that bunnyocto: github workflows has a weird directory structure bunnyocto: it's /reponame/reponame FireFly: g'fternoon bunnyocto: github deprecated integrations? bunnyocto: How do I do CI Now then? bunnyocto: Like require pull requests to have passing tests. bunnyocto: lel I can't review my own pull requests. int-e: Oops, I believe I accidently got some AoC points. int-e: Ah, no. Phew. shachaf: int-e: Do you think surjections have right inverses? int-e: shachaf: depends int-e: Oh there are actually two issues here. int-e: One of convention, and one of choice. fizzie: int-e: I got some for the one time I was awake at 5am, and now I have to fight the urge to try again. :/ int-e: fizzie: I was awake. I deliberately didn't look. shachaf: What's the axiom of convention? int-e: And now I was worried that today's second part was really hard so I might have earned points for it, but only because I momentarily misread the statistics page. int-e: shachaf: The conventional issue is which way function composition composes. int-e: shachaf: Also I had trouble connecting dots... while I typed "AoC" I thought and read the whole "Advent of Code". shachaf: Oh, sure. shachaf: What should I call f and g such that f.g = id? int-e: f is a left inverse of g; g is a right inverse of f int-e: It's pretty uncontroversial this far. shachaf: I think those are pretty confusing terms. shachaf: But if you say that's uncontroversial, where's the controvery? int-e: doe (f.g)(x) = f(g(x)) or (f.g)(x) = g(f(x))? int-e: that's the confusion. myname: how so? it's clearly the first int-e: The latter happens in some category theory texts. bunnyocto: f(g(x)) is the usual convention? int-e: Because they want (.) : (a -> b) -> (b -> c) -> (a -> c) bunnyocto: also it's the haskell way thus muh int-e: and the inner -> are abstract anyway. int-e: As much as I like Haskell, it's not defining the world. myname: also, there are people that are using \subset for implication bunnyocto: what? it isn't? myname: I don't like that bunnyocto: why am I using it then. int-e: not \subset... \supset myname: still hate it bunnyocto: no, but (f.g) x = f ( g ( x ) ) is more intuitive imo bunnyocto: but that may just be because I'm accustomed to it myname: that's the definition I am used to from math classes int-e: You'll be surprised how little people value other's opinion in general. myname: coincidentally, haskell does it that way bunnyocto: yep. And thus I don't value their opinions. bunnyocto: Cruel world. int-e: Also some people really like >>> myname: for what? bunnyocto: is that arrow notation? int-e: And I believe we've had at least one proposal to flip the order of arguments of (.). int-e: :t (>>>) bunnyocto: haven't used haskell in a while lambdabot: forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k). Category cat => cat a b -> cat b c -> cat a c bunnyocto: >>, >=>, $>, >>>, bunnyocto: :t (>=>) lambdabot: Monad m => (a -> m b) -> (b -> m c) -> a -> m c myname: I am okay with >>> int-e: bunnyocto: The thing is, if you want to read math texts, you better keep an open mind about notation. int-e: And unfortunately that includes basic things like the order of arguments of function composition. int-e: That said, I /prefer/ (f.g)(x) = f(g(x)). FireFly: I though the Haskell thing was to use (&) for the g(f(x)) case FireFly: no need to pollute established notation with confusion.. FireFly: I mean I like the forward-direction composition just fine, but under a differet notation Taneb: (&) is normally flip ($), not flip (.) FireFly: oh right FireFly: hmm, point Taneb: I've seen (f;g)(x) = g(f(x)) but that doesn't work as a Haskell operator FireFly: Clojure calls it (->>) IIRC, but that's more in a prefix, s-expr setting FireFly: but thee's he (>>>) from Category as mentioned, etc wib_jonas: the order of arguments for function composition is simple. if you write the evaluation of the function f at input value x as f(x) or fx then the function composition is (f o g)(x) = f(g(x)) or (f o g)x = f (g x); but if you write it as x f or x^f, then the function composition is x (f o g) = (x f) g or x^(f o g) = (x^f)^g wib_jonas: and int-e, they're functions, so the left inverse and the right inverse are the same, we can just call it the inverse or inverse function int-e: wib_jonas: ... int-e: wib_jonas: you might want to think that through int-e: wib_jonas: what is true is that if a function has both a left inverse and a right inverse then they're equal (and that implies the inverse is unique in that case). int-e: But existence is a bit of an issue. bunnyocto: f being left inverse of g and g being right inverse of f doesn't imply that f . g = g . f bunnyocto: or does it? wib_jonas: int-e: hmm ok bunnyocto: I wouldn't think so bunnyocto: wait so if f . g = id and h . f = id then g = h? bunnyocto: that doesn't _sound_ right? myname: i don't think so myname: especially if the signatures differ bunnyocto: f .g = id -> h . f . g -> h . id -> h bunnyocto: since h . f = id -> h . f . g -> id . g -> g bunnyocto: thus h = g bunnyocto: it true myname: interesting bunnyocto: I need paper for this. bunnyocto: no it's right. bunnyocto: h . f .g = id . g but also h . f .g = h . id thus id .g = h . id and id . g = g and h . id = h thus h = g = h bunnyocto: now the question is whether there are functions (a,b) and (c,d) such that a . f = id and f . b = id and c . f = id and f . d = id but a /= c and b /= d bunnyocto: I mean... evidently a=b and c=d bunnyocto: so that leaves us with a . f = id and c . f = id where a /= c bunnyocto: which trivially if a . f = id and c . f = id then a . f = c. f bunnyocto: so the inverse is unique bunnyocto: assuming id is unique myname: if you define equality of functions as the same mappings from input to output, id is unique bunnyocto: Whats' f x = x / 0 called bunnyocto: it's a function that isn't defined forall X bunnyocto: the codomain is the empty set. bunnyocto: but the domain too bunnyocto: wouldn chr(0)+x work to convert to hex bunnyocto: I mean my current version (https://pastebin.com/C3kHSXMb) is probably awfully complicated and requires mem lookups bunnyocto: I could just add 0x30 to the nibbles bunnyocto: the guys making ASCII clearly didn't design for this. bunnyocto: BIG MISTAKE bunnyocto: on the other hand it would work if I wouldn't use ASCII bunnyocto: also I hate it when people say a byte is a number from 0-255 bunnyocto: it's not accurate. bytes are typeless. kingoffrance: bunnyocto, re: bytes (last i checked anyways) well more than that, eg. rfcs say "octet"; "byte" is totally arbitrary and IIRC basically IBM started doing it (engineers wanted 24-bits, so it was flexible for integer and some floating thing; but they found it was either no machine or compromise on this) and then everyone copied IBM kingoffrance: i found that buried in an interview with a designer of that particular IBM CPU :) 8 bits is totally arbitrary from what i found; everyone just wanted to be "compatible" basically kingoffrance: and IIRC IBM might have even been trying to be "compatible" with some competitor in the first place! totally arbitrary from what i found kingoffrance: (the interviewed person didnt say this, but it was implied) kingoffrance: and e.g. knuth IIRC claims trinary would be more efficient (assuming everyone switched, economy of scale, etc.) kingoffrance: more efficient pricewise versus performance i mean, but only if everyone switched kingoffrance: i dont trust people who say "bytes" if you mean 8 bits "octet" arseniiv: [23:03] more efficient pricewise versus performance i mean, but only if everyone switched => is it that one argument about e-ary system? Because there it’s assumed that each state of each bit/trit/etc. is equally costly to make, which isn’t that true in reality — AFAIR bits are cheaper to make work reliably than trits, statewise arseniiv: sorry about timestamp, wasn’t mean to paste that :D kingoffrance: i dunno, i think knuth says it in aocp so youd have to dig 3 volumes and whatever else i dunno if he ever finished them :) kingoffrance: if you google around you might find more detail kingoffrance: somehow he claimed either trinary or some other non-binary base would be cheaper for equal performance (paraphrase on my part) kingoffrance: theres lots of potential weird bases ... kingoffrance: non-integer i mean kingoffrance: apologies if i sound vague, not really "trained" in that kinda stuff kingoffrance: (and doesnt come up in real life programming for me, however interesting it might be) kingoffrance: (plus its been like 20 years since i skimmed that stuff) bunnyocto: how does C return structs? bunnyocto: doesn't fit into register bunnyocto: so presumably on the stack bunnyocto: but then presumably it's memcpied somewhere into the callee stack bunnyocto: I mean.. later pushes might destroy the struct on the stack bunnyocto: so you gotta save it somehow bunnyocto: oh well... who needs to return structs :( bunnyocto: just pass a pointer to the struct as the callee and let the caller fill that one in Jefe: Hi, my friend told me about a language where only the white space is significant, so all visible characters constitute comments. Anybody happen to know the name? kingoffrance: i think it was called whitespace kingoffrance: and probably made slashdot kingoffrance: long ago Jefe: Well that would just make too much sense, wouldn't it? Jefe: Thanks. kingoffrance: murphy's law: someone can always do worse implementation of something you don't particularly like Jefe: That's kind of like "every bad idea will eventually be implemented in JavaScript." kingoffrance: we called it jabbascript or jabbadabbascript in ##programming about 24 hours ago ; as in node.js is modular like slicing a chunk of lard off jabba the hut and moving it somewhere else kingoffrance: i dont know if those are common nicknames kingoffrance: (referring to node having 5000 dependencies i suppose) Jefe: The Signal desktop client is apparently written in Node. I ran it for a week, my load average wouldn't drop below 3.0, and frequently shot over 15. kingoffrance: thats good, i dont feel bad for being cruel now bunnyocto: https://stackoverflow.com/questions/22593259/check-if-string-is-int-golang bunnyocto: so terrible bunnyocto: I mean... the unicode.isDigit is bullshit. bunnyocto: then using regexps? pff... bunnyocto: is that Ook but s/k/f? bunnyocto: OLen / 8 bunnyocto: oof has on OLen of 2 so 2 / 8 = 0 so it's executed zero number times bunnyocto: probably should be (OLen / 8 ) + 1 as well bunnyocto: also... > is f with zero os bunnyocto: OLen always zero bunnyocto: means you can't express >>>> with this mechanism ais523: https://stackoverflow.com/questions/22593259/check-if-string-is-int-golang ← the question is poorly defined; many of the answers produce different results in specific cases ais523: for example, is "123456789012345678901234567890" a string representing an integer? ais523: the answer depends on your use case; you can't convert it to an integer but in many cases you'd want to recognise it as one bunnyocto: yeh I'm aware of that. kmc: i've so far avoided starting an argument with my girlfriend about golang. kmc: she seems to be a fan ais523: in languages with compiled regexes, the regex solution is actually one of the most efficient ways of doing that, because it's basically a domain-specific language for generating string validators, and the compiler will have a lot of rules to optimise it ais523: but I suspect golang doesn't actually compile regexes at compile time bunnyocto: I don't know any language that does? ais523: Rust does bunnyocto: Interesting. bunnyocto: kmc: I like golang a lot. bunnyocto: unless it's for GUI stuff bunnyocto: then puh bunnyocto: I don't think there are any reasonably good bindings to do GUI stuff with golang yet. bunnyocto: but you know bunnyocto: GUI is done in things.. bunnyocto: webviews? kmc: I mean I'm not sure I'd say "rust does" kmc: i'm sure someone has a library that does it with a procedural macro kmc: i don't think the 'regex' crate does kmc: it suggests using lazy_static so that each regex is compiled once, but that still happens at runtime ais523: looking it up, it seems regex! isn't the recommended way of doing things that the moment kmc: I'm also sure someone has written a Lisp or Scheme regex library that does it at compile time ais523: so it's more like it could be done in Rust but isn't the default ais523: (that's disappointing, I thought it would be) bunnyocto: muahaha. suck it rust. bunnyocto: no, but rust is cool. ais523: I think Perl compiles regexes on first use rather than compile time, too bunnyocto: static memory safety is a neat concept. ais523: not sure though, its optimiser does weird things sometimes bunnyocto: it's just that most oldschool programmers are too scared of it yet so few use it bunnyocto: even newschool programmers bunnyocto: we had "tech discovery" meetings back at the place I worked bunnyocto: I introduced Rust at one point. bunnyocto: I don't know. People just aren't really fond of learning new concepts I guess. ais523: hmm, I suspect that most compilers will not generate the fastest asm for verifying that a string consists only of digits on any input, short of outright writing the asm bunnyocto: so we used golang. Which is awesome... better than python, C or Java kmc: Rust has a steep learning curve kmc: because it tries to provide all of safety, convenience, and performance kmc: this means it's nearly as complex as C++ kmc: but the complexity is more necessary and less historical/accidental kmc: Rust is largely an attempt to take modern C++ concepts and build a similar language without the historical baggage kmc: and in fact those concepts are getting backported into C++ kmc: (which will make it even more complicated, but that's life) kmc: Rust is a cool language with an annoying community and dickish leadership kmc: that is also life kmc: computers suck, people suck too but in a different way kmc: the Rust community is like the Haskell community, a bunch of really excited beginners who think Rust will solve every problem under the sun, plus they're full of themselves for being 'friendly and welcoming' but they don't want to hear about it if your experience is to the contrary kmc: 11:18 < ais523> hmm, I suspect that most compilers will not generate the fastest asm for verifying that a string consists only of digits on any input, short of outright writing the asm kmc: i've seen LLVM do some clever things in that direction kmc: if you have a switch-case with two branches over a set with less than 64 elements it will make a bitmask and use that as an immediate operand kmc: https://gcc.godbolt.org/z/Ce-LBo ais523: hmm: https://godbolt.org/z/n3PKGD kmc: ok gotta go bunnyocto: https://pastebin.com/WYsqm4aj is how I'd probably go about it if we're talking about no signs involved :D bunnyocto: not tested yet ais523: I suspect the correct option is probably to use the asm instruction VPCMPISTRI, but good luck getting a compiler to generate it ais523: (I put in the check to make sure that the string's starting address was divisible by 32 to make sure that any resulting overread wouldn't cause issues with page faults, in case the compiler was scared to do an overread and that was suppressing the optimisation) ais523: this would be particularly good on long strings or if you were checking lots of different strings in a loop (because you can loop-invariant-code-motion the loading of the list of permitted character ranges) bunnyocto: so the string has to be <=128 bytes for pcmpistri? ais523: bunnyocto: <= 128 bits for each call to pcmpistri (16 bytes) ais523: however it lets you know if the whole segment of the string you're looking at matches ais523: if it does you can just look at the next 16 bytes, and so on ais523: the length limit makes sense because this is using a hardware string-tesing circuit bunnyocto: yeh but what about \0? ais523: pcmpistri handles \0 itself ais523: it has a friend pcmpestri for length-prefixed strings bunnyocto: so it stops at a \0? ais523: the basic idea is to use pcmpistri in a similar way to strspn to check how many bytes at the start of the string are digits ais523: then you look for the byte just beyond those and see if it's \0 ais523: if it is, the string's entirely digits ais523: (you can then adjust for ensuring the string's nonempty, checking for +/-, etc., if you want to) ais523: if pcmpistri tells you that the 16-byte section of string you're looking at has 16 digits in it, you have to move onto the next section, otherwise you're done ais523: (16 digits consecutively at the start, that is) ais523: unfortunately it wouldn't work for UTF-8 (you could make it work for UTF-16 though, at least if you confined yourself to ASCII digits) ais523: or ,hmm ais523: actually it does work for UTF-8 if you confine yourself to ASCII digits ais523: because you don't actually have to parse it bunnyocto: my neighbour is singing since like 3 hours bunnyocto: ais523: thx for your explanations. bunnyocto: PUNPCKLDQ bunnyocto: nice mnemonics. b_jonas: "I suspect that most compilers will not generate the fastest asm for verifying that a string consists only of digits on any input, short of outright writing the asm" => the problem with that stuff is that "fastest" depends on whether you are allowed to assume 31 readable bytes after the end of the string or not, and we still don't have interfaces to malloc that even let you allocate vectors that way, or b_jonas: reference types or containers or any high-level abtstractions to track that info b_jonas: "I put in the check to make sure that the string's starting address was divisible by 32" => yes, that ais523: oddly enough, C doesn't allow aligned pointers as function arguments ais523: it supports aligned pointers but there's an explicit rule that prevents you putting an _Alignas on a function argument, or sneaking one in via a typedef ais523: (16 would actually be enough alignment, but I put 32 just in case the compiler could think of something clever to do with the 256-bit vector units) b_jonas: ais523: sure, but you can put those things in a struct bunnyocto: why does it care whether a char* is aligned? ais523: bunnyocto: it lets you overread safely ais523: on basically all modern processors, there's a limit to the memory protection's granularity ais523: so, say, memory can only go from readable to unreadable at a multiple of 512, or a multiple of 2048 ais523: so if you know the address is divisible by 16, either the first byte is unreadable or the whole thing is readable b_jonas: on a multiple of 4096 bytes on x86 actually ais523: I forgot the modern number b_jonas: and I think 8192 in linux userspace, but I'm not sure of that bunnyocto: yeh yeh page sizes and what not.... but how does this matter for this purpose? ais523: it keeps changing, wasting 4K of memory isn't really a big deal nowadays ais523: because if you have a string like "12", it might be right at the end of a page bunnyocto: if I make like uhm void bar() { char* __align(16) blubb = "blubberlutsch"; foo(blubb); }? ais523: so you can't read the first 16 bytes in case there's unreadable memory just after it ais523: bunnyocto: that works but the function isn't allowed to know that it was given a pointer that's 16-byte aligned, it just gets a char* b_jonas: and, I know I ranted about this a lot, I wish we could eventually transition to larger pages required system-wise, because there's a hard limit that the L1 data cache can be at most 8 pages large, and that's very often the bottleneck b_jonas: that reminds me ais523: b_jonas: huh, why the limit? b_jonas: did izabera return after she asked that question about graph algorithm to which I first gave a stupid answer? ais523: like, it doesn't seem significantly harder to make the L1 cache bigger by doubling the page size, and by doubling the number of pages it supports izabera: i have returned ais523: in either case the main cost is going to be the silicon that actually stores the values in the cache, rather than the control circuitry ais523: and if the control circuitry is the issue, you might want to make cache lines longer instead b_jonas: ais523: the L1 cache has to have a very low latency, so it needs to find which cache line to return when it only knows the linear address, and then verify if that's correct after the physical address is computed. ais523: is the issue actually the TLB rather than the L1 cache? that would be more believable b_jonas: ok wait, I'm explaining that wrong izabera: b_jonas: i ended up running bfs from each node ais523: b_jonas: oh, the L1 cache works on virtual addresses? I'd have expected it to work on physical addresses (as the TLB that caches virtual addresses) izabera: easily parallelizable b_jonas: the L1 cache needs to have a very low latency, so it has to do most of the computation when only the linear address is available, the physical isn't b_jonas: so how it works is that it finds the bunch of 8 cache lines whose address matches the linear address modulo the page size, then when the physical address arrives, it chooses one of those b_jonas: it has to be able to do this on two reads in parallel by the way b_jonas: or one read and one write b_jonas: in order to keep the latency low, it can't have more than 8 cache lines with the same address modulo page size ais523: that's not actually a limit of 8 pages, though; it's just a limit of 8 addresses that are on the same place within the page b_jonas: the size of the individual cache lines, which happens to be 64 bytes on x86, doesn't influence this ais523: there are a huge number of caching effects that have limitations like that b_jonas: ais523: yes, 8 page sizes of total data b_jonas: 32 kilobytes, divided to 64 bytes sized cache lines, such that each address modulo 4 kilobyte has at most 8 cache lines ais523: you could have more while retaining the virtual address lookup behaviour, though b_jonas: "it doesn't seem significantly harder to make the L1 cache bigger by doubling the page size" => you can do that only if the OS guarantees that there can't be small pages anywhere, not even in other processes, because processes can share memory, and even then the cpu would need extra circuitry to handle the compatibility node for old OSes that can't guarantee that, so it's a bit messy ais523: b_jonas: no, if you end up with more than 8 addresses in cache that would clash with each other, you just evict one to avoid hte problem ais523: but if the addresses happen to not clash, you can go with it b_jonas: ais523: no, it's definitely the L1 cache, not the TLB cache. the TLB cache is improved by making most pages large pages (2 megabyte in x86_64), while the OS can still allocate some normal 4 kilobyte sized pages, the TLB can handle the mixing reasonably efficiently b_jonas: ais523: yes, you evict one if you have more than 8 addresses that clash, which means that the total L1 data cache (on a single cpu core) can be no larger than 32 kilobytes total, or 512 cache lines of 64 bytes if you wish. b_jonas: and 32 kilobytes is rather small, it would be nice to be able to increase that for some applications, because the L1 data cache is often the bottleneck b_jonas: it isn't always for all computations, obviously bunnyocto: bottleneck for what... b_jonas: these cache lines could be from 512 different pages possibly bunnyocto: back in the old day we had 333mhz something bunnyocto: and it was running smoothly bunnyocto: it should run incredibly fast now b_jonas: or they could contain the entirety of 8 pages bunnyocto: also excel 2019 probably has still the same set of features as good old lotus b_jonas: izabera: good, that's what I figured too eventually. you may have read my answer in the logs. bunnyocto: this is really interesting. bunnyocto: I don't think that current basic software is any more advanced than like 15y ago bunnyocto: sure... it looks less pixely but other than that b_jonas: so the UK general election was today? fizzie: Yes, the polling places just closed 40 minutes ago. fizzie: My phone tried to keep telling me how to vote, I don't think it realizes I'm not enfranchised. b_jonas: fizzie: you lied to websites that you're older than your real age because they don't allow you to use the website or buy drugs otherwise, and now your lie bites back in the form of election ads? fizzie: I don't think it's that. fizzie: I did want to share a picture of one of the most misleading infographics from the ads in our mailbox, but I threw it away already. b_jonas: you may be able to find a copy online fizzie: It had a bar chart for Tories, Labour and Lib Dems, and the bar heights were not to scale. b_jonas: was it one of these plots that show bars in 3D with exaggerated perspective for no reason? fizzie: It was flat, but the height difference indicating a 5 percentage-point difference was more or less the same as that for 9. int-e: well the glyphs are similar too so what's your complaint... fizzie: They had also drawn an up-pointing triangle on top of their own bar, but it didn't make any more sense even treating the top of the triangle as their bar height. b_jonas: what if you consider the areas of the bars, with the triangle included? fizzie: Hmmm, well. Too late now. b_jonas: search the web, there's probably a copy online fizzie: I did find an article about generally misleading leaflets -- https://www.bbc.co.uk/news/uk-politics-50375532 -- though this is mostly about dodgy data and other misrepresentation, rather than graphical tricks. fizzie: IMO they should just stop with this FPTP stuff. b_jonas: another of those stupid power outages that they do some nights, when electricity goes down in the whole block for two minutes, then stays up for 10 to 15 minutes, then goes down for 2 minutes again b_jonas: I don't know why they do this so often b_jonas: so expect me to disconnect again within 10 minutes b_jonas: the internet takes two more minutes to come back after the power of course, and even mobile phone disconnects for half a minute at the start of the power outage before the aggregator for the cell tower starts up b_jonas: hmm, maybe they're skipping the second outage this time? Soni: flags register is hot Soni: wish everyone used it Soni: most programming language don't have flags register Soni: most esolang don't have flags register Soni: why's that myname: what do you mean by flags register? like the one that is used in conditional jumps? Soni: or for shifting carry myname: why should any high-level programming language explicitly use that? Soni: (rotate?) Soni: well, bash does have a flags register, sort of Soni: it has the success flag and that's it I guess myname: a return value is not really a flags register Soni: it gets stored tho myname: also, perl has way more magic variables than bash myname: i don't consider that good in any language i would want to seriously use, though Soni: anyway, my point is basically it'd be fun, in a painful way, to have a flags register myname: but i can see the appeal for an esolang Soni: and basically make every opcode use it somehow, either conditionally or using some value from it in computations Soni: also always change it, even if the change keeps it the same FireFly: I think most mainstream languages try to minimise pain rather than bolster it b_jonas: `dateu HackEso: 2019-12-13 18:13:56.648 +0000 UTC December 13 Friday 2019-W50-5 int-e: `wontdateu b_jonas: `? =@ccc HackEso: ​=@ccc is a great innovation in gcc 6, kept top secret, where inline asm statements can return a value in the carry flag on x86_64. See https://gcc.gnu.org/gcc-6/changes.html which keeps this secret, https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Extended-Asm.html , https://marc.info/?l=linux-kernel&m=143786977730804 . fizzie: int-e: I think you may have been right about that "every other day" thing. b_jonas: ok, so Intcode is a language where the source code is written as integers in decimal separated by commas, it puts multiple fields of an instruction into a single integer, the fields are decimal, and the numbers aren't too large. does that remind you of anything? b_jonas: Santa Claus is trying to make a better BANCStar zzo38: Is there a way to determine how much space a BASIC module needs in a code segment without creating a assembly listing file? Can the .OBJ file be parsed somehow to determine this? zzo38: I found information about the .OBJ file format, so I can write a program to parse it. (I looked at the hex dump to confirm that it is the correct format.) kmc: is it like MZ format? kmc: what is the format zzo38: It is described at https://pierrelib.pagesperso-orange.fr/exec_formats/OMF_v1.1.pdf ais523: Soni: the condition code / flags register isn't used in high-level languages (and eventually turned out to be a mistake in low-level languages) because it's hard to optimise well ais523: it takes a fairly complex static analysis to determine whether a value stored in a flag was placed there intentionally and needs preserving, or whether it's just an unwanted side effect kmc: this is why RISC-V doesn't have condition codes Soni: ais523: yes Soni: ais523: that's why it'd be perfect for an esolang ais523: ah, I see Soni: ais523: also, you run something, then 20 opcodes later you use the result kmc: instead the result of a comparison instruction goes into an ordinary register of the programmer's / compiler's choice ais523: golfing languages are probably the genre that would most benefit from them zzo38: Not everyone uses high-level languages; some people use assembly language Soni: ais523: but you make the esolang so that stuff like that is required if you wanna be able to do anything with it ais523: but maybe designed syntactically rather than in execution order zzo38: (Still, many assembly languages work fine without condition codes) ais523: zzo38: right, but, e.g., the condition codes on x86 turned out to be a problem because they reduce the information available to the optimiser kmc: so a < b or a == b are handled the same way as a + b ais523: kmc: I thought of an improvement to this: add 1 more bit in registers than in memory addresses Soni: (in other words, make the programmer have to suffer) ais523: so, e.g., your 64-bit processor has a 65-bit ALU ais523: then instead of condition-code-dependent instructions like Jcc, you just look at specific bits of a number kmc: not sure i follow ais523: say you add two 64-bit numbers using a 65-bit register (and they were sign-extended or zero-extended as necessary) ais523: carry flag is bit 64 of the result, sign flag is bit 63 of the result, overflow flag is the xor of those two ais523: for zero flag you have to check that the result is 0, but it's easy enough to imagine a dedicated zero-testing circuit, your ALU needs one of those anyway zzo38: ZZ Zero does have a single condition flag (called "pflag"); many instructions use it as a result code since instructions have only two operands, for example LESS and GRTR and EQ all use it for the result of comparisons, and MOVE checks if a move is successful; you can then use JT and JF (or TLET and FLET) to conditionally jump or let. (There is also JZ and JNZ too, though) ais523: parity flag can be implemented like zero flag if you care about it, most people don't ais523: the nice thing about this model is that the same register that stores the comparison result also stores the addition/subtraction result ais523: reducing register pressure when both are relevant ais523: oh, hmm, I'm not convinced you can implement auxiliary carry in this model ais523: but that's a silly idea for a flag anyway, it's ridiculously specific and doesn't generalise well to most instructions zzo38: Still I don't like that Glulx doesn't have a carry flag, since then it is difficult to deal with numbers longer than 32-bits ais523: (it also needs a bit of tweaking to handle overflowing multiplies, unless you produce a double-width result) zzo38: (There are other ways it could be implemented also though, rather than using a carry flag; other way is to add a "add64" instruction) shachaf: hi kmc shachaf: I'm getting in so much trouble lately, it's great. moony: me and a few others are working on a computeri n MMindustry, which should be a fun proof of turing completeness. https://i.imgur.com/rwnvawO.png (pictured: 4 bit addder/subtracter) zzo38: 6502 has PHP and PLP instructions to save the flags in case you need them for later. zzo38: And I think auxiliary carry is possible, if you have a special register to store the carry out (similar to how MMIX has a special register to store the remainder of a division, and other special registers for other purposes). (It is only for addition and subtraction of course, but there are some uses of it. The same register might also be used for shifted out bits of a shift operation.) zzo38: Someone told me this week that cannibalism means eating parts of a human body which does not regrow (e.g. finger nails and hair will regrow so it doesn't count). But I cannot find that in the dictionary. kingoffrance: that makes sense except for the hair part myname: how comes nobody maintains any ihaskell binary package in aur? :( int-e: Somehow AoC is great for writing terrible code... int-e: (E.g., today's problem, done properly, would involve topological sorting. But a stupid fixed point construction works, too, it's slower, but as it turns out, plenty fast enough.) b_jonas: my job is also great for writing terrible code int-e: fungot: is your code better than average? fungot: int-e: it was called ' afx'. i'm still just sipping at the scheme workshop in here? int-e: mmm ' afx', could be a fingerprint? fizzie: int-e: I did a topological sort because I was worried the straightforward approach wouldn't be fast enough. :) fizzie: The code's still terrible though. fizzie: But maybe not algorithmically terrible. int-e: I decided to worry later. int-e: And never got to the point where it mattered, not even for part 2, for which I reused part 1. fizzie: Reasonable. int-e: (Which, I suspect, is the intended approach, because working things out backward is really messy due to all the rounding.) fizzie: Could be. I did a binary search using the part 1 solution. int-e: Yeah same here. fizzie: I also wrote a small thing to convert the puzzle input (and examples) to dot format, to render them as graphs, just because graphs are pretty. int-e: fizzie: actually, in case I ran into performance problems, I was going to do something between the naive iteration and topological sorting: keep a working list of products that were affected in the last iteration... int-e: And I fully expected that to be fast enough. fizzie: https://zem.fi/tmp/day14-ex1.png to https://zem.fi/tmp/day14-ex5.png are the common examples, though the customized puzzle input was the prettiest (tangle-iest) one. int-e: Even though it's still quadratic in the worst case. int-e: looks like they're more wide than deep anyway fizzie: There's 16 levels in my puzzle input, though I don't think dot's levels are necessary a meaningful theoretical concept. fizzie: In particular, one of the levels just has one node in it, and that node has no edges from level L-1 or to level L+1. I'm guessing it's just some sort of heuristics. int-e: Hmm, what matters for me... number of iterations is bounded by the longest path from source (ore) to target (fuel). int-e: I guess I could count the actual iterations... int-e: (plus 1, because there's one extra iteration to detect the fixed point) int-e: 17 for me. So same depth as yours. int-e: It's just 63 productions, 137 inputs anyway, not terribly large. int-e: < input tr -dc ',=' | wc -c int-e: counts inputs :) fizzie: That gives 122 here, so at least it's not exactly the same structure. fizzie: (56 lines.) int-e: lucky you ;) int-e: or maybe unlucky because topological sorting is even more of an overkill then int-e: Annoyingly though it still took me 35 minutes to get it right. Though I was tired... int-e: ...which may explain that I got zillions of type errors and struggled to pinpoint them. fizzie: It took annoyingly long for me too. Though the day leaderboard says 00:42:18 for rank 100, so maybe that's reasonable. int-e: part 2 took 6 minutes on top of that which is more like it int-e: I should probably stop looking at those times :) fizzie: Heh, clicking at some of the people on the leaderboard landed me on someone's GitHub repo where they write golfed solutions to the puzzles using their own golf language. int-e: But FWIW, first star #100 was at 27:35 minutes HackEso: Tc is the abbreviation for Technetium, an element so sophisticated that it does not exist naturally. oerjan: i agree that this wisdom is technically correct hth int-e: `? tbc HackEso: tbc? ¯\(°​_o)/¯ int-e: "this" is complicated. -- Maybe this(!) is more appropriate for here than for ##math :) zzo38: Now I added fifteen new opcodes into ZZ Zero. zzo38: And also a new board flag, a new mode of an existing opcode, the ability to append rather than overwrite when printing to a file, and other stuff. oerjan: we only do alchemy metaphorical riches <-- better than homeopathy ones hth int-e: Oh homeopathic riches? int-e: This makes me want to gauge the market for potentiated gold. int-e: fungot: how do you pronounce "gauge"? fungot: int-e: society of invasive cardiovascular professionals. we're on surgery here, ight? int-e: ^style fungot: Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc* iwcs jargon lovecraft nethack oots pa qwantz sms speeches ss wp ukparl youtube oerjan: fungot: that's a bit long for a pronunciation fungot: oerjan: consider the set of symbols though... yeah... you're the guy who came in here not yesterday he spammed up the channel oerjan: i have _never_ spammed the channel and my `sleds don't count int-e: countless sleds, how seasonally appropriate int-e: `? password HackEso: The password of the month is naughty. int-e: Ah, right. (I honestly forgot what I picked.) int-e: I guess the password of the month is not very memorable. int-e: Which is something you want in a password, but for different reasons. int-e: If I were to pick one now I might go with "is going out with a bang." int-e: fungot: will there be a next year? fungot: int-e: have i confused them? escape the space? oerjan: fungot: it's more of a time issue, i think. fungot: oerjan: everybody makes one, seveninchbread tells us what the interpreters can or can't do unless 1 is defined as () is a syntactic transformer? oerjan: seveninchbread hasn't been seen in a while, unless e morphed into a nick i didn't manage to track. oerjan: 27 weeks says nickserv fizzie: fungot: Are you feeling all right? You're being unusually coherent. fungot: fizzie: it implements a few features such as highlighting where exceptions were thrown, incredibly powerful syntax colouring system, and an output port oerjan: uh oh i hope lota has a backup oerjan: because it seems about time for the pa'anuri to start shooting back int-e: How about 4, to keep with the Apocalypse theme. int-e: oerjan: Hmmm, have we seen the design in the top-right? int-e: Where right is left. int-e: So the thing with spheres and rings. oerjan: i only remember the zeus thing that got blown up int-e: Hmm, scale. The Pa'anuri don't mess around... they might just open a gate and push a star through. Wouldn't that be fun? oerjan: by chinook int-e: But it looks like the gate is smaller than their gas giant planet sized (IIRC) healing ships. oerjan: depends on perspective int-e: True, I'm making big assumptions, but I can't be sure that they're big enough. oerjan: bah i spent an hour to find that zeus thing and it doesn't look the same at all https://www.schlockmercenary.com/2018-09-09 oerjan: (partly because i misjudged which chapter it was in) oerjan: or well, _some_ similarities, but not the whole structure oerjan: anyway zzo38: I know there is dual port RAM, but is there a variant that has random access write-only on one side and sequential read-only on other side (or vice-versa), and is there a variant that has random-access write-only on one side, and the other side is sequential read-only that clears the memory being read (so not strictly read-only)? b_jonas: `? time cube HackEso: EARTH HAS 4 CORNER SIMULTANEOUS 4-DAY TIME CUBE IN ONLY 24 HOUR ROTATION. 4 CORNER DAYS, CUBES 4 QUAD EARTH. Bible A Lie & Word Is Lies. Navel Connects 4 Corner 4s. God Is Born Of A Mother - She Left Belly B. Signature. Your dirty lying teachers use only the midnight to midnight 1 day (ignoring 3 other days) Time to not foul (already wrong) bible time. Lie that corrupts earth you educated stupid fools. b_jonas: `? lie algebra HackEso: A Lie algebra is what you get if you take the region infinitesimally close to the identity of a Lie group and blow it up to normal size. b_jonas: Do the four simultaneous rotations of Earth for a lie algebra of four dimensions? b_jonas: `? lie group HackEso: Lie groups are groups that try being too smooth for their own good. b_jonas: `? rotations of earth HackEso: rotations of earth? ¯\(°​_o)/¯ kingoffrance: the funny thing about time cube guy: http://www.dict.org/bin/Dict?Form=Dict2&Database=gcide&Query=Civil+day The Babylonians and kingoffrance: Hindoos began their day at sunrise, the Athenians and Jews kingoffrance: at sunset, the ancient Egyptians and Romans at midnight. ; methinks his problem wasnt "science" it was bumping into "religions" who arent going to drop everything and switch kingoffrance: looks like he was trying to "integrate" all the (or at least the seemingly 4 major) systems :/ kingoffrance: its not surprising the "bible" did away with the other systems :/ kingoffrance: i only know that cuz i was researching lunar months once, and when you mentioned the time cube thing, it sounded familliar :/ Lykaina: called my parents to wish them a good saturday morning Lykaina: hint: it's sunday morning where i am Lykaina: kingoffrance: astronemers begin their day at noon arseniiv: kingoffrance: oh, Babylonians and Hindu seem the most reasonable of all. Why start the day when you’re supposed to be sleeping, or going to sleep soon, when the actual blank slate is the morning arseniiv: oh so blank, it often needs coffee or tea to even become writable Lykaina: or caffeine pills Lykaina: healthier and cheaper than coffee or tea Lykaina: (if you are already addicted to caffeine) Lykaina: had a dream i was a muggle in hogwarts b_jonas: kingoffrance: also there are current maps that face north, old maps that face east, Australian maps that face south, and Middle-Earth maps that face west kingoffrance: well i thought if i ever get far enough for my os i would allow such things, if someone bothers to set up all the tables, why not ? b_jonas: arseniiv: I think starting the day during the night is the most reasonable, because then usually each period when you're awake is completely within one day b_jonas: starting in the morning wouldn't work well because not everyone wakes at the same time in the morning kingoffrance: not so much for esoteric value, just i dont like to hardcode things kingoffrance: i think i read once nasa had to do mars time, but they wrote a custom java app, didnt feel trying to make any OS do it was feasible :/ kingoffrance: since reading that i always thought the OS was the proper place for such things b_jonas: Lykaina: re dream where you were a muggle in Mogwarts => were you reading too much fanfiction? kingoffrance: of course you likely have lots of hardware stuff that youd have to translate back and forth Lykaina: b_jonas: nope b_jonas: Lykaina: Pottermore nonsense about that one historical Muggle that got into Hogwarts as far as the Sorting then? Lykaina: and i woke before i could have sex with hermione Lykaina: oh...she's straight... Lykaina: who's the lesbian in hogwarts again? b_jonas: everyone if you look through enough fanfics probably b_jonas: including boys who change gender using magic such as the Polymorph potion Lykaina: didn't harry marry his best friend's sister? kingoffrance: Lykaina, Lykaina Lykaina what kind of dream is that? cant you just convert her? Lykaina: i was a muggle! i couldn't make hermione lesbian kingoffrance: ah, your powers aren't up to the task yet arseniiv: b_jonas: mmayybe; at least starting the day at six or four feels better than at twelve b_jonas: doesn't feel better to me. sunrise varies a lot, solar midnight varies only by half an hour, so starting at midnight is less arbitrary and follows the sun more closely b_jonas: (unless you live close to the equator, in which case sunrise time doesn't vary a lot, obviously) arseniiv: b_jonas: you shatter my dreams :P arseniiv: not that they are actual things I want arseniiv: or thingh I think about arseniiv: things* b_jonas: fungot, do you watch airplanes? fungot: b_jonas: i'm thinking stdio, fnord and fnord Lykaina: i've seen Airplane!, does that count? Lykaina: oh, you were asking someone else arseniiv: Lykaina: ah I think it’s totally okay anyway arseniiv: . o O ( stdio, fnord and fnord => are stderr and stdout in the channel’s banlist? ) b_jonas: yes, seeing Airplane counts b_jonas: fungot, is there a skeleton inside you? fungot: b_jonas: that's a fnord fnord fizzie: In fact, the following two words were originally "stdmath" and "stdctrl". fizzie: Which are sufficiently rare to not have occurred more than whatever times the cutoff was. b_jonas: `? fnord HackEso: ​? ¯\(°​_o)/¯ arseniiv: `fnord HackEso: fnord? No such file or directory arseniiv: fizzie: oh, so it’s even a thing :o I thought fungot said that accidentally fungot: arseniiv: the problem is this: is a s/// joke of a fnord array /dev/ md0 consists of two hard drive partitions: /dev/ hda3 and /dev/ zero... arseniiv: a s/// joke, he sed b_jonas: ``` grep -c '.*\' /hackenv/quotes # arseniiv: fungot says fnord a lot fungot: b_jonas: no processes. for opening files i would've used an hp in the beginning of the other arseniiv: b_jonas: I know arseniiv: fungot: what a fun day we got here, don’t you agree? fungot: arseniiv: the only scheme i know, i'm not sure what b_jonas: fungot, which species of penguin is the cutest? fungot: b_jonas: you can use a simple translator from some other box look like it's published on paper too. i can't fix that right now. :) b_jonas: fungot: it's not urgent, you can fix it after New Year fungot: b_jonas: next will be a zone between the red and the blue whale. feels like goedel numbering somehow. rain1: can you recommend any recent science fiction? b_jonas: rain1: what media would you like? anime, live action movie, comic strip, novel? b_jonas: try Terry Pratchett, it's still recent enough b_jonas: or Andrzej Sapkowski's series, whatever it's called b_jonas: Witcher b_jonas: [ 9 + 5 j-bot: b_jonas: 14 b_jonas: fungot, why do lawyers and doctors invent crazy words for their jargon, rather than using good terminology like us in mathematics or computer science? fungot: b_jonas: that's not very helpful. rarely used, scope declaration... " global" clause first.) kritixilithos: I must agree with fungot fungot: kritixilithos: nothing against sisc specifically, b_jonas: is the IOCCC website down? b_jonas: fungot, at what age do human babies start toothing? fungot: b_jonas: i guess so. do you want the oo docs for the rc. :p b_jonas: that's... not helpful imode: how small can a single process' state be in any given process calculus. imode: I'm wondering if you can get away with storing two values, `left` and `right`. imode: the sparking idea is that I have a concurrent subset of my language, Mode, that uses only a few operations: spawn a process giving you back that process' ID, send a value to a process, and receive a value (from anywhere). zzo38: I wrote a program to parse the .OBJ files for DOS program compiling (although the program that parses it does not itself run in DOS). I wrote it mainly because I wanted to see how much space a module takes up in the code segment. So, now I can see a line such as: 1 = PARA PUBLIC <0A129> "GAME_CODE" C="BC_CODE" It will tell me that the code segment is 0xA129 bytes long. zzo38: And then also that it uses 0x17A bytes of a data segment. b_jonas: zzo38: does gnu binutils do that? zzo38: As far as I can tell it doesn't support the DOS format. kmc: some NASM tool might? zzo38: Maybe it does, although I do not have NASM zzo38: Have someone tried to make something with ZZ Zero? Then you can make your actual questions/complaints about it, including suggestions. zzo38: (Including if there is something unclear in the documentation) zzo38: ZZT does not have a print to file option, but ZZ Zero does include such an option. zzo38: Do you know how to improve the keyboard handling? Currently sometimes if you try to change direction quickly it doesn't work very well. b_jonas: buy a better keyboard? that's what helped me at work after I tried three different keyboards they could offer me b_jonas: the main problem was the strange habit I have that I press left control with the edge of my palm rather than with a finger, and some of these modern keyboards don't allow that zzo38: I mean in the software, in ZZ Zero, it is a DOS program written in BASIC zzo38: You can examine the code to see how it is doing currently zzo38: It uses INP(96) zzo38: How many ZZT-likes are there now? zzo38: I wrote the file FUTURE.DOC now included with ZZ Zero mentions some possible ideas to implement in future, such as: joystick, ESC/P, FM music, ability to enable/disable rotations at runtime, eight dot mode, high score menu, etc oerjan: `fnord HackEso: fnord? No such file or directory oerjan: `t mkx bin/fnord//echo '? No such file or directory' HackEso: bin/fnord oerjan: `fnord HackEso: ​? No such file or directory Kaynato: Whoops, didn't check "minor edit" oerjan: shocking oerjan: we'll have to ban you now. Kaynato: Alas, such is bureaucracy Kaynato: In other news, now that DOALC doesn't actually double the allocated memory for a Daoyu program, I feel it's much more possible to try my hand at demonstrably determining Daoyu's computational class int-e: I'm starting to regret sticking to a purely functional Intcode interpreter, it took me way too long to unravel the knot from output to input this time. int-e: A monadic interface would probably help ;) Kaynato: A monadic interface for Daoyu? Kaynato: Ah, for intcode, I wager int-e: Yes, for Intcode, or rather the interpreter I have. oerjan: fungot, which species of penguin is the cutest? <-- i read that question and a crested one immediately popped up in my mind, but then i learned they're a whole genus fungot: oerjan: where are you now? someplace warm? has no behaviour defined on numbers; it may behave however it pleases, as long as i'm alive." oerjan: fungot: in my apartment, which is warm yes fungot: oerjan: programs aren't even copyrightable" to " not even snot". oerjan: fungot: i think the courts may disagree? fungot: oerjan: last time i did it in awk, befunge, whitespace, is replaced with one backslash and the remaining instructions may deal with crouching and standing up fizzie: int-e: I managed to land on something incredibly slow (a runtime of ~one minute) this time around. The first part asked for the least amount of moves, so I wrote a BFS with a (for simplicity) return-to-origin after each visit, which was kind of pessimal given what the map turned out to look like. int-e: Oh yes. Heh. fizzie: Switching to DFS for exploring the map and BFS for computing both the distances yielded about a 100x speedup. int-e: I explored the map first, and realized that DFS will compute the right distance... int-e: ...so I took the lazy approach. int-e: But my enemy this time was <> int-e: > fix id lambdabot: *Exception: <> fizzie: Oh, right. arseniiv: may deal with crouching and standing up ==> I watch too many minecraft videos these times I immediately associate that phrase with it fizzie: I just added a "run to next output instruction" method on the side of the "run to halt" one. int-e: (the loops happen because I have a function that maps the output of the program to its input... can't consume the output before the corresponding input is produced) int-e: and this time, the interleaving is somewhat intricate. int-e: So in the end, I took almost 80 minutes for part 1 and 8 more for part 2. int-e: And it annoys me a lot. zzo38: I found a article about "ZZT Cliches", and I am not so sure of all of them. Anyways, XYZABCDE.ZZT has some things differences. It says "The most annoying songs are often repeated over and over again during gameplay, forcing you to turn off the music" but in XYZABCDE.ZZT it only plays the music once. zzo38: It also says "Gems usually represent currency in ZZT games, even if they're called dollars." but I think in many games they do not call them dollars. b_jonas: Is there also an option to mute music that you can toggle during runtime? zzo38: Yes. You can push B to toggle sounds/musics Kaynato: If it's fine to ask, are there any immediate tree-based computational models for which proving TC is sensible? oerjan: SKI calculus hth Kaynato: Assuming that I can't contract edges either, hmmm Kaynato: Maybe I should still view daoyu as a bitstring-based language Kaynato: I'm quickly remembering just how obtuse and frustrating daoyu was oerjan: . o O ( next freefall better have a fan picture of florence eating soup ) oerjan: possibly during a previous date oerjan: oh i missed the previous one kmc: seems pretty esoteric kmc: > ZZT-OOP is restrictive, but in a fun way. Because the language was only meant for simple adventure games, code that would be easy in other languages becomes a challenge in ZZT-OOP. However, some of us live for such challenges, and although it won't get you a date or a job, being able to code complex things - a fractal generation program, for example - using only an archaic game creation system is rather lambdabot: :1:23: error: parse error on input ‘,’ kmc: impressive. kmc: i think under the right circumstances one could get a date or a job this way kmc: the ability to zap/restore labels, even in another object's program is interesting kmc: do all objects execute in lockstep? zzo38: Yes, ZZT-OOP is working like that. Have you used ZZT-OOP? int-e: oerjan: spoilers... but this doesn't sound like Florence will be eating soup any time soon int-e: oerjan: I believe we've seen her lap water from a bowl though? int-e: oerjan: I expect soup would be the same. zzo38: Although making stuff in ZZT involves more than just ZZT-OOP; there is also programming the stats and board configuration, including many things not possible using the built-in editor (you will have to use external editors, such as KevEdit or ZZTQED, for some things) kmc: zzo38: I haven't used ZZT or ZZT-OOP yet kmc: what sort of things are not possible using the built-in editor? zzo38: Preset laser beams, abnormal directions, abnormal speeds, statless pieces that are normally stat or vice versa, preset bullets/stars/beams, putting arbitrary elements under stats, setting the starting health/ammo/gems/torches/keys, and many other things. oerjan: int-e: you're just not using your imagination tdnh int-e: oerjan: there won't be another noodle incident. oerjan: also i said fan picture Lykaina: ever hear of something called toki pona? Lykaina: i want to learn it kmc: Lykaina: looks interesting b_jonas: Lykaina: yes, and I decided it's a really bad idea b_jonas: (or at least it's not an idea that I like) b_jonas: (could be worth as an esoteric experiment for other people, just to see why it doesn't work) Kaynato: Is there any good way to prove something *isn't* TC? Hmm b_jonas: Kaynato: the most common way is to prove that you can translate the program of the language to finite state pushdown automata b_jonas: plus there are some more trivial special cases that are easier to prove oerjan: prove that you can predict its equivalent of the halting problem b_jonas: in Slashes, what is the simplest way to write an infinite loop that fetches a new pattern infinitely many times? b_jonas: not necessarily a different pattern, just a new pattern, it doesn't loop within a single substitution, such as a substitution with empty pattern oerjan: as far as i know you need a quine-like construction once you have more than one substitution involved b_jonas: Kaynato: oh, and there are programming languages that can only do primitive recursive loops, but that comes up less often oerjan: but maybe you could do a special case just for an infinite loop Kaynato: Ahh... I'm not entirely sure if that's the case for this one Kaynato: I'd look more at treating daoyu as a FSPA but the self-modification and obtuse data structure make it ... problematic to wrap my head around b_jonas: oh, I should check Rosetta Code, maybe it has such a program b_jonas: Kaynato: the usual abbreviate is PDA for some reason b_jonas: as in Push-Down Automaton Kaynato: ah, thanks b_jonas: note though that that can refer to both the deterministic version and the nondeterministic version, which are different b_jonas: nope, can't find anything about /// on Rosetta Code oerjan: it may be hard to search for b_jonas: but they usually have an index page for every language b_jonas: s/every/each/ b_jonas: I'd like to note that such an infinite loop in Fuun DNA is much simpler because, even though it only does one substitution for each pattern-replacement that it reads, the pattern can wildcard match and the replacement can copy matched parts, so it can just duplicate whatever is ahead if it, leading to a simple print<< x2 style quine b_jonas: hmm, I wonder if anyone ever made a quine in Fuun DNA+RNA, one that outputs its DNA code graphically fizzie: int-e: For fun, bolted a quick disassembler to the Intcode interpreter and added labels and comments to my day 15 input. Was actually relatively straightforward. int-e: fizzie: try it on my hello world program (on the wiki) :) int-e: (it's actually tame) int-e: (there is self-modification, but only on immediate parameters) fizzie: It outputs http://ix.io/24zb and then barfs on 29 being an "illegal opcode". int-e: which is fine because that's all data int-e: > ord 'e' - ord 'H' fizzie: Oh, the 0 between 'l' and the other 'l' is also the 0 for the jump target? int-e: though I guess it could start outputing 'db ' stuff. fizzie: How economical. int-e: fizzie: yes. fizzie: Yes, that's probably what it would do if it was a real disassembler. fizzie: FWIW, there was exactly one instance of self-modification in the puzzle input, and it was on "setlt <...> #N VAR" instruction, where it was used to do indirect addressing of memory. Kaynato: Is it dishonorable to respecify an esolang to make it TC on the grounds that otherwise, proving or disproving TC is a nightmare? :( fizzie: (To update the <...> part.) int-e: Kaynato: no Kaynato: after reimplementing daoyu with lazy data structures, SIFTS from before turned out to be hideous and a total horror int-e: Kaynato: However, if the TC status is uncertain it will probably attract more attention. int-e: (here) Kaynato: daoyu doesn't attract much attention, ahh Kaynato: !wiki Daoyu Kaynato: https://esolangs.org/wiki/Daoyu Kaynato: I'm probably just wasting my time and energy trying to do things with it :s imode: never assume that. zzo38: How can you write zero with roman numbers? FireFly: I propose 'O' imode-ruby: there's no numeral for zero. zzo38: It is what I thought zzo38: (I do know how to write fractions with roman numbers, though.) kingoffrance: i see an "N" "NULLA" but you'd have to google to see where i saw that kingoffrance: (i might have done the "N" myself and it was specified some other way and i thought "N" was easier e.g. for ascii) kingoffrance: theres also ( vinculum that look like C and horizontally-reversed C, but i dont recall what those are used for; there are some variants from what i recall, whether nulla and vinculum's are used or not kingoffrance: i just used '(' and ')' for vinculums to specify in e.g. ascii kingoffrance: also, observe my local dialect "variant" use of apostrophe in vinculum's kingoffrance: im not sure, i vageuly recall nulla might be it is supposoed to look like O with / through it, aka "empty set" symbol; i could be way off b_jonas: `toroman 0 HackEso: No output. b_jonas: `toroman 6270 HackEso: Number too large b_jonas: `toroman -1 b_jonas: `toroman -20 b_jonas: `toroman 3.14 b_jonas: this isn't a particularly robust script b_jonas: my excuse is that I basically lifted it off from a golf solution zzo38: Yes, you can see it is not work with some stuff. (TeX will produce no output if you try to convert any zero or negative number into a roman number, and multiples of one thousand will always use M for each thousand.) zzo38: The "Game of XYZABCDE" series is numbered by roman numbers, so I try to figure how to name a prequel; I have Part I, and then the sequel is Part II, and after that is Part III and then Part IV. But, then you would have "part zero", although I suppose Part S (meaning half) can still be possible zzo38: (Same can be true of any other series of something that will be named by roman numbers.) b_jonas: zzo38: does TeX do that with or without an error/warning message? zzo38: There is no error/warning message. zzo38: You can use \romannumeral-` to absorb the next character without interpreting it, which is sometimes useful in macros if the next character would be { or } zzo38: There are many kind of "tricks" that can be made with TeX. zzo38: That is one of them (I forget where I read it). Another, that I think I made up by myself, is to use an insertion with alternating marks and penalties and then use \vsplit to extract the marks in the output routine; since \write will only work if a page is shipped out and will not preserve tokens exactly, using this other way can sometimes be helpful. zzo38: (Insertions are normally used for such things as footnotes, but can also be used for many other purposes, such as this.) zzo38: Appendix D of the TeXbook lists many kind of tricks possible with TeX, too. kingoffrance: https://familypedia.wikia.org/wiki/Roman_numerals theres a little info about "N" for "NULLA" kingoffrance: that page says the ( ) are called apostrophus, and vinculum are overlines or |, so whatever i read long ago was either confused, or they are somewhat interchangeable and i perhaps settled on input using ( ) for simplicity, but the number could be displayed as either ( ) or overlines, |, etc. kingoffrance: (i.e. i may have just chosen ( ) for simplicity of input, and called it "vinculum" on the theory i could output/display the overlines and/or | stuff ) kingoffrance: (i.e. i probably wanted a standard ascii-like input format, user could pick their "output style") kingoffrance: s/ascii-like/subset of ascii/ cpressey: > let a = 3 in let b = a in let a = b + 3 in a cpressey: > let a = 3 in let a = a + 3 in a lambdabot: *Exception: <> myname: > let a = a in a lambdabot: *Exception: <> cpressey: letwreck Taneb: > let a = 3 in do a <- pure (a + 3); pure a lambdabot: error: lambdabot: • Ambiguous type variable ‘m0’ arising from a use of ‘show_M336512966164... lambdabot: prevents the constraint ‘(Show (m0 Integer))’ from being solved. Taneb: > let a = 3 in runIdentity $ do a <- pure (a + 3); pure a Taneb: The worst possible workaround! rain1: terry tao is working on collatz problem rain1: https://terrytao.wordpress.com/2019/09/10/almost-all-collatz-orbits-attain-almost-bounded-values/ rain1: i found a story to read: ted chiang short stories book wib_jonas: `f2c 500 HackEso: f2c? No such file or directory wib_jonas: `ftoc 500 arseniiv: `ctof -273.15 HackEso: ​-273.15°C = -459.67°F arseniiv: `ctof -123456789 HackEso: ​-123456789.00°C = -222222188.20°F bunnyocto: aight. how many attempts do I need to write memcpy and memcmp correctly in assembly :D kmc: ah a nice exercise kmc: which architecture bunnyocto: an esoteric one bunnyocto: but apparentely my assembler has a bug with address calculation bunnyocto: damnit bunnyocto: or I forgot an origin directive bunnyocto: or the assembler is ignoring the origin directive bunnyocto: ok. 1st attempt was a fail. rain1: what books are you reading? arseniiv: rain1: reading Egan stuff lately, mostly stories now, but several years ago I read novels like Schild’s ladder (that was actually a first book of his I read, and because of an acquaintance’s advice) arseniiv: though I think this one dive is almost completed now, I’ll resume then with webserials’ updates bunnyocto: the assembler produces wrong code :( bunnyocto: http://codepad.org/zBkxEUhC <_ yeah all right no wonder bunnyocto: kmc: http://codepad.org/53TtacHM <- there you go bunnyocto: (.l is a label, .x is an exported label) bunnyocto: (.adrN is "load address into register N") bunnyocto: (.xadrN is the same thing but for exported labels) bunnyocto: (push and pop require an explicit stack pointer register) bunnyocto: (so do call and ret) bunnyocto: (comparison jumps implicitly use rc for the target address) bunnyocto: I guess one downside is that you can only load 32bit constants into ra,rb and rc. bunnyocto: otherwise you need a load plus a mov b_jonas: bunnyocto: re memcpy and memcmp, if it's for x86_64 or x86_32, get a well-written one from https://www.agner.org/optimize/#asmlib ; for other archs get them from gnu libc or libgcc, I don't know which one has it these days b_jonas: oh wait b_jonas: for an esoteric architecture b_jonas: yeah, then you might be out of luck, unless it's some well-known one b_jonas: rain1: Umberto Eco books right now rain1: oh yeah rain1: i think i read one about the pendulum b_jonas: I also have a Sapkowski book here, lined up for read later bunnyocto: well you could use ldw (load word) instead of ldb (load byte) and copy 4 bytes at a time bunnyocto: but as of now speed is not my concern :) bunnyocto: gotta get functionality running, optimization is for later bunnyocto: you could even use the push instruction for that I guess. bunnyocto: push x y is basically memory[x] = y; x += 4; b_jonas: bunnyocto: maybe make your compiler optimize copies of compile time known short length specifically, because that's the most common case. just make sure it works if you copy with the source and destination pointers being exactly equal. bunnyocto: don't have a compiler yet. bunnyocto: still working on the assembler bunnyocto: needs support for linking. bunnyocto: I'm working on a project I call bootstrap. bunnyocto: It has the parts: create and implement a CPU. Implement an assembler, linker, disassembler. Implement an OS. Create and implement a "high level" language in assembly. Then create and implement it in said "high level language" rain1: i ssthat nand to tetris? bunnyocto: ah I see. "NAND to Tetris" bunnyocto: no. That's not it. bunnyocto: I've just always wanted to do this. bunnyocto: Maybe i'll go further and do some VHDL maybe bunnyocto: so that I can load it onto a nano FPGA or someting. bunnyocto: I have nothing better to do might I say bunnyocto: not at the moment at least. rain1: its a cool project b_jonas: bunnyocto: look at Magic-1 at least, to learn from other people's failures in such a project, and look at other projects he links to rain1: does anyone know tensor products of modules? rain1: how do I work out Q[x]/(x-1) (x)_Q Q[x]/(x+1) ? rain1: nvm i just realized its = Q[x]/((x-1) + (x+1)) zzo38: I know some instruction sets have memcpy and/or memcmp are built in operations. zzo38: Although some only have built-in memcmp to compare if it matches or not and not to determine the sort order. zzo38: Glulx has mcopy to copy a memory block (which may be overlapping), and it is possible to use the linearsearch opcode to check for matching or not matching memory blocks. zzo38: For example, you can write "linearsearch X,Length,Y,0,1,0,5,$" to check if the memory blocks at X and Y with the specified length are matching or not. (You can also use the linearsearch opcode to implement strlen, too.) b_jonas: fungot, in English, what do you call it when a men's suit jacket has buttons in two parallel columns? fungot: b_jonas: hey... :) so gimp, emacs, java, assembler arseniiv: I always suspected emacs! b_jonas: fungot: apparently they're called "double-breasted jacket" fungot: b_jonas: someone once said the jungle is at http://stream1.jungletrain.net:8000 do int-e: Oh, first hard AoC task. int-e: Also somewhat nasty... fizzie: I liked it, but it is kind of a trick. fizzie: Predicting a lower-than-usual 2-star : 1-star ratio. int-e: Very plausible. b_jonas: oh right, stars b_jonas: I am a zero-star programmer, since I live in a city that's so bright even during the nights that I can't see any stars on the sky b_jonas: only the Moon, the Venus, and clouds b_jonas: and lots of reflected city lights shachaf: Not even Orion? b_jonas: yeah, I'm exaggerating a bit b_jonas: I can walk a few hundred meters to get to places where I can see the brighter stars b_jonas: but zero-star programmer sounds nicer int-e: fizzie: Now I'm wondering whether the periodicity of the input can be exploited. (I'm only exploiting a property of the offset, and I suspect that's kind of essential.) fizzie: I thought about that before coming up with the trick, but it seemed like (at least for an arbitrary digit) the least common multiple of the periodicity of the signal and the pattern (which I'm calling W for 'wavelet' in my commentary, incidentally) would be a pretty large number. So it wasn't at least an obvious speedup. b_jonas: `? aoc fizzie: (I don't think all the example and the input offsets would have had the property if it wasn't intended to be done that way.) HackEso: aoc? ¯\(°​_o)/¯ int-e: fizzie: Hmm. Maybe we have different approaches. b_jonas: `? advent of code HackEso: advent of code? ¯\(°​_o)/¯ b_jonas: `slashlearn aoc/Advent of Code (AoC) is a series of programming puzzles that some regulars enjoy, found at "https://adventofcode.com/2019/about". HackEso: Learned 'aoc/advent of code (aoc) is a series of programming puzzles that some regulars enjoy, found at "https:': adventofcode.com/2019/about". b_jonas: oh darn int-e: `revert b_jonas: sorry, I'd have fixed it too int-e: `? slashlearn HackEso: slashlearn? ¯\(°​_o)/¯ int-e: `? le/rn b_jonas: two slashes HackEso: le/rn makes creating wisdom entries manually a thing of the past. Usage: `le/[/]rn // int-e: Oh I thought it said something about preventing accidents... b_jonas: `slashlearn aoc//Advent of Code (AoC) is a series of programming puzzles that some regulars enjoy, found at "https://adventofcode.com/2019/about". HackEso: Learned 'aoc': Advent of Code (AoC) is a series of programming puzzles that some regulars enjoy, found at "https://adventofcode.com/2019/about". b_jonas: `? aof HackEso: aof? ¯\(°​_o)/¯ b_jonas: `? aoc HackEso: Advent of Code (AoC) is a series of programming puzzles that some regulars enjoy, found at "https://adventofcode.com/2019/about". b_jonas: `? euclid HackEso: euclid? ¯\(°​_o)/¯ b_jonas: `slashlearn euclid//Euclid is a short geeky game in which the goal is to do Euclidean compass and straightedge constructions in as few steps as possible. It runs in the browser, found at "http://www.euclidthegame.com/". It was popular among #esoteric regulars in 2016-07. HackEso: Learned 'euclid': Euclid is a short geeky game in which the goal is to do Euclidean compass and straightedge constructions in as few steps as possible. It runs in the browser, found at "http://www.euclidthegame.com/". It was popular among #esoteric regulars in 2016-07. b_jonas: we should document these community fads shachaf: They're called "Euclidean compass and straightedge constructions" because they're constructions similar to the game Euclid? b_jonas: Though of course the browser-based game could be just a modern implementation of an older game, just like how there are browser-based chess games. b_jonas: Ok, now I'm imagining children born in the 21st century who meet chess as a browser-based video game first, and are later astonished to find out that it's centuries old and used to be played with carved wooden pieces or steps sent in snail mail. b_jonas: Or the same about Go. b_jonas: Actually I think I even read an anecdote of that sort somewhere on the internet about Go. b_jonas: And unlike chess, compass and straightedge constructions make much more sense as a video game than on paper, because on paper your constructions get imprecise very quickly. You can get somewhat better if you're careful what steps you take, and if you know how to handle the tools like rulers as well as an architect, but then it's no longer the simple abstract system of compass and straightedge b_jonas: constructions. b_jonas: Obviously you could also say that typing is more convenient on a computerized word processors on a computer and printer than on electromechanical typewriters where you can edit text by cutting ticker tape, and that even that makes more sense than typing documents on a mechanical typewriter where you can make at most three or four copies at a time with carbon paper, and you have to retype the whole thing b_jonas: if you need more than that many copies. arseniiv: oh yeah arseniiv: I used a mechanical typewriter for fun for a time, I never made anything neat enough arseniiv: and there were oh so many typos arseniiv: and I beaten all my fingers off b_jonas: I played with two mechanical typewriters when I was young, just for playing: a normal one and one of those toy ones that you buy for children and aren't suitable for real applications because IT DOESN'T HAVE LOWERCASE LETTERS; arseniiv: wow :D fizzie: Suitable only for angry applications. zzo38: I would sometimes use a typewriter for typing an address on an envelope. b_jonas: and then, much later, I used a more modern electronic typewriter with hundreds of bytes of RAM buffer so you can set it up to not immediately type a line so you can backspace errors without any physical remains, to learn typing arseniiv: now you remind me what traditions there were for typing roman numerals on cyrillic-only typewriters (almost all of them here) b_jonas: though of course that wasn't when I really learned to type, it's IRC that did that b_jonas: arseniiv: cheaper typewriters in Hungary traditionally omitted three letters: íúű. you can find older manuscripts written without those letters. b_jonas: and of course those typewriters also don't have the digits 0 and 1, so o and l were used instead b_jonas: and even the better typewriters don't have all the symbols that mathematicians use for formulas, so mathematical manuscripts use handwritten greek letters, and you use underlining and double underlining to mark bold and italic variables when you want to be clear arseniiv: 1 often looked as I already, and for V one used У (and Х for X, and what for L, I don’t remember at all, but surely that should have occurred sufficiently rarer), but that’s not all: for economy or what, I’ve usually seen II typed as П and III as Ш. Now that’s really eclectic: 1, П, Ш, 1У, У, У1, УП, УШ, 1Х… b_jonas: arseniiv: is that used in legal texts, which often number sections or lists in roman numerals, sometimes in lowercase? kingoffrance: chess was also occasionally played with real people as the pieces: https://archive.org/details/TheSeventhSealAFilm/ arseniiv: this looks more in context printed in the a typewritery font, though. In a sans serif it doesn’t invoke too many associations for me here in my IRC client kingoffrance: this seems lost to history too b_jonas: kingoffrance: yes, there were performances of live chess b_jonas: kingoffrance: also chess sets that are more decorated than the ordinary carved ones, ranging in price from the ordinary tourist souvenier ones up to ones you find in museums that inherited royal collections kingoffrance: that makes total sense; billiards was supposedly for royalty at first, now in bars b_jonas: arseniiv: well sure, we're programmers, we use fonts where 1 and l look different arseniiv: arseniiv: is that used in legal texts, which often number sections or lists in roman numerals, sometimes in lowercase? => this is an interesting question. I haven’t been in time to see many such typed documents, but I think here lower-case romans should have been a rare occasion. Hopefully someone wrote about that, but it wasn’t occurred to me to find out until now b_jonas: arseniiv: I haven't seen typewritten legal texts either, admittedly, only printed and online ones b_jonas: but they do sometimes have lowercase roman sequences b_jonas: admittedly mathematical texts have much more unique weird signs kingoffrance: oh im almost certain my mother's electronic typewriter had that :/ not on my computer keyboard kingoffrance: and some fractions IIRC zzo38: A section sign is sometimes used in documents other than legal texts arseniiv: here we are also accustomed to that § sign, it’s often used in school textbooks and I think many non-school ones still b_jonas: dunno, I only see them in legal texts arseniiv: admittedly mathematical texts have much more unique weird signs => I like there are plethora of signs for [beginning and] ending proofs zzo38: Section sign is included in the PC character set (for whatever reason they decided which characters to put, I don't know), so like everything else in the PC character set they are sometimes used in computer games for PC b_jonas: that sign has the shortcut \S in plain TeX, and a place in one of the base fonts of plain TeX, so it can't be too rare zzo38: Yes, it is also included in Plain TeX b_jonas: yes, it's also included in iso-8859-1 and CP437, but that makes more sense if it's used in legal texts, because they wanted to sell those PCs and printers to people who work with legal texts zzo38: Yes, I suppose that is something they may wish to do b_jonas: about today's http://www.smbc-comics.com/comic/love-5 , I think that the solution in https://pbfcomics.com/comics/nice-shirt/ may work better zzo38: Empathic Healer {2WB} Creature - Cleric Horror (2/2) ;; Lifelink ;; First strike ;; {T}, Pay X life: Prevent the next X damage to target damageable this turn. zzo38: Hymn to Aurora {1WG} Legendary Enchantment ;; +1: Add one mana of any color. ;; +1: Change all manas in your mana pool into a single color of your choice. ;; -X: Target player gains X life. zzo38: Discordant Crossroads {?} World Enchantment ;; Nonworld permanents enter the battlefield tapped. b_jonas: zzo38: the mana cost for that last one is {3}, it's called Orb of Dreams b_jonas: zzo38: Empathic Healer looks interesting kspalaiologos: apparently my VPS provider has killed my bot kspalaiologos: for no reason really, and I suppose unintentionally int-e: kspalaiologos: could it just be a reboot? kspalaiologos: I doubt kspalaiologos: because other services I ran there are running kspalaiologos: they would die if this was a reboot kspalaiologos: no idea really, I'd have to check logs int-e: Ah. What about OOM, hmm. Ah, not my problem. kspalaiologos: it can't be oom kspalaiologos: 2019-12-17 08:57:39 zzo38: Empathic Healer looks interesting kspalaiologos: this is the last message it logged int-e: Oh. That bot. int-e: There was a netsplit. Maybe the server closed the connection? Does it reconnect? kspalaiologos: netsplit kspalaiologos: this is explaining the accident kspalaiologos: it's just a simple 50-line perl bot kspalaiologos: I wouldn't expect it to be able to recover off a netsplit really FireFly: is that the bot with fascinating escaping issues? int-e: FireFly: no, this is the logging bot. https://esolangs.org/logs/2019-12-17.html#leb is where it left int-e: FireFly: and the github link in the topic is where it logs to int-e: (when it's around) kspalaiologos: FireFly, yeah, this one kspalaiologos: b_jonas, that discovery was genius really kspalaiologos: I would have never thought about that kspalaiologos: I didn't get to rewriting the bot though yet :p b_jonas: kspalaiologos: did you burn the source code yet? b_jonas: kspalaiologos: could it be that rather than the VPS killing it, the IRC server closed the connection to your bot? it sometimes does that b_jonas: `? logs HackEso: ​#esoteric channel logs: https://esolangs.org/logs/ http://tunes.org/~nef/logs/esoteric/?C=M;O=D http://codu.org/logs/_esoteric/ https://github.com/kspalaiologos/esologs/ b_jonas: I suspect it was the server zzo38: Tomorrow is Yule (if you are in the northern hemisphere), and then two days later is Hanukkah, and then two more days later is Christmas. Happy Yule/Hanukkah/Christmas kmc: zzo38: same to you! kmc: zzo38: some friends of mine celebrate the Solstice, or Isaac Newton's birthday on Dec 25 zzo38: Well, yes it is Isaac Newton's birthday on Dec 25 too (I think Stallman refers to this as "Gravmas") kmc: celebrating Newton's birthday as a secular/atheist holiday is somewhat ironic because Newton was an occult Christian and alchemist zzo38: Yes, but it is still his birthday. (It wasn't Jesus's birthday on Dec 25, even though Jesus's birthday is still celebrated on that day.) kmc: it's a repurposed pagan holiday b_jonas: I'll be celebrating pine holiday with my family. I'm traveling the day after tomorrow. kmc: i don't have plans for christmas as such kmc: on sunday (the 22nd) I'm celebrating a personal milestone (2 years on HRT!) with my girlfriend and wife kmc: there will be chinese food and cake. kmc: on the 24th I'm going to gf's friend's birthday party b_jonas: this is my plan for a whole week, so it's longer than christmas b_jonas: fungot, what is the ranking of swords in SNES Legend of Zelda: A Link to the Past from worst to best? fungot: b_jonas: oh right, those would be _that_ surprising as murder suspects: theo is certainly freaky enough as it is kingoffrance: IIRC non magical/red/magically forged kingoffrance: coincidentally, i believe you can beat it without getting the greatest armor, because i thought blue was more stylish kingoffrance: just dont open that chest kingoffrance: well blue armor + gold shield anyways, without gold shield i may have chosen otherwise b_jonas: kingoffrance: I asked about swords, not armor kingoffrance: arms are arms :/ i dont think player has a fashionable choice with swords :/ kingoffrance: the best you can do is color coordinate around the sword zzo38: I don't know much of that games, how the rules for the attacks work. What I know with GURPS, different swords (and other types of unpowered melee weapons) have differnt amount of damage, type of damage, reach, price, mass, defense, options, etc. Also some require two hands (although if your character has four hands, then maybe you can use two such two-handed weapons) zzo38: What I would want to have is setjmp/longjmp with the possibility to define a cleanup step which is executed if you longjmp past there. This would make a possibility of many kind of libraries better, I think. shachaf: zzo38: Did you see Per Vognsen's ideas about that? zzo38: No, I did not see that. shachaf: I wonder whether I can find it. zzo38: Do you remember what some of the ideas are? Is it like what I wrote? shachaf: zzo38: I think he mostly discusses it in video form unfortunately. shachaf: I think it's this: https://www.youtube.com/watch?v=x2G2wbOQQjU&t=3940 shachaf: I think the code is also online. shachaf: Hmm, more preamble than I remembered. shachaf: zzo38: Do you like this? zzo38: I didn't look shachaf: Oh no. shachaf: I think there's a small example here: https://github.com/pervognsen/bitwise/blob/master/ion/test1/test1.ion#L1241 zzo38: That isn't quite an explanation of it zzo38: Is there a document? shachaf: No, I think there's only a video. shachaf: You could watch that. int-e: fungot: can you count unrooted, unordered trees? fungot: int-e: maybe you should int-e: fungot: turns out I actually can count those after all... but it's slightly tricky to get right fungot: int-e: i'm not getting it. they're building o(n4) solutions and wondering why the hell is relative addressing of the call sites, the calls are trapped and if they do work...... int-e: Sometimes the wiki makes me sad. https://esolangs.org/wiki/ASCII_art- shachaf: Wow, what a language. int-e: innov... nah I can't make myself type that. shachaf: You know what's innovative? My completely standard B+ tree mapping uint64_t keys to uint64_t values. shachaf: It's faster than every ordered data structure I've found. shachaf: Where can I find reasonable ones? int-e: whatever happened to Judy arrays? shachaf: Hmm, good question. int-e: I remember a short hype, then nothing. And apparently that's how it played out. But I don't know why. int-e: http://rusty.ozlabs.org/?p=153 was an interesting (though probably outdated) read at least shachaf: Oh, Judy isn't ordered, is it? olsner: sounds good to optimize for cache line usage, but B+ trees can do that too and Judy arrays seem to be a lot more complicated shachaf: I was going to add Judy to my benchmark but the API looks way too complicated. int-e: shachaf: my understanding was that it is ordered (it's supposed to be a radix tree with various specializations for nodes of different sizes, and radix trees are ordered; they tend to not store full keys in internal nodes though). maybe I understood wrong. shachaf: Oh, hmm, it is ordered. shachaf: I saw something about hashing that confused me. shachaf: OK, I'll try it. shachaf: OK, I haven't figured out the range API, but it's already slower on point lookups. shachaf: I added range queries and it's really slow at them. shachaf: I measured wrong. It's OK on point lookups, though a lot slower than a regular hash table. olsner: how big is the data set here? shachaf: I'm testing with https://github.com/petersn/btreetests olsner: looks like that only goes up to 1 million entries? that would probably fit in L2 (but at least it's not small enough to fit in L1) shachaf: I think it was shortened from 10M. olsner: maybe Judy starts helping when you no longer fit in cache (it could of course never be faster, but since the point to the extra complexity is doing more work to read fewer cache lines...) fizzie: int-e: The Intcode part of these every-odd-day puzzles is getting less and less relevant. I guess it's just a handy way to obfuscate the answer, to offload the actual solution validation from the puzzle site to the user. shachaf: Good call on the bigger test. I'm doing even better than all competitors on this one. shachaf: Of course maybe it's not that realistic. int-e: fizzie: Yeah (though I have not looked at today's task(s)) int-e: fizzie: I wonder how many people have solved problems by reverse engineering some code rather than interacting with it. int-e: (So far interaction has always seemed easier. Though I was tempted for a moment with the breakout task.) int-e: In fact I've only solved one task manually so far, namely the compression from day 17, part two. fizzie: I wondered about that too. Even counting today, it's still been easier to solve it the presumably-intended way. Actually, today is a little bit similar to day 17 part 2 (though not that much). int-e: vaguely relatedly, I found https://projecteuler.net/problem=689 quite annoying. int-e: (I just don't like numerical stuff very much. Though somehow I managed to get it right on the first try.) int-e: (First *submitted* try that is. Not the first attempt to get a value.) int-e: Oh, going meta. fizzie: Hmm, I was doing Project Euler for a bit, in sequential order, but I think I stopped way before 689. fizzie: Yes, looks like I did just the first 100. int-e: haha: 1.hs: Prelude.chr: bad argument: int-e: (the program accidently printed the answer in an error message) b_jonas: int-e: yes, you can do that deliberately: b_jonas: `perl -e '40*18' HackEso: No output. b_jonas: `perl -we '40*18' HackEso: Useless use of a constant ("40*18") in void context at -e line 1. b_jonas: yeah, the w switch is essential for that b_jonas: it doesn't print the answer? they changed that b_jonas: perl 5.24 printed the product in the warning message b_jonas: darn, this is lost functionality int-e: fizzie: hmm that was surprisingly easy. int-e: And that adds two more manually solved tasks. int-e: I wonder how big the luck factor is. b_jonas: fungot, how big is the luck factor? fungot: b_jonas: not sure how to loop? ( i mean fnord' as... well, except for the nice model, eh?), here is a nice way for a long time b_jonas: int-e: so intcode is used sort of like UM-32? imode: came upon an interesting idea yesterday: the use of the tail of the queue to act as long-term scratch memory, with the head being used as short-term scratch memory. imode: with the aid of the `last` operator, you can recall an item from the tail of the queue to the head. if this were on a tape, this would be a move left. imode: if you move left N times, duplicate and carry your item right N times, that's a load from RAM. imode: same for storing, you just carry the item left N times, drop whatever's there, then move right N times. imode: allocation of scratch space is just a repeated enqueueing of zeroes. imode: I still wonder if `[]01` is enough for turing completeness. part of me thinks it's possible but the end result is non-recognizable. `[]01$` is a candidate. `[]01<>` is boolfuck with dynamically resizable tape. kspalaiologos: 't seem to understand kspalaiologos: What would 0 and 1 do? arseniiv: part of me thinks it's possible but the end result is non-recognizable. => have you tried to find a counter-example, like how logicians search for a model where A and ¬B are both true to show that one can’t prove B from A? In this case B is something TC and A is this reduced language arseniiv: hm I don’t know how to make this analogy rigorous but I believe it can be made and was even used by someone at some time — it seems so natural to try… b_jonas: look, an em-dash imode: arseniiv: oerjan iirc said it could be used like bitwise cyclic tag. arseniiv: b_jonas: – − ‒, all different! arseniiv: imode: mmhm… (not that I’m sufficiently familiar with cyclic tag systems, but interesting!) imode: I'm not either. imode: I guess I'm okay with the possibility of a `[]01$` or a `[]01<>` instruction set. imode: I really need to get Mode up to a git repo lmao. imode: it's an ugly mix of C and Python though. arseniiv: imode: oh, do you call C from Python or Python from C or both? arseniiv: I’m not yet familiar how to do either. I only ever used Lua bindings for Delphi very very long ago arseniiv: (maybe for C# to but probably I just downloaded them and left them lay still) imode: there's a Python preprocessor that generates an array of function pointers. this array of function pointers gets inserted via an #include into a barebones interpreter. imode: 388 lines of C. imode: 95 lines of Python.. arseniiv: ah, simple b_jonas: some years ago someone said in the channel that the "ff" in the name of the program "ffmpeg" stands for "fast forward" b_jonas: apparently ffmpeg doesn't think so, because if you run it without arguments, it prints this line among others: b_jonas: "Hyper fast Audio and Video encoder" b_jonas: so "ff" stands for "Hyper fast" int-e: I always thought it derived from FFT. int-e: But I assumed that, never gave it much thought. arseniiv: ffffffast arseniiv: . . . . . sssso ffffast iiiit hhhas aaaan aaaafterimage int-e: That's many f-words. b_jonas: int-e: hmm, that would make the first F stand for "fast" rather than the second b_jonas: int-e: the complication is that zzo38 has some pixel image processing utilities that are also named "ff", but they're named of "Farbfeld", which is an entirely logical name for processing pixel images b_jonas: only ffmpeg also mostly processes pixel images and videos made of them, though it also processes audio b_jonas: (I'm encoding audio using it right now) int-e: wait that's another Fabrice Bellard child? int-e: So https://ffmpeg.org/pipermail/ffmpeg-devel/2006-February/010315.html is to be taken as gospel. int-e: (And that also kind of make sense... skipping forward in a video stream isn't trivial after all.) int-e: *makes zzo38: Anyways the names of the Farbfeld Utilities programs do not match those of FFmpeg, I think b_jonas: zzo38: yeah. it's not too hard, I think ffmpeg only has three executable names: ffmpeg, ffprobe, ffplay b_jonas: (plus there's three shadow copies in the old fork that is IIRC called avutils, but those don't start with ff) b_jonas: int-e: ok, so the "fast forward" was right b_jonas: I wonder why they changed it to the euphemistic "hyper fast" then zzo38: The web page for 3rd Party Applications for Icecast lists some media players that can play back Icecast streams, although Firefox also plays back Icecast streams just fine, and piping curl to SoX also works fine for playing back Icecast streams. imode: @tell arseniiv https://git.imode.tech/?p=mode;a=summary lambdabot: Consider it noted. oerjan: @tell imode yes []01 is TC, i explained how to compile a version of BCT that halts if it gets a 0 as data at a particular step in the program. (showing that that is as TC as ordinary BCT is left as an exercise hth) lambdabot: Consider it noted. imode: yeah, sorry, I did not understand what you meant. :( imode: not that familiar with BCT either. oerjan: 0 is a command that deletes from the queue. 10 is a command that appends a 0 if the head of the queue is 1, and 11 appends a 1 similarly. oerjan: although for this compilation you really want whole productions i.e. "cyclic tag", without bitwise. oerjan: so you have a list of bit strings that you cycle through: pop a data bit from the queue, if it was 1 append the current string. oerjan: if CT data bits are reencoded as 0 -> 0, 1 -> 10, then you reencode each string in the cycle in the same way and enclose it in brackets oerjan: and then you put brackets around the whole list. this gives a different halting condition from ordinary CT, but one that should be as TC. imode: jeeesus. imode: I apologize that my head really isn't in the right spot right now (a little intoxicated) oerjan: ok i'm tired myself imode: that's fascinating, though... can I pick your brain about this later? int-e: Hmm. "The password of the month is present." ... maybe next year. int-e: (But it only makes sense for December) shachaf: Man, why are my trees so fast? shachaf: Are there any good libraries for ordered u64->u64 key-value maps I should be comparing to? shachaf: I feel like this should be a standard thing. int-e: Oh I'm done counting trees for the time being. int-e: in other news, https://twitter.com/WitzigWeil/status/1208441458426044422 int-e: wait, today's AoC part 2 was hard?! int-e: (For once I sucessfully extrapolated what part 2 would be like from part 1 and wrote my code accordingly.) olsner: shachaf: out of curiosity, how bad is std::map in comparison? shachaf: Quite bad. shachaf: Here are some old numbers: https://slbkbs.org/tmp/btree/ordered.txt shachaf: My implementation improved since then (unless I've just added a regression). kspalaiologos: ve never been so scared kspalaiologos: to run my code kspalaiologos: like in case of this engine kspalaiologos: because I put around four days in it, without prior testing int-e: Imagine working in chemistry, having spent days assembling a complex reactor, and switching it on for the first time. int-e: (I don't. I've read a few stories.) kspalaiologos: I haven't actually implemented the engine kspalaiologos: let's just settle on srand(NULL) and rand() lol kspalaiologos: (so it's predictable yet pretty random at first) kspalaiologos: I hate this code though kspalaiologos: it's very slow and underperformant kspalaiologos: it could be made way faster it is currently fizzie: int-e: Another day with quite the difference between part 1 and part 2. arseniiv: how do you think, is unit4 eso? And int4? int-e: fizzie: The dramatic difference between the AoC parts surprised me. I mean the top 100 goes up to 2h, that's amazing. Though I wonder how much impact the upcoming holidays have. int-e: fizzie: Or maybe not the difference so much as the fact that part 2 seems to stump so many people. fizzie: I assume a lot of people just did the straight-forward solution to part 1 (I know I did), which isn't very useful as a starting point for part 2, unlike on many other days. zzo38: How to allow commands given to "at" to play sounds in Linux? zzo38: If a VCR has a IMIDI input, then when scheduling a recording from the associated port (e.g. Digi-RGB) then the user should be allowed to specify a MIDI sequence to execute when it is time to start recording. (For example, you can use this to control an external tuner.) myname: that seems like an odd definition myname: like, almost no language will do that, but on the other hand it restricts the possible permutations to only rotationary ones bunnyocto: well. trivially some languages which output the number 555 for the code 555 bunnyocto: then 555 would be a rotary quine zzo38: "Programs with only one character don't have rotations and are thus never rotary quines." Is that right? I wouldn't think so. bunnyocto: which is kinda boring so hm. myname: zzo38: i agree myname: bunnyocto: which is also a permutation quine, though myname: the only thing that comes to my mind are languages wrapping around like befunge myname: I would be interested in a language that does not wrap around line ends and has a non-trivial rotary quine zzo38: "All of its rotations" is vacuous if it doesn't have rotations (or does it count itself as a rotation? it doesn't matter if it does or not), so "all of its rotations are quines" would be true, I think. bunnyocto: might not be technically correct language but I guess the meaning behind it should be clear. bunnyocto: you could obviosuly trivially create languages that have such quines bunnyocto: I guess. myname: well yeah, HQ9 myname: because Q is defined to be a quine in HQ9? myname: ah, you mean to explicitly disallow other commands bunnyocto: yeah but the program Q would be only one character bunnyocto: thus no rotations bunnyocto: QQ would work bunnyocto: unless that prints the source code twice bunnyocto: in which case it wouldn't be a quine myname: well, there is one rotation, id zzo38: Yes, although HQ9+ also has a + command, so you can have Q+ or +Q bunnyocto: that would work yep bunnyocto: Q+ would be a rotary quine in HQ9+ myname: bunnyocto: if you don't include id as a rotation than you could have a string that will be a quine in all but one rotation myname: I fail to see this being intended bunnyocto: a rotary quine is a quine under all rotations myname: therefore, Q does have a rotation, namely id bunnyocto: so it must be a quine bunnyocto: and all rotations must be a quine zzo38: I described why it doesn't matter if you include id as a rotation or not. It already says "A rotary quine is a quine that is a quine under all rotations." myname: yeah, any predicate over the elements of an empty set is true myname: every elephant in this room is pink fizzie: int-e: Heh, I wonder if today will be a little unfriendly for your pure Intcode approach. int-e: haven't looked int-e: ask me tomorrow :) Taneb: Hmm, I haven't touched AoC very much since like the 9th but I wonder if mine'll handle it? zzo38: What do they call the letters of alphabets named in Old English? kingoffrance: if what some people claim is true that "letters" were leaf/plant-based, then saxifrage would be my wild and inaccurate speculation int-e: fizzie: It turned out to be terribly unfriendly... took me 2 hours to resolve the knot-tying exercise. int-e: (It really should be faster. But I made many stupid mistakes. It's all way too subtle.) tswett[m]: Hey, anyone want to hire me? I have five years of professional experience as a software developer, and I'm really, really, really good at math. I'm not interested in software development positions. I'm looking for a salary around $60k. imode: what position are you looking for exactly. tswett[m]: I don't have an exact position in mind. int-e: Yeah, "not interested" will be the only thing anybody reads in there. int-e: Unfortunately. int-e: Unfortunately we live in a world where people expect you to know what you want :-/ imode: if you don't know what you want apply to a FAANG. int-e: Well, what if your ethics aren't flexible enough for that? tswett[m]: int-e: That makes sense. imode: I don't think your average systems engineering job requires ethics that can bend over backwards imode: I work at Amazon. you'd be surprised how mundane this job actually is from every standpoint. we just help people buy ebooks. kmc: i'm giving up on the software industry kmc: i think i'm going to become a mushroom farmer imode: good choice. kmc: we'll see tswett[m]: Yeah, I like that idea. int-e: A hacker's dream, build something from wood... simple and sturdy. int-e: (That's based on a pun that works much better in german.) imode: build your own computing ecosystem. tswett[m]: I like that idea too. imode: are you in desperate need of a job. tswett[m]: I think I'm going to dogfood an operating system for the original IBM PC. imode: what are your skills and where are you located. tswett[m]: Well, I have experience in plenty of programming languages: C#, Perl, SQL, and bits of C++, HTML, JavaScript, Rust, and VBA. zzo38: If you will make a operating system for the original IBM PC, then maybe you should use x86 assembly language. imode: got any examples of things you've built with these tools. imode: any past work experience. tswett[m]: I have a degree in math and knowledge of bits and pieces here and there. I like Haskell and category theory. tswett[m]: Yeah, here's the flight simulator autopilot I wrote in C#. https://github.com/tswett/WarrigalsAutopilot tswett[m]: I have several professional software development positions. imode: such as. tswett[m]: Diagnosed and fixed issues with a large variety of production software for Priority Health, the health insurance arm of Spectrum Health. tswett[m]: Wrote desktop application software for the “eXact” line of color measurement instruments using both C# and C++. tswett[m]: That kind of stuff :D imode: neat. do you have any idea of the roles/duties you'd like to take on at your next position. shachaf: zzo38: Which assembly syntax should I use? shachaf: Or should I make my own? zzo38: shachaf: I don't know. Depend what assembler software you use, I suppose. Make up your own if you do not like that one. tswett[m]: imode: Vaguely. I'd like to be an actuary (for one); I'd like to compile and analyze data in order to make calculations related to financial risk. imode: so find actuary positions. tswett[m]: I'm working on it. kmc: there are/were a number of banks that use Haskell for modelling financial contracts kmc: so perhaps you could get a job which isn't just programming, but utilizes your programming skills kmc: int-e: what's the german pun? tswett[m]: That does sound interesting. kmc: thinking about work makes me sad int-e: kmc: There's "hacken" meaning to chop wood. int-e: Arguably not much of a pun. imode: kmc: you retired? kmc: i used to love programming but 10 years of working in the tech industry while struggling with mental health problems killed that :/ kmc: i flamed out shachaf: I'm kittensitting this week. It's so good. kmc: my spouse supports me financially imode: what happened, if you don't mind me asking? int-e: shachaf: cushions are less messy shachaf: I quit my job a longish time ago and haven't mustered up the whatever to get another one. shachaf: Maybe I'll do that at one point? imode: you must have quite a bit of savings or financial cushion. tswett[m]: One option is to, instead of getting another job, just retire now and live off of $90 a month. kmc: imode: it's a long story and not one i wish to retell at this moment kmc: I had savings, not so much anymore kmc: like I said, my spouse supports me imode: kmc: that was moreso directed at shachaf, sorry. imode: the last message, I mean. kmc: oh, sorry imode: you're good. :) kmc: i have shachaf on /ignore shachaf: I suspected as much. kmc: that is also a long story i don't wish to retell int-e: `? shachaf kmc: int-e: I get the pun now, thanks shachaf: I am also sad now. kmc: it works in english, once you know what it's supposed to be tswett[m]: I like everyone. tswett[m]: What's mine... imode: I've been poor for a very long time now. this job is a miracle despite being not creatively fulfilling. but holy shit is it almost a cake walk. tswett[m]: `? tswett HackEso: tswett is livin' it up with the penguins. He's a title under the cruxite in the lathe. imode: `? imode HackEso: imode is an Innovative Multicomponent Drug Designer, afflicted by a severe case of the UPPERs. imode: at least I'm innovative. kingoffrance: `? kingoffrance HackEso: kingoffrance? ¯\(°​_o)/¯ int-e: IMDD -> imode is a bit of a stretch? kingoffrance: thats totally accurate imode: you know, that's true int-e. wonder who made that entry. int-e: `cwlprits imode HackEso: boil̈y imode: git blame boily int-e: imode: Ah https://www.project-imode.eu/ is to blame. int-e: see also https://esolangs.org/logs/2017-08-03.html#ly ff. imode: damn that was a long time ago. kmc: imode: i can't complain though. aside from lacking a sense of purpose, my life is fucking awesome :) I've finally dealt with the major root cause of those mental problems, and I have awesome friends and partners, and new exciting interests :) I've gone mushroom foraging every day since the 8th, which is awesome imode: good to hear you're doing well. kmc: thanks :) kmc: life's a fucking trip, eh? imode: I've had a similar stint in the industry and there have been times (including recently) where I've just wanted to give it all up. imode: was homeless at one point. kmc: for how long? imode: around 7 months. imode: at one point I thought of becoming a writer. or working in retail. I got into programming sort of by accident and never started anything as a career. it's hard when working takes your hobbies and turns them against you. kmc: yeah :( kmc: don't do something you love, or you'll come to hate it kmc: that's how i feel kmc: but it probably depends imode: I wanted to stop as early as August of this year, when I left my last position. I was essentially told that I was less than dog shit despite designing the core of the entire business from the ground up. imode: drifted for a month. wanted to quit. came close to ending it. then I got a call from an Amazon recruiter. kmc: "don't take something you love and try to pursue it within a bullshit corporation where most of your success/failure is not even dependent on how well you can do that something you love" kmc: it's probably better if you, like, love carpentry and manage to make a little money selling tables you made in your garage, or something imode: I used to think that too. imode: but I think I favor rigidity in a lot of ways. nothing says you have to be passionate about your work life. larger corporations (usually) give you the opportunity for work/life balance. I use my spare time to work on what I want. kmc: most jobs I worked ended due to mental health problems (whether me quitting or them firing me) kmc: sometimes i just got depressed and stopped going in to work imode: reward detachment is a real thing. imode: you aren't hunting food and then feeling a full stomach. you're sitting at a desk or in a meeting to earn tokens to exhange for goods which may or may not be food. imode: that's three levels of indirection just to get to a reward. kmc: alienation of labor kmc: it does enable us to have some nice things, though kmc: perhaps it requires a mindset that is unnatural and somewhat hard to come by imode: labor is an application of energy. energy is a finite resource with multiple sources and sinks. depending on the job, the distribution of energy into different labors may not be ideal to your working lifestyle. in which case, time to find a new company. imode: I used to work 12 hour days, 6 day weeks. imode: that's unnatural and unsustainable. imode: imo it's useful to not think of as money as a reward, but as a requirement for life. once you've met the requirement, _then_ you can use your remaining energy to do whateeeeever you want. imode: people chase cash and then burn out because the cash wasn't a reward enough to them. imode: don't know if that was part of your cse. imode: s/cse/case kmc: no not really kmc: i've never been that motivated by money int-e: imode: "necessary evil" comes to mind kmc: when I was working I always made more than enough to be comfortable imode: we talking east or west coast tech salaries. kmc: um, some of each? and also startups that didn't pay that much salary, but still plenty imode: I ask because I used to frame "more than enough" around $60k. imode: then I was introduced to the concept of $150k+. kmc: there was one job where I got way too into it and worked too many hours, but that's because i cared about the thing not because of money or being obliged to kmc: $150k of which half immediately goes to your landlord ;P imode: where you renting. o_O kmc: (not quite that bad, but not too far off) imode: damn that's hard. kmc: you said west coast tech industry. housing in the san francisco area is insanely expensive kmc: you need a household income of $350k to buy a median house imode: washington. kmc: Seattle's pretty expensive too kmc: but at least they are building housing at an adequate rate imode: I live much further up north, you'd be surprised at 1. how affordable things are and 2. how good the public transit is. imode: currently we pay around $2k for rent + utils. imode: and it's a 4 bedroom house. imode: the lack of state taxes is also nice. really wouldn't live in seattle though. kmc: yeah that's crazy cheap kmc: we pay $3k for rent + utils, for a tiny 1BR kmc: it's in a nice, though not central location kmc: within san francisco kmc: it's a special place. there are reasons why people are willing to pay so much to live here imode: I'll take your word for that. zzo38: What sample rate is needed to input or output video using a sound card? zzo38: They say love of money is the root of all evil. bunnyocto: halp. I'm continuing an old haskel project and the last change I made was adding a "lift $" bunnyocto: and I have no idea why bunnyocto: and it ain't building :D bunnyocto: It builds without the "lift $" bunnyocto: but for someone reason I added it bunnyocto: and I have no idea why bunnyocto: something had to be broken and I had to try to fix it with a lift bunnyocto: also I added an unsafeInterleaveIO bunnyocto: hm. it seems to not to only build fine it actually seems to work without the lift. bunnyocto: oh nvm then. bunnyocto: so. 1J2q.+C~ produces an infinite fibonacci sequence bunnyocto: oh man. bunnyocto: wtf wtf wtf myname: 3k for rent? wow bunnyocto: !blsq "ab12cd"`Frd blsqbot: | "12" bunnyocto: !blsq 1J2q.+C~3.+ blsqbot: | {1 1 2} bunnyocto: blsqbot please do quit bunnyocto: !blsq "foo.txt"rf blsqbot: | ERROR: Unknown command: (rf)! blsqbot: | "foo.txt" bunnyocto: good. no IO. bunnyocto: !blsq {50 100}10rm blsqbot: | ERROR: Burlesque: (rm) Invalid arguments! blsqbot: | {50 100} bunnyocto: !blsq {50 100}10jrm bunnyocto: !blsq {50 100}55jrm bunnyocto: !blsq DB blsqbot: | <"____FILE","/dev/irc"> bunnyocto: !blsq begin lisp (?+ 5 3) end lisp bunnyocto: !blsq {1 2 3 4}k++?/L[ myname: wait, blsq has a lisp interpreter built-in? myname: or is it just the bot? bunnyocto: blsq has lots of things bunnyocto: you know. the author of blsq is mad. bunnyocto: !blsq begin lisp (rz (?* (?+ 5 3) 3) end lisp blsqbot: | ERROR: (line 1, column 16): blsqbot: | unexpected "(" blsqbot: | expecting space, white space or ")" bunnyocto: !blsq begin lisp (rz (?* (?+ 5 3) 3)) end lisp blsqbot: | {0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24} myname: that is a weird error message bunnyocto: !blsq %squ={J?*} begin lisp (squ 3) end lisp bunnyocto: myname: burlesques parsing rules are veeery complicated myname: it looks like it loops or something myname: or it is parsing from right to left bunnyocto: !blsq begin lisp (?+ 1 1) (?+ 1 1) end lisp bunnyocto: !blsq begin lisp (sv squ {J?*}) (squ 3) end lisp blsqbot: | ERROR: (line 1, column 16): blsqbot: | unexpected "s" blsqbot: | expecting space, white space or ")" bunnyocto: !blsq begin lisp (sv "squ" {J?*}) (squ 3) end lisp blsqbot: | ERROR: Unknown command: (squ)! bunnyocto: !blsq begin lisp (sv "squ" {J?*}) (squ 3) (DB) end lisp blsqbot: | ERROR: (line 1, column 16): blsqbot: | unexpected "\"" blsqbot: | expecting space, white space or ")" bunnyocto: !blsq begin lisp (sv "squ" {J?*}) end lisp DB blsqbot: | <"____FILE","/dev/irc"><{J ?*},"squ"> bunnyocto: that's a weird argument order bunnyocto: !blsq begin lisp (sv {J?*} "squ") (squ 3) (DB) end lisp blsqbot: | ERROR: (line 1, column 16): blsqbot: | unexpected "{" blsqbot: | expecting space, white space or ")" bunnyocto: !blsq begin lisp (sv {J?*} "squ") (squ 3) end lisp bunnyocto: oh well. bunnyocto: !blsq begin lisp (sv {(J) (?*)} "squ") (squ 3) end lisp bunnyocto: myname: it supports S-expression but not really lisp bunnyocto: !blsq 3S[ bunnyocto: !blsq 3S[S[ bunnyocto: !blsq 3oS[ blsqbot: | ERROR: (line 1, column 5): blsqbot: | unexpected end of input bunnyocto: !blsq 3oS[ blsqbot: | ERROR: (line 1, column 5): blsqbot: | unexpected end of input bunnyocto: damnit. bunnyocto: !blsq 3oS[ bunnyocto: !blsq 1 3 << bunnyocto: !blsq "1101"b2 bunnyocto: !blsq "1011"b2 bunnyocto: !blsq 13 1rr bunnyocto: !blsq 13 1rrb2 blsqbot: | "11010" bunnyocto: that's not rotate bunnyocto: that looks like a shift bunnyocto: !blsq 13b2 blsqbot: | "1101" bunnyocto: !blsq 13 0rr bunnyocto: !blsq 13 0rrb2 blsqbot: | "1101" bunnyocto: !blsq 13 -1rrb2 blsqbot: | "110" bunnyocto: that's just not right. bunnyocto: ror(1101) should be 1110, and rol(1101) should be (1011) bunnyocto: !blsq 13 2dgrt2dg blsqbot: | ERROR: Burlesque: (dg) Invalid arguments! blsqbot: | {1 1 1 0} bunnyocto: !blsq 13 2dg blsqbot: | {1 1 0 1} bunnyocto: !blsq 13 2dg2ug bunnyocto: !blsq 13 2dg2rtug blsqbot: | ERROR: Burlesque: (ug) Invalid arguments! blsqbot: | ERROR: Burlesque: (+]) Invalid arguments! bunnyocto: !blsq 13 2dg2rt blsqbot: | ERROR: Burlesque: (+]) Invalid arguments! blsqbot: | ERROR: Burlesque: (l_) Invalid arguments! bunnyocto: !blsq 13 2dg2 blsqbot: | {1 1 0 1} bunnyocto: !blsq 13 2dgrt2ug kingoffrance: if i squint that almost looks forthish bunnyocto: !blsq "abcd"rt blsqbot: | "dabc" bunnyocto: !blsq "abcd"RT blsqbot: | "bcda" bunnyocto: !blsq "abcd"o3RT blsqbot: | "dabc" bunnyocto: !blsq 3o9S[ blsqbot: | 19323349832288915105454068722019581055401465761603328550184537628902466746415537000017939429786029354390082329294586119505153509101332940884098040478728639542560550133727399482778062322407372338121043399668242276591791504658985882995272436541441 blsqbot: | 19323349832288915105454068722019581055401465761603328550184537628902466746415537000017939429786029354390082329294586119505153509101332940884098040478728639542560550133727399482778062322407372338121043399668242276591791504658985882995272436541441 bunnyocto: !blsq 13rl bunnyocto: !blsq 13 1qrlC~4.+ blsqbot: | {13 11 7 7} bunnyocto: !blsq 13 1qrlC~5.+ blsqbot: | {13 11 7 7 7} bunnyocto: !blsq "a" 1{"a"_+}C~5.+ blsqbot: | {"a" "aa" "aaa" "aaaa" "aaaaa"} bunnyocto: !blsq "a" 1{"a"_+}C~5.+wd blsqbot: | "a aa aaa aaaa aaaaa" bunnyocto: !blsq "a"5ro?*wd blsqbot: | "a1 a2 a3 a4 a5" bunnyocto: !blsq "a"5ro.*wd blsqbot: | {1 ERROR: Burlesque: (.*) Invalid arguments! 2 ERROR: Burlesque: (.*) Invalid arguments! 3 ERROR: Burlesque: (.*) Invalid arguments! 4 ERROR: Burlesque: (.*) Invalid arguments! 5} bunnyocto: !blsq "a"5.* blsqbot: | {"a" "a" "a" "a" "a"} bunnyocto: !blsq 'a5.* blsqbot: | "aaaaa" bunnyocto: !blsq 'a5ro.* blsqbot: | ERROR: Burlesque: (.*) Invalid arguments! blsqbot: | {1 2 3 4 5} bunnyocto: !blsq "a"5ro?*)im blsqbot: | {ERROR: Burlesque: (r[) Invalid arguments! {++} "a1" ERROR: Burlesque: (r[) Invalid arguments! {++} "a2" ERROR: Burlesque: (r[) Invalid arguments! {++} "a3" ERROR: Burlesque: (r[) Invalid arguments! {++} "a4" ERROR: Burlesque: (r[) Invalid arguments! {++} bunnyocto: ah screw it bunnyocto: !blsq 5iv bunnyocto: !blsq 5.0iv int-e: `? spam HackEso: Spam is a delicious meat product. See http://www.spamjamhawaii.com/ bunnyocto: sry :D bunnyocto: blqsbot please do quit bunnyocto: blsqbot please do quit A-ee: !blsq "Hello World" A-ee: (How do I add my own bot onto IRC?) myname: by writing a program that listens to irc messages and letting it run? Sgeo: `mspalist 12/24 HackEso: mspalist? No such file or directory HackEso: asmbf-1.1.1 \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ paste \ program \ spline \ spout \ test \ test.sh Sgeo: `ls bin HackEso: ls: cannot access 'bin': No such file or directory Sgeo: Blah what's the Homestuck list? Sgeo: `ls .. HackEso: bin \ canary \ emoticons \ esobible \ etc \ f \ factor \ hw \ ibin \ interps \ karma \ karma.orig \ karma.rej \ le \ lib \ misle \ paste \ ply-3.8 \ quines \ quotes \ share \ src \ stuff \ tmflry \ tmp \ wisdom Sgeo: `ls ../bin HackEso: ​ \  \  \ ! \ " \ # \ ' \ ( \ ? \ ?? \ @ \ ^.^ \ ` \ `^ \ `` \ ¿ \ ؟ \ ⁗ \ `̀ \ 04w08e09l11c12o13m04e \ ,1 \ 1 \ 13 \ 1492 \ ,2 \ 2 \ 2014 \ 2015 \ 2016 \ 2017 \ 3 \ 4 \ 5 \ 5quote \ 5w \ 8-ball \ 8ball \ aaaaaaaaa \ acronym \ addquote \ addscowrevs \ addtodo \ addwhatis \ age \ aglist \ airport \ airport-lookup \ allquotes \ analogy \ anonlog \ append \ as86 \ as-encoding \ asm \ asmbf \ asmbfx \ autowelcome \ bardsworthl Sgeo: `ls ../bin/*list HackEso: ls: cannot access '../bin/*list': No such file or directory oerjan: `listlist HackEso: FireFlist* \ aglist* \ bardsworthlist* \ bobadventureslist* \ calesyta2016list* \ danddreclist* \ don'taskdon'ttelllist@ \ dontaskdonttelllist* \ ehlist* \ emptylist* \ erflist* \ flist* \ idealist* \ ioccclist* \ keenlist* \ list* \ listen* \ listlist* \ llist* \ makelist* \ makelistlist* \ minimalist* \ mlist* \ olist* \ pbflist* \ slist* \ smlist* \ stylist* \ testlist* \ xkcdwhatiflist* \ ysaclist* oerjan: `? slist HackEso: Update notification for the webcomic Homestuck. oerjan: very logical oerjan: then again, it was one of the first, so people could still remember them all Sgeo: `slist 12/24 HackEso: slist 12/24: Taneb atriq Ngevd nvd Fiora Sgeo ThatOtherPerson alot Sgeo: `? keenlist HackEso: keenlist is notification for when Tom Hall acquires the necessary intellectual property rights to create the videogame series Commander Keen: The Universe is Toast Sgeo: slist also used to be useful a lot more often Sgeo: Which probably helped. Sgeo: We'll probably have this conversation again in about a month Sgeo: `? ysaclist HackEso: ysaclist? ¯\(°​_o)/¯ Sgeo: `? erflist HackEso: erflist? ¯\(°​_o)/¯ oerjan: that is a weird error message <-- iirc burlesque is parsed with the haskell parsec library, which gives such errors. oerjan: although i think it may not be written in the recommended style, or the errors would be more sensible. oerjan: it parses left to right, but if you use backtracking in the wrong way it can give an error on a too early token because it forgets what really caused it to give up int-e: fungot: can you obfuscate boolean circuits? fungot: int-e: python lets you assign things to variables. int-e: that's... almost relevant fizzie: fungot: Can you simulate B12/S1V? fungot: fizzie: it was before i went to the party. the party. so you reported what he said... never mind. it needs an fnord. fizzie: That's less so. int-e: Is that an AoC question? int-e: Oh, yes it is. int-e: I may have seen that notation before. int-e: Maybe minus the letters, just 3/23 for GoL? int-e: fizzie: I made the mistake of including diagonal neighbours... twice. fizzie: I think I had seen B23/S3 for GoL. fizzie: The V suffix I hadn't seen anywhere, picked it up from https://conwaylife.com/wiki/Rulestring for my notes though. int-e: (Because I had to rewrite everything for part 2. The one bit I copied over turned out to be flawed :) ) int-e: Because for part 1, I included the cell itself in the "neighbour" count. So the formula for the final cell didn't work anymore in part 2... int-e: "formula" fizzie: I think I managed to make about every single trivial mistake I could possibly have made when writing up part 1. fizzie: Maybe because I had just woken up. int-e: "This is easy... I'll just breeze through... why doesn't this work?" fizzie: Shifting to the wrong direction (in at least three separate occasions), using `i` where `1 << i` was intended, using the wrong variables. fizzie: Yes, that's almost exactly what I was thinking. fizzie: "I'll just fix this and then we can have breakfast, won't take long." int-e: Oh I got the final count correct at least :) int-e: But it was less frustrating then the day before (did you see my privmsg?) fizzie: Oh, right, I forgot to have a look at that. But yeah, kind of thought it might be. int-e: (Which, btw, is all my fault for sticking to an inconvenient interpreter design. Purity is not really the problem, I could have an interpreter that returns continuations for input and output actions.) fizzie: Only one more. Although over on Go side, I've only done 1-6, 11, 18, 19, 22. Kind of want to do the complete set for some reason. int-e: Rather than having a [Reply] -> [Request] type, it would be data M = M Request (Reply -> M) int-e: And I could collect requests, compute the replies, and feed them to the continuation at my leisure. int-e: And I should've done that for the labyrinth task. fizzie: I think several of them have had labyrinths. The one with the keys, and the one with the donuts. int-e: It's the one you missed, the oxygen one. int-e: The one where you actually had to do some exploration of the labyrinth. int-e: Day 15. int-e: Oh https://conwaylife.com/wiki/Rulestring actually mentioned the variant without letters, but it has survival first: 23/3 for GoL. int-e: "has fallen into disuse in recent years" fizzie: Oh, right, the one I did super-slow. fizzie: AIUI, the Bx/Sy variant is what Golly uses. int-e: (TBF, the "in recent years" was written in 2017, so maybe it's still okay) int-e: fizzie: I was briefly tempted to stop after day 21 actually, to keep the 42 stars :) int-e: Day 22 is shaping up to have the most difficult part 2 (relative to part 1)... int-e: I guess programmers don't need to know linear algebra. fizzie: By a wide margin, if the stats table is a good metric of that. int-e: But day 16 is holding up pretty well too. fizzie: It might just be because part 1 is so eminently solvable without any cleverness, just by following the instructions. In fact, my part 1 solution actually did the motions on the whole deck, instead of just the card it asks about. fizzie: For 16 I think it's kind of a what do you call them, a trick question. int-e: I think so, yes. int-e: It's too bad that the absolute numbers are pretty much meaningless. int-e: (though we can see a nice decay from day 1 to now) int-e: And, oh, the graph display is flawed. int-e: It should carry the remainder from the gold stars into the silver stars. int-e: (The bar on day 22 shouldn't be shorter than the ones above and below.) fizzie: Some of the top 100 scores are pretty impressive. For 3590, you'd have to average... about 75 points/star. int-e: > 3590/48 lambdabot: 74.79166666666667 int-e: > 728/48 lambdabot: 15.166666666666666 int-e: > 728/75 lambdabot: 9.706666666666667 int-e: I agree, being consistently fast on these tasks is impressive. fizzie: I have a few friends working at one of the sponsors (Reaktor -- kind of a given, they're pretty big employer of software engineers in Finland), though haven't seen them on the lists. int-e: Of course you have to approach this differently if you aim for the lists. Have a template ready (odd days: Intcode interpreter, parser, maybe even an invocation of the interpreter), and a command to fetch the input at the right time. May easily shave of 2-3 minutes from the solving time, which seems to be crucial. int-e: shave *off oerjan: today in schlock mercenary: unlearning thermodynamics oerjan: also, merry christmas int-e: oerjan: Damn. I didn't even read that part. oerjan: schlocking int-e: TBF it's a fiction-inside-fiction thing. int-e: Yeah my lack of attention is deplorable. int-e: I kind of dozed off at "using" and switched to, what's her name again... int-e: Cindy? int-e: (Well, small detached fragment off her.) int-e: (Now imagine saying that about a human.) int-e: s/off/of/ (My spelling grows worse, tooo (sic!).) int-e: `? santa HackEso: santa? ¯\(°​_o)/¯ oerjan: still waiting for the fragments to multiply. all we know about those two imply they _should_ be able to do that. assuming the fabber can handle all the fragsuit parts. oerjan: *implies oerjan: including itself. oerjan: although the pa'anuri are going to be suspicious if they keep nuking the evidence after every raw materical collection oerjan: of course if they're any smart they're already suspicious after the first one. int-e: I'd be disappointed if they weren't smart. int-e: Though not necessarily Pete levels of smart. int-e: Petey? int-e: Names are hard. oerjan: blame darths & droids hth int-e: (Not all of them. "Ennesby" is easy.) oerjan: we're stilling waiting to find out what devious plan the people at the university have uncovered int-e: (Because it has a story attached to it.) oerjan: *still oerjan: this spelling thing is clearly not following normal causality tdnh int-e: Well, I just checked... we had not seen Schlock for (just shy) over 4 weeks. int-e: There are way too many story threads. Except, somehow, each of them is entertaining in and of itself (to me). oerjan: there's some heavy splitting of the party going on int-e: Oh right. Poor DM. oerjan: now with lota out of commission they can't use their original plan for getting the rest of the teams into that pa'anuri warship oerjan: then again maybe petey built a copy. he did say he would. int-e: oerjan: Did you notice that LOTA was addressed with puny pronouns and did not object? int-e: ( https://www.schlockmercenary.com/2019-12-18 ) oerjan: by putzho, yes. oerjan: ironic because putzho is the one who actually shows he cares imode: merry christmas, happy holidays. zzo38: {?} Enchantment - Aura ;; Enchant permanent ;; Whenever any object with counters moves to another zone, add those counters to enchanted permanent. int-e: That's AoC done. No programming today. Maybe some luck. int-e: Well *someone* sounds relieved... ArthurStrong: Hi all! fizzie: int-e: I did a mixture of programming and not-programming, in the sense that I explored manually, but then had a computer try all subsets of items. A-ee: https://esolangs.org/w/index.php?title=Dd&direction=next&oldid=67881 That means fungot's 'or' language can also be extended to a 500-word requirement. fungot: A-ee: it's the builtin language on my calculator once. got distracted by other projects? A-ee: Link to the language: https://esolangs.org/wiki/Or kspalaiologos: I've got a suggestion kspalaiologos: can we merge ALL the trivial brainfuck derivatives into one site with multiple pages? kspalaiologos: it would greatly increase quality of the wiki overall A-ee: Idea: make a separate wiki for brainfuck derivatives. kspalaiologos: it would be the most boring wiki I've ever seen kspalaiologos: I don't want to remove them, BUT kspalaiologos: we really need to get them concentrated kspalaiologos: because expecting to find a cool language I can work a bit on kspalaiologos: most times I see another useless brainfuck derivative. kspalaiologos: *trivial A-ee: I'm #16 in the https://esolangs.org/wiki/Special:MostLinkedPages! A-ee: Whoops https://esolangs.org/wiki/Special:MostLinkedPages int-e: fizzie: If the solution is unique then I got lucky in my manual up&down endeavour. int-e: fizzie: The only programming I did was to add abbreviations (n = north and so forth) fizzie: int-e: The solution does seem to be unique, at least for me. fizzie: Then again, there's only 256 possibilities, and with the hot/cold hints, you probably don't need to be *that* lucky to hit it manually. int-e: I found the non-pickable items cute btw fizzie: I drew a map using Google Keep's drawing feature, and then it turns out the "download" option produces incredibly poor-quality low-resolution PNG exports of whatever the internal vector drawing format is. fizzie: (Really need to find a better drawing program for my ChromeOS thing-with-a-pen.) int-e: There's an evil e,n,w,s non-loop in mine (and I'm assuming the map doesn't change). fizzie: It seemed stable for me, but yeah, it's not physically feasible if all the steps have the same length. fizzie: Fortunately the drawing is at least editable while still in Keep. ;) int-e: stable, yes, indeed. fizzie: https://zem.fi/tmp/kqFQJlypd0Aoxhld.png if you want to check whether the map's the same for everyone, and only the password differs. fizzie: (Well, maybe the password and the item set.) int-e: heh, that's completely different int-e: fizzie: https://int-e.eu/~bf3/tmp/map.txt is mine int-e: Fun, there's a list of powers of 2 up to 2^50 in the code :) ArthurStrong: Hi all. fizzie: int-e: Looks like the map is different, and some of the items too. The instant-death (well, end-of-game) ones are the same though. int-e: Which makes sense since they each have custom code. A-ee: https://esolangs.org/wiki/Special:MostLinkedPages Got a rank of 7. (Let your Christmas present be the edit-spam) A-ee: But zzo38 is going to be hard to beat. A-ee: There's nothing more to do and I still didn't beat that user... arseniiv: (Let your Christmas present be the edit-spam) => this is funny because there are people who don’t celebrate it at this date arseniiv: and there is a week still before the new year arseniiv: @tell imode oh! Haven’t seen that three days ago lambdabot: Consider it noted. int-e: fizzie: I can decode strings but the final check is pretty funky... haven't penetrated it yet. The table of powers of 2 is associated with a division routine. int-e: > let d (x:xs) = map chr $ zipWith (+) [x..] (take x xs) in d [6,4,3,2,52,51,21] lambdabot: "\n\n\n== " int-e: Oh and the base register is used as a stack pointer. And there's quite a bit of self-modifying code (for indirect addressing) int-e: Ah and the map and items are hard-coded in the input, not generated from a seed. zzo38: For vector format, I don't know what Google Keep uses, but I know of some other formats. There is DRAWX vector format, but very few programs support it (only two, as far as I know), and coordinates are integers limited to one thousand only. zzo38: I don't know if you can try to figure out the Google Keep's format if it has a internal vector format fizzie: Well, I'm just guessing it has one, because you can select individual parts of the drawing and move/scale them around. But even if there is one, there's no officially sanctioned way to access it that I know of. fizzie: I don't know what software would be good for drawing things freehand with a pen while keeping them editable. I've used Inkscape for vector stuff before, but it might not be that good for that particular purpose. kmc: illustrator? fizzie: Hmm, well, it also needs to work on ChromeOS, because that's my only device that has a pen. kspalaiologos: fizzie, what do you think about moving all trivial brainfuck derivatives into one page kspalaiologos: we possibly could run a script to move all pages tagged with this tag into one page and create sections with each kspalaiologos: this amount of them is just making the wiki boring and low-quality fizzie: (Apparently there's an "Adobe Illustrator Draw" for Android though.) fizzie: I don't know if that would really help that much. fizzie: It's not like the number of pages in the wiki matters. But maybe they should be all moved to one section, like how there's the separate joke language list. Not sure if that's so helpful either, though. zzo38: I don't know how to work a program on ChromeOS zzo38: Do you know how to write a drawing program on ChromeOS? fizzie: Sort of. I mean, not in detail. Although these days it can run both Android applications and Linux software in a VM. zzo38: Someone told me they would make up a web interface for sqlnetnews. My requirement is that the NNTP link is always available even if CSS and JavaScript is disabled. Do you have any other feature suggestions? imode: poll: are text inputs and displays a "universal" input method? zzo38: I think so. imode: s/input method/IO method imode: I'm on the fence about it. I think symbol streams are interesting and somewhat medium-agnostic. fizzie: We bought some Ferreros Rocher (is that the right plural?), because apparently they're a big thing here. fizzie: (Also watched the Queen's Christmas message.) oerjan: sounds legit. paranick: does some languaes have ratio? paranick: golden mean? int-e: fizzie: So the weight check turns out to be a lexicographic comparison, though obfuscated. So it's always the case that there's either an item that makes you too heavy all by itself, or an item such that all the other items together make you too light... which is basically what I did in my manual approach. So I wasn't all that lucky. int-e: fizzie: Oh and the key is simply the bitmask corresponding to the items selected. Lykaina: hello? Lykaina: had a nightmare Lykaina: dog was dying Lykaina: so shaken up imode: is your doggo okay? Lykaina: not exactly gonna call my parents to see if i had a premonition Lykaina: i think she's fine imode: fwiw I think so too. imode: hate those dreams. are you okay? Lykaina: i'm not sure... imode: I'm sure your dog is alright. dreams are projections rather than predictions. Lykaina: i always consider her my dog...even though i moved away a year ago Lykaina: she's with my parents Lykaina: she is technically their dog, i was just living with them at the time imode: doesn't stop you from caring about her. Lykaina: my parents will be pissed if i call at 2:45am int-e: and you might scare the dog too zzo38: Then wait until the morning if you want to call Lykaina: i'll go back to my room zzo38: Some people have suggested Omnath, Locus of Mana to substitute for mana burn if you need it. However, it doesn't quite work, but something similar can probably be made up in some circumstances. kmc: merry christmas all Lykaina: i thought mana burn was long gone from the ruleset? kmc: well it's boxing day in most of the world. but happy boxing day, or something zzo38: Yes, mana burn is gone from the rules. Lykaina: regifting? kmc: regifting should be encouraged kmc: but it goes against the consumerist aspect of christmas zzo38: kmc: Yes, I think regifting is good, and I think reusing is good kmc: i'm preparing a gift for my girlfriend, it's an emergency kit containing a mixture of new items, things i already had but want to get rid of, and things I got from other people on a "buy nothing" group zzo38: That would be good, then kmc: I have given away many items on the buy-nothing group, and got some good stuff myself (e.g. a nice messenger bag, several hundred USD worth of camping equipment) kmc: increasing aggregate utility through pareto improvements! kmc: I also like to take things others are throwing away and repair them kmc: for example my friend was getting rid of an electric toothbrush because she broke the plug on the charger base kmc: (in a rather spectacular accident involving a well known design flaw of American outlets, namely that a piece of metal can fall across the prongs while they are plugged in) kmc: anyway, it was simple enough to cut off the plug and solder on a new one kmc: i don't actually want an electric toothbrush for my teeth, but I have used it to clean jewelry kmc: but then I also accumulate a bunch of things I never get around to fixing, which are eventually thrown away kmc: oh well int-e: fizzie: If you're interested, here's an annotated (and abridged, when it comes to string data) disassembly of the whole thing I got, https://int-e.eu/~bf3/tmp/aoc25_dis.txt int-e: (mnemonics should be self-explanatory except maybe "IBR" for "increment base register) zzo38: If you have Omnath with a -1/-1 counter and you have a lot of green manas in your mana pool, then you can get rid of Omnath if you can spend all of the green mana. (It may also be a different color, if Sleight of Mind or a similar effect is used.) zzo38: Can you make a puzzle out of that? int-e: zzo38: arguably you've just done exactly that kspalaiologos: I'm considering adding a feature to asm2bf kspalaiologos: and I'm looking some feedback kspalaiologos: https://github.com/kspalaiologos/asmbf/issues/31 kspalaiologos: what do you think about it? kspalaiologos: please @tell me on any chances on making it at least tiny bit usable myname: how is that a language? myname: ugh, A is being even worse than before int-e: 'Start making at least 100 esolangs (like me), where each esolang involves just a printing to stdout function (those languages are the easiest to make).' myname: most of these entries aren't even languages int-e: Once again I'm happy with my decision to filter A-related edits from esowiki's messages. It's still happening, of course, but I don't have to watch it unfolding in real time. myname: well, I am more annoyed by the wiki entries themself myname: is this even somehow moderated? int-e: We have wiki admins, but not around the clock. fizzie: And that was a misclick. fizzie: Fortunately I don't think it really matters what's on that specific page. fizzie: I'm not sure what to call those "languages". It's unfortunate they got so obsessed about having the most-linked userpage. int-e: Oh is that their goal... meh. fizzie: Well, that, and getting the random page to land on one of theirs. At least that's my impression. int-e: Yeah, I got that. I even quited something to that effect earlier (from a comment they left on another User's page) int-e: See here, https://esolangs.org/w/index.php?diff=68321&oldid=68281 fizzie: (Something else I find odd is, their signatures seem to have the "this comment by A; please sign your comments" bit, even though it looks like they're signing them as usual.) int-e: They've been signing like that for a while now. int-e: I think it's just another way of causing irritation. fizzie: Yes, it's just that from the edit summaries -- https://esolangs.org/w/index.php?oldid=68336 for example -- it sure sounded like it was just a normal --~~~~ that they did. int-e: I don't want to think about it. fizzie: Anyway, I think I removed createpage and createtalk rights from them. Maybe. MediaWiki is hard. Going to have to make some comments about it now, I guess. int-e: Does that cover moving pages? (Or maybe they lost those rights earlier... hmm.) fizzie: I don't know. Removed "move" as well. I'm not too hopeful this approach to administration will actually work, though. fizzie: Sorry in advance for the upcoming spam, I'm pretty sure Extension:Nuke will still report edits individually in here. fizzie: Weren't that many of them after all. fizzie: (Those were just the recent super-spammy ones. I know there's many many more from earlier, but at least they look a little bit more like content.0 fizzie: In related news, I'm not sure it's great to have that Intcode interpreter right there on the page. int-e: I don't like it there either. int-e: But I don't want to simply remove it... I guess we could have an Intcode/Interpreters page? fizzie: I guess the problem is, there isn't really an obvious place to host code that you just want to share for esolangs.org purposes but don't want to have a, say, GitHub repo for under your own account. fizzie: That might work. MediaWiki still isn't the best thing for code, but at least it's not in the middle of the article that way. int-e: Okay, let's see if I can move this content without accident :) fizzie: Do we have subpages enabled for main namespace in the first place? fizzie: (Although I guess it doesn't really matter all that much whether it's an official subpage or not.) int-e: I don't think they act as subpages, no. fizzie: Well, probably none of the subpage features are that critical anyway. int-e: fizzie: How do you feel about mnemonics for Intcode? Maybe if we can agree on a set... I was using ADD, MUL, IN, OUT, JNZ, JZ, SLT, SEQ, IBR, and STOP. Also #nnn for mode 1, and B+nnn and B-nnn for mode 2... int-e: (Which clearly shows my Intel assembly background. With Motorola I'd be using B instead of J) fizzie: I was using add, mul, in, out, jnz, jz, setlt, seteq, setb and halt. int-e: I guess AT&T would use b(nnn) for the base register use? int-e: I'm actually not sure. int-e: Hmm, "setb" is not logical. fizzie: Yes, agreed. fizzie: For the opcodes, I think I prefer 'halt' over 'stop'; I find 'setb' illogical as well; and I don't have an opinion for slt/setlt, seq/seteq. int-e: I've thought about "addb", "incb", "advb" before going for the three-letter (but obscure) "IBR". fizzie: For operands, I was also first using #nnn for immediate and B+nnn and B-nnn for base-relative, but when I started considering labels, thought the "B" in something that looks like an expression but is actually special might be a little confusing. So I switched to nnn for immediate, *nnn for position mode, and @nnn for relative mode. int-e: Oh and I'm not sure how "relative base" became "base register" (and hence BR rather than RB) in my mind. fizzie: Also, I imagined having a syntax like: "foo: add [bar:X], *[baz:Y], @[zuul:Z]" for what'd essentially be the instruction "add X, *Y, @Z" but with labels for all the four locations. fizzie: Thought it'd be nicer than "foo: add X, *Y, @Z" and manually using foo+1, foo+2, foo+3. fizzie: In fact, wrote up http://ix.io/25xa as a potential syntax but then got sidetracked reading about parser generators. fizzie: (Looks like I was thinking of using mov, j, jlt and jeq as pseudo-ops as well.) int-e: The AoC code is funny in that regard. fizzie: The only one I disassembled properly seemed to be using "add x, 0, y" and "mul x, 1, y" about equally often. int-e: j uses one of jz #0 or jnz #1, seemingly at random, and for mov it uses both add src, #0, dst and mul src, #1, dst fizzie: Yes, I was thinking the pseudo-ops would pseudorandomly select one of the possible expansions. fizzie: "That's why they're called pseudo-ops!" int-e: I suspect the author actually has a higher level language implemented... maybe a minimal C dialect (in particular I suspect whatever language it is has a ternary conditional operator on the expression level.) int-e: This is my impression from the adventure game. fizzie: FWIW, I do like # for immediate, just thought it'd be better to have a sigil for (pos, rel) instead of (imm, rel), after abandoing the B+ / B- approach. int-e: 42(%rb) int-e: (I'm still trying to remember the AT&T vaersion) fizzie: Yes, I think it'd be that. int-e: I guess @ is fine after a short period of adapting to it. fizzie: Incidentally, while I still haven't redone all of these in Go, for the set I do have (1 2 3 4 5 6 7 8 9 11 18 19 22), it takes the Python side 14 seconds to run through all of them, but 0.4s for the Go bunch. int-e: I'm changing my IBR to INCB and STOP to HALT. I like having short mnemonics so I'm sticking with SLT and SEQ. int-e: We agreed on the rest :) fizzie: I think that's perfectly reasonable. fizzie: Probably the only reason I went with SETLT/SETEQ is because of Intel's SETcc, but those would be SETL and SETE instead of SETLT and SETEQ anyway. fizzie: (Maybe there should be a "Proposed assembly syntax" section on the Intcode page, though.) int-e: Yeah that was the idea. int-e: fizzie: ^^ it's a start kspalaiologos: https://esolangs.org/wiki/Muppp kspalaiologos: this looks entertaining kspalaiologos: but it lacks both the interpreter kspalaiologos: and the brainfuck -> this transpiler I fancy writing kspalaiologos: has somebody yet invented an algorithm kspalaiologos: for generating multiplication loops? kspalaiologos: in form of (ax+)[>(bx+)<-](cx+ / cx-) bunnyocto: puh. how do I explain what a zip is? kspalaiologos: file containing other files? imode-ruby: stitching files together with a note saying what file is what. bunnyocto: @type zip lambdabot: [a] -> [b] -> [(a, b)] bunnyocto: this zip imode-ruby: oh. explain to them how a zipper works. imode-ruby: you have list A, and list B, and something that interleaves the two, such that elements of A and elements of B become interleaved, with elements of A coming first, then elements of B, etc. FireFly: "take two arrays of the same length, and return an array of pairs with each pair containing each successive element of the input arrays" perhaps? FireFly: could use "producing an association list" as a motivating example myname: i woul probably explain zipWith first and zip as a kind of "i don't have a function so here are just you values" version of it FireFly: that sounds reasonable too, yeah FireFly: and zipWith is probably quite easy to explain by analogy to map bunnyocto: zip is just zipWith pair bunnyocto: but that's a great idea bunnyocto: explaining zip through zipWith. zzo38: Now they invented "Naive Image Format", although I think that Farbfeld is better. Their own comment is: "Configurability is admittedly a trade-off: one person's configuration parameter is another person's unnecessary bloat. We're not saying that Farbfeld is a bad design, just a different design that has chosen different trade-offs." zzo38: My own opinion of that is that this configurability is unsuitable for some purposes, and is insufficient for other purposes, so that doesn't make so much sense to me. zzo38: There may be sometimes the case where you will want to use premultiplied and sometimes not, but in a format such as this it is probably not useful since that would complicate the implementation, and instead is better that sometimes you may want to reinterpret existing data as premultiplied or not, or something more generalized. That is independent of the file format, and of most filters, too. zzo38: The "K" in "CMYK" stands for "key" or "black". Either way works, but which usage is older? Frater_EST: Without looking at outside information, I would state that self-evidently K is a sign for Key primarily. zzo38: Wikipedia says the K is "key[citation needed]", while in PostScript the name /Black is used to refer to the K component of CMYK colours. Frater_EST: zzo38 I think you are asking the wrong question, why is the K used, and not B? Black IS "Key" because that is its function, K is Key because the K is the first letter of the word. Frater_EST: So when you ask "Which usage is older" - the question has an embedded category error because neither usage is older. The K has always been Key has always been Black? zzo38: I mean whether whoever made the name "CMYK" intended the "K" to stand for "key" or "black". kspalaiologos: `asmbf amp r1 HackEso: ​+>+[# kspalaiologos: Duh, an old version Frater_EST: zzo38 What I am getting at is your framing for inquiry is likely incorrect: K stands for Key, this is directly self-evident that the letter "K" is used and not "B". Frater_EST: Black ALSO - IS Key, they are the same thing. And are meant to be the same thing from the get-go. Frater_EST: Nor is it arbitrary, such that for example, Green could be "K". Frater_EST: The context for choice is based on the qualitative relationships of color and the relevant field is "Color Theory". Frater_EST: To simplify: Black is the "Key" for an analogous reason that 0 is the start of a number line and not "Infinity". Frater_EST: Black is the perceptual phenomenon resulting from the "Lack" of colors, subtracting other color qualities. Frater_EST: Make sense? Frater_EST: So you have "White" which is the background, and "All Colors" perceptually imposing such that none are individually distinguishable. Then the sign has to be a contrast. Black as opposite is the "Key" color from which you can gain orientation on a scale, then you pick a set of colors (CYM) as choices between this binary. zzo38: How to display subtitles on Raspberry Pi? It says there are two subtitles, but when I try to display them, the subtitles are not visible (although the message that says which subtitles are selected is visible) zzo38: Also how to configure the skip amount by pushing the arrows? zzo38: Should there be a "languages with unknown working" category? There are some on esolang wiki. imode: if you restrict thue's rule space to 3 symbols on the LHS and RHS, is it still turing complete? imode: this is also assuming a binary alphabet. imode: I guess yes, because you can construct rule 110 from that...? kmc: I think black is K because B was already blue, as in RGB kmc: i'm not sure there's anything more to it kmc: never heard of it meaning "key" kmc: but i'm not an expert in the field zzo38: Is there such a thing as a X server in PostScript? zzo38: That would allow you to print vector graphics from any X client. zzo38: A book I got mentions using PostScript for printing, although they just describe their program generating a PostScript code and then telling the system to print; they also say they could instead generate vector graphics and generate those PostScript codes instead. imode: zzo38: you should look at NeWS. imode: display postscript and all that. zzo38: But other ways would be to write a PostScript program to parse the file format used, or to use a PostScript-based X server. zzo38: imode: I saw NeWS, but I think that PostScript is not a very good document format or protocol, but PostScript is OK as a programming language. zzo38: And anyways it seem that NeWS is not X. zzo38: (I don't really like the pie menus either) imode: I can only see a 3-length binary string rewriting system as being TC if it's used to implement Rule 110. can't see any other way. int-e: Can you even do that? I mean you can implement the rules just fine, but you lose all the synchronicity. int-e: In fact, since the transitions overlap... it's not obvious how to make a CA. imode: if you assume a priority order, sure. imode: at least I think.. int-e: It's also noteworthy that you operate on an infinite (to both sides) string here, so you're outside the string rewriting formalism anyway. int-e: (but that can be worked around; things like termination can still be undecidable for length-preserving string rewriting systems) imode: I guess my real question is: given Thue, limit the string length for the LHS and RHS to some constant value, and limit the alphabet to binary. what's the smallest length that still makes the resulting variant turing complete. int-e: hmm. probably too hard to answer ;) imode: it's an interesting idea, though. int-e: 65536 systems for length 2; 2^2^(2n) for length n. int-e: And then you have to decide on a question for "TC". int-e: (FWIW, I don't really accept the notion that rule 110 is TC. It embeds too much information in the starting configuration for my taste.) int-e: At least with the proof we have. imode: yeah... I'm kind of in the same boat. int-e: The (related) problem with length-preserving SRSs is that if you fix a starting string then it has only finitely many successors, and that makes pretty much every question you might ask about that (termination, reachability of a particular string, even stuff like confluence, weak normalization, and so forth) decidable. int-e: So the question you ask somehow has to allow strings of unbounded length. imode: I don't have any reservations about that. int-e: like "is there a string that doesn't terminate" int-e: hello onejar! oerjan: moint-e int-e: hmm morning tea oerjan: xkcd updating early, what is this magic oerjan: . o O ( it's always possible i just missed the previous one. ) int-e: seems a bit off season... unless Randall's gone Australian. oerjan: int-e: not enough fires to be australian hth oerjan: although dmm seems to have stopped twittering about it, so maybe they stopped int-e: from what I'm reading they haven't. they have slowed down a little thanks to a bit of rain and less wind. Lykaina: i had a realy scary nightmare last night and i think i'm afraid to fall asleep Lykaina: i moved bedding to my sofa Lykaina: guess i'm trying to sabotage sleeping kmc: you could try sleeping on the sofa Lykaina: too late at night to move it back to my bed Lykaina: so, yeah int-e: Oh we seem to have lost shachaf. int-e: `? goto HackEso: goto? ¯\(°​_o)/¯ int-e: `learn GOTO is just one step removed from going to hell. HackEso: Learned 'goto': GOTO is just one step removed from going to hell. kingoffrance: zzo38, there was some display postscript extension for x on sourceforge long ago, i dunno if it ever was completed or any real programs really used it; i think proprietary unices might have shipped a real thing by default (sun? hpux? vms? irix? i dunno) ... i assume it was meant to be "compatible" to display such clients on a "free" x server (i.e. on a non-proprietary unix) but i could be way off kingoffrance: AFAIK it died and was never really used, so you might to google and archive.org to find it kingoffrance: i vaguely recall it was related to the xprint extension, but also could be way off kingoffrance: which im not sure anyone really uses/used that either kingoffrance: i dont think it was meant to be compatible with nextstep/openstep non-x stuff, but there was some speculation e.g. gnustep might be curious too use it; i assume they are/were somewhat use to aim with source-compatible with such apps, but how that manifested/manifests re: display servers i have no idea int-e: Display Postscript is ancient (oh but I didn't remember that it originated with NeXT)... https://en.wikipedia.org/wiki/Display_PostScript kingoffrance: (ns/os display postscript i mean); ns/os you could run x servers too, but i dont believe there was really a "bridge" to/from the DPS stuff, although you could run "rootless" somewhat kingoffrance: cube x window x server for nextstep/openstep is free license nowadays :) iso download i believe kingoffrance: i think it supports 3 or 4 arches kingoffrance: been awhile int-e: To my mind it's one of those "next big things" that never materialized. int-e: Probably killed by 3D graphics. kingoffrance: tru64 or dgux also might have been the thing that had display postscript x extension :/ kingoffrance: i dunno, maybe for same cad program or something :/ zzo38: I think 3D graphics (and other fancy graphics) are overused kingoffrance: so this x extension i think was meant to be compatible with that, and not the nextstep/openstep stuff zzo38: You can still use external PostScript interpreter, such as Ghostscript so you can still use Ghostscript to display PostScript graphics on a X window zzo38: But as far as I know, Ghostscript does not provide any way to read X events, nor can the X drawing functions be used in PostScript kingoffrance: ns/os is one of the things i dont think ive ever seen a vnc server for; client, but not server; i believe there are "drivers" for e.g. vmware, but im not sure of any good remote display (although qemu vnc server might suffice) int-e: It's only appropriate. Ghosts generally have trouble interacting with their environment. zzo38: Standard I/O still works, but it doesn't have X events. kingoffrance: well, some forum at least one person was trying to hack a darwin kernel to "backport", and i think they got this frankenstein booting at least, so maybe there will slowly be some up to date "ports", lack of proper posix is a killer zzo38: (Even so, PostScript graphics are best for printing rather than on screen, since PostScript uses printer fonts rather than screen fonts) kingoffrance: i believe its all legal, not stolen source or anything..... just very.....frankensteinish kingoffrance: and theres a next emulator or two now too, to emulate the next hardware, so there are sort of some people still doing stuff kingoffrance: they are just vewwy vewwy quiet zzo38: It is also possible to write programs that embed Ghostscript; such as, TeXnicard embeds Ghostscript and SQLite, but uses the TeX fonts rather than PostScript fonts. It isn't very clear how to work separations when using the Ghostscript "display" device though; do you know how? kingoffrance: i hope you arent asking me, i play with oses; programming is another story :/ zzo38: O, OK. Which oses you play with? kingoffrance: anything i can get my grubby hands on; i dont have much hardware nowadays, just cheap x86 stuff; the one thing i cant find an emualtor for is beos ppc, no powerpc emulator that i have found will run it zzo38: (TeXnicard is written half in C, half in SQL, and half in PostScript. It does not embed TeX but does use its font formats and some of its algorithms.) kingoffrance: someone in ##electronics said they are writing an sgi indy emulator, qemu is too slow zzo38: kindoffrance: I have not used many operating systems, but have used emulation of some systems, including 6502 kingoffrance: so that perhaps is i used to have real hw, but never had time to play with kingoffrance: so he is doing penance for my sins of losing that hw kingoffrance: in my mind zzo38: (Well, TeXnicard includes PCRE as well) kingoffrance: i guess alpha emulators dont like windows nt, but that doesnt particularly interest me zzo38: Once I worked it enough would you or someone to try to make templates to render Magic: the Gathering cards and other card games with TeXnicard? kingoffrance: im not a tex guy other than lyx :) kingoffrance: it is rare i have do someting that looks nice zzo38: I think TeX is a good typesetting system (for when you want text, rather than graphics; for graphics, PostScript is better), and wrote my own DVI driver that reads the DVI and PK fonts and converts it into the rasterized format. zzo38: However, TeXnicard does not actually use TeX (it implements some of its algorithms and file formats itself) (although METAFONT is recommended, but not technically strictly required); it uses SQL and PostScript. zzo38: So you do not need to know how to program in TeX to use TeXnicard. zzo38: Do you make up your own Magic: the Gathering cards? zzo38: (Sometimes I do.) kingoffrance: i was never part of such things, other than rpg video games vaguely reminescent/relate kingoffrance: s/related kingoffrance: e.g. some of the final fantasy games added cards eventually zzo38: (You might wonder why it is called TeXnicard if it does not use TeX. I suppose the relation of TeXnicard to TeX is about as much as TeXmacs is to TeX; TeXmacs doesn't use TeX either.) kingoffrance: i dunno about modern stuff if they kept such things as a "side game" type thing kingoffrance: i think if you are making your own cards that is probably more in the spirit of such things kingoffrance: "purists" probably hate people who do such, but so long as they are not blatant ripoffs, it probably shows you understand the "mechanics" or "substance" of things kingoffrance: you have to have some understanding to do such things i mean, or at least well kingoffrance: lots of people hated many f.f. and square "3d remakes" and re-scores (music), but really, that to me is kind of what they wouldve done had they better hardware than e.g. snes kingoffrance: some people just dont like anyone touching their favorite thing, even the same company who made it, but as long as it is in the spirit of things, it doesnt bother me kingoffrance: its totally different if e.g. you are selling stuff commercially, then i would say stay far away from such things kingoffrance: for many reasons, not just "fan acceptance" myname: trademark issues kingoffrance: thats the beauty of my nick; so long as there is no competition i am scot free kingoffrance: you dont want to mess with people who have not abandoned their throne kingoffrance: the other beauty is i will probably never go to france, so in exile i am safer zzo38: Of course if I make up the card, is unofficial. It is not meant to be used in official tournament. Many other people also make up such unofficial card zzo38: (These unofficial cards is not meant to be sold commercially either) myname: I never got the populatory of mtg tbh. I know it has been around for quite a while, but imo there are better competitive card games myname: yu-gi-oh ruined some of those, though zzo38: Sometimes you might want to construct puzzles out of nonstandard cards (like how sometimes they construct puzzles out of nonstandard chess pieces), so in such cases you might use names such as #1 and #2 and so on, and then list the text of the nonstandard cards with the puzzle. kspalaiologos: how were the brainfuck constants on wiki generatede? int-e: I imagine brute force? enumerate all programs up to a certain length and run them to conclusion (up to some number of steps), then check the tape for numbers? rain1: recommend any new nonfiction books? kmc: on what subject zzo38: I have question relating to quantum entanglement. Will the "backward in time" model work? If two experimenters far away from each other make the same measurement and have the opposite answer, then they are, from the point of view from each other, backward in time to the source and then forward to the other one, in the other direction. rain1: any subjects kmc rain1: zzo38: is this a way of asking does quantum information travel faster than light? i think the answer is no rain1: you can produce correlated results but not send any information zzo38: No it is not a way of asking about information. I know it does not send any information. kspalaiologos: what did the person nicknamed A do kspalaiologos: it seems like there was huge mess at the wiki kspalaiologos: and someone protected his user page from creating for unknown to me reason zzo38: I think I read somewhere that if the German word "Deutsch" were made English, then it would be "Theech". Do you know if it is or not? kspalaiologos: if someone asked me, I'd reply it's reasonable zzo38: Do you know German so well? Then maybe you might know better than I would know kspalaiologos: I used to learn it for couple of years kspalaiologos: not an expert though zzo38: O, OK. arseniiv: what did the person nicknamed A do => a mess. Though what specifically in the last several days, I hadn’t watched kspalaiologos: that's kinda sad kspalaiologos: to see the wiki being vandalized arseniiv: there are some people which unfortunately type faster than they should have been considering doing :( arseniiv: technically A usually edited mainly pages created by them, and pages like language property lists. If it had progressed beyond that, well, shame arseniiv: s/them/themselves* kspalaiologos: Is there any eaisly portable compiler for any language? kspalaiologos: Tried currently 9cc,8cc,sdcc,cc65 kspalaiologos: And smallerc arseniiv: my favorite question I hadn’t asked anybody, ever: how do you solve the expression problem? arseniiv: (in a statically-typed language) imode: expression problem? arseniiv: imode: there are several types of data, several types of operations applicable to all of them, and you need to be able to add both data and operations without modifying the existing code (e. g. it’s partially third-party or you don’t want to break API or something). Also it’s desirable that when a (data, operation) case isn’t defined for some existing data and operation, the compiler would complain even when that case isn’t arseniiv: sed anywhere. Though the last part is my invention I think. Also I’ll find a link about this thing arseniiv: https://koerbitz.me/posts/Solving-the-Expression-Problem-in-Haskell-and-Java.html maybe here is a bearable description with some additional context too arseniiv: okay I go to sleep arseniiv: btw about that in Haskell, there are finally tagless interpreters but they aren’t very cool when you need to inspect the data structure?.. I hadn’t read much on that yet, though I’m partially interested in the topic. Maybe I would make a language and wish there were no e. p. arseniiv: also, extensible records and ext. variants are nice for that part imode: I have 3 days worth of free time and I'm doing nothing with it. oerjan: what did the person nicknamed A do <-- most recently, deciding that e wanted to get higher on the "most linked" special page rankings and also in total number of pages created, and deciding to do so by creating a lot of even more trivial language pages than e previously had oerjan: in general, a severe lack of self control and judgement. oerjan: but not quite enough to get permanently banned. yet. oerjan: (the user page ban was the result of one eir previous noisy experiments) oerjan: *one of zzo38: Is there a command in Firefox to save a partially (or fully) filled form? zzo38: A variant of the Magic: the Gathering "Commander" format would be to allow your commander to be any card (regardless of type and supertype), rather than only a legendary creature. zzo38: Another variant would allow cards with the wrong color identity but to have some sort of restriction and/or penalty involved for such thing. zzo38: I remember mentioned on here before about a prism that is red or blue when activated, and communicates with an alternative universe with a different colour. I think you mentioned to try to use monads to make it up in the computer? zzo38: This is what I have: data Prism :: * -> * -> *; data Channel :: * -> * -> *; instance Eq (Channel a b); instance Monad (Prism a); runPrism :: forall a. (forall b. Prism b a) -> a; new :: forall a b. Prism b (Bool, Channel b a); send :: forall a b. a -> Channel b a -> Prism b (); receive :: forall a b. Channel b a -> Prism b a; I don't know what the definitions would be though, or even if those types will work zzo38: Do you know? int-e: https://fahrplan.events.ccc.de/congress/2019/Fahrplan/events/10703.html is promising :) FireFly: oh nice, an ultimate talk int-e: FireFly: well I liked it int-e: (We can argue about the title. I picked it for contents. https://fahrplan.events.ccc.de/congress/2019/Fahrplan/events/10703.html ) int-e: oops(I should've linked to that int-e: I meant to link to the video: https://media.ccc.de/v/36c3-10703-the_ultimate_acorn_archimedes_talk FireFly: ah right FireFly: I saw the Intel ME talk yesterday, haven't really looked closely at the others yet FireFly: I'll catch the recordings later int-e: hmm I guess the Plundervolt talk would be more interesting if I had not read the paper. int-e: But the (cleaned up) uploads are lagging behind the schedule. I'll check again later. int-e: (That's *not* a complaint. The CCC media team is amazing.) FireFly: hey are kspalaiologos: imode, I've got something if you want to somehow spend these three days imode: kspalaiologos: what would that be kspalaiologos: imode, well, I'm looking for someone to help me with finding a reasonable compiler to tweak it so it targets my asm2bf kspalaiologos: I don't feel like writing my own language, but I could take on creating yet another C compiler kspalaiologos: @tell imode please check the logs if you feel like it lambdabot: Consider it noted. kspalaiologos: anyone willing to read the article, give some feedback on the assembler kspalaiologos: maybe suggest somethying int-e: zzo38: Oh, this reminds me of you: https://media.ccc.de/v/36c3-10701-select_code_execution_from_using_sqlite kspalaiologos: I believe asm2bf article may be the longest one currently on wiki fizzie: Hmm, the wiki XML dump has started failing with a "LocalFileLockError". :/ fizzie: On an apparently-random directory (archive/d/d9/) which looks just like all the other directories as far as permissions are concerned. kspalaiologos: https://esolangs.org/wiki/Funciton/Brainfuckiton kspalaiologos: it's amazing fizzie: Bah. This error message is just useless. fizzie: It does seem to fail for the third revision of https://esolangs.org/wiki/File:Plus1b.PNG which doesn't have a thumbnail either. I think it's missing the file name (for whatever reason), and consequently attempting to lock the directory instead of a file in it. fizzie: There is a file in the directory, it's just somehow lost track of it I guess. fizzie: Well, some careful direct database manipulation seems to have resolved it. Couldn't even delete it from the web interface; because the archive name was missing, the delete link was pointing to the "delete all versions" action. fizzie: What I was *going* to say before all that, in terms of lines of raw wikitext, the Asm2bf article is #19 in the main namespace (but it's not a size competition). It might be the longest in terms of content; most of the longer ones are just long lists of implementations and/or examples. fizzie: (Top-20 at http://ix.io/25Im .) kspalaiologos: fizzie, yeah, looked at them kspalaiologos: there is a special page listing the articles kspalaiologos: any ideas on example programs for asm2bf? zzo38: int-e: What I saw so far, it is clearly enough, and is even intended behaviour. But I suppose that is why they added SQLITE_DBCONFIG_ENABLE_VIEW, since some programs will not want that. zzo38: (The bugs with shadow tables clearly is not intended, but I think they start to correct that and have also added a defensive mode to mitigate that a bit.) zzo38: What they mention now seems to be FTS3 anyways; there are newer versions of FTS, with a better way to pass pointers to SQL codes. (The pointers can only come from a C code, and if passed to any SQL function or INSERT statement or whatever that is not expecting it, you will just get null instead and will not be able to use the pointer.) zzo38: Some stuff in that video is just badly written. (Did they not proof read it?) zzo38: Their exploit depends on FTS3 being available, so won't work without that. kspalaiologos: I'm planning to add bitops to asm2bf kspalaiologos: Someone's got a decent Brainfuck implementation or I have to roll my own? imode: if you wanna do it naively, shifting, ANDing and such should be doable in terms of multiplication division by 2. imode: ANDing though I'm not really sure.. kspalaiologos: imode, already got shifts kspalaiologos: I need just and, or, xor fizzie: "You will need to configure a better logger to collect the extra fields, for example Monolog." fizzie: `thanks MediaWiki HackEso: Thanks, MediaWiki. ThediaWiki. fizzie: Looks like it's just broken. The response is successful (and looks to have all the content it needs), but has a 'code' of 0 (instead of the expected 200), so is treated as an error. fizzie: ...because it runs curl and tries to do a regex match on /^(HTTP\/1\.[01]) (\d{3}) (.*)/ to parse the protocol, code, and reason, and the response from this particular server is "HTTP/2 200". No, it can't seriously be that stupid... fizzie: https://github.com/wikimedia/mediawiki/commit/b05b69d -- yes, it is that stupid. fizzie: At least they've fixed it... 27 days ago, in a version I haven't installed. fizzie: oerjan: zzo38: I've provisionally installed the Math extension, and it seems to work at least a little bit. No guarantees it will always continue to work, if MediaWiki makes it too hard to keep working. oerjan: and there's a scene change, i guess we'll have to wait to see if cindy's plan is a gooey one oerjan: sorlie should have a talk with the freefall police chief imode: is there any insane mechanics to sed other than find/replace. oerjan: imode: i think the hold space stuff can get pretty hairy? oerjan: anything where you try to do things across lines requires that imode: interesting. I don't know how hold space works. imode: time to learn. kingoffrance: there used to be sourceforge page something or other with a bunch of sed scripts kingoffrance: i dont know if they are "quality" but only time ive seen a collection of them assembled in one spot imode: I have to wonder if a tool/"language" like `sed` has been adopted as an actual practical, general purpose programming language. it isn't hard to build control flow in it. kingoffrance: well i think it was like to solve/sort the towers of discs thing i forget what its called; i.e. not necessarily useful, but to prove it can be done in pure sed kingoffrance: little puzzles like that mostly oerjan: `? hanoi HackEso: hanoi? ¯\(°​_o)/¯ kingoffrance: i dont really have a cs background so my closest frame of reference is i just imagine: https://cuphead.fandom.com/wiki/Talk:Chips_Bettigan/@comment-34432156-20180122112550 "In Japan the toy is called 'Daruma Otoshi'" imode: the puzzles are nice, but I can't shake that there might be some actual practical elements of working with a parallel rule processing engine. imode: (or parallelizable, anyway...) kingoffrance: i learned something googling that: "This traditional Japanese game requires a good eye and fast reflexes. The purpose of the game is to knock the center pieces out with the hammer without causing the doll on top to fall over" kingoffrance: took me a while to find a screenshot :/ i didnt know that was based on a real thing kingoffrance: that seems a lot like the table cloth thing in movies where they try to yank it out without breaking/moving plates kingoffrance: coding-wise, it seems to be a "refactoring/maintenance" metaphor kingoffrance: and better than zuckerburg's (IIRC) "trying to change a tire on a moving car" kingoffrance: lotmn is almost nethack-esque in that you can throw coins/money at enemies kingoffrance: if you need a long-range projectile (it will cost you of course) kingoffrance: i guess nethack you can too imode: there was a time when I actually had plans for a practical string rewriting language. it was based on the idea of communicating components: segments of the string were mapped to things like queues, stacks, arrays, program memory, etc. they communicated by sending signals back and forth through the string. imode: guess it was less of a language and more of an implementation layer. almost like an FPGA. kingoffrance: i suppose roguelikes "anything is possible" and bruce less/ninja "anything can be a weapon" such a similarity is not surprising kingoffrance: s/less/lee/ kingoffrance: in my mind nethack i suppose is a "typeless items" game, ideally you can "cast" many things and they will do *something* at least, depending on how they are used kingoffrance: (or at least, items should allow more than one use/"type") oerjan: ais523 has said similar things on reddit oerjan: "For example, the reason NetHack's UI is so clunky is that it has to allow players to attempt to do anything they might think of; most of the possible combinations won't be useful, but we have to try to make the game react sensibly to anything you might think of, whereas Pathos is typically happy to prevent you trying something that couldn't possibly help." oerjan: last i found oerjan: (comparing with a different game) kingoffrance: that makes sense kingoffrance: "we" sounds like ais523 is/was a dev or otherwise involved oerjan: he was developing the nethack 4 variant, and then got induced into the devteam for original nethack when they expanded a few years ago oerjan: *inducted kingoffrance: imode, that sounds like it would keep "state" contained in a human-accessible form all the time, so long as they are kept relatively "small" you have an easy representation of "the world [of the program]" you can pass around, copy, change, spin up a new "instance" or "clone", "snapshots", "rewind" etc. kingoffrance: if i am understanding correctly kingoffrance: almost like everything is kept "serialized" all the time imode: kingoffrance: pretty much, yeah. imode: that's a really nice side effect of it. it's literally just a giant string. imode: it's basically "what if we made Thue not shit". int-e: ...then we would end up with a terrible case of congestion... int-e: https://media.ccc.de/v/36c3-10601-how_not_to_build_autonomous_robots is good Gollypot: fungot: have fun with what you got int-e: What a pun. fizzie: Hey, where's fungot? fizzie: Oh, right, we had that power outage. fizzie: fungot: Sorry about that. fungot: fizzie: the acute observer may have noticed that at times a new comer i'd remove it. i just tried kspalaiologos: https://esolangs.org/wiki/User kspalaiologos: not like I'm complaining kspalaiologos: but it's not the wiki I did nothing for int-e: Some wiki spring cleaning would be nice. int-e: Pages like that are still preferable to spam. kspalaiologos: I finished some brand new tweaks to asm2bf imode: has anybody ever written a roguelike in `sed`, I wonder? kspalaiologos: I could write one kspalaiologos: good idea imode: better write one in thue. kspalaiologos: can you point me to another codebase though, because I can't come up with creative idea kspalaiologos: or storyline kspalaiologos: Thue doesn't seem like a possible task myname: idea: roguelike in befunge where you can manipulate the code imode: it's entirely possible. imode: you just need to build your way out of the tarpit. myname: it would be hard to make this in a way that's not completely broken, though myname: more like a baba is you, but with real code myname: that reminds me, i shuld continue playing rogue bit imode: kspalaiologos: https://git.imode.tech/?p=python/prime;a=blob;f=examples/picture.t;hb=HEAD imode: an example of 2D movement. kspalaiologos: I could write one in asm2bf kspalaiologos: it would be trivial kspalaiologos: and then write b2all backend for sed kspalaiologos: possibly a more optimizing one towards the asm2bf patterns kspalaiologos: or use newest nav mechanic imode: been exploring string rewriting as a backend for Mode. don't know why I'm attracted to it. imode: something about rule-based programming is attractive. very unlike structured programming. imode: it's hard to know where to start, though. kspalaiologos: imode: have you got some time on your hands? kspalaiologos: I'm planning to write a lisp compiler targeting my certain platform kspalaiologos: If you'd like to help me just a bit I would be thankful imode: what can I help with. kspalaiologos: Well I can get it up to the point of generating AST kspalaiologos: And some abstract wrappers over assembly kspalaiologos: So optimalization and IR generation is left arseniiv: passing by, wish you luck imode: hahaha, hell yeah. just wrote something that compares 2 binary strings. imode: https://hatebin.com/gemgrlrnry imode: I am honestly surprised I was able to write that in one shot. kspalaiologos: Maybe barely someone is interested imode: I swear this could be reduced to lesser states. imode: you trade runtime though. imode: kspalaiologos: sorry, not interested in doing codegen for your project. imode: too complicated for my tastes. kspalaiologos: It's fine kspalaiologos: I think I may be capable of doing it (like the most things) alone. imode: my philosophy about projects like this are that they're for an individual. imode: just that you'd know better about where you want to take your code than I would. kspalaiologos: I recently helped in developing a programming language, coincidentally a lisp like kspalaiologos: I noticed the same thing, but kspalaiologos: it really depends on what are you trying to do in the project kspalaiologos: The reason I'm looking for help is because I don't feel confident in IR generation and optimizations on it imode: so don't optimize. what IR are you targeting? LLVM? imode: or is it your own IR that you're designing. kspalaiologos: I want to target asm2bf kspalaiologos: @tell imode I want to target asm2bf, but I need some form of IR to switch the targets back and forth lambdabot: Consider it noted. kspalaiologos: imode: I want to target asm2bf, but I need some form of IR to switch the targets back and forth oerjan: i wonder if sorlie will be pointing out that they cannot be so sure that what iafa did was _wrong_ oerjan: (Schlock Mercenary) imode: kspalaiologos: not that familiar with asm2bf but if it's an assembly language built on top of BF, just do the stupidest possible thing first and worry about optimizations later. imode: @messages-loud lambdabot: kspalaiologos said 4h 52m 37s ago: I want to target asm2bf, but I need some form of IR to switch the targets back and forth oerjan: dimo is easy to please int-e: Did you know that the following problem is NP-complete: Given a candidate permutation network (like a sorting network, but rather than sorting, each building block is a conditional swap), and a target permutation, can the network produce that permutation? int-e: And I'm also lagging behind on comics. How did that happen... int-e: (I know how. A) I found some other things to tackle, including the above. B) I've been watching 36C3 videos.) FireFly: int-e: have you pondered attending congress? :p int-e: FireFly: Pondered, yes. But I'm too lazy. FireFly: mm... I wouldn't say to come for the talks, because you can watch the recordings (and everyone does that)... but the atmosphere and all is amazing in general FireFly: and conversations with people and stuff FireFly: but, fair :) int-e: I've been to 28C3 and 27C3. It was exhilarating, but I didn't talk to people so it was also a bit of a waste. int-e: I did get an Arduino soldered and running at 28C3 though. So that's something. FireFly: int-e: fair \oren\: the suffix -hotic refers to the sound some letter makes in a language \oren\: So one can say that the Spanish chotic is /θ/ in mainland spain but /s/ in much of latin america \oren\: while english chotics include /k/, /s/, /x/ and /tʃ/ Taneb: chotic being the sound a c makes in the given language? \oren\: by analogy with rhotic Taneb: "Castille" sounds a bit odd if you pronounce it with a θ Taneb: I thought θ was Z b_jonas: welcome back b_jonas: how was your christmas, fungot? fungot: b_jonas: especially if you wait to be taught to talk anymore kspalaiologos: three people starred my asm2bf repo kspalaiologos: where is my champagne int-e: . o O ( I expect one is a bot, one is genuinely interested, and one is a person everybody despises, like A. ) fizzie: Three people have starred fungot too; at least one's an #esoteric-er, no idea what's up with the other two. fungot: fizzie: retrieving body 61 of 61 from fnord, his race, his language, his homeland and origin, his faith or his religious or political opinions. fizzie: fungot: Those sort of details don't really show up in GitHub profiles. fungot: fizzie: some fnord use source port 0 are true kspalaiologos: I've starred it fizzie: Don't expect a lot of updates HackEso: 1279) (btw, "q = 1-p" should be the standard definition of q, IMO) HackEso: ​il//An il is a cohelix of pper wire. HackEso: A w is everything a cow isn't. HackEso: A w is everything a cow isn't. kspalaiologos: `? cow HackEso: A cow is an animal best served at minus zero degrees Celsius. kspalaiologos: Amazing. HackEso: ​boring//Boring means of little interest, unless it is done to pigs. b_jonas: @run fmap (\x -> shift (x * (x + 1)) (-1)) [0 .. 34] lambdabot: [0,1,3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153,171,190,210,231,253,2... b_jonas: @run fmap (\x -> shiftR (x * (x + 1)) 1) [0 .. 34] lambdabot: [0,1,3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153,171,190,210,231,253,2... b_jonas: =echo WC_Ub6mTc3s1 b_jonas: fungot, how many hearts do you need to obtain the Master Sword? fungot: b_jonas: i don't know how debian handles it, sorry :)) zzo38: I played GURPS game yesterday (twice). I connected a Raspberry Pi computer to a television set at a hotel, but when it is connected, the remote control doesn't work. Do you know why? Is it related to HDMI-CEC somehow? b_jonas: did the remote control work while the computer isn't connected to the television? was there a clear line of sight between the led of the remote control and the IR sensor on the television? zzo38: Yes, If the computer is not connected, the remote control worked, and there is a clear line of sight either way (even, there is a light on the TV set that flashed so clearly the signal was received, but failed to do anything about it). There is also one switch on the TV set itself, but it doesn't work, regardless of what is connected on the back. b_jonas: fungot, have you ever tried to encode a hidden message in your replies, like via steganography or acrosticon? fungot: b_jonas: ( box-set! a-box " hi") fizzie: I think that reply had the hidden message "hi" cleverly concealed within it. zzo38: We were trying to go into the wizard's tower, but there was no friction on the roof so we keep falling down, and the windows have some kind of magical force field. But we were able to break the force field with arrows, and then go in and not only the magic orb we needed, but there are also books in there, which was helpful since we can use that information to disable most of the clay golems even though we are not near them. zzo38: Here is I wrote it in the computer: http://zzo38computer.org/gurpsgame/1.ui/wiki?name=Session+26 Do you like this? zzo38: Even though people have said that targets in a cost in Magic: the Gathering will not work, and it is certainly not designed to do this, I think it does work (if it is a spell or a activated ability other than a mana ability); for example if it says "{T}, Destroy target creature: You gain 2 life." then you won't gain 2 life if the target creature is successfully destroyed. Since the targets are chosen before the cost is paid, it might work. zzo38: If a map or dictionary contains a false entry for a copyright trap, then what will happen if the other people who read it then make it true? Such as, if there is a nonexistent street, build that street; if a dictionary contains a made up word, start using that word a lot. zzo38: Wiktionary also lists the word "malamorous", which doesn't mention anything about a copyright trap, but says that the word is not used anywhere, only being listed in a book titled "1000 Words You Should Use More Often". kingoffrance: there's an obi wan street; i suppose they like advertising kingoffrance: i dunno if they got "permission" first or not zzo38: Maybe, but that isn't what I meant. I meant when they put false streets in a map to detect those who make copies of the map and violate their copyright. If the street actually exists, then the map will be correct that such excuse might not count. zzo38: (Or in the case of a dictionary, the case for including it in other dictionaries if it is commonly in use may be even stronger, so it is a real fact and they might not be able to sue them for copyright violation if the word is in use since a fact in a dictionary is presumably uncopyrightable.) kingoffrance: ah, like a disguised "watermark" kingoffrance: i was wondering what you meant by "coyright trap" yeah i have heard of such kingoffrance: some mayor sees it, decides they will call somewhere "new malamorous city" not knowing the original doesn't actually exist :) kingoffrance: s/sees it/sees it in an atlas/ zzo38: Yes, I suppose something like that can happen, although that isn't what I meant either, unless the new city is built in the same place where the original presumably (but actually isn't) was. kingoffrance: surely you will invent a word for such an occasion kingoffrance: surely int-e: Shirley? kingoffrance: that would do b_jonas: zzo38: then the word will no longer work as a copyright trap after that kingoffrance: malamorous if it means what i suppose, sounds to me like glamorous i.e. deception; although modern connotations is perhaps reversed, i.e. shining star to follow rather than "blinding light gypsy trickery" kingoffrance: i was thinking "mal" + "amorous" but glamorous actually makes sense to me, if that is what it is getting at b_jonas: zzo38: there was a different case for copyright trap that I was considering. some bus companies here publish their official bus timetable in a format that is hard to use, kingoffrance: i would be curious who/how they made up "malamorous" b_jonas: so there's a market for more usable digital timetables on the internet. in such a timetable, you can put a copyright trap by nudging the stop time of a single bus in a small station forward by a minute. that's easy to detect when someone copies your presentation, and won't affect users much. kingoffrance: (i.e. even if malamorous was a bogus word, how did they come up with its meaning, etc.) kingoffrance: cuz they had to somewhat make it sound real, unless it was just in a list without any def. zzo38: I don't know if maybe the author of the book just made it up because they hoped someone might use it. b_jonas: in the case of a database where the individual items are under public domain but your compilation is protected by database right (a dictionary is a stronger example than that, you could consider artefacts in a museum, or works of art of a famous musician, or books in a library), another way to add a copyright trap is to omit the entry for an item that definitely exists zzo38: Yes; and if they do that then you can complain to them about an item is missing. kingoffrance: thats good, because you just add it and remove something else kingoffrance: i like that idea b_jonas kingoffrance: harder to do now with computers of course zzo38: If they do just add it and remove something else, and then repeat the complaint about the new missing item, and so on, then eventually they will have a bad reputation, I think. b_jonas: suppose I have a photo that I want to publish on a website in jpeg format. the website is a proper one that lets me publish the jpeg file byte to byte without changes, not eg. facebook or twitter. before publishing, I want to put a metadata field into the file that contains the website url where the published image and its description will be found when I publish, so that if someone downloads the file, b_jonas: they have a backlink. what metadata field should I use for that? I was trying to look at descriptions of IPTC but they're so arcane I couldn't find the right field. I don't insist on IPTC in particular, but I do insist on JPEG as the container. b_jonas: this is for when I can predict a direct url on the website, such as on Mediawiki wikis, as opposed to websites that only allow urls with a random id (or a crypto checksum) in them zzo38: Unfortunately I don't know Taneb: Does anyone ever use those suggested repo names that GitHub gives you Taneb: I don't know if I count bots in "anyone" int-e: I didn't even know github did that. Taneb: "Great repository names are short and memorable. Need inspiration? How about psychic-octo-robot?" int-e: I don't remember. int-e: When I create a repo on github I always have a name in mind already. int-e: So as long as it's not obnoxious about making suggestions I will not notice that they're even there. kingoffrance: sounds like they are trying to be "cute" kingoffrance: but devs hopefully it will taste like disgust/trying too hard/etc. :/ kingoffrance: sounds like ms is mocking foss kingoffrance: i dunno, maybe they think that is what it takes :/ kingoffrance: and totally not ironic, hard to say sometimes kingoffrance: if they used hyphens instead of underscores, that makes compatibility with dns/hostnames slightly better, ill give them that wib_jonas: argh! someone broke a foot of my office keyboard int-e: . o O ( Feet of Clay ) Taneb: kingoffrance: these predate MS buying GitHub by a long time kingoffrance: thats worse Taneb :/ kingoffrance: but i hope it was meant to be "ironic" kingoffrance: it could be a "just code, dont worry about name, you can change later" thing, meant to inspire in that manner kingoffrance: that is less troubling to me kingoffrance: but names keep things focussed IMO, so are important too Taneb: kingoffrance: on another note, for important reasons I will leave unexplained, I will ask, do you have hair? int-e: . o O ( Is the h silent? ) Taneb: . o O ( Would you like it to be? That power is yours, int-e ) int-e: Ugh, but I don't want all that responsibility. int-e: I suppose I'd rather run out of hair than air. int-e: But I'm not french. wib_jonas: the "h" in what? in "github"? int-e: wib_jonas: No, in "hair". int-e: 'oo cares about git'ub? Taneb: GitHub: it's like PornHub but with gits instead of porn wib_jonas: https://www.xkcd.com/624/ ? int-e: Has xkcd ever done an xkcd on how there's an xkcd on everything, except on xkcd? wib_jonas: I don't think so. There's https://www.xkcd.com/1000/ on how there are a lot of xkcd comics, and https://www.xkcd.com/442/ and https://www.xkcd.com/207/ are other strips about xkcd, but I don't think either of those matches what you ask wib_jonas: fungot, what is a "gravity cell", and is it a sci-fi thing? fungot: wib_jonas: tc as fnord describe it is " the incredible slowness". it is kind of mind bending so it's always square just at the scheme workshop. int-e: burn, scheme, burn kingoffrance: that sounds like a squidbillies reference Taneb kingoffrance: emperor has hair and no clothes Taneb: kingoffrance: it was not directly a squidbillies reference, as I don't know what squidbillies is kingoffrance: well i missed your ref then kingoffrance: historical accuracy? kingoffrance: not my thing Taneb: As I said, my reasons will remain unexplained Taneb: Can you answer the question? wib_jonas: I think it's one of those robot test captcha things like https://www.xkcd.com/233/ , because mammals have hairs but robots don't. kingoffrance: i can answer it yes, but "where" and "whose" seem pertinent kingoffrance: i dont collect hair or anything :/ im not a freak kingoffrance: captchas will fail because they assume people cant be programmed kingoffrance: or cant program themself even kingoffrance: its a question "which programming do people have" seems more pertinent IMO kingoffrance: and "where did they get it" and "is that the programming they want" :/ kingoffrance: and "are they contagious" wib_jonas: UTC New Year is an hour after New Year. We should celebrate it and watch https://esolangs.org/logs/ change int-e: `? password HackEso: The password of the month is naughty. wib_jonas: oh yeah, you'll change that too int-e: I have priorities ;) int-e: (Though honestly... I expect to be in bed.) wib_jonas: will you change the password to "choking insurgent dogsled penetrate" at midnight? int-e: most assuredly not wib_jonas: fungot, what will the password for next month be? fungot: wib_jonas: only if lambda is a macro int-e: wib_jonas: it may be better if somebody else picks the POTM, honestly. I'll just end up with something like "The password of the month is resolute." wib_jonas: someone else other than fungot? fungot: wib_jonas: like number42 said. and still have it wib_jonas: Australia east coast is already in the new year bunnyocto: oh my gawd. bunnyocto: blsq has a switchcase now :D bunnyocto: http://codepad.org/QS4CYmiu bunnyocto: Imagine the possibilities. kspalaiologos: what's blsq kspalaiologos: no wiki entry bout it kspalaiologos: `? blsq HackEso: See: Burlesque kspalaiologos: `? burlesque HackEso: Burlesque is only the sexiest language on Earth. (See: http://mroman.ch/burlesque) kspalaiologos: not close enough kspalaiologos: verdict: no idea what is blsq bunnyocto: blsq ) %foo={{{{1 2 3} {9?*}}{{1 2 4}{8?*}}}/_} 1 2 4 %foo! 1 2 3 %foo!Cl{1 2 32 1 2 27} bunnyocto: blsq ) %foo={{{{1 2 3} {9?*}}{{1 2 4}{8?*}}}/_} 1 2 4 %foo! 1 2 3 %foo!Cl{1 2 32 1 2 27} bunnyocto: hm. no newlines here bunnyocto: well... bunnyocto: {1 2 32 1 2 27} bunnyocto: would be the output kspalaiologos: is there an online compiler kspalaiologos: or interpreter bunnyocto: there is kspalaiologos: or any compiler bunnyocto: there's also an IRC bot. kspalaiologos: which one is it bunnyocto: ^- this guy bunnyocto: !blsq "Hi there"Q blsqbot: | Hi there kspalaiologos: what about the compiler bunnyocto: no compiler. kspalaiologos: source code? kspalaiologos: for the bot or interpreter? kspalaiologos: or maybe an article online, have you got any of these? bunnyocto: https://github.com/FMNSSun/Burlesque bunnyocto: https://mroman.ch/burlesque kspalaiologos: so it's this one kspalaiologos: I coiuldn't tell were they the same language kspalaiologos: starred wib_jonas: good point bunnyocto: !blsq 4ror@4.+FL++ wib_jonas: kspalaiologos: it's a golf language built in Haskell with a large standard library bunnyocto: it's a piece of shit built in haskell wib_jonas: and a documentation that is somewhat vague bunnyocto: mostly for homework stuff kspalaiologos: umm, cool bunnyocto: like it can do chisquaretests and shit wib_jonas: its syntax is made of mostly two-character builtins bunnyocto: basically the stuff that I needed to do during my studies 8 years ago or something wib_jonas: but it has a few one-character keywords too kspalaiologos: have a star kspalaiologos: are there some more examples than the wiki page? wib_jonas: kspalaiologos: there are examples in the channel logs wib_jonas: years ago kspalaiologos: don't feel like scrolling them kspalaiologos: that's nice anyways bunnyocto: No but there's a link to the golf site which has more examples. kspalaiologos: minimalistic website kspalaiologos: love it kspalaiologos: nearly like mine bunnyocto: kspalaiologos: http://golf.shinh.org/l.rb?blsq kspalaiologos: a, this one bunnyocto: also you're talking to the madlad inventing it so any questions you have I can answer :D bunnyocto: there's not a single person on the planet who knows more about blsq than me :D bunnyocto: maybe clock kspalaiologos: that's exactly like my languages kspalaiologos: or tools bunnyocto: it also has support for concurrency/multithreading kspalaiologos: no one knows them really xD bunnyocto: and it has MySQL support as well kspalaiologos: why would you add mysql support to an esoteric language bunnyocto: so you can plug it up to your mysql database and do your data analysis in BLSQ like a manic pro bunnyocto: He asks me why? kspalaiologos: . O ( bruh, this json formatter in brainfuck is haunting me ) bunnyocto: Because I can. bunnyocto: And because I'm mad. bunnyocto: I spent years in mental institutions bunnyocto: muahahaha kspalaiologos: thank you kspalaiologos: very cool bunnyocto: true story :D bunnyocto: I can also tell you lot of stuff about psychiatry bunnyocto: and about splenology bunnyocto: I'm an expert on spleens. kspalaiologos: that might be the most random thing I heard by the end of this decade bunnyocto: yeah well bunnyocto: lots of free time in the asylum so bunnyocto: either you do silly things bunnyocto: or you memorize medical books kspalaiologos: what about job? bunnyocto: which some might consider silly bunnyocto: can't have a job in an asylum now can you kspalaiologos: you're unemployed? bunnyocto: pretty much bunnyocto: also used to be homeless for a while bunnyocto: i was living on park benches for a while wib_jonas: bunnyocto: wait, so you're the same esolanger as the one who created blsq, but under a different nick? wib_jonas: MySQL support? bunnyocto: blsq has mysql support yes bunnyocto: but not the ircbot version bunnyocto: that one has all I/O commands disabled of course. wib_jonas: `q harp HackEso: 1280) hmm, I just remembered that I was formally trained to tune harps wib_jonas: `q splenology HackEso: No output. bunnyocto: !blsq fancy def double: \2 \?* end end 8 %double! kspalaiologos: how can one kspalaiologos: put a tar.gz on hack eso filesystem kspalaiologos: I don't seem to remember HackEso: Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch [] " downloads files. Files saved to $HACKENV are persistent, and $HACKENV/bin is in $PATH. $HACKENV is a mercurial repository, "`revert " can be used to revert, https://hack.esolangs.org/repo/ to browse. $PWD ($HACKENV/tmp) is persistent but unversioned, /tmp is ephemeral. kspalaiologos: I didn't ask anything HackEso: asmbf-1.1.1 \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ paste \ program \ spline \ spout \ test \ test.sh wib_jonas: `? fetch HackEso: ​`fetch [] downloads files, and is the only web access currently available in HackEgo. It is a special builtin that cannot be called from other commands. See also `edit. bunnyocto: !blsq fancy def double: 2 \?* end def main: double(8) end end %main! kspalaiologos: `fetch asmbf-1.2.6 https://github.com/kspalaiologos/asmbf/archive/master.zip HackEso: Cannot write to ‘/hackenv/tmp/asmbf-1.2.6’ (File too large). kspalaiologos: whoa what bunnyocto: that basically defines a function double and main and invokes double(8) kspalaiologos: the zip file is 56 kb big kspalaiologos: `fetch asmbf-1.2.6.zip https://github.com/kspalaiologos/asmbf/archive/master.zip HackEso: Cannot write to ‘/hackenv/tmp/asmbf-1.2.6.zip’ (File too large). kspalaiologos: `fetch /hackenv/asmbf-1.2.6.zip https://github.com/kspalaiologos/asmbf/archive/master.zip HackEso: Cannot write to ‘/hackenv/asmbf-1.2.6.zip’ (File too large). wib_jonas: funnyocto: (1) that doesn't look like blsq syntax, because blsq keywords are two characters long, those are longer; (2) you can't call a function "double", that's a keyword. HackEso: Filesystem 1K-blocks Used Available Use% Mounted on \ none 24733776 14622324 8841948 63% /bin \ none 1026028 0 1026028 0% /dev \ none 24733776 14622324 8841948 63% /lib \ tmpfs 126192 0 126192 0% /tmp \ none 24733776 14622324 8841948 63% /usr \ none 24733776 14622324 8841948 63% /sbin \ none 24733776 14622324 8841948 63 bunnyocto: http://codepad.org/2Ui5N9Ve wib_jonas bunnyocto: that's perfectly valid blsq code wib_jonas: `python3 -cimport numpy; print(numpy.double([1])) kspalaiologos: whats up with it HackEso: 52 ./asmbf-1.1.1/doc \ 28 ./asmbf-1.1.1/examples \ 12 ./asmbf-1.1.1/test \ 8 ./asmbf-1.1.1/.github/workflows \ 12 ./asmbf-1.1.1/.github \ 84 ./asmbf-1.1.1/bin \ 548 ./asmbf-1.1.1 \ 1012 ./paste \ 1648 . bunnyocto: !blsq fancy def double: \begin lisp (?* 2) end lisp end def main: \begin lisp (double 8) end lisp end end %main! kspalaiologos: `du .. HackEso: 4040 ../lib/p7zip-16.02 \ 10732 ../lib \ 24 ../interps/dimensifuck \ 60 ../interps/adjust \ 72 ../interps/egobf/src/.deps \ 40 ../interps/egobf/src/c2m/tests \ 16 ../interps/egobf/src/c2m/i386 \ 60 ../interps/egobf/src/c2m \ 824 ../interps/egobf/src \ 48 ../interps/egobf/scripts \ 1248 ../interps/egobf \ 44 ../interps/bf_txtgen \ 12 ../interps/whirl \ 252 ../interps/clc-intercal/CLC-INTERCAL-Docs-1.-94.-2/doc/html \ 96 ../interps/clc-intercal bunnyocto: http://codepad.org/gDpNNn3P <- also perfectly valid blsq code kspalaiologos: `fetch asmbf-1.2.6.zip http://github.com/kspalaiologos/asmbf/archive/master.zip HackEso: Cannot write to ‘/hackenv/tmp/asmbf-1.2.6.zip’ (File too large). kspalaiologos: issues with https maybe kspalaiologos: `fetch asmbf-1.2.6.tar.gz https://github.com/kspalaiologos/asmbf/archive/v1.2.7.tar.gz HackEso: Cannot write to ‘/hackenv/tmp/asmbf-1.2.6.tar.gz’ (File too large). kspalaiologos: out of ideas kspalaiologos: 40KB -> file too large kspalaiologos: `? fetch HackEso: ​`fetch [] downloads files, and is the only web access currently available in HackEgo. It is a special builtin that cannot be called from other commands. See also `edit. kspalaiologos: `fetch https://github.com/kspalaiologos/asmbf/archive/v1.2.7.tar.gz HackEso: Cannot write to ‘v1.2.7.tar.gz’ (File too large). kspalaiologos: bruh it's like kspalaiologos: unary -> binary kspalaiologos: `fetch http://example.com/index.html HackEso: 2019-12-31 16:06:33 URL:http://example.com/index.html [1256/1256] -> "index.html" [1] kspalaiologos: ` rm index.html HackEso: ​? Permission denied bunnyocto: !blsq begin lisp (sv {_+} "cnat") (sv {0!!} "fst") (fst (cnat {1 2} {3 4})) end lisp kspalaiologos: wh a t HackEso: asmbf-1.1.1 \ asmbf-1.2.6 \ asmbf-1.2.6.tar.gz \ asmbf-1.2.6.zip \ banana.txt \ bfi \ compiled_brachylog.pl \ index.html \ just \ karma \ le \ paste \ program \ spline \ spout \ test \ test.sh \ v1.2.7.tar.gz kspalaiologos: `sudo rm index.html HackEso: sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges? kspalaiologos: `rm index.html HackEso: No output. HackEso: asmbf-1.1.1 \ asmbf-1.2.6 \ asmbf-1.2.6.tar.gz \ asmbf-1.2.6.zip \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ paste \ program \ spline \ spout \ test \ test.sh \ v1.2.7.tar.gz bunnyocto: you probably don't want to know about begin asm do you? kspalaiologos: about what kspalaiologos: tell me kspalaiologos: ` fetch https://github.com/kspalaiologos/asmbf/archive/v1.2.7.tar.gz HackEso: ​? Permission denied kspalaiologos: permission deined? kspalaiologos: what's that bunnyocto: blsq 2.0 has an asm mode as well bunnyocto: in addition to the lisp and fancy modes kspalaiologos: any ideas kspalaiologos: on this bot? kspalaiologos: `fetch /tmp/what.tar.gz https://github.com/kspalaiologos/asmbf/archive/v1.2.7.tar.gz HackEso: In another world: /tmp/what.tar.gz kspalaiologos: `fetch /hackenv/tmp/what.tar.gz https://github.com/kspalaiologos/asmbf/archive/v1.2.7.tar.gz HackEso: Cannot write to ‘/hackenv/tmp/what.tar.gz’ (File too large). kspalaiologos: `ls /hackenv HackEso: asmbf-1.2.6.zip \ bin \ canary \ emoticons \ esobible \ etc \ f \ factor \ hw \ ibin \ interps \ karma \ karma.orig \ karma.rej \ le \ lib \ misle \ paste \ ply-3.8 \ quines \ quotes \ share \ src \ stuff \ tmflry \ tmp \ wisdom kspalaiologos: it's actually there HackEso: asmbf-1.1.1 \ asmbf-1.2.6 \ asmbf-1.2.6.tar.gz \ asmbf-1.2.6.zip \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ paste \ program \ spline \ spout \ test \ test.sh \ v1.2.7.tar.gz \ what.tar.gz kspalaiologos: what XD kspalaiologos: why does it show this message if it's actually there kspalaiologos: `rm /hackenv/asmbf-1.2.6.zip HackEso: asmbf-1.1.1 \ asmbf-1.2.6 \ asmbf-1.2.6.tar.gz \ asmbf-1.2.6.zip \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ paste \ program \ spline \ spout \ test \ test.sh \ v1.2.7.tar.gz \ what.tar.gz HackEso: No output. HackEso: asmbf-1.1.1 \ asmbf-1.2.6 \ asmbf-1.2.6.tar.gz \ asmbf-1.2.6.zip \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ paste \ program \ spline \ spout \ test \ test.sh \ v1.2.7.tar.gz \ what.tar.gz kspalaiologos: `tar -xzf what.tar.gz HackEso: tar (child): what.tar.gz: Cannot open: No such file or directory \ tar (child): Error is not recoverable: exiting now \ tar: Child returned status 2 \ tar: Error is not recoverable: exiting now kspalaiologos: so it doesn't really exist kspalaiologos: but ls is showing it? kspalaiologos: `tar -xzf v1.2.7.tar.gz HackEso: tar (child): v1.2.7.tar.gz: Cannot open: No such file or directory \ tar (child): Error is not recoverable: exiting now \ tar: Child returned status 2 \ tar: Error is not recoverable: exiting now kspalaiologos: I'm done kspalaiologos: `tar -xzf /hackenv/tmp/v1.2.7.tar.gz HackEso: tar (child): /hackenv/tmp/v1.2.7.tar.gz: Cannot open: No such file or directory \ tar (child): Error is not recoverable: exiting now \ tar: Child returned status 2 \ tar: Error is not recoverable: exiting now kspalaiologos: `ls /hackenv/tmp HackEso: asmbf-1.1.1 \ asmbf-1.2.6 \ asmbf-1.2.6.tar.gz \ asmbf-1.2.6.zip \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ paste \ program \ spline \ spout \ test \ test.sh \ v1.2.7.tar.gz \ what.tar.gz kspalaiologos: ls /hackenv/ kspalaiologos: `ls /hackenv/ HackEso: bin \ canary \ emoticons \ esobible \ etc \ f \ factor \ hw \ ibin \ interps \ karma \ karma.orig \ karma.rej \ le \ lib \ misle \ paste \ ply-3.8 \ quines \ quotes \ share \ src \ stuff \ tmflry \ tmp \ wisdom kspalaiologos: no idea what happens kspalaiologos: CC fizzie bunnyocto: !blsq begin asm clr r0 end asm %r0? bunnyocto: blsqbot please do quit kspalaiologos: wait a second kspalaiologos: this syntax is very close to my assembler bunnyocto: so we can all enjoy doing our mov r0, r1; inc r0; mul r2, r3; bunnyocto: forwhatever reason you'd ever need to do that in blsq but bunnyocto: I want it to be a language where people look at it and say "What the FUCKING FUCK is this FUCKING shit" bunnyocto: also I used it at work bunnyocto: to do SQL stuff bunnyocto: that's the reason it has MySQL support bunnyocto: my supervisor was shocked :D bunnyocto: iiwtiw kspalaiologos: my registers start from r1 bunnyocto: blsq even has generators bunnyocto: which is super cool bunnyocto: 1 1{?i}C~ is a generator that produces 1..infinity bunnyocto: 0 1{3?+}C~[-1+] is a generator for multiples of 3, to infinity bunnyocto: I'm seriously going to write an IRC bot in burlesque bunnyocto: it has the concept of chans and async events and shit bunnyocto: it's grown up, it's a fully fledged language. bunnyocto: well... gotta go int-e: fungot: can you do symbolic integration, twh fungot: int-e: maybe i'll search for files named like ubuntu's already existing layouts. and then the rest comes naturally. no one b_jonas: arseniiv_: as our channel somehow doesn't seem to have australian regulars, you're probably in the easternmost known timezone, so I'll have to ask you to open the #esoteric new year celebrations at your new year imode-ruby: that's presuming he's not on fire. arseniiv: b_jonas: thanks :) This will be two houes later arseniiv: hours* b_jonas: arseniiv: sure, I just want to warn you early b_jonas: imode-ruby: who? the nonexistant australian? arseniiv: imode-ruby: actually I’m quite wet, I can’t do anything with wet hands issue every time after I washed them too much in something like a shampoo e. g. being in a bath arseniiv: and this is very inconvenient and it lasts hours b_jonas: bunnyocto: people use Dyalog APL and Arthur Whitney's K APL-like, together with databases, for work in finance. and tswett just said that he wants to start working in finance, maybe you can talk to them and tell them why that's a bad idea. fizzie: kspalaiologos: Re your question about tar, when you use ` you're passing just one command-line argument, so your filenames have an extra space in them. fizzie: You can see that in the error message: "tar (child): what.tar.gz: Cannot open" -- see the double space there? kspalaiologos: ``` tar -xzf /hackenv/tmp/v1.2.7.tar.gz HackEso: ​ \ gzip: stdin: unexpected end of file \ tar: Unexpected EOF in archive \ tar: Unexpected EOF in archive \ tar: Error is not recoverable: exiting now kspalaiologos: what about kspalaiologos: fetch getting crazy? HackEso: asmbf-1.1.1 \ asmbf-1.2.6 \ asmbf-1.2.6.tar.gz \ asmbf-1.2.6.zip \ asmbf-1.2.7 \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ paste \ program \ spline \ spout \ test \ test.sh \ v1.2.7.tar.gz \ what.tar.gz kspalaiologos: `rm asmbf-1.2.6 HackEso: No output. kspalaiologos: `rm asmbf-1.2.6.tar.gz HackEso: No output. kspalaiologos: `rm asmbf-1.2.6.zip HackEso: No output. kspalaiologos: `rm v1.2.7.tar.gz HackEso: No output. kspalaiologos: `ls .. HackEso: bin \ canary \ emoticons \ esobible \ etc \ f \ factor \ hw \ ibin \ interps \ karma \ karma.orig \ karma.rej \ le \ lib \ misle \ paste \ ply-3.8 \ quines \ quotes \ share \ src \ stuff \ tmflry \ tmp \ wisdom fizzie: There's a 10-megabyte size limit as well, just in general for everything running on it. Is this file larger than that? fizzie: (Apparently not. Hmm, weird.) b_jonas: fizzie: could it be a confusion about tmp and writing the version-controlled parts? b_jonas: kspalaiologos: you don't need the -z option for tar extraction these days by the way, unless you're reading a non-seekable archive fizzie: That should be fine. fizzie: I don't know if wget might be doing something odd for the case where the webserver doesn't specify a Content-Length. Sounds unlikely though. kspalaiologos: b_jonas, that's how one of my older friends teached me b_jonas: ``` zcat /hackenv/tmp/v1.2.7.tar.gz | wc -c fizzie: (GitHub's archive download doesn't specify one, maybe because they might end up making it on the fly.) HackEso: gzip: /hackenv/tmp/v1.2.7.tar.gz: No such file or directory \ 0 kspalaiologos: by a very simple mnemonic kspalaiologos: xzf = eXtract Ze Giles b_jonas: oh, you deleted it fizzie: Let's try downloading that one more time. fizzie: `fetch asmbf-1.2.6.tar.gz https://github.com/kspalaiologos/asmbf/archive/v1.2.7.tar.gz HackEso: Cannot write to ‘/hackenv/tmp/asmbf-1.2.6.tar.gz’ (File too large). fizzie: `` ls -l asmbf-1.2.6.tar.gz HackEso: ​-rw-r--r-- 1 1000 1000 10240 Dec 31 17:16 asmbf-1.2.6.tar.gz fizzie: Hmmmm. b_jonas: file too large... ok fizzie: I think I maybe accidentally made the 10240 kilobytes 10240 bytes instead. fizzie: I did tweak the way those resource limits are set, maybe the units are different for setrlimit(2) vs. bash ulimit command. fizzie: I'll fix that in a bit, lunchtime now. fizzie: Well, or is it dinner? Some kind of food anyway. b_jonas: anyway, after that we may have some regulars in Finland, which is the +2 timezone, then a lot of regulars in Germany and Norway and me in the +1 timezone, then a lot of regulars in England plus HackEso and possibly someone in Iceland in the +0 timezone, and then of course the east coast Americans in the -5 timezone int-e: dunch? int-e: There's "brunch", there should be something for this as well. Though I suppose you just call it a late lunch. b_jonas: ``` perl -e 'print "a"x10241' > /hackenv/tmp/kVfyUkJd HackEso: No output. b_jonas: ``` perl -e 'print "a"x10241 or die "write $!"' > /hackenv/tmp/kVfyUkJd HackEso: No output. b_jonas: ``` perl -e 'print "a"x102400 or die "write $!"' > /hackenv/tmp/kVfyUkJd HackEso: No output. b_jonas: ``` set -e; s=/hackenv/tmp/kVfyUkJd; perl -e 'print "a"x1026000 or die "write $!"' >$s; ls -l "$s" HackEso: ​-rw-r--r-- 1 1000 1000 1026000 Dec 31 17:19 /hackenv/tmp/kVfyUkJd b_jonas: ``` set -e; s=/hackenv/tmp/kVfyUkJd; perl -e 'print "a"x1_200_000 or die "write $!"' >$s; ls -l "$s" HackEso: ​-rw-r--r-- 1 1000 1000 1200000 Dec 31 17:19 /hackenv/tmp/kVfyUkJd b_jonas: ``` set -e; s=/hackenv/tmp/kVfyUkJd; perl -e 'print "a"x12_000_000 or die "write $!"' >$s; ls -l "$s" fizzie: There's a restaurant called "Drunch" (a pizza/kebab kind of place) back in Helsinki. HackEso: bash: line 1: 54 File size limit exceededperl -e 'print "a"x12_000_000 or die "write $!"' > $s fizzie: b_jonas: `fetch is different though. fizzie: So looks like I've got the limits right in the sandbox, but not for fetch. b_jonas: ``` set -e; s=/hackenv/tmp/kVfyUkJd; ls -l "$s" HackEso: ​-rw-r--r-- 1 1000 1000 10485760 Dec 31 17:20 /hackenv/tmp/kVfyUkJd b_jonas: ``` set -e; s=/hackenv/tmp/kVfyUkJd; rm -v "$s" HackEso: removed '/hackenv/tmp/kVfyUkJd' b_jonas: fizzie: I see fizzie: Apparently there's many restaurants called Drunch. int-e: "r", hmm. fizzie: Well, DinneR, maybe. int-e: I'm afraid the r comes from "brunch". :) b_jonas: the "Dr" comes from "drink" because you can order drinks in the restaurant b_jonas: oh heck, the "drun" comes from "drunk" because you can order so many drinks you end up getting drunk, and the "ch" comes from "cheap" because you can order those drinks cheap arseniiv: sad :D fizzie: `fetch asmbf-1.2.6.tar.gz https://github.com/kspalaiologos/asmbf/archive/v1.2.7.tar.gz HackEso: 2019-12-31 17:37:57 URL:https://codeload.github.com/kspalaiologos/asmbf/tar.gz/v1.2.7 [41301] -> "/hackenv/tmp/asmbf-1.2.6.tar.gz" [1] fizzie: `` ls -l asmbf-1.2.6.tar.gz HackEso: ​-rw-r--r-- 1 1000 1000 41301 Dec 31 17:37 asmbf-1.2.6.tar.gz fizzie: That's more like it. b_jonas: `? alice HackEso: Alice doesn't want to go among mad people. arseniiv: `? Bob HackEso: Bob? ¯\(°​_o)/¯ arseniiv: hopefully Bob isn’t mad fizzie: `fetch too-big-file http://ftp.funet.fi/pub/linux/kernel/v5.x/linux-5.4.tar.xz HackEso: Cannot write to ‘/hackenv/tmp/too-big-file’ (File too large). fizzie: `` ls -l too-big-file HackEso: ​-rw-r--r-- 1 1000 1000 10485760 Dec 31 17:40 too-big-file fizzie: `rm too-big-file HackEso: No output. b_jonas: kspalaiologos: fizzie fixed fetch HackEso: asmbf-1.1.1 \ asmbf-1.2.6.tar.gz \ asmbf-1.2.7 \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ paste \ program \ spline \ spout \ test \ test.sh \ what.tar.gz kspalaiologos: `cd asmbf-1.2.7 HackEso: cd? No such file or directory kspalaiologos: what is it kspalaiologos: ``` rm -rf asmbf-1.1.1 # not needed HackEso: No output. kspalaiologos: ``` tar -xzf asmbf-1.2.7 HackEso: tar (child): asmbf-1.2.7: Cannot read: Is a directory \ tar (child): At beginning of tape, quitting now \ tar (child): Error is not recoverable: exiting now \ \ gzip: stdin: unexpected end of file \ tar: Child returned status 2 \ tar: Error is not recoverable: exiting now kspalaiologos: ``` cd asmbf-1.2.7 HackEso: No output. kspalaiologos: ``` cd asmbf-1.2.7 && ls HackEso: AUTHORS \ INSTALL \ LICENSE \ Makefile \ NEWS \ README \ VERSIONING \ bconv.c \ bfasm.asm \ bfasm.b kspalaiologos: that's more like it kspalaiologos: ``` cd asmbf-1.2.7 && make HackEso: make: *** No rule to make target 'bfasm', needed by 'all'. Stop. fizzie: That might be an incomplete thing. fizzie: I only fixed `fetch, I didn't re-uncompress the thing. kspalaiologos: ``` cd asmbf-1.2.7 && ls bfasm.c HackEso: ls: cannot access 'bfasm.c': No such file or directory kspalaiologos: ``` rm -rf asmbf-1.2.7 HackEso: No output. kspalaiologos: ``` tar -xzf asmbf-1.2.6.tar.gz HackEso: No output. HackEso: ​``ls? No such file or directory kspalaiologos: ``` ls HackEso: asmbf-1.2.6.tar.gz \ asmbf-1.2.7 \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ paste \ program \ spline \ spout \ test \ test.sh \ what.tar.gz kspalaiologos: ``` cd asmbf-1.2.7 && make HackEso: bfintd.c: In function 'main': \ bfintd.c:111:51: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long int' [-Wformat=] \ printf("Access Violation, ip=%d", ip); \ ~^ ~~ \ %ld \ bfintd.c:166:27: warning: format '%X' expects argument of type 'unsigned int', but argument 3 has type 'long int' [-W kspalaiologos: this garbage is normal kspalaiologos: but it built theoretically kspalaiologos: ``` ls asmbf-1.2.7/bin HackEso: bconv \ bfasm \ bfi \ bfi-rle \ bfintd \ bfmake \ bfpp \ derle.pl \ labels.pl \ strip.pl kspalaiologos: ``` ls /hackenv/bin HackEso: ​welcome \ 04w08e09l11c12o13m04e \  \  \  \ echo \ ! \ " \ # \ ' \ ( \ ,1 \ ,2 \ 1 \ 13 \ 1492 \ 2 \ 2014 \ 2015 \ 2016 \ 2017 \ 3 \ 4 \ 5 \ 5quote \ 5w \ 8-ball \ 8ball \ \ ? \ ?? \ ?h \ ?hh \ @ \ CaT \ CoInS \ Eternity \ FireFlist \ No \ ReLcOmE \ WELCOME \ WeLcOmE \ Welcome \ ^.^ \ ` \ `^ \ `` \ `̀ \ aaaaaaaaa \ acronym \ addquote \ addscowrevs \ addtodo \ addwhatis \ age \ aglist \ airport \ airport-lookup \ a kspalaiologos: ``` ls /hackenv/bin/bfasm HackEso: ​/hackenv/bin/bfasm kspalaiologos: it's there kspalaiologos: can I make another directory for all that my garbage? b_jonas: kspalaiologos: sure b_jonas: especially in lib or share kspalaiologos: ``` mkdir /hackenv/bin/bfasm HackEso: mkdir: cannot create directory '/hackenv/bin/bfasm': File exists kspalaiologos: ah yes kspalaiologos: forgot to remove kspalaiologos: ``` rm /hackenv/bin/bfasm HackEso: No output. kspalaiologos: ``` mkdir /hackenv/bin/bfasm HackEso: No output. b_jonas: ``` ls -abF /hackenv/lib HackEso: ​./ \ ../ \ c++decl* \ cdecl@ \ frink* \ frink.jar \ interp \ karma* \ morse-decode* \ p7zip-16.02/ b_jonas: ``` ls -abF /hackenv/share HackEso: ​./ \ ../ \ 8ballreplies \ Complaints.mp3 \ UnicodeData.txt \ WordData/ \ airports.dat \ autowelcome_status \ awesome \ ballreplies \ candide* \ cat \ conscripts \ construct_grams.pl* \ delvs-master/ \ dict/ \ dict-words \ esolangs.txt \ esolangs.txt.sorted \ headers \ headers.gch \ hello* \ lua/ \ maimer \ maimery \ maze* \ mtg/ \ nothp \ recipe/ \ scapegoats \ scowrevs \ sedtest \ unic.txt \ units.dat \ usercmds \ whatis \ wisdom@ b_jonas: ``` ls -abF /hackenv/libexec HackEso: ls: cannot access '/hackenv/libexec': No such file or directory kspalaiologos: not interested kspalaiologos: ``` cp -rf /hackenv/tmp/asmbf-1.2.7/bin/* /hackenv/bin/bfasm/* HackEso: cp: target '/hackenv/bin/bfasm/*' is not a directory fizzie: A directory as /hackenv/bin/bfasm will prevent you from having a command `bfasm though. b_jonas: I recommend creating it under /hackenv/lib instead kspalaiologos: ``` rm -rf /hackenv/bin/bfasm HackEso: No output. kspalaiologos: ``` mkdir -f /hackenv/lib/kps/ HackEso: mkdir: invalid option -- 'f' \ Try 'mkdir --help' for more information. kspalaiologos: ``` mkdir /hackenv/lib/kps/ HackEso: No output. kspalaiologos: ``` cp -rf /hackenv/tmp/asmbf-1.2.7/bin/* /hackenv/lib/kps/* HackEso: cp: target '/hackenv/lib/kps/*' is not a directory kspalaiologos: ``` cp -rf /hackenv/tmp/asmbf-1.2.7/bin/* /hackenv/lib/kps/ HackEso: No output. kspalaiologos: ls /hackenv/lib/kps fizzie: Or ``, or ```. kspalaiologos: gosh, what a derp kspalaiologos: ``` cls /hackenv/lib/kps kspalaiologos: ``` ls /hackenv/lib/kps HackEso: bash: cls: command not found HackEso: bconv \ bfasm \ bfi \ bfi-rle \ bfintd \ bfmake \ bfpp \ derle.pl \ labels.pl \ strip.pl kspalaiologos: so now theoreticallty kspalaiologos: ``` kps/bfasm <<<"out .0" HackEso: bash: kps/bfasm: No such file or directory kspalaiologos: ``` kps\bfasm <<<"out .0" HackEso: bash: kpsbfasm: command not found kspalaiologos: seems like the path doesn't work like I expected it to kspalaiologos: not a problem though fizzie: It's not really all that feasible to have foo/bar commands, because of the way path lookups work. kspalaiologos: ``` cat /hackenv/bin/asmbf HackEso: print_args_or_input "$@" |tr / \\n | labels.pl | bfasm kspalaiologos: the script is here kspalaiologos: just modify it kspalaiologos: what was the command HackEso: Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch [] " downloads files. Files saved to $HACKENV are persistent, and $HACKENV/bin is in $PATH. $HACKENV is a mercurial repository, "`revert " can be used to revert, https://hack.esolangs.org/repo/ to browse. $PWD ($HACKENV/tmp) is persistent but unversioned, /tmp is ephemeral. HackEso: https://hack.esolangs.org/edit/ kspalaiologos: `edit /hackenv/bin/asmbf HackEso: https://hack.esolangs.org/edit/bin/asmbf fizzie: Just FYI, I don't think I've fixed the `fetch commands output by `edit. b_jonas: kspalaiologos: you can put symlinks or wrappers in bin, even if the bulk of the stuff is installed under libexec or elsewhere b_jonas: (yes, I know we don't yet have a libexec) fizzie: Okay, fixed `edit, at least provisionally. b_jonas: fizzie: the encoding problem or the url problem of `edit ? b_jonas: s/url/filename/ fizzie: No, just the `fetch command samples. fizzie: So I guess the url problem, right. fizzie: The encoding problem probably involves a little more understanding than the filename problem. arseniiv: they say Betelgeuse dimmed to a degree b_jonas: arseniiv: because of the collapsing Hrung disaster? arseniiv: b_jonas: dunno :D b_jonas: prepare the noisemakers and the new year sausage and lentils kspalaiologos: `fetch /hackenv/bin/asmbf https://hack.esolangs.org/get/bin/asmbf HackEso: 2019-12-31 18:25:57 URL:https://hack.esolangs.org/get/bin/asmbf [250/250] -> "/hackenv/bin/asmbf" [1] kspalaiologos: `asmbf "STK 2/ORG 0/TXT "Hello World!"/DB_ 0/@LOOP/RCL R2, R1/JZ_ R2, 0/OUT R2/INC R1/JMP %LOOP" HackEso: ​/hackenv/bin/asmbf: line 2: /hackenv/lib/kps/bfpp: Permission denied \ /hackenv/bin/asmbf: line 3: /tmp/no-toucha-prgm.p: No such file or directory \ /hackenv/bin/asmbf: line 3: /hackenv/lib/kps/strip.pl: Permission denied kspalaiologos: I'll set the perms in a second kspalaiologos: ``` chmod -R +x /hackenv/lib/kps/ HackEso: No output. kspalaiologos: `asmbf "STK 2/ORG 0/TXT "Hello World!"/DB_ 0/@LOOP/RCL R2, R1/JZ_ R2, 0/OUT R2/INC R1/JMP %LOOP" HackEso: ​:4:1: warning: missing terminating " character \ :13:10: warning: missing terminating " character \ /hackenv/lib/kps/bfpp: line 6: /bin/labels.pl: No such file or directory \ /hackenv/bin/asmbf: line 3: /tmp/no-toucha-prgm.p: No such file or directory kspalaiologos: oh fine kspalaiologos: `asmbf "STK 2/ORG 0/TXT \"Hello World!\"/DB_ 0/@LOOP/RCL R2, R1/JZ_ R2, 0/OUT R2/INC R1/JMP %LOOP" HackEso: ​:4:1: warning: missing terminating " character \ :6:6: warning: missing terminating " character \ :13:10: warning: missing terminating " character \ /hackenv/lib/kps/bfpp: line 6: /bin/labels.pl: No such file or directory \ /hackenv/bin/asmbf: line 3: /tmp/no-toucha-prgm.p: No such file or directory kspalaiologos: `asmbf STK 2/ORG 0/TXT "Hello World!"/DB_ 0/@LOOP/RCL R2, R1/JZ_ R2, 0/OUT R2/INC R1/JMP %LOOP HackEso: ​/hackenv/lib/kps/bfpp: line 6: /bin/labels.pl: No such file or directory \ /hackenv/bin/asmbf: line 3: /tmp/no-toucha-prgm.p: No such file or directory kspalaiologos: the references kspalaiologos: `fetch /hackenv/lib/kps/bfpp https://hack.esolangs.org/get/lib/kps/bfpp HackEso: 2019-12-31 18:29:38 URL:https://hack.esolangs.org/get/lib/kps/bfpp [305/305] -> "/hackenv/lib/kps/bfpp" [1] kspalaiologos: `asmbf STK 2/ORG 0/TXT "Hello World!"/DB_ 0/@LOOP/RCL R2, R1/JZ_ R2, 0/OUT R2/INC R1/JMP %LOOP HackEso: ​/hackenv/bin/asmbf: line 3: /tmp/no-toucha-prgm.p: No such file or directory HackEso: asmbf-1.2.6.tar.gz \ asmbf-1.2.7 \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ paste \ program \ spline \ spout \ test \ test.sh \ what.tar.gz kspalaiologos: `fetch /hackenv/bin/asmbf https://hack.esolangs.org/get/bin/asmbf HackEso: 2019-12-31 18:31:09 URL:https://hack.esolangs.org/get/bin/asmbf [298/298] -> "/hackenv/bin/asmbf" [1] kspalaiologos: `asmbf STK 2/ORG 0/TXT "Hello World!"/DB_ 0/@LOOP/RCL R2, R1/JZ_ R2, 0/OUT R2/INC R1/JMP %LOOP HackEso: ​/hackenv/bin/asmbf: line 3: /hackenv/tmp/no-toucha-prgm.p: No such file or directory kspalaiologos: ``` cat <<<"out .0" > test.asm HackEso: No output. kspalaiologos: ``` cat test.asm HackEso: out .0 kspalaiologos: ``` /hackenv/lib/kps/bfpp /hackenv/tmp/test.asm HackEso: No output. HackEso: asmbf-1.2.6.tar.gz \ asmbf-1.2.7 \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ no-toucha-prgm.asm.p \ output.b \ paste \ program \ spline \ spout \ test \ test.asm \ test.asm.p \ test.sh \ what.tar.gz kspalaiologos: `rm output.b HackEso: No output. kspalaiologos: `rm test.asm HackEso: No output. kspalaiologos: `rm test.asm.p HackEso: No output. kspalaiologos: `fetch /hackenv/bin/asmbf https://hack.esolangs.org/get/bin/asmbf HackEso: 2019-12-31 18:33:41 URL:https://hack.esolangs.org/get/bin/asmbf [306/306] -> "/hackenv/bin/asmbf" [1] kspalaiologos: `asmbf STK 2/ORG 0/TXT "Hello World!"/DB_ 0/@LOOP/RCL R2, R1/JZ_ R2, 0/OUT R2/INC R1/JMP %LOOP HackEso: No output. kspalaiologos: ``` cat output.b HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>>>>>>>>>>>>>>>>[-]>++++++++[<+++++++++>-]>[-]>++++[<+++++>-]<[>+++++<-]>+[-<+>]>[-]>+++[<++++++>-]<[>++++++<-]>[-<+>]>[-]>+++[<++++++>-]<[>++++++<-]>[-<+>]>[-]>++++[<+++++>-]<++[>+++++<-]>+[-<+>]>[-]>+++++[<++++++>-]<++>>[-]>+++[<+++++>-]<++[>+++++<-]>++[-<+>]>[-]>++++[<+++++>-]<++[>+++++<-]>+[-<+>]>[-]>+++[<++++++>-]<+[>++++++<-]>[-<+>]>[-]>+++[<++++++>-]<[>++++++<-]>[-<+>]>[-]>++++[<+++++>-]<[>+++++<- kspalaiologos: yay, works! kspalaiologos: ``` ./bfi output.b HackEso: Hello World! kspalaiologos: perfect b_jonas: ``` wc output.b HackEso: ​ 0 1 1126 output.b arseniiv: well I think I should start the celebration relay now as at 0:00 I would be occupied :D Happy NY, let our wishes fulfill themselves in as direct and unassisted manner as possible! b_jonas: launch the fireworks! cut the ribbons! int-e: I'd like to keep the fireworks imaginary... but no... people are not cooperative today. arseniiv: (let there be less celebratory injuries also as a separate thing, as they unfortunately are pretty common) b_jonas: Happy New Year to the +5 timezone zzo38: OK; I am in -8 timezone int-e: Hah. I might be awake again when you cross over. arseniiv: I find a lime-flavored Skittles in a cup of green tea appealing. I’ll try other flavors the other day arseniiv: it flavors the tea nicely arseniiv: maybe a real lemon slice would accompany them even better, though that won’t mix well with milk or ice cream arseniiv: cut the ribbons! => done! https://i.postimg.cc/3xt7Bg3M/Screenshot-2100.png b_jonas: hehe "ribbon" kspalaiologos: russian office? kspalaiologos: you're russian! kspalaiologos: Where do you live? kspalaiologos: (which city) b_jonas: kspalaiologos: we don't know, but we know which timezon arseniiv: kspalaiologos: hehehe I won’t say while I’m sober :P kspalaiologos: it won't last long /s kspalaiologos: which timezone is it? kspalaiologos: nearly in the middle of Russia arseniiv: btw timezones here are partly an irregular mess. At the start of twentieth century they were much more regular but then various regions conglomerated with one another for shady reasons kspalaiologos: yeah I see on the map arseniiv: yeah at least I’m glad I’m not too far from the “capital area”, due to centralization it’s way better to live nearer than somewhere near e. g. Pacific ocean. There are several large centers but they aren’t enough bunnyocto: also as an addendum to whatever somebody said sometime ago: blsq has variable length commands bunnyocto: there's no limit on the length of a command bunnyocto: there's a lower limit of 1 character though. bunnyocto: or so you'd think bunnyocto: but there's actually none bunnyocto: the empty string is a perfectly valid builtin bunnyocto: evidently bunnyocto: !blsq %=5 blsqbot: | Ain't nobody got output fo' that! bunnyocto: is a valid assignment. bunnyocto: !blsq %x=5 %=7 %x? bunnyocto: !blsq %x=5 %=7 %? blsqbot: | ERROR: (line 1, column 12): blsqbot: | unexpected end of input bunnyocto: !blsq %=5""gv bunnyocto: so there you go bunnyocto: !blsq %={S[S[}3`` bunnyocto: this way we bind create a userdefined command and bind it to the empty string bunnyocto: so trivially commands can have 0 or more characters. bunnyocto: !blsq (ab)Sh blsqbot: | "ab" bunnyocto: !blsq (`` )Sh bunnyocto: empty string. bunnyocto: !blsq ``abcdefgh blsqbot: | ERROR: Unknown command: (abcdefgh)! bunnyocto: see. arbitrary long command. bunnyocto: !blsq %abcdefgh=5 ``abcdefgh b_jonas: welcome back, bunnyocto. in which timezone are you celebrating New Year? b_jonas: variable length commands. ok. bunnyocto: switzerland so CET I guess b_jonas: bunnyocto: does blsq have mutable cells (things where you can copy the reference to the cell, assign values to it, and retrieve the value)? does it have logic programming style backtracking, and retractable and preserved assignments to cells (whether to the same kind of cell or different kinds doesn't matter)? b_jonas: I mean, that would make a multiparadigm language b_jonas: it can also be hard to implement zzo38: But they don't use coffee in medieval English, I think. bunnyocto: b_jonas: do you know MVars? bunnyocto: or chans b_jonas: bunnyocto: sure, if you have threading you could use those too, but I was thinking plain not too threadsafe variables at first, without threads b_jonas: haskell IO actually has those too under some name int-e: Hmm, MKun and MChan b_jonas: mostliy because they have the invariant of being always full bunnyocto19: well there's mcJ{}j+]{rc}fk2wc for example bunnyocto19: which creates a thread waiting for something to be written to the chan bunnyocto19: other than that as far as references go bunnyocto19: sortof bunnyocto19: i mean bunnyocto19: !blsq %5=3 {1 2 3}{5sv}m[%5? b_jonas: bunnyocto19: are there cells (not just named variables) that you can read multiple times? ones you can assign multiple times as well? bunnyocto19: define "cell"? bunnyocto19: a cell like an IORef? b_jonas: bunnyocto19: I want a function that allocates a new cell each time you call it, and returns a reference to it, and then you can pass around that reference like an ordinary value, and get the value or assign the value through that reference, and if you assign the value it doesn't affect other cells b_jonas: yes, like an IORef bunnyocto19: isn't an IORef just a chan with one value in it? b_jonas: I don't think so b_jonas: with a chan, you can only retrieve the value once b_jonas: with an IORef, you can retreive the same value as many times as you want, b_jonas: or not retrieve it at all, but assign a new value and the next time you retrieve it you get the new value b_jonas: but I might not understand what chan you mean bunnyocto19: !blsq mC6wCrC blsqbot: | Invalid usage blsqbot: | --file Read code from file (incl. STDIN) blsqbot: | --file-no-stdin Read code from file (excl. STDIN) bunnyocto19: screw u bunnyocto19: !blsq mC6wCrC blsqbot: | __INTERNAL__:BlsqCell _CELL_ bunnyocto19: what do you want to use cells for? bunnyocto19: not sure if they're even memory safe bunnyocto19: blsq chans are memory safe bunnyocto19: I hope bunnyocto19: !blsq 1R@++ blsqbot: | Ain't nobody got time fo' dat! bunnyocto19: !blsq 1 2K K+ blsqbot: | (3, 2) bunnyocto19: but you mean more like an auto cell I guess bunnyocto19: blsq cells are iorefs bunnyocto19: blsq chans are just haskell chans bunnyocto19: that's what it has to offer b_jonas: bunnyocto19: if they're IORefs, that's fine zzo38: Now I wrote the second part (27) bunnyocto19: you could for example do uhm bunnyocto19: !blsq mcJbx{5s_1wc}fkrc blsqbot: | Ain't nobody got time fo' dat! bunnyocto19: !blsq mcJbx{1s_1wc}fkrc blsqbot: | Ain't nobody got time fo' dat! bunnyocto19: hm okay so the timeout here is less than 1 second bunnyocto19: but 5s_ was supposed to simulate a heavy computation bunnyocto19: so you can have a heavy computation and have it write the result to a chan while you do some other heavy computation in parallel bunnyocto19: then at the end you readchan bunnyocto19: basically bunnyocto19: what ever you can do in golang you can do in blsq I dare say bunnyocto19: it's got chans and it's got iorefs bunnyocto19: and fk is fork bunnyocto19: and it has pairs since today bunnyocto19: not sure what I'll be needing them for but bunnyocto19: !blsq 10 5K K+ blsqbot: | (15, 5) bunnyocto19: !blsq 10 5K K+Kf blsqbot: | (5, 15) bunnyocto19: !blsq 10 5K K+KfKd blsqbot: | ((5, 15), (5, 15)) bunnyocto19: I'm missing a graph datatype though bunnyocto19: but haven't figured out a clever burlesque-ish way of doing it bunnyocto19: I was thinking of adding a wraparound datatype bunnyocto19: such that you can construct integers that wrap around at arbitrary numbers bunnyocto19: forexample for degrees of angles bunnyocto19: 0..360 bunnyocto19: such that when you'd do 360+2 you'd get 2 bunnyocto19: i mean... fairly trivial to implement. b_jonas: no it's not, because you have to implement like a hundred builtins that do arithmetic on them b_jonas: and many of them have two or three arguments, each of which can be various types b_jonas: plus you're committing to support it in future operations too b_jonas: nevertheless, this is burlesque, it has lots of features, so if you think it's useful, do implement it bunnyocto19: !blsq 259 360tm 5?+ blsqbot: | __INTERNAL__:BlsqModInt 264 360 bunnyocto19: !blsq 259 360tm bunnyocto19: !blsq 259 360tm 5?+ bunnyocto19: !blsq 359 360tm 5?+ bunnyocto19: there we go bunnyocto19: but yeah... probably only supports +-/ and * bunnyocto19: !blsq 359 360tm 5?+100?* bunnyocto19: of course not all built-ins will take this sort of integer bunnyocto19: b_jonas: you do know nobody is using this crap anyway right? bunnyocto19: there's no userbase bunnyocto19: !blsq mcto blsqbot: | "Error" bunnyocto19: !blsq mc blsqbot: | ERROR: Unknown command: (mc)! bunnyocto19: !blsq nm bunnyocto19: !blsq 1 2tmto blsqbot: | "ModInt[2]" b_jonas: prepare for the New Year for the +02:00 timezone (Finland, Romania, Greece, Israel) in less than 10 minutes bunnyocto19: I'm reading this as blsq needs timezone types bunnyocto19: and you're right. bunnyocto19: also strongly working on integrating gui b_jonas: less than 4 minutes b_jonas: less than 2 minutes until New Year in the +02:00 timezone (Finland, Romania, Greece, Israel) b_jonas: Happy New Year for the +02:00 timezone (Finland, Romania, Greece, Israel) b_jonas: I don't remember who is in what timezone though bunnyocto19: good knews. bunnyocto19: wit OpenGL.blsq you can create pong in blsq b_jonas: prepare for New Year in the +01:00 timezone (Norway, Germany, France) in 20 minutes zzo38: The rules in GURPS for flying are similar to those for walking/running, but with double speed, and there is a minimum speed as well as maximum. But I should think the rules could be improved? Do you know how to make it better? b_jonas: zzo38: how is holding or lifting or dragging heavy items b_jonas: handled for flying that is zzo38: Same as for walking, although I think that isn't very good, and should be improved. I should think you cannot carry as much stuff while flying as walking is what I would expect, but that isn't how the rules is written. zzo38: I wanted inventing SciRPS to do it better. (I set up a NNTP to discuss making up SciRPS, and also a Fossil repository with wiki) b_jonas: New Year for +01:00 timezone offset is coming up in 11 minutes. prepare the champange bottle and glasses, and the television or radio to watch the countdown, anthem, and the president's speech. kspalaiologos: Just 10 minutes left to absolutely nothing kspalaiologos: b_jonas, not today, I'll drink champagne with mirror and go to sleep minutes in b_jonas: kspalaiologos: you're in the +01:00 timezone offset too? kspalaiologos: You're from hungary kspalaiologos: I'm two countries north b_jonas: as in Poland? bunnyocto19: go fuck yourself old year bunnyocto19: (00:00 here) bunnyocto19: (I know the new year won't be happy but at least I'm gonna tell the old year to fuck off) bunnyocto19: probably going to have to go through benzowithdrawal from the PTSD I got from being abused in a mental hospital kspalaiologos: Is it true? bunnyocto19: not sexually if that's what you thought. bunnyocto19: otherthan that: yep. bunnyocto19: And I don't mean "security guard touched me. Abuse!" kind of abuse bunnyocto19: like some mental patients claim b_jonas: Hippy Happy New Year bunnyocto19: happy new year you fins bunnyocto19: (there are always inpatients who threaten to sue hospital stuff for searching them because it's sexual abuse and what not) bunnyocto19: (some threaten to call the police and actually call the police but the police ain't showing up dude) kspalaiologos: Well, thanks. Have a great 2k20. kspalaiologos: Anyways, I'm going to sleep. bunnyocto19: good night. kspalaiologos: Good night! bunnyocto19: the thing is this: procedure X on patients with Y is ok for as long as they actually have Y. bunnyocto19: procedure X on patients that really don't have Y is abuse. bunnyocto19: (kinda like amupating an arm isn't abuse if the arm needs to be amputated) bunnyocto19: (but it sorta is abuse if there's no medical reason to do so) bunnyocto19: (so suppose a doctor knows you don't have a certain disorder but derliberately schedules you for surgery for that disorder and you're being operated on... that's the sort of abuse I'm talking about) bunnyocto19: not sexual abuse, but pretty much physical abuse. bunnyocto19: and sure, "no harm done physically", just a scar from the op and stuff that comes with surgery bunnyocto19: what country is this? bunnyocto19: denmark? bunnyocto19: dutchmark? b_jonas: no, it's Hungary bunnyocto19: steiermark? bunnyocto19: is there a mark in hungary? b_jonas: in Denmark they call her a Queen, not a President bunnyocto19: I'm honstely not really a fan of royaldom. bunnyocto19: I get it - it's for tourism and tradition. bunnyocto19: But the principle behind it still is disgusting to me. bunnyocto19: But I'm way too much leaning leftwards so... bunnyocto19: I don't glorify remnants of human rights abuses. bunnyocto19: fungot: Jászfelsőszentgyörgy fungot: bunnyocto19: i should say. :p they even give you the top of the stack and explains them in terms of the separate branches.)) bunnyocto19: fungot: tell me more about those branches fungot: bunnyocto19: that sounds pretty sexp to me LBPHacker: I look away for a moment and suddenly > Jászfelsőszentgyörgy LBPHacker: happy new year indeed bunnyocto19: why. are you living there? LBPHacker: nah, but I'm a native so it stands out b_jonas: I think most queens could make better New Year speeches than *ahem* our two most recent presidents bunnyocto19: Trump can do it. bunnyocto19: It has been a great year. Really great year. Was the greatest year. Just so great. We had some big things going, terrific, such big things. b_jonas: Trump could do too but he has the drawback of being a President in the wide sense, that is, he's also effectively a prime minister bunnyocto19: can we feed trump speeches into fungot? fungot: bunnyocto19: did you receive it, go ahead. bunnyocto19: that'd be fucking awesome. bunnyocto19: ^styles bunnyocto19: ^style fungot: Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc* iwcs jargon lovecraft nethack oots pa qwantz sms speeches ss wp ukparl youtube bunnyocto19: needs trump bunnyocto19: ^style youtube fungot: Selected style: youtube (Some YouTube comments) b_jonas: bunnyocto19: I don't know, but there are already Trump speech generators on the web I believe bunnyocto19: fungot: Jászfelsőszentgyörgy fungot: bunnyocto19: dude its a shame. can't wait to buy any of this fucking crash.... bunnyocto19: fungot: i see LBPHacker: lololol b_jonas: also, the Wiener Philharmoniker new year concert is starting in about 11 hours. I'll have to switch before I watch that one live. b_jonas: s/switch/sleep/ sorry qwertyal aphasia bunnyocto19: Is miklos a toilet? bunnyocto19: int-e: is there something fishy with url params for blsq.cgi? bunnyocto19: It ain't working anymore. b_jonas: New Year for +00:00 timezone offset (UK, UTC, Iceland) will be in 22 minutes bunnyocto19: 1%2B seems to be convertet to "1 " instead of "1+" oerjan: Happy new year! b_jonas: helloerjan bunnyocto19: dis huge bug. oerjan: "Castille" sounds a bit odd if you pronounce it with a θ <-- i think \oren\'s analysis may be a tad off bunnyocto19: !blsq '+L[b6 blsqbot: | ERROR: Burlesque: (B!) Invalid arguments! fizzie: I think we'll watch the BBC fireworks show, I think that's the British thing to do, and it's important to integrate well when you're an immigrant I hear. oerjan: `thanks Castille HackEso: Thanks, Castille. Thastille. bunnyocto19: !blsq '+**b6 blsqbot: | "2b" b_jonas: fizzie: ooh! do you also watch the Queen's speech? fizzie: Yes, we did, though this time not live. fizzie: Well, I mean, it's never live, but not at the time it was being broadcast. b_jonas: what? but it's not midnight yet fizzie: The Queen's speech is 3pm at Christmas Day. b_jonas: it'll be midnight in 10 minutes b_jonas: but doesn't she do a New Year speech too? fizzie: Not as far as I know. But I'm not an expert here. fizzie: Since I'll be busy at midnight -- happy new year of misspelling the date in forms. fizzie: I think 2020's going to be a particularly bad one for that. fizzie: "201 oh right." b_jonas: New Year for +00:00 timezone offset in 4 minutes oerjan: in norway, at least back when i watched tv, there were two new year's speeches, one by the king and one by the prime minister. oerjan: i think one was on new year's eve and one on new year's day oerjan: both still going strong, apparently b_jonas: one minute b_jonas: Happy New Year to the +00:00 timezone offset! Happy New Year HackEso. oerjan: `botsnack with cognac chocolate b_jonas: do any of the other bots have a well-defined timezone? lambdabot: Local time for b_jonas is Wed Jan 1 01:00:54 2020 b_jonas: @time lambdabot lambdabot: I live on the internet, do you expect me to have a local time? oerjan: lambdabot used to be even more snarky back when @vixen worked kmc: @vixen lambdabot: You won't have Nixon to kick around anymore, because, gentlemen, this is my last press conference. kmc: i find it hilarious kmc: that @vixen was removed for being offensive kmc: so now it auto-corrects to @nixon kmc: which is more offensive kmc: @nixon lambdabot: I can take it. The tougher it gets, the cooler I get. kmc: @nixon lambdabot: In a flat choice between smoke and jobs, we're for jobs...But just keep me out of trouble on environmental issues. oerjan: kmc: yeah but @nixon is just politically offensive, while @vixen was occasionlly nsfw kmc: perhaps oerjan: not that i actually consider nsfw more than an american obsession kmc: there are some choice quotes about the blacks and the jews in there b_jonas: when's the next new year? do we have anyone to the east of the big -05:00 timezone? oerjan: i suppose those could be nsfw as well b_jonas: `? canaima HackEso: Canaima is a secret Venezuelan project to overrun #esoteric with incomprehensible people who have no idea why they're here. oerjan: b_jonas: i dunno kmc: `? cannabis HackEso: cannabis? ¯\(°​_o)/¯ oerjan: are you implying venezuelans would be? oerjan: although i banned canaima users so there are a lot fewer than there used to oerjan: (they were pretty much entirely lost people) kmc: 23:20 < kmc> though i'm sure if you went through the logs you could find loads of embarrassing things i've said oerjan: occasionally someone gets through who has changed the default username kmc: 23:20 < kmc> @nixon b_jonas: oerjan: they would be, they're in -04:00 timezone offset, but I was more like asking HackEso because I don't remember what geographical place canaima was associated with kmc: 23:20 < lambdabot> I'm glad I'm not Brezhnev. Being the Russian leader in the Kremlin. You never know if someone's tape recording what you say. oerjan: quote of the century, that b_jonas: but even apart from that, there could be someone from the -03 or -04 timezones just randomly here. I know there are some south americans on the internet who speak English. b_jonas: I wonder why this channel has nobody from australia or new zealand by the way. maybe those countries are too sane and #esoteric attracts us crazy ones only. bunnyocto19: good point. b_jonas: I mean in general, not during the current fires in particular. oerjan: b_jonas: itidus was australian, though not particularly sane bunnyocto19: let me check SMIR from those contries b_jonas: like, some of them don't have internet access right now, or are evacuated and have bigger problems than chatting on #esoteric b_jonas: oerjan: I see b_jonas: and HackEgo used New Zealand locale but UTC timezone I believe bunnyocto19: hm nah australia seems to have pretty high insanity rates oerjan: i suspect it may be just time zone making it awkward for them? bunnyocto19: that ain't it bunnyocto19: maybe it's just the wrong kind of insanity bunnyocto19: killing koalas insanity b_jonas: oerjan: oh come on, we have people with the weirdest circadian rhythms here, like Europeans active during american times bunnyocto19: instead of using python insanity bunnyocto19: people who use python are logically insane bunnyocto19: not legally insane, just logically insane oerjan: bunnyocto19: hm wait are you mroman in very slight disguise bunnyocto19: pretty much bunnyocto19: Am I famous for hating on python? b_jonas: oerjan: it took me a long time to realize that as well oerjan: no, for blsq, but you spoke about the author in third person so i first thought it was _not_ you bunnyocto19: might have been a dramatic reference :D bunnyocto19: but yeah bunnyocto19: I'm mroman oerjan: but just now that australian thing got me to check your whois b_jonas: nickserv info bunnyocto19 bunnyocto19: and what's my whois say? oerjan: (irc whois + unix whois, in combination) oerjan: bunnyocto19: it gives an ip which the other whois tells is swiss b_jonas: bunnyocto19: it says you're using webchat bunnyocto19: that could be any swiss bunnyocto19: but yes, I got a new temporary nick bunnyocto19: in case they're watching me oerjan: sure, but a swiss who does burlesque? seemed more likely it was the same person. bunnyocto19: but now I guess it's over so.. mroman: and by them I mean my insurance provider. HackEso: Wed Jan 1 00:16:59 UTC 2020 kmc: `ddate HackEso: Today is Sweetmorn, the 1st day of Chaos in the YOLD 3186 fizzie: Happy 3186 everyone. kmc: happy 3186 mroman: oerjan: burlesque is getting maintained again at least kmc: what sets the year 0 of the discordian calendar, again? mroman: i'm on work disability oerjan: oerjan: oh come on, we have people with the weirdest circadian rhythms here, like Europeans active during american times <-- yeah but it still stacks the probabilities against them mroman: not sure they would count chatting as work or something. fizzie: kmc: Hmm, I don't know. The calendar page just says "[1970 = 3136]". mroman: and legally the gov is allowed to spy on people on disability b_jonas: mroman: oh, only that? so it's not, like, you're inpatient in a hospital and banned from using the internet at certain times but smuggled in a device (come on, that's a serious possibility, people on #esoteric reported that) mroman: I used to be banned from the internet mroman: for a couple of days fizzie: kmc: Oh, apparently it's because the Curse of Greyface happened in the year 1166 B.C. mroman: that's part of the abuse story kmc: b_jonas: hm, I have a guess who that would have been fizzie: > 1970 - 3136 mroman: which i'm legally not going to tell any details until the case is settled fizzie: "In the year 1166 B.C., a malcontented hunchbrain by the name of Greyface, got it into his head that the universe was as humorless as he, and he began to teach that play was sinful because it contradicted the ways of Serious Order." kmc: story checks out mroman: i mean most hospitals allow you to use your phones and laptopts mroman: at least here mroman: heard different things about the US b_jonas: mroman: makes sense to not want that on a channel that is publicly logged forever b_jonas: mroman: yes, but I specifically said banned during part of the day mroman: oh. that. mroman: that's very unusual b_jonas: and it's during the night in switzerland b_jonas: is it now? hmm mroman: they only do that for punishments mroman: but not as a general rule mroman: basically if you're a 25y old adult who behaves like a 14 crappy teenager they'll do the "give me your phone" stuff with certain patients mroman: but adult patients know the rules: "during sessions don't use your phone. inbetween sessions use it" mroman: those who don't get that will get their phones confiscated mroman: so it's only really a problem for adults who aren't really adults mroman: there's a no TV until 4pm rule b_jonas: ok, this doesn't quite match my evidence, but it could differ between countries or between hospitals or between parts of a hospital I guess mroman: you're just not allowed to take pictures of other people oerjan: i'd be surprised if these rules were at all standardized across countries mroman: yeah I heard stories about the US where having your smartphone taken away is common procedure oerjan: beyond things bad enough to be human rights violations mroman: doesn't really happen here unless you have to go to isolation mroman: but even then... only under extreme circumstances mroman: if you're an immediate suicide risk you'll be put into isolation with all your clothes taken away and replaced through hospital clothes b_jonas: mroman: I'm European mroman: there'll be one mattress on the floor. mroman: all other items are taken away mroman: (the smartphone too) mroman: but that's about it. b_jonas: no pictures, sure, that applies to basically the whole hospital, because there are other people there mroman: that's usually just for one night or something and then you're transfered to a regular room mroman: there was just one patient who had a smartphone ban but they used it for disciplinary stuff because that patient was a cranky teenager at 25 or something. mroman: well you can take pictures of the rooms here mroman: as long as they're empty mroman: some hospitals don't even allow you that mroman: which is weird mroman: I mean mroman: what do you have to hide? mroman: or maybe it's a security issue b_jonas: mroman: even if the room doesn't have doctors or patients in it, it probably has stuff of other patients, because you're not getting a private room mroman: you just have to be crazy enough and you'll get a private room mroman: hurhur b_jonas: also it's easier to just ban pictures during the whole hospital without trying to discriminate the finer points b_jonas: no, you have to be rich enough for a private room mroman: or that mroman: luckily I could fake the first and I am the second mroman: but I don't use premium privileges from my insurance mroman: don't want special treatment even though it would be covered mroman: on the other hand you could argue that a 110CHF wasted a month mroman: I just use ear plugs at night and sleep is fine mroman: don't care if there are three other people in the room. As long as I can sleep who cares mroman: unless they're violent mroman: then yeah mroman: that's an issue b_jonas: mroman: would the special treatment include beds that aren't so terribly uncomfortable to sleep on that I have to put my mattress on the floor and even then can barely sleep, put it back on the bed at dawn before a nurse sees it, all while the doctors explain how important it is for my health to get a good long sleep? mroman: 8 Months hospitalisation is definitely my record though. mroman: I don't know. Our beds were decent. b_jonas: and proper chairs or benches in a place with lighting on which I can read a book? mroman: and sometimes I literally slept on the floor anyways mroman: but I can sense that hungary isn't as luxurious as switzerland probably b_jonas: well the public hospitals really suck mroman: mental hospitals generally suck b_jonas: though I admit I hate soft mattresses and soft springy bed frames, I've slept on the floor in a hotel for that reason too mroman: except for the nice private ones mroman: they're great mroman: indeed b_jonas: yes, mental hospitals generally suck too b_jonas: because of the other patients mroman: but private ones don't take all the patients mroman: just the patients with little ailments b_jonas: and because of all the rules that they have to enforce because of the other patients mroman: it's a money maker mroman: like really mroman: insurances pay crazy amounts of money to them due to patients. mroman: you can't put a violent patient who routinely trashes the room into a fancy 5 star private clinic with 5k in furniture per room mroman: not unless you wanna loose 5k mroman: the public ones need to be equipped to deal with the worst of the worst mroman: so they treat everybody as the worst of the worst :D b_jonas: mroman: which side did you fall on when you got out of the hospital? are you eating all sorts of food with just a spoon, without a fork and knife, because you learned how to do it and are used to, or, on contrary, eating every food with a knife and fork, because you're allowed to? mroman: well... we had knifes mroman: I can't answer that b_jonas: that's a weird mental hospital then mroman: there are open wards and closed wards mroman: but even on the closed wards you have knifes mroman: see... the trick is that if somebody were to use a knife mroman: you just isolate him from other patients mroman: problem solved. mroman: that's how it's done here mroman: if they have any reason to believe you'd use a knife to injure somebody you'll be locked up in isolation b_jonas: I don't see how that works, because (1) they can use a knife on themselves, (2) they aren't rich enough to have private isolation rooms for many patients, and (3) it may be too late after they use a knife. mroman: you don't let it come to 3. mroman: 1) not when in isolation no mroman: 2) depends I guess mroman: the closed ward here has 3 isolation units. b_jonas: maybe I just didn't meet the isolated patients, by definition mroman: I mean... mroman: violent patients are really rare mroman: in the sense of "murderers" b_jonas: actually violent ones are rare, sure mroman: violent patients aren't rare mroman: but "i'm gonna stab you" violent is rather rare mroman: so you isolate them or transfer them to a better suited clinic b_jonas: that's true, they're in a different clinic b_jonas: a worse one b_jonas: and heavily sedated mroman: there are also huge cultural differences mroman: some cultures violence is accepted more mroman: such as violence to defend your honor or whatever mroman: so naturally those countries will have more issues with violent patients mroman: swiss are inherently anti-violent. mroman: I mean mroman: no offense to americans mroman: but I'd say that americans are more violent than swiss mroman: just the concept of bar fights mroman: doesn't exist here mroman: there's zero tolerance for that shit mroman: if you slap another person in the face mroman: you'll get sued mroman: unless it's a psychiatrist mroman: they can legally slap patients mroman: psychiatrists can do pretty much anything. mroman: with the exception of sexual violence and causing death mroman: and amputations. mroman: those are the three things they are legally not allowed to do mroman: other than that they're specifically allowed to do anything. mroman: yeah... few people know this... mroman: also... psychiatrists generally don't use all the stuff they could do mroman: that's probably partly the reason why most people think that they can't do that mroman: but they can. mroman: they just usually really, really don't. mroman: but they have the legal right to. mroman: my guess is one of the reasons they don't is because if they would then more people would start reading the law and the law will be changed within a month mroman: for as long as they don't do it then people have no reason to read the law and except for a few laywers and whatnot complaining about it mroman: the public sees no immediate need to change the laws mroman: people are very biased. mroman: "You know they could legally slap you?" "That can't be right?" "They can!" "Well, I was never slapped and none of my other inpatients were slapped so I don't think there's a problem" mroman: or like "so maybe they could. They never do it." Well, until they do it and you learn that it's legal and that you're fucked. mroman: people don't want to bother with problems unless it personally impacted their own lifes. mroman: anyway the takehome message is: pretty much all countrie's mental health laws are crap. we need to revise them. Have a good night. b_jonas: good night, mroman zzo38: Now I set up a Fossil repository for TeXnicard: http://zzo38computer.org/fossil/texnicard.ui/ I also set up a NNTP for TeXnicard, described on that web page. kmc: one thing i've been learning, while the American healthcare system is fucked up in many ways, every country has some fucked up stuff zzo38: Do you like TeXnicard? kmc: I have no opinion of TeXnicard zzo38: Do you have a opinion of Magic Set Editor? zzo38: (Magic Set Editor doesn't support CMYK, I think.) oerjan: `learn The password of the month is only if lambda is a macro HackEso: Relearned 'password': The password of the month is only if lambda is a macro oerjan: fungot: i defer to you as the expert hth fungot: oerjan: love this song reminds me of stepbrothers... dang! many props!!!! i love this song is that so good oerjan: ^style fungot: Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack oots pa qwantz sms speeches ss wp ukparl youtube* oerjan: hm if i'd read the logs earlier i'd not have needed to ask oerjan: `slwd `fetch//s,Ego,Eso, HackEso: ​`fetch//`fetch [] downloads files, and is the only web access currently available in HackEso. It is a special builtin that cannot be called from other commands. See also `edit. oerjan: and this is very inconvenient and it lasts hours <-- have you looked at this remarkable new invention called a "towel" hth oerjan: just as well e's not here zzo38: I read that in Magic: the Gathering, "Creatures with power 5 or more have flying" doesn't work, because the layer system first checks for abilities and then power/toughness. However, I am not so sure. I would think that determining characteristics from text and copiable values always applies. Do you know if it does or not? zzo38: I would think that "The values of an object's characteristics are determined by starting with the actual object. For a card, that means the values of the characteristics printed on that card." means it is like I said. zzo38: Does the new C specification require that 'xy'=='x'*'\1\0'+'y'*'\0\1' for any character "x" and "y"? (Some people said that it is not a valid C syntax, but I don't believe them.) zzo38: (And, if it doesn't, they should fix it so that it does, and furthermore that 'xy' is nonzero and '\0\0' is zero.) zzo38: Why on NMOS 6502 the instructions that seem like they should write to an immediate (according to the pattern of the opcodes) instead read it, causing mainly doing nothing important? int-e: . o O ( morning ) oerjan: mornint-e int-e: `? password HackEso: The password of the month is only if lambda is a macro oerjan: i wonder if the lost submarine gang is about to find out what trogulus was really hiding int-e: Ah, good job, fungot. fungot: int-e: i've been waiting for one of them i say more to the pilot wanted to say about her career on a&e's new music and film show private sessions. it looks good. int-e: oerjan: spoilers. oerjan: i was wondering after last comic too, although maybe not quite as strongly. oerjan: or maybe they'll find out why england is sinking. or both. oerjan: int-e: the spoilers are all in your head. you are feeling sleepy... int-e: oerjan: One of these days you'll spoil something significant ;) int-e: Rather than merely reminding me how early (timely) GG updates these days. int-e: Hmm, did mroman explain his cgi problem further? I guess not... will have to wait for him to turn up again. int-e: Oh, I see what the problem is... hmm. zzo38: Recently I saw a telephone that you have to wind up. I think what I heard is that the winding causes electricity on the line. Is it possible to get it to work by fixing it so that it will just interrupt the line instead rapidly, or is there other problems such as impedance mismatch or otherwise? int-e: @tell mroman The burlesque.cgi should work again... lighthttpd added URL normalization which, if enabled, seems to normalize %2B -> '+' -> ' ' even in query strings. I didn't expect that. lambdabot: Consider it noted. bunnyocto: !blsq {1 2 3.14159}"Hi: `,009`! `,103`! `;009`1d"bf blsqbot: | "Hi: 000000001 112 3.1000000" bunnyocto: !blsq {10 '-' 5}"Hi: `R`!"bf blsqbot: | "Hi: `R10" imode-ruby: happy new year. bunnyocto: !blsq {'-' 10 5}"Hi: `R`!"bf blsqbot: | "Hi: `R'-" bunnyocto: at least it has new fmts now bunnyocto: !blsq {'- 10 5}"Hi: `R`!"bf blsqbot: | "Hi: 5---------" int-e: bunnyocto: I think I fixed the cgi issue (mroman has a message about that) int-e: (Maybe if I was hosting more than one cgi... but I'm not.) int-e: Ah, it's great to have some fixtures in life. Schlock Mercenary starts the new year with a pun. int-e: With lampshading. bunnyocto: !blsq {"Hi"}"`^`s or `s"bf blsqbot: | "Hi or Hi" bunnyocto: !blsq {3 4}"`! + `! is `m+;`!"bf blsqbot: | That line gave me an error bunnyocto: !blsq {3 4}"`$`! + `! is `m+;`!"bf blsqbot: | "3 + 4 is 7" bunnyocto: ok. so I need your help bunnyocto: any crazy Ideas you ever had for sprintf or something bunnyocto: hit me bunnyocto: crazy or useful int-e: https://en.wikipedia.org/wiki/Format_string_attack comes to mind bunnyocto: !blsq {4 0 1}"Smallest three numbers are `<`!, `! and `!"bf blsqbot: | "Smallest three numbers are 0, 1 and 4" b_jonas: Happy New Year to everyone, including those who use american timezones bunnyocto: !blsq {5 4 0 1 6}"Smallest three numbers are `<`!, `! and `!"bf blsqbot: | "Smallest three numbers are 0, 1 and 4" b_jonas: " every country has some fucked up stuff" => welcome to the Real World that's not a perfect utopia b_jonas: int-e: ouch b_jonas: `? password HackEso: The password of the month is only if lambda is a macro bunnyocto: !blsq {{1 4 -2 3 -10 99}}"Smallest number in `^`B is `m2;`!!"bf blsqbot: | "Smallest number in [1, 4, -2, 3, -10, 99] is -10!" b_jonas: also happy third year of the Brexit, may it not be the last b_jonas: `python3 -cprint(min([float(v) for v in "1 4 -2 3 -10 99".split()])) HackEso: ​-10.0 bunnyocto: hm. can I circumvent circular imports by adding a third module? bunnyocto: probably not . kmc: happy New Year blsqbot: | Happy New Year b_jonas: oh, that reminds me b_jonas: `prefixes HackEso: Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ , bfbot =. fungot: HackEso: the flesh of fallen angels thing.anyways i dont think i just can't get over it no one on board b_jonas: ^prefixes fungot: Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ . b_jonas: `? prefixes HackEso: Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ , bfbot =. fungot: HackEso: he's the dj b_jonas: ^echo hi b_jonas: ^echo `hello fungot: `hello `hello HackEso: hello, world b_jonas: that's alarming b_jonas: fizzie: it looks as if fungot and HackEso are listening to each other fungot: b_jonas: how can u say ppl died plz b_jonas: are we starting the new year with a hearty bot loop? b_jonas: ``` f=/hackenv/bin/STOP; >$f echo $'#!/bin/sh\nrm -v /hackenv/bin/botloop' HackEso: No output. b_jonas: ^def botloop ul (no)S fungot: Defined. b_jonas: ^botloop b_jonas: ^def botloop ul (`botloop)S fungot: Defined. b_jonas: ^botloop fungot: `botloop HackEso: botloop? No such file or directory b_jonas: ``` f=/hackenv/bin/STOP; >$f echo $'#!/bin/sh\nrm -v /hackenv/bin/botloop'; chmod -c a+x "$f" HackEso: mode of '/hackenv/bin/STOP' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x) b_jonas: ``` f=/hackenv/bin/botloop; >$f echo $'#!/bin/sh\necho no'; chmod -c a+x "$f" HackEso: mode of '/hackenv/bin/botloop' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x) b_jonas: `botloop HackEso: removed '/hackenv/bin/botloop' b_jonas: `botloop HackEso: botloop? No such file or directory b_jonas: ^def botloop ul (no)S fungot: Defined. b_jonas: ^botloop b_jonas: ^def botloop ul (`botloop)S fungot: Defined. b_jonas: everyone, to stop the loop, say: ^def botloop ul (no)S b_jonas: everyone, to stop the loop, say: `STOP b_jonas: ``` f=/hackenv/bin/botloop; >$f echo $'#!/bin/sh\necho "^botloop"'; chmod -c a+x "$f" HackEso: mode of '/hackenv/bin/botloop' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x) b_jonas: ^botloop fungot: `botloop HackEso: ​^botloop b_jonas: fungot, you can listen to HackEso more than once fungot: b_jonas: ahahahahahahha im pretty sure there will be released soon ( yeah i am a hillary clinton looks more like a biker doing ballet, except for gay flight attendants...) b_jonas: ^botloop fungot: `botloop HackEso: ​^botloop b_jonas: `botloop HackEso: ​^botloop int-e: Hah, https://esolangs.org/logs/ looks weird. b_jonas: right, HackEso puts a prefix to it HackEso: removed '/hackenv/bin/botloop' b_jonas: ^def botloop ul (no)S fungot: Defined. b_jonas: int-e: https://esolangs.org/logs/2019-12-31.html#l6b b_jonas: check out https://esolangs.org/logs/2020.html as well int-e: Did you mean 2021... b_jonas: | "hello"Q b_jonas: !blsq "hello"Q blsqbot: | hello b_jonas: !blsq "`hello d"Q blsqbot: | `hello d b_jonas: `ehco !blsq "hello"Q HackEso: ehco? No such file or directory b_jonas: `echo !blsq "hello"Q HackEso: ​!blsq "hello"Q b_jonas: ^ul (!blsq "hello"Q) bunnyocto: I think I broke parsec b_jonas: ^ul (!blsq "hello"Q) b_jonas: break! kspalaiologos: greets kspalaiologos: I'm back b_jonas: hi kspalaiologos kspalaiologos: did you take some sleep :p? kspalaiologos: I thought my bot died kspalaiologos: exactly at 00:00 kspalaiologos: because it stopped logging, but it seems like it's there b_jonas: yes, I slept b_jonas: then I woke for the Wiener Philharmoniker Neujahrskonzert kspalaiologos: I understand German a bit b_jonas: the log bot seems to be there kingoffrance: burning canine related philharmonic new year concert b_jonas: the break is ending mroman: at least he's not adding links to porn sites mroman: and at least he's not spamming this channel with !blsq commands like some other moron mroman: int-e: hu @lighthttpd mroman: but thx mroman: but that does indeed seem very odd like why would it have to manipulate query parameters like that? mroman: that sounds illegal. int-e: Yeah it's definitely wrong. mroman: btw you gave me ssh access to it right? mroman: int-e: can you replace the key with https://mroman.ch/PUB.TXT kspalaiologos: what's up with the Eso OS project kspalaiologos: or Eso Shell int-e: mroman: fun comment. int-e: mroman: I think I've added it. mroman: puttygen created the comment mroman: "Server refused our key" int-e: mroman: the user name is burlesque int-e: Oh, the fun of looking at auth.log. int-e: "Disconnected from invalid user rpm" int-e: But also some puzzling ones... drenthe, misiek, arnfrid, minami, vismara... int-e: (the list goes on, obviously) b_jonas: int-e: do you make ssh claim to allow plain text password login just to collect passwords? b_jonas: especially claim to allow plain text password for the user "root" but not actually accept anything? int-e: b_jonas: No, that's not why. int-e: b_jonas: password authentication is enabled because I've used it for non-privileged users. root has a long random password that I don't know. b_jonas: this was a decent one b_jonas: now for the three encores b_jonas: no wait, not yet b_jonas: there's one more before the encores b_jonas: int-e: Wiener Philharmoniker Neujahrskonzert, live on TV b_jonas: it's a New Year tradition to watch it live b_jonas: now it's also an encore b_jonas: I mean, now it's actually the encores b_jonas: now for the waltz b_jonas: Happy New Year, they say mroman: int-e: I guess it's not longer needed anyway. TIO has Burlesque too mroman: so if you don't want to maintain the shell I can just link to TIO b_jonas: mroman: in blsq, what is the function that takes a block and an integer index and gets the element from the block at that index? b_jonas: I have difficulty reading the docs again b_jonas: thanks mroman: !blsq "hi there"4!! b_jonas: !blsq {"2HBT" "wgJ5" "aB0S" "5v1v"}0!! blsqbot: | "2HBT" b_jonas: !blsq {"2HBT" "wgJ5" "aB0S" "5v1v"}1!! blsqbot: | "wgJ5" b_jonas: !blsq {"2HBT" "wgJ5" "aB0S" "5v1v"}0!! blsqbot: | "2HBT" b_jonas: that works b_jonas: and now for the grand finale, the best part blsqbot: | "5v1v" int-e: mroman: I don't really care either way. blsqbot: | wait, blsqbot answers on the channel even if I send the command in a private message? b_jonas: mroman: perhaps you want to change that so that it's easier to experiment with the bot without spamming the channel blsqbot: | That line gave me an error blsqbot: | That line gave me an error kspalaiologos: I've implemented bitops shim in asm2bf kspalaiologos: it's terrible but I kinda like it anyways b_jonas: is there also a function that indexes the array backwards? mroman: backwards you say mroman: you mean like negative indices? mroman: -1 being the last element? mroman: -2 the second last? b_jonas: no, more like (\l i -> l !! (length l - 1 - i)) b_jonas: so 0 is the index for the last element, 1 for the last but one b_jonas: as if you indexed the reverse of the list mroman: I mean you can always just reverse it mroman: but I don't think there's a builtin for that no b_jonas: !blsq "\""Q blsqbot: | ERROR: (line 1, column 6): blsqbot: | unexpected end of input blsqbot: | expecting "\"" b_jonas: !blsq """"Q b_jonas: !blsq `""`Q blsqbot: | ERROR: (line 1, column 6): blsqbot: | unexpected end of input blsqbot: | expecting "\"" mroman: !blsq "\'"Q mroman: " is \' b_jonas: !blsq "\'"Q b_jonas: !blsq "A\\B\'C'D" blsqbot: | "A\\B\"C'D" b_jonas: !blsq "A\\B\'C'D"Q blsqbot: | A\B"C'D mroman: no need to escape \ mroman: I think mroman: !blsq "a\b\c\n"Q blsqbot: | a\b\c b_jonas: !blsq "A\B\'C'D"Q blsqbot: | A\B"C'D b_jonas: !blsq "\"Q b_jonas: !blsq {"A""B"}0!! b_jonas: !blsq {"A""B"}1!! b_jonas: !blsq {"A""BC"}1!! blsqbot: | "BC" b_jonas: ok, so I don't need spaces b_jonas: !blsq "\\'"Q mroman: (You need to escape \ when it's ambigous) b_jonas: !blsq2 b_jonas: !blsq 3 mroman: and a char has no closing ' b_jonas: !blsq {"\'""\""'""!blsq {""}{3 0 ... 4}si"}{3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4}si blsqbot: | {"!blsq {" "\"" "\\" "'" "\"" "\"" "\\" "\"" "\"" "'" "\"" "\"" "!blsq {" "\"" "\"" "}{3 0 ... 4}si" "\"" "}{3 0 ... 4}si"} b_jonas: !blsq {"\'""\""'""!blsq {""}{3 0 ... 4}siQ"}{3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4}siQ blsqbot: | ["!blsq {", "\"", "\\", "'", "\"", "\"", "\\", "\"", "\"", "'", "\"", "\"", "!blsq {", "\"", "\"", "}{3 0 ... 4}siQ", "\"", "}{3 0 ... 4}siQ"] b_jonas: no wait, I need a concat there b_jonas: !blsq {"\'""\""'""!blsq {""}{3 0 ... 4}si\[Q"}{3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4}si\[Q blsqbot: | !blsq {"\'""\""'""!blsq {""}{3 0 ... 4}si\[Q"}{3 0 ... 4}si\[Q b_jonas: better b_jonas: !blsq {"\'""\""'""!blsq {""}{3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4}si\[Q"}{3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4}si\[Q blsqbot: | !blsq {"\'""\""'""!blsq {""}{3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4}si\[Q"}{3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4}si\[Q b_jonas: !blsq {"\'""\""'""!blsq {""}{3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4}si\[Q"}{3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4}si\[Q blsqbot: | !blsq {"\'""\""'""!blsq {""}{3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4}si\[Q"}{3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4}si\[Q mroman: looks like a quine b_jonas: yeah. it's a type of quine that I like to write because it's easy to write in most languages b_jonas: !blsq "2 2.+"pe mroman: !blsq 3ro1SH blsqbot: | "[1,2,3]" mroman: !blsq "o3L["ps blsqbot: | {__INTERNAL__:BlsqAutoBlock [BlsqIdent "L[",BlsqIdent "L[",BlsqIdent "L["]} mroman: such a mess but ok. mroman: !blsq 5hdCl mroman: !blsq 5hdClL[ mroman: This always confuses the noobs. b_jonas: you're saying that like a lot of people learn blsq b_jonas: or try to learn, at least mroman: sometimes somebody has a look at it mroman: but usually... int-e: mroman: Oh well. https://redmine.lighttpd.net/issues/2999 mroman: but pretty much nobody mroman: I think clock and Hendrik are still golfing in it mroman: but that's about it mroman: don't know of anybody else using it mroman: and almost never need hidden state for golfing. mroman: (it's usually more convenient to use the secondary stack I guess) mroman: b_jonas: but yeah. having achieved nothing in life. blsq is pretty much my only achievment so I may go overboard a bit with it. mroman: so blsq is pretty much my way to leave something in this world people will remember me for, even if it's just very few people. fizzie: b_jonas: Thanks. fungot's manual ignore list doesn't persist automatically and I forgot to set it after restarting it the other day. fungot: fizzie: actually i have seen in a few other things probably b_jonas: !blsq "3141592")pe blsqbot: | {ERROR: Burlesque: (_+) Invalid arguments!} b_jonas: !blsq "3141592"{pe}m[ blsqbot: | {ERROR: Burlesque: (_+) Invalid arguments!} mroman: you can't call pe on chars mroman: I think mroman: ps is not defined for chars b_jonas: how do I make a one-element list from a value? b_jonas: one-element block I mean mroman: !blsq "3141592"XX blsqbot: | {'3 '1 '4 '1 '5 '9 '2} mroman: like that? mroman: !blsq "3141592"XXri blsqbot: | {1 1 1 1 1 1 1} mroman: !blsq "3141592"peXX blsqbot: | {3 1 4 1 5 9 2} mroman: depends on your exact use case mroman: !blsq "3141592"riXX blsqbot: | {3 1 4 1 5 9 2} mroman: !blsq "a48cd"XX)Sh blsqbot: | {"a" "4" "8" "c" "d"} b_jonas: !blsq "3141592"1co{pe}m[ blsqbot: | {3 1 4 1 5 9 2} b_jonas: oh, that's even better b_jonas: 3141592XX b_jonas: !blsq 3141592XX blsqbot: | {3 1 4 1 5 9 2} b_jonas: !blsq {"\'""\""'""!blsq {""}301200100200300404XX}si\[Q"}301200100200300404XXsi\[Q blsqbot: | !blsq {"\'""\""'""!blsq {""}301200100200300404XX}si\[Q"}301200100200300404XX}si\[Q b_jonas: !blsq {"\'""\""'""!blsq {""}301200100200300404XX}si\[Q"}301200100200300404XX}si\[Q blsqbot: | {3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4} blsqbot: | {"\"" "\\" "'" "!blsq {" "}301200100200300404XX}si\\[Q"} b_jonas: !blsq {"\'""\""'""!blsq {""}301200100200300404XXsi\[Q"}301200100200300404XXsi\[Q blsqbot: | !blsq {"\'""\""'""!blsq {""}301200100200300404XXsi\[Q"}301200100200300404XXsi\[Q b_jonas: !blsq {"\'""\""'""!blsq {""}301200100200300404XXsi\[Q"}301200100200300404XXsi\[Q blsqbot: | !blsq {"\'""\""'""!blsq {""}301200100200300404XXsi\[Q"}301200100200300404XXsi\[Q b_jonas: !blsq {"\'""\""'""!blsq {""}301200100200300404XXsi\[Q"}301200100200300404XXsi\[Q blsqbot: | !blsq {"\'""\""'""!blsq {""}301200100200300404XXsi\[Q"}301200100200300404XXsi\[Q b_jonas: ok, that's a shorter quine b_jonas: [ 5#.3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4 j-bot: b_jonas: 2331592587604 b_jonas: !blsq 2331592587604 5dg blsqbot: | {3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4} b_jonas: !blsq 301200100200300404XX blsqbot: | {3 0 1 2 0 0 1 0 0 2 0 0 3 0 0 4 0 4} b_jonas: !blsq {"\'""\""'""!blsq {""}2331592587604 5dgsi\[Q"}2331592587604 5dgsi\[Q blsqbot: | !blsq {"\'""\""'""!blsq {""}2331592587604 5dgsi\[Q"}2331592587604 5dgsi\[Q b_jonas: !blsq {"\'""\""'""!blsq {""}2331592587604 5dgsi\[Q"}2331592587604 5dgsi\[Q blsqbot: | !blsq {"\'""\""'""!blsq {""}2331592587604 5dgsi\[Q"}2331592587604 5dgsi\[Q mroman: !blsq q"" blsqbot: | {""} mroman: not sure if this helps you though b_jonas: !blsq 42 {}j[+ blsqbot: | {42} b_jonas: mroman: is there a shorter way to write {}j[+ ? mroman: !blsq 42bx blsqbot: | {42} b_jonas: a way that works for any type of input value, not just for an integer b_jonas: bx thanks mroman: if you want to make a block out of a single element then bx mroman: !blsq "hi"bx blsqbot: | {"hi"} b_jonas: yes, that b_jonas: and is there one that pops two elements from the stack and puts them in a block of length 2 as well? b_jonas: !blsq 30 11 bx+] blsqbot: | ERROR: Burlesque: (+]) Invalid arguments! blsqbot: | {11} b_jonas: !blsq 30 11 bxj+] blsqbot: | {30 11} mroman: I don't think so. mroman: !blsq |[5 2 .+ 3 4 .+]| blsqbot: | {7 7} mroman: maybe this way could be shorter depending on what you're exactly doing mroman: unless you only have two numbers on the stack mroman: !blsq 30 11Cl blsqbot: | {30 11} mroman: then you can do this b_jonas: um, what are |[ and ]| are they like the postscript [ and ] ? mroman: well... compare mroman: !blsq {"hi"<-} blsqbot: | {"hi" <-} mroman: !blsq |["hi"<-]| blsqbot: | {"ih"} mroman: {} doesn't evaluate inbetween mroman: |[ ]| does b_jonas: they look like the postscript [ and ] then mroman: technically speaking |[ pushes a marker to the stack and |] collects everything up to that marker mroman: !blsq |[Cl blsqbot: | {|[} mroman: as you can see here. mroman: (the marker that |[ pushes is |[ itself) b_jonas: but those can be hard to use in a stack language because you may need annoying temporary variables mroman: !blsq 10{q?iq?d}M- blsqbot: | {11 9} mroman: !blsq 10q?irs blsqbot: | That line gave me an error mroman: yeh. blsq has many ways to deal with "i need this data later" or "don't destroy this during temporary calculations" mroman: most obvious one would be using variables mroman: but there's also stuff like M-, rs and C! etc. mroman: or secondary stack, hidden state (usable but not recommended) b_jonas: what is rs ? it doesn't seem to be in the reference b_jonas: is there an index to the reference that is sorted by command name (or name of the token for things that aren't commands)? mroman: ah probably not mroman: currently the "best" documentation is the moonpage+the language reference combined mroman: I'm working towards documenting everything in the moonpage mroman: https://mroman.ch/burlesque/docs/BLSQ.html#blockaccess b_jonas: !blsq 10q? blsqbot: | ERROR: (line 1, column 5): blsqbot: | unexpected end of input b_jonas: !blsq 10q blsqbot: | ERROR: (line 1, column 4): blsqbot: | unexpected end of input blsqbot: | expecting white space, "o", "begin asm", "begin lisp", "fancy", "%", "set", "g", "get", "s", "S", "call", "proc", "m{", "f{", "r{", "q", "{", "\"", "-", digit, "'", "(", "y", "k", "`" or "``" mroman: q is a prefix mroman: a syntax prefix to be precise mroman: it's neither a special nor a modifier b_jonas: but aren't the prefixes ) and : and @ mroman: Those are in BLSQ-Terminology called specials mroman: !blsq {1 2 3 4}")"ps(?i)[+e! blsqbot: | {2 3 4 5} mroman: so ) is not a syntax prefix mroman: q is a syntax prefix b_jonas: this language is confusing mroman: ) is a special and a runtime prefix mroman: !blsq ")?i"ps blsqbot: | {) ?i} b_jonas: !blsq 7rz blsqbot: | {0 1 2 3 4 5 6 7} b_jonas: !blsq 7rz{}m[ blsqbot: | {0 1 2 3 4 5 6 7} mroman: !blsq {1 2}{.+}rs mroman: runstack is basically an eval with a predefined stack mroman: unlike e! mroman: !blsq 1 2{Cl}e! blsqbot: | {1 2} mroman: !blsq 1 2{3 4}{Cl}rs blsqbot: | {{4 3}} mroman: !blsq 1 2{3 4}{it}rs mroman: the top of the stack for rs is on the left apparentely mroman: there's also mroman: !blsq 5{2?*}GZ blsqbot: | {0 2 4 6 8 10} mroman: rz{...}m[ is basically GZ b_jonas: !blsq 31415XX blsqbot: | {3 1 4 1 5} b_jonas: !blsq 31415XX {J}m[ blsqbot: | {3 3 1 1 4 4 1 1 5 5} b_jonas: !blsq 31415XXe! b_jonas: !blsq 2 b_jonas: !blsq 3vv blsqbot: | Ain't nobody got output fo' that! b_jonas: mroman: what's the foreach function, which takes a list block and a code block, and for each element of the list block, pushes it to the stack then runs the code block? mroman: you mean like uhm mroman: !blsq {1 2 3})?ip^ mroman: but basically this is just a map followed by "push elements to stack" mroman: but what's exactly the difference between map and foreach? mroman: so that you have access to past results? b_jonas: mroman: map collects the results from the stack into an array mroman: ah. there's no foreach. But you can do m[ followed by p^ or ^p depending on what order you want mroman: !blsq {1 2 3 4}{++}pa blsqbot: | {1 3 6 10} mroman: and maybe use pa in some cases I don't know mroman: !blsq {1 2 3 4}{?i}pa blsqbot: | {{2} {2 3} {2 3 4} {2 3 4 5}} b_jonas: !blsq 17 50 #a #b `a blsqbot: | ERROR: Can't load non hidden state! Sorry. b_jonas: what is the syntax to store to a named variable and load from it? mroman: !blsq %foobar=5 %foobar? mroman: if it's a constant mroman: otherwise: b_jonas: I want to pop the value from the stack mroman: !blsq 5?i"foobar"sv %foobar? mroman: sv is "setvar" b_jonas: !blsq 17 50 "a"sv "b"sv %a? %a? b_jonas: and are there shortcuts for a few short variables? b_jonas: !blsq 17 50 "a"sv "a"sv %a? %a? mroman: yep there are mroman: !blsq 5?is0"haha"g0 blsqbot: | "haha" b_jonas: !blsq 17 50 s0 s1 g0 g0 b_jonas: !blsq 17 50 s0 s0 g0 g0 b_jonas: where is the documented? mroman: there are s0 up to s9 for set and g0 to g9 for get. mroman: I don't think they were documented. mroman: or maybe they were mroman: but lref.html is a recovered old version b_jonas: !blsq %a={10.*} |[ 4 %a! 2 %a! ]| blsqbot: | {40 20} b_jonas: are there shortcuts for running a named variable too? b_jonas: !blsq {10.*}s0 |[ 4 e0 2 e0 ]| blsqbot: | {4 ERROR: Unknown command: (e0)! 2 ERROR: Unknown command: (e0)!} b_jonas: !blsq {10.*}s0 |[ 4 c0 2 c0 ]| blsqbot: | {4 ERROR: Unknown command: (c0)! 2 ERROR: Unknown command: (c0)!} b_jonas: !blsq {10.*}s0 |[ 4 r0 2 r0 ]| blsqbot: | {4 {0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 8 mroman: !blsq {10.*}so 3G0 blsqbot: | ERROR: Unknown command: (G0)! b_jonas: !blsq {10.*}s0 |[ 4 G0 2 G0 ]| blsqbot: | {4 ERROR: Unknown command: (G0)! 2 ERROR: Unknown command: (G0)!} mroman: !blsq {10.*}S0 3g0 blsqbot: | {10 .*} blsqbot: | {10 .*} mroman: nope I don't think so b_jonas: are there builtins to load or store a single value deep in the stack, by depth? b_jonas: pick and pock mroman: not that I know mroman: except using Cl!! mroman: or something like that mroman: but that's a trivially addable one :D b_jonas: I'm not sure if those are what I want anyway b_jonas: I don't know what I want, it's a strange language, works in strange ways mroman: oh wait mroman: there's mv mroman: or something like that mroman: yep. it's in the lref.html under MV with the name "Move" mroman: but it moves the element b_jonas: !blsq |[ 'a'b'c'd'e'f 4MV ]| blsqbot: | {'a 'c 'd 'e 'f 'b} b_jonas: is there an unmove that hides the element back? mroman: Can't remember one and I can't find something that would look like that in the source code mroman: you're free to request one through the github issues tho mroman: there's an XSwap for some cases mroman: !blsq 1 2 3x/ mroman: !blsq 1 2 3x/x/ mroman: !blsq 1 2 3x/x/x/ mroman: hm. nope. not even that. mroman: !blsq 1 2 3o4x/ b_jonas: is there a way to set an element of a block by index, whether in place or by getting a copy of the block? mroman: there's a setat builtin b_jonas: !bldq "hello"XX b_jonas: !blsq "hello"XX blsqbot: | {'h 'e 'l 'l 'o} b_jonas: !blsq "hello"XX 'a1sa blsqbot: | {'h 'a 'l 'l 'o} b_jonas: !blsq "hello"XX 9 2.+bx1sa blsqbot: | {'h {11} 'l 'l 'o} b_jonas: ok, that works mroman: there's also d! and D! for nested blocks mroman: !blsq {"abc""def"}{1 0}d! mroman: !blsq {{'a'b'c}{'d'e'f}}{1 0}d! b_jonas: what other methods are there that you can do on named variables, besides "v"vs %v= %v? %v! b_jonas: I mean "v"sv %v= %v? %v! b_jonas: are there other suffixes for %v b_jonas: !blsq 41 10 'asv 'bsv 'agv 'agv b_jonas: oh, that can work mroman: uhm... that depends on what mode mroman: in fancy mode there's also "set X to Y" mroman: stuff like that mroman: there's also scoping rules btw b_jonas: sv and gv don't seem to be in the reference or the moon mroman: the reference is OLD mroman: and the moonpage i started from scratch but I haven't come too far yet mroman: there are also many more map shortcuts and stuff mroman: and things like b_jonas: is there one that appends to a variable (when that variable contains a block)? mroman: !blsq {1 2 3}m{3?*} blsqbot: | {3 6 9} b_jonas: scoping rules? mroman: nothing directly works on variables mroman: you'll have to get and set mroman: blsq has scopes yes. mroman: blsq has function scopes to be specific b_jonas: why am I trying to figure all this out again? b_jonas: I don't know mroman: !blsq %____FILE? blsqbot: | "/dev/irc" mroman: !blsq nmPp%___FILE? mroman: !blsq nmPp%___FILE?P_%__FILE? mroman: !blsq nmPp%___FILE?P_%___FILE? mroman: !blsq 9s0nmPp8s0g0P_g0 mroman: in one scope 0 is bound to 9 and in the other it is bound to 8 mroman: i.e. when you call an actual function you enter a new scope mroman: !blsq fancy def hi: \set X to {9} bar() \get X end def bar: \set X to {10} \get X end end %hi! mroman: there you go mroman: in the scope of bar X is 10 in the scope of hi it's 9 mroman: unless you cheat mroman: !blsq fancy def hi: \set X to {9} bar() \get X end def bar: \P_ \set X to {10} \nm \Pp end end %hi! mroman: like that. Now you've altered X in the scope of bar to 10 mroman: it's not recommended to alter to callee's scope but you can mroman: huge code smell mroman: if this were serious programming mroman: but this is interesting mroman: !blsq set 0 to 5 blsqbot: | "Int" blsqbot: | ERROR: Unknown command: (t )! mroman: !blsq set 0 to {5} blsqbot: | Ain't nobody got output fo' that! mroman: !blsq set 0 to {5} g0 mroman: fuck blsq grammar mroman: insane mroman: b_jonas: you can actually use call to call functions mroman: !blsq %f={?i} 5 call f mroman: !blsq (%=5) blsqbot: | __INTERNAL__:BlsqAssign "" (BlsqInt 5) False False mroman: using () is a good way to inspect what's going on behind the scenes mroman: !blsq (%f^) blsqbot: | __INTERNAL__:BlsqCall "f" True mroman: !blsq (%f?) blsqbot: | __INTERNAL__:BlsqGet "f" mroman: !blsq (%f!) blsqbot: | __INTERNAL__:BlsqCall "f" False mroman: the boolean for call determines whether a new scope should be created mroman: and command of the year since 7 years is ^/ (DupSwap) zzo38: I would thought a better way to implement pictures in HTML would have been where the "inline" attribute is a hint (not a requirement) to make it inline, depending on the user settings, where 0 is the default and means not inline, 1 or 2 means inline depending on the threshold specified by the user (at least 1, at least 2, or never). zzo38: For icons, a different way would be used, which is a "icon" attribute on a or element. If the browser is willing and able to display the icon and the user has enabled it, then the icon is displayed instead of the text that it contains (for or or ). int-e: Oh, my lighttpd bug report got a reaction and a proposed patch :) zzo38: What bug report is that? int-e: zzo38: https://redmine.lighttpd.net/issues/2999 ... zzo38: My character in the GURPS has five eyes, sharp beak, antennas, scales, feathers to fly, four fingers instead of five, spit poison, and eat blood. What will such monstrous creature be called and how to make up the language based on such physiology? Maybe the former question can be answered by first figuring out the latter question and then making the words into Old English and then into modern English from that. kingoffrance: it seems a chimerical hippogriffin sphinx-ish with some "five eyes" intelligence agencies thrown in kingoffrance: beak is perhaps horus IIRC kingoffrance: the rest i dunno kingoffrance: i dunno, i think if you just merge other things, the end result is monstrous kingoffrance: or at least, to the medieval mind, such multi-part things are either freak animals and/or gods kingoffrance: i mean find creatures with each individual characteristic, or nethack some creatures use "scientific names" (or pseudo-sounding anyways) kingoffrance: arguably anything in latin probably sounds more serious zzo38: I am not a biologist and do not know how to make up these "scientific names" zzo38: But, that can be a possibility, I suppose. (I don't know so much Latin either) kingoffrance: that is a problem i had with introduction to biology class in school: i thought the categories were arbitrary, why memorize them, why not learn the scientific names? they did finally almost admit as such kingoffrance: i.e. that things sometimes get "moved" when a better "fit", or when most of a prior group is gone, then it makes less sense to have only a few things still around, etc. kingoffrance: so ive always been in favor of enumerating all the characteristics and then working out "groupings" afterwards kingoffrance: rather than trying to shove into a group first kingoffrance: i dont, but looking up english in dictionaries should provide pointers kingoffrance: s/i dont/i dont either/ kingoffrance: i should say, i thought the specie names made more sense to learn; the other hierarchy names is also somewhat "scientific" so "scientific names" probably applies to them all zzo38: They can speak English too, although perhaps not as well as human speeching English, since English is a human speech. (Also humans speeching their language won't as well either) oerjan: huh HackEso fell off fungot's ignore list? fungot: oerjan: yea. i was talking about here, habsheim air show oerjan: oh well it seems the ZWSP stops it oerjan: `echo fungot fungot: oerjan: smoz, you still you don't feature charlie in your videos more, and several others convicted of man slaughter HackEso: fungot oerjan: apparently has been fixed oerjan: ^style ct fungot: Selected style: ct (Chrono Trigger game script) oerjan: it's a New Year tradition to watch it live <-- he's probably exempt from being austrian oerjan: i'm exempt from not watching tv and being asleep oerjan: although i do remember it. as well as the ski jumps in garmish-partenkirchen, do they still do that? oerjan: apparently. kmc: fungot: happy new year fungot: kmc: but, we are far outnumbered! okay! no...! help! oerjan: arguably anything in latin probably sounds more serious <-- itym "QVIDQVID LATINE DICTVM SIT, ALTVM VIDETVR" hth zzo38: I think it should be Latin if you are writing in Latin, and if you are making up new words in English then probably it should be English instead (unless there are no suitable word, perhaps) zzo38: Of course, there are a lot of Latin words in English anyways, but English has its own words, too. zzo38: (There are words from many language used in English. And it seems much more rarely, some people just make up a word from nothing, perhaps "cromulent" is such thing) zzo38: (and it is listed in Wiktionary) kmc: yes, it was made up to sound like a real word but is "intentionally morphologically opaque" kmc: unlike "embiggen" which is a humorous example of a standard construction kmc: there are various attempts to keep Latin up to date and usable in the modern world kmc: and even a Vicipaedia: https://la.wikipedia.org/wiki/Vicipaedia:Pagina_prima zzo38: Yes, I think it is not so bad that you can continue to read/write Latin. kmc: zzo38: it seems good to me, and definitely esoteric kmc: I am interested in mycology, which involves learning a lot of species names kmc: so it is nice to know a few latin words zzo38: Yes, it is good to learn many things, Latin and otherwise. kmc: one complication is that they keep moving the fungi around to different genera kmc: as DNA testing reveals that two things thought to be closely related aren't really, or vice versa kmc: so a lot of mushrooms have got many different historical names zzo38: Yes, I think I read about that kmc: it's only recently that DNA sequencing has become cheap enough to sequence lots of obscure mushrooms that aren't of direct importance to humanity kmc: zzo38: do you like mushrooms? looking for them can be fun zzo38: I don't like to eat mushrooms, but otherwise neutral kmc: I have been looking around the city for mushrooms every day kmc: i always find plenty of different kinds kmc: although rarely ones which are worth eating kmc: my wife made some yellow dye for wool and silk out of mushrooms zzo38: Do you know much of linguistics of non-human physiology? oerjan: . o O ( it's on the tip of my tongues ) kingoffrance: i know nothing of mushrooms, but i chop them up and put in soup, on sandwiches, etc. i am pro-mushroom despite being a noob kingoffrance: i of course just purchase at store, i dont go hunting kingoffrance: i dont think i would eat them alone though kingoffrance: pizza of course kmc: zzo38: no kmc: mushrooms are good on pizza kmc: or pasta kmc: or lots of other things kmc: i had an amazing mushroom risotto last weekend kmc: at a fancy french place my girlfriend took me to kmc: i don't eat mushrooms raw though kmc: it's not safe kmc: even for common button mushrooms from the store it's said to cause increased risk of cancer (but what isn't) kmc: more to the point though the taste and texture is nasty when they are not cooked kmc: a good way to cook mushrooms is to slice them, heat them in a dry pan to get rid of some of the water, then sautee them in butter imode-ruby: I see you saw the same video I did today lmao. imode-ruby: use water to sautee them. kmc: did I? kmc: i learned that from Mushrooms Demystified kmc: a book by David Arora kmc: and i'm not sure that sauteeing things in water is possible imode-ruby: america's test kitchen has a video about cooking mushrooms. imode-ruby: got recommended to me. imode-ruby: https://www.youtube.com/watch?v=XLPLCmwBLBY this one. kmc: here's another word which sounds like a Simpsons joke, but it's actually from the title of an ancient Roman political satire https://en.wiktionary.org/wiki/pumpkinification int-e: fungot: Do you think 13 barrels are possible? fungot: int-e: you! take! we find! int-e: ^style fungot: Available: agora alice c64 ct* darwin discworld enron europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack oots pa qwantz sms speeches ss wp ukparl youtube int-e: ^style ct fungot: Selected style: ct (Chrono Trigger game script) int-e: (context is http://www.research.ibm.com/haifa/ponderthis/challenges/January2020.html ) zzo38: I have heard of a computer with speech once misinterpreted someone's middle initial as a number. Their middle initial was M; do any kings or popes or someone else using numbers in this way have that many? kingoffrance: fungot: why cant i play ct as spekkio? what kind of open-ended multiple endings gameplay is that? fungot: kingoffrance: i must ponder this turn of events, it can have a powerful effect on time. ask the one to bring back lost loved ones... it's what that guy in medina, a village near the mystic mountain" 65,000,000 b. c.? yes. no. int-e: https://twitter.com/OtherDanOBrien/status/1210741711313354752 is cool kingoffrance: well, he's considering it zzo38: All The Tropes says the official motto of Hells Angels is "When we do right, nobody remembers. When we do wrong, nobody forgets." However, I could not find that on Wikipedia or elsewhere. Do you know if it is true or not? myname: maybe they did right kspalaiologos: he's back myname: he always will be, i guess myname: i don't understand why he's so destructive int-e: I'm imagining a grumpy old man of 13 years of age... :) wib_jonas: int-e: he's a BBC Norvegian village wib_jonas: fizzie: in HackEso, can you please install the packages {unzip, zip, p7zip} so we can extract compressed archives more easily? this caused us some difficulty at https://esolangs.org/logs/2019-07.html#lVmb , so those utils would help. and they're not big. wib_jonas: `? interps wib_jonas: `? ibin HackEso: interps? ¯\(°​_o)/¯ HackEso: ibin? ¯\(°​_o)/¯ wib_jonas: kspalaiologos: /hackenv/interps also has some directories in which interpreter stuff are installed, so you can create a directory there too rather than lib if you prefer kspalaiologos: ``` ls /hackenv/lib/kps HackEso: bconv \ bfasm \ bfi \ bfi-rle \ bfintd \ bfmake \ bfpp \ derle.pl \ labels.pl \ strip.pl wib_jonas: I didn't remember this a few days ago when you asked for a directory, because lib and share are the more standard unixy thing, whereas interps was some old style HackEgo EgoBot emulation thing kspalaiologos: ``` cp /hackenv/lib/kps/bfi /hackenv/interps/ HackEso: No output. kspalaiologos: how do you use it HackEso: Usage: bfi src.b kspalaiologos: not surprised HackEso: asmbf-1.2.6.tar.gz \ asmbf-1.2.7 \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ output.b \ paste \ program \ spline \ spout \ test \ test.sh \ what.tar.gz kspalaiologos: `bfi output.b HackEso: Hello World! fizzie: `` which zip; which unzip; which p7zip HackEso: ​/usr/bin/zip \ /usr/bin/unzip \ /usr/bin/p7zip fizzie: wib_jonas: Done. wib_jonas: thanks wib_jonas: fizzie: oops, it seems the 7z utility is in the p7zip-full package. debian is confusing with its nice fine-grained packages. wib_jonas: I thought p7zip-full was the GUI component -- nope fizzie: Right. It was on the recommended list. Added that as well. wib_jonas: thanks wib_jonas: ``` 7z HackEso: ​ \ 7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 \ p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,1 CPU QEMU Virtual CPU version 2.1.3 (623),ASM) \ \ Usage: 7z [...] [...] \ [<@listfiles...>] \ \ \ a : Add files to archive \ b : Benchmark \ d : Delete files from archive \ e : Extract files from archive (without using directory nam wib_jonas: unzip is the most important, but this can help wib_jonas: ``` 7z l asmbf-1.2.6.tar.gz HackEso: ​ \ 7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 \ p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,1 CPU QEMU Virtual CPU version 2.1.3 (623),ASM) \ \ Scanning the drive for archives: \ 1 file, 41301 bytes (41 KiB) \ \ Listing archive: asmbf-1.2.6.tar.gz \ \ -- \ Path = asmbf-1.2.6.tar.gz \ Type = gzip \ Headers Size = 10 \ \ Date Time Attr Size Compressed Name \ ---------------- wib_jonas: ``` 7z l asmbf-1.2.6.tar.gz | paste HackEso: https://hack.esolangs.org/tmp/paste/paste.4903 wib_jonas: ``` rm -v /hackenv/tmp/paste/paste.4903 HackEso: removed '/hackenv/tmp/paste/paste.4903' fizzie: As for interps, it's kind of related to the whole `! / ibin thing, though of course in the end it's just a directory like any other. The short version of that story is, /hackenv/bin/! runs commands from /hackenv/ibin/*, which typically (but not always) use binaries stored in directories under /hackenv/interps/*. HackEso: ​! is a syntax used in Haskell and Prolog for solving evaluation order problems. HackEso: ​`! emulates the ! command of our former bot EgoBot. You write `! then the name of the language then a program, and it runs the program you give and returns the result. We used to use it to test out esoprograms in-channel all the time, but the set of included esolangs is fairly old now and so it's rarely used. fizzie: Not sure how expected it would be for new language interpreters to integrate with `!. fizzie: `` ls ../ibin HackEso: 1l \ 2l \ 7 \ adjust \ asm \ axo \ bch \ befunge \ befunge98 \ bf \ bf16 \ bf32 \ bf8 \ bf_txtgen \ boolfuck \ brachylog \ c \ cintercal \ clcintercal \ cxx \ dimensifuck \ forth \ glass \ glypho \ haskell \ help \ java \ k \ kipple \ lambda \ lazyk \ linguine \ lua \ malbolge \ pbrain \ perl \ qbf \ rail \ rhotor \ sadol \ sceql \ sh \ slashes \ trigger \ udage01 \ underload \ unlambda \ whirl fizzie: Chances are not all of those even work. wib_jonas: fizzie: after I suggested that to kspalaiologos, someone explained that it wouldn't be appropriate because bfasm isn't an interpreter, it compiles a language to brainfuck and gives brainfuck source code as output wib_jonas: so only that wrapper that executes the resulting bf code should be integrated there kspalaiologos: that's right. kspalaiologos: but one could wire them up so assembly code is directly ran kspalaiologos: gimme a moment fizzie: Well, that wrapper would be in ibin, but all the underlying machinery can well be under interps. If you wanted to integrate with `!, anyway. Whether that makes sense is subjective. kspalaiologos: I don't seem to get what you're sying kspalaiologos: what's `!? kspalaiologos: `! bfi HackEso: ​/hackenv/bin/!: line 4: /hackenv/ibin/bfi: No such file or directory kspalaiologos: ok I know wib_jonas: https://esolangs.org/wiki/HackEso#Interpreters explains it... nope, it doesn't kspalaiologos: ``` cat <<<"asmbf && bfi /hackenv/tmp/output.b && rm -f /hackenv/tmp/output.b" > /hackenv/ibin/asmbf HackEso: No output. kspalaiologos: `! asmbf out .0 HackEso: ​/hackenv/bin/!: line 4: /hackenv/ibin/asmbf: Permission denied \ /hackenv/bin/!: line 4: exec: /hackenv/ibin/asmbf: cannot execute: Permission denied kspalaiologos: ``` chmod +x /hackenv/ibin/asmbf HackEso: No output. kspalaiologos: `! asmbf out .0 HackEso: Usage: bfi src.b kspalaiologos: 't seem to work wib_jonas: it's all ancient history, `! started as emulating EgoBot's interpreters when HackEgo was introduced, but all that was before I came here kspalaiologos: why ain't it working HackEso: asmbf-1.2.6.tar.gz \ asmbf-1.2.7 \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ output.b \ paste \ program \ spline \ spout \ test \ test.sh \ what.tar.gz kspalaiologos: there clearly is output.b HackEso: cwd? No such file or directory HackEso: cd? No such file or directory HackEso: ​/hackenv/tmp kspalaiologos: ``` cat <<<"asmbf && bfi output.b && rm -f output.b" > /hackenv/ibin/asmbf HackEso: No output. kspalaiologos: (ugly shit but should work) kspalaiologos: `! asmbf out .0 HackEso: No output. kspalaiologos: ``` ls HackEso: asmbf-1.2.6.tar.gz \ asmbf-1.2.7 \ banana.txt \ bfi \ compiled_brachylog.pl \ just \ karma \ le \ paste \ program \ spline \ spout \ test \ test.sh \ what.tar.gz kspalaiologos: ``` cat <<<"asmbf && bfi output.b" > /hackenv/ibin/asmbf HackEso: No output. kspalaiologos: `! asmbf out .0 HackEso: No output. kspalaiologos: `bfi output.b HackEso: No output. kspalaiologos: now i'm confused kspalaiologos: `cat output.b HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] kspalaiologos: whoa, what kspalaiologos: `! asmbf "out .0" HackEso: No output. kspalaiologos: how do you use this `!? HackEso: ​?!? No such file or directory HackEso: ​! is a syntax used in Haskell and Prolog for solving evaluation order problems. fizzie: `! befunge 0"siht ekil">:#,_@ HackEso: like this fizzie: I mean, `! itself literally just runs a binary from ibin. But mostly the assumption is for that to interpret the contents of its argument in some language or another. kspalaiologos: don't get it fizzie: You don't *need* to integrate with `!, as the help text mentions, it's kind of stale now. kspalaiologos: why doesnt it work though fizzie: What you put in ibin/asmbf should work as far as the wrapper goes. kspalaiologos: ``` asmbf out .0 HackEso: No output. kspalaiologos: ``` bfi output.b kspalaiologos: it should work kspalaiologos: but it doesnt fizzie: `` asmbf 'out .0'; cat output.b HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>[-]>++++++[<++++++++>-]<.[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] fizzie: `` \! 'asmbf out .0'; cat output.b HackEso: ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] fizzie: Hm, well, that's kind of odd. HackEso: ​`! emulates the ! command of our former bot EgoBot. You write `! then the name of the language then a program, and it runs the program you give and returns the result. We used to use it to test out esoprograms in-channel all the time, but the set of included esolangs is fairly old now and so it's rarely used. fizzie: Oh, your wrapper just executes "asmbf" with no arguments. fizzie: That's why it doesn't work. fizzie: There's nothing in ibin/asmbf to use its command line for anything. fizzie: `sled /hackenv/ibin/asmbf//s|asmbf|asmbf "$@"| HackEso: ​/hackenv/ibin/asmbf//asmbf "$@" && bfi output.b fizzie: `` \! 'asmbf out .0'; cat output.b HackEso: 0+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>[-]>++++++[<++++++++>-]<.[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<] fizzie: `! asmbf out .0 fizzie: There you go. kspalaiologos: so it takes input from args kspalaiologos: not stdin as I expected wib_jonas: there's some sort of wrapper invoked by many of the interpreters in ibin that bridge that wib_jonas: it's a set of arcane shell scripts kspalaiologos: which one fizzie: Yes, there's a canonical set of helper shell functions in /hackenv/lib/interp that many ibin/* interpreters use to turn the arguments into either stdin or a file. kspalaiologos: I want to see the arcane fizzie: Depending on what the underlying interpreter wants. kspalaiologos: ``` ls /hackenv/lib/interp fizzie: But of course in your case bin/asmbf wants command-line arguments too, so those aren't useful. HackEso: ​/hackenv/lib/interp kspalaiologos: helpful as heck fizzie: It's just one file they all source, https://hack.esolangs.org/repo/file/tip/lib/interp kspalaiologos: hackeso pls wib_jonas: ``` /bin/ls -abF /hackenv/ibin HackEso: ​./ \ ../ \ 1l* \ 2l* \ 7* \ adjust* \ asm* \ asmbf* \ axo* \ bch* \ befunge* \ befunge98* \ bf* \ bf16@ \ bf32@ \ bf8@ \ bf_txtgen* \ boolfuck* \ brachylog* \ c* \ cintercal* \ clcintercal* \ cxx* \ dimensifuck* \ forth* \ glass* \ glypho* \ haskell* \ help* \ java* \ k* \ kipple* \ lambda* \ lazyk* \ linguine* \ lua* \ malbolge* \ pbrain* \ perl* \ qbf* \ rail* \ rhotor* \ sadol* \ sceql* \ sh* \ slashes* \ trigger* \ udage01* \ underload wib_jonas: choose one of those kspalaiologos: hm so maybe malbolge kspalaiologos: ``` at /hackenv/ibin/malbolge wib_jonas: ``` cat /hackenv/ibin/malbolge HackEso: bash: at: command not found HackEso: ​#!/bin/sh \ . ${HACKENV-/hackenv}/lib/interp \ interp_file ${HACKENV-/hackenv}/interps/malbolge/malbolge.bin kspalaiologos: who would give an elf binary this extension kspalaiologos: but it's interesting nonetheless fizzie: Why not? It's a binary. kspalaiologos: .bin or .hex is usually a flat binary kspalaiologos: while elf isn't quite a flat executable fizzie: It's all a matter of convention. kspalaiologos: possibly fizzie: `` ls /hackenv/interps/befunge # as well HackEso: bef.bin \ bef.c \ USED_VERSION wib_jonas: no, a flat binary uses the extension .com kspalaiologos: I would disagree kspalaiologos: not only the .com extension kspalaiologos: can we change the featured language? kspalaiologos: maybe pick another one randomly from given pool kspalaiologos: of submissions/candidates fizzie: That's already how it works. https://esolangs.org/wiki/Esolang:Featured_languages/Candidates documents the process. fizzie: (The "Every so often" is measured in years, though.) kspalaiologos: https://esolangs.org/wiki/GolfSpace kspalaiologos: A leftover? fizzie: I only cleaned up the recently created ones, that didn't even attempt to make a joke. There's a lot of A contributions left. kspalaiologos: can we end the regin of Thue? fizzie: I don't know, it's been featured for such a short time so far. fizzie: We featured brainfuck from 2013 to 2019. fizzie: My personal preference is still to go through the Befunge article with a fine-toothed comb and then feature that, but I never seem to get around to it. (Though the article wasn't as unpolished as I remembered it being, last I checked.) b_jonas: fizzie: ah yes, good thing you mention it b_jonas: the Underload article is in a good state, so that might be the most solid candidate fizzie: Huh, I thought we had already featured Underload, but apparently not. fizzie: It's a solid choice, and maybe a new decade is a good excuse for a new featured language. b_jonas: nah, we should probably wait until Thue has been featured for a year b_jonas: I wonder if I should leave Befunge on the candidates page, but without my endorsement, just for the feature paragraph b_jonas: I think I will, and if you don't like it, you can just revert the page kspalaiologos: nopfunge is interesting b_jonas: there are also some interesting ais523 languages that I can propose next, but there's a limit of one proposal per person kspalaiologos: so if it's turing complete kspalaiologos: can one translate brainfuck to it? kspalaiologos: doesn't seem doable though b_jonas: technically you can, except for the IO kspalaiologos: what about the "infinite" memory kspalaiologos: and branching kspalaiologos: especially conditional one kspalaiologos: maybe my mind is constr LKoen: "unconditional branching" sounds like an alien concept kspalaiologos: ^ jmp %somewhere kspalaiologos: it's quite simple in nopfunge I believe kspalaiologos: also, as the minsky machine has just two registers b_jonas: the infinite memory is encoded in the two coordinates of the program counter of Nopfunge. there's a double-exponential blowup, so if you need n bytes of memory in brainfuck, the program counter coordinates will have 2**O(n) bits and will be of size 2**2**O(n) kspalaiologos: ** is exponentation? b_jonas: brainfuck is deterministic, the decisions corresponding to these deterministic branches will happen in the translated program kspalaiologos: it's interesting though b_jonas: again, no IO b_jonas: so it's brainfuck without the . or , statements kspalaiologos: 20 brainfuck cells, the minimum to run asm2bf kspalaiologos: will result in 2**2**20 bytes required b_jonas: there's a big O in it b_jonas: and it's not 2**2**20 bytes kspalaiologos: how much is it? b_jonas: you never explicitly store the periodic code space, because it's periodic b_jonas: 2**2**O(n) is how large the program counter will grow b_jonas: that's not how large the source code is kspalaiologos: grow or reach? b_jonas: what's the difference? kspalaiologos: if the pointer will reach at most 2**2**O(n) the size is equal to square of it obviously kspalaiologos: (implying that it'll be a square) b_jonas: and of course you can set n to 20 only if it's fixed size brainfuck cells LKoen: oh my god b_jonas: the size of the imaginary playfield, yes, but you don't have to store that anywhere LKoen: "2**2**O(n)" o___O b_jonas: because it's a periodic playfield b_jonas: you only store one period, or two if you wish b_jonas: and the two coordniates of the program counter, which each have 2**O(n) bits kspalaiologos: I understand (a bit) now b_jonas: of course if your brainfuck program is one that runs forever and requires unbounded memory, then the translation will require unbounded memory too kspalaiologos: it's way more than 64 bits can hold kspalaiologos: not even trhing kspalaiologos: but a very nice concept isn't it kspalaiologos: maybe we should improve the minsky machine article kspalaiologos: because it's not helpful at all kspalaiologos: I seem to understand the topic so I may take on it later b_jonas: hmm yes, that's a good point kspalaiologos: because in practice it serves no information b_jonas: neither it nor the Fractran article gives a proof of Turing-completeness b_jonas: not even for many counters b_jonas: kspalaiologos: it does give some information. it links to useful books. b_jonas: I put one of those books there, one where I read that proof kspalaiologos: actually minsky machine is really interesting kspalaiologos: and does it mean that two celled brainfuck is also turing complete? kspalaiologos: it's mindblowing kspalaiologos: how for example do you calculate modulus of a number on this two register machine or two cells brainfuck b_jonas: no, I don't think so b_jonas: but brainfuck with a fixed constant number of bigint cells is Turing-complete b_jonas: https://esolangs.org/wiki/Brainfuck#Computational_class says that 3 cells are enough kspalaiologos: two bigint cells kspalaiologos: not two b_jonas: three for Brainfuck int-e: you need one extra for conditionals b_jonas: two integers is enough for Turing-completeness for a Minsky machine, but requires double-exponential slowdown; three counters or more for a Minsky machine requires only an exponential slowdown kspalaiologos: if brainfuck had a digit near instruction kspalaiologos: a fixed digit kspalaiologos: and no pointer movement' kspalaiologos: (it seems like more constraining) kspalaiologos: it would be turing complete aswell with two cells b_jonas: what is a "digit near instruction"? kspalaiologos: 3+4- => will increment cell 3 and decrement cell 4 b_jonas: but what control flow do you have? the control flow instructions are the real difference. you can just use < and > to choose cells int-e: Hmm? Why can't you translate that to >>>+>-<<<> and << are implementable just using */ so it may be possible to have two "stacks" on this brainfuck variant kspalaiologos: so it's actually a PDA kspalaiologos: but it has two stacks kspalaiologos: so it's a turing machine kspalaiologos: but it makes no sense kspalaiologos: to extract a value off the stack one needs modulus kspalaiologos: and it's impossible to extract it using just three cells kspalaiologos: the proof has been made using collatz function kspalaiologos: interesting arseniiv: (unrelated) how do you represent cell complexes of arbitrary dimension? I’d use a dictionary from cells to their default orientations (in terms of default orientations of their boundary cells, downto points which are oriented unconditionally as e. g. positive) and then some dictionaries to represent the incidence, like boundaries and coboundaries, or just a plain dump of all incident cells for each of them, but which of these choices arseniiv: ave a chance to be the most practical?.. arseniiv: default orientations would be useful to supplement the incidence info arseniiv: then one would be able to represent oriented paths etc. arseniiv: also there should be a quirk distinguishing internal orientations (the usual ones) and external ones (like in pseudovectors vs. vectors), as one can’t orient the Moebius strip complex in the internal way but can in external one arseniiv: I don’t see where the changes would be in the representation description above b_jonas: kspalaiologos: anyway, you're right, we should probably add a proof to the Minsky machine article about how they're turing-complete by simulating a multi-stack machine b_jonas: and ideally also the crazy proof for the two-counter machine b_jonas: because Nopfunge can only directly simulate the two-counter machine kspalaiologos: "crazy proof for the two-counter machine" kspalaiologos: that's what I'll spend my time on kspalaiologos: perfect kspalaiologos: at least I'll learn some about CS b_jonas: though I'll have to check the pages for ais's languages, one of them might already have a proof, since many of them are Minsky-based b_jonas: including The Waterfall Model b_jonas: kspalaiologos: "crazy" is only my opinion, I think ais or oerjan don't find it crazy b_jonas: but it's crazy in essentials, that is, the simulation must be crazy in that it needs the double-exponential slowdown as far as I understand kspalaiologos: I have to think for a while about it kspalaiologos: and top it off with asm2bf backend kspalaiologos: if my lifespan is long enough kspalaiologos: it's essentially subleq kspalaiologos: but better and worse in a couple of cases kspalaiologos: incdecne seems like a good name int-e: That collatz construction is pretty tricky. int-e: (I was around when oerjan came up with that one, but I don't recall looking at it in detail before just now.) b_jonas: there's an easy construction though, to translate a Minsky machine to brainfuck with bigint cells, where you assign a cell for each state of the Minsky, you set it to 1 if that's the current state and 0 otherwise, and the brainfuck program tests each of those state cells and performs its actions if it's set. this leads to a brainfuck program that uses bounded size tape, but the tape size depends on the b_jonas: size of the Minsky program. int-e: Oh sure, it all gets pretty simple if you add more cells. b_jonas: oh, that reminds me, I have to do this b_jonas: ``` date +%Y b_jonas: ^ looks wrong b_jonas: we're in the future LBPHacker: ``` date +%G b_jonas: ``` date +%C%C zzo38: I added some more tropes for the story of GURPS game I play. But see if you agree/disagree b_jonas: ``` date +%S%S fizzie: `` date +%d%d | tac # if we're being silly fizzie: Whoops, I forgot what tac actually does. fizzie: `` date +%d%d | rev # then zzo38: Yes, now you are silly, I suppose, and at this time, it works. b_jonas: `datei HackEso: 2020-01-02 22:28:52.455 +0000 UTC January 2 Thursday 2020-W01-4 b_jonas: ``` date 2019 HackEso: date: invalid date '2019' b_jonas: ``` date +2019 b_jonas: much better moony: i wonder just how many of the esolangs users are young programmers moony: probably most of them moony: (I know I am :P) fizzie: What's the technical definition of "young programmer"? moony: under 18 fizzie: I guess we'd need Google Analytics or some other such thing to answer that. fizzie: Except I think it only reports age demographics from 18 upwards. kingoffrance: pshaw users what about devs kingoffrance: "users" :/ zzo38: I don't like the "Flow" system for talk pages on some MediaWiki based wikis, but some wikis use it, so I have written some JavaScript and CSS codes to improve it. mroman: !blsq "MP"?x blsqbot: | "MapPush" wib_jonas: I wonder if there's a fan-made Pokemon game that is entirely text-based so you can play it on IRC for example. myname: if i'd make a text-based pokemon game, i'd probably use ncurses or something similar myname: so still no irc myname: i don't see irc as a good target for games. i made some for telegram and even that is pretty limited wib_jonas: well, you could have multiple interfaces for essentially the same game wib_jonas: as for IRC and games, I think the Niagara board game could be played through IRC. wib_jonas: if someone wrote a bot that implements it that is myname: well, of course you could, but i cannot imagine it being fun to write stuff like "go 5 steps north, go 3 steps left, go 5 step north, list attacks, attack with tackle, attack with tackle, attack with tackle" wib_jonas: no, I don't think you'd have a grid-based map in such a game wib_jonas: and you'd just write some shorter commands instead of "attack with tackle", which is feasable because your pokemon has at most four moves myname: but exploration is a key component in these games wib_jonas: sure, so you'd have a graph-based map. the game lists the four houses in the town and tells that you can also enter the forest or the mountains, and if you choose the forest, you'll probably get random encounters, and in the forest, you can go on or turn back, but you don't micromanage the steps wib_jonas: of course then you might not be able to use the strats where you sneak past a trainer when they're looking at the opposite direction wib_jonas: and I guess you'd lose more inside buildings that have items hidden in sneaky places wib_jonas: so yes, it would lose some of the nice parts of a typical pokemon game wib_jonas: but I think it might still be worth, there's enough left for a good game, wib_jonas: and the game could balance that out with new mechanics specifically helping what it lacks from the medium myname: i am interested in a pokemon programming game wib_jonas: what would that be like? myname: your game wish except with an api that you can call automatically and after the elite 4 matching with another programs result wib_jonas: fungot, when is AGDQ? fungot: wib_jonas: and you call yourself a frog, and ayla... i will not betray my friends! wib_jonas: not betraying your friends? ok fizzie: fungot: Are you running something this year? fungot: fizzie: is the gate key okay!! get' em! 200g per night. care to stay with these humans! you're a traitor! you're not our king! but, we are far outnumbered! arseniiv: fungot: how do you find your new state of mind? fungot: arseniiv: but cyrus! are you leaving! arseniiv: fungot: don’t worry, I’m here to stay for a while fungot: arseniiv: we are looking to achieve a shorter life span... lavos will rule the world in a mere door that keeps us bound, hand, foot...and tongue kid? ...oh, it's you, isn't this morbid? the great adventurer toma levine rests in a grave to the north. it's a great place for a picnic! heard that magus's place... kspalaiologos: ^mode youtubecomments wib_jonas: kspalaiologos: ^style arseniiv: no no no no no kspalaiologos: c'mon fungot fungot: kspalaiologos: is the gate key okay!! get' em! 200g per night. care, and stay...healthy! my husband...he's...he's...gone... but he left me precious gifts! the seeds...and our child, it's ancient history now... you've changed! marle looks so much like leene, that they will take you to your place of execution?! strange, but!? kspalaiologos: alright kspalaiologos: ^style fungot: Available: agora alice c64 ct* darwin discworld enron europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack oots pa qwantz sms speeches ss wp ukparl youtube kspalaiologos: ^style youtube fungot: Selected style: youtube (Some YouTube comments) kspalaiologos: gotta try them all kspalaiologos: fungot, tell me something fungot: kspalaiologos: if you are the waste of space and i kept checking for updates weekly but always seeing the " when bruce willis play him... kspalaiologos: very nice kspalaiologos: ^style irc fungot: Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams) kspalaiologos: this one's gonna be interesting kspalaiologos: fungot, what do you think about reducing 3-cell brainfuck to 2-counter minsky machine? fungot: kspalaiologos: how do you plan to sink a bit more careful about punctuation, capitalization, spelling and grammar gives you more credibility in written communications.) arseniiv: isn’t that one what was selected upto a day or so prior? arseniiv: fungot: how eso is a Minsky machine? fungot: arseniiv: cool. i know it kspalaiologos: fungot, tell me a joke fungot: kspalaiologos: sarahbot how old is your mom., so they expect the school has horrible atmosphere and that guy is a nice shorthand for constructing sexps with some variable parts arseniiv: fungot: and how eso is a generalized Minsky machine? fungot: arseniiv: got it. thanks for the code fizzie: It defaults to the 'irc' style, yes. kspalaiologos: ^style fungot: Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc* iwcs jargon lovecraft nethack oots pa qwantz sms speeches ss wp ukparl youtube kspalaiologos: can you make another styles? kspalaiologos: ^style alice fungot: Selected style: alice (Books by Lewis Carroll) kspalaiologos: fungot, tell me a joke fungot: kspalaiologos: " serpent!" cried alice, dropping the ball of worsted alice had been trying to wind up the rabbit!" kspalaiologos: ^style sms fungot: Selected style: sms (National University of Singapore SMS corpus, 2011-08-20) fizzie: Yes, though for whatever reason most of the things I've tried haven't been as successful as the early ones. arseniiv: fungot: r u ok fungot: arseniiv: ya i also i since 1pm lo even worse. he's not around or just still asleep. i thought my dad wouldwake me up up high upon me? but that one shorter. th tuesday is difficultfor us. would watch it tonight bah fizzie: 'europarl' is pretty good at being a politician. kspalaiologos: fungot, lmao fungot: kspalaiologos: later i finish my psychology lol. i was asking wats up.? wat was ur grade u got for 1 moviebefore april. cant wait to eat xlb first arbo y ask u ma!i always anythin one.if u dun want can cancel it for umah kspalaiologos: let's try ot kspalaiologos: ^style europarl fungot: Selected style: europarl (European Parliament speeches during approx. 1996-2006) fizzie: fungot: What do you think of the whole Brexit mess? fungot: fizzie: the aim of guaranteeing and seeking a higher standard of living, the deteriorating state of the stocks would still not have been possible if there are spaces in the press, there may have been deluding ourselves in thinking we were stupid. and they secure this by paying commissions to doctors to refer patients to them for having presented and prepared these reports within such a very short period during which it can give fizzie: Well, not a great example this time. fizzie: `quote end to all HackEso: 429) fizzie: i, myself, will bring an end to all. kspalaiologos: fungot, what do you think about judiciary in Poland? fungot: kspalaiologos: mrs fraga, i do not support. i am thinking above all of the cost of the committee on constitutional affairs itself will carefully reconsider this suggestion, which opens up an appalling prospect, not least on article 23, the so-called d'amato legislation. that will be happening. the existing guidelines on the highly important cooperation with ngos in former communist countries, such as fnord, chewing gum and ice fizzie: NGOs such as fnord. kspalaiologos: he seems more logical than the EU parlament itself fizzie: `quote human rights HackEso: 499) elliott: mr president, commissioner, i fully accept that description when it comes to human rights. yes, with an average fat content of chocolate, and we are using double standards! we all know that under present legislation and also in relation to standardization bodies. if i do not want. myname: sounds like loriot's "bundestagsrede" fizzie: ^style nethack fungot: Selected style: nethack (NetHack 3.4.3 data.base, rumors.tru, rumors.fal) fizzie: fungot: Don't let the grid bugs bite. fungot: fizzie: touch*stone: " mirror, here i stand. who are you kay's brother. immediately after your birth, merlin the wise brought you to the incautious adventurer who can cause the traveller to feel the runes on a map next time you're not going to win at nethack. fizzie: fungot: You can ascend, but do you really ever "win at nethack"? fungot: fizzie: they say that a gypsy could tell your fortune for a heavy man, but guided by her image reflected in the dungeon breaking a mirror. imode: wonder if there's any way to parallelize string search/replacement. imode: search, probably. replacement, probably not..? zzo38: I also thought that a text-based Pokemon game should be made up; the players could telnet to the server and enter the commands there, which would be shorten such as one character to indicate the attack, or indicating what other command you want such as to shift to another pokemon imode: zzo38: but then you miss all the fun of having unique pokemon graphics. :P zzo38: Yes, although I have thought of that too actually; some signal could indicate that you want to use JSON communication instead, so in that way, specialized clients would also be possible. zzo38: Someone else also mentioned Spinda. I thought, in the text-based game if your pokemon is Spinda then your opponent can see the personality value (although I am not sure how useful this is). zzo38: I suppose gender, ability, and nature might be applicable myname: imode: replacement should be fine in a roe, it may lead to non-deterministic results on overlapping search or search-replace patterns, though imode: nondeterministic is fine. myname: go for a rope kspalaiologos: I've picked up on a project of writing an url shortener in brainfuck kspalaiologos: currently I've done some extending work on the brainfuck interpreter to support basic file I/P kspalaiologos: and some code to write an entry from key-value dictionary to the database kspalaiologos: it's getting ridiculous even before I run it kspalaiologos: http://prntscr.com/qj1j9u kspalaiologos: I should probably write unit tests for my code kspalaiologos: I didn't invent this for asm2bf yet so not today zzo38: If you are playing in Constructed mode, then the player would have to define their pokemons ahead of time and then send it. One way to do this would be to create a text file containing what you want, and then to connect and send the file to the server; you will receive a response with any error messages (if any), or else to tell it is OK. zzo38: Is there URL shortening service based on compression and not storing the URL in the database? zzo38: Do you like this? zzo38: Are there C programs other than my own that ever do such things as multiplication by '\1\0' or '\0\1'? On which C compilers does this work and which ones it doesn't work? oerjan: https://xkcd.com/2250/ OKAY fizzie: Acknowledged. ArthurStrong: Hi all. oerjan: i find this edit a bit disturbing https://hack.esolangs.org/repo/rev/df528347dad2 oerjan: `t doag interps/bfi HackEso: 12288:2020-01-02 `` cp /hackenv/lib/kps/bfi /hackenv/interps/ oerjan: wait a minute, did it exist before, or not? fizzie: I don't think it did, actually. oerjan: apparently not. i guess it's ok then. oerjan: the repo browser is misleading fizzie: It does kind of break the interps structure a little. fizzie: Though it's not the first thing that does. fizzie: Arguably the "right" way to integrate with ! would be to put the sources in interps/subdir and, if it needs building, add to interps/Makefile. But nobody cares. fizzie: `` ls -l /hackenv/{bin/bfi,interps/bfi,lib/kps/bfi} # I mean, this is a little silly HackEso: ​-rwxr-xr-x 1 1000 1000 13424 Nov 15 14:11 /hackenv/bin/bfi \ -rwxr-xr-x 1 1000 1000 19048 Jan 2 15:22 /hackenv/interps/bfi \ -rwxr-xr-x 1 1000 1000 19048 Dec 31 17:47 /hackenv/lib/kps/bfi fizzie: The last two are the same, I think the first one might be a much earlier version, and/or a different BF interpreter altogether. fizzie: (And then there's interps/egobf/src/egobfiNN, with different genetics.) oerjan: `t doat interps HackEso: 996:2012-12-09 tar xf egobot.tar.xz \ 1073:2012-12-14 glass \ 4791:2014-09-07 interp glass {M[m(_o)O!"Hello World!"(_o)o.?]} \ 4909:2014-09-29 sed -i \'s/ulimit/#ulimit/\' interps/gcccomp/gcccomp \ 4916:2014-09-29 sed -i \'47iecho "$GCC" -x "$LANG" "$2" $FLAGS -o /tmp/compiled.$$ 2> /dev/null\' interps/gcccomp/gcccomp \ 4917:2014-09-29 revert \ 4918:2014-09-29 sed - oerjan: hm it was fairly early oerjan: `dowt zzo38 HackEso: 0:2012-02-16 Initïal import. oerjan: b_jonas: the EgoBot import weren't quite from the start of HackEgo oerjan: (and even the Initial import wasn't quite the start, there was some history squashing at that point.) fizzie: My fallible recollection suggests HackEgo and EgoBot coincided for some time, which would mean there wouldn't've been a need for an EgoBot import, because the real thing was around. oerjan: i think EgoBot stayed around somewhat after the import too. oerjan: on and off zzo38: Is some people on like to make Magic: the Gathering cards or cards for other kind of card game? zzo38: I looked now they added a new function flag SQLITE_INNOCUOUS into SQLite, indicating a function with no side effects and few resources and that it is safe for use in a trigger or view. kmc: SQLite: the Gathering zzo38: My two messages are independent. kmc: but what if they weren't? zzo38: Maybe you can make up such a thing anyways; I don't know. oerjan: reading the iwc forum is so much faster after the upgrade now that i found the "unread posts" menu oerjan: *menu item oerjan: which may or may not have always been there zzo38: How does the printing work for the printing cards of such card game as Magic: the Gathering and so on? zzo38: I made a list of some of the differences of TeXnicard and MSE: http://zzo38computer.org/fossil/texnicard.ui/wiki?name=Differences+between+TeXnicard+and+MSE zzo38: I saw someone made up this Magic: the Gathering card: {0} Instant ;; Split second I think I had the same idea too. Someone commented "There are many more dignified ways to raise your storm count." but I think storm count is not the point. zzo38: There are ways to use split second to your advantage even if the spell has no other effect. zzo38: Do you think it is? kspalaiologos: fizzie, the /hackenv/bin interpreter is outdated (v1.1.1 -> v1.2.6) kspalaiologos: I should have removed it, but I forgot. kspalaiologos: ``` rm -f /hackenv/bin/bfi HackEso: No output. kspalaiologos: ``` whereis bfi kspalaiologos: ``` cp /hackenv/lib/kps/bfi /hackenv/bin/ HackEso: No output. kspalaiologos: ``` whereis bfi HackEso: bfi: /hackenv/bin/bfi kspalaiologos: hackenv/bin -> this is in the path, so asmbf script can work kspalaiologos: hackenv/lib/kps -> there are all the binaries, including bfasm, bfpp, bfmake, ... kspalaiologos: hackenv/[...]/interps -> you suggested me to put it here :p kspalaiologos: so in the end it has a couple of intergrations kspalaiologos: `! asmbf mov r1, .0/out r1 kspalaiologos: ``` asmbf mov r1, .0/out r1 HackEso: No output. kspalaiologos: ``` asmbf mov r1, .0/out r1 && bfi output.b kspalaiologos: `asmbf mov r1, .0/out r1 HackEso: No output. kspalaiologos: ^this should display the code kspalaiologos: but it doesn' kspalaiologos: t for some reason, but it Lykaina: i play nylea as my commander Lykaina: i think this is the wrong chatroom for mtg Lykaina: "nylea, god of the hunt", to be specific zoobab: what is the easiest BF fork to modify, I want to make my own language b_jonas: zoobab: if you want to make your own language, do not base it on anything BF-related. zoobab: which one do you recommend? zoobab: it is more of a joke language zoobab: taking the 8 instructions of BF and replacing them with 8 words zoobab: https://fr.wikipedia.org/wiki/Brainfuck zoobab: a bit like Babylang: https://esolangs.org/wiki/Babylang myname: zoobab: there should be an entry about "trivial bf replacements" in the wiki myname: just do something cooler myname: b_jonas: you _can_ do interesting bf-based languages, though. i like bf2d myname: or some of these self modifying variants myname: but simply replacing symbols with other symbols is the laest way to do something zoobab: url for bf2d? zoobab: no hits for bf2d on the wiki myname: http://think-strange.de/stuff/projects/brainfuck2d/ b_jonas: myname: it's possible, but not recommended myname: yeah, if you can come up with something like that, you can probably do better fizzie: `` rm /hackenv/bin/bfi; ln -s /hackenv/lib/kps/bfi /hackenv/bin/bfi # no need for actual copies that you can forget to delete though HackEso: No output. fizzie: s/delete/update/ fizzie: And really the interps integration is an alternative, not really an addition. I don't think anything actually uses that copy of 'bfi', since even ibin/asmbf just uses the one in the path. fizzie: `` rm /hackenv/interps/bfi HackEso: No output. int-e: fungot: Do you think 3 minutes is a long time? fungot: int-e: ptah: known under various names ( nu, neph, cenubis, amen-kneph, khery-bakef), the lord rose and went forth halting; but there were nothing but two areas of blank skin. arseniiv: ^style fungot: Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack* oots pa qwantz sms speeches ss wp ukparl youtube arseniiv: how do you find pineapples, dear fungot? fungot: arseniiv: a wand of, *wand: ' i would do it; and a mighty figure with four arms. he is an abundance of food but, trusting his own excavations. ( don quixote of la mancha by miquel de cervantes saavedra) arseniiv: hm surreal enough arseniiv: today I found out about “session types” from this: https://github.com/dmbarbour/glas-lang/wiki/Why-Session-Types arseniiv: don’t know it they’re researched that well? kmc: arseniiv: oh, Rust had that in its very early versions arseniiv: kmc: how did it go? kmc: I think kmc: or was that something else kmc: not sure kmc: maybe i'm confusing it with something else kmc: typestate kmc: that's it kmc: I think session types are just a bit unwieldy to use kmc: also there are libraries for various langs kmc: which obviates the need for a language feature kmc: http://munksgaard.me/papers/laumann-munksgaard-larsen.pdf arseniiv: I’m recently quite into reading articles on extensible variants and records, though do I read them so slow because all other distractions… b_jonas: `? mroman HackEso: mroman is a leading artist in password security (SFW). He also likes black madness. He can design password hashes that are worse than the identity function. He invented the identity function. He's also an artist in unconventional warfare. b_jonas: `? blsq HackEso: See: Burlesque b_jonas: `? burlesque HackEso: Burlesque is only the sexiest language on Earth. (See: http://mroman.ch/burlesque) b_jonas: `learn Burlesque is only the sexiest language on Earth. mroman created it for finance analysis because the traditionally used K and Dyalog APL are unreadable. (See: http://mroman.ch/burlesque ) HackEso: Relearned 'burlesque': Burlesque is only the sexiest language on Earth. mroman created it for finance analysis because the traditionally used K and Dyalog APL are unreadable. (See: http://mroman.ch/burlesque ) zzo38: I may need some help to make the templates and so on for TeXnicard, so anyone who is interested in such thing should please to do so. zzo38: I remember some time ago someone on here mentioned a data format that you will just store in memory and then read it directly, without having to parse it to make a tree first, and that there is the requirement that it does not start with a valid UTF-8 character. I think the PostScript binary format satisfies this; I made a set of C macros to deal with it. b_jonas: `? spood HackEso: spood? ¯\(°​_o)/¯ zzo38: What is that? Lykaina: `? spoon HackEso: spoon? ¯\(°​_o)/¯ b_jonas: `? ladle HackEso: ladle? ¯\(°​_o)/¯ imode: zzo38: I'd love to know what that is. imode: unless I was the one that said it.. b_jonas: a spood is like a snoot but faster b_jonas: and less blue b_jonas: `? lonk HackEso: lonk? ¯\(°​_o)/¯ b_jonas: `? lound HackEso: lound? ¯\(°​_o)/¯ oerjan: `? spood HackEso: spood? ¯\(°​_o)/¯ moony: `? oerjan HackEso: Your omnidryad saddle principal ideal golfing toe-obsessed "Darth Ook" oerjan the shifty eldrazi grinch is a punctual expert in minor compaction. Also a Groadep who minces Roald Dahl. He could never remember the word "amortized" so he put it here for convenience. His arkup-nemesis is mediawiki's default diff. He twice punned without noticing it. moony: `? HackEso HackEso: HackEso is almost, but not quite, entirely unlike HackEgo. moony: `? moony HackEso: moony is often named the following: moonythedwarf moonythehuman moonheart08 moon moon__ noomy computing and luxon, making porthellos and @tells a real pain. moony: `? moonythedwarf HackEso: moonythedwarf? ¯\(°​_o)/¯ oerjan: `dowg moonythedwarf HackEso: No output. oerjan: no such thing zzo38: How to disable CSS transitions in Firefox? kingoffrance: more css? (override)? zzo38: Yes, I can do that, but I want to do it globally zzo38: Now I implemented the "fillspecial" command in TeXnicard, which can be used to draw translucent shapes on the card. (Other effects may be possible in future, but so far the only implemented effect is the /Opacity effect.) zzo38: What is the best way in a C program to send data to an external program and then read the result? I know a few ways, but what is a good way? zzo38: (Specifically, a C program on Linux) zzo38: What newsgroups/IRC can I see if someone else will be interested in my TeXnicard program? zzo38: Why in rogue you cannot strike an opponent standing in a doorway by a diagonal move? kingoffrance: i suppose in theory the door would be in the way, but that could go either way kingoffrance: and there is no way to query "which way is the door swinging" to my knowledge b_jonas: zzo38: write data to a regular file, popen program for reading and pass the regular file to it as an argument or redirect b_jonas: zzo38: I think the doorway is implicitly in a narrow corridor that you can only exit straight because it doesn't extend to the corner of its square b_jonas: fungot, here are some arrows: ←↑→↓↔↕↤↥↦↧↨⇐⇒⇔ fungot: b_jonas: trolls are described as rubbery: they keep bouncing back. fizzie: fungot: I'm pretty sure you just quoted that verbatim. Try to mix it up, will you? fungot: fizzie: eyes of the days of morgoth elves and men usurped the sunlight. then with a wand of polymorph. jackal's heart must never be eaten, for the service he had fled the responsibilities of ruling all that was about all they were, i was going to happen to you, don't step on a diet of metals. they are friendly. ( the immortals, by edith hamilton) fizzie: Sounds like a weird book. int-e: b_jonas: shoot! int-e: does unicode have darts? int-e: `unidecode 𐃘 HackEso: ​[U+100D8 LINEAR B IDEOGRAM B254 DART] fizzie: `unicode BOW AND ARROW HackEso: U+1F3F9 BOW AND ARROW \ UTF-8: f0 9f 8f b9 UTF-16BE: d83cdff9 Decimal: 🏹 \ 🏹 \ Category: So (Symbol, Other) \ Bidi: ON (Other Neutrals) b_jonas: int-e: it has so many arrows (a lot, seriously) that some of them are probably darts int-e: b_jonas: But that's the only "dart" I found. fizzie: I don't have a bow-and-arrow character, apparently. :/ b_jonas: int-e: https://esolangs.org/logs/2019-10-22.html#lX int-e: Works in firefox... it's one of the abominable colored glyphs. int-e: b_jonas: Still no dart. fizzie: Looking at gucharmap, I have a really spotty coverage of Miscellaneous Symbols and Pictographs. int-e: `unidecode 䈶鏢镖 HackEso: ​[U+4236 CJK UNIFIED IDEOGRAPH-4236] [U+93E2 CJK UNIFIED IDEOGRAPH-93E2] [U+9556 CJK UNIFIED IDEOGRAPH-9556] b_jonas: fizzie: do you have oren's font loaded? b_jonas: `? font HackEso: ​#esoteric bitmap fonts include: \oren\'s font http://www.orenwatson.be/fontdemo.htm , lifthrasiir's font https://github.com/lifthrasiir/unison/ , b_jonas's font http://www.math.bme.hu/~ambrus/pu/fecupboard20-c.pcf.gz , fizzie's font https://github.com/fis/rfk86/tree/master/web/font , FireFly's fonts http://xen.firefly.nu/up/fonts/ int-e: Somehow, gucharmap's "match whole word" thinks "dart," is a word. fizzie: "TWO SPEECH BUBBLES = chat" "THREE SPEECH BUBBLES = conference" int-e: (so "dart" does not find those CJK symbols that have "dart," in their description.) int-e: FOUR SPEECH BUBBLES = tower of babel? int-e: FIVE SPEECH BUBBLES = social media fizzie: 📈🗠📉, 📊 int-e: `unidecode 📈🗠📉📊 HackEso: ​[U+1F4C8 CHART WITH UPWARDS TREND] [U+1F5E0 STOCK CHART] [U+1F4C9 CHART WITH DOWNWARDS TREND] [U+1F4CA BAR CHART] fizzie: Heh, "U+1F573 HOLE = portable hole". fizzie: I guess it's the character rather than the hole that's portable. int-e: fizzie: Bonus points if it's black. int-e: Or otherwise bottomless. int-e: Is there a Linear B brainfuck clone? I'd imagine that could look kind of cute, especially if you assign several symbols to each operation. b_jonas: int-e: do you mean a Learn B trivial brainfuck substitution? int-e: b_jonas: Obviously. b_jonas: there's probably a generic one that assigns a brainfuck command to a lot of unicode characters int-e: Hmm, right, there could be something close to a union-of-all-brainfuck-substitutions. int-e: ("close" because there's bound to be overlap) b_jonas: `unidecode  HackEso: ​[U+F51F - No such unicode character name in database] int-e: b_jonas: I missed that you rendered "Linear" as "Learn" earlier... was that an accident? b_jonas: int-e: oh... that was an accident b_jonas: I don't know why I typed that b_jonas: probably "Learn" is more in my hands than "Linear" b_jonas: more common word b_jonas: like, yesterday I couldn't type "spiny" first try like ten times, because I kept typing it as "spony" and having to backspace b_jonas: because "pony" is a word but "piny" is not int-e: Well, brains are weird. b_jonas: fungot, when does GDQ start? fungot: b_jonas: they say that some shopkeepers recognize gems but they are quite difficult to grasp. blood-drinking bestiality, voracious appetites, hunger in search of prey, but, instead of teeth; it is saint peter's holy day. if that event takes place, perhaps it was only a humanoid creature can be a now dry little watercourse. bilbo was a time xans would never scratch your boots. fizzie: Handy, they've added a "detected as X" note to the "all times are converted to your local time" message in the schedule page. fizzie: Now if they could only this time around shade the blocks in the past, highlight the currently running one, put a red line where we're now, or *something* like that. b_jonas: fizzie: is that about the GDQ schedule? b_jonas: fizzie: but GDQ is sponsored by twitch, so they must go for webpages that are so heavy with client-side scripts that they're impossible to load in anything but a modern computer, even though other pages can show better quality videos easily on the same computer b_jonas: it wouldn't be twitch-like otherwise b_jonas: a simple server-side addition of a red line marking the current time wouldn't cut it b_jonas: it has to load a huge javascript library b_jonas: also, why don't the bash builtins pushd and popd have a single-letter switch to quiet their normal output? kspalaiologos: https://chat.stackexchange.com/transcript/message/51423495#51423495 fizzie: The client-side local time conversion is pretty light. I mean, discounting jQuery. kspalaiologos: looks like our evil villain was there all the time :p b_jonas: fizzie: they have to add more stuff to that schedule page then b_jonas: dunno, mouseover popups to show the donation choices b_jonas: a sort widget b_jonas: or just no functionality, just loading and constructing the page content in javascript fizzie: Oh, is Twitch owned by Amazon? I didn't know that. b_jonas: fizzie: dunno but that seems likely fizzie: I was seeing all these "Subscribed with Twitch Prime" things, and thought they'd just copied the name, but apparently it's actually an Amazon subsidiary. b_jonas: fizzie: the Twitch Prime thing means that if you subscribe for Amazon Prime and pair your Amazon account with the Twitch account, you get some "free" stuff on Twitch b_jonas: twitch advertises that very agressively b_jonas: `8-ball I can't find my gloves. Should I unpack the mess from the shelf where they're supposed to be? HackEso: It is certain. b_jonas: well ok kspalaiologos: `8ball should I get bfbot up and running? HackEso: Very doubtful. kspalaiologos: `8ball should I rewrite it in Java HackEso: Yes definitely. kspalaiologos: my lovely bot kspalaiologos: he knows what's good kspalaiologos: `8ball what about elixir? HackEso: Yes definitely. b_jonas: 8-ball: you're right, they were there. I found three and a half pairs b_jonas: in Java? why? b_jonas: well sure, if you want, implement it in Java kspalaiologos: I like JAva kspalaiologos: why shouldn't implement it in Java b_jonas: if you like Java then sure, it's probably fine for this purpose kspalaiologos: or Elixir kspalaiologos: a hard decision b_jonas: I guess it's better than implementing an URL shortener in brainfuck kspalaiologos: `8ball Java (-) or Elixir (+)? HackEso: Concentrate and ask again. kspalaiologos: oh c'mon b_jonas: Java is a much better choice than brainfuck for this kspalaiologos: b_jonas, I'll do it on other occasion kspalaiologos: lmao, sure it is b_jonas: and we have a bot implemented in befunge kspalaiologos: `8ball Java (-) or Elixir (+)? HackEso: Cannot predict now. kspalaiologos: `8ball Java (-) or Elixir (+)? HackEso: It is certain. b_jonas: and mroman mentioned that he should implement blsqbot in blsq kspalaiologos: I need to modify my todolist b_jonas: and NotJack implemented a J evaluator bot in J kspalaiologos: . o O (soon: and kspalaiologos implemented a Brainfuck bot in Brainfuck) b_jonas: heck, I implemented my IRC bots in ruby 1.8, that's actually a worse choice than Java too b_jonas: it seemed like a good idea at the time kspalaiologos: I guess for this approach with brainfuck bot b_jonas: (actually back then they were started in ruby 1.6, but I ported them to 1.8 later) b_jonas: kspalaiologos: the problem with a brainfuck bot in brainfuck is that a brainfuck interpreter in brainfuck might be slow kspalaiologos: depends kspalaiologos: last time I used the Tritium interpreter kspalaiologos: and it was quite fast if you ask me b_jonas: you don't need much performance for just the IRC part kspalaiologos: and if it's too slow I can compile the brainfuck to optimized C fizzie: The zemhill of the underscores is done in Ruby too. b_jonas: but for the brainfuck part, your goal was that it should be able to run programs that take more time than what fungоt is willing to run b_jonas: and FireFly eventually ported jevalbot to ruby 2.something kspalaiologos: nice evasion FireFly: fsvo 'ported' FireFly: I don't know ruby, and changed a handful of things it complained about to get it running (like 3-4 places or so) kspalaiologos: J seems like an intritiguing language FireFly: [ 'hi' j-bot: FireFly: hi FireFly: ok, it's still alive kspalaiologos: but why would anyone write in such an language b_jonas: kspalaiologos: it used to be a decent language, but it's old and maintained in the wrong way just like perl is kspalaiologos: it literally looks like Malbolge but scarier b_jonas: what? no kspalaiologos: Perl is awesome b_jonas: malbolge? no way kspalaiologos: quicksort=: (($:@(<#[), (=#[), $:@(>#[)) ({~ ?@#)) ^: (1<#) FireFly: APLs are very handy as ridiculously owerful calculators kspalaiologos: It literally looks like hell on earth kingoffrance: nah, that aint nothing kspalaiologos b_jonas: kspalaiologos: I think that expression is not something that people seriously write, it's just something people write to show off how ugly J is. there's a builtin sort operation. kspalaiologos: kingoffrance, let me show you my 50 entry PPCG Malbolge repo FireFly: well, it's a combination of being used to read it, of formatting/clarity, and of choosing a reasonable example kspalaiologos: I mean FireFly: I mean you can point at IOCCC and complain that C is a ridiculous language (which, well, wouldn't be the wrong conclusion, but...) kspalaiologos: it was example given on Wikipedia FireFly: Honestly, I mostly use J as a ridiculously powerful calculator kspalaiologos: I didn't think that they are ranting J kspalaiologos: 1:`($:@-&2+$:@<:)@.(>&2) kspalaiologos: fibonacci kspalaiologos: C'mon man kspalaiologos: it's literally write only b_jonas: kspalaiologos: have you written quicksort in other languages, and doesn't it also look bad? kspalaiologos: it looks decent b_jonas: kspalaiologos: that's also not something that people would write FireFly: There's many ways to implement fibonacci, and that one is one of the less natural ones in J b_jonas: it's one of the worst ones b_jonas: just try running it with 100 as the argument FireFly: it's a bit like insisting on writing an imperative solution in Haskell, instead of a functional one kspalaiologos: I don't understand a single character kspalaiologos: of this code FireFly: have you seen the Dyalog APL video on Game of Life? kspalaiologos: but it looks seductively FireFly: it's pretty neat FireFly: https://www.youtube.com/watch?v=a9xAKttWgP4 b_jonas: it's like fibo 1 = 1; fibo 2 = 1; fibo k = fibo (k - 1) + fibo (k - 2); would you actually write that in Haskell? FireFly: (APL and J are similar enough that the concepts translate kspalaiologos: I don't know haskell b_jonas: kspalaiologos: what? not even the 2 in the middle, which is used to subtract 2 from the index? kspalaiologos: not a FP guy b_jonas: or the - which is used to do that subtraction? FireFly: [ 1 2 3 4 j-bot: FireFly: 1 2 3 4 FireFly: [ 1+2+3+4 j-bot: FireFly: 10 FireFly: [ +/ 1 2 3 4 kspalaiologos: so it essentially subtracts & from @, right? j-bot: FireFly: 10 b_jonas: well no b_jonas: oh right, a better analog in Haskell would be a stupid pointfree one b_jonas: with Applicative <*> and whatnot inside, so you can claim that it subtracts <&> from <*> or however that works b_jonas: but I'm not fluent in Haskell to write that kingoffrance: kspalaiologos, its not the bottle of poison labelled poison you have to worry about https://www.youtube.com/watch?v=ar19vwtxEKs youd have to convince me your code comes dressed as a goddess and then morphs into death; malbolge i dont think makes any illusions about rescuing people :) kingoffrance: its called "malbolge" we know it cant be good b_jonas: kspalaiologos: "Python" is labeled as poisonous too kspalaiologos: it's called JavaScript we know it can't be good b_jonas: yes, I know it's a stupid example because pythons are actually constricting, not venomous kspalaiologos: https://pastebin.com/nSFkfczB kspalaiologos: malbolge interpreter in prefix-RLE'd Brainfuck kspalaiologos: it looks amazing kspalaiologos: and it's just 10KB kspalaiologos: the drawback being, it requires 16bit-cells kspalaiologos: and requires minimum of 700 bytes of memory kspalaiologos: with a simple hello world loaded int-e: I'm confused; 700 bytes is small. zzo38: Yes, but it is a lot for Hello World kspalaiologos: 300 bytes for xlat's, 100 bytes for crazyop table and 9 powers, kspalaiologos: yet the xlat's are stored in rcl/sto memory region kspalaiologos: and due to my stupidness, it's size is multiplied by two kspalaiologos: so it could be done in 400 bytes without doubt kspalaiologos: but the +300 overhead is constant for all the programs zzo38: Now TeXnicard is able to use a code such as: 100 100 setpagesize /Courier 10 selectfont 20 30 moveto (Hello) show << /Opacity 0.5 >> seteffect 1 0 0 setrgbcolor newpath 20 20 moveto 20 40 lineto 40 30 lineto fillspecial In interactive mode, you must put . at the beginning to indicate that it is a PostScript code, and then the next line you can write ^0 to make a preview. zzo38: The quality of the text rendering isn't very good, but I would later add the ability to use TeX fonts, and then it will be good. zzo38: Also, are there any other effects other than opacity that you think would be useful to implement in here? b_jonas: ooh! Super Monkey Ball is finally back to GDQ! And this time it's warpless b_jonas: nice! Super Mario World one mind 11 exit coop. that will be worth to see. b_jonas: someone pointed out how the D&D rules imply that it's practically impossible to see the Sun and the Moon, because the bonus you get to see large objects is logarithmic in their size, but the penalty for seeing distant objects is linear in the distant zzo38: O, then better rules should be written, I suppose. b_jonas: the penalty is -1 point per 10 feet of distance, so it's too high even if you choose to apply only the -3333 points for the 10 kilometers of the atmosphere zzo38: GURPS rules is different; there is adjustments for both distance and for size; 3 yards is 1, 100 yards is 10, 100 miles is 30, etc; you add for size and subtract for distance. (If it is smaller than 2 yards then there is also a penalty for size.) zzo38: These same numbers are used for ranged attacks (such as arrows, guns, spit poison, etc) zzo38: These seem to be better than D&D, but I don't know if better rules could be made. I think what they did wrong with the GURPS is they have a table but failed to mention the equation which generates the table. b_jonas: how much is the penalty for 8 miles? zzo38: b_jonas: -24 b_jonas: that doesn't seem bad. and how much bonus do you add to that for an object of 116 meters diameter, which is about how large the moon looks like at that distance b_jonas: (or 380 feet diameter) zzo38: Eleven b_jonas: in D&D, you get +4 bonus for every power of two that the object is larger than a human zzo38: But probably the full size should be used and not only the apparent size b_jonas: zzo38: possibly b_jonas: the diameter of the Moon is 3.5 megameters zzo38: GURPS also has penalties for darkness, from -1 to -9, or no penalty if it is bright. b_jonas: that makes sense, and it might matter for the Sun zzo38: It also says there is a bonus of +10 to spot something in plain sight (such as seeing a car is coming toward you on the road). b_jonas: that may apply if there are no clouds b_jonas: or no clouds covering the Moon or Sun at least b_jonas: and you're outdoors b_jonas: and the Sun or Moon is above the horizon zzo38: Yes, I think that makes sense. b_jonas: `? calesyta HackEso: calesyta? ¯\(°​_o)/¯ zzo38: Would it be work to use pipe() to create a pipe and then use popen() and pass the other end of the pipe using /proc/.../fd/ files? b_jonas: zzo38: that's usually a bad idea, because you can deadlock yourself when both your program and the other program are blocked on a write with a full pipe b_jonas: so it only works if you use an event loop or something to check for when the read pipe is readable and when the write pipe is writable b_jonas: and read or write respectively b_jonas: it can be done, but in most cases it's not worth, unless you really need interactivity zzo38: O, yes, that is right. Is there some other way that you need not make a disk file? b_jonas: zzo38: make a file in a tmp file system and have no swap? b_jonas: usually I don't think it's worth to avoid creating files b_jonas: unless you tell why you really need that zzo38: I don't want to prevent swap, only to not add a file into the system. zzo38: (It is up to the operating system to decide whether or not to swap out) b_jonas: like for ugly privacy requirements where you want to limit what attackers can do if they can get physical access to your computer or root access after your program has finished b_jonas: zzo38: then just create a file on a tmpfs b_jonas: but if you really want, you can use an event loop and handle both the read and write pipes, buffering everything in memory b_jonas: just make sure to read all the data you can from the read pipe, even if you don't yet need it zzo38: I don't know much about tmpfs, but perhaps that would work b_jonas: or you can spawn a separate thread or process for one end of the pipe if you want to waste more resources than a file b_jonas: but generally, if you don't need interactivity, just use a file zzo38: My computer says that /run is tmpfs b_jonas: if the input data is really short and the process you're spawning is suitable, you may be able to pass all the data in argv zzo38: Wikipedia says that tmpfs is used on /tmp but I do not see that on my computer. b_jonas: no, it's usually not on /tmp , though it is in some setups b_jonas: but you can mount any number of them b_jonas: basically it's just a file system that stores all its data in the file system caches, and never flushes those caches b_jonas: plus some extra magic so you can customize how much (virtual) memory it can consume and give ENOSPC when you try to consume more b_jonas: the data it uses can be swapped out b_jonas: if you have swaps set up, obviously b_jonas: it's a "new" thing, in the sense that it became used during the time I've been using linux b_jonas: earlier we only had ordinary file systems backed on ramdisks, which are like flat virtual devices that are stored in the (virtual) memory, swappable, but then the kernel has to do most of the work that it would have to do to represent the file system on a (very fast) flat block device zzo38: Specifically the data I want the external program to read is a blob in a SQLite database; maybe I should have mentioned that at first. b_jonas: so tmpfs is more efficient b_jonas: DOS also supports ramdisk b_jonas: zzo38: but what does the program that you spawn do with its input and output? zzo38: Converts it into a different format. b_jonas: are the input and output very large? do you need interactivity, that is, do you want to get part of the output while you're still streaming the input? b_jonas: and what do you do with the output? zzo38: (And actually it isn't the entire blob; a few bytes at the beginning will be skipped, and this number may vary.) zzo38: The input and output are potentially large, because it is a picture of the art in a card (e.g. the art box in a Magic: the Gathering card). b_jonas: also is the sql database in a file that is slow to read, and do you want to be able to stop reading early in case of an error? b_jonas: zzo38: just small vs large doesn't matter (unless it's so small that you just pass it in the argv), I'm asking if it can be very large b_jonas: so it's not too large zzo38: It might be very large if you are printing at a high resolution. zzo38: The SQL database is already open by the main program (TeXnicard; maybe telling it is TeXnicard is also useful to you I don't know) b_jonas: I'd probably just write the input data to a temporary regular file on a fast file system. if you can conveniently pass file descriptors to the program that you spawn, then unlink the file and pass just a file descriptor, that way if something goes wrong it's less likely that you have the temp file file remain on the disk. b_jonas: you usually don't even need an actual tmpfs, if you don't have security requirements, because if everything fits in memory and you delete the file soon then the file won't leave the cache, and if it doesn't fit in memory then writing it out to the disk is a feature, b_jonas: but if you have a fast swap device and no readily accessible file system on the fast device and no file system cache on the fast device, then you may want a tmpfs anyway b_jonas: but that's not a common configuration these days b_jonas: linux can now even handle the case when you store the file system on a slower rotating disk but cache it on a large SSD, because this is getting a commonly useful case b_jonas: you have to configure it well, and I don't know the details, but I hear it's working well zzo38: I didn't know it has that, but I thought of that too. b_jonas: that need not be true if you're using old operating system software though, but then you likely won't have a fast SSD b_jonas: I don't really know what happens on Windows, I deliberately avoid all system administration responsibilities for Windows and don't want to learn more than I really need for my job b_jonas: i.e. I don't work in system administration, but I need to administer my work desktop a bit to just use it for work zzo38: I could write the data from the database to an external file and then pass that to the external program and then read back the output into memory, I suppose, since the output is likely to be larger than the input, but then that requires making a copy of the data b_jonas: what will you do with the output? b_jonas: will you send it to a printer? b_jonas: or show it on the screen? zzo38: It will be combined with an in-memory picture b_jonas: I think this case hasn't come up for me, because I always just had the compressed image or video data stored in a disk file, and the raw data in memory going through a pipe b_jonas: in one case the uncompressed data was also in a disk file, but in a format that I had to decode in my program (not sqlite specifically), but even then the other side, the compressed data went to disk files zzo38: In my case the compressed data is in a SQLite database rather than a file by itself, and there should not be any need to store the uncompressed data in any file. The blob starts with a flag byte and then the MIME type (omitting "image/" if it belongs to that category, otherwise the full MIME type) and then the data in the format specified by the MIME type, and the configuration file specifies how to decode it. b_jonas: and I presume the same database contains other metadata over just the images b_jonas: which is why you don't just store the compressed image in a separate file zzo38: Yes, that is true. zzo38: And that is why it isn't stored in a separate file. b_jonas: zzo38: if you want to eg. send the uncompressed data to the printer, you can consider trying to not send that data through your process, so that your process only send ths compressed image to the forked process, and then the convereted output from that process is sent to whatever program does the printing b_jonas: then you don't need any non-blocking things b_jonas: but it's also not too hard to handle the two pipes in a select loop if you really need to zzo38: That picture is not the entire card, though, but only a part of it. And there is no guarantee that there will not be other stuff overlapping, or other things done to it before the page is completed. zzo38: (This program is meant to render cards for card games such as Magic: the Gathering; like MSE but different.) b_jonas: zzo38: and you want to process that uncompressed data together with some other data you read from the database, which is why you want it in the same process? b_jonas: well, then either write something to a temporary file (that you unlink when you no longer need), or use a select loop to read and write the pipe in an unknown order b_jonas: if you need both sides from the same process then that's mostly what you can do b_jonas: though for some converters, you may be sure that it won't start writing even a header before it completely reads its input, in which case you can just write the input to the pipe and then read the output, without select or nonblocking b_jonas: that can depend on the converter and its options zzo38: Yes, OK. Probably I will just copy the data from the database to a temporary file when doing it, I suppose; that seems to be easily enough. zzo38: Yes, about what you said about the converter is true, but such thing is not known by this program b_jonas: of course another possibility is to also put the converter in the same process b_jonas: which I could do with ImageMagick in particualr b_jonas: because it has some dynamic libraries and documented interfaces b_jonas: C and C++ interfaces b_jonas: I think those allow reading compressed image streams from in memory, though I haven't actually tried that zzo38: Yes, although I am not even knowing if it is a format supported by ImageMagick or not, for one thing. b_jonas: even for embedding, I read/wrote the compressed image from/to disk files, I just manipulated the uncompressed image data in memory of the same process zzo38: (I can easily change how it communicates with the external program later if needed, I suppose.) b_jonas: sure, but you can do this with some libraries other than ImageMagick too b_jonas: there are good reasons for that, beacuse ImageMagick doesn't natively support everything zzo38: The way I have though, the user can install only the ones they need, rather than needing to add all of the dependencies that you don't use b_jonas: though you can also do conversion to a more convenient image format when you're importing to the database, and later read that convenient (but still compressed) input format with ImageMagick b_jonas: this can happen if you scan or photograph the card, but then preprocess the image and store the cleaned up image in the database as a jpeg b_jonas: that's when you can also rotate and crop and color correct the scan/photo, not just convert formats zzo38: Yes, I suppose that can also work, although then I wouldn't need to support more than one format inside the process (since conversion from any other format can be done before importing into the database), but JPEG is probably not a good choice in this case because JPEG is lossy. zzo38: (Also, the picture is not necessarily RGB and it might be CMYK instead.) b_jonas: you can still have more than one formats, since ImageMagick handles multiple formats with a natively built in decoder b_jonas: ImageMagick abstracts away some of those format differences zzo38: Probably only the artwork of the card would be stored in the database; the border pictures would be in external files. b_jonas: that doesn't change much of what I said b_jonas: mind you, these days there are too many cards with art extending outside the borders that you might not want to do that b_jonas: for the inner and middle borders that is b_jonas: you can do it with the outer black (or white) border, except for Un-sets b_jonas: but if you're assembling your own cards from art that you have, then you might store different elements of the card separately zzo38: Whether or not the art extends outside of the border wouldn't be built into the program anyways, since that stuff can be controlled by templates. zzo38: Have you used Magic Set Editor? b_jonas: one image for the art box, one image for the inner and middle border and text box, one for the text box watermark, and some for mana symbols b_jonas: no, I haven't used it b_jonas: I haven't created physical custom Magic cards, except simple proxies by putting a handwritten slip of paper next to the card inside the sleeve zzo38: Different elements of the card would be stored separately, some stuff (specific to these individual cards and the set) in the database, and other stuff (applicable to any cards) in the template. zzo38: If you are interested in TeXnicard then you should probably join the newsgroups of it. Also, for mana symbols I would probably want to use fonts instead (MSE uses pictures for the mana symbols, but I think to use fonts for the mana symbols will be better). b_jonas: sure, if you have a font that contains all forty-something mana symbols, then that can work b_jonas: plus the tap and untap symbol zzo38: Do you think some special effects other than opacity might be needed? Lykaina: do we discuss magic the gathering in here? Lykaina: my usual irc channel for it is inactive atm zzo38: This channel isn't mainly for Magic: the Gathering, but sometimes we will discuss anything including Magic: the Gathering if there isn't the esoteric programming to discuss at the time, I suppose. zzo38: Do you like to make up custom Magic: the Gathering cards? zzo38: Or puzzles? Lykaina: https://tappedout.net/mtg-decks/nylea-based-mono-g/ Lykaina: look good? Lykaina: that was the question i asked zzo38: I don't know much about looking if a deck is good or not. Lykaina: oh shit...i have more than 1 of a card and the format is edh zzo38: Oops, yes you are correct, you have 2x Ripjaw Raptor zzo38: That won't do, so you will have to change it zzo38: I also invented a file format for deck lists Lykaina: anyone use it? zzo38: I don't know. zzo38: Here is a file using that format: http://zzo38computer.org/textfile/miscellaneous/magic_card/decks/making_enemies.deck zzo38: For the commander, use a [COMMAND] block. zzo38: (The and are not needed if it is a single deck.) imode: if you build a tool, and it has no purpose, what's the point of the tool? zzo38: I don't know. \oren\: should I rewrite my font editor in Rust? imode: what's the purpose? \oren\: it has a memory leak and I can't find it \oren\: if I rewrite it in rust, that is supposed to mean it can't have memory leaks zzo38: What font formats does it use? zzo38: What is it written in now? zzo38: OK. Did you publish it? zzo38: I have read of use of farbfeld compressed with bzip2 for picture compression. However, if a picture is in JPEG format then it seem JPEG is a better compression, but farbfeld compressed with bzip2 will be a better compression than PNG in some cases. \oren\: http://www.orenwatson.be/neoletters_tools.tar zzo38: What transformations can be done to improve JPEG compression without being more lossy? zzo38: (Assuming the file that you are trying to transform is already JPEG) imode: \oren\: valgrind? imode: how do I build this? imode: and do you have a sample file? imode: built it, now I need a sample file. \oren\: http://www.orenwatson.be/neoletters.bdf zzo38: You could also try pcf2bdf \oren\: oh and it also need s UnicodeData.txt from the unicode foundation imode: mind linking me that? \oren\: (this is how it displays the names) https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt imode: interesting.. imode: how do I exit the editor? \oren\: ctrl-Q \oren\: or ctrl-X to exit without saving imode: interesting, yeah that's quite the memory leak. let's see if you clean up your allocated space. zzo38: What if you want to make a non-Unicode font though? Then the Unicode data is not applicable. imode: it looks like you never clean up the file judging by the size of the leak. the input BDF was ~3mb. imode: 4,347,372 bytes allocated and in-use at exit, but no double frees. \oren\: fix that and then see if it still has a leak imode: I'm not that far in but I don't see any buffer cleanup, yeah. imode: when you load the font, you `malloc` quite a bit of stuff and attach it to the passed-in bdfinfo, but I don't see you freeing it. \oren\: I guess I kinda forgot that valgrind can't tell the difference between things still accessable at exit and things that have "actually" leaked imode: that plus a calloc and no free. imode: yeah you haven't lost the references to anything, you just haven't cleaned up the stuff you have references to. imode: you `calloc` a big ol' hunk of space for some glyphs but you never free them. imode: this is if you just load a font file, save and close. I imagine if you open another, you'll do the same allocations and lose the previous references. zzo38: I think valgrind can tell you which one is "lost", though. imode: it can and will. \oren\: yeah apparently I'm bad at know what valgrind is saying \oren\: I thought it meant I actually lost reference to that much imode: nah, just means it's in use at exit. imode: you'll see that with SDL and a couple of other libs. \oren\: I'm going to work on making these tools more flexible and possible to work on fonts with different dimensions imode: I dig the editing aesthetic. a lot of the glyphs are broken for me though. \oren\: Well it relies on my fon't particular method of displaying braille to look good imode: oh no the braile works great. imode: this is garbage on my screen, though: "𝔅𝔇𝔉𝕖𝕕𝕚𝕥" imode: too compressed I guess. \oren\: https://imgur.com/GKQKGJG imode: ah yeah, I can kinda see the edit part. capitals are just totally gone, though. my terminal is trying lmao. \oren\: it says BDF in fraktur and edit in blackboard bold \oren\: In my font, bold fraktur I gave up on and I made it uncial instead imode: looks solid on that screen. \oren\: https://imgur.com/yCgc3Kv I like how the unicode consortium added all these but then was like, full superscript and subscript alphabets? that's too far imode: unicode doesn't have those? wtf. \oren\: superscript small q, large C, Q, S, X, Y, Z are all that is missing for superscript zzo38: I made up a better character set for the specific use of being used on a fix pitch text grid, such as on a terminal emulator. \oren\: ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖ ʳˢᵗᵘᵛʷˣʸᶻ imode: why the hell are they missing?! imode: what do they have against q, C, Q, S, X, Y and Z? \oren\: there was a big argument on the Unicode mailing list about it \oren\: and basically the rasoning was, unicode isn't supposed to be used for formatting imode: bullshit. imode: that reasoning is bullshit. \oren\: it is bullshit imode: isn't there a character reversal glyph. imode: U+202E? zzo38: Unicode is very messy, and is equally bad for all uses. zzo38: However, it does have the advantage of being compatible with ASCII, at least. imode: yeah, bullshit, there's many, many, _many_ cases where unicode makes explicit statements about how a thing should be formatted. if that was a disagreement, the super and subscript forms shouldn't even be included, not this half measure. zzo38: Do you like my terminal character coding? (It is not meant to be used for other purposes, though; but there may be other character sets useful for the other purposes.) imode: I don't know your terminal character coding. \oren\: I have it on my todo list to add all the missing ones in hthe PUA in my font zzo38: This is so far: http://zzo38computer.org/textfile/miscellaneous/utce Some stuff may be changed if needed zzo38: Some of these characters are also in Unicode but also many isn't. zzo38: (And in some cases, it does correspond to a Unicode character but the width may differ or the way different characters are distinguished may differ from Unicode.) \oren\: yeah width is really messy in unicode and one of the goals of my font is to be the only large font that actually has correct width as defined in Unicode Standard Annex #11 East Asian Width \oren\: becuase no other font maker seems to care, and in particular, GNU unifont has wide devanagari which is stupid \oren\: GNU unifont totally ignores the fact that nearly all terminals use the annex #11 for width data zzo38: I think what I did is better though. zzo38: (I also think that each program should do one thing well, which is the UNIX philosophy; in this case though it is the character set/coding rather than a program, but still that is what it is. This one does specifically terminal character coding. For other purposes, use something else.) \oren\: the main goal of my font is to display unicode correctly and more-or-less biguously in a terminal zzo38: O, OK. Well, then you have it good for that. But I think that Unicode is the wrong character set for this purpose. zzo38: Also, the word "biguously" is not in Wiktionary (nor is "biguous"). \oren\: I use biguous because unambiguous seems like a double negative kingoffrance: well, that makes my charset madness sound less insane, so good work zzo38 i agree kingoffrance: re: UNIX philosophy zzo38: Ghostscript includes a file viewjpeg.ps to print a JPEG file. In the comments where it says the author's address, I found a quine in PostScript. zzo38: (Also, it doesn't take the JPEG file name as a command line argument, even though Ghostscripts supports that. It is easily enough to fix it so that it does, though.) ArthurStrong: Hi all ArthurStrong: zzo38: ArthurStrong: Interestingly, can simulated annealing be used for PCB routing? zzo38: Maybe; I don't know. int-e: http://apt.cs.manchester.ac.uk/projects/tools/mucs-pcb/ explicitly mentions simulated annealing. wib_jonas: Lykaina: sometimes this channel talk about esoteric aspects of Magic: the Gathering. In particular, ais523 presented two attempts at proving M:tG Turing complete, in the sense that you can transform any computation to a game that terminates iff the computation terminates. wib_jonas: See https://esolangs.org/wiki/Talk:StackFlow , there's one attempt to proof based on the StackFlow language, which has a bug that we couldn't fix; wib_jonas: then there's a later attempt of proof based on a simpler computation model, The Waterfall Model, where the problem hinges on compiling universal computation to a small enough Waterfall Model program wib_jonas: This latter one is believed to prove at least Turing completeness, and ais523 details it in an article linked from there. wib_jonas: I wonder if you can get more than Turing completeness if you take the rules for breaking infinite loops literally. int-e: wtf. '721.1a The rules for taking shortcuts are largely informal. As long as each player in the game understands the intent of each other player, any shortcut system they use is acceptable.' int-e: That gives you a lot of leeway when it comes to TC-ness... by choosing sufficiently well-informed players. int-e: Oh. 712.1c says tournaments are different :/ wib_jonas: Actually the article is based on a different construction wib_jonas: one that doesn't use Hungary Lynx and Noxious Ghoul int-e: The tournament version of shortcuts is sufficiently fun. int-e: Ah, spoilsports: "Non-deterministic loops (loops that rely on decision trees, probability or mathematical convergence) may not be shortcut." kspalaiologos: I (possibly) made a Malbolge interpreter in Malbolge kspalaiologos: 10GB of ram eatenm kspalaiologos: and it was swapping kspalaiologos: is there any busy beaver competition? Taneb: As in, to find ever-busier beavers? Taneb: Not to my knowlege kspalaiologos: because I've got a nice one kspalaiologos: that requires more gigabytes of memory than there are atoms in universe kspalaiologos: and I *know* it will finish, eventually Taneb: How many states? kspalaiologos: it's hard to tell kspalaiologos: really kspalaiologos: the program is around 40MB big Taneb: Then that's not very interesting int-e: http://www.logique.jussieu.fr/~michel/bbc.html has some pertinent numbers Taneb: It looks like you can require more memory than there are atms in the universe with 2 symbols and 7 states int-e: Or 6 states, unless you compress the tape (assuming the tape is compressible... which seems likely since we do have a termination proof) int-e: (going by the 10^78 to 10^82 estimate for the number of atoms in the universe, with a very generous margin for error.) int-e: Of course the tape is very compressible if you accept a description of the form "tape after executing the TM M for n steps, starting from an empty tape". kspalaiologos: interesting kspalaiologos: << In Haskell, we don't talk about immutability. We talk about cytoendohygrobimorphisms in the category of endobiditricomanifolds and other elementary constructs. >> kspalaiologos: /r/shittyprogramming gold wib_jonas: ``` cat /hackenv/wisdom/zygo* HackEso: A zygohistomorphic prepromorphism is used when you really need both semi-mutual recursion and history and to repeatedly apply a natural transformation as you get deeper into the functor. kspalaiologos: ``` ls /hackenv/wisdom/zygo* HackEso: ​/hackenv/wisdom/zygohistomorphic prepromorphism kspalaiologos: interesting kspalaiologos: what is a monad anyway kspalaiologos: the definition in our Polish wiki used to look like verses summoning satan wib_jonas: kspalaiologos: https://wiki.haskell.org/Zygohistomorphic_prepromorphisms kspalaiologos: gosh it really exists wib_jonas: Unfortunately, no one can explain what a monad is. You have to see it for yourself. kspalaiologos: can one make a monad in C? kspalaiologos: or other language I'm at least barely familliar with int-e: kspalaiologos: https://willamette.edu/~fruehr/haskell/evolution.html seems somewhat relevant. wib_jonas: ^ ah yes, that too wib_jonas: I have my own factorial definition at http://www.math.bme.hu/~ambrus/pu/Bin.hs kspalaiologos: interesting kspalaiologos: I like scheme int-e: Monads in C... I suppose you can come up with some programming patterns, in a similar spirit as OO in C. But I wouldn't expect any benefit from going that route, just obfuscation. kspalaiologos: who would like OO kspalaiologos: all you need is procedural programming int-e: OO gives you associated namespaces for your types. int-e: I like that. kspalaiologos: the main principle of OO is encapsulation kspalaiologos: so you don't have a global state, but rather it's simplified down to object instances int-e: ("OO gives you namespaces for types" of course is the one benefit that you lose instantly when encoding it in C) kspalaiologos: if two objects instances mutate (send a message) to certain single object, you lose the benefit of encapsulation kspalaiologos: and there is something that resembles the state kspalaiologos: Namespace for types? int-e: I really liked OO for MUD programming. kspalaiologos: alright? kspalaiologos: I thought about extending C a bit int-e: So you have monsters as objects, players as objects, things you carry around as objects, rooms as objects... it's mostly very tangible. kspalaiologos: but you could do this in C kspalaiologos: look at linux source code and how the drivers are implemented int-e: "you can do this in C" is not a valid argument kspalaiologos: it would be as comfortable when done procedurally as the example you're giving int-e: It's basically a tautology. (You can program it in C, or you can't program it at all.) int-e: I'm quite happy with the fragment of C++ that has structs and classes, no inheritance, and a small amount of templates. I prefer it to doing the same thing in C because of the namespace thing, and well, because templates offer some amount of code generation when you need it. int-e: (Oh and exceptions see the occasional use as well... as non-local returns.) wib_jonas: int-e: yes, but with or without implicitly called user-defined destructors (and implicitly called copy/move constructors/initializers)? because that is, I think, what most clearly distinguishes C++ from C. kspalaiologos: one could employ boehm GC int-e: wib_jonas: I really try to stick to pod-types. kspalaiologos: all your low level stuff is gone int-e: kspalaiologos: I do use Haskell too. :P kspalaiologos: any ideas on brainfuck <=> SQLite interop? kspalaiologos: especially the callbacks kspalaiologos: how to get over 'em int-e: I'll go out on a limb and say I have better things to think about. kspalaiologos: it's already an amazing thing to think about kspalaiologos: also, as you use haskell you're probably experienced in CS theory kspalaiologos: would you tell me how the f*ck can 3-celled brainfuck be Turing complete int-e: I mean I admire your efforts to deprive "Brainfuck" of its esolang status, but I don't want to be part of it. kspalaiologos: I know about collatz function kspalaiologos: and I know it proves turing completness kspalaiologos: but it makes no sense to me that you can for example do modulus operation on it fizzie: There was that one brainfuck system call library thingamajick, what was it called? Wasn't really anything very surprising, though -- just a specific protocol for the input/output instructions. kritixilithos: kspalaiologos: oh you're extending bf and making it a proper language? int-e: kspalaiologos: Just work through oerjan's construction. int-e: It's only slightly tricky!!!1 kspalaiologos: kritixilithos, wiring up SQLite to write an URL shortener in brainfuck kspalaiologos: int-e, I mean, possibly kritixilithos: what have you added so far? kspalaiologos: interop between brainfuck and sqlite kspalaiologos: currently you can just INSERT to the database kspalaiologos: SELECT is being worked on because I can't get over the callback mechanism kspalaiologos: I thought that if I had 3 bignum cells and a brainfuck like language kspalaiologos: to prove it's turing complete I'd simulate a stack machine kspalaiologos: that has two stacks and in result is turing complete kspalaiologos: so the proof is more practical kspalaiologos: to push something on a stack I'd just *= 255 & += n; kspalaiologos: but to pop something out of the stack I need modulus fizzie: There was https://esolangs.org/wiki/Systemf but that's not the one I was thinking of, it was more abstract and didn't introduce any new commands. kspalaiologos: there was ESOAPI for ESOOS kspalaiologos: but it's garbage for userland programming kspalaiologos: that used something along ANSI escapes but better int-e: kspalaiologos: pushing isn't the problem... popping is. fizzie: Right, and https://esolangs.org/wiki/PESOIX kspalaiologos: thats what I just said int-e: You'd need a division by a constant with remainder using only two cells. int-e: The fun thing about Collatz machines is that you get 3 cells for that task, effectively. int-e: s/machines/functions/ kspalaiologos: but it would be possible to translate 3-cell brainfuck to 2-register MM int-e: Not necessarily. kspalaiologos: 2-register MM is turing complete kspalaiologos: it should be able to simulate any turing machine int-e: Fair enough. int-e: However then it won't be complexity preserving. kspalaiologos: and the translation process may never finish int-e: A direcy, complexity preserving translation will almost certainly need 3 cells. int-e: *direct int-e: s/cells/counters/ kspalaiologos: or yeah kspalaiologos: nut the thing that bothers me the most in this case are unbalanced loops kspalaiologos: because one can't refer to variable register using MM int-e: Because a 3-cell Brainfuck program can divide a counter that is known to be even by 2 in two cells, while keeping another counter around. A Minsky machine cannot divide a counter in place. int-e: The reference to a variable register isn't a problem... just make the tape position part of the MM state. kspalaiologos: we can have just two registers, adding another variable to the state makes it very cheaty arseniiv: hi hi hi int-e: Make the MM state a pair of program position (in the brainfuck program) and current tape position (0,1,2) kspalaiologos: in the runtime the state is constant? int-e: That way a 3-cell Brainfuck program of length l becomes a MM with 3 registers and 3*l states. kspalaiologos: no no no kspalaiologos: I'm not interested in 3 registers kspalaiologos: I want 2 int-e: And that preserves complexity. int-e: *I*'m interested in preserving complexity here. kspalaiologos: complexity doesn't bother me int-e: You can do the usual m to 2 counters reduction afterwards. int-e: At an exponential cost in runtime. kspalaiologos: can I do that int-e: You encode counters a,b,...,z as 2^a 3^b ... 101^z. You can do division with remainder using one more counter... so you can check whether any of the original registers is 0 (--> not divisible by the corresponding prime), and increment and decrement counters as well. int-e: (did you know that 101 is the 26th prime...) kspalaiologos: umm, not kspalaiologos: but I still don't understand it int-e: increment b --> multiply the counter by 3. decrement b -> divide the counter by 3; if the remainder is 0, the decrement succeeds. Otherwise multiply by 3 and add the remainder back, and branch somewhere else. int-e: (You can keep track of the remainder in the finite state of the Minsky machine, and of the quotient in the other counter.) kspalaiologos: but you need modulus kspalaiologos: and there is NO way to implement it on a 2 register MM int-e: that's what I just called remainder. kspalaiologos: I do realise int-e: You're wrong. kspalaiologos: how to do this int-e: You just need many states. int-e: http://paste.debian.net/1124843/ int-e: It's important that we only ever divide by known constants. kspalaiologos: interesting wib_jonas: [ (^~,!)5 j-bot: wib_jonas: 3125 120 Taneb: I should try to learn J again kspalaiologos: https://www.jsoftware.com/help/learning/contents.htm Taneb: Never quite got the hooks and stuff last time kspalaiologos: I'll probably read this one wib_jonas: `python3 -cimport math; v = 5; print(v**v, math.factorial(v)) HackEso: 3125 120 kspalaiologos: I understand that J code above kspalaiologos: but not quite the tilde Taneb: [ ^~ 0 1 2 3 4 5 j-bot: Taneb: 1 1 4 27 256 3125 Taneb: ^~ is a monad (in the J sense, not the Haskell sense) which computes x^x kspalaiologos: << The symbol for division is % (percent). >> kspalaiologos: gosh why kspalaiologos: every single language uses slash for division kspalaiologos: it has to be a joke kspalaiologos: also, why is - turned into a floor (_)? kritixilithos: `/` is used instead for reduce (and other stuff) HackEso: ​/`? No such file or directory wib_jonas: division should not get a precious single character symbol in any language, it's such a rare operation, it should just get named functions kspalaiologos: interestinb kritixilithos: kspalaiologos: because `-` is a function that can also be monadic, in which case it negates the right argument FireFly: kspalaiologos: - is used for subtraction and unary negation, but _ is used in a negative number literal j-bot: kspalaiologos: _2 kritixilithos: look into apl if you don't like j's symbols kspalaiologos: it makes a tiny bit of sense kspalaiologos: what does it mean that it's monadsic kspalaiologos: *monadic wib_jonas: > let { f x = 10 * x; } in fmap f (3, 6, -2) lambdabot: error: lambdabot: • No instance for (Functor ((,,) Integer Integer)) lambdabot: arising from a use of ‘e_110362’ wib_jonas: > let { f x = 10 * x; } in fmap f (3, 6) lambdabot: (3,60) wib_jonas: ^ this is why wib_jonas: and it's also why standard ML uses a different character for unary negation, though their specific choice is objectionable FireFly: I think most languages only let you express positive number literals, and simply have you apply negation on a positive literal kspalaiologos: that's right j-bot: FireFly: _5 kritixilithos: [ -2 3 kspalaiologos: [ * 2 3 j-bot: kritixilithos: _2 _3 j-bot: kspalaiologos: 1 1 wib_jonas: `python3 -cprint([10 * x for x in [3, 6, -2]) HackEso: ​ File "", line 1 \ print([10 * x for x in [3, 6, -2]) \ ^ \ SyntaxError: invalid syntax kspalaiologos: [ *: 2 3 j-bot: kspalaiologos: 4 9 kritixilithos: [ _2 3 j-bot: kritixilithos: _2 3 wib_jonas: `python3 -cprint([10 * x for x in [3, 6, -2]]) HackEso: ​[30, 60, -20] kspalaiologos: it treats a single star like an empty variable? kspalaiologos: or what kspalaiologos: (single -> without a colon) FireFly: no, *: is square kritixilithos: https://www.jsoftware.com/help/dictionary/vocabul.htm FireFly: I don't know what "treats like an empty variable" would mean here kritixilithos: it also is a function kspalaiologos: so it returns the sign kspalaiologos: [ * _2 j-bot: kspalaiologos: _1 j-bot: kspalaiologos: 1 j-bot: kspalaiologos: * - kspalaiologos: interesting kspalaiologos: I see some obfuscation potential kritixilithos: [ (* -) 10 j-bot: kritixilithos: _100 wib_jonas: [ * 2j1 j-bot: wib_jonas: 0.894427j0.447214 kspalaiologos: what does j do arseniiv: every single language uses slash for division => Haskell uses / for division but also % to construct rationals from integer, e. g. 2 % 3 for the number 2/3, and they are stringified accordingly, though you can also write (2 :: Rational) / 3 kspalaiologos: its imaginary/complex wib_jonas: kspalaiologos: a complex number literal arseniiv: > (2 :: Rational) / 3 kspalaiologos: I'm an idiot when it comes to FP, I didn't use any FP language really kspalaiologos: but I spent a fair amount of time on low level programming arseniiv: this doesn’t change that J is a write-only esolang wib_jonas: `python3 -cprint(2+1j) HackEso: ​(2+1j) kspalaiologos: I wanted to learn FP but it seems too weird FireFly: what does 'low level' mean in this context? wib_jonas: `python3 -cprint(abs(2+1j)) HackEso: 2.23606797749979 kspalaiologos: FireFly, I've been writing kernels wib_jonas: oh, I want the sign kspalaiologos: I managed to write a simple java powered kernel lately kspalaiologos: it's based around stupid implementation of SE 1.5 kritixilithos: "this doesn’t change that J is a write-only esolang" apl OTOH isn't write-only, because the glyphs are easier to read kspalaiologos: but hard to write kspalaiologos: so it' kspalaiologos: s read only kritixilithos: no, get an apl keybaord layout and it becomes easy to write wib_jonas: `python3 -cv = 2+1j; print(v / abs(v)) HackEso: ​(0.8944271909999159+0.4472135954999579j) arseniiv: kspalaiologos: equational FP languages (like Haskell or my F-turned thing) are more readable than J, I assure you kspalaiologos: can't they use I instead of J to signify irrational unit? arseniiv: s read only => rofl :D kspalaiologos: possibly kspalaiologos: I tried to get a taste of Elixir but currently it's 0-1 for me kspalaiologos: going so hard after the state seems peculiar to me kritixilithos: what about lisp kspalaiologos: I'll talk about lisp-likes: Used them, liked them wib_jonas: `python3 -cv = complex(2,1); s = v / abs(v); print("%f+%fI" % (s.real, s.imag)) # kspalaiologos: there, it uses I HackEso: 0.894427+0.447214I kspalaiologos: but my constrained mind seems to take lisp easier than languages camouflaging to be something really useful arseniiv: any lisp? arseniiv: your lisp may vary :D kspalaiologos: CL for me please arseniiv: bet Clojure, Racket, Scheme and CL have a ton of differences between each other arseniiv: ah, CL is secretly an imperative language if that tag is still useful kspalaiologos: JVM garbage arseniiv: from what I’ve seen kspalaiologos: is the difference in some cases kspalaiologos: I'm just an ordinary procedural programming fan kspalaiologos: willing to run a startup using Algol 68 wib_jonas: kspalaiologos: how about using fortran 2019? kspalaiologos: Have you seen Cobol on Wheelchair (or Cogs)? kspalaiologos: /* it was Wheelchair: https://github.com/azac/cobol-on-wheelchair */ kspalaiologos: it's actively developed (since I looked at it last time) kspalaiologos: "(c) " love it arseniiv: anyway I often like a clean piece of imperative code kspalaiologos: look on this clean piece of imperative code: https://github.com/kspalaiologos/asmbf/blob/master/bfasm.c arseniiv: but this is C! kspalaiologos: it's beautiful nonetheless kspalaiologos: and in fact kspalaiologos: it's very imperative arseniiv: and the piece is too long and is for an orchestra I think kspalaiologos: the only state is global kspalaiologos: and it's 2000 element int array kspalaiologos: gosh, 2k10 me was a stupid person arseniiv: risky, risky kspalaiologos: why didn't I rewrite it sooner kspalaiologos: why didn't I rewrite it to this day arseniiv: I often think that about myself too kspalaiologos: everyone does wib_jonas: my very old code has assignments with no space before the equals sign, only after. it's horrible. kspalaiologos: I've seen code that has spaces before and after every paren kspalaiologos: going like kspalaiologos: while ( ( c = getchar () ) != EOF ) wib_jonas: hey, that doesn't have space before and after every paren arseniiv: once I thought that the language should have a rational implicit conversion for any occasion, between any two types, and a special syntax (instead of plain method/function names) for most operations on standard types kspalaiologos: didn't copy it, because the code is long lost wib_jonas: oh yeah, my old code has space between the function name and the call parenthesis too. also horrible arseniiv: I almost never wrote like that at least arseniiv: maybe because I almost started with VB6 where the IDE formats your line as you leave it kspalaiologos: http://prntscr.com/qk1xun kspalaiologos: this is horrible too kspalaiologos: taken out of NT kernel's inet driver kspalaiologos: in the original form kspalaiologos: return( Err ); kspalaiologos: and brackets around return kspalaiologos: it's the final boss of garbage code kspalaiologos: [ 5 * 4 + 3 j-bot: kspalaiologos: 35 kspalaiologos: are the expressions evaluated right to left, really? kspalaiologos: without caring about operator precendence? kspalaiologos: interesting FireFly: well, the operator precedence is "all verbs are equal precedence", and verb evaluation is right to left, yes FireFly: Iverson explained quite clearly why in one of his old papers on APL, I think it was in notation as a tool for thought FireFly: https://www.jsoftware.com/papers/tot.htm FireFly: in general, APL was developed as an alternate maths notation originally, designed to be more consistent than the conventional notation FireFly: it also amongst other things introduced the notation for floor and ceiling that we use today kspalaiologos: interesting kspalaiologos: "A function taking a single argument on the right is called a monadic function, or a monad for short. " kspalaiologos: so monad is just an unary function? kspalaiologos: that's the real meaning of this buzzword which definition feels like reading Malbolge? j-bot: kspalaiologos: 0.25 kspalaiologos: this is cool though arseniiv: kspalaiologos: no, Haskell monads are the other sort :) kspalaiologos: so monad's definition varies by language? FireFly: kspalaiologos: compare "variadic", or the use of "monad", "dyad" in music fizzie: The definitive definition is whatever's in our wisdom, of course. fizzie: `? monad FireFly: (yes, it refers to the number of arguments) HackEso: Monads are just monoids in the category of endofunctors. fizzie: `? endofunctor HackEso: Endofunctors are just endomorphisms in the category of categories. FireFly: see also https://en.wikipedia.org/wiki/Arity#Terminology fizzie: `? endomorphism HackEso: Endomorphisms are just final morphisms. fizzie: `? morphism HackEso: A morphism is just a natural transformation between two diagrams of shape 1. fizzie: See, so useful. Taneb: `? final HackEso: ​"final" is an annotation in Java; it means the marked code will not be changed anymore and is a final version. fizzie: You have to pick words quite carefully to stay in the same domain of things. fizzie: `? category HackEso: A category is an enriched category where the enriching category is the category of classes. Taneb: `? class HackEso: class? ¯\(°​_o)/¯ FireFly: a lot of J's terminology is borrowed from linguistics, I'm not sure if the use of monadic/dyadic (which also existed back in APL) are derived from the musical terms.. arseniiv: so monad's definition varies by language? => I think these times “monadic” is far more often about category theory monads, not arity-one functions kspalaiologos: > Monads are just monoids in the category of endofunctors. < lambdabot: :1:25: error: parse error on input ‘in’ kspalaiologos: thats like the wikipedia article looked like kspalaiologos: I swear it was this fizzie: `? kittegory HackEso: A kittegory is just a small category. kmc: yes, sometimes "monadic" just means "1-adic" kmc: or arity 1 kmc: oh it also has a meaning in philosophy kmc: from kant i think arseniiv: A morphism is just a natural transformation between two diagrams of shape 1. => rofl int-e: . o O ( Classes were a concept in pre-anonymous internet that have since been replaced by finely meshed masks. ) arseniiv: from kant i think => wasn’t it Leibnitz? arseniiv: though they could be both making their own monads arseniiv: too many monads kspalaiologos: [ * + 4 3 2 j-bot: kspalaiologos: 1 1 1 kspalaiologos: [ + / 2 3 4 j-bot: kspalaiologos: 9 kspalaiologos: what the heck Taneb: What were you expecting? kspalaiologos: I just switched operators FireFly: in +/ 2 3 4 you have the adverb / modifying the verb + to produce "sum" kspalaiologos: its the same mathematical operation Taneb: op / x y z is equalivalent to x op y op z kspalaiologos: Ah I thought / is division kspalaiologos: I can't switch my mind to % arseniiv: [ % 0 0 j-bot: arseniiv: _ _ arseniiv: [ % 0 1 j-bot: arseniiv: _ 1 kspalaiologos: interesting arseniiv: [ % 1 0 j-bot: arseniiv: 1 _ kspalaiologos: [ % 1 1 j-bot: kspalaiologos: 1 1 arseniiv: I don’t comprehend kspalaiologos: no no no kspalaiologos: you need to place it like kspalaiologos: [ 0 % 0 j-bot: kspalaiologos: 0 kspalaiologos: there we go FireFly: arseniiv: unary % is reciprocal, so you're taking reciprocal of 0 or 1 arseniiv: what, 0 / 0 = 0?.. kspalaiologos: it's logical Taneb: It's just as true as any other answer you can give arseniiv: ah wait I thought about 0^0 maybe kspalaiologos: _ is Infinity Taneb: ] 0 ^ 0 arseniiv: [ 2 ^ 3 j-bot: arseniiv: 8 arseniiv: [ 0 ^ 0 j-bot: arseniiv: 1 int-e: arseniiv: a/0 is a sane choice *if* you have to make / total. kspalaiologos: what was ^ for FireFly: expotential int-e: arseniiv: a/0 = 0 I mean. FireFly: or well, power kspalaiologos: so ^ == *:? int-e: 0^0 is 1 of course. FireFly: no, *: is square FireFly: *: is the same as ^&2 FireFly: I suppose FireFly: at least for reals arseniiv: 1 => phew [I was trying to remember how’s that word written] kspalaiologos: / means reduce? arseniiv: int-e: maybe, but why not 1 for example. / is related to multiplication, 1 is too. 0 is less related FireFly: kspalaiologos: pretty much kspalaiologos: I think we should continue working on EsoOS int-e: arseniiv: Picking 0 makes (a+b)/c = a/c + b/c and (ab)/c = a(b/c) true unconditionally. So... the choice is pragmatic. kspalaiologos: and feature J as one of languages available there kspalaiologos: why does NB. denote a comment kspalaiologos: what's the acronym behind it FireFly: nota bene arseniiv: int-e: is it because 0 is absorbing with regard to × just like ∞ FireFly: it's been a sort of comment marker for 300 years int-e: arseniiv: People do not agree on this universally, of course. (There are some vocal people who think that x/0 should be left as unspecified as possible... it has a value, but you don't know what it is. But then you'll still have theorems like x/0 - x/0 = 0 that will annoy the purists that you were trying to please...) kspalaiologos: FireFly, yeah kspalaiologos: you're right kspalaiologos: I used to learn a tiny bit of Latin int-e: arseniiv: So given the choice between not satisfying the purists, and a little more convenience in proving things, I'd pick convenience every time out of 10 :) arseniiv: I like to imagine 0 in context of nonnegative integers or rationals as 2^∞ 3^∞ 5^∞ 7^∞ … kspalaiologos: [ >. 1 j-bot: kspalaiologos: 1 Taneb: [ 2 (*+*) 3 j-bot: Taneb: 12 kspalaiologos: [ >. 21.37 j-bot: kspalaiologos: 22 j-bot: kspalaiologos: +\ j-bot: kspalaiologos: + arseniiv: int-e: But then you'll still have theorems like x/0 - x/0 = 0 that will annoy the purists that you were trying to please... => yeah, I’ll be annoyed for sure int-e: arseniiv: Of course, in the end you still get plenty of theorems that divide by some d and require that d != 0. kspalaiologos: this was a great opportunity to make some brainfuck code j-bot: arseniiv: |spelling error j-bot: arseniiv: | ∞ j-bot: arseniiv: | ^ j-bot: kspalaiologos: >. kspalaiologos: shouldn't 1 be assumed here? kspalaiologos: like it is with %? kspalaiologos: [ % 10 j-bot: kspalaiologos: 0.1 FireFly: I'm not sure what you mean FireFly: unary % is reciprocal, but in general the unary and binary case of a verb doesn't have to be related FireFly: unary >. is ceiling, binary >. is maximum I believe kspalaiologos: ah, so there is actually a monad FireFly: it's all in the vocabulary wib_jonas: dear webpage of manufacturer, if I want to download the manual for your device, I'd like to tell you which device it is first and then choose from the languages in which a manual is available, rather than choose a language first then search for devices with a manual in that language. thank yuo. FireFly: https://www.jsoftware.com/help/dictionary/vocabul.htm is quite handy arseniiv: btw one great thing about lisps is that their + − × / are often variadic kspalaiologos: otherwise you'd need to reduce kspalaiologos: not a great deal but saves time arseniiv: though now I seem to think (− 1 2 3) should be treated as (1 + 2) − 3 as we drop a left operand when writing (− 2) Taneb: That gives _1 _2 _3, right? kspalaiologos: [ - 1 2 3 j-bot: kspalaiologos: _1 _2 _3 kspalaiologos: [ + - 1 2 3 j-bot: kspalaiologos: _1 _2 _3 Taneb: Well, it does in J. In Lisp I don't know kspalaiologos: [ - \ 1 2 3 j-bot: kspalaiologos: _1 0 0 j-bot: kspalaiologos: _1 _2 0 j-bot: kspalaiologos: _1 _2 _3 kspalaiologos: why did it print out 3 messages Taneb: \ is not / FireFly: because you produced a 3x3 array arseniiv: J is jarring :P Taneb: APL is aplarring? arseniiv: (making jars) FireFly: it's a handy tool, and moreso I think it's handy to reason about programs in array-programming terms in my head sometimes kspalaiologos: wait a second arseniiv: hm what would alparring then mean kspalaiologos: does this bot have some kind of protection FireFly: another tool in the toolbox for reasoning about problems kspalaiologos: so it doesn't spam out the chat? arseniiv: parring with aluminium? arseniiv: [ - - - - 1 2 3 j-bot: arseniiv: 1 2 3 arseniiv: [ \ \ \ 1 2 3 j-bot: arseniiv: |syntax error j-bot: arseniiv: | \\\1 2 3 arseniiv: yes it’s quite protected FireFly: kspalaiologos: not entirely sure; I'd appreciate if you wouldn't try to get it to quit due to flooding kspalaiologos: I'll just check with 6 elements arseniiv: oh okay I won’t too kspalaiologos: if it prints out then it's flawed FireFly: I mean it's limited to three lines at a time kspalaiologos: [ - \ 1 2 4 j-bot: kspalaiologos: _1 0 0 j-bot: kspalaiologos: _1 _2 0 j-bot: kspalaiologos: _1 _2 _4 FireFly: but in principle that means you could spam lines and have it be amplified 1:3 kspalaiologos: [ - \ 1 2 3 4 j-bot: kspalaiologos: _1 0 0 0 j-bot: kspalaiologos: _1 _2 0 0 j-bot: kspalaiologos: _1 _2 _3 0 j-bot: kspalaiologos: _1 _2 _3 _4 FireFly: ok maybe not 3 FireFly: but some limit :P kspalaiologos: I'll try it on pm FireFly: [ i.10 10 j-bot: FireFly: 0 1 2 3 4 5 6 7 8 9 j-bot: FireFly: 10 11 12 13 14 15 16 17 18 19 j-bot: FireFly: 20 21 22 23 24 25 26 27 28 29 j-bot: FireFly: 30 31 32 33 34 35 36 37 38 39 j-bot: FireFly: 40 41 42 43 44 45 46 47 48 49 j-bot: FireFly: 50 51 52 53 54 55 56 57 58 59 j-bot: FireFly: 60 61 62 63 64 65 66 67 68 69 j-bot: FireFly: 70 71 72 73 74 75 76 77 78 79 j-bot: FireFly: ... kspalaiologos: will it kick the bot? FireFly: ok that's the limit kspalaiologos: what's i. kspalaiologos: it's seq kspalaiologos: but like FireFly: it'd be easiest if you reference the vocabulary for looking up verbs kspalaiologos: interesting arseniiv: kspalaiologos: i. is ι :D kspalaiologos: can I make it enumerate alphabet? kspalaiologos: or something else? FireFly: Well not per se kspalaiologos: there aren't really many operators here arseniiv: bet I have seen `atoi` in some language, related to ι but don’t remember in what a way kspalaiologos: but using this language already feels like driving a truck on thin ice FireFly: isn't that just "string to integer" kspalaiologos: yep it is FireFly: kspalaiologos: how so? kspalaiologos: seems illogical to me a bit kspalaiologos: but probably because I'm not used to APL kspalaiologos: is barely anyone using APL these days? FireFly: Not sure, I'm told it's still used a bit in financial stuffs FireFly: along with k Taneb: Didn't Phantom_Hoover get a job working with K? kspalaiologos: K is crazy too kspalaiologos: 2_&{&/x!/:2_!x}'!R kspalaiologos: FireFly, < K is the foundation for a family of financial products > -> you're right FireFly: I think that K is kind of the theoretically beautiful, minimalistic language in the family.. although it's also fairly different from APL and J in terms of how its arrays work FireFly: or well, it's more oriented around nested lists (a la lisps) than APL-style rectangular arrays FireFly: J is much more "batteries included" kspalaiologos: [ average=:+/ % j-bot: kspalaiologos: |ok kspalaiologos: [ average 4 5 j-bot: kspalaiologos: 4.25 4.2 j-bot: kspalaiologos: 5.25 5.2 kspalaiologos: what have I done int-e: beating the averages FireFly: created a hook that uh.. creates a table of the original input and the reciprocal? FireFly: I guess FireFly: I think you meant +/ % # FireFly: (a fork that divides the sum by the length) int-e: > [1/a + b | a <- [4,5], b <- [4,5]] lambdabot: [4.25,5.25,4.2,5.2] int-e: (wrong order, right numbers) FireFly: [ (;/ %) 1 2 3 j-bot: FireFly: ┌─────┬──────────────┐ j-bot: FireFly: │1 2 3│1 0.5 0.333333│ j-bot: FireFly: └─────┴──────────────┘ FireFly: well okay, not a great example kspalaiologos: how did you make that fancy table FireFly: but anyway FireFly: I used ; link, which boxes its left and right arguments before concatenating kspalaiologos: alright FireFly: [ <'hello' NB. we have boxes j-bot: FireFly: ┌─────┐ j-bot: FireFly: │hello│ j-bot: FireFly: └─────┘ FireFly: cats love J kspalaiologos: but this box seems a tiny bit off kspalaiologos: doesn't it int-e: [ <<'hello' j-bot: int-e: ┌───────┐ j-bot: int-e: │┌─────┐│ j-bot: int-e: ││hello││ j-bot: int-e: │└─────┘│ j-bot: int-e: └───────┘ Taneb: int-e: what did you expect? kspalaiologos: thats actually very interesting kspalaiologos: [ <<<"bruh" j-bot: kspalaiologos: (< < <"_ _ _)" kspalaiologos: [ <<<'bruh' j-bot: kspalaiologos: ┌────────┐ j-bot: kspalaiologos: │┌──────┐│ j-bot: kspalaiologos: ││┌────┐││ j-bot: kspalaiologos: │││bruh│││ j-bot: kspalaiologos: ││└────┘││ j-bot: kspalaiologos: │└──────┘│ j-bot: kspalaiologos: └────────┘ int-e: Taneb: It did what I expected. But it's potentially very noisy. Taneb: int-e: I think that's true of a lot of things involving J FireFly: yeah, I wonder if the default output ought to be changed to the more consise way FireFly: I forget the foreign for it.. FireFly: lessee Taneb: Maybe it could use double-lined boxes int-e: FireFly: "concise" if you're wondering about the spelling FireFly: whoops kspalaiologos: lessee kspalaiologos: what language is it kspalaiologos: french? int-e: engl-ish FireFly: kspalaiologos: "let's see" int-e: kspalaiologos: imagine a silent 't' after the first 'e' kspalaiologos: alright kspalaiologos: I misunderstood the context int-e: (engl-ish is a contraction of english-ish, of course) int-e: `? ish HackEso: ish? ¯\(°​_o)/¯ kspalaiologos: `? engl-ish kspalaiologos: `? english-ish kspalaiologos: `? test FireFly: [ (9!:2)'' HackEso: engl-ish? ¯\(°​_o)/¯ j-bot: FireFly: 5 kspalaiologos: what just happened HackEso: english-ish? ¯\(°​_o)/¯ HackEso: test failed. HackEgo-JUnit is not available. kspalaiologos: ah, a great lag int-e: kspalaiologos: https://www.thefreedictionary.com/ish has the right definition. int-e: (or right-ish?) kspalaiologos: is it possible to make a sleep in J? Taneb: Hmm, is "ish" a monad (in the Haskell sense) Taneb: If something is red, it's red-ish Taneb: If something is red-ish-ish, it's red-ish arseniiv: I don’t think the latter is true? Taneb: It's true-ish ;) int-e: . o O ( What color is horse red-ish? ) arseniiv: hm maybe then it’s monad-ish arseniiv: int-e: reminds me about a partially obtuse riddle mentioning a horse too, which has an usual translation “when one buys a horse, what (=in which state) it is?” and an intended translation like “when one have a horse washed” instead of the first, and the answer is then “it is wet” arseniiv: it’s weird even originally arseniiv: I had seen it only in a book, not in vivo at all arseniiv: quite unmemetic int-e: . o O ( weird things are far more common than the word's meaning suggests ) kspalaiologos: http://kspalaiologos.baselinux.net/doc/happy20.wav or http://kspalaiologos.baselinux.net/doc/unreleased.wav kspalaiologos: which one is better arseniiv: also one about horses from a book: “do horses go to a ball” with an intended reparse “do [somebody plural] walk on the balcony” arseniiv: this one even features quite unnatural world permutation to work arseniiv: meaning, that permutation is rare even in convoluted poetry kspalaiologos: the 2nd one got cut a bit arseniiv: kspalaiologos: both yours? kspalaiologos: I'm planning to put them somewhere arseniiv: kspalaiologos: it they are tracked, maybe modarchive or what it’s called kspalaiologos: not there arseniiv: or e. g. Soundcloud kspalaiologos: I'm not an artist kspalaiologos: they are indeed tracked kspalaiologos: actually, I used the first one kspalaiologos: but which one is better? arseniiv: I’m not able to review in meaningful way but both look pretty solid and fun kspalaiologos: let's pretend 2nd didn't get cut kspalaiologos: although there were a few songs from modarchive I liked arseniiv: as the first is longer, there is more material to judge on… hm. I can’t say I wouldn’t pick the first kspalaiologos: especially 2pi radix or 486 arseniiv: but the second is good too kspalaiologos: and I used in my game a couple of months ago a song named "blinded monarch" from modarchive arseniiv: (I myself don’t go to modarchive but I know about it via OpenMPT forum) kspalaiologos: forgot the artist though kspalaiologos: x86 assembly + SDL1.2 is dope though kspalaiologos: https://modarchive.org/index.php?request=view_by_moduleid&query=170225 kspalaiologos: there it is arseniiv: I like the alternate beat in the second at 0:30 kspalaiologos: 2nd one will be looped so it's quite short and the alternate beat was very important because it would feel terribly if the same part was looped over and over kspalaiologos: another very entertaining to watch trend? kspalaiologos: random button on the wiki is very disappointing kspalaiologos: in most cases I land either on trivial brainfuck derivative kspalaiologos: or a joke language ais523: perhaps constant-output languages should be split out of [[Category:Languages]] in order to discourage random spamming of trivially simple language ideas in order to discouarge attempts to bias the random-language functionality? kspalaiologos: +1 from me arseniiv: kspalaiologos: yeah, unfortunate :( kspalaiologos: also, we really can merge all the brainfuck substitutions kspalaiologos: into one article arseniiv: ais523: looks interesting kspalaiologos: or maybe enhanced random page button ? kspalaiologos: (if its doable) ais523: something I've been meaning to do for a while but never got around to was to write a metalanguage that generated BF-equivalents (and maybe some almost-equivalents) kspalaiologos: that lets to filter out / in categories ais523: for the purpose of being able to merge them all into a single page kspalaiologos: can't someone run a perl script kspalaiologos: on the server kspalaiologos: to merge all pages containing the [[:Category:Trivial Brainfuck Substitution]] (or something along these lines) kspalaiologos: it could be done even using shell script ais523: MediaWiki's DB organisation is kind-of fragile, it's certainly possible to do that but I wouldn't be at all confident the script was touching every table it needed to in the correct way kspalaiologos: then maybe use selenium? kspalaiologos: to automate the browser ais523: fwiw I'd be much more confident doing something like that client-side via a tool like AWB kspalaiologos: whats awb kspalaiologos: k AutoWikiBrowser kspalaiologos: https://en.wikipedia.org/wiki/Wikipedia:AutoWikiBrowser/CheckPage#Approved_users kspalaiologos: what an idiotism kspalaiologos: a power user will just nop out the statements used for the check kspalaiologos: if it's open source its even easier ais523: kspalaiologos: it's pretty good at keeping out script kiddies kspalaiologos: in which way? kspalaiologos: there's no source ais523: they don't even know how to override the check kspalaiologos: so it's easy kspalaiologos: just use dotPeek kspalaiologos: or a proxy kspalaiologos: that will add my username to the wiki page, there must be a programmable tool for that ais523: also, the list is enforced two ways: both by the tool itself, and by Wikipedia administrators who can block accounts that are using automated editing illegally kspalaiologos: block is delayed kspalaiologos: whoever wants to do it will do it ais523: it's pretty hard to bypass the check in the tool unknowingly kspalaiologos: it seems like a cool thing to do this afternoon kspalaiologos: obviously I won't "test it" ais523: so using the tool contrary to the checkpage check is pretty strong evidence that someone is intentionally trying to violate policy kspalaiologos: protection on the clientside is useless kspalaiologos: other approach should be taken ais523: the thing is, on Wikipedia anything can be reverted kspalaiologos: ratelimits, have they heard of it ais523: and someone having bypassed a clientside check is good evidence that it /should/ be reverted kspalaiologos: possibly but reverting in batch can be sometimes bad kspalaiologos: maybe the user mixed good and bad contributions? maybe someone already touched the page since "change"? ais523: yes, that's why it's a good idea to have a system that lets you know whether reverting in batch is likely to be helpful kspalaiologos: just add ratelimits kspalaiologos: ratelimits on edits, no more than a page per minute ais523: also, I'm pretty sure there are systems that check to see if an account is editing too fast kspalaiologos: they have to check the list kspalaiologos: possibly ais523: that's one of the things the "bot flag" on an account is for, it disables the rate limits kspalaiologos: so the clientside protection is useless kspalaiologos: as the backend will take care ais523: but that has to be set manually and there's vetting of the user/bot first kspalaiologos: manually? kspalaiologos: just get an automated system that trashes account of an user that makes more than two edits a second constantly ais523: kspalaiologos: no, I mean permission to bypass rate limits has to be given manually kspalaiologos: like the entry on checklist ais523: the rate limits themselves are probably automatic, although I don't think I have perms to check atm kspalaiologos: you're a wikipedia admin? kspalaiologos: interesting kspalaiologos: c'mon man ais523: not right now, I was at one time though (I resigned due to lack of activity) kspalaiologos: they havent even obfuscated the assembly ais523: the abuse filter configuration is stored in a non-public database; however, there is a public page listing a subset of it, but it's unclear whether rate limits would be in the public or the private subset kspalaiologos: I haven't dug through mediawiki ais523: looking at the source code for this would be pointless because it's a configuration setting, not hardcoded ais523: OK, I checked the public part of the configuration: it states that a rate limit exists; however, the exact numbers are not public kspalaiologos: << This user doesn't have enough privileges to make automatic edits on this wiki. >> kspalaiologos: a check and the messagebox below fizzie: You just said the client-side protection is useless, now you're complaining about them not spending enough effort on it. kspalaiologos: well, you see kspalaiologos: when someone makes clientside protection kspalaiologos: they either resign before making it kspalaiologos: or make it hard to overcome ais523: or duplicate it on the server side kspalaiologos: there are no inbetweeners, because it has no sense to implement weak protection ais523: client-side validation that's duplicated on the server-side is pretty helpful because it saves the server time dealing with known bad values, and saves the user time too because the client-side check is faster when using a slow Internet connection kspalaiologos: for a clientside check kspalaiologos: they first connect to the wiki kspalaiologos: download allowed nicks list ais523: I'm talking in general here, rather than about AWB in particular kspalaiologos: and then they check whether the client can proceed or not kspalaiologos: well AWB uses inet connection for a clientside check ais523: in AWB, the server-side duplication is a little less accurate because it isn't always 100% obvious whether someone's using AWB or not kspalaiologos: so your argument is invalid ais523: which is the reason why the client-side check helps there kspalaiologos: it's not effective kspalaiologos: it would be a shame if (*cough*) someone, released an unlocked version. kspalaiologos: that's why it doesn't work ais523: people bypassing the check basically just costs the Wikipedia administrators time in cleaning the issue up, it doesn't do lasting damage kspalaiologos: it shouldn't cost anything ais523: so having an imperfect check is a good time-saving device, compared to having no client-side check kspalaiologos: if ratelimits were optimally implemented ais523: there are rate limits, but manual edits can go pretty quickly sometimes kspalaiologos: how quickly? ais523: I think I managed something like 8/minute manually cleaning up spam ais523: so the rate limits, despite not being public, are likely set to something comparable to that kspalaiologos: and you think that automatic tool will edit at 8 edits a minute? kspalaiologos: it'll go like crazy ais523: it can go much faster in full-auto mode, but that would be noticed ais523: and blocked very quickly kspalaiologos: well that's a point ais523: 30-60/minute is common for full-auto bots, with maxlag compensation kspalaiologos: anyways I think clientside check is nonsense ais523: you think it would be better to not have the check? kspalaiologos: my friend used to put anti-scriptkiddie check in his CS1.7 (or whatever it was called) bot wib_jonas: are you talking about irc rate limiting and jeval's rate limiter? I can tell you about these kspalaiologos: wikimedia ais523: there's a statement along the lines of "locks are to keep out honest users", this will prevent anyone honest using it without getting authorisation kspalaiologos: ais523, strengthten the check to make it more effective kspalaiologos: OR get rid of it completely wib_jonas: oh, wiki edits? kspalaiologos: just think of power users kspalaiologos: even a script kiddie can download a macro program kspalaiologos: that will record mouseclocks kspalaiologos: *mouseclicks kspalaiologos: and keystrokes ais523: it's easy to bypass by someone who wants to be an issue, but those people are rare, and the existence of the check makes it clear that such people are being intentionally unconstructive when they get caught (which normally happens quickly) wib_jonas: I guess I'll have to read this scrollback later, gtg now kspalaiologos: I haven't been administrating a large site kspalaiologos: but I believe I'd get that sorted out in a better way it is right now kspalaiologos: obviously it's not terrible, it's just meh b_jonas: kspalaiologos: for merging brainfuck equivalents, note that Ook! has some historical significance so I'd prefer it to have its own page b_jonas: kspalaiologos, ais523: the esolangs.org wiki has the api.php interface enabled, at https://esolangs.org/w/api.php , documented at https://www.mediawiki.org/wiki/API:Main_page , b_jonas: that's the interface that I recommend if you want to make automated changes to lots of pages, or other complex automation b_jonas: it's not the only API, eg. there's also https://esolangs.org/wiki/Special:Export , but it's a very general one, and usually it's the most convenient one for automation b_jonas: kspalaiologos: yes, of course there are rate limits on the server. why would you think there aren't? the interface even tells you what rate it wants you to edit stuff, because sometimes the Mediawiki servers are overloaded, in which case they ask bots to edit slower b_jonas: what the client side does is to just read those rate limits in the replies and wait for the appropriate time b_jonas: " that's one of the things the "bot flag" on an account is for, it disables the rate limits" => no, not really. the bot flag is more for marking bots that are trusted so that people patrolling RecentChanges or other lists of changes can easily ignore bot edits b_jonas: the point of the client-side rate limits is that they can submit your write request slowly enough that the server doesn't ban you for editing more quickly. those client-side rate limits are what let you spam the server. if you remove them, you'll just get your request refused by the server in a busy loop. arseniiv: that's the interface that I recommend if you want to make automated changes to lots of pages, or other complex automation => this is great! (possibly; didn’t read what it allows) arseniiv: good that MediaWiki folks had thought about that fizzie: Just try not to get carried away. fizzie: (I'll be the one who has to restore from backup if you do.) fizzie: Also, anything that *requires* "complex automation" is probably sufficiently drastic to have a talk page discussion for a few months before implementing. fizzie: (Few months of esolangs.org time is probably equivalent of few days of Wikipedia time, relatively speaking.) b_jonas: fizzie: no it's not. en.wikipedia has hundreds of edits per minute, and even the smaller wikipedias have a lot of edits. the esolangs wiki has had less than 100000 edits total. fizzie: It doesn't scale that way. fizzie: It's a logarithm of edit speed or something. b_jonas: arseniiv: yes, it's generally a good api. not perfect, but good. b_jonas: sometimes it lags a little behind the other latest developments of mediawiki and its extensions, so there can be extension functions that work but not yet accessible through the api, b_jonas: or sometimes the permissions are inconsistent, as in there's at least one list that I can query through the default html interface anonymously, but get a permission error if I try to query it through api.php b_jonas: or was b_jonas: I met that problem a year ago, might be fixed by now arseniiv: Just try not to get carried away. => for my part, I’m not going to use it at all :D but glad anyway b_jonas: fizzie: discussion before implementing it => only if it has write operations I think. api.php is useful for read-only stuff too, such as watching new changes fizzie: Sure, that's f... well, fine, within reason. b_jonas: obviously only if you don't overload the server fizzie: Hypothetically, for watching new changes, there's the push-based mechanism that can be used through having a discussion. fizzie: And the data dump for local analysis purposes, though there's a link to that on the main page, so it's very discoverable. int-e: This is stupid... https://projecteuler.net/problem=674 is so careful to explain that one should pair "distinct expressions from file ", and the file contains a duplicate entry... and turns out you are supposed to compare expressions with different line numbers instead, even if they are the same. fizzie: int-e: Have you always been doing PE, or is this just for AoC withdrawal? int-e: fizzie: I was clean for almost 10 years, but AoC kind of triggered this relapse int-e: (Is that right? Maybe it was only 6 years) int-e: A long time anyway. b_jonas: int-e: in that case, sorry if I prompted you to this (I mentioned AoC) int-e: b_jonas: don't worry about it. int-e: I'm kind of proving to myself that I can still do this. The trick will be to stop when I reach the milestone I set out with (solving the 25 most recent problems. I have two to go.) b_jonas: int-e: solve 25 recent ones on http://www.spoj.com/ too :-) int-e: 10 years is about right. I stopped around https://projecteuler.net/problem=231 int-e: b_jonas: Yeah probably not. int-e: The thing is I kind of like the combinatorial sort of problems that PE does. int-e: (PE includes publishing dates with their problems so the link is suitable for dating.) fizzie: int-e: I've been toying with the idea of doing p5.js visual illustrations out of my solutions, did two already -- https://zem.fi/tmp/aoc-2019-p5/ -- but not sure if I'll finish, not all of them are as visual. Though many are. int-e: I have not touched any AoC or Intcode... this year, I think. int-e: We should get kspalaiologos to write tools for that :P int-e: fizzie: Oh the CA one is pretty. In the asteroid scan too much is going on. fizzie: int-e: Did you let the scan run to part 2? I think that's better. fizzie: Part 1 is just a flickery mess, it's true. int-e: Hmm, ket me see. int-e: Oh I remember what it was... yes, part 2 should work better. fizzie: I mean, it's not going to be any prettier, just less messy. int-e: But now I missed the fun part. int-e: Yeah, part 2 is nicer :) fizzie: My target asteroid 200 was in the first sweep, not sure if that's always the case. int-e: Mine was too. int-e: And it was number 200 as well. int-e: Ah, you did the sweep differently :) int-e: I actually used https://en.wikipedia.org/wiki/Stern-Brocot_tree to get the possible directions in clockwise order. int-e: http://paste.debian.net/1124909/ fizzie: Heh, interesting. Kind of more discrete. fizzie: I did consider doing the same thing I did (reuse part 1's 'get visible' function, sort the result) but using a quadrant-and-slope kind of thing for the sort instead of atan2. int-e: But yeah, atan2 seems simpler. int-e: Unless you worry about rounding errors... fizzie: I did, but it gave the right result. :) int-e: Oh yes, there is that in these competitions. fizzie: I guess the whole "only the visible ones" + the limited size of the grid means you can't really get angles that near each other. int-e: But let's see... two subsequent angles span a parallelogram of area 1, so the angle between them is arcsin(1/(ab)) where a and b are the lengths of the vectors... which are less than sqrt(2)*48. int-e: > asin (1/(2*48^2)) lambdabot: 2.170138905922681e-4 int-e: As you can see, no need to worry about rounding errors :) int-e: s/angles/directions/ (and by "direction" I mean an integer vector (p,q) with gcd(p,q) = 1) int-e: > atan2 1 1 - atan2 46 47 lambdabot: 1.0752273791101219e-2 int-e: > atan2 45 46 - atan2 46 47 -- ah, this is more like it lambdabot: -2.362948916323493e-4 int-e: that should be the actual minumum achievable difference int-e: iuiuiu. int-e: > atan2 3 3 - atan2 5 5 -- now I'm curious int-e: fizzie: wait, your grid is so much smaller than mine! int-e: I got a 48x48 one. fizzie: Weird. That's what I got as my input file. fizzie: This is the one day I did real early (as in, leaderboard early), I guess it's technically possible they might have changed the size? Sounds odd though. int-e: 346 asteroids, not many more than yours int-e: Yeah, quite possibly. int-e: Or maybe they just picked a random value between 20 and 50. int-e: It's not like the problem became any simpler or harder because of it. int-e: http://paste.debian.net/1124911/ it looks nicer this way actually fizzie: It does, yes. fizzie: My grid's so cramped. :/ int-e: > (atan2 7673 4316 - atan2 7657 4307 :: Double, atan2 7673 4316 - atan2 7657 4307 :: Float) -- single precision is not enough on an 8K display lambdabot: (-1.2929723736121446e-8,0.0) int-e: > atan2 3817 (-2147) - atan2 3801 (-2138) :: Float -- oops, still too much oerjan: `wisdom saur HackEso: ​sauron//Sauron is the eponymous protagonist of the Lord of the Rings series. He serves primarily as narrator and the main driver of the plot. His heroic exploits include the resurrection of the Kings of Men and the conquest of the racists of Gondor. He now leads the Illuminati from his pyramid fort /ꙩ\ . oerjan: `wisdom saur HackEso: ​sauron//Sauron is the eponymous protagonist of the Lord of the Rings series. He serves primarily as narrator and the main driver of the plot. His heroic exploits include the resurrection of the Kings of Men and the conquest of the racists of Gondor. He now leads the Illuminati from his pyramid fort /ꙩ\ . oerjan: `? lystrosaur HackEso: The lystrosaurs were an ancient genus of evil reptiles who successfully took over the world in the early Triassic. oerjan: `? lystrosaurus HackEso: Lystrosaurus is a genus of Late Permian and Early Triassic Period dicynodont therapsids, which ruled the world around 250 million years ago. oerjan: `? ais523 HackEso: Agent “Iä” Smith is an alien with a strange allergy to avian body covering, which he is trying to retroactively prevent from ever evolving. On the 3rd of March, he's lawful good. arseniiv: 3rd March is too long to wait oerjan: @localtime arseniiv lambdabot: Local time for arseniiv is вт янв. 7 12:24:20 2020 arseniiv: I’m early today! oerjan: hm.... arseniiv: and the yawn already starts taking me arseniiv: can’t get used to 2020 in the date oerjan: it is a date that can only be corrected in hindsight kmc: looking forward to 04:20:04 2020-04-20 oerjan: insufficiently palindromic kmc: @localtime kmc lambdabot: Local time for kmc is Mon Jan 6 23:31:58 2020 oerjan: `? zemhill HackEso: zemhill? ¯\(°​_o)/¯ oerjan: `learn zemhill is a bot for playing BF Joust, something we cannot underscore enough. HackEso: Learned 'zemhill': zemhill is a bot for playing BF Joust, something we cannot underscore enough. zemhill: oerjan: I do !zjoust; see http://zem.fi/bfjoust/ for more information. oerjan: `learn_append zemhill See http://zem.fi/bfjoust/ for more information. HackEso: Usage: le/rn_append keyword//Text you'd like to append. oerjan: `learn_append zemhill//See http://zem.fi/bfjoust/ for more information. HackEso: Usage: le/rn_append keyword//Text you'd like to append. oerjan: `le/rn_append zemhill//See http://zem.fi/bfjoust/ for more information. HackEso: Learned 'zemhill': zemhill is a bot for playing BF Joust, something we cannot underscore enough. See http://zem.fi/bfjoust/ for more information. oerjan: `? !zjoust HackEso: ​!zjoust? ¯\(°​_o)/¯ rain1: https://www.linusakesson.net/programming/gcr-decoding/index.php kspalaiologos: Greets rain1: anyone else watching games done quick int-e: rain1: previous GDQ events have been discussed (b_jonas is the biggest fan in my mind... he's not here now though) myname: i usually just watch the mario videos on youtube later arseniiv: have someone heard somebody saying “EOF” or “EOS” in place of “period” at the end of a statement? arseniiv: it would feel self-ironic, I’d expect someone to have invented that myname: i only know of EOD, but that's quite different fizzie: Or EOT, it's the ASCII name for ^d, "end of transmission". (There's also ETX and ETB, for 'end of text' and 'end of transmission block' respectively.) arseniiv: bad conlanging ideas (oh sorry it’s the other channel): using US RS GS FS in a natural-language text myname: U SRS? kspalaiologos: my phone might have commited suicide kspalaiologos: looks like bricked, power button not working myname: depending on the phone, thy might react to putting them on a charger kspalaiologos: funny? kspalaiologos: it was nearly fully charged kspalaiologos: also holding the power button should give any feedback kspalaiologos: even when it's battery is depleted (that's how you say it in english?) arseniiv: maybe just “is low” kspalaiologos: when it's low the phone is still usable kspalaiologos: depleted sounds more logical to me kspalaiologos: or even drained? fizzie: Arguably, if it's literally "depleted", it's not going to provide any feedback, because it's not like the screen actually runs without electricity. But granted, usually there's some feedback from long-press, because it's just low enough to not work, not completely empty. kspalaiologos: fizzie, most phones are protected from depleting their battery completely kspalaiologos: rather it's better IMO to call them depleted in the logical sense - phone refuses to run fizzie: If it's an Android one, it's possible the bootloader is still reachable over USB. I had a Nexus 5X die that way. myname: well, it can only respond to holding the power button if you don't have a broken power button kspalaiologos: I didn't have issues with it before kspalaiologos: can't believe that it broke down completely in my pocket in around 2-3 hours arseniiv: kspalaiologos: ah wait when you open it there should be a small hole somewhere, and pushing inside with a pen or something like that should reset something and maybe the phone would be able to say something the next time you hold the power button arseniiv: I think I have made something this way when an SD card in my phone broke and it tried to fix the card and was booting for ages I had no patience to wait if it will boot at all arseniiv: though I don’t remember the details what and why I have done, but that reset button was used I think int-e: @google color with d lambdabot: http://www.google.com/url?q=https://www.spycolor.com/color-index,d lambdabot: Title: Уведомление о переадресации kspalaiologos: what is this kspalaiologos: I can barely read russian but int-e: Good question, hmm. kspalaiologos: Uvadomeniye o pereadresatsii kspalaiologos: I believe it's like kspalaiologos: forwarding noticve? kspalaiologos: warning? int-e: Yeah, that's fine. It's google's doing. What is interesting is that it thinks that lambdabot resides in a russian speaking country. kritixilithos: @duckduckgo ts lambdabot: Unknown command, try @list int-e: (the google plugin should probably stip the google part from the search result anyway) int-e: *strip kspalaiologos: @google my timezone lambdabot: http://www.google.com/url?q=http://www.timezoneconverter.com/cgi-bin/findzone.tzc lambdabot: Title: Уведомление о переадресации kspalaiologos: still the same int-e: OF COURSE fizzie: @google what is my ip lambdabot: http://www.google.com/url?q=https://whatismyipaddress.com/ lambdabot: Title: Уведомление о переадресации fizzie: Aw, it doesn't do the answer-answer, it just does the first search result. int-e: It's fetching Google's redirect page that would redirect to the actual thing. int-e: So... the Title will not change. int-e: Also I'm not sure whether https works. fizzie: I'm tempted to patch in some easter egg query that'd make lambdabot print something funny, but that'd probably raise some eyebrows at code review time. int-e: @google 1 in in cm lambdabot: http://www.google.com/url?q=https://www.inches-to-cm.com/ lambdabot: Title: Уведомление о переадресации int-e: Oh that's what you meant, I see. Yeah, that used to work at some point, but Google is very much of a moving target. fizzie: Oh yes. Though the answer box is probably a lot easier to scrape than the interactive unit converter widget. Not that I've ever looked at how the HTML looks like for either. fizzie: Anyway, there's a lot of user agenting going on to decide what to serve. fizzie: (Heh, I wonder how lambdabot queries appear in our browser classification.) int-e: I'm wondering what IP it actually uses for this. (IPv4 or IPv6 is the main question here) kmc: compromise on IPv5 fizzie: Hey, the world has just (as in, mid-December) crossed 30% for IPv6: https://www.google.com/intl/en/ipv6/statistics.html int-e: somebody should tell the mobile phone providers fizzie: I suspect most of that is likely mobile/ fizzie: There were a few high-profile mobile providers that went IPv6. int-e: "inet 100.73.48.224" int-e: Not here in Austria (or Germany for that matter), as far as I know. fizzie: Germany is apparently 51.3% IPv6. int-e: They have invested heavily in NAT, they have to use it ;) int-e: Yeah, maybe it happened and I just don't know. fizzie: The examples listed in Wikipedia for Germany are pretty DSL-y, nothing about mobile. int-e: I can believe it for DSL. fizzie: Over in USA, T-Mobile and Verizon both went IPv6, I think that's what contributed mostly over there. fizzie: Hey, my phone has an IPv6 address from Three UK, that's actually new. It didn't use to. fizzie: (v4 in 10/8, v6 in 2a04:4a40::/29.) kspalaiologos: fizzie, is there an SVN/mercurial repo of lambdabot? kspalaiologos: also, is it used anywhere outside #esolangs? kspalaiologos: btw, >code review of IRC bot int-e: @version lambdabot: lambdabot 5.2 lambdabot: git clone https://github.com/lambdabot/lambdabot kspalaiologos: why so serious :)? fizzie: I'm not responsible for lambdabot, but yes, it's used on many many channels. int-e: kspalaiologos: fizzie is not involved in lambdabot, I'm running and sort-of maintaining it kspalaiologos: that's a pretty big bot fizzie: And I was talking about changing the Google response, which does have a code review for hopefully obvious reasons. kspalaiologos: int-eresting kspalaiologos: fizzie, so you actually are a developer working for google? int-e: "sort-of" meaning that, really, I'm not doing much. fizzie: int-e: That's the glamorous life of an IRC bot maintainer. fizzie: fungot: What have I done for you recently? fungot: fizzie: they say that everyone knows why this is true, but in thought, he would peel back a tiny nibble, and a horn. int-e: fizzie: I have open bug reports though. int-e: ^style fungot: Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack* oots pa qwantz sms speeches ss wp ukparl youtube kspalaiologos: fizzie, that's actually interesting kspalaiologos: very interesting kspalaiologos: what projects are you responsible for? kspalaiologos: is it true that workers in Google are treated like meatbags? kspalaiologos: which language do you work primarly with? fizzie: I'm not sure I want to discuss it in all that much detail. int-e: . o O ( I expect pretty much all of that information is covered under an NDA that fizzie signed. ) kspalaiologos: even the third one? kspalaiologos: so that presumes #2 is true fizzie: I'm pretty happy with Google as an employer, but there are also well-documented-in-the-media things that are less than perfect. myname: my number one question for google would by: why is youtube so horrible kspalaiologos: they must have forced you to say that int-e: myname: Because youtube is not really for you; you're the product that is being sold to advertisers. fizzie: I think there's at least one "open" "report" for HackEso too, I just keep forgetting about it. I think I was suggesting the GitHub issue tracker to keep track of them, but it might not be enabled. myname: int-e: well, to sell users you better treat them well enough kspalaiologos: you don't need to kspalaiologos: you just need to create monopoly on the market kspalaiologos: so no one can rival you int-e: myname: No, you just have to make sure they don't leave in troves. myname: i recently learned about a vrowser extension for managing subscriptions. no idea why that's not built-in kspalaiologos: google could just aswell wipe their arse with people's opinion myname: also, the search in watched videos does not include the description, which is stupid kspalaiologos: what is J really useful for kspalaiologos: not counting code obfuscation and codegolf kspalaiologos: maybe some advanced maths? fizzie: `le/rn bug//Feel free to file bugs at https://github.com/fis/hackbot/issues int-e: Actually, I don't even have an account. My main gripe is having to turn off the "auto play" feature all the time. HackEso: Learned 'bug': Feel free to file bugs at https://github.com/fis/hackbot/issues myname: int-e: managing subscriptions without an account is practically impossible int-e: (Correction... I do have an account because the google account is for everything. But I don't sign in, so effectively I treat it as not having one.) myname: kspalaiologos: what is C really useful for? int-e: myname: Well in contrast to you I don't care about subscriptions. kspalaiologos: myname, it's a general purpose language, but now it's shoved down to systems programming int-e: myname: core dumps? kspalaiologos: no one really writes desktop apps in C anymore HackEso: C is the language of��V�>WIד�.��Segmentation fault int-e: Hah, I forgot about that one. HackEso: J started out as a synonym for I, but then branched out into an array of other uses. kspalaiologos: interesting HackEso: I SIGNIFICAT NVMERVM VNVM kspalaiologos: I is the first number kspalaiologos: I remember some latin int-e: I sptted a feline in there. int-e: *spotted int-e: myname: Ah, I found the cynical angle: If managing subscriptions is hard, then users spend more time on youtube. myname: but not watching ads kspalaiologos: adblock here kspalaiologos: I just indirectly donate to my favourite content creators on youtube/twitch int-e: kspalaiologos: not ublock or umatrix? kspalaiologos: I should have said kspalaiologos: adblocker kspalaiologos: but recently kspalaiologos: I'm using a tiny yet smart piece of software kspalaiologos: that tricks the google ads that I kspalaiologos: 'm actually clicking them kspalaiologos: and hides em afterwards kspalaiologos: a certain win-win situation kspalaiologos: for the creators and me obviously kspalaiologos: and I don't believe in non-irritating ads bullshit kspalaiologos: not going to browse web without an adblocker int-e: a truly non-intrusive ad would be one you don't notice int-e: which makes it clear that such a thing can't exist Taneb: int-e: or it relies on subliminal messaging Taneb: Like subtle product placement in movies int-e: Taneb: Sure, there's some potential for that (and I'm not sure how I feel about it.) Taneb: I'd prefer in-your-face adverts to some extent int-e: The whole idea of advertising is messed up. myname: int-e: the funny thing is, there are quite a few ads you most likelydon't notice myname: banner blindness is an interesting topic int-e: There's a conundrum though... if we could start over in the mid 90s, what would we have to do differently to end up with a web where creators are being paid, and where users are not being tracked nor exposed to advertisements? int-e: myname: I've noticed banner blindness. I have trouble with locating links in navigation bars. And that's despite heavy ad blocker use. myname: imo ads shoveled their own grave by the time layer ads became a thing myname: until this point, i never blocked any ads myname: but those were just too annoying int-e: myname: of course without ads, we wouldn't have https://www.youtube.com/watch?v=sdi6E-qzS1c arseniiv: compromise on IPv5 => like the devil’s ratio pau = (pi + tau) / 2 :D kspalaiologos: interesting arseniiv: xkcd’s doing; some time ago I tried to make a character for it, https://i.postimg.cc/zGHFsbN7/pau-Screenshot-1873.png arseniiv: also I think I should post this here one more time: https://i.postimg.cc/Wz9tnJcy/mr-postman.png arseniiv: this is what I arguably feel when I see “ You don't have any messages” int-e: Okay, I've achieved my PE goal... now all I need to do is stop looking at the site! kspalaiologos: it's 2020 kspalaiologos: and delete system32 is still funny int-e: not that kind of PE fizzie: Heh, got a "your December performance in Google Search" report for esolangs.org. I don't think they've sent this before. fizzie: Apparently https://esolangs.org/wiki/C+ is our top growing page, which is a little sad. fizzie: (The Intcode article comes second.) fizzie: It also reveals we don't get that many visitors, but that's not really a surprise. int-e: How many of the visitors do not come via google? mroman: evening lads mroman: b_jonas: how's your blsq trip going? What did you do with it? Did it work as intended? mroman: (I'm also customer feedback agent) b_jonas: mroman: hello. I didn't really do anything with blsq apart from the few sentences that I tried on the irc channel b_jonas: I've been programming in python at work to process stupid tables with inconsistent data mroman: blsq's gonna help you with that mroman: that's what blsq is good at b_jonas: the hard part is not finding the inconsistencies, it's figuring out what the correct values in the table should be when the person who created those tables is my very busy boss so I have limited time getting answers from it b_jonas: and yes, blsq would probably also work for that, but I don't want to learn it kspalaiologos: I've read more of the J book on their website b_jonas: though if you want, I can ask a few questions about whether some things are easy to do in blsq if you want to support such applications b_jonas: kspalaiologos: which book? https://www.jsoftware.com/docs/help901/ has multiple books: kspalaiologos: This one kspalaiologos: From their website I stated that before b_jonas: the Dictionary https://www.jsoftware.com/docs/help901/dictionary/contents.htm which is made of two parts, a reference part in the right column and the essay part on the left; kspalaiologos: Seen it kspalaiologos: The language is so damn simple kspalaiologos: Yet powerful b_jonas: the Primer https://www.jsoftware.com/docs/help901/primer/contents.htm is a tutorial by Ken Iverson in his crazy terse style; kspalaiologos: Seen his first J interpreter b_jonas: "J for C Programmerse" https://www.jsoftware.com/docs/help901/jforc/contents.htm a more normal tutorial, kspalaiologos: ^I'll sure love that b_jonas: "Learning J" https://www.jsoftware.com/docs/help901/learning/contents.htm a tutorial that I don't know, mroman: !blsq "678;37;43\n78;88;99"{';;;1cuj|iSh[+j_+';IC}Wl blsqbot: | 678;38;43 blsqbot: | 78;89;99 b_jonas: Phrases https://www.jsoftware.com/docs/help901/phrases/contents.htm a very obsolete snippet collection kspalaiologos: I spent a lot of my time on C kspalaiologos: And I guess that will be helpful b_jonas: and User https://www.jsoftware.com/docs/help901/user/contents.htm which documents the parts of the system that isn't the core language kspalaiologos: Oh and is there some like general documentation kspalaiologos: When I want something I Google it kspalaiologos: Like "haskell random numbers" kspalaiologos: But with J it doesn't work b_jonas: mroman: by the way, have you modified blsqbot so it can reply in private message (or in #esoteric-blah if you don't want private messages)? mroman: there was even a realworldburlesque article about working with csv data stuff. mroman: not yet no. mroman: but that's on my list todo b_jonas: kspalaiologos: IRC often helps with J, specifically the #jsoftware channel on freenode kspalaiologos: [ 'hello' j-bot: kspalaiologos: hello mroman: let me see how this IRC parsing works. b_jonas: mroman: so anyway, here's some parts of what I did in my python scripts. b_jonas: I read and write a CSV files that are encoded in UTF-16-LE with a byte order mark in the start, lines separated by LF or CRLF, fields separated by tab, fields can be quoted by double quotes in which case they can contain lf or crlf or double quotes escaped as two double quotes, kspalaiologos: The J for C programmers book seems awesome kspalaiologos: Very objectively written b_jonas: and in such quoted fields I want to keep the distinction between lf and crlf, but outside of quotes, I want to consider lf and crlf the same line separator; b_jonas: some (but not all) of these csv files have multiple tables in them, each one is followed by an empty line and starts with three header lines. b_jonas: I both read such files to a simple structure in memory and write such files, sometimes by modifying an existing file, sometimes by keeping the header from an existing file but discarding the rows and adding new ones. b_jonas: I detect most of the formatting errors, I verify that the columns that I care about are the correct ones by checking the column header, but also allow additional columns to the right of known columns and keep values in them. mroman: !blsq "hi"Q b_jonas: mroman: so a question is, how do I read or write an UTF-16-LE text file in blsq, discarding the BOM on reading if there is one at the start, adding a BOM at the start for writing? mroman: uh. then don't use blsq mroman: it uses unicode mroman: I don't think it has bytewise stuff b_jonas: mroman: yes, it's unicode. UTF-16 is a simple unicode encoding. b_jonas: one of the simplest ones b_jonas: there's no bytewise stuff here b_jonas: I may want bytewise stuff for other applications, but not this one in particular mroman: blsq just uses the encoding it was compiled with. kspalaiologos: J is hard but it must be rewarding to learn it mroman: !blsq "hi"Q mroman: come on. mroman: !blsq "hi"Q mroman: b_jonas: it should be able to respond in privmsgs now mroman: !blsq "and here too"Q blsqbot: | and here too b_jonas: indeed b_jonas: thank you mroman: since I'm hosting it on my private machine it won't be up too often anyway though b_jonas: kspalaiologos: for lambdabot source, see https://wiki.haskell.org/Lambdabot , which says darcs clone "http://code.haskell.org/lambdabot" b_jonas: and yes, it's used in other channels, such as in #haskell b_jonas: wait what... b_jonas: int-e points to a different repository. I wonder which is the right one b_jonas: " int-e: the funny thing is, there are quite a few ads you most likelydon't notice" => most of them, for me, though youtube actually has some quite noticable ones, more so than most other webpages that have ads fizzie: The best argument against people talking about "C/C++" is to point out that it's undefined because it has a side effect on a scalar object that's unsequenced relative to a value computation using the value of the same scalar object (C18 6.5p2). int-e: b_jonas: the wiki is wrong oerjan: b_jonas: the haskell wiki lambdabot page hasn't been updated since 2013. i suspect the github is a better place to link to, although lambdabot may not have changed that much... b_jonas: int-e, oerjan: ok kspalaiologos: EFnet got some real delays kspalaiologos: why wouldn't J support something like j-bot: kspalaiologos: .5 j-bot: kspalaiologos: 0.5 kspalaiologos: wait, does it kspalaiologos: [ .5 + .5 j-bot: kspalaiologos: |domain error j-bot: kspalaiologos: | .5 + .5 kspalaiologos: [ 0.5 + 0.5 j-bot: kspalaiologos: 1 kspalaiologos: it doesn't kspalaiologos: [ a =. 1 + b =. 5 j-bot: kspalaiologos: |ok kspalaiologos: [ a =. 1 + b =. 5 a j-bot: kspalaiologos: |syntax error j-bot: kspalaiologos: | a=.1+b=. 5 a kspalaiologos: [ (a =. 1 + b =. 5) a j-bot: kspalaiologos: |syntax error j-bot: kspalaiologos: | (a=.1+b=.5)a kspalaiologos: first b=5 is evaluated kspalaiologos: and a=b+1 kspalaiologos: so a = 6 then myname: what other outcome would there be? kspalaiologos: a=1, b=5, the expression value would be 6 kspalaiologos: but it kinda makes no sense as I remembered that expressions are always evaluated rtl kspalaiologos: When I try to use the following: kspalaiologos: v =: verb define / x + y / ) kspalaiologos: (/ = newline) kspalaiologos: I get an syntax error rain1: hows everybody doing heer kspalaiologos: ⎕CY'dfns' kspalaiologos: 7 7{3::0⋄(,⍳⍺)[⍋,w⊃⍨⍵⍳⍨⊃∘⍸¨0=w←¯1kt⍺]}⊂ kspalaiologos: just some average APL code kspalaiologos: looks worse than int21h dumping memory fizzie: That remainds me of the quote from "man dc". fizzie: Describing the P instruction: "-- the sequence KSK0k1/_1Ss [ls*]Sxd0>x [256~Ssd0qaPlxx] dsxxsx0sqLqsxLxLK+k could also accomplish this function." fizzie: Less fancy characters, of course. b_jonas: kspalaiologos: because the dot is always parsed as part of the previous token, or as its own token if it's following a whitespace (or an apostrophe or the start of the line, but those are rare) b_jonas: dots and colons always stick to the token right before them, that's how there are so many builtins that are a punctuation or letter character followed by a dot or colon b_jonas: there are even a few tokens that end in multiple (dot or colon) inflection characters fungot: b_jonas: they say that water walking boots are better if you want to see the area around herself, much like looking on a blank scroll. nothing further then he fluttered-- till i scarcely more than a nymph. int-e: Well they did name a mythical creature. int-e: So that's pretty good for fungot's standards. fungot: int-e: elven cloaks cannot rust. the arm let go of the head and toss it with a unicorn. int-e: ^style fungot: Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack* oots pa qwantz sms speeches ss wp ukparl youtube int-e: The style may have something to do with it though. ArthurStrong: Hello #esoteric kspalaiologos: got some spare time kspalaiologos: I'll be studying the book Cale: kspalaiologos: which book? kspalaiologos: The J book kspalaiologos: J for C programmers kspalaiologos: but it seems quite overwhelming kspalaiologos: and I'm not smart enough to understand most of it kingoffrance: s/and I'm not smart enough to/but that's okay I have enough nerve and gall and arrogance and stubbornness to eventually/ kingoffrance: thats the spirit kspalaiologos kingoffrance: s/nerve/kingmanship/ Taneb: s/\([a-z ']*\)\/\([a-z ']*\)/\2\/\1/ kingoffrance: too much kingmanship Taneb kingoffrance: `8ball is there such a thing as too much kingmanship? HackEso: Ask again later. fizzie: (Unrelated to previous.) arseniiv: fizzie: you did what? Thank you! The math plugin is like a present! (I hope. I used in at one other wiki and it worked quite right, it even understood many unicode characters in place of traditional TeX character names.) fizzie: It's calling into MediaWiki/Wikipedia API to use Mathoid as a service. After a lot of reading and pondering, it seemed like that's allowed; and anyway it's not like our usage could even be noticed. Properly installing it and running a local instance seemed like an incredible pain. fizzie: There's also an Extension:SimpleMathJax which would've done it all client-side via MathJax, but it didn't look incredibly impressive. Math and MediaWiki was a big mess overall. fizzie: But it's come up multiple times, and really given the esolangs.org topics and audience, I think it's quite relevant. arseniiv: finally I would be able to make my pages totally incomprehensible yay :o arseniiv: unfortunately I have no good ideas recently wib_jonas: `perl -eprint(($mile=1609)*40) wib_jonas: fungot, how many private airplanes and luxury yachts do you have? fungot: wib_jonas: tanko: samurai plate armor of the giant spider, all of the lords of death. you are boring, not only do these demons do physical damage by biting and by himself in the dark lord and named him the god seth. he hung this moneybag around louis' neck, claws, hooves, or you'll get the gods. wib_jonas: ok, this style is getting tiring wib_jonas: ^style fungot: Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack* oots pa qwantz sms speeches ss wp ukparl youtube wib_jonas: ^style ukparl fungot: Selected style: ukparl (UK Parliament debates from brexit referendum to late 2018) wib_jonas: my hon. and learned friend fungot, how many private airplanes and luxury yachts do you have? fungot: wib_jonas: i will be with you, whatever. if anywhere, the problem many have in talking to operators now being handed to the treasury that the pay of the chief social worker, and the bill, wib_jonas: much better kingoffrance: eh, i liked the moneybags around louis' neck part :/ kingoffrance: not so much the claws and hooves fizzie: fungot: Do you think MPs should get free private airplanes and luxury yachts as compensation? fungot: fizzie: i can, in a kind, and users, value, resilience, that commitment is the backbone of the uk economy, and, together the higher personal care, the state, leaving the secretary of state in the bill that that person the government wish the transitional deal, saying any arrangements, the mere fact of information being put out to international competition, to prevent in scotland has benefited. the number of people, that is the wib_jonas: "higher personal care", that's what the private airplane is? fizzie: I think broadly speaking that was a yes. Taneb: I think that's what having a masseuse on the private aeroplane is wib_jonas: my hon. and learned friedn fungot, if a sports team uses a snake as their mascot, is that enough proof that they're secretly controlled by evil viccans or satanists? fungot: wib_jonas: i can be, mr secretary johnson, the only johnson, the last of the fnord document, wib_jonas: ^8-ball if a sports team uses a snake as their mascot, is that enough proof that they're secretly controlled by evil wiccans or satanists? wib_jonas: `8-ball if a sports team uses a snake as their mascot, is that enough proof that they're secretly controlled by evil wiccans or satanists? HackEso: My reply is no. wib_jonas: =8-ball if a sports team uses a snake as their mascot, is that enough proof that they're secretly controlled by evil wiccans or satanists? wib_jonas: ?8-ball if a sports team uses a snake as their mascot, is that enough proof that they're secretly controlled by evil wiccans or satanists? lambdabot: Unknown command, try @list wib_jonas: ?8ball if a sports team uses a snake as their mascot, is that enough proof that they're secretly controlled by evil wiccans or satanists? lambdabot: Unknown command, try @list fizzie: ^8ball does exist. fizzie: A rather limited one to be sure. fizzie: (But at least it's deterministic.) kingoffrance: `8ball is the "kane" (i think was his name) character of the nod side of the original command and conquer based on anton levay? HackEso: Better not tell you now. kingoffrance: `8ball does the nod side represent soviets? HackEso: My sources say no. kingoffrance: `8ball is the gdi side nato? HackEso: Yes definitely. kingoffrance: `8ball is the nod symbol snake-ish? HackEso: Outlook good. kingoffrance: `8ball is the "mechanical man" song evil? HackEso: Signs point to yes. wib_jonas: `8-ball Are the upgrades that Samus uses to enchance his arm cannon (long beam, charge beam, ice beam, wave beam, grapple beam, spazer beam, plasma beam) compatible with Megaman's arm cannon? HackEso: Ask again later. kingoffrance: "his" ? i thought that was solved with that justin bailey thing kingoffrance: see, 8ball knows this, gave an appropriate answer kingoffrance: `8ball is tiberium the cause of global warming/etc. HackEso: Reply hazy try again. wib_jonas: `8-ball On contrary, latinum is the cause of global warming/etc. HackEso: Concentrate and ask again. arseniiv: `8ball Is my cat today pretty annoying? HackEso: You may rely on it. arseniiv: I knew it! int-e: Do you have a different cat each day? int-e: (And if not: how do you know?) wib_jonas: int-e: these days vets implant an RFID proximity token into cats, so you can tell that it's the same cat if the RFID-capable cat flap lets them into the house fizzie: Unless they've gone to visit the neighborhood hacker cat to get that chip cloned. kspalaiologos: http://kspalaiologos.baselinux.net/doc/clip.wav kspalaiologos: sounds nice ino kspalaiologos: good beginning for the song wib_jonas: fizzie: they don't do that, because they want to be the only one who can come into the house, so that they can eat their pray without being bothered by other cats. that's why they bring animals into your house in first place. fizzie: I've been told the reason for bringing half-alive or dead critters back is, they've noticed you're so terrible at hunting, you never seem to be catching anything, so they're trying to teach you how it's done. int-e: fizzie: Huh, that made no sense to me. int-e: (I'm assuming lack of context.) b_jonas: fungot, how much blood is there in a churchmouse? fungot: b_jonas: of the three of us have, for the first time, the hon. and learned friend the minister for the work he is now undertaking to restore that section. kspalaiologos: int-e, I've encountered a tiny bummer when coming back to the MM stuff kspalaiologos: about infinite celled brainfuck to finite celled brainfuck reduction kspalaiologos: I know how to reduce finite tape to finite tape (but smaller) brainfuck kspalaiologos: whereas infinite tape requires calculating infinite coefficients upfront kspalaiologos: and it's impossible (just a tiny bit) b_jonas: fungot, do you mine bitcoins? fungot: b_jonas: i will have to check the foreign office. she is indeed a good many of the care of fnord peers, and the working group. kspalaiologos: fungot, please become a CS oracle fungot: kspalaiologos: on the one side, that the charter to the law of the uk anyway, to just focus on the overseas territories. i was in the house, kspalaiologos: it's the europarl mode isnt it kspalaiologos: ^style fungot: Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack oots pa qwantz sms speeches ss wp ukparl* youtube int-e: kspalaiologos: Going from infinite cells to finite cells will require some variable length trickery, but is doable. kspalaiologos: could you gently point me to a direction kspalaiologos: what kind of trickery is it int-e: Things like this: [>] skips over any number of non-zero cells. kspalaiologos: maybe we could calculate coefficients at runtime kspalaiologos: writing a prime function in brainfuck aint that hard int-e: Uh, no, this shouldn't involve computing prime numbers. kspalaiologos: I know kspalaiologos: thanks b_jonas: tea is ready, my hon. and learned friend fungot. would you like some lemon juice or milk with it? fungot: b_jonas: i have, the loss, absence, the committee of selection, and we have the other amendment, and with, cheltenham, the uks. scotland, of course, in the public, kspalaiologos: [ 2 ^ 3 j-bot: kspalaiologos: 8 j-bot: kspalaiologos: 7.38906 kspalaiologos: what does it compute kspalaiologos: unary ^ kspalaiologos: [ ^ 2 3 4 j-bot: kspalaiologos: 7.38906 20.0855 54.5982 kspalaiologos: interesting j-bot: kspalaiologos: |value error: e j-bot: kspalaiologos: |ill-formed number j-bot: kspalaiologos: 10 j-bot: kspalaiologos: 2.71828 kspalaiologos: [ 1x1 ^ 3 j-bot: kspalaiologos: 20.0855 kspalaiologos: [ ^~ 2 3 4 j-bot: kspalaiologos: 4 27 256 kspalaiologos: the vocabulary doesnt explain ~ behavior kspalaiologos: [ +~ 2 3 4 j-bot: kspalaiologos: 4 6 8 kspalaiologos: [ ~ 2 3 4 j-bot: kspalaiologos: |syntax error j-bot: kspalaiologos: | ~2 3 4 kspalaiologos: [ d := monad define d ) d ~ 2 3 4 j-bot: kspalaiologos: |need input kspalaiologos: [ d := monad define d ) d 2 j-bot: kspalaiologos: |need input kspalaiologos: [ d := monad define d ) 2 d 2 j-bot: kspalaiologos: |need input kspalaiologos: [ -~ 2 3 4 j-bot: kspalaiologos: 0 0 0 FireFly: What part about the ~ behaviour do you find unclear from the vocabulary? kspalaiologos: expected kspalaiologos: FireFly, from what I understood kspalaiologos: it selects all distinct items kspalaiologos: so it should return 2 3 4 kspalaiologos: and behave exactly like FireFly: no? https://www.jsoftware.com/help/dictionary/d220v.htm it's an adverb, it's reflex kspalaiologos: [ ^ 2 3 4 j-bot: kspalaiologos: 7.38906 20.0855 54.5982 FireFly: > u~ y ↔ y u y . For example, ^~ 3 is 27, and +/~ i. n is an addition table. lambdabot: :1:27: error: parse error on input ‘,’ kspalaiologos: wait wha FireFly: oh you were looking at ~. FireFly: [ ~. 1 2 3 2 1 4 5 2 j-bot: FireFly: 1 2 3 4 5 kspalaiologos: so it behaves as I expected it kspalaiologos: just the fact that it's an adverb was absent in my head but it's back here FireFly: ~. and ~ are different things FireFly: ~. is a verb, and removes duplicates, keeping only unique items. ~ is an adverb, and modifies the verb before it (reflex in the monadic case, flip in the dyadic case) kspalaiologos: ye tye kspalaiologos: [ ;: '$ 1 2 3' j-bot: kspalaiologos: ┌─┬─────┐ j-bot: kspalaiologos: │$│1 2 3│ j-bot: kspalaiologos: └─┴─────┘ kspalaiologos: that boxing is somewhat interesting kspalaiologos: the $ operator seems very powerful kspalaiologos: is it used frequently? kspalaiologos: [ 2 2 $ 2 5 $ 1 10 j-bot: kspalaiologos: 1 10 1 10 1 j-bot: kspalaiologos: 10 1 10 1 10 j-bot: kspalaiologos: j-bot: kspalaiologos: 1 10 1 10 1 j-bot: kspalaiologos: 10 1 10 1 10 kspalaiologos: [ 2 1 $ 2 5 $ 1 10 j-bot: kspalaiologos: 1 10 1 10 1 j-bot: kspalaiologos: j-bot: kspalaiologos: 10 1 10 1 10 kspalaiologos: [ 2 5 $ 1 10 j-bot: kspalaiologos: 1 10 1 10 1 j-bot: kspalaiologos: 10 1 10 1 10 b_jonas: that only works if you use his name, and a colon after the statement b_jonas: j-bot, clear: j-bot: b_jonas, cleared b_jonas,#esoteric kspalaiologos: no no I dont mean that b_jonas: [ v=:5 j-bot: b_jonas: |ok j-bot: b_jonas: 5 j-bot: b_jonas: 5 j-bot: b_jonas: 5 b_jonas: j-bot clear: j-bot: b_jonas, cleared b_jonas,#esoteric kspalaiologos: it keeps variables kspalaiologos: interesting j-bot: b_jonas: 'v' (1 : 0) :.((u: 652) (1 : 0)) j-bot: b_jonas: '(', (": m), ' ', (": y), ')' j-bot: b_jonas: : j-bot: b_jonas: '(', (": x) ,' ', (": m) ,' ', (": y), ')' j-bot: b_jonas: ) j-bot: b_jonas: '(', (": m), ' ', (": y), ')' j-bot: b_jonas: : j-bot: b_jonas: '(', (": x) ,' ', (": m) ,' ', (": y), ')' j-bot: b_jonas: ) kspalaiologos: good to know b_jonas: ^ ah, that's some crazy default assignment from Firefly's library kspalaiologos: actually it's exploitable b_jonas: should use a different name j-bot: b_jonas: 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 kspalaiologos: what's this FireFly: (actually tangentstorm's library) j-bot: b_jonas: |value error: k b_jonas: [ k=:5 j-bot: b_jonas: |ok j-bot: kspalaiologos: 6 j-bot: b_jonas: |ask later j-bot: b_jonas: 5 FireFly: that reminds me that I need to clear a bunch of these things up j-bot: b_jonas: 5 j-bot: b_jonas: 5 j-bot: b_jonas: 5 b_jonas: j-bot clear: j-bot: b_jonas, cleared b_jonas,#esoteric j-bot: b_jonas: |value error: k kspalaiologos: I think I may understand J at a very basic level by now kspalaiologos: solved the excercises from declarations chapter kspalaiologos: [ 5 $ 1 2 3 4 j-bot: kspalaiologos: 1 2 3 4 1 kspalaiologos: [ i. 8 j-bot: kspalaiologos: 0 1 2 3 4 5 6 7 kspalaiologos: that's interesting FireFly: kspalaiologos: wrt ;: '$ 1 2 3' <- yeah, the vector of numbers is a single token (which I guess is the surprising bit?) kspalaiologos: ye a bit kspalaiologos: but r->l evaluation kspalaiologos: I wonder did anyone make a collection of useful snippets kspalaiologos: that I will need kspalaiologos: one day or another kspalaiologos: [ $i.8 j-bot: kspalaiologos: 8 kspalaiologos: [ #i.8 j-bot: kspalaiologos: 8 b_jonas: kspalaiologos: try to use J to find (a) the largest number in this array, (b) the second largest number in this array: _0.772 0.492 _1.108 0.971 _1.131 _0.155 0.951 _0.069 1.500 _0.326 0.449 _1.901 _1.433 _0.352 arseniiv: (dear fungot what is a cocategory?) fungot: arseniiv: is the hon. and learned friend the minister for a very powerful and is damning. it was absolutely for the european union have in fnord relationships, the women of the uk deserve to have the full support of the british government, the british government, the british government to the illegal wildlife trade, the government have arseniiv: ^style irc fungot: Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams) kspalaiologos: I don't know how to iterate or loop by now arseniiv: (dear fungot what is a cocategory really?) fungot: arseniiv: parsing: unexpected end of file ( index: 12, row: 1, col: 3) kspalaiologos: https://www.jsoftware.com/help/jforc/loopless_code_i_verbs_have_r.htm#_Toc191734331 kspalaiologos: I'm starting this chapter FireFly: you often don't really want to iterate or loop explicitly in J; it's an array-oriented language, so often the more idiomatic way to approach problems is by working on the entire array at once in different ways FireFly: (well, like, the implementation will at some level perform a loop of course, but you often don't really reason about it in a "loop" way) b_jonas: the answer for (b) should be 0.971 by the way kspalaiologos: I will try kspalaiologos: though kspalaiologos: [ I need to map it all to the > operator j-bot: kspalaiologos: |syntax error j-bot: kspalaiologos: | I need to map it all to the>operator kspalaiologos: I believe kspalaiologos: (oops [) kspalaiologos: [ > 1 2 3 j-bot: kspalaiologos: 1 2 3 kspalaiologos: [ 1 2 3 > 1 2 3 j-bot: kspalaiologos: 0 0 0 kspalaiologos: [ a1 := ]`[@.(2&>@[) j-bot: kspalaiologos: a1 := ]`[@.(2&>@[) kspalaiologos: [ a:=]`[@.(2&>@[) j-bot: kspalaiologos: a: = ]`[@.(2&>@[) kspalaiologos: [ a=:]`[@.(2&>@[) j-bot: kspalaiologos: |ok kspalaiologos: [ 2 a 3 j-bot: kspalaiologos: 3 kspalaiologos: [ 8 a 3 j-bot: kspalaiologos: 3 kspalaiologos: [ 8 a 4 j-bot: kspalaiologos: 4 kspalaiologos: [ a=:]`[@.(y&>@[) j-bot: kspalaiologos: |ok kspalaiologos: [ 8 a 4 j-bot: kspalaiologos: |domain error: a j-bot: kspalaiologos: | 8 a 4 kspalaiologos: I concede defeat FireFly: huh that's a pretty cute implementation of maximum FireFly: kspalaiologos: if you just do @.> instead, that approach for defining maximum works b_jonas: [ s=: _0.772 0.492 _1.108 0.971 _1.131 _0.155 0.951 _0.069 1.500 _0.326 0.449 _1.901 _1.433 _0.352 j-bot: b_jonas: |ok FireFly: since x (g@.f) y will run (x f y) to decide which verb of the gerund to apply FireFly: [ 2 (]`[@.>) 5 j-bot: FireFly: 5 FireFly: [ 5 (]`[@.>) 2 j-bot: FireFly: 5 b_jonas: [ +/>/~ s FireFly: kspalaiologos: so, right line of thinking there at least, I think :) j-bot: b_jonas: 9 3 10 1 11 6 2 5 0 7 4 13 12 8 b_jonas: [ s{~0 i.~+/>/~ s j-bot: b_jonas: 1.5 b_jonas: [ s{~1 i.~+/>/~ s j-bot: b_jonas: 0.971 b_jonas: only that doesn't work well if there are equal elements b_jonas: this can be fixed if you compare indexes for equal elements, but it gets much uglier FireFly: huh, well that's not the approach I expected :p b_jonas: of course not, I'm not giving away the easiest solution right after asking a question FireFly: it's a cute approach though, thanks for showing it b_jonas: it's only like six characters anyway kspalaiologos: [ 5 (]`[@.>) 5 j-bot: kspalaiologos: 5 kspalaiologos: [ (+/ % #) 2 3 4 j-bot: kspalaiologos: 3 kspalaiologos: [ (+/ %) 2 3 4 j-bot: kspalaiologos: 2.5 2.33333 2.25 j-bot: kspalaiologos: 3.5 3.33333 3.25 j-bot: kspalaiologos: 4.5 4.33333 4.25 kspalaiologos: what did I just do kspalaiologos: [ (+/ #) 2 3 4 j-bot: kspalaiologos: 5 6 7 kspalaiologos: [ max:=(]`[@.>)/ j-bot: kspalaiologos: |spelling error j-bot: kspalaiologos: | max:=(]`[@.>)/ j-bot: kspalaiologos: | ^ kspalaiologos: [ max=:(]`[@.>)/ j-bot: kspalaiologos: |ok kspalaiologos: [ max 2 3 4 j-bot: kspalaiologos: 4 kspalaiologos: AAAAAAAAAAAAAA kspalaiologos: I DID IT kspalaiologos: [ max 2 3 4 3 6 j-bot: kspalaiologos: 6 kspalaiologos: [ max 7 2 3 4 3 6 j-bot: kspalaiologos: 7 kspalaiologos: b_jonas, look kspalaiologos: I did it b_jonas: kspalaiologos: are you sure? try it on that array that I gave b_jonas: _0.772 0.492 _1.108 0.971 _1.131 _0.155 0.951 _0.069 1.500 _0.326 0.449 _1.901 _1.433 _0.352 kspalaiologos: [ s=: _0.772 0.492 _1.108 0.971 _1.131 _0.155 0.951 _0.069 1.500 _0.326 0.449 _1.901 _1.433 _0.352 j-bot: kspalaiologos: |ok b_jonas: result should be 1.5 kspalaiologos: [ max s j-bot: kspalaiologos: 1.5 kspalaiologos: xaxaxaxaxa int-e: lovely spam, oh wonderful spam b_jonas: kspalaiologos: of course, finding the second largest is harder FireFly: #jsoftware might be a better fit for learning J than #esoteric is kspalaiologos: a second b_jonas: ``` sleep 1; echo ok b_jonas: fungot, what color of lightsabre are you using? fungot: b_jonas: syntax-unquote et al would be a window log in bitchx and i abused the scheme macro system. it is very useful and powerful. but imho more important is how much of the rest of the world int-e: still waiting for the rainbow colored lightsabre b_jonas: fungot, what condiments do you eat with your hot dog fungot: b_jonas: egg-drop vehicle? just wondering about sxm :) i use the wrong number." fizzie: fungot: Eggdrop is a bot framework thing. fungot: fizzie: i have a linux computer doesn't need xp manuals, and because i don't int-e: fungot: will you upgrade to Windows 10? fungot: int-e: i've just never heard that. but from a proper command-processor?? int-e: fungot: Good point; I see the appeal of sticking with the command processor. fungot: int-e: is that wrong? ( just to look at b_jonas: fungot, at most how many electric moves can a Voltorb know right after you catch it in the wild? fungot: b_jonas: you have to mess around with o to create the first hello by bouncing it off some people... LKoen: b_jonas: I'd say 1 in the very first games, and today there probably isn't a limit anymore LKoen: actually it might even be zero in the first games kspalaiologos: I've been writing a plugin for my friend's MC server - generic stuff, random teleport, antigrief kspalaiologos: They have opened it with 50 players in kspalaiologos: It kinda worked but then the server hanged and crashed with terrible lagspikes kspalaiologos: Obviously at first everyone thought it was the world generating b_jonas: does MC mean minecraft? int-e: . o O ( Monte Carlo. Master of Ceremony. Mini-Cassette. ) HackEso: MC? ¯\(°​_o)/¯ kspalaiologos: I looked at the code and nearly shit my pants because there was new Thread().run(); instead of new Thread().start(); int-e: b_jonas: Presumably. kspalaiologos: Wnd the opening was delayed three hours kmc: kspalaiologos: what's the differece kspalaiologos: Thread run doesn't start the thread kspalaiologos: It runs the procedure in the current thread kmc: i can't say i've ever shit my pants while writing Java kmc: welp, lol kspalaiologos: So game tick processing was delayed kspalaiologos: Because of calculations kspalaiologos: b_jonas, minecraft, Java kspalaiologos: b_jonas, could you give me a J challenge b_jonas: kspalaiologos: you still haven't solved the previous one. what's the second largest number in that array? int-e: Hah, kmc should have their own ideas what "mc" stands for. kspalaiologos: 2nd largest you say kspalaiologos: Just sort the array kspalaiologos: Pick 2nd element b_jonas: it's supposed to be 0.971 b_jonas: kspalaiologos: right, so do that in J. it's pretty short. kspalaiologos: I'm writing on mobile so I'll test it in the channel b_jonas: it's like 6 characters once you already defined the array s b_jonas: shoulnd't be hard to test on the channel kspalaiologos: Gosh J really has no sort prototype? kspalaiologos: [ bruh:=\:~ j-bot: kspalaiologos: |spelling error j-bot: kspalaiologos: | bruh:=\:~ j-bot: kspalaiologos: | ^ kspalaiologos: Now all I need is just extract the 1st element kspalaiologos: [ bruh=:\:~ j-bot: kspalaiologos: |ok kspalaiologos: [ a=:1{\:~ j-bot: kspalaiologos: |ok kspalaiologos: [ a 1 2 3 j-bot: kspalaiologos: 2 kspalaiologos: b_jonas, can you test it? b_jonas: j-bot, ls b_jonas: j-bot, ls: b_jonas: j-bot list: b_jonas: j-bot? b_jonas: j-bot: 1 j-bot: b_jonas: 1 b_jonas: j-bot, list: b_jonas: j-bot, sessions: b_jonas: I don't get j-bot syntax b_jonas: `whatis ls HackEso: ls(1) - list directory contents \ ls(1p) - list directory contents \ ls(1hackeso) - no description \ ls(8glibc) - File Attributes \ ls(8jevalbot) - show the name of all persistent sessions b_jonas: there is an ls command isn't there? kspalaiologos: Just paste it over b_jonas: j-bot ls: kspalaiologos: Gimme the data b_jonas: I think it's still on your session b_jonas: j-bot load: kspalaiologos j-bot: b_jonas, copied b_jonas,#esoteric from b_jonas,kspalaiologos j-bot: b_jonas: |value error: a j-bot: b_jonas: | a s j-bot: b_jonas: |value error: a b_jonas: j-bot load: kspalaiologos, j-bot: b_jonas, copied b_jonas,#esoteric from kspalaiologos,#esoteric j-bot: b_jonas: 0.971 j-bot: b_jonas: _0.772 0.492 _1.108 0.971 _1.131 _0.155 0.951 _0.069 1.5 _0.326 0.449 _1.901 _1.433 _0.352 b_jonas: it was still in your j-bot session b_jonas: you just had to type [ a s kspalaiologos: And another one b_jonas: kspalaiologos: solve http://wiki.math.bme.hu/view/Informatika1-2010/Hazi5 b_jonas: your input is b_jonas: [ s0=: 69 7 8 28 18 92 61 41 24 9 72 56 j-bot: b_jonas: |ok b_jonas: chunk them to distinct groups of length 3, so the first grtoup is [69, 7, 8], the second is [28,18,92], the third is [61,41,24] etc, compute the product of the three numbers in each of those groups, and the sum of those products b_jonas: no wait b_jonas: don't compute the sum b_jonas: just compute the list of products b_jonas: output should be 3864 46368 60024 36288 b_jonas: but make it work for longer input vectors too, like the other examples on that page b_jonas: then solve http://wiki.math.bme.hu/view/Informatika1-2010/Hazi4 b_jonas: inputs are: b_jonas: [ m1=: _2]\ 270 294 337 357 390 414 457 477 510 534 577 597 630 654 697 717 750 774 817 837 870 894 937 957 990 1014 1057 1077 1110 1134 1230 1254 1338 1362 j-bot: b_jonas: |ok b_jonas: [ m2=: _2]\ 319 567 366 539 540 714 545 809 780 954 785 1055 900 1074 905 1169 1025 1280 1140 1324 j-bot: b_jonas: |ok b_jonas: (copy them with "j-bot load: b_jonas," if you want) b_jonas: m1 are pairs of times from a railway timetable from town A to B, first in the pair is when the train departs from A (in minutes from midnight), second is when the train arrives in town B b_jonas: similarly m2 is timetable from B to C b_jonas: [ g=: 720 j-bot: b_jonas: |ok b_jonas: you want to arrive to C at time g or before, when is the latest you can start from A, assuming it takes no time to transfer from one train to another in B b_jonas: answer should be 510 b_jonas: solution should work for other inputs too of course b_jonas: kspalaiologos: third problem. you have a set of piles of pebbles, represented by a list of the number of pebbles in each pile, order of the list doesn't matter. in each step, you take one pebble from each pile and make a new pile from them. b_jonas: compute the state after a step, then iterate that. for example, if you start from (10), then the next state is (9 1), then (8 2), then (7 1 2), then (6 1 3). b_jonas: Use (7 3) as the starting state and iterate until you get the fixed point (4 3 2 1) b_jonas: then, if you want something more tricky, generate all possible partitions of 10 pebbles, and prove with a computation that they each go to the fixed point (4 3 2 1) eventually. b_jonas: find all cycles for 12 pebbles instead of 10. imode-ruby: what's being discussed? imode: I second my twin. int-e: fungot: what's your favorite Python indentation depth? fungot: int-e: it's full of stars int-e: (For some reason I'm using 3, meaning that's what I configured the python mode to use. And I'm wondering why.) int-e: And I can't think of a good reason... so I guess I'll switch to 4. :) zzo38: Kjugobe's Trick {1UU} Instant ;; Choose one-- ;; - Change the text of target spell by replacing all instances of one color word, land type word, creature type word, or non-power/toughness counter word with another of same kind. ;; - Target spell gains split second until it leaves the stack. ;; - Target spell loses all subtypes and supertypes. ;; Flashback {2U} ;; Affinity for permanents named Iuckqlwviv Kjugobe fizzie: fungot: How do you indent Python with stars? fungot: fizzie: most european educational systems have that, i return to walker? problem is im poorly equiped theorethically. didnt listen in algorithms and such in scheme. zzo38: Do you like this cards I make up? int-e: Karatsuba's Trick {MMMAASS}. Calculation. Multiply two linear polynomials in a single variable. zzo38: What is "MMMAASS"? int-e: multiply, addition, subtraction zzo38: O, OK. int-e: err, multiplication (to fit the grammar of the rest) zzo38: Do you have a proper comment of Magic: the Gathering cards that I made up? oerjan: [ +/~ 1 2 3 j-bot: oerjan: 2 3 4 j-bot: oerjan: 3 4 5 j-bot: oerjan: 4 5 6 oerjan: [ +/ 1 2 3 j-bot: oerjan: 6 oerjan: [ +~~ 1 2 3 j-bot: oerjan: 2 4 6 oerjan: [ */~ 1 2 3 j-bot: oerjan: 1 2 3 j-bot: oerjan: 2 4 6 j-bot: oerjan: 3 6 9 oerjan: [ 1 2 3 */ 1 2 3 j-bot: oerjan: 1 2 3 j-bot: oerjan: 2 4 6 j-bot: oerjan: 3 6 9 zzo38: The inventor of farbfeld format suggests compressing pictures using bzip2, and says it gives good results. In my experience, it is usually better compression than PNG, but worse than JPEG. However, some things that help are to not compress the header, and depending on the picture Paeth conversion may also help, and flipping/rotation the picture might help. oerjan: [ > 3 1 2 j-bot: oerjan: 3 1 2 pikhq: zzo38: I am somewhat curious how e.g. xz would perform for it pikhq: Also, given Farbfeld's whole deal, if something vaguely like PNG's filters mixed with more modern compression could do pikhq: (though I understand Farbfeld itself not doing it -- it's counter to the format's goals) zzo38: pikhq: I have tried xz; it is sometimes better and sometimes worse, although it helps a bit to change the alignment settings zzo38: But it would seem to me that compression specifically for pictures would work better. My idea was for the file to start with the header and then a sequence of filters to apply, and then the compressed picture data. zzo38: (These filters may include rotation, indexed colours, predictions, YCoCg, etc) zzo38: I personally have no need to store farbfeld pictures on disk, compressed or otherwise. I use farbfeld only as an intermediate format in pipes, which I think is a good use for it and farbfeld is a good format for that use. \oren\: I've updated my font to include the newest letters in Latin Extended D \oren\: ꞺꞻꞼꞽꞾꞿꟂꟃꟄꟅꟆ oerjan: those look pretty new, aka square int-e: (my irssi/screen combination shows an empty message) \oren\: https://cdn.discordapp.com/attachments/299702207270486016/665490091178721281/unknown.png \oren\: also added were some of the characters in sitelen pona and some superscript letters that don't exist in unicode b_jonas: there's a "Latin Extended D"? kspalaiologos: I've been DDoS'ed kspalaiologos: it's ridiculous kspalaiologos: http://kspalaiologos.baselinux.net/doc/ips_filtered.txt kspalaiologos: I filtered a list of ip's using perl & |sort|uniq kspalaiologos: it's over 2k IP's kspalaiologos: I wonder how much does an attack of this duty cost \oren\: why would anyone ddos you? kspalaiologos: no f**king idea kspalaiologos: the attack lasted for a pretty long time though kspalaiologos: we eventually brought the server off it's knees int-e: Run of the mill botnet based DDoS, can't be that expensive? FireFly: Do you respond to ICMP ECHO? FireFly: My prgmr VPS got hit once, or rather I suspect it was used for a reflection attack targetting another target FireFly: but it effectively acted as a DDoS of my VPS as well FireFly: so if it's something like that, you might not have been the intended target, but rather just used as utility FireFly: used for amplification FireFly: (that was the day I learned to configure iptables :p) int-e: kspalaiologos: "Booter" services come quite cheap, really. Should be no more than $10 really. int-e: Hmm, so much "really". kspalaiologos: well they ran something that imitated a client kspalaiologos: and most of the IP's are located in russia kspalaiologos: my soft has been denying them but the server eventually died for some bizzare reason int-e: Hmm. If it's a customized attack it'll be more expensive, or free if they have their own botnet *shrugs*. kspalaiologos: I doubt kspalaiologos: but the suspects, as stupid as they are can manage buying a ddos int-e: It's not rocket science. Also your friend's botnet is your botnet, right? kspalaiologos: they don't even distinguish a DoS from DDoS int-e: They might just hang out with the right crowd. kspalaiologos: no way kspalaiologos: no idea why would anyone want to do that kspalaiologos: especially in the night when no one was really using the service kspalaiologos: disk is full because of log garbage and other stuff int-e: Yeah no clue what drives such people. kspalaiologos: I would understand if they actually caused some damaghe kspalaiologos: had something with someone and brought it down kspalaiologos: I'm not a saint too, but I'm not buying botnets and right after exploitation and leaving something for the owner contact them kspalaiologos: I remember when my friend sent me a link to some subsite of MEN kspalaiologos: that's the ministry of education in Poland kspalaiologos: some guy (possibly on appetrinceship) hosted a random number generator written in JS int-e: useful kspalaiologos: we joked about new Matura grading kspalaiologos: (an exam finishing high school) int-e: Of course, bitcoin mining is just generating random numbers at high speed. kspalaiologos: my first dirty thought was just bringing it down because it was useless kspalaiologos: and no one would really punish me for bringing down such thing kspalaiologos: in the response there was actually an old version of Apache kspalaiologos: that wasn't updated for like 12 years kspalaiologos: the same went for the main website kspalaiologos: I sent some requests with malformed range header kspalaiologos: and the server sent partial request HTTP code so effectively I leaked some memory on the serverside kspalaiologos: I wrote an email to MEN and CKE about this issue kspalaiologos: no reply until this day, but it seems they patched it kspalaiologos: I just hate my country kspalaiologos: anyways kspalaiologos: some good J excercises someone kspalaiologos: that will get me entertained b_jonas: kspalaiologos: see the logs, I told some after you left yesterday b_jonas: channel logs kspalaiologos: ah fine kspalaiologos: my inet died kspalaiologos: it's in hungarian kspalaiologos: will google translate do the job? kspalaiologos: alright I understand now kspalaiologos: I'll experiment in the channel kspalaiologos: [ 0 1 2 { 64 70 22 78 88 100 j-bot: kspalaiologos: 64 70 22 kspalaiologos: [ set=:64 70 22 78 88 100 36 49 53 70 53 85 35 87 18 72 99 74 30 99 19 72 10 100 59 9 99 80 27 56 42 71 94 51 64 47 12 23 9 30 13 91 71 61 18 5 4 60 j-bot: kspalaiologos: |ok kspalaiologos: [ $set j-bot: kspalaiologos: 48 kspalaiologos: [ i.$set j-bot: kspalaiologos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 kspalaiologos: [ i.$set%3 j-bot: kspalaiologos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 kspalaiologos: [ i.($set%3) j-bot: kspalaiologos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 kspalaiologos: [ ($set%3) j-bot: kspalaiologos: 48 kspalaiologos: [ ($set)%3 j-bot: kspalaiologos: 16 kspalaiologos: [ i.($set)%3 j-bot: kspalaiologos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 kspalaiologos: alrightie kspalaiologos: [ * 1 2 3 j-bot: kspalaiologos: 1 1 1 kspalaiologos: [ *\ 1 2 3 j-bot: kspalaiologos: 1 0 0 j-bot: kspalaiologos: 1 1 0 j-bot: kspalaiologos: 1 1 1 kspalaiologos: [ *\ (1 2 3) j-bot: kspalaiologos: 1 0 0 j-bot: kspalaiologos: 1 1 0 j-bot: kspalaiologos: 1 1 1 kspalaiologos: [ +\\ (1 2 3) j-bot: kspalaiologos: 1 0 0 j-bot: kspalaiologos: 0 0 0 j-bot: kspalaiologos: 0 0 0 j-bot: kspalaiologos: j-bot: kspalaiologos: 1 0 0 j-bot: kspalaiologos: 1 2 0 j-bot: kspalaiologos: 0 0 0 j-bot: kspalaiologos: j-bot: kspalaiologos: ... kspalaiologos: [ gosh j-bot: kspalaiologos: |value error: gosh kspalaiologos: [ f=:monad:'(0{x)*(1{x)*(2{x)' j-bot: kspalaiologos: |spelling error j-bot: kspalaiologos: | f=:monad:'(0{x)*(1{x)*(2{x)' j-bot: kspalaiologos: | ^ kspalaiologos: [ f=: monad define (0{x)*(1{x)*(2{x) ) j-bot: kspalaiologos: |index error j-bot: kspalaiologos: | f=:monad define(0{x)*(1{x)*(2 {x)) kspalaiologos: [ f=:(0{x)*(1{x)*(2{x) j-bot: kspalaiologos: |index error j-bot: kspalaiologos: | f=:(0{x)*(1{x)*(2 {x) kspalaiologos: b_jonas, ideas, why can't I define that verb? kspalaiologos: [ f=:((0+y){x)*((1+y){x)*((2+y){x) j-bot: kspalaiologos: |domain error j-bot: kspalaiologos: | f=:((0+y){x)*((1+y){x)*((2 +y){x) kspalaiologos: [ f =: monad : ((0+y){x)*((1+y){x)*((2+y){x) j-bot: kspalaiologos: |domain error j-bot: kspalaiologos: | f=:monad :((0+y){x)*((1+y){x)*((2 +y){x) kspalaiologos: [ f =: dyad : ((0+y){x)*((1+y){x)*((2+y){x) j-bot: kspalaiologos: |domain error j-bot: kspalaiologos: | f=:dyad :((0+y){x)*((1+y){x)*((2 +y){x) kspalaiologos: [ f =: dyad : ((0+y.){x.)*((1+y.){x.)*((2+y.){x.) j-bot: kspalaiologos: |spelling error j-bot: kspalaiologos: | f =: dyad : ((0+y.){x.)*((1+y.){x.)*((2+y.){x.) j-bot: kspalaiologos: | ^ kspalaiologos: [ {. (1 2 3) j-bot: kspalaiologos: 1 kspalaiologos: [ }. (1 2 3) j-bot: kspalaiologos: 2 3 kspalaiologos: [ f =: ((0+{.){}.)*((1+{.){}.)*((2+{.){}.) j-bot: kspalaiologos: |ok kspalaiologos: it can't work kspalaiologos: but it's worth giving it a shot kspalaiologos: [ f 0 1 2 3 j-bot: kspalaiologos: 6 kspalaiologos: it works kspalaiologos: [ f 1 1 2 3 4 5 6 j-bot: kspalaiologos: 24 kspalaiologos: wait, it just multiplied 4*6 kspalaiologos: ommiting the 5 kspalaiologos: [ f 1 1 2 3 4 5 6 7 j-bot: kspalaiologos: 24 kspalaiologos: [ 2 i.10 j-bot: kspalaiologos: 1 kspalaiologos: [ f 2 (i.10) j-bot: kspalaiologos: |index error: f j-bot: kspalaiologos: | f 2(i.10) kspalaiologos: [ f 2 i.10 j-bot: kspalaiologos: |index error: f j-bot: kspalaiologos: | f 2 i.10 kspalaiologos: [ i. 10 j-bot: kspalaiologos: 0 1 2 3 4 5 6 7 8 9 kspalaiologos: [ z=:i. 10 j-bot: kspalaiologos: |ok kspalaiologos: [ f 0 z j-bot: kspalaiologos: |index error: f j-bot: kspalaiologos: | f 0 z kspalaiologos: [ f , z j-bot: kspalaiologos: 6 kspalaiologos: [ f 0,z j-bot: kspalaiologos: 0 kspalaiologos: [ f 1,z j-bot: kspalaiologos: 6 kspalaiologos: [ f 0 3 4 5 j-bot: kspalaiologos: 60 kspalaiologos: [ f =: ((0+(3*{.)){}.)*((1+(3*{.)){}.)*((2+(3*{.)){}.) j-bot: kspalaiologos: |ok kspalaiologos: [ f 0 3 4 5 j-bot: kspalaiologos: 60 kspalaiologos: [ f 1 1 2 3 4 5 6 7 j-bot: kspalaiologos: 120 kspalaiologos: works fine kspalaiologos: [ f 0 s j-bot: kspalaiologos: |index error: f j-bot: kspalaiologos: | f 0 s kspalaiologos: [ f 0,s j-bot: kspalaiologos: 0.420845 int-e: can you two get a room b_jonas: kspalaiologos: try in #jsoftware or #esoteric-blah kspalaiologos: I moved to pv kspalaiologos: and I'm talking with a friend rn kspalaiologos: not focused on the task arseniiv: You don't have any messages => :′(((((((( int-e: @tell arseniiv Maybe you should seek happiness elsewhere. lambdabot: Consider it noted. arseniiv: @messages b_jonas: zzo38: M:tG rules update bulletin is out, https://magic.wizards.com/en/articles/archive/news/theros-beyond-death-update-bulletin-2020-01-10 b_jonas: also the release notes for the new set b_jonas: zzo38: ^ zzo38: I read the rule update bulletin. zzo38: Once the new rules are available I will want to download it, though. zzo38: How I thought version ten internet addresses should work is, there are sixteen octets. If the first twelve octets are all zero then it is a version 4 address with the same meaning as a version 4 address. If the first octet is less than 128 then it is various kind of specials (network specials, application specials, operating system specials, etc). Each customer will have 2^32 addresses which should be more than enough. int-e: zzo38: https://en.wikipedia.org/wiki/IPv4_mapped_address#IPv4-mapped_IPv6_addresses int-e: The prefix is not 0, but the idea exists. zzo38: I think the way it is done in IPv6 is messy, with multiple classes of such addresses, an unusual notation that is different from normal IPv6 notation, etc. zzo38: Sometimes there is a use for multiple classes, but usually it shouldn't care. int-e: I believe they consciously switched from octets to nybbles for the benefit of reverse DNS. int-e: Also https://xkcd.com/927/ applies equally well for standards that just try to do things "right". zzo38: (e.g. anything that can map version 4 addresses will do so; if it doesn't then it is just treated as a version 6 address passed to the next device on the network (such as the router, modem, ISP, etc); if the ISP supports this then they might have their own address prefix for such purpose and 0.0.0.0.0.0.0.0.0.0.0.0 is treated as an alias for it.) kspalaiologos: why jbot died kspalaiologos: reeeeeeee b_jonas: kspalaiologos: int-e killed it so that you don't spam the channel :-) b_jonas: he couldn't just kick it from this channel kspalaiologos: I stopped spamming it like 3 hours ago lol kspalaiologos: he owns the bot though? zzo38: I think another problem of version 6 internet is that some protocols might not expect the address to contain a colon. With my idea it doesn't have that problem, and furthermore you can use version 4 and 10 addresses together if it is treated as a big-endian number, so the high 96-bits are all zero. kspalaiologos: so how the heck he killed it int-e: b_jonas is fibbing. kspalaiologos: I know, yet I tried to pull it out of him kspalaiologos: most probably it just crashed kspalaiologos: but it's not me, I sweark kspalaiologos: *swear int-e: it could be another bot that doesn't know how to reconnect kspalaiologos: my bot used to reconnect in netsplits zzo38: Orb of Magical Defenses {3} Legendary Artifact ;; {(2/W)(2/W)}, {T}, Sacrifice ~, tap a land you control, tap a creature you control: Create seven 1/1 white Gargoyle creature tokens with flying and bands with other Gargoyle tokens. Use only if a creature is attacking you and the top card of your graveyard is a nonland card. ;; Retrace kspalaiologos: so it's 50% done theoretically kspalaiologos: https://www.youtube.com/watch?v=AAujJwjd7jY kspalaiologos: this one sounds interesting arseniiv: b_jonas is fibbing. => btw was that word named in honor of our great Fibonacci int-e: arseniiv: It's a word made for false etymology if you ask me. zzo38: It doesn't seems to be, except for a use in poetry which is not applicable to that. int-e: zzo38: Just embrace the counterfactual. arseniiv: int-e: I think “ask” too really is “ack” and derives all its semantic might from Ackermann int-e: arseniiv: I'm not sure I want to follow that path. arseniiv: traces of the history can be seen in a proverb: “one asks, other acks”, obviously it means the other asks too, people just love asking, so the proverb has some applicability, even if I apocryphed it right now arseniiv: int-e: :D of course b_jonas: @oeis A027884 lambdabot: https://oeis.org/A027884 Figaro's opening aria in 'Le Nozze di Figaro' by Mo... lambdabot: [5,10,20,30,36,43,640,231,100,91,1003] b_jonas: it doesn't have those extra terms b_jonas: not according to http://oeis.org/A027884 b_jonas: those terms are from A027885 b_jonas: what are you doing, oeis? b_jonas: are you like searching for "A027784" and concatenating the terms from all sequences that match? zzo38: Do you like this cards I make up? Do you make up a card too? zzo38: How to make a list of .so files that another .so file links with? b_jonas: zzo38: try objdump -x filename.so fizzie: Doesn't ldd do that too? zzo38: OK, that works kspalaiologos: jbot is back kspalaiologos: But I'm tired b_jonas: kspalaiologos: you could have solved the problems locally and now just copy the solutiosn kspalaiologos: Possibly kspalaiologos: But someone more experienced watching gives me (false?) feeling of the possibility someone eventually will point me the better direction b_jonas: that makes sense I guess b_jonas: though it works better if you ask specific questions or hints b_jonas: tell what you're stuck with or what doesn't work kspalaiologos: I'm tired not going to solve it now kspalaiologos: I need to take a rest kspalaiologos: See you today but around twelve zzo38: I want to minimize dependencies of TeXnicard; it already uses SQLite, Ghostscript, and PCRE; so if I add further dependencies I should add ones which are already used by Ghostscript, if possible, I think. zzo38: I want to support PK format fonts in TeXnicard, and it seem that FreeType doesn't implement that format. Well, I can implement my own; I have done it before. kmc: has anyone made a brainfuck variant which allows direct system calls? kmc: for example say the ! command executes a syscall where the syscall number and arguments are given by the value under the head and the next six kmc: and puts the return value under the head kmc: to be actually useful you would also need a way to get real machine-level pointers to brainfuck cells, or some other way to use syscalls which have pointer arguments kmc: you could just say that the address of the first memory cell is in the first memory cell when the program starts kmc: or something like that FreeFull: Or you could translate 0 into a pointer to the first cell, 1 into a pointer to the second, and so on kmc: except that some arguments are pointers and some aren't kmc: and it would need to know about each syscall in that case kmc: or there may even be cases where it could be a pointer or not according to the semantics of the call FreeFull: I think the interpreter would have to know about the syscalls anyway FreeFull: So it knows how many inputs to take and how many outputs to provide. Unless you always have it do 6 arguments and ignore the extra ones kmc: on linux anyway, I think it will work fine that way kmc: the syscall ABI is pretty simple FreeFull: And you'd need some way to deal with structs kmc: yeah the brainfuck code would need to manually construct the appropriate struct layout on the stack kmc: and then get a pointer to it kmc: s/stack/tape/ kmc: it'd be a pain in the ass but kmc: this is esoprogramming imode: what's a _good_ alternative to syscalls, anyway. zzo38: You can also use calls for some kind of VM. I invented (but did not implement) a way to use Glk with Befunge, for example. kmc: what is Glk? zzo38: It is a API for setting up text windows for I/O especially in text adventure games. It also supports displaying pictures, sounds, music, file I/O, and date/time. kmc: ah, cool zzo38: It is a C API, although there is also a dispatch layer which uses a standardized format for arguments and uses numbers to identify each function (although a few functions cannot be dispatched, including the dispatching function itself). zzo38: Glulx is a VM which is mainly used with Glk (although the design allows implementations to be made with other I/O systems too), but also has some other functions included, such as the ability to save the entire VM memory and stack to a file, and built-in instructions for searching (linear, binary, or linked). zzo38: Now loading font metric files is implemented in TeXnicard. zzo38: It might be useful to add some extensions beyond what TeX uses, such as a margin character (like the boundary character it is not displayed; it can be used in kerning for hanging punctuation). Possibly some others too, but I don't know which ones. Possibly a table of accented characters, and maybe large character set support, maybe kspalaiologos: up for tasks kspalaiologos: I need to solve the last one j-bot: kspalaiologos: 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 kspalaiologos: what's this j-bot: kspalaiologos: |value error: set zzo38: What task is that you will need to solve? kspalaiologos: b_jonas, can you look at #jsoftware and help me? kspalaiologos: split the vector into three element lists kspalaiologos: multiply them kspalaiologos: and put it in another list zzo38: Recovering Cards {3} Instant ;; Put target non-basic non-creature non-planeswalker non-Equipment non-Vehicle card from your graveyard on top of your library. ;; Retrace ;; Cycling {3} kspalaiologos: what is this oerjan: `? this HackEso: This is something people on the channel like to talk about. We're often unsure what this is, though. Nobody likes this. int-e: `? that HackEso: that? ¯\(°​_o)/¯ int-e: That's good. b_jonas: Is Taneb actually Tony Hawk? fizzie: Just because they both start with "T", I don't think that's enough evidence. Taneb: b_jonas: why do you ask? fizzie: Maybe they saw you do some sick [INSERT SKATEBOARDING TERMINLOGOY]s. b_jonas: Taneb: I was watching GDQ and it has a skateboarding game that has a cutscene that shows a likeness of Tony Hawk b_jonas: I probably connected it to you because of that list b_jonas: ``` cat wisdom/*people*taneb* HackEso: cat: 'wisdom/*people*taneb*': No such file or directory b_jonas: ``` cat wisdom/*taneb*not* HackEso: cat: 'wisdom/*taneb*not*': No such file or directory b_jonas: ``` cat /hackenv/wisdom/*taneb*not* HackEso: Taneb is not elliott, a rabbi, Mark Zuckerberg, James Bond, Queen Elizabeth the first, or anyone older than Queen Elizabeth the Second. Pending approval: Shigeru Miyamoto. b_jonas: anyway, that list Taneb: Anyway, I am not Tony Hawk, I can't even skateboard b_jonas: good to know b_jonas: the mystery thickens, who is Taneb then? arseniiv: could one person be different people simultaneously? b_jonas: `? dokalf HackEso: dokalf? ¯\(°​_o)/¯ fizzie: I think quite often these things turn out to have been some sort of a collective, like Nicolas Bourbaki. b_jonas: fizzie: which things? Taneb? or Tony Hawk? b_jonas: or a rabbi? or Queen Elizabeth the Second? that would explain how she reigns for so long. fizzie: I was thinking of Taneb, but maybe some of those others too. b_jonas: Tony Hawk can't be a very large collective since he fits on a single skateboard and in a single helmet Taneb: If I was a collective I'd probably be more active b_jonas: Taneb: maybe you're a collective representing a secret organization, which is why you're not too active? Taneb: b_jonas: I do not think that quite works out kingoffrance: `8ball is Taneb James Bond? HackEso: You may rely on it. kingoffrance: thats not a bad fortune, you can work with that b_jonas: kspalaiologos: ok, that's a better guess, because many people think that James Bond is a collective, or an inheritable title kspalaiologos: I'm confused kspalaiologos: fungot, what just happened fungot: kspalaiologos: the variable " foobar" zzo38: I saw one program has the following license terms: This program is free and open source under the MIT license. Additionally, any discordian pope may automatically grant themselves a license under the WTFPL, as desired. fizzie: Since WTFPL allows any relicensing, and since there are many discordian popes ("every man, woman and child on this Earth is a genuine and authorized pope"), it probably means it's not hard to get a copy of that program under any other license either. b_jonas: Is Taneb a discordian pope? kmc: I assume so kmc: it's opt-out Taneb: I haven't knowingly opted out myname: who isn"t? Taneb: That said, I haven't knowingly opted out of any other sort of papity kmc: I think most of them are opt-in kmc: I'm also not sure if there is a formal procedure to opt out of Discordianism popehood kmc: I suppose I did that and became a mome instead kmc: I had the official card in my wallet for a long time kmc: along with a card listing the axioms of ZFC in Metamath notation kmc: (which also included propositional and predicate logic on the backside as a prerequisite) int-e: > map (pred . pred) "pope" lambdabot: "nmnc" kmc: I used to be such a nerd kmc: I still am, but I used to, too kmc: that was around the time of my GEB phase kmc: everyone has a GEB phase, right? int-e: don't remind me myname: technically, you need to opt-in to discordianism, or you don't b_jonas: kmc: yes. and a Smullyan phase too. the Smullyan phase lasts longer. kmc: Smullyan is cool kmc: and I still think GEB is a good book, it's just that the speculative parts are... quite speculative b_jonas: was, sadly kmc: it's interesting but it doesn't explain everything about the world like I thought it did when I was 16 kmc: and the part which teaches metamathematics is both accessable and precise. it's not dumbed down arseniiv: everyone has a GEB phase, right? => mmmaybe. My one was pretty shallow and maybe not a phase at all. I was even lazy to solve any question from there as I was more or less learned on logic and lazy in general. I read the book, found stories amusing, took something from the dual part but I suppose not at a face value. Complex questions have complex answers, would I expect different even some eight (I think?) years ago?.. arseniiv: oh, Smullyan phase should be cooler maybe yes maybe definitely but I hadn’t read his books at the right time, only various excerpts arseniiv: and I still think GEB is a good book, it's just that the speculative parts are... quite speculative => nailed it arseniiv: I’d like an accessible book on spinors and some simplified quantum-theoretical things, but essentially they should be quite separable. Spinors are interesting in their own way, and in a sense they are even applicable to rare mundane problems, though their transformations, i. e. spin groups (and there are sometimes miscommunication in people occasionally calling elements of a spin group, a spinor, which it isn’t), as I was to say, spin groups are arseniiv: ore applicable as they act on vectors too and quaternions in rotating 3D are precisely the 3-dimensional spin group, as are complex numbers a 2D one and split-quaternions a 4D one etc. etc. clifford algebras blah blah arseniiv: along with a card listing the axioms of ZFC in Metamath notation => whyy? kmc: why not arseniiv: reasonable! int-e: . o O ( Yay, the moment your program has been running for half an hour and you realise you forgot to compile it with optimizations enabled ) int-e: (it was supposed to finish in 15 minutes ;) ) arseniiv: :D rofoldl int-e: Such intuitive code... http://paste.debian.net/1125756/ int-e: And I should use one more variable rather than using the second half of one of those registers. int-e: (But it's also so much faster than the naive code it replaced, a factor of 30 for what I've been doing.) kmc: SSE, fun int-e: (fortunately I don't have to worry about portability :) ) int-e: requirement: "runs on my PC" kmc: yay :) b_jonas: int-e: my way to handle portability is to just make it give a reasonable compile time #error when there's no implementation for how you're compiling b_jonas: or, if that's hard, a runtime error with a reasonable message kmc: it's also not hard to use that gcc feature I forgot the name of kmc: which selects between multiple versions of a function at load time kmc: based on cpu flags kmc: it might be more of a glibc feature, but anyway kmc: it's good to have a portable fallback anyway for testing kmc: it does introduce a function pointer indirection though kmc: you can do the same thing with dynamic code patching but that's more complicated int-e: 'GNU indirect functions are an extension of ELF that allows you to make a decision about which implementation of a function to use at [dynamic] link time.' int-e: I didn't know what it was called either but I did come across the concept at some point. b_jonas: kmc: sure but you usually don't want to actualy write the other implementation kmc: sounds like int-e already did kmc: typically you would do a portable version first, then the optimized kmc: and I think it's good to have a reference implementation anyway kmc: for testing b_jonas: I wouldn't. I would do premature optimization. whether it's a part I need to optimize or not. kmc: if you have both then it's very easy to test the fancy vector code just by throwing random inputs and comparing outputs kmc: on top of that the portable code is probably easier to read if someone wants to understand what's going on kmc: if it doesn't have to be fast at all, it can be very clear int-e: kmc: it's still around as a reference implementation anyway int-e: which is deliberately simple and not efficient, even for processors without fancy carryless multiplication instructions: http://paste.debian.net/1125758/ (and still not quite portable; it's missing the UINT64_C thingy) kmc: isn't uint64_t standard in C99 and later? kmc: what is this code for? int-e: kmc: UINT64_C is the macro for making a uint64_t literal. kmc: is it something like #define UINT64_C(x) x ## ull kmc: I never knew that was needed int-e: Because you can't really know whether the suffix should be empty, ul or ull... kmc: yay for C :eyeroll: kmc: I was just going to ask if you need a ull actually kmc: better put ullllll just in case int-e: s/empty/U/ (those are capital, aren't they? fizzie: UINT64_C makes a uint_least64_t constant, actually. fizzie: I've always found that a little odd, but that's how it is. int-e: good enough? kmc: you could cast it int-e: I guess there are corner cases where that becomes an issue. fizzie: I assume it's mostly because uint64_t isn't required to exist. fizzie: But uint_least64_t is. kmc: oh really kmc: interesting fizzie: It's required to be defined, but only if the implementation provides a suitable type. fizzie: C18 7.20.1.1 Exact-width integer types: "These types are optional. However, if an implementation provides integer types with widths of 8, 16, 32, or 64 bits, no padding bits, and (for the signed types) that have a two's complement representation, it shall define the corresponding typedef names." int-e: Yeah that sounds like C. fizzie: I'm not really sure what UINT64_C and friends are for, I guess they're just supposed to look nicer than the corresponding cast. int-e: does POSIX amend this? fizzie: I think POSIX might require 8, 16, 32 and 64, yes. fizzie: Oh, heh. Actually, only 8, 16 and 32. fizzie: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html "[CX] The following types are required: int8_t, int16_t, int32_t, uint8_t, uint16_t, uint32_t. If an implementation provides integer types with width 64 that meet these requirements, then the following types are required: int64_t, uint64_t" int-e: Seems sane enough, honestly... 32 bit platforms are not that long gone, probably still lingering in may corners :) fizzie: Thing is, uint_least64_t and uint_fast64_t are still mandatory. int-e: Yeah that is strange :) int-e: . o O ( diverging realities are fun ) fizzie: I guess maybe the reasoning was, the implementation might have to do something weird to support at-least-64-bit types, and might have a harder time providing the exact-width type. kmc: I mean the Intel 8051 8-bit architecture from 1980 is still around kmc: so yeah 32 bit is still common kmc: 32 bit is only starting to become common in embedded int-e: Hmm I suspect POSIX never worried about 8 bit architectures :) kmc: yeah but they do have C compilers kmc: to varying degrees int-e: 16 bit though, hmm. Tricky :) kmc: the PIC XC8 compiler has a "short long" type :) fizzie: Is that a 24-bit type? int-e: Yes, C accomodates all sorts of niches, which goes a long way towards explaining their reluctance to mandate types. I'm really surprised to hear about uint_least64_t being madatory. kmc: avr-gcc has it too, but calls it something sensible: __uint24 int-e: I suppose short long isn't worse than long double. fizzie: The Motorola DSP56K C compiler has a 24-bit 'int' and a 48-bit 'long'. kmc: gcc is more principled than most embedded compilers about how it handles extensions, syntactically int-e: (intel's 10 byte version) kmc: int-e: ah fizzie: (And a 24-bit 'char' as well.) kmc: is it 128 bit on ppc? int-e: (now mostly extinct because of SSE) fizzie: I think GCC on PPC did the double-double trick for long double. fizzie: Where your extended-precision type is actually just two double-precision floats, organized so that you get about the same range as a regular double, but more or less double the precision. int-e: (IIRC Knuth covers this topic but I skipped that part.) arseniiv: I was thinking about that some day but wasn’t very sharp to think it in any detail zzo38: I didn't know about GNU indirect functions. fizzie: Fun fact: the typing of (non-U-suffixed) octal/hexadecimal literals is different than those of decimal constants. On (e.g.) x86-64, 0x80000000 is an `unsigned int`, while 2147483648 is a `long`. fizzie: https://ideone.com/aLGNHI as a corollary. zzo38: I didn't know that either; why is that? Isn't there a U and L suffix so that you can use that to indicate it? fizzie: Yes, 2147483648U would be an unsigned int too. zzo38: (And, you can add a dot if you want a floating number.) fizzie: The way it works, the type (decimal, vs. octal/hexadecimal) and suffix (none, U, L, UL, LL, ULL) determine the possible list of types, and then the constant gets the first type on the list that it can be represented in. fizzie: `int`, `long` and `long long` is the list for unsuffixed decimal, but the list for unsuffixed octal/hexadecimal is `int`, `unsigned`, `long`, `unsigned long`, `long long`, `unsigned long long`. HackEso: int`,? No such file or directory fizzie: HackEso: Sorry. zzo38: O, that is how it works. fizzie: The official reason is: "Unlike decimal constants, octal and hexadecimal constants too large to be `int`s are typed as `unsigned int` if within range of that type, since it is more likely that they represent bit patterns or masks, which are generally best treated as unsigned, rather than 'real' numbers." zzo38: OK, although that still look like strange to me, and even then perhaps it might should depend how many leading zeros too (does it count the leading zeros?) fizzie: Any (nonzero) amount of leading zeros makes a constant octal, so... kinda? But not really. zzo38: No, I mean additional leading zeros for a octal or hexadecimal constant (after the initial 0 or 0x) fizzie: Oh. No, those don't matter. zzo38: Do you have any question and feature request of TeXnicard? I am working on writing TeXnicard so if anyone who is interested in it has some idea, then, I would like to your opinion of it please. zzo38: Also, can any of the vector output formats of Ghostscript be converted to SVG? kmc: zzo38: inkscape can open PDF and save SVG fizzie: It can also open EPS files. zzo38: I saw a way to encode integers where first it starts with however many "1" bits of the length of the absolute value in bits, and then the sign, and then the bits in binary omitting the high bit (which is always set anyways). But I thought another way could be to encode the length using bijective binary instead of unary. int-e: Ah, this is my kind of joke: "[...] needs JavaScript to function properly and provide you with a fast, stable experience. Please enable JavaScript or check your browser's settings." int-e: (Sometimes I miss the pre-Navigator WWW. (Before animated gifs.) int-e: And dometimes I miss closing parentheses.) kspalaiologos: actually I believe old web was really nice kingoffrance: what i miss is the bottle neck was e.g. my 28.8k modem; the text of the page would load, and then youd wait for the rest to load; as opposed to know, text might not appear until it does and you get to sit and wait and watch to servers for kingoffrance: s/as opposed to know/as opposed to now/ kingoffrance: in the worst days of animated gif ads, etc. i recall the text would load and you could browse even before the images all did, etc. kingoffrance: s/browse/peruse the text/ kspalaiologos: gif ads were better than flash ads for sure kspalaiologos: J learning time kspalaiologos: where did I finish the last time kspalaiologos: https://esolangs.org/logs/2020-01-10.html#lhj wib_jonas: kspalaiologos: you gave a solution to the sum of 3-chunks problem, but I'm not sure if you actually understood how the rank conjunction work enough to be able to use it well in the future. wib_jonas: If you don't care about that part, you can solve the train timetable problem. kspalaiologos: well I undestand a tiny bit how it works kspalaiologos: but I don't feel confident really Taneb: I've had a possibly dumb idea and I'd like to know if it's been done already Taneb: Graph parsing Taneb: Given a directed graph of labelled nodes, and a language, is there a sequence of connected nodes such that the labels of the sequence is a member of the language? int-e: it's called the intersection of a language with a regular language? int-e: (more or less) int-e: For example, the intersection of a context-free language with a regular language is context-free. kspalaiologos: I've made a Lempel-Ziv 77 decoder kspalaiologos: in brainfuck kspalaiologos: it's around 25k big kspalaiologos: but it works, slowly, but works b_jonas: I made one of those in perl once b_jonas: but I didn't use it for anything useful, I just encoded the 12 days of christmas song with it b_jonas: https://www.perlmonks.com/?node_id=521169 kspalaiologos: it's awesome b_jonas: there are much better ways to compress that poem kspalaiologos: kolmogorov complexity, I know b_jonas: I'll have to write a 99 bottles of beer program in Consumer Society b_jonas: it's pretty easy b_jonas: admittedly that's because I decided to add a simple syntax to print string literals to Consumer Society, for convenience of debugging kspalaiologos: interesting kspalaiologos: I may write on in J kspalaiologos: this seems like an amazing challenge zzo38: I might use the SQLite page cache in my own program, using SQLITE_CONFIG_GETPCACHE2 to access it. I will see if it is suitable, but my idea is to use for pictures that might be reused several times, so is useful to cache them. fizzie: I think I used something more or less LZ77+Huffman to compress the NKIs for rfk86. b_jonas: by "something more or less LZ77+Huffman", do you mean deflate? fizzie: I don't think it was deflate in all the details (as in, the exact same bitstream format, and support for both static/dynamic Huffman trees), but algorithmically speaking sure, it would've been more or less equivalent. fizzie: Oh, it's documented in the Perl script that compresses it. fizzie: It doesn't compress across messages at all, to make it possible to decompress only the selected NKOs (I thought it was NKI, but looks like it's NKO) so the compression rate isn't great, 18866 to 12093 bytes. b_jonas: fizzie: well, the main difference, as far as I know, is that deflate uses LZW as opposed to LZ77, where the difference is that in LZ77, you have literal bytes and repeats strictly alternating, whereas in LZW, literal bytes and repeats can come in any sequence. this means that in LZW, you need to have the bytes and the repeats in the same huffman tree, but it's still almost always a win. b_jonas: I think the advantage of LZ77 is mainly the simpler decompressor code b_jonas: but I admit I'm not following this whole compression technology too closely b_jonas: I'm just using various compressors and decompressors as black boxes, and know a little about their performance characteristics so I can decide when to use what. b_jonas: also, what's the point of learning it, when in a few decades, all compression will be obsolete because, people want to transfer and store everything encoded with strong cryptography, and every compression leaks information through side channels. we'll just be streaming full resolution videos uncompressed through wireless internet, because internet bandwidth will increase more quickly than the demand for b_jonas: better quality video. zzo38: I made a implementation of robot find kitten in Glulx, and uses Huffman but not LZ77 (although there are some strings of multiple characters that are given a single Huffman code), because that is a function built in in Glulx. zzo38: (I implemented the compression myself (in JavaScript), although the decompression code is one that I didn't write.) fizzie: https://zem.fi/tmp/ticket.jpg - the C programmer's train ticket. zzo38: Is there any train station called VOID VOID VOID VOID? fizzie: I don't think so. At least in the UK. b_jonas: zzo38: probably no, at least not in Europe, because none of bahn.de, oebb.at, sj.se, elvira.hu recognize it as a train station name. They suggest Voitsdorf. b_jonas: But I hear American towns sometimes have weirder names, so maybe it's a railway station over there fizzie: There's a Void-Vacon in France, but it doesn't seem to have a railway. fizzie: https://en.wikipedia.org/wiki/Void-Vacon - quite stubby. b_jonas: the conversations on this channel sometimes get surreal fizzie: It's a shame it's not just "Void", otherwise there could be some nice street signs on nearby roads with VOID → on them. kingoffrance: eh, its a thing "nothing sucks like a vax" people love to find product names/etc. theres a page with various "unix" spottings for example fizzie: Not sure if those would just get stolen, which I understand is what happens to most amusing towns, like the town of Fucking in Austria. kingoffrance: i have seen a mop IIRC called "libman" which i am waiting for a library that deals with man pages to appear kingoffrance: perhaps there is one already kingoffrance: s/mop/mop brand/ b_jonas: kingoffrance: no, libman would deal with men. if it dealt with manpages, that would be libroff or libmanpage or something like that b_jonas: maybe libmandb b_jonas: fizzie: there's a Perl b_jonas: kingoffrance: "UNIX" is not particularly surprising anymore, there's a car tyre company of that name here b_jonas: highly advertised kingoffrance: i have a "boost" nutrition drink in front of me right now kingoffrance: this "boost" i would drink kingoffrance: but if you chug it, that won't work out well b_jonas: meh, it's easy when people choose reasonably common words for two different brands b_jonas: and also when it's two things called "Athena" or "Athene" because heck that goddess is so overused b_jonas: or maybe overinvoked kingoffrance: `8ball will b_jonas be punished for not sufficiently believing in Athena? HackEso: As I see it, yes. b_jonas: how do I not sufficiently believe if I say that naming things of Athena is a mention rather than a use? kingoffrance: well thats a good answer, you were trying to point out the posers kingoffrance: the lukewarm LKoen: today a coworker aksed me "I read a paper today stating 'magic the gathering is turing complete' and I had no idea what they meant, can you explain?" b_jonas: LKoen: we have a link to the more recent of those papers from the wiki b_jonas: let me find it b_jonas: link is near bottom of https://esolangs.org/wiki/Talk:StackFlow b_jonas: a bit hidden, sure b_jonas: we might need a proper article about Magic: the Gathering b_jonas: ask ais523 about details, especially why cute kittens are no longer involved b_jonas: or maybe kittens are still involved in ais523's construction b_jonas: but not in that other construction in those articles zzo38: I also set up a NNTP to discuss some of the stuff relating to Magic: the Gathering, including mathematical stuff such as Turing-completeness, and custom cards, and questions about game rules; not about the more common stuff such as deck construction and buying/selling cards and tournaments. oerjan: hm esolangs.org seems down oerjan: and tunes is inexplicably _not_ serving plain text oerjan: oh well it's just mislabeled oerjan: huh nope oerjan: ah finally fizzie: The esolangs.org logs server does this weird thing where it sometimes just hangs. Works now for me though. fizzie: I was supposed to upload a debug build with symbols so I could figure out what's up, but never did. oerjan: well the wiki is still down oerjan: as are the logs oerjan: so it's presumably a different problem. fizzie: I don't know about that. Both work for me. oerjan: hm downforeveryone* agrees with you. oerjan: as does my linux account. i guess i'm having DNS trouble again. oerjan: hm switching DNS server didn't help zzo38: Another kind of font metric format could be, instead of the ligature/kerning and character info that TeX uses, to have the font design size and font parameters, and then a program used for rendering a sequence of characters in the font (some of which may have accent marks added), given as input the DPI, at size, left boundary type, right boundary type, and as output can execute instructions to move the cursor and to draw glyphs on the page. zzo38: This way it is possible to use multi-byte encodings, kerning and ligatures with accented letters, etc. zzo38: Is there a MIME type for PNG file storing CMYK data in place of RGBA? Lykaina: why would you store an imamge in cmyk? Lykaina: *image zzo38: For printing. Lykaina: oh, right Lykaina: though i thought PNG was always RGBA zzo38: PNG is always RGBA. But is there a MIME type to indicate that it is meant to be interpreted as CMYK instead? Lykaina: why would there be? zzo38: I don't know, but it is something that might be useful for something that I am making. Lykaina: make your on format based on netpbm? zzo38: NetPBM formats are not compressed. imode: can't you just shift the channels around and treat them as CMYK? the scales are the same, right? imode: 0-255? zzo38: Yes of course that is possible; I just wanted to know if there is a MIME type to indicate that it is doing that. Lykaina: iirc, 255 - R = C, and so on zzo38: Lykaina: If you do not include K, then yes, it is. Lykaina: how does the generation of K work? zzo38: I think there are a few different ways of doing it; in PostScript when using RGB colours on a CMYK device you can customize the way of doing that. zzo38: (You might also want to store a picture with more than four channels, such as Hexachrome, but I don't know what file formats would use such thing.) oerjan: hm now esolangs.org _sometimes_ loads. oerjan: but mostly not. :( zzo38: I found something says that Magic: the Gathering cards are printed with CMYK, with a second layer of black for text and borders, and a underprinting layer for foil cards. zzo38: So, I would intend in future to add support for custom separations to TeXnicard, in order it is capable to make such things like this. oerjan: better now. oerjan: admittedly ais523's errors are more logical than some of the others. oerjan: (including space in the sorting) oerjan: sometimes mediawiki's diff just makes me want to scream https://esolangs.org/w/index.php?title=%E2%99%A6&diff=68819&oldid=66194 zzo38: What are you sorting? oerjan: ah good, it was only the last four characters. oerjan: zzo38: the language list b_jonas: zzo38: PNG image storing CYMK => I don't see why you want a mime type for that. just put some new section into the png itself instead to indicate that. zzo38: TeXnicard needs to know whether a picture is RGB or CMYK before loading it, which it can know by the MIME type. However, the MIME type does not need to be determined only by the filename extension; it can be determined in other ways too. arseniiv: epimorphisms are epic oerjan: you may be onto something myname: i think, we should rename CMYK to YMCK Taneb: Yan Magenta Cello Key? myname: didn't the K stand for black? Taneb: If it did then it would be CMYB rain1: good idea Taneb: (I looked up on Wikipedia what K stood for before I wrote my comment) myname: why isn't it RGBK then? Taneb: Because that doesn't usually use the key plate? Taneb: Because it's for digital media rather than print rain1: what's up? fizzie: I think there was some disagreement here recently about it still standing for blacK. The Wikipedia CMYK page has a [citation needed] tag next to "key". fizzie: https://en.wikipedia.org/wiki/Talk:CMYK_color_model#K:_Key_or_blacK fizzie: tl;dr "nobody knows, whatever" fizzie: Heh, there's a zzo38 comment there, didn't even notice. rain1: how is he so prolific wib_jonas: I consider K standing for black. Except in Magic, where for some reason, B stands for black and U stands for blue and Q stands for untap. It would have been easier in Magic too if K stood for black and B for blue and U for untap, but it's too late for that now. wib_jonas: In esoteric context, it should be black, because in the SML/NG markup language from ICFP 2001 "http://cristal.inria.fr/ICFP2001/prog-contest/task.html", the letters "rgbcmykw" stand for the colors red green blue cyan magenta yellow black white respectively. fizzie: I think it should've been S for schwarz. myname: sehr gut! myname: but wouldn't it be cmgs then? fizzie: . o O (Which languages have a different first letter for all of {red, green, blue, cyan, magenta, yellow, black, white}?) int-e: hmm, k-shield radius Taneb: Rosso, verde, azzurro, ciano, magenta, giallo, nero, bianco Taneb: So, clearly, "B" should stand for "White" Taneb: (I've had to do a trick here which actually also works in English, saying "azure" instead of "blue") myname: the strange thing is, cmyb would actually work int-e: Taneb: also белый (now why do I remember that word...) Taneb: int-e: I don't think that's either English or Italian int-e: Taneb: But it starts with a b. Taneb: I think it starts with a б int-e: `unidecode б HackEso: ​[U+0431 CYRILLIC SMALL LETTER BE] arseniiv: be :D It could be jokingly read as “бе” with a palatalized /bʲ/ and it would be either a sheep imitation or a somewhat childish expression of mild disgust Taneb: A bit like "bah" in English? arseniiv: yeah. Also бэ, which is how the letter is pronounced today (and for quite a long time; I was surprised to know that some time ago it was pronounced with a palatalized consonant), is used for “bah” too wib_jonas: fizzie: try https://www.omniglot.com/language/colours/index.php arseniiv: pronounced and named officially*, though sometimes people write бе as there is an unphonetic streak that in many cases е is used in place of э and doesn’t mean the prev. consonant is palatalized. Cumbersome, though maybe English orthography is still more complex. Written languages like English are good in that they often allow several spellings as “the right ones”, like with coordinates, co-ordinates or even coördinates. Here, those circu arseniiv: stances are very rare. People run themselves into a corner. One spelling reform back in IIRC sixties was cancelled because there was a loud protest to write several word classes in a more logical manner because they looked unpleasant. Uh, I’m certain those individuals would get accustomed to new spelling in no time int-e: Having experienced an orthography reform... it was exciting. int-e: (We had one in 1996, with a follow-up around 2004 that undid the most controversial aspects. But most of it stood the test of time. And yes, it involved allowing variant spellings.) int-e: I'm not sure what variant spellings do to foreigners learning the language. int-e: I imagine it can be quite confusing. wib_jonas: int-e: what, like "ass" and "arse"? or all the -our words (color, neighbor, behavior, honor, odor, etc)? Taneb: I'm sher it woodent bee two confuzing wib_jonas: or dwarfs and dwarves, fairy and fairie and fae? arseniiv: if someone’s interested, one of the weird normative cases well-known today is the gender of “кофе” (coffee). Several centuries ago it pronounced and spelled like кофий and declined in a way normal for a masculine noun. Long story short, now its nom. sg. looks like a perfect case of a neuter gender noun like солнце, окно or e. g. какао (cocoa and cacao). In literary norm though its thought as indeclinable, and indeclinabl arseniiv: nouns in a language heavily using declension is a thorn. But using кофе as a declinable neuter noun is frowned upon in the “literate” circles. Though finally dictionaries start to adopt the declinable variant, after decades and decades of use. Still, many snobs think they know better that even a normative dictionary arseniiv: I imagine it can be quite confusing. => maybe, but at least they wouldn’t be frowned upon if using at all times only one of them wib_jonas: I hope at one point the MTA decides to investigate the question on how the words "kisebb, zőlő, folyosó, köpeny" should be spelled. it's tricky because in some of those cases, both pronunciation is used. wib_jonas: hmm, I typoed that wib_jonas: the words "kisebb, szőlő, folyosó, köpeny" wib_jonas: then they also have to consider the cases where the pronunciation is clear, but despite that the spelling isn't, as in "bicikli/bicigli, kesztyű/keztyű" wib_jonas: alternate spelling variants hurt searchability of course arseniiv: natural languages are hard :) wib_jonas: it's especially bad when at least one of the spelling variant is homographic with some other word. wib_jonas: my favorite is "mold" vs "mould", both of which can mean either a kind of fungus, or a container to shape something that you pour into as a liquid but then hardens. the latter is also called a "die", which has two other meanings, one of which is also spelled "dice". Taneb: The die is cast kmc: i like fungus kmc: and fungot fungot: kmc: a ( add b c)) wib_jonas: yes, cast is what you call when you shape an object by pouring it as a liquid into a mold or mould or die Taneb: It's also a word meaning to throw int-e: . o O ( The password of the minute is attention defici. ) wib_jonas: another example is "draught" vs "draft" wib_jonas: both of which have way too many meanings wib_jonas: and for some of them, you can use either spelling int-e: Dearest creature in creation... int-e: The pronunciation of "draught" should be more naughty. wib_jonas: int-e: as in https://ozyandmillie.org/comic/ozy-and-millie-2103/ ? int-e: wib_jonas: Yes, like hat. wib_jonas: there's also some other systematic variant English spellings besides the -or/-our words: a lot of -ize/-ise and -ization/-isation words, some of which come up in programming too; a few -er/-re words including scepter/sceptre, specter/spectre, meter/metre, liter/litre. wib_jonas: also some -ice/-ise words, most commonly advice wib_jonas: I personally try to use -or, but "neighbor" and "behavior" are hard because the -our spelling is too much in my fingers; the -ize version, the -ice version, but I'm not sure about -er vs -re wib_jonas: oh, there's saber/sabre among the -er/-re words kingoffrance: http://www.dict.org/bin/Dict?Form=Dict2&Database=devil&Query=die kingoffrance: A cube of cheese no larger than a die kingoffrance: May bait the trap to catch a nibbling mie. kmc: i have read that mice don't actually like cheese that much kmc: we got these no-kill mouse traps kmc: the English instructions suggest using peanut butter or cheese kmc: but the French and Spanish instructions suggest peanut butter or chocolate kingoffrance: well, english chocolate apparently is not as good, or french and spanish cheese is no good kingoffrance: maybe its a price thing kmc: given that set of 3 languages it's probably marketed for North America kmc: and American cheese is, objectively, terrible kmc: perhaps it's a kind of terrible that mice prefer to actual cheese, idk kmc: the mouse in our house seems to like brown rice and ramen noodles kingoffrance: well, there might just be terrible mice too kmc: but lately it's lurking in the living room / workspace too kingoffrance: they cant all be educated/cultured kmc: I hope it's not stealing my wires for nests arseniiv: http://www.dict.org/bin/Dict?Form=Dict2&Database=devil&Query=die => wow, what an article! kmc: Taneb: it's not CMYB because B was already for blue in RGB fizzie: kmc: The mice you entice prefer mainly the rice? zzo38: Fortunately, it is possible in PostScript to specify separations even if separations are not implemented, so even before I implement separations in TeXnicard it is still possible to specify the text separation like Magic: the Gathering uses such as by writing: [/Separation /Text /DeviceGray {1.0 exch sub}] setcolorspace zzo38: The article I read did not metion the shiny mark I see on some newer cards (although maybe I missed it). Do you know how that works? Is it another separation? b_jonas: zzo38: you don't mean the hologram seal at the bottom, right? zzo38: Actually I do mean the hologram seal at the bottom, I think b_jonas: I think that one is on all rares and mythics since they introduced the new frame b_jonas: which was in 2014 for the Magic 2015 set I think b_jonas: I believe they put that on cards so that they're more difficult to counterfeit, but not on all cards presumably to save printing costs zzo38: Yes, probably, but I was wondering how the printing of it works. Is it a separation, or is it just added to the entire rare sheet afterward, or something else? (Anyways, TeXnicard is not only for Magic: the Gathering, and is intended to contain nothing specific to Magic: the Gathering, and some people may use to make other card games too.) b_jonas: I don't knowhow it's added b_jonas: note that there's a different shiny seal at the bottom of some card sleeves b_jonas: its location and shape is different b_jonas: just in case you see those on photos of M:tG cards b_jonas: there's probably some info about the seal on cards in a Wizards article back in 2014 when it was introduced, but probably not about the print technology zzo38: Are you interested in this software? zzo38: Do you know someone who is? b_jonas: in TeXnicard? not really, because I don't want to create printed custom cards zzo38: Do you like to create custom cards without printing them? (It is meant to be usable for that, too.) b_jonas: not in a way where I create a full image mockup for that b_jonas: I created a very few as just text descriptions b_jonas: mostly as just thought experiments for what cards would or would not work zzo38: Yes, that works, although even with TeXnicard it would not require to render them; you can still create a card set and import/export them, query them, calculate statistics of them, make random packs, etc (I also intend to add a format for doing collaboration over NNTP, so that changes can be recorded using NNTP and commented on). MSE does similar thing but requires the card to be rendered to do anything at all. b_jonas: zzo38: what I should do is download and parse the text of all cards from Gatherer, plus download the text of all cards from Scryfall b_jonas: I started at one point but I was too lazy to finish b_jonas: and then once I get that, repeat it four times a year, once after each standard-legal set zzo38: Yes, I wanted that data too zzo38: What Magic: the Gathering cards did you make up (even just for experiment)? b_jonas: zzo38: https://esolangs.org/logs/2018-10.html#lsw b_jonas: and there's a green creature that you have to sacrifice when you control a creature with power greater than its power, but I couldn't get it to be a good card b_jonas: I mean a card that I'm satisfied with b_jonas: zzo38: I think I originally mentioned that card here: https://esolangs.org/logs/2015-10-06.html#loj zzo38: b_jonas: I looked at that; I think is good, but did you have any more recently I mean. I did make some more recently rain1: how cool is that google made a good quantum computer int-e: Isn't this 2 months old news? Taneb: int-e: quantum computing doesn't allow for instantaneous communication int-e: Taneb: that's a huge relief Taneb: It takes about two months rain1: https://www.youtube.com/watch?v=G9_l8QASobI fizzie: If you bake a cupcake that has a hole in the middle, is it called a cupnut? Taneb: I think it's called not being very good at baking fizzie: It can't be a nutcake, because that's something else. But it could be a docake. int-e: why *is* it called a doughnut? int-e: I guess it relates to nuts and bolts. Taneb: int-e: they originally put a nut in the middle Taneb: Hmm, I might be wrong int-e: 'The word nut is here used in the earlier sense of "small rounded cake or cookie".' int-e: So interestingly, the holes are not supported by the etymology. zzo38: Not all doughnuts have holes anyways zzo38: (Also not all of them are round; there are also long doughnuts.) rain1: the new fake donuts without holes are sold by liars kmc: i'm still sad that wikipedia deleted my Category:Toroidal_foods rain1: https://commons.wikimedia.org/wiki/Category:Toroidal_food zzo38: The doughnut in the photograph on Wiktionary does not have a hole; it does say a toroidal shape is common, but it isn't always. int-e: kmc: let me guess.. onion rings, calamari and do(ugh)nuts? kmc: and bagels, cheerios, froot loops kmc: bundt cake kmc: there's quite a few when you start thinking about it int-e: penne, macaroni kmc: pineapple rings rain1: you coudl almost cut anything into shape int-e: (macaroni is very topological) int-e: “No, ma’am, your dog is not gay. They sniff each other’s rear ends to introduce themselves. All dogs do it.” int-e: Hmm, that wasn't where I wanted to paste it. But no harm done, I suppose. kmc: hahaha kmc: speaking of annuli... kmc: great name Taneb: kspalaiologos: you skipped "HELlo" :( kspalaiologos: I wanted to already come to the fun part :p myname: not neccessarily, maybe he's doing powers of 2 Taneb: myname: we started with 0 which is not a power of two! myname: well, at leas it's not the -1st (or th?) power oerjan: @oeis 0,1,2,4 lambdabot: https://oeis.org/A056654 Numbers n such that 10*R_n + 3 is prime, where R_n ... lambdabot: [0,1,2,4,8,10,23,83,220,1313,2951,20015,51053,0,0,1,2,4,6,9,12,16,20,25,30,3... oerjan: int-e: i think that also has that bug of adding another numer list at the end... kritixilithos: does one go looking for a k job or does it find you kspalaiologos: wib_jonas, I didn't get to solving these problems kspalaiologos: but I'll tackle 'em eventually rain1: what's new in esolangs arseniiv: int-e: at least they used befunge? arseniiv: (or another fungoid, I didn’t check carefully) fizzie: It's Befunge, yes. fizzie: I used to have a three-line Befunge-based email/usenet sig, which in retrospect was pretty silly, but, you know. int-e: arseniiv: wrong context, but I guess that's my fault (see oerjan's message) :) arseniiv: int-e: ah, I had a feeling maybe that “meh” is for something further upstream arseniiv: ah, that oeis bug b_jonas mentioned too int-e: `? anoia HackEso: anoia? ¯\(°​_o)/¯ int-e: (cf. https://wiki.lspace.org/mediawiki/Anoia ) wib_jonas: darn it, this stupid webpage won't give errors for an invalid url, neither in the status code, nor some nice error message in the content, it just returns an index page wib_jonas: how can I detect this? wib_jonas: I want to detect errors wib_jonas: I'm doing a mass download of 25000 pages, and so want to find errors before I download the index 10000 times int-e: Oh well, at least the bug is an upstream bug, not "mine". int-e: http://paste.debian.net/1126407/ int-e: And it's also fairly obvious what is happening. arseniiv: first I thought you say Anoia causes that int-e: arseniiv: that is what I meant int-e: Anoia is also the goddess of silly bugs, to my mind. wib_jonas: int-e: it might be because the oeis site has changed a few times in the last decade. perlbot's oeis plugin is also bitrotten now. int-e: addElement (t, x) c | t `elem` "STU" = c { sequenceData = nums ++ sequenceData c } arseniiv: if it’s that then she may be very pleased when I write code from scratch, as I make many silly bugs before the code starts working as intented and can be gradually added to arseniiv: many of them just unattended typos arseniiv: or because of copy-pasting pieces and forgetting to rename something arseniiv: and that’s even despite I know not to copy-paste much int-e: wib_jonas: I imagine it's possible that OEIS never used to return more than one result in its text interface int-e: http://oeis.org/search?fmt=text&q=0,1,2,4 int-e: (for example) int-e: So what the oeis package is doing is taking that text, and add all %S, %T and %U lines to the sequence. And it's clear that it doesn't expect more than one entry: addElement ('I', x) c = c { catalogNums = words x } int-e: (that's the sequence id(s)) wib_jonas: int-e: ok wib_jonas: that sounds like it's possible to fix wib_jonas: ok, I started the download. it will try to download all 25252 pages, and *hopefully* detect if a page is not found. wib_jonas: but since the webpage doesn't give proper error messages for a wrong url, the error might slip through undetected. wib_jonas: int-e: I don't know, I don't use the units program wib_jonas: I have a custom ftoc and ctof program here wib_jonas: `ftoc 100 int-e: Ah. There are tempF/tempC linear functions/notation. int-e: `` units "tempF(100)" tempC HackEso: ​ 37.777778 int-e: (Basically, tempC(x) = x + 273.15K, and degC = K, and I forgot what the absolute zero based counterpart for Fahrenheit is.) wib_jonas: ``` units "tempF(100)" tempF int-e: Is it Racine? *duckduckgos* int-e: Rankine. Kind of not close. int-e: https://en.wikipedia.org/wiki/Earth%27s_gravity has a surprising amount of content. wib_jonas: hmm... how should I code this int-e: `? this HackEso: This is something people on the channel like to talk about. We're often unsure what this is, though. Nobody likes this. wib_jonas: yes, that int-e: That's different. wib_jonas: I'll use type-safety to find errors wib_jonas: as in, I'll change the type of this object, so that I can find all other parts of the code that depend on the current content of the object wib_jonas: custom types are so useful, good thing most programming languages offer them now int-e: Oh yes, type-driven development. wib_jonas: most non-eso programming languages int-e: (Often useful in refactoring code.) wib_jonas: normally I do name-driven stuff, where, when I change the interface of a function or variable, I change its name so that anyone referring to it under the old name gives an error wib_jonas: but this time that won't work, because much of the code uses these objects as just comparable and hashable abstract objects wib_jonas: and I want to keep those parts wib_jonas: and only modify the parts of the code that destructure this object wib_jonas: I just have a naming problem, I don't know what to name one of the fields int-e: hmm, "foldl' f x . reverse" looks a bit pointless arseniiv: also unrelatedly I’d like to find a mathematical sense in logarithmic units rain1: like decibells? arseniiv: most non-eso programming languages => yeah I’d like to contrive a typed esolang but that’s a hard task (i) to not make anything too useful and (ii) to not make anything too hard to implement even an unoptimized reference impl arseniiv: something with typeclasses if I wrap my head around that algorithm W and its variations arseniiv: I just have a naming problem, I don't know what to name one of the fields => how was that random words HackEso command named? arseniiv: rain1: exactly wib_jonas: `words arseniiv: or bits wib_jonas: random bits? arseniiv: `words 5 wib_jonas: `words 10 HackEso: confubtill mautionauer themia dauo mcgling HackEso: fya sack lapprock alcork gamy timenth muloppofcstati jah peramargen wigg arseniiv: random bits? => no, in the context of decibels and others arseniiv: yes I definitely should make an esolang with keywords from a conlang, like Lojban’s grammar description uses Lojban words arseniiv: medɛia ⟦ sotk°e imar ~ mŭ • sotk°e jɛ ~ mŭ ⟧ • ɛert°iä wib_jonas: arseniiv: I think there are a few using klingon keywords arseniiv: wib_jonas: that’s only good for those who know it, and I don’t wib_jonas: see https://esolangs.org/wiki/Var%27aq arseniiv: (if someone would be interested to read that thing aloud, t° and k° are maybe labialized t and k, though I have no idea why here are both ɛ and ä) wib_jonas: arseniiv: is Excel an esolang? LibreOffice Calc as esperanto UI, in which case the builtin functions in excel formulas have names in esperanto. in particular, https://help.libreoffice.org/6.3/eo/text/scalc/01/04060109.html says that the VLOOKUP function is localized as VSERĈO. wib_jonas: arseniiv: see also https://en.wikipedia.org/wiki/Non-English-based_programming_languages arseniiv: wib_jonas: thanks int-e: wib_jonas: https://github.com/bsl/oeis/pull/14 :-/ fizzie: Heh, Flickr responses have one of those "hiring ads in HTTP headers" things. fizzie: There's also an X-Men quote in a "quote" header. fizzie: (Trying to figure out why the "figure out the color of anything via flickr image search" thing has stopped working.) int-e: duckduckgo is so terrible :/ fizzie: This error message from urllib2 is pretty terrible. It just says "HTTPError()". int-e: Better than ed's "?". Taneb: int-e: by what metric in particular is duckduckgo terrible? int-e: Taneb: relevance of search results. Taneb: That sounds like an important metric for a search engine int-e: Taneb: I mean I have a pretty good idea why that is the case. int-e: Taneb: But it's still annoying :) int-e: (Why: duckduckgo does not track which links people actually click. And I suspect that this is a very effective relevance metric.) int-e: At least when it comes to determining the order of the top 10 results. int-e: Taneb: FWIW my current attempt was 'ghc 8.8.2' (which found a commit on gitlab) and 'ghc 8.8.2 download' (which found the download page for ghc 8.2.2...) Taneb: That is close to what you want but yet decidedly unhelpful b_jonas: @oeis A061574 lambdabot: https://oeis.org/A061574 Simple quadratic fields (i.e., with a unique prime ... lambdabot: [-163,-67,-43,-19,-11,-7,-3,-2,-1,1,2,3,5,6,7,11,13,14,17,19,21,22,23,29,31,... b_jonas: @oesi A003173 lambdabot: https://oeis.org/A003173 Heegner numbers: imaginary quadratic fields with un... lambdabot: [1,2,3,7,11,19,43,67,163,1,1,2,3,4,5,7,9,11,14,17,21,25,30,36,42,49,57,66,76... kspalaiologos: b_jonas, I found another cool challenge kspalaiologos: that involves swapping letters in the string kingoffrance: (seems (fitting)) int-e: https://en.wikipedia.org/wiki/Melvin_Fitting ... hmm, don't see any connection to Lisp. zzo38: I read in a book that webs are colourful to insects that can see ultraviolet. zzo38: I found that the SQLite page cache requires that the size of the extra data must be at least the size of a pointer, otherwise it will result in invalid write error. This does not seem to be documented in the SQLite documentation. zzo38: I have a different problem with DuckDuckGo, which is that the pagination doesn't seems to work properly. zzo38: A bug I found in Ghostscript before, I looked at the source codes and it says that the reason for that bug is it is an emulation of the same bug in Adobe's implementation. See the file called ibnum.h for the explanation. Now you can know this in case you have found the same bug and don't know what it is. zzo38: "There is a bug in all Adobe interpreters that causes them to byte-swap native reals in binary object sequences iff the native real format is IEEE. We emulate this bug (it will be added to the PLRM errata at some point), but under a conditional so that it is clear where this is being done." kspalaiologos: ``` perl -we 'print unpack "x*(a*\@0X)*(a*@)*", "example\n";' HackEso: ​ \ e \ le \ ple \ mple \ ample \ xample \ example \ xample \ ample \ mple \ ple \ le \ e kspalaiologos: ``` perl -we 'print unpack "(aXa)*", "example\n";' HackEso: eexxaammppllee imode: we have languages with typical message passing features (erlang, etc.) but none with generative communication features. imode: I wonder why that is. int-e: I wonder what that is. imode: decoupling sender from receiver. your units of code communicate via a shared associative memory and pattern matching zzo38: I think that a "special" operator should be added in PostScript, which is used for non-graphical properties of the page or document, such as hyperlinks, table of contents, background/foreground distinction of DjVu, etc. Any PostScript object that can be represented as a binary object format can be used. If the driver doesn't recognize the command, then it is an error (which may be deferred depending on circumstances). zzo38: (When the null device is selected, all specials are allowed and have no effect.) zzo38: I found the document how the pack/unpack commands working in Perl, to learn about what kspalaiologos wrote above zzo38: I do not understand it so well, especially the first one I don't understand so well. zzo38: TeXnicard assumes that int and float are both 32-bits long, and on non-IEEE computers, furthermore requires that they are big-endian (on computers that use IEEE, the endianness doesn't matter). Probably, this should be corrected, although it works for now. (The only place where this matters is the definition of the obj_ufloat macro; the rest of the program doesn't care. This makes it easy to fix if needed.) int-e: . o O ( Isn't it funny how the interpreter doesn't treat states as characters... ) zzo38: I found a mention of __STDC_IEC_559__, but it seems not all C compilers implement it; apparently clang doesn't, GCC does even though the documentation says it doesn't. b_jonas: zzo38: see my https://www.perlmonks.com/?node_id=1008395 and links from there for more abuse of unpack in poerl zzo38: b_jonas: Is there an explanation of its working, though? I read the document of pack/unpack, but still don't know all of its working, although I understand part of its working. b_jonas: zzo38: the code golf SE node that I link to gives some explanation b_jonas: https://codegolf.stackexchange.com/questions/3434/shortest-game-of-life/112163#112163 b_jonas: and that applies to the original game of life unpack too, and in fact it might be worth to read the code of the original first, because it allows arbitrary width and height of the field, so you can see how the parameters depend on the width explicitly zzo38: Thank you for this explanation b_jonas: they differ in boundary counditions though: b_jonas: the original one puts zeroes all around the board b_jonas: the code golf SE one is toroidal because the golf challenge requires that b_jonas: for the first one in https://www.perlmonks.com/?node_id=908680 , which is what I gave to kspalaiologos, you have to know that by the docs, it would be possible to write infinite loops in unpack: b_jonas: `perl -eprint unpack"(a7X7)*","example" # by using a * after a parenthisized pattern that doesn't move the cursor HackEso: exampleexampleexampleexampleexampleexampleexample b_jonas: but in fact unpack is implemented to interpret * as the length of the input string in that case, to avoid such an infinite loop b_jonas: in fact the star is also interpreted as the length of the string in "X*" so that's valid only at the end of the string zzo38: O, so that is its working. OK kspalaiologos: b_jonas, is there something like getline() in J? b_jonas: kspalaiologos: ((1!:1)3) reads a line from stdin b_jonas: or does it read the whole stdin? I don't remember kspalaiologos: what's !: b_jonas: it's an escape to all sorts of builtins that don't get a fancy name with a punctuation, but are named by a pair of numbers, major-minor style b_jonas: except that (11!:n) aren't builtins of the interpreter, but call a callback of the program into which you embed the interpreter kspalaiologos: was the prefix to get tacit equivalent? kspalaiologos: I'll look up the !: later b_jonas: what prefix? kspalaiologos: uhh I meant this 13 : '' kspalaiologos: that forced the conversion kspalaiologos: also, is there something like a verb, but without arguments? kspalaiologos: alrightie b_jonas: it's like standard ML, verbs only know when to run their action and side effect when you pass them an argument, so you need to pass at least a dummy argument to them kspalaiologos: alright kspalaiologos: can 'y y$((1!:1)3)' be made tacit? kspalaiologos: J refuses to show the tacit form FireFly: do you mean (y,y)$((1!:1)3) ? b_jonas: kspalaiologos: can we take this to #jsoftware ? ask there again kspalaiologos: FireFly, ah, yes kspalaiologos: t*right b_jonas: `? Beethoven HackEso: Beethoven? ¯\(°​_o)/¯ b_jonas: ``` hg log -r 3342 -T "{desc}\n" HackEso: ​ for x in wisdom/*; do rev "$x" > "$x"a; mv "$x"a "$x"; done b_jonas: that's a weird mass edit FreeFull: That was so long ago b_jonas: I did much more silly things b_jonas: it was in 2013 zzo38: I received a message that "as of early 2020, only 5 free open nntp servers [that include enough Usenet newsgroups and do not require an account to use] exist". The one I am using is one of the ones listed there, but if it stops working in future now I can know which one to try next, I suppose. zzo38: See if this is good http://sprunge.us/eWKnXK or maybe some changes should be made A-ee: Anyone interested in finding the computational class of my language(https://github.com/a-ee/w)? Esolangs page is https://esolangs.org/wiki/W_(A) A-ee: I mean, I will be glad to here that it's Turing-Complete. A-ee: where here = hear wib_jonas: Dear people who make these online payment forms that ask for card details, please figure out a single order of the fields, and ideally a similar format across sites, because I keep typing my name in the card number field or the card number in the bank name field. wib_jonas: we should start fixing the problem that domain names are written with the least significant component first. if we can make programs accept domain names in the normal order with a different separator, such as the plus sign, then 40 years from now we can start writing domain names that way. wib_jonas: we're already somewhat advanced at using date formats that aren't mixed endian, as in "2020-01-20 13:49:58 +0000" rather than "Mon 20 Jan 13:49:58 UTC 2020" HackEso: Mon Jan 20 12:51:01 UTC 2020 wib_jonas: date and ls and asctime are stuck with these default formats, but we don't have to use those defaults kspalaiologos: my recent discovery: 432 Hz sounds better than 440 Hz kspalaiologos: I remember someone here was a harp tuner kspalaiologos: `q tune HackEso: 1280) hmm, I just remembered that I was formally trained to tune harps kingoffrance: not me, but i know there are different names for systems, going wayyyyy back; intersects with poetry IIRC kspalaiologos: I don't mean the 9-tone system kspalaiologos: just the 12 tone system with 432Hz as A kspalaiologos: with (possibly) the same intervals as 440 Hz Rockefeller system kingoffrance: i dont know music, just doesnt surprise me i mean kspalaiologos: I mean yeah, but I'm doing something different than the ancient Pythagorean system wib_jonas: kspalaiologos: make sure to test if you can replicate that preference a week from now, and with different sound equipment (amplifier, cable, headphones or speakers, everything analog), in case it's just a local error. wib_jonas: you can't easily replace your ears, which is why I suggest waiting a week so temporary problems can clear up kingoffrance: what is a chord but a rhyming scheme kspalaiologos: http://kspalaiologos.now.im/doc/432Hz-simple.mp3 kspalaiologos: listen it yourself kspalaiologos: I quickly made this one kspalaiologos: to 432 Hz kspalaiologos: http://kspalaiologos.now.im/doc/440Hz-simple.mp3 kspalaiologos: 440 looks so sharp and disturbing kspalaiologos: while 432 seems very calming kspalaiologos: obviously the music is terrible so it's not very easy to get the sense of the runing kspalaiologos: *tuning int-e: Maybe it's your speakers. int-e: https://arxiv.org/abs/2001.04383 seems highly esoteric. Taneb: I really need to learn quantum computing int-e: (Disclaimer: I make no claims of understanding any of it.) kspalaiologos: brainfuck quantum computer kspalaiologos: gosh, that would be _amazing_ int-e: `? kspalaiologos HackEso: kspalaiologos is a brainfuck addict and a late night Perl hacker. He's secretly disassembling brainfuck code for a casino that lost the source code. Apparently knows the secret of Malbolge. kspalaiologos: well :p first 5 words would be sufficient int-e: . o O ( s/a brainfuck addict/THE brainfuck enthusiast/ ) arseniiv: can’t think up an eso type system. Any interesting type system invented as already somewhat eso, or take Haskell type-level hackery for example arseniiv: so I’m just blocked because I think I can’t make an at least a bit useful typing not bearing resemblance to one which is used for good in some famous production-ready language arseniiv: so that won’t be cool at all arseniiv: hm this reminds me things shouldn’t be done this way, that probably shouldn’t be a goal in itself arseniiv: one day I came up with a strange little type system was when I eyed up recursive functions formalism once again and assigned each function a type m if it takes m arguments, but because I overgeneralized one part, it was needed to consider types ≥m for one could construct a constant function of unspecified number of arguments and then add nonfictive arguments later. Then I fixed the formulation and ≥m types vanished. They didn’t have any uses, t arseniiv: ough they made an interesting subtyping lattice arseniiv: so overall that was a dead end but when it would be nice if that thing would find some use. But it won’t arseniiv: s/when it/it b_jonas: yes, Haskell with modern extensions has a crazy complicated type system b_jonas: so does rust arseniiv: b_jonas: hm you gave me a minor idea: we could add eso-ness by further complicating type error messages. As we know, usual languages usually try to make such messages more friendly at least in frequently occuring cases arseniiv: though I partly know INTERCAL had this in part covered. I don’t know how much of its error messages are type errors but it sets the bar pretty high arseniiv: and these messages shouldn’t look like really unnecessary complications, they should rise from language’s notions organically, like INTERCAL’s politeness errors because there are too much or not enough `please` statements or something arseniiv: (though on the third hand, INTERCAL is pretty outdated in regards to cultural significance so how much up it sets the bar is not that relevant) arseniiv: (I mean, it was IIRC mostly a reaction to ALGOL and something like that?) b_jonas: arseniiv: if you make a language powerful enough at compile time, like haskell or C++, then people necessarily write programs that abuse that power and are too clever for their own good, and then you get error messages that are hard to understand despite all efforts of the compiler writers. arseniiv: b_jonas: yeah I know there can usually be only best-effort fixes, not a fix that would make all error messages immediately clear arseniiv: (hm though library writers may meddle with these matters in some cases, so no general compiler fix is needed yet their library would give more adequate error messages) b_jonas: and those are usually still better than the error messages you get at runtime segfaults after trashing memory by writing through out of bound indexes or stray pointers b_jonas: kspalaiologos: are you making sockpuppets on the wiki? b_jonas: ah no, I retract that b_jonas: it's not your sockpuppet b_jonas: it's just someone who also doesn't have much fantasy when it comes to esoteric language names kspalaiologos: http://prntscr.com/qr94hs kspalaiologos: stress testing the cpu in 2020 kspalaiologos: I wonder what would Fugue think about that Cale: `smlist HackEso: smlist: shachaf monqy elliott mnoqy Cale Cale: http://www.supermegacomics.com/index.php?i=507 myname: "SystemE: A lightweight systemd replacement written in Emacs Lisp" myname: does this qualify? arseniiv: Earth seems blue from far away but it has fire deep inside rain1: that's poetic and cool arseniiv: I hoped it would! arseniiv: thanks kspalaiologos: `? earth HackEso: Topologically speaking, the Earth has been a coffee mug ever since that hole to China was dug. kspalaiologos: ah, yes Taneb: Wouldn't, like, any tunnel or bridge or person standing with their legs apart change the Earth's Euler characteristic? fizzie: I don't know about bridges or people, maybe they're not really part of the Earth object. fizzie: But tunnels, sure. myname: well, but i suppose there is way more than one tunnel on earth arseniiv: a coffee mug which doesn’t hold coffee very well wib_jonas: If I want to make an alphabet of 64 ascii characters for base64 encoding such that the encoded string goes into the query part of a http url, what's the best alphabet for that? I'm thinking of !$'()*+,-./123456789:;=?@BCDGHJKLMNPQRSTVWXZ_bcdghjklmnpqrstvwxz because that adds a lot of punctuation that are valid in urls but formatting engines like wib_jonas: google mail or stack exchange or phpbb hate in urls and to the hell with those incorrect implementations, and removes vowels and "F" so it's harder for it to accidentally spell rude words. wib_jonas: Or is that not sufficiently esoteric? kmc: you're reminding me of the 'earth sandwich' silliness Taneb: arseniiv: what are you talking about? It's capable of holding all the coffee in the world! wib_jonas: Maybe I should make it likely to contain rude words, like put ".ad." and ".sex." in domain names, to catch those stupid badly configured proxies that filter pages with those in the name rain1: here is a fun fact from #math rain1: have you ever convinced yourself of this seemingly-wacko-but-neat fact? In any metric space, if x_1, x_2, x_3, ... -> x (convergence), then if p: N -> N is any permutation whatsoever, the rearranged sequence x_p(1), x_p(2), x_p(3), ... -> x also. arseniiv: Taneb: maybe not for long! wib_jonas: rain1: yes, that one is true arseniiv: this one is of the sort of strange things that happen in infinite-dimensional vector spaces too arseniiv: I don’t understand functional analysis because of those, I think kmc: wait, what's the definition of convergence rain1: forall eps, exists N, forall m,n >= N, |x_m - x_n| < eps kmc: yeah i guess it would be true kmc: assume this is true of the original sequence, then define N' = min(i where p(j) >= N forall j >= i) kmc: which must exist, because there are only a finite number of numbers less than N rain1: yeah nice way to do it kmc: thank you for the seemingly-wacko-but-neat fact kmc: I'm guessing there is some coffee in low earth orbit int-e: Ah it can be so much fun to spend hours on a one-off program so that it runs in a second rather than 5 minutes. :) kmc: although arguably that's 'held' by the earth just as much as the rest of the coffee wib_jonas: kmc: and some more in the solar system, next to Russell's teapot int-e: Do astronauts drink coffee... really, why not... rain1: i never got the hang of thursdays kmc: Thor's day int-e: rain1: good quote int-e: Had to look it up, it's "I never could get the hang of Thursdays." Taneb: I never could remember where I left my copy of that book int-e: . o O ( Get another? ) Taneb: I think it's it my parents' house kspalaiologos: new release of asm2bf kspalaiologos: with a data label preprocessor kspalaiologos: and a bugfix from november last year Rerednaw: Hi everyone! Rerednaw: Is there anybody here? Rerednaw: is there still nobody? Rerednaw: oh hi! Rerednaw: sorry for the delay int-e: `grwp delay HackEso: brexit:brexit is a command to forcefully exit, releasing 1GB of free space. This command was recently discovered to have a bug where it will repeatedly delay itself if not enough force is available. Rerednaw: do someone know a way to change a pseudonym? zzo38: I have tried a variant of the "Average" filter used in PNG. In my variant, the average is rounded toward 128 rather than toward 0, and the difference from the predicted value is stored differently. For predicted values less than 128 (p is the prediction and x is the actual value), use 2(p-x)-1 for x kernel -> driver -> kernel -> program), possibly more,... int-e: ...rather than 2 (program -> kernel -> program) now. Mach tracked too much information about processes and threads in the kernel (I forgot most of the details; one was that they actually had message queues, which at the time was a bad trade-off... things may have changed), so context switches were basically as expensive as on a macrokernel, but you had more of them. So in order to be... int-e: ...competetive, they started putting drivers into kernel mode, and that defeats the purpose.) kingoffrance: sounds like they had a grand idea, were forced to compromise, and dissolved into reality :) kingoffrance: which didnt live up to the idea :/ int-e: The Mach microkernel also isn't actually small. (Though I guess the really small microkernels of perhaps 16kb size only exist on embedded systems these days.) kingoffrance: when i used to read about hurd, part of reason it was slow moving seemed to be "upstream" kept dying :/ kingoffrance: so then they'd have to scramble "do we keep our own fork going?" or try to "rebase" everything kingoffrance: and that explains why mach stuff died i suppose int-e: As I recall it, the original L4 microkernel for x86 was 8kb in size and made a point of having all common code paths fit into a single 4kb page, and the thread information in one or two cache lines. kingoffrance: work on it i mean kingoffrance: that makes total sense int-e: But it was written in assembly language, and the author died fairly young; all the L4 clones I know of are written mostly in C and C++. int-e: Uh, 48 actually. I though he was younger. int-e: https://en.wikipedia.org/wiki/Jochen_Liedtke <-- seems he's relevant enough for Wikipedia int-e: Which I find entirely reasonable. But Wikipedia isn't excactly known for being reasonable. :) kingoffrance: last i read IIRC some hurd movement was hoping to phase out any mach remnants kingoffrance: but perhaps hard to tell "one guy working alone sporadically thought he'd try that" versus "project is moving in that direction" int-e: I lost interest in Hurd before they ever made a release. kingoffrance: since they are arguably sometimes indistinguishable kingoffrance: the release (debian i think) the installer borked on me, fs-related i think, so i lost interest at that point; or i didnt find sufficient instructions to do it properly kingoffrance: s/debian/debian-based/ kingoffrance: so when they get another release/installer i may browse again in a vm kingoffrance: i think they had some security issues, with a plan of ways to avoid, but hadnt been implemented yet IIRC kingoffrance: so there was a "plan" (maybe just one guy) hoping to correct some design flaws int-e: One of the deterrents is that the Linux kernel is amazingly reliable. I don't know what problem Hurd is solving (other than having a "true" GNU operating system, which I don't care about all that much.) int-e: And I do see the irony in putting that statement on #esoteric. kingoffrance: well, one can argue they tried to graft userland onto various kernels, and might have been better off starting from scratch than trying "shortcuts" :/ i dunno int-e: (The difference between Hurd and most #esoteric stuff is that the latter can usually be understood in a few minutes to hours, and often brings with it an intellectual challenge, which does alleviate an eternal problem... boredom.) kingoffrance: and that they werent "pure" enough, but gave in to temptation of quicker bootstrap kingoffrance: and now that upstream dies, they have to try to "ungraft" from upstream and pick a new kernel to foist onto kingoffrance: but with manpower they might argue that was/is the only sensical choice kingoffrance: despite having to "backtrack" now perhaps kingoffrance: i just like to build cross-compilers; i will revisit them someday i guess kingoffrance: last i checked, i dont recall they had a 64-bit thing yet either; which doesnt phase me, but for attracting new users/devs probably discourages things kingoffrance: and all the rust/etc. cant be helpful for existing code base either i imagine kingoffrance: (no pun intended, meant the "new" languages) kingoffrance: lots of the 'interest' of potential devs seems to be elsewhere kingoffrance: i think i see what you mean now re: mach int-e and my comment on "innards" and "even if philosophy is defined as tech the other tech sits on top of" :/ kingoffrance: without those "innards" the rest of "microkernel" idea falls apart kingoffrance: that was the last i heard of hurd: https://www.youtube.com/watch?v=RcRlhsEezGY trying to find a new kernel statue to graft userland onto so that they might crash through the wall of death zzo38: I have a book about holographic universe that I received recently. There is no mention of black holes, but it does mention quantum entanglement, wave/particle duality, David Bohm, placebo effects, near death experience, psychic powers, retropsychokinesis, time travel, holophonic sound, miracles, and some other stuff. zzo38: Unfortunately, they don't include any mathematics, and don't have many scientific terms, so that makes some of these thing difficult to know what it is or what exactly is being proposed here. They do have some medical terms I had to look up in the dictionary, though. zzo38: It is unclear what these things are, since some studies (including those mentioned in the book) have different and inconclusive results, and some have never been scientifically tested, although some of them have been tested, with varying results. zzo38: They also do not mention quantum gravity. It seem to me that gravity is different from other forces and you should need to figure out how to make the theories to work together, whether involving holograms or involving something else. zzo38: (I have my own ideas about quantum entanglement too, but which do not involve holograms.) zzo38: I have also read elsewhere that someone said that nobody really understands quantum physics. Having so many of these different ideas, many of which do not match, I suppose it may be true. kmc: Richard Feynman said that anyone who claims to understand it obviously doesn't kmc: but perhaps some people who don't think they understand it actually do?? kmc: I think it's possible to understand "quantum mechanics" as in the basic postulates regarding time evolution of systems described by wave functions and so forth kmc: but then when you start adding all this weird shit to actually describe our physical world in that mathematical framework kmc: then it gets really tricky kmc: zzo38: what's retropsychokinesis? sounds pretty esoteric int-e: Quantum physics is the closest I've seen to there being a god, with a great sense of humor. ;-) (The idea being that humans come up with some wacky formulas, and then the universe is adapted to behave according to those formulas, just because it's funny.) int-e: (I think Douglas Adams had similar ideas.) zzo38: Retropsychokinesis is when something is affected in the past, such as if you make a recording of quantum random number generation and then play back later to someone to tries to use psychic powers to make one number appear more often than the others. (Although another article I read says that this does not actually affect the probabilities of the numbers at all, but nevertheless does have an effect on the data.) int-e: (There's a speech in "Life, the Universe, and Everything" where somebody explains that if the universe is known (both the ultimate question and the ultimate answer), then it's instantly replaced by something even more bizarre.) zzo38: But probably you are correct that the basic postulates regarding time evolution of systems described by wave functions and so forth can be understandable but the other stuff is more difficult to understand. kmc: I do feel sometimes like physics just gets more complicated the closer we look kmc: like god is fucking with us kmc: for some reason i'm reminded obliquely of https://qualiacomputing.com/2018/10/15/estimated-cost-of-the-dmt-machine-elves-prime-factorization-experiment/ kingoffrance: that actually makes a lot of sense int-e, certain beliefs are there are certain people always "one step ahead" everything is seasonal, etc. :) kingoffrance: once everyone reaches one "level" then they move on, theoretically trying to entice/program/manipulate/enlighten/elevate people to the next kingoffrance: so it is kind of a "people are always trapped in some era of evolution" thing kingoffrance: (except for them, always one step ahead) kingoffrance: (and they are needed to "bridge" the worlds and translate things to our "understanding") kingoffrance: (and totally not trying to manipulate everyone) kingoffrance: (that might be sarcasm) kingoffrance: so once "everyone" understand whatever they were supposed to learn in one "era" then they move onto the next round of programming people kingoffrance: so thats very similar, just they dont consider themselves part of the "everyone" group kingoffrance: and "understand the universe" is a "humanity collectively" thing kmc: the universe is driven to understand itself kmc: humans are just one manifestation of this desire kmc: we spontaneously generated out of hydrogen gas kmc: i never met any of these salvia or DMT "entities" kmc: not sure whether it's a good idea or a bad idea to go looking for them kingoffrance: well, i think they just write books/etc. and strategically place them for people to find and if you read books from the wrong era, they probably dont like that, i.e. they would presumably want to destroy programming of prior "eras" kingoffrance: aka and/or you have to be programmed to see the "entities" kingoffrance: (or program yourself) kingoffrance: thus, it seems a "real to them" IMO kingoffrance: (and they say other things dont apply to them, because they are not part of the mass of whatever era) kingoffrance: aka i think it is not uncommon they claim only similar and/or competing entities can see the other entities kingoffrance: i guess i only interpret such thing 100% symbolically kingoffrance: and people familiar with symbolism might "make them come true/real" kingoffrance: im interested in character sets for programming, so symbols i always try to find "meanings" of kingoffrance: is why i read such things kingoffrance: lots of things i think are the "27 conspiracy" which IIRC was "people thought 27 meant something, so then they started seeing it everywhere" kingoffrance: i dont know a "cure" for that except "familiarize yourself with more conspiracies" and process of elimination kingoffrance: i might be too negative IMO "why do people start clubs/religions/cults/whatever?" because they want to take out/replace other ones zzo38: I think that does not seem to be the only reason to start clubs/religions/cults/whatever, although sometimes it is. kmc: weird al puts 27 in a lot of his songs kmc: I usually think of 23 as a more significant number kmc: because of discordianism kmc: I have a book about how the world will end in 2012 kmc: i bought it for a laugh kmc: several years after 2012 int-e: . o O ( 2nd edition, including a new chapter on why the world is ending so slowly ) int-e: I'm reading a random scifi thing where the world does end in 2012, published in 2012. Everybody is dead. Well, almost everybody, because otherwise there wouldn't be a story. I'll probably regret reading it the moment I finish. :) int-e: Anyway it did mention the Mayan calendar. Is there any other reason why the world ended in 2012? kmc: i'm not sure kmc: i think people came up with all kinds of questionable reasons int-e: too bad they were wrong imode: the world did end, the rest of us didn't get the memo though. kmc: the world only just started last Tuesday kmc: everything you remember before that is a false memory implanted in you at creation int-e: Meh, it should've been Thursday. imode: they did a shit job at making it believable then. int-e: kmc: Time (and its progression) is one of the more mind-boggling conspiracies around. int-e: `? time HackEso: time? ¯\(°​_o)/¯ int-e: `learn Time is an illusion. Lunchtime doubly so. HackEso: Learned 'time': Time is an illusion. Lunchtime doubly so. int-e: . o O ( Can't have enough Douglas Adams quotes. ) kingoffrance: there are lots symbolic reasons for ~2000 (perhaps based on mayan too, however indirectly/imprecisely or even "unintentionally") but yeah "the world" of such things i only interpret as symbolic "end of an era" kingoffrance: didnt stop my nick from going back to a previous era :) kingoffrance: at best IMO "when the symbology changes, then there are literal effects" kingoffrance: but any "the literal world is ending" doesnt make any sense to me kingoffrance: because if any of that is true, then it would be "transformed for a new era" IMO kingoffrance: so it would only "end" for people who want to stay in the prior era kingoffrance: and since it was all based on "symbiology" they can just cling to their symbols IMO kingoffrance: i.e. they dont have to go along with the "new definitions" kingoffrance: my nick hasnt been struck by lightning :/ just crash through the "death wall" like indiana jones (ropes/knots == trinity i believe, symbology all over that clip i linked) kingoffrance: if indiana jones can escape the millenial pyramid, clearly there are ways out kingoffrance: someone made that movie :) kingoffrance: indiana jones escaped "1000 years" of the millenium, thats good enough for me :) int-e: I don't think I follow. I'm sure I don't want to follow either. zzo38: I found a PostScript program which makes a second version of a Discordian deck, and it includes a subroutine for writing Mayan numbers. imode: crazy is in full force, i see. int-e: fungot should chime in fungot: int-e: which was very annoying problem which causes inability to access ash without a crash ( and thus often spelled) " chitlins". kingoffrance: thats why i stay away from "advent of code" :/ too millenial for me :/ kingoffrance: same reason i dont trust unicode; i dont trust anyone trying to "merge" everything imode: tell us how you really feel. zzo38: I don't like Unicode either; I think it is a mess. One character set isn't going to be good for all purposes. kingoffrance: snakes == forked tongue, alchemical merging, hermes/prometheus/etc. :/ thus is unicode to me :/ zzo38: I do not quite understand your point kingoffrance: i dont accept their new definitions of "charset" i stick with the prior one :) kingoffrance: IMO they had to redefine things to match the new system kingoffrance: so "speaking out of both sides of their mouth" IMO kingoffrance: ive had to many debates with ppl, i will spare you the details, but left me unconvinced they are doing anything but playing word games imode: if you have a competing standard, and you think it's objectively better, then post it and advocate for its adoption. kingoffrance: i dont, i just am experimenting; that is the whole problem: i have different goals kingoffrance: theirs seems to be "there is no plaintext, only encodings" kingoffrance: to me, that is up to each os/cpu/whatever to decide what is the "native encoding" == plaintext (in that realm) kingoffrance: my "plaintext" == native tongue of whatever speaker/reader/listener kingoffrance: so we are oppositely focussed, coming from different directions imode: that's nice. the rest of us have to share information. imode: between systems. imode: and, there is no "plaintext": you're still interpreting numbers as glyphs or partial glyphs. kingoffrance: yes and no; charsets dont necessarily mean "glyphs" IMO; headless servers exist, for example kingoffrance: they can still process such data without displaying anywhere imode: a glyph does not have to be displayed to mean something in an encoding. zzo38: I think that one character set isn't going to be good for all purposes, so I do not have a competing standard, although I do have some which are specific to some purposes, and are not meant for all purposes. kingoffrance: exactly ^^^^^ kingoffrance: its no different IMO than countries have some "native" language or not, or a set of languages they e.g. print laws in imode: unicode isn't the best. better than what we have. imode: s/have/have had kingoffrance: if in "real world' i ever had to do i18n stuff, i may feel different :) imode: a set of mutually incompatible encodings. kingoffrance: but for "hobby" stuff, it makes little sense to me imode: yeah if you're not doing anything serious, why bother trying. kingoffrance: well i just want my metaphorical france, not the metaphorical world :) kingoffrance: what does it profit a character set to gain the world and lose themself? kingoffrance: if anyone someday wants to "translate" my stuff, they will have ample means, i am not locking such out imode: crazy is in full force. int-e: `? esoteric HackEso: This channel is about programming -- for the other kind of esoterica, try #esoteric on EFnet or DALnet. imode: how would Thue's usability change if you added "nonlocal" matches? i.e for each rule, you have multiple substrings on the left and right, and only when all substrings on the left are present, they're replaced with the corresponding substrings on the right. imode: "foo:bar, baz:quux;" for example. the replacements only happen when both `foo` and `baz` are present in the input string. imode: but if they are, then `foo` gets replaced with `bar`, and `baz` gets replaced with `quux`. kingoffrance: im sure unicode is great for multinational enterprises, i dont think it scales to individuals kingoffrance: if it doesnt solve any problem i have, im sorry that makes me "crazy" kingoffrance: i am "crazy" to expect real solutions to real problems imode: boy howdy, you sure proved me wrong, with all those multinational enterprises not solving real problems and such. imode: everybody's playing games except for you, I'm sure. kingoffrance: they solve enterprise problems, i can focus on individuals, boy howdy imode: you mean the individuals you don't interact with. imode: because of incompatible encodings. kingoffrance: your just trolling imode: if the shoe fits. kingoffrance: well, either people exist to serve multinationals or multinationals exist to serve people; i am in the latter camp imode: what the fuck does that have to do with an encoding standard. imode: are you a conspiracy theorist. or have some kind of paranoid delusion at the intent of unicode. imode: like why is this the hill you die on. zzo38: I do not expect that has anything to do with the encoding, although I do think that Unicode is too messy. kingoffrance: its not my job to come up with standards for your business enterprises imode kingoffrance: thats not a "problem" i have imode: figuring out what you're talking about has now become unfun. Rerednaw: Hi everyone! Rerednaw: Do someone know where to go if we want to change a pseudo on the wiki? fizzie: Does that mean changing a username, or something completely different? Rerednaw: Yeah, changing the username Rerednaw: I would like to revive one of my old creations zzo38: You should still be able to edit the old files regardless of the username, though. Rerednaw: Yeah i know Rerednaw: But my username is linked to a past which i'm no longer proud of Rerednaw: So I try to do that at the same time kmc: 16:00 < kingoffrance> if it doesnt solve any problem i have, im sorry that makes me "crazy" kmc: i mean if you only read/write english kmc: and without any fancy punctuation or math characters or anything kmc: then ASCII is fine kmc: many people in the world — most in fact — have a daily need to use characters that aren't in ASCII kmc: i don't think you can blame multinational corporations for the fact that not everyone speaks english kmc: i'm sure they'd rather that were the case :P fizzie: Rerednaw: Is that a past on the wiki, or past somewhere else? Because changing the username with the Renameuser extension will also update page histories and everything. kmc: and yes Unicode has a lot of complexity, and some of it is due to unfortunate historical reasons fizzie: Rerednaw: I guess, what I'm trying to ask is, what specifically would you be wanting to do regarding usernames on the wiki. kmc: but a lot of it is due to the fact that Unicode wants to be truly universal kmc: which means one system that solves (as close as possible) *everyone's* problems kmc: and that is valuable because kmc: we want to read documents written by others kmc: it's very convenient for the world to standardize on one way of representing text zzo38: The key to failure is trying to please everyone. kmc: even if that one way is necessarily pretty complicated Rerednaw: My old pseudo (BoutonIA) is linked to other activities I've done on Internet kmc: it's certainly a lot better than the old way Rerednaw: So I wold like to change the whole pseudo Rerednaw: Sorry was disconnected fizzie: Rerednaw: In that case, I guess Renameuser is right for you. But it's restricted to wiki admins, and I may not even have enabled it. Could you leave a comment on, say, https://esolangs.org/wiki/User_talk:Fizzie using that existing account stating what you want it to be renamed to, just to prove that you have control over it? fizzie: Or using the "Email this user" function from the wiki if you don't want it public, I think that also shows which user sent the message. Rerednaw: Okay I'll do it, thanks for the help! fizzie: Rerednaw: I'll give it a go. It may or may not cause you to log out. (MediaWiki is a mystery.) Rerednaw: I verified, it works perfectly! Rerednaw: Thanks again for all the help fizzie: It doesn't update links, so you may want to edit those on CopyPasta Language and BSoD. Rerednaw: Ok, i'll do it! kingoffrance: i didnt mean to be rude, but i dont think i am wrong to imply at least utf8 was commercially-inspired https://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt https://en.wikipedia.org/wiki/X/Open look at the list of organizations: all giants, not exactly "hobbyist" target audience kingoffrance: and the unix trademark thing :/ not something i am shooting for kingoffrance: i dont think i am stretching to assume they designed something to fit their needs, not mine kingoffrance: and how many of these unix vendors are gone, or "irrelevant" to most people in the "unix" space kingoffrance: how many non-commercial orgs do you see on those pages? kmc: kingoffrance: i'm very curious to hear about how you made your own computer without using anything produced by a corporation int-e: @tell imode Re: usability of Tue with nonlocal matches -- you could conveniently implement multi-tape TMs then, which I believe is quite a boost in convenience. lambdabot: Consider it noted. int-e: @tell imode I mean Thue of course. lambdabot: Consider it noted. int-e: `? kingoffrance HackEso: kingoffrance ? ¯\(°​_o)/¯ kmc: anyway it's great for you if you don't have to solve any of the complicated problems that unicode solves kmc: i'm sincerely happy for you int-e: `learn Kingoffrance is what happens when you cross zzo38 with a conspiracy theorist. HackEso: Learned 'kingoffrance': Kingoffrance is what happens when you cross zzo38 with a conspiracy theorist. int-e: (Or is that too unfair to zzo38...) kmc: it seems kind of like complaining that pet stores exist because you don't own a dog so you have no use for them kmc: but okay int-e: kingoffrance: 1) You don't matter. 2) Yes, big corporations are not out to solve your problems. 3) Citing UTF-8 as an example for that is ridiculous. 4) No I don't want to discuss any of this. kmc: but fair zzo38: int-e: It doesn't matter if it is unfair to me or not, I think. int-e: zzo38: Well I'm usually aiming for a tease, not for an outright offense... so if I've crossed that line the entry should be deleted. zzo38: Well, I like freedom of speech, so I think that it is OK how it is. kingoffrance: int-e : sure, re: 2) but i was noting the hypocrisy of somehow i am supposed to solve theirs :/ for free :/ just cuz :/ kingoffrance: which i consider "trolling" kmc: there are plenty of reasons to be upset at big corporations; UTF-8 is not one of them kmc: especially since you haven't given a single specific thing you dislike about it imode: ASCII was created by big private organizations. imode: int-e: figured as much. suddenly orchestrating things with multiple cursors becomes so much easier. kingoffrance: i am, however, quite flattered that people think i simultaneously dont matter and should write a competing standard for commercial orgs to follow; it makes me feel very quantum kingoffrance: that, is how i really feel imode: I don't think you should write a competing standard. I think you should think before you speak about the suitability of a standard to your limited prospects. zzo38: How to do disk image swapping in DOSBOX? imode: on the "you don't matter", yeah, you don't. none of us here have any influence over standards adoption. imode: zzo38: I believe CTRL+F4? imode: see https://www.dosbox.com/wiki/IMGMOUNT zzo38: It says using multiple files is only supported for cue/iso images, but I am trying to mount a floppy disk image imode: looks like you can do something with the `boot` command, but yeah, it's not supported in the main builds of DOSBox.. imode: weird. zzo38: I will try to just copy the files from the disk images all into one directory and see if that works. int-e: imode: could it have something to do with CD-ROMs being read-only... imode: more than likely, yeah. partial writes are a bitch. zzo38: Unfortunately, that didn't work. It requires either the original disk or a copy onto the same type of disk; it won't work if the installation files are in the hard drive, even if SUBST is used. int-e: When was the last time you've heard the term "webcast"? imode: 12 years ago. kingoffrance: its like a steve jobs thing (person a) im not sure one-size-fits all (person b) come up with a new one-size-fits-all standard then (person a) that's not what i said (person b) i'm sorry, did i act like you matter? i meant to say you don't matter kingoffrance: the ghost of steve jobs kingoffrance: or so i've heard kingoffrance: the only thing i can say is commercial stuff is "the other type of esoteric" by its very nature, that type of law always has been thus, and i dont wish to infect my work with their timeframes as much as possible; if they somehow changed their definition of "time" maybe we would have more common ground kingoffrance: my dillema is i come from a land before open source and free software were "fused"; so i get along fine with 1) people not wanting to fuse with gpl (bsd) 2) gpl people (who arent zealots) i only have problems with commercial people trying to "fuse" into my non-commercialness, which always fails :/ kingoffrance: or i come from a "freenode" before thus took place kingoffrance: i think that is the root of all my disagreements with people rain1: hello kingoffrance kingoffrance: greetings zzo38: Either way (GPL or BSD) it is still free software and open source software. However, I just dislike copyright in general, so I release everything to public domain rain1: hey zzo38 kingoffrance: yeah, thats what i think i will do kmc: or you can do CC0, which is like public domain but with a bunch of extra words to make it like public domain even in places where "public domain" isn't a thing zzo38: Another variant I have seen is rain1: have yo thought about quantum computing zzo38: Another variant I have seen is dual licensing by MIT license and CC0. I have also seen MIT license with an extra clause saying any Discordian pope may grant themself a license to use WTFPL. kmc: that one is just designed to annoy lawyers while putting hackers at ease kmc: i like it kingoffrance: i dont think people realize the genuis of such; its like parody of a parody of a parody in a sense; i cant explain here, but ...they did their homework kingoffrance: i consider such genius feats of "practical reverse engineering" j4cbo: sqlite does something similar j4cbo: https://www.hwaci.com/cgi-bin/license-step1 imode: the technique is known as taking the piss. imode: I wonder how fast you can make Thue. wonder if you can make it compete with C. imode: like, what's the theoretical limit here that doesn't involve bringing in multiprocessing. imode: you're not gonna outshoot something that compiles down to machine code, but you could probably hit a sweet spot like Forths do. zzo38: Can you convert a JPEG file into another format and then reencode it as JPEG with the same settings without making it more lossy if the picture hasn't changed and the original JPEG file is lost? imode: that's a question that should be answered by attempting it tbh. I wanna say no. imode: JPEG is lossy, and if you do something like JPEG <-> PNG <-> JPEG, it's a form of generational noise. imode: https://en.wikipedia.org/wiki/Generation_loss zzo38: But shouldn't there be some way of making an encoder that supports doing it without further loss (as long as the colour space and quantization tables match the original)? imode: so you're saying if you have a JPEG, you convert it to a PNG, you want to transcode that back into a JPEG without any loss of data? zzo38: imode: Yes; assume that I know what colour space and quantization tables were used in the original JPEG file (since they may need to match in order to allow it to be reencoded without any further loss) imode: then.. probably? zzo38: Yes, but how exactly to do such a thing? kingoffrance: long ago, in a galaxy far away, one of the selling points of free sofware and open source etc. was developers would gravitate towards projects they want to work on and/or scratch their own itches, this seems to have disappeared kingoffrance: replaced by "management" imode: right, because people don't do that anymore. imode: we all just program because managers tell us to. zzo38: Actually, people still do write programs they want to write, in their own time (when you are not at work). imode: I realize that my messages are missing an /s. zzo38: I think your message is spelled correctly (as far as I can tell). imode: people commonly annotate their messages with '/s' to indicate that the contents are sarcastic. imode: because text doesn't convey sarcasm. kingoffrance: i just mean it used to be a good thing to scratch your own itches kingoffrance: you didnt get a million "why arent you doing it MYYYYYY way" kingoffrance: MEEEEE kingoffrance: "you dont matter" kingoffrance: wasnt a thing! kingoffrance: those are the "managers" zzo38: People still write their own programs though (even if some people don't like it, then they can use different software), but some protocols/formats are made too complicated/messy. kingoffrance: thats the problem with telling people "you dont matter" ultimately they wipe themselves and everyone else out, since noone ultimately matters kingoffrance: its a disguised nihilism masquerading as benevolence IMO imode: if you spent half the time thinking about what you say before saying it, maybe you would've realized that that's still the case. imode: what're some projects you've worked on? what have you contributed to the FOSS ecosystem? imode: you seem so personally invested in it. imode: not that one shouldn't have personal investment, that's what FOSS is built off of. imode: just that there seems to be something pissing you off to the point of yelling at clouds. zzo38: kingoffrance: But nihilism is not necessarily malevolent. kingoffrance: "you don't matter" is a new type of "FUD" i guess :/ imode: onto ignore you go. int-e: I wonder how fast you can make Thue. <-- I'm afraid that's in "sufficiently smart compiler" territory; if you manage to unravel enough of the encodings you can be arbitrarily fast, but you'll be solving instances of undecidable problems at all times. imode: int-e: not sure I follow, can you explain further? int-e: Of course there's a lot you can do to make the rewriting engine faster... indexing (hashing) substrings, or, probably more fruitfully, analysing how right-hand sides overlap with left-hand sides to track redex creation, a good data structure for the strings themselves... but competing with C will be a huge stretch. int-e: imode: Imagine somebody has a C to Thue compiler. The resulting program(s) can be made as fast as the C program in principle... imode: how would that even work?.. int-e: ...by reversing the compiler's operation. imode: A C to Thue compiler would be trying to simulate things like variables, registers, etc.. mm. imode: thue to C would be guessing the things that the rules encode. int-e: Yes. Clearly this is hopeless without knowing what the compiler does, and likely still very hard if you have the compiler available. imode: making the rewriting engine faster seems to be a reasonable prospect. int-e: imode: Yeah I replied to the wrong part of your message really. My doubts are really connected to competing with C. imode: same. it'll have to remain interpreted, because there's nothing to "compile" to C: you'll end up with a rewrite engine that has hardcoded rules instead of ones loaded from a file. imode: unless you can guess the semantics of the rules and "derive" the thing they're designed to implement, like a multi-tape TM + states. imode: at that point you haven't "compiled Thue to C", you've taken an encoding of something in Thue and provided the equivalent encoding in C. arbitrary rules aren't possible. int-e: fungot: will it finish? fungot: int-e: but i need to rest, i'm all ears. i don't have anything else to do it arseniiv: hm, a thought on models of programming vs. models of computation: could one say that quines are meaningful for the first and meaningless for the second? arseniiv: e. g. take a Minsky machine. To write a quine machine, we first need to conjure an encoding of machines, so the machine itself can’t be thought of as quining or not quining, it depends on an encoding arseniiv: and that is the distinction between this model and that model IIRC b_jonas: [ 6!12\ j-bot: b_jonas: |domain error j-bot: b_jonas: | 6! 12\ b_jonas: [ 6!12 j-bot: b_jonas: 924 b_jonas: I think we can remove the IOCCC news from the channel topic now int-e: fungot: When will I learn to add checkpointing to my long-running programs? fungot: int-e: you are eaten by a grue") in scheme?' there fnord, too fizzie: fungot: You're long-running, right? Do you have checkpoints? fungot: fizzie: at least, there are five processes excluding the main one fizzie: Huh, sounds like it's a more complicated system than I thought. fizzie: fungot: Have you been refactoring yourself again? I'm pretty sure there was just one process when I wrote it. fungot: fizzie: picocpu. xd b_jonas: fizzie: he's stateless so he doesn't need them. he can just restart from a fresh random seed instead of continuing the same one from a checkpoint. kingoffrance: you can permaban me from this channel. to answer imode "what is pissing me off" if someone'd like to relay, its not the software, its the business people/incorporations/banks/schools/churches have adoped a "state religion" i dont subscribe to; i try to avoid contracting with treasonous psycopathic luciferians http://www.iapsop.com/archive/materials/wing_lessons/hjg/1951__frater_viii___the_seals_were_broken.pdf https://archive.org/ kingoffrance: details/fundamentallaws00ordegoog in millenial "america/england" thats near impossible, they consider it 'destiny' and "freedom of religion" a joke; if you know your roman civil law, this is every incorporation's new "religion"; i draw a line at companies brainwashing employees and treason; adios imode: that guy was quite the nut. int-e: `forget kingoffrance HackEso: Forget what? Taneb: IOCCC 27 is open b_jonas: yes, the webpage claims so b_jonas: `? ioccc HackEso: The IOCCC is the Industrial Ordovician COBOL Conference Circuit. Not to be confused with OIC. See also ioccclist. myname: personman arseniiv: > let z (x:xs) = x : z ([0..x-1] ++ xs) in z [0..] lambdabot: [0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1... arseniiv: I think this variant wasn’t mentioned yet? wib_jonas: I dunno, we listed implementations for those like weeks ago wib_jonas: let me search... wib_jonas: https://esolangs.org/logs/2019-11-24.html#lVl arseniiv: wib_jonas: yeah I even initiated that one :D arseniiv: I think this version is not obviously isomorphic to those ones arseniiv: I’ll try to reformulate this so it’d use the complement of the list so we hopefully wouldn’t need (++) arseniiv: hm, wait ([0..a] ++ constant) is perfectly nice int-e: https://jacquesmattheij.com/warpdeck/WarpDeck-14.png . o O ( What exactly happens after year 2? ) int-e: From https://jacquesmattheij.com/anatomy-of-a-scam/ int-e: https://jacquesmattheij.com/warpdeck/WarpDeck-20.png is also ridiculous. It is a forecast. It goes down at some points, with *no* explanation why. int-e: (It's not even the same month each time. So not a seasonal effect.) int-e: But at least the revenues are exactly proportional to the number of posts. https://jacquesmattheij.com/warpdeck/WarpDeck-21.png arseniiv: inverted version, finally, and oh so long (dtb = dropTillBreak): arseniiv: > let { dtb x (y:xs) | x == y = dtb (x+1) xs ; dtb x xs = (x, x:xs) ; z xs = (let (x, xs') = dtb 0 xs in x : z xs') } in z [] lambdabot: [0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1... int-e: hmm that looks too complicated. int-e: But I do like the previous version... reminds me of binary counting in brainfuck. arseniiv: > let { d x (y:xs) | x == y = d (x+1) xs ; d x xs = x : d 0 (x:xs) } in take 50 $ d 0 [] lambdabot: [0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1... arseniiv: int-e: yes, I like the “positive” version more too arseniiv: more so that (++) behaves good there int-e: `bf8 +++++++++[[>+>+<<-]++++++[>++++++++<-]>->-]<. HackEso: bf8? No such file or directory int-e: `bf +++++++++[[>+>+<<-]++++++[>++++++++<-]>->-]<. int-e: `bf +++++++++[[>+>+<<-]++++++[>++++++++<-]>->-]<[.>+>>[->>]<<[<<]<] HackEso: 01020103010201040102010301020105010201030102010401020103010201060102010301020104010201030102010501020103010201040102010301020107010201030102010401020103010201050102010301020104010201030102010601020103010201040102010301020105010201030102010401020103010201080102010301020104010201030102010501020103010201040102010301020106010201030102010401020103010201050102010301020104010201030102010701020103010201040102010301020105010201030102010401020103010201 Soni: a sufficiently advanced DAW is indistinguishable from a sufficiently advanced Lisp IDE Soni: lisp has "streams" (lists), internal and external routing (parameters/arguments, I/O), notes and samples (constants). they're basically equivalent! wib_jonas: fungot, do you grow grapes or make wine? fungot: wib_jonas: fish sticks, cheez whiz, gin fizz, show biz!! bork bork bork! wib_jonas: fungot: you are a cheesemaker and fisherman then? fungot: wib_jonas: i thought lisp was interesting. :) ok, i'm just tired of typing all that crap waste area jumping harder arseniiv: int-e: do you know yawns are contagious? *yawn* arseniiv: I don’t remember what’s known about other people yawning because of just reading about someone yawning but I think I do :D arseniiv: not always of course b_jonas: my hon. and learned friend fungot, is it true that you're the actor playing the parliament in the Brexit movie? fungot: b_jonas: arrow keys aren't recognized by " real compiler" ( real in the sense that other people use? camino? wib_jonas: fungot: do you happen to know any good movie plot exploits or legal loopholes that you can only perform right across the brexit time? fungot: wib_jonas: how should that work? wib_jonas: fungot: dunno, that's why I'm asking you fungot: wib_jonas: the basic idea is that, in your drawing code, and see if he writes any libraries so trivial that he would find it an interesting bonus if they could only come from the command line kspalaiologos: he's back kspalaiologos: isn't he int-e: fungot: Who's he? fungot: int-e: what a wonderfully explanatory, in-depth response!! kmc: hi fungot fungot: kmc: in my mind. available memory is limited to the speed of call/ cc is really a dos/ windows kmc: fungot: do you have any advice on integrating psychedelic experiences? fungot: kmc: only if your constitution and appetite for eldritch horror is well above average.' this refers to my pseudofilesystem. kmc: fungot: you know it is fungot: kmc: sicp's picture language is another example from the docs, actuallly say that??? i want to ask zzo38: From my testing it seems that using separations with the display device in Ghostscript is usable only with eight bits per channel, and only up to eight separations. zzo38: The API will also provide the equivalent CMYK for a separation. b_jonas: darn it, I inserted a battery with the wrong polarity int-e: Not much happened I guess. arseniiv had some Thue thoughts. We lost kingoffrance. What else... oerjan: seems like a good time to be away imode: int-e: arseniiv had Thue thoughts? imode: also I doubt kingoffrance will be missed. oerjan: you could say he ... lost his head Cale: http://www.supermegacomics.com/index.php?i=508 Cale: `smlist HackEso: smlist: shachaf monqy elliott mnoqy Cale kmc: seems you are the only person on that list who's still in this channel imode: oerjan: hehehe. Lykaina: i managed to program my arduino to function as a life counter for magic the gatering's edh format. tracks life and 5 sources of commander damage. Lykaina: couse, 6-player games are so rare... Lykaina: *course Lykaina: might as well switch label CMDR0 to POISN Lykaina: in case i fight someone with infect Lykaina: i have an lcd attached to it Lykaina: 84x48 pixels Lykaina: so 6 lines and 14 columns of text zzo38: There are other counters a player can have in addition to poison counters too, which you might want to keep track of, but I have just used paper to keep track of life totals and other stuff Lykaina: i'll modify the program in the morning zzo38: I mentioned that the Ghostscript display device supports only up to eight separations and only with eight bits per channel. I found that CMYK also only supports eight bits per channel; sixteen bits per channel is only compatible with RGB. Unfortunately, these things do not seem to be documented. zzo38: Do you like this? zzo38: An idea of a Magic: the Gathering card I wrote in a book is that a 1/1 creature has evolve and "{2}: ~ gets -1/-1 until end of turn". Frater_EST: What do you see as the use of it zz038, and what was its name? Art? Frater_EST: Surely you thought of those things a little. ;) int-e: The idea is to let it evolve further than it normally would, by weakening before the trigger is checked. int-e: (The trigger of the 'evolve' ability, that is.) zzo38: Frater_EST: I didn't think of the name (nor subtype or mana cost), just the idea so far. But int-e is correct. zzo38: I am getting a large number of connections on port 80 and 25 for some reason, although the actual number of requests and messages is low. Why is that? zzo38: Frater_EST: Did you make up a Magic: the Gathering card? Frater_EST: A few long ago, but no real substantive memories come up. Frater_EST: Funnily, I was just told about this program called X-Mage and was beginning to install it when I saw your message, zzo38: I heard of X-Mage, and by examining the source codes it look like it does not implement text editing effects; some other effects also are not implemented. Frater_EST: I dunno, a friend wants me to try it - so will do zzo38: What is your highest score in solitaire Scrabble? Hooloovo0: I don't think I've ever played it Hooloovo0: I guess I should give scrabble a shot - I haven't played it in a long time, and I've been playing a good amount of word games b_jonas: fungot: does the U.K. still exist? are the isles still in their formal location, or did they sprout huge rocket thrusters and get pushed farther from Europe during the night? fungot: b_jonas: 8-d when you get it? i mail you the code. :p anyway, the 0s have little dots in them. the nice thing. int-e: `learn The password of the month is leapfrogging rats. HackEso: Relearned 'password': The password of the month is leapfrogging rats. Hooloovo0: `learn The password of the month is leapratting frogs. HackEso: Relearned 'password': The password of the month is leapratting frogs. rain1: https://www.lmfdb.org/ zzo38: Do you know if any software for Apple II requires a printer even though it does not actually print out anything? zzo38: There is one mahjong game on Gameboy that if you enable red fives then all of the fives are red, rather than only one per suit. Lykaina: gonna revive my Echidna language for my arduino project on Monday, when i next have access to a printer Lykaina: gotta print out the documentation zzo38: Now there is the command in TeXnicard to make blended pictures with a gradient. oerjan: looking at today's SM, apparently pa'anuri are of highly variable size zzo38: I think I read somewhere of different sounds in a language are changed due to different effort of sounds. If it is a language with non-human physiology then will the effort be changed? zzo38: Is there a inverse error function in C? b_jonas: zzo38: https://dlmf.nist.gov/7 , in particular it asserts that the erf function is entire, so (since it's also not constant) it must have an inverse around most points b_jonas: see also the old Abramowitz-Stegun at http://www.convertit.com/Go/ConvertIt/Reference/AMS55.asp?Res=150&Page=295 b_jonas: English which are H for hot and C for cold. arseniiv: b_jonas: wow fizzie: At least that's unambiguous, assuming it's always one of those three and both are present. kmc: it's 20200202 zzo38: I read somewhere (maybe a joke) that they both "C" because one is English and other one is French. b_jonas: ``` date +"%Y%m%d" # let's check that HackEso: 20200202 zzo38: Does any web browser implement a ARIA view for display rather than voice? zzo38: Now I made up a new "TeXnicard image mask" file format, which stores a monochrome picture. The intention is to be used to store a transparency mask; and it seems to work good. It uses a combination of 2D RLE with Elias gamma. zzo38: (It doesn't work so well for pictures containing many small parts such as text, but it is not meant for that purpose anyways.) kmc: I'm trying to figure out if one of "farmers market", "farmer's market", or "farmers' market" is a more correct term kmc: I think all three work int-e: the last one is most correct to my mind int-e: The first one could be a place where you buy farmers, and the second one is oddly singular. kmc: I suppose a farmers market might be a place where you buy farmers int-e: In the real world I think the first one is what people will actually use. int-e: Of course the real world is also the place that gave us ...'R'us. int-e: It's terrible. Taneb: The Kieven 'R'us arseniiv: pity there’s no place for a spelling X’s’ arseniiv: when I first saw ’s in school days, I was somewhat confused. Maybe because there was no obvious unabbreviation. And I bet after seeing s’ I had to be yet more confused. Strangely enough, I hadn’t read about diachrony of these written forms and ’-abbreviations in general, I’ll go look b_jonas: fungot, have you caught the coronavirus yet? fungot: b_jonas: oohh fnord, just buy repair skill of achieving strange human relations? maybe we have some code already, lisppaste it.) b_jonas: fungot, has the U.K. left Europe yet, and if so, how far did it swim or fly? fungot: b_jonas: ( merely because it's turing complete arseniiv: > oohh fnord => I think these symptoms are suspicious lambdabot: :1:12: error: parse error on input ‘=>’ arseniiv: sorry sorry lambdabot, I forgot again int-e: @botsnack arseniiv: int-e: is lambdabot memorious (let’s pretend that’s a word) about their miscallings? arseniiv: (ah, that should’ve been “do lambdabot remember…”, now I remember the word. As always the culprit is the wrong initial syntax which then blocks search of the word in the intended places of the head somehow, I think) arseniiv: s/do/does/, of course int-e: lambdabot doesn't hold grudges, generally. int-e: I sometimes ask her to ignore select people and bots. int-e: Just bots, really. HackEso: ​? ¯\(°​_o)/¯ HackEso: 1/1:677) @more @more @more @more @more @more @more :( \ 867) what is this set? sounds like shakespear Yes, that's what people often say about Chrono Trigger. arseniiv: Just bots, really. => phew, that’s soothing arseniiv: oh let’s test something arseniiv: > [1.. lambdabot: :1:5: error: lambdabot: parse error (possibly incorrect indentation or mismatched brackets) arseniiv: > [1..] lambdabot: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,... lambdabot: Plugin `more' failed with: Prelude.init: empty list arseniiv: int-e: is it intended? int-e: probably not arseniiv: I thought it would give off something here, as opposed to in private int-e: > fix error lambdabot: "*Exception: *Exception: *Exception: *Exception: *Exception: *Exception: *Ex... lambdabot: Plugin `more' failed with: Prelude.init: empty list arseniiv: no more fixes available lambdabot: Maybe you meant: oeis list let leet arseniiv: lool :D int-e: @. leet more lambdabot: Plugin `compose' failed with: Prelude.init: empty list int-e: he heh int-e: @metar lowi lambdabot: LOWI 022320Z AUTO VRB01KT 3000 -RA BR FEW001 SCT012 BKN060 05/05 Q1016 arseniiv: do I understand that the buffer is here but it’s just already empty every time @more is called? int-e: Well, there is only one line of output, and @more is line-based. lambdabot: Plugin `more' failed with: Prelude.init: empty list lambdabot: Plugin `more' failed with: Prelude.init: empty list int-e: I suspect it's just a bug, not a deeper mystery. int-e: @where motivation lambdabot: I know nothing about motivation. arseniiv: that reminds me I should look at the code sometime later, it should look interesting. I’m curious but not that curious to remember to schedule it some time arseniiv: “@where where” is really neat oerjan: b_jonas: i knew about C = cold/chaud/caldo, but i didn't know hungarian completed the confusion... imode: 2020-02-02-20:20:02:02 is coming up. kmc: thanks for reminding me kmc: I'm in PST zzo38: I am also PST imode: up here in washington. Hooloovo0: shoot, I missed it zzo38: Due to my testing, TeXnicard image mask format seems to work better for its purpose than the other formats I have tried. Maybe it is useful outside of TeXnicard; I don't know. (It is called TeXnicard image mask format because the format was invented for TeXnicard, although it may be useful with other applications too.) zzo38: http://zzo38computer.org/fossil/texnicard.ui/artifact/24fb5fb375602b54 zzo38: Do you know of a similar format? imode: happy uber-palindrome day, west coast. zzo38: There is the timeline of programming languages in Wikipedia, but many of them they do not explain it much. HackEso: hand? No such file or directory Hooloovo0: `?hand HackEso: ​?hand? No such file or directory Hooloovo0: `? hand HackEso: A hand in the bush is better than a stoned bird. wib_jonas: so there's an O strip promised for later today. presumably in some American timezone. we'll keep watching. in the meantime, there's a news entry about the forum. rain1: can you recommend any books? Taneb: rain1: I read The Long Dark Teatime of the Soul recently Taneb: It was enjoyable rain1: thanks! Taneb: (second in the Dirk Gently series by Douglas Adams) Hooloovo0: moby dick is... an interesting book Hooloovo0: it's like he set out to write an encyclopedia but starts off with two men getting married kmc: rain1: what kind of book do you like rain1: i like sci fi and science. im reading judea pearl's book 'the book of why' right now rain1: what about yoU? kmc: various types of books kmc: people in this channel might enjoy the novel Recursion by Blake Crouch rain1: woah i just read that rain1: that's the first book i read this year rain1: i really liked it, did you like it? kmc: I thought it was great kmc: have you read anything by Nick Harkaway? kspalaiologos: I can recommend a book kspalaiologos: ANSI C Programming by Dennis Ritchie rain1: tNick Harkaway? no. I was thinking of reading some rudy rucker b_jonas: `olist 1190 HackEso: olist 1190: shachaf oerjan Sgeo FireFly boily nortti b_jonas rain1: might try Gnomon b_jonas: The Giant, author of the O strip, has caved in. he previously claimed that he doesn't want to accept donations, because he's already behind with the Kickstarter run (due to both overpromising and his hand injury), b_jonas: and doesn't want to accept money if he can't give any thing concrete in exchange, but can't promise new things either until he finishes the Kickstarter. So he said that if you want to support him, buy his books or the various merchandise. b_jonas: But now, he set up a Patreon for donations, with the pretty good excuse that it helps cover costs of the server for the forum, and b_jonas: simultaneously claims that there won't be extra content locked behind the Patreon and that he'll release higher resolution versions of new OotS strips to supporters. b_jonas: Perhaps those are both true if he releases those high resolution versions to the general public a week later. zzo38: Or maybe he mean they are the same OotS strips for everyone but supporters have a higher resolution. b_jonas: zzo38: it's definitely the same OotS strips for everyone b_jonas: what I don't know is just whether we'll be able to see the high res ones without supporting the Patreon account or buying the book, and when we'll be able to see them zzo38: I am reading the documentation for Information Processing Language, which apparently influenced Lisp. zzo38: C is mostly good (and many of the programming languages trying to replace C tend to do it worse, in my opinion, although LLVM has some good features, but it isn't perfect either), but some things are bad, such as the syntax for octal numbers, and the syntax for types. And some things are difficult such as self-modifying code, associating data with a function (LLVM can do this), the preprocessor isn't good enough, etc LKoen: the syntax for types, eh LKoen: am I declaring a variable B of type A, or multiplying two variables A and B? LKoen: it gets worse in c++ :) kmc: you just need to read it in a spiral! zzo38: I found a document where they compress pictures with a solid colour to compare the compression of different formats. PBM (either ASCII or binary, although they only consider the ASCII format) is O(n), and JPEG and lossy WebP also seems to be O(n) (but with a better constant factor). GIF works better than those formats, but has two "bumps"; the author of the document doesn't know why, but my guess is LZW resetting. zzo38: GIF and the others are still monotonic though. (Also, I think GIF does not actually require LZW resetting, and can continue using the maximum code, although the encoder presumably resets it anyways.) PNG, BPG, and lossless WebP all compress better than that, but are non-monotonic (for PNG, this is probably due to the filter bytes; for BPG, I don't know why). FLIF is best; it is O(1) and always fifteen bytes long. zzo38: TeXnicard image mask format is O(log n) in the case of a solid colour, although still it is usually smaller than FLIF except for very huge pictures. Farbfeld compressed with bzip2 (which they have not considered, but I have) seems to work better in this case than WebP, but worse than FLIF. zzo38: LKoen: That isn't the only problem with the syntax for types; also combined types are confusing. LKoen: how so? zzo38: For example, if you want a function that returns a pointer to an array of function pointers, or something else complicated, then syntax can get mixed up if you do not use typedef. oerjan: this latest oots comic makes me worry that at some point mr. scruffy will leap at the snarl, thinking it's a yarn oerjan: it might be a foreshadowing zzo38: I read that Windows 10 will sometimes reboot the computer due to update even if it is in use, but will it do that even if the defragment is in progress? int-e: @metar lowi lambdabot: LOWI 040650Z 26025G41KT 9999 -SHRA FEW010 SCT025 OVC040 06/02 Q1009 BECMG 27015G30KT wib_jonas: oerjan: he'll leave and disappear after Belkar's death, possibly to be seen once more at Belkar's funeral in the epilogue (like Eto Demerzel at Hari Seldon's funeral or Fawkes at Dumbledore's funeral), so he just won't have the opportunity to meet the snarl. wib_jonas: he may do one last vengeance rampange before disappearing of course, depending on how exactly Belkar dies cpressey: Here are some possible transposition typos for `git`: `fur`, `hoy`, `dye` cpressey: I am no stranger to `hoy status`. Taneb: cpressey: because hands can be out of sync, "hot", "die" spruit11: egelbot: [X -> say X] "hello!" egelbot: hello! wib_jonas: egelbot: are you the replacement to kspalaiologos's bfbot? egelbot: internal:1:44:lexical:error in char spruit11: Can I occassionally run a bot here? wib_jonas: if it's not too spammy wib_jonas: if it does cause too much spam then take it to #esoteric-blah spruit11: It's my own language. wib_jonas: `echo egelbot: hi HackEso: egelbot: hi egelbot: internal:1:2:semantical:undeclared hi spruit11: It only responds when you send it an expression. spruit11: `echo egelbot: say "hi"` HackEso: egelbot: say "hi"` egelbot: internal:1:10:lexical:unrecognized lexeme ` wib_jonas: egelbot: say "`echo hi" egelbot: `echo hi spruit11: egelbot: agitprop egelbot: visit https://egel-lang.github.io/ spruit11: ^if you want to know more, read there. Taneb: I remember in another channel there was one bot that had a brainfuck interpreter, and one bot that printed the titles of webpages anyone linked wib_jonas: ooh, there's loke a documentation spruit11: It's an untyped rewriter. Think untyped lambda calculus with constants. wib_jonas: Taneb: yeah, there are some of those titlebots in some channels of irc. they're pretty annoying Taneb: Someone, naturally, made a brainfuck program that printed a URL, and put a webpage with that program as its title up Taneb: Which caused a loop Taneb: That channel now has a policy that all bots must use NOTIFY and not respond to NOTIFY spruit11: I can't really call it a proper PL so I thought maybe some of you would be interested. wib_jonas: Taneb: do you mean NOTICE rather than NOTIFY? Taneb: Quite possibly Taneb: Yes, I do wib_jonas: egelbot: say "hello,\nPRIVMSG #esoteric :fellow esoteric bots" egelbot: hello,-PRIVMSG #esoteric :fellow esoteric bots spruit11: The bot is not really hardened. wib_jonas: spruit11: sorry, there are some stupid commands that we have to test whenever something like an evaluator bot wanders in here spruit11: But I won't run it when I am not online. spruit11: It's easy to make it loop. wib_jonas: egelbot: [ X -> X X ] [ X -> X X ] spruit11: Be nice to the bot! wib_jonas: egelbot: 98 + 46 + -36 + 80 + -20 + -90 + 13 + -3 + 60 + -68 + 20 + 55 + -46 + 47 + 42 + -2 + 34 + -1 + 28 wib_jonas: `perl -eprint(98 + 46 + -36 + 80 + -20 + -90 + 13 + -3 + 60 + -68 + 20 + 55 + -46 + 47 + 42 + -2 + 34 + -1 + 28) spruit11: Is that correct? spruit11: Oh, neat. spruit11: Nice try, I am not that certain about my parsing. int-e: egelbot: 65536*65536 egelbot: 4294967296 int-e: egelbot: 4294967296*4294967296 egelbot: (System:* 4294967296 4294967296) spruit11: It refuses to rewrite on overflow. wib_jonas: egelbot: 2 3 spruit11: Occassionaly. wib_jonas: egelbot: 1 + 2 3 egelbot: (System:+ 1 (2 3)) wib_jonas: egelbot: 1 + egelbot: internal:1:6:syntactical:primary expression expected wib_jonas: egelbot: + 2 egelbot: internal:1:2:semantical:undeclared !+ wib_jonas: egelbot: 1 + + 2 egelbot: internal:1:6:semantical:undeclared !+ spruit11: Right, it complains it cannot find a monadic +. wib_jonas: egelbot: let vn = {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} egelbot: internal:1:78:syntactical:in expected wib_jonas: egelbot: let vn = {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} in vn[0] egelbot: internal:1:86:syntactical:-> expected spruit11: Bit of a hack, when it decides you wanted a monadic +, it looks for !+ in the context. wib_jonas: egelbot: let vn = {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} in car 0 egelbot: internal:1:6:semantical:undeclared vn spruit11: It's not a lisp. Taneb: Few things are these days wib_jonas: egelbot: let vn = {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} in [cons x y -> x] vn egelbot: internal:1:6:semantical:undeclared vn spruit11: Variables are uppercase. wib_jonas: doesn't have to be a list to have useful library functions wib_jonas: egelbot: let Vn = {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} in [cons x y -> x] Vn egelbot: internal:1:88:semantical:undeclared x wib_jonas: oh, so lowercase words are taken as constructors or something? wib_jonas: egelbot: let Vn = {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} in [cons X Y -> x] Vn egelbot: internal:1:95:semantical:undeclared x spruit11: Right. wib_jonas: as in prolog wib_jonas: egelbot: let Vn = {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} in [cons X Y -> X] Vn egelbot: (Dummy11DOT0 (System:cons 38 (System:cons 32 (System:cons 75 (System:cons -24 (System:cons -19 (System:cons 53 (System:cons 14 (System:cons 13 (System:cons -28 (System:cons -52 (System:cons 93 (System:cons 90 (System:cons 80 (System:cons 22 (System:cons -98 (System:cons -14 (System:cons -96 (System:cons -81 (System:cons -95 System:nil)))))))))))))))))))) spruit11: Constants or combinators. wib_jonas: I'm trying to get 38 but this didn't give that wib_jonas: egelbot: let Vn = {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} in [ cons X Y -> X ] Vn egelbot: (Dummy12DOT0 (System:cons 38 (System:cons 32 (System:cons 75 (System:cons -24 (System:cons -19 (System:cons 53 (System:cons 14 (System:cons 13 (System:cons -28 (System:cons -52 (System:cons 93 (System:cons 90 (System:cons 80 (System:cons 22 (System:cons -98 (System:cons -14 (System:cons -96 (System:cons -81 (System:cons -95 System:nil)))))))))))))))))))) spruit11: (cons X Y) spruit11: egelbot: let X = {1,2} in [ (cons X Y) -> X ] X wib_jonas: egelbot: let Vn = {38,32,75,-24} in [ System:cons X Y -> X ] Vn egelbot: (Dummy14DOT0 (System:cons 38 (System:cons 32 (System:cons 75 (System:cons -24 System:nil))))) wib_jonas: oh right, parenthesis wib_jonas: egelbot: let Vn = {38,32,75,-24} in [ (System:cons X Y) -> X ] Vn spruit11: Right, your lambda was a ternary combinator. wib_jonas: egelbot: let X = 38; Y = 32 in X egelbot: internal:1:16:syntactical:in expected wib_jonas: egelbot: let X = 38, Y = 32 in X egelbot: internal:1:12:syntactical:in expected wib_jonas: egelbot: let X Y = 38 = 32 in X egelbot: internal:1:15:syntactical:in expected wib_jonas: egelbot: let X Y = 38 32 in X egelbot: (Dummy16DOT0 (38 32)) wib_jonas: egelbot: let {X,Y} = {38,32} in X spruit11: It sometimes refuses to rewrite an introduced unknown combinator (/LC expression). Usually, those start with Dummy. spruit11: It's not very user friendly. spruit11: Just me goofing. wib_jonas: egelbot: let Vn = {38,32,75,-24} in let Sum = [ nil -> 0 | X S -> X + (Sum Y) ] in Sum Vn egelbot: internal:1:64:semantical:undeclared Sum wib_jonas: do I need a Y combinator for this? spruit11: let X = F in E gets rewritten to [ X -> E ] F. [X->E] to Dummy something. wib_jonas: egelbot: let Vn = {38,32,75,-24} in let SumW F = [ nil -> 0 | X S -> X + (F Y) ] in SumW SumW Vn egelbot: internal:1:67:semantical:undeclared F spruit11: Yah, you can either use top level recursive defs or local Y combinators. wib_jonas: egelbot: let Vn = {38,32,75,-24} in let SumW = [ F nil -> 0 | F (cons X S) -> X + (F Y) ] in SumW SumW Vn egelbot: internal:1:78:semantical:undeclared Y spruit11: Local lets aren't recursive. wib_jonas: egelbot: let Vn = {38,32,75,-24} in let Sum = [ nil -> 0 | (cons X S) -> X + (Sum Y) ] in Sum Vn egelbot: internal:1:71:semantical:undeclared Sum wib_jonas: egelbot: let Vn = {38,32,75,-24} in let SumW = [ F nil -> 0 | F (cons X S) -> X + (Sum Y) ] in SumW SumW Vn egelbot: internal:1:76:semantical:undeclared Sum wib_jonas: egelbot: let Vn = {38,32,75,-24} in let SumW = [ F nil -> 0 | F (cons X S) -> X + (F Y) ] in SumW SumW Vn egelbot: internal:1:78:semantical:undeclared Y wib_jonas: egelbot: let Vn = {38,32,75,-24} in let SumW = [ F nil -> 0 | F (cons X S) -> X + (F S) ] in SumW SumW Vn egelbot: (System:+ 38 (Dummy24DOT1 (System:cons 32 (System:cons 75 (System:cons -24 System:nil))))) int-e: egelbot: def fix f = f (fix f) egelbot: internal:1:10:syntactical:= expected spruit11: It's eager. spruit11: Don't use lazy fixes. spruit11: Is that an eager fix? spruit11: No, right? wib_jonas: I don't know spruit11: Eager fixes need some protection to not loop. Moment spruit11: egelbot: agitprop egelbot: visit https://egel-lang.github.io/ int-e: egelbot: def fix f x = f (fix f) x egelbot: internal:1:10:syntactical:= expected wib_jonas: def vn = {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} wib_jonas: egelbot: def vn = {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} wib_jonas: egelbot: vn egelbot: (System:cons 38 (System:cons 32 (System:cons 75 (System:cons -24 (System:cons -19 (System:cons 53 (System:cons 14 (System:cons 13 (System:cons -28 (System:cons -52 (System:cons 93 (System:cons 90 (System:cons 80 (System:cons 22 (System:cons -98 (System:cons -14 (System:cons -96 (System:cons -81 (System:cons -95 System:nil))))))))))))))))))) int-e: egelbot: def fix F X = F (fix F) X egelbot: internal:1:10:syntactical:= expected int-e: egelbot: def fix = [ F X -> F (fix F) X ] spruit11: egelbot: def fix = [ F -> F [ X -> (fix F) X ] ] wib_jonas: egelbot: "foo"+"bar" egelbot: "foobar" wib_jonas: egelbot: "foo"+2 egelbot: (System:+ "foo" 2) wib_jonas: egelbot: "foo" + 2 egelbot: (System:+ "foo" 2) wib_jonas: egelbot: "foo" + (chr 110) egelbot: internal:1:11:semantical:undeclared chr spruit11: It refuses to rewrite that. int-e: egelbot: def fix = [ F X -> F (fix F) X ] spruit11: egelbot: fix [FAC 0 -> 1 | FAC N -> N * (FAC (N- 1)) ] 5 wib_jonas: egelbot: 2; 3 int-e: egelbot: let F = [ F -> [ 0 -> 1 | 1 -> 1 | X -> F (X - 2) + F (X - 1)] ] in fix F 5 wib_jonas: egelbot: def xn = 1; 3 + xn wib_jonas: egelbot: 4 + xn int-e: egelbot: def fix = [ F -> F (fix F) ] int-e: egelbot: let F = [ F -> [ 0 -> 1 | 1 -> 1 | X -> F (X - 2) + F (X - 1)] ] in fix F 5 spruit11: You found a bug? wib_jonas: hi int-e spruit11: Not sure what happened there. int-e: egelbot: def fix = [ F X -> F (fix F) X ] spruit11: egelbot: def xn = 1 spruit11: egelbot: xn + 3 wib_jonas: wait, you haven't been welcomed yet wib_jonas: `welcome spruit11 HackEso: spruit11: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: . (For the other kind of esoterica, try #esoteric on EFnet or DALnet.) wib_jonas: `welcome egelbot HackEso: egelbot: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: . (For the other kind of esoterica, try #esoteric on EFnet or DALnet.) egelbot: internal:1:90:syntactical:! unexpected int-e: spruit11: I guess F -> F (fix F) is too eager indeed. spruit11: Something I'll need to check. Haven't looked at the source code for a while. spruit11: Hello people! spruit11: Oh right. It's a recursive def of xn. wib_jonas: egelbot: }+{32} egelbot: internal:1:2:syntactical:primary expression expected wib_jonas: egelbot: {38}+{32} egelbot: (System:+ (System:cons 38 System:nil) (System:cons 32 System:nil)) spruit11: def xn = (1; 3+ xn). That loops. wib_jonas: so how do I put two statements in one line, the first of which is a defn? wib_jonas: I'm not clear about the syntax here int-e: egelbot: let sum = fix [SUM {} -> 0 | SUM (cons x y) -> x + SUM y] in sum {1,2,3,4} egelbot: internal:1:41:semantical:undeclared x spruit11: You can't in the irc REPL. int-e: egelbot: let sum = fix [SUM {} -> 0 | SUM (cons X Y) -> X + SUM Y] in sum {1,2,3,4} egelbot: internal:1:6:semantical:undeclared sum int-e: yeah... spruit11: It's either a def or an expression. int-e: egelbot: let SUM = fix [SUM {} -> 0 | SUM (cons X Y) -> X + SUM Y] in SUM {1,2,3,4} wib_jonas: egelbot: 38&32 egelbot: internal:1:4:semantical:undeclared & wib_jonas: egelbot: 38 | 32 egelbot: internal:1:5:syntactical:| unexpected wib_jonas: egelbot: 38 & 32 egelbot: internal:1:5:semantical:undeclared & int-e: The capital variable names are killing me. wib_jonas: egelbot: 38 < 32 egelbot: System:false wib_jonas: egelbot: 38 <= 32 egelbot: System:false wib_jonas: egelbot: 38 == 32 egelbot: System:false wib_jonas: egelbot: 38 = 32 egelbot: internal:1:5:syntactical:= unexpected wib_jonas: egelbot: 38 != 32 egelbot: internal:1:5:syntactical:!= unexpected wib_jonas: egelbot: 38 <> 32 egelbot: internal:1:5:semantical:undeclared <> spruit11: Had to make a decision. Prolog-like parsing simplifies a lot. wib_jonas: egelbot: 38 ~= 32 egelbot: internal:1:5:semantical:undeclared ~= wib_jonas: egelbot: 38 /= 32 egelbot: internal:1:5:semantical:undeclared /= wib_jonas: egelbot: 38 ^= 32 egelbot: internal:1:5:semantical:undeclared ^= int-e: egelbot: not false egelbot: System:true spruit11: In an untyped language it's hard to disambiguate between constants and variables otherwise. spruit11: Simplified a lot. int-e: :t Just lambdabot: a -> Maybe a int-e: I'm kind of used to the opposite convention. spruit11: [ X -> X ] (how do I know X is a variable or constant?) j-bot: spruit11: X (- > X ] how do (8 8$0 0 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0) know X is a variable or constant ?) wib_jonas: int-e: one is the prolog convention, the other is the Standard ML or Haskell conventino wib_jonas: and I suspect the prolog one is older spruit11: Right, you can trace back to Prolog and found they took the simplest convention known at that point. wib_jonas: there's also the cheating solution where constructors start with an uppercase letter, but there are a few lowercase keywords that are frequently constructors, like true false nil cons some none spruit11: It shaves of a context lookup and possible mistakes. wib_jonas: so back to that recursion, why did the definition of SumW that I try not work? wib_jonas: let Vn = {38,32,75,-24} in let SumW = [ F nil -> 0 | F (cons X S) -> X + (F S) ] in SumW SumW Vn wib_jonas: egelbot: let Vn = {38,32,75,-24} in let SumW = [ F nil -> 0 | F (cons X S) -> X + (F S) ] in SumW SumW Vn egelbot: (System:+ 38 (Dummy15DOT1 (System:cons 32 (System:cons 75 (System:cons -24 System:nil))))) spruit11: Dunno. spruit11: Don't you need fix? int-e: wib_jonas: because you need to invoke the recursive call using F F spruit11: Not sure what you're doing/ wib_jonas: egelbot: let Vn = {38,32,75,-24} in let SumW = [ F nil -> 0 | F (cons X S) -> X + (F F S) ] in SumW SumW Vn wib_jonas: that's it wib_jonas: though it's not the best way to implement sum, wait a moment wib_jonas: egelbot: let Vn = {38,32,75,-24} in let SumT = [ R B nil -> B | R B (cons X S) -> R R (B + X) S ] in let Sum S = SumT SumT 0 S in Sum Vn egelbot: internal:1:118:semantical:undeclared S wib_jonas: egelbot: let Vn = {38,32,75,-24} in let SumT = [ R B nil -> B | R B (cons X S) -> R R (B + X) S ] in let Sum = [ S -> SumT SumT 0 S ] in Sum Vn wib_jonas: egelbot: let Vn={38,32,75,-24} in let SumT=[R B nil->B|R B(cons X S)->R R(B + X)S] in let Sum=[S->SumT SumT 0 S] in Sum Vn wib_jonas: now I just also have to define some other list operations spruit11: Hehe, your LC fu is better than mine. spruit11: You can take a look at the prelude. Probably it's already in there. spruit11: Moment. wib_jonas: int-e: thanks, that was the problem spruit11: https://github.com/egel-lang/egel-bot/blob/master/src/script.eg wib_jonas: spruit: what I'd like to know is what built-in functions there are, since apparently the & operator doesn't work spruit11: I didn't document that, unfortunately. wib_jonas: it's probably somewhere in the source spruit11: Right. If you want to look at the source, it's here: spruit11: (moment) wib_jonas: https://github.com/egel-lang/egel/tree/master/src wib_jonas: mind you, wib_jonas: egelbot: say("foo"+"bar") egelbot: foobar spruit11: https://github.com/egel-lang/egel/tree/master/src/builtin wib_jonas: ah, the builtin directory. thanks spruit11: Those list the builtins. But they're pretty much still subject to change. spruit11: (Even if I didn't code for a while.) wib_jonas: hmm... so is there a chr function? spruit11: You'll mostly want https://github.com/egel-lang/egel/blob/master/src/builtin/system.cpp wib_jonas: ok, that'll take some time to read spruit11: Not sure it's in the bot. spruit11: Lemme check. spruit11: egelbot: using String wib_jonas: egelbot: pack {110,114} egelbot: (System:pack (System:cons 110 (System:cons 114 System:nil))) spruit11: egelbot: toLower "A" wib_jonas: egelbot: pack { 'b' , 'f' } wib_jonas: egelbot: 'b' wib_jonas: egelbot: toInt 'b' egelbot: internal:1:2:semantical:undeclared toInt wib_jonas: egelbot: toint 'b' wib_jonas: egelbot: totext 101 wib_jonas: egelbot: char 101 egelbot: (System:char 101) wib_jonas: I'll look more at this later spruit11: Uh, this is silly. I don't think there is. int-e: egelbot: 1 != 2 egelbot: internal:1:4:syntactical:!= unexpected int-e: (see also https://github.com/egel-lang/egel/blob/master/src/builtin/system.cpp#L344 ) wib_jonas: so this is a symbolic term-rewriting thing like maple and mathematica, where if a function application makes no sense then the interpreter just leaves it as an unevaluated function application value? wib_jonas: egelbot: (3 4) spruit11: Something like that. wib_jonas: and are there values with mutable fields? spruit11: But worse than maple or mathematica. More a SASL. spruit11: No, there's mutation on expression but that's unsafe. spruit11: The language more serves as a front end on a thought I had about implementing an FP language in C++ in a memory-safe manner. spruit11: It's just a funny thing, not really usable for anything. int-e: `grwp usable HackEso: No output. int-e: `quote usable HackEso: 690) elliott_: how usable is borges in the real world int-e: Doesn't come up much, it seems. wib_jonas: does say work like in blsq or lambdabot where it just returns an object that will be formatted without quoting anything, or is it a function with a side-effect? spruit11: The idea is that in memory, everyting is a DAG, given a number of invariants, and that makes for a robust C++ implementation. spruit11: That's the most important thing about this thingy, the rest is just me goofing with an untyped LC rewriter. wib_jonas: we need at least a stub entry with pointers; I can add more details when I figure out what the heck the language is spruit11: You can look at the examples. It supports a number of thing you wont find in other LC languages. wib_jonas: I guess I can test that spruit11: Exception and multi-adic combinators. wib_jonas: egelbot: {38, say "foo", 32, say "bar", 75} egelbot: (System:cons 38 (System:cons System:nop (System:cons 32 (System:cons System:nop (System:cons 75 System:nil))))) wib_jonas: looks like it is a function with side effects wib_jonas: also... spruit11: egelbot: try 1 + throw "hi" catch [ X -> say X] wib_jonas: looks like it can say more than one line to irc spruit11: Oh yah. Also: concurrency. spruit11: Yes, it could. spruit11: I think I put a delay on that but as I said, the bot isn't hardened. spruit11: I won't run it when I am not online. It's just to show-case. spruit11: Also for myself, you can blow up my laptop any time you feel like. wib_jonas: can the bot join more than one channel, so that we can experiment with possibly spammy things and then show only the result here? wib_jonas: pity. that'd be a helpful feature, since the bot being new, we'll certainly do more experiments on it spruit11: I have #egel. But I don't go there anymore. wib_jonas: I will try to as well later wib_jonas: when I'm back wib_jonas: this looks like an interesting toy language spruit11: Thanks! spruit11: Oh right. b_jonas: egelbot: dog cat egelbot: internal:1:2:semantical:undeclared dog b_jonas: egelbot: cons 1 2 3 egelbot: (System:cons 1 2 3) b_jonas: spruit11: how do you define a new named constructor? b_jonas: do you just def dog = [] ? b_jonas: egelbot: [] 2 egelbot: internal:1:3:syntactical:-> expected b_jonas: egelbot: let F = [true -> "yes"] in {F true, F false, F 0, F 1, F -1, F {}} egelbot: (System:cons "yes" (System:cons (Dummy34DOT1 System:false) (System:cons (Dummy34DOT1 0) (System:cons (Dummy34DOT1 1) (System:cons (Dummy34DOT1 -1) (System:cons (Dummy34DOT1 System:nil) System:nil)))))) b_jonas: egelbot: let F = [X Y -> (10 * X) + Y] in {F 7 1, F 7 0, F 0 2, (F 7) 1, F (7 1)} egelbot: (System:cons 71 (System:cons 70 (System:cons 2 (System:cons 71 (System:cons (Dummy35DOT1 (7 1)) System:nil))))) b_jonas: egelbot: let F = [X Y -> (10 * X) + Y] in [F -> F 2] (F 7) b_jonas: egelbot: let F = [X Y -> (10 * X) + Y] in [S -> {S (F 7), S (F 6)}] [F -> F 2] egelbot: (System:cons 72 (System:cons 62 System:nil)) spruit11: b_jonas: data spruit11: egelbot: data tree, leaf b_jonas: egelbot: [[0 -> 0] -> 3] [0 -> 0] egelbot: internal:1:3:syntactical:-> expected spruit11: egelbot: tree (leaf 1) (leaf 'a') egelbot: (tree (leaf 1) (leaf 'a')) b_jonas: egelbot: [0 -> 0] 0 b_jonas: egelbot: [0 -> 0] 1 egelbot: (Dummy40DOT0 1) spruit11: It refuses to rewrite a combinator introduced by the lambda. spruit11: The language is very spartan. b_jonas: egelbot: let C = [tree -> 2 | leaf -> 0] in {C tree, C leaf} egelbot: (System:cons 2 (System:cons 0 System:nil)) b_jonas: thanks spruit11: Nice to see some interest. b_jonas: egelbot: [(X Y) -> X] (2 5) b_jonas: egelbot: [(X Y) -> Y] (2 5) b_jonas: egelbot: [(X Y) -> Y] {2, 5} egelbot: (Dummy44DOT0 (System:cons 2 (System:cons 5 System:nil))) b_jonas: egelbot: [(X Y) -> X] {2, 5} egelbot: (Dummy45DOT0 (System:cons 2 (System:cons 5 System:nil))) b_jonas: egelbot: [(X Y Z) -> (X, Y, Z)] {2, 5} egelbot: (System:tuple System:cons 2 (System:cons 5 System:nil)) b_jonas: egelbot: [(X Y Z) -> X)] {2, 5} egelbot: internal:1:15:syntactical:] expected b_jonas: egelbot: [(X Y Z) -> X] {2, 5} egelbot: System:cons b_jonas: egelbot: [(X Y Z) -> Y] {2, 5} b_jonas: egelbot: [(X Y Z) -> Z] {2, 5} egelbot: (System:cons 5 System:nil) b_jonas: egelbot: [(X Y) -> X] {2, 5} egelbot: (Dummy50DOT0 (System:cons 2 (System:cons 5 System:nil))) b_jonas: egelbot: [(X Y) -> X] (2 5 1) egelbot: (Dummy51DOT0 (2 5 1)) b_jonas: egelbot: [(X Y) -> X] (cons 2 {5}) egelbot: (Dummy52DOT0 (System:cons 2 (System:cons 5 System:nil))) b_jonas: egelbot: [(X Y) -> X] ((cons 2) {5}) egelbot: (Dummy53DOT0 (System:cons 2 (System:cons 5 System:nil))) b_jonas: egelbot: ((cons 2) {5}) egelbot: (System:cons 2 (System:cons 5 System:nil)) b_jonas: I wonder if we can build and install this on HackEso. the docs says that it needs libicu, but that's probably not unsurmountable spruit11: It isn't hardened. spruit11: Maybe if I harden it, or someone else writes a script around it. spruit11: I could limit the bot to 100k rewrites, just would take me some time, and I still wouldn't know if that's enough to harden. spruit11: Dunno. b_jonas: HackEso has a built-in time limit for its commands, so you don't need a time limit in the interpreter b_jonas: 60 seconds usually b_jonas: (sorry, technical difficulties) b_jonas: egelbot: let F = [X Y -> (10 * X) + Y] in {F 7 3, F 7, F} egelbot: (System:cons 73 (System:cons (Dummy55DOT1 7) (System:cons Dummy55DOT1 System:nil))) b_jonas: so this term rewriting system has a full untyped lambda calculus in it, right? b_jonas: egelbot: let Nth = [0 (X _) -> X | K (_ S) -> Nth (K - 1) S] in Nth 3 {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} egelbot: internal:1:39:semantical:undeclared Nth b_jonas: oh yeah, recursion b_jonas: egelbot: let NthR = [R 0 (X _) -> X | R K (_ S) -> R R (K - 1) S] in let Nth = NthR NthR in Nth 3 {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} egelbot: (Dummy57DOT2 Dummy57DOT2 3 (System:cons 38 (System:cons 32 (System:cons 75 (System:cons -24 (System:cons -19 (System:cons 53 (System:cons 14 (System:cons 13 (System:cons -28 (System:cons -52 (System:cons 93 (System:cons 90 (System:cons 80 (System:cons 22 (System:cons -98 (System:cons -14 (System:cons -96 (System:cons -81 (System:cons -95 System:nil)))))))))))))))))))) b_jonas: egelbot: let NthR = [R 0 (cons X _) -> X | R K (cons _ S) -> R R (K - 1) S] in let Nth = NthR NthR in Nth 3 {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} b_jonas: egelbot: let NthR = [R 0 (cons X _) -> X | R K (cons _ S) -> R R (K - 1) S] in let Nth = NthR NthR in Nth 4 {38,32,75,-24,-19,53,14,13,-28,-52,93,90,80,22,-98,-14,-96,-81,-95} b_jonas: if we want to build the parts with libicu, then I think we'll need the libicu-dev debian package b_jonas: now let me see these builtin functions b_jonas: egelbot: k 3 7 b_jonas: egelbot: id 3 egelbot: internal:1:2:semantical:undeclared id b_jonas: egelbot: identity 3 egelbot: internal:1:2:semantical:undeclared identity b_jonas: egelbot: [X->X] 3 b_jonas: egelbot: [X X->X] 3 7 egelbot: internal:1:5:semantical:redeclaration of X b_jonas: egelbot: + egelbot: internal:1:3:syntactical:primary expression expected b_jonas: egelbot: (+ egelbot: internal:1:4:syntactical:primary expression expected b_jonas: egelbot: (+) egelbot: System:+ b_jonas: egelbot: (+) 2 5 b_jonas: egelbot: let (+) = [X Y->(10*X)+Y] in 7+3 egelbot: (Dummy67DOT0 Dummy67DOT1) b_jonas: egelbot: let (&) = [X Y->(10*X)+Y] in 7&3 egelbot: internal:1:7:semantical:undeclared & b_jonas: egelbot: let 2 = 5 in 2 egelbot: (Dummy69DOT0 5) b_jonas: how does that work? b_jonas: egelbot: let 2 0 = 5 in 2 0 egelbot: (Dummy70DOT0 5) b_jonas: egelbot: let 2 0 = 5 in 2 egelbot: (Dummy71DOT0 5) b_jonas: egelbot: let (2 0) = 5 in 2 egelbot: (Dummy72DOT0 5) b_jonas: let X = 2 in X b_jonas: egelbot: let X = 2 in X b_jonas: spruit11: what do declarations like 2 = 5 mean in egel? b_jonas: oh I see b_jonas: it just desugars (let 2 = 5 in 2) to something like ([2 -> 2] 5) I think b_jonas: egelbot: let 2 = 5 in 6 egelbot: (Dummy74DOT0 5) b_jonas: egelbot: [2 -> 6] in 5 egelbot: internal:1:11:syntactical:in unexpected b_jonas: egelbot: [2 -> 6] 5 egelbot: (Dummy75DOT0 5) b_jonas: egelbot: 16511&&40537 b_jonas: `perl -eprint(16511&40537) spruit11: Right. b_jonas: egelbot: 16511||40537 b_jonas: `perl -eprint(16511|40537) b_jonas: so these are in the standard library, just under a strange name. nice spruit11: A let is just a lambda. b_jonas: egelbot: 16511^^40537 b_jonas: `perl -eprint(16511^40537) spruit11: The standard library wasn't very well thought over and is still subject to change. spruit11: egelbot: 1/0 egelbot: (System:/ 1 0) b_jonas: egelbot: 0x407F egelbot: internal:1:7:semantical:undeclared F spruit11: Right, I still don't know whether to stop rewriting or throw an exception on `1/0`. b_jonas: egelbot: &H407F egelbot: internal:1:2:syntactical:primary expression expected b_jonas: egelbot: 1<<7 b_jonas: egelbot: 1<<12 b_jonas: egelbot: 1<<22 egelbot: 4194304 b_jonas: egelbot: 1<<30 egelbot: 1073741824 b_jonas: egelbot: 1<<31 egelbot: 2147483648 b_jonas: egelbot: 1<<32 egelbot: 4294967296 b_jonas: egelbot: 1<<35 egelbot: 34359738368 b_jonas: egelbot: 1<<47 egelbot: 140737488355328 b_jonas: egelbot: 1<<62 egelbot: 4611686018427387904 b_jonas: egelbot: 1<<63 egelbot: -9223372036854775808 b_jonas: egelbot: 1<<64 b_jonas: egelbot: (1<<63)+(1<<63) egelbot: (System:+ -9223372036854775808 -9223372036854775808) b_jonas: egelbot: 2 != 3 egelbot: internal:1:4:syntactical:!= unexpected b_jonas: egelbot: (!=) 2 3 egelbot: System:true b_jonas: egelbot: (!=) 2 2 egelbot: System:false b_jonas: egelbot: true == false egelbot: System:false b_jonas: egelbot: true == true egelbot: System:true b_jonas: egelbot: {} == {} egelbot: System:true b_jonas: egelbot: {2} == {3} egelbot: System:false b_jonas: egelbot: {2} == {2} egelbot: System:true spruit11: Ah. Not sure what unequality is. b_jonas: egelbot: [_->0] == [_->0] egelbot: System:false spruit11: egelbot: ~= egelbot: internal:1:4:syntactical:primary expression expected b_jonas: spruit11: (!=) is the unequality function, the lexer just doesn't tokenize it as an infix operator apparently b_jonas: egelbot: {(!=) 2 2, (!=) 2 3} egelbot: (System:cons System:false (System:cons System:true System:nil)) spruit11: Been a while. Never tested that it seems. b_jonas: egelbot: let X = [_->0] in X == X egelbot: System:true b_jonas: egelbot: let X = [_ _->0] in (X 2) == (X 2) egelbot: System:true b_jonas: egelbot: let X = [_ _->0] in (X 2) == (X 1) egelbot: System:false b_jonas: egelbot: let (X, Y) = ([_ _->0], [_ _->0]) in (X 1) == (X 1) egelbot: System:true b_jonas: egelbot: let (X, Y) = ([_ _->0], [_ _->0]) in (X 1) == (Y 1) egelbot: System:false b_jonas: egelbot: let (X, Y) = ([_ _->0], [_ _->0]) in (Y 1) == (Y 1) egelbot: System:true b_jonas: hmm, so what are these array things? spruit11: What array? spruit11: Nice eq checks by the way. b_jonas: https://github.com/egel-lang/egel/blob/master/src/builtin/system.cpp#L372 spruit11: Most of your eq checks used dyadidic lambda's. b_jonas: egelbot: toint "D" b_jonas: egelbot: toint 'D' b_jonas: egelbot: toint "32" b_jonas: egelbot: toint '\n' b_jonas: so that _is_ a newline b_jonas: egelbot: unpack "foo" egelbot: (System:cons 'f' (System:cons 'o' (System:cons 'o' System:nil))) b_jonas: egelbot: toint (unpack "\n") egelbot: (System:toint (System:cons '\n' System:nil)) b_jonas: egelbot: [{X} -> toint X] (unpack "\n") b_jonas: so that is a newline b_jonas: egelbot: say "foo\nbar" egelbot: foo-bar b_jonas: egelbot: say "foo\r\nbar" egelbot: internal:1:11:lexical:error in string b_jonas: egelbot: say "foo\x0D\nbar" egelbot: internal:1:11:lexical:error in string spruit11: That's part of the hardening of the bot. spruit11: Just replaces \n with - in the output. spruit11: Just to be sure. b_jonas: spruit11: what are these arrays that that line in builtin/system.cpp refer to? b_jonas: egelbot: int egelbot: System:int spruit11: egelbot: let X = [ _ -> 0 ] in (X 2) == (X 2) egelbot: System:true spruit11: Dunno? spruit11: What line? b_jonas: https://github.com/egel-lang/egel/blob/master/src/builtin/system.cpp#L372 spruit11: Oh, right. b_jonas: also, is this actually using libicu somewhere? there's no mention in https://github.com/egel-lang/egel/blob/master/src/builtin/string.cpp , but perhaps it's used somewhere else spruit11: egelbot: (1 2) spruit11: So, that's under water an array [1,2]. spruit11: You're not supposed to know. arseniiv: oh thanks for the link, I was lazy to see in the logs what this new language is b_jonas: arseniiv: I added a stub entry to the wiki spruit11: All strings are libicu strings. spruit11: Chars are UChar32. spruit11: There's a regex module but not available from the bot. b_jonas: egelbot: '\r' egelbot: internal:1:4:lexical:error in char arseniiv: b_jonas: neat! b_jonas: egelbot: '\n' b_jonas: egelbot: '\\' b_jonas: egelbot: '\\s' egelbot: internal:1:5:lexical:error in char spruit11: Yah, that gets parsed to a newline and unescaped again. arseniiv: BTW does anybody have a thought about this little detail of Haskell import system which I think isn’t too great: https://www.reddit.com/r/haskell/comments/ewrfaw/monthly_hask_anything_february_2020/fgjhwlz/ spruit11: Don't expect too much support for unicode. I just took it as a good start. spruit11: Don't remember what lexer can handle. spruit11: But most unicode should be fine. spruit11: egelbot: '∀' arseniiv: I’d like at least field names of a `data X` be either in a subnamespace `X` or a subnamespace named by the corresponding constructor (for the example, `X1.field1`), at least b_jonas: egelbot: unescape "foo\\rbar" egelbot: "foo\rbar" spruit11: There are namespaces, just not in the bot. b_jonas: egelbot: def car = [(cons X S) -> X] b_jonas: egelbot: car {3,1} spruit11: egelbot: cons egelbot: System:cons arseniiv: spruit11: sorry that’s my ramblings about the Haskell in general :) b_jonas: egelbot: toint(car(unpack(unescape "\r"))) egelbot: internal:1:30:lexical:error in string b_jonas: egelbot: toint(car(unpack(unescape "\\r"))) b_jonas: there it is b_jonas: egelbot: toint(car(unpack(unescape "\\x00"))) b_jonas: egelbot: toint(car(unpack(unescape "\\x0"))) b_jonas: egelbot: toint(car(unpack(unescape "\\x01"))) b_jonas: egelbot: toint(car(unpack(unescape "\\x0D"))) b_jonas: egelbot: toint(car(unpack(unescape "\\x0A"))) spruit11: I don't even remember that. b_jonas: egelbot: say(unescape "foo\\rbar") b_jonas: egelbot: say(unescape "foo\\rPRIVMSG #esoteric :bar") b_jonas: egelbot: say(unescape "foo\\rPRIVMSG b_jonas :hello jonas") spruit11: You hacked around it? spruit11: Oh right, doesn't escape \\r, only \\n. spruit11: Didn't know. spruit11: Will fix. b_jonas: it was one of the first things I tried, but say escapes "\n", and there's no chr function so I didn't know how to get a "\r" until I read the library b_jonas: make sure to escape "\x00" too spruit11: Right. spruit11: But you can easily blow up my laptop, so I won't run this a lot. b_jonas: yes, that's why I'm saying I should try to build and install this interpreter to HackEso b_jonas: you have the sources, if they can build cleanly then it should be possible spruit11: Needs more hacking and this was good enough for my purposes at the time. spruit11: I am not really that happy about the build. spruit11: It depends on libegel installed systemwide. b_jonas: egelbot: head {3,1,4} egelbot: internal:1:2:semantical:undeclared head spruit11: You can work around that, if you know how to. b_jonas: egelbot: List:head {3,1,4} b_jonas: egelbot: List:nth {3,1,4} 0 egelbot: (List:nth (System:cons 3 (System:cons 1 (System:cons 4 System:nil))) 0) spruit11: egelbot: using List b_jonas: egelbot: List:nth 0 {3,1,4} b_jonas: egelbot: List:nth 1 {3,1,4} spruit11: That opened the namespace. spruit11: egelbot: head {1,3} b_jonas: egelbot: List:map [X->10*X] {7,6,1} egelbot: (System:cons 70 (System:cons 60 (System:cons 10 System:nil))) b_jonas: I wish the writer had a concise syntax for lists and tuples, rather than printing the internal form b_jonas: egelbot: (2,1) egelbot: (System:tuple 2 1) b_jonas: egelbot: 2;1 b_jonas: egelbot: (2;1)+10 b_jonas: egelbot: (;) egelbot: internal:1:3:syntactical:primary expression expected b_jonas: egelbot: 0x407f b_jonas: egelbot: 0x407F egelbot: internal:1:7:semantical:undeclared F b_jonas: egelbot: let F = 0 in 0x407F egelbot: (1031 0) b_jonas: egelbot: List:foldl (+) {"a","b","c"} egelbot: (List:foldl System:+ (System:cons "a" (System:cons "b" (System:cons "c" System:nil)))) b_jonas: egelbot: List:foldr (+) {"a","b","c"} egelbot: (List:foldr System:+ (System:cons "a" (System:cons "b" (System:cons "c" System:nil)))) b_jonas: egelbot: List:foldr (+) "" {"a","b","c"} spruit11: You are thorough! spruit11: Could have save me a lot of unit tests. ;) b_jonas: thanks, I'll link to that line in the channel logs for my next interview :-) spruit11: I only did some tests in the REPL. spruit11: Just relying on what I know and whether it seemed correct on cursory glance. b_jonas: egelbot: List:foldr(+)""(List:map[K->List:nth{"zero","one","two","three"}K]{3,0,1,3}) egelbot: (System:+ (List:nth (System:cons "zero" (System:cons "one" (System:cons "two" (System:cons "three" System:nil)))) 3) (System:+ (List:nth (System:cons "zero" (System:cons "one" (System:cons "two" (System:cons "three" System:nil)))) 0) (System:+ (List:nth (System:cons "zero" (System:cons "one" (System:cons "two" (System:cons "three" System:nil)))) 1) (System:+ (List:nth (System:cons "zero" (System:cons "one" (System:cons "two" (System:cons "th b_jonas: egelbot: [K->List:nth{"zero","one","two","three"}K]0 egelbot: (List:nth (System:cons "zero" (System:cons "one" (System:cons "two" (System:cons "three" System:nil)))) 0) b_jonas: egelbot: List:nth {"zero","one","two","three"} 0 egelbot: (List:nth (System:cons "zero" (System:cons "one" (System:cons "two" (System:cons "three" System:nil)))) 0) b_jonas: egelbot: List:nth 0 {"zero","one","two","three"} egelbot: "zero" b_jonas: oh right b_jonas: egelbot: List:foldr(+)""(List:map[K->List:nth K{"zero","one","two","three"}]{3,0,1,3}) egelbot: "threezeroonethree" spruit11: I opened the namespace, you no longer need to type List. b_jonas: yes, but I want to write this is such a way that it works out of box when you rerun the interpreter spruit11: Ah, right. b_jonas: egelbot: List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: List:foldr(+)","(List:map[K->List:nth K{"}]{3,1,1,4}) egelbot: "egelbot: List:foldr(+)\"\"(List:map[K->List:nth K{" b_jonas: egelbot: List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: List:foldr(+)","(List:map[K->List:nth K{"}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1}) egelbot: "egelbot: List:foldr(+)\"\"(List:map[K->List:nth K{\"\\\\\",\"\\\"\",\",\",\"" b_jonas: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: List:foldr(+)","(List:map[K->List:nth K{"}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1})) egelbot: egelbot: List:foldr(+)""(List:map[K->List:nth K{"\\","\"",","," b_jonas: I'm trying to write my favorite form of quine spruit11: Oh, I never was good at those. b_jonas: this is an easy one to write spruit11: Don't really grok them. b_jonas: because it has a generic enough structure that works in many languages b_jonas: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: List:foldr(+)","(List:map[K->List:nth K{","}]{3,1,1..."}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,2})) egelbot: egelbot: List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: List:foldr(+)","(List:map[K->List:nth K{","}]{3,1,1...", b_jonas: that said, this might be too long for an irc line, so I'll have to specialize it spruit11: There's an eval too. b_jonas: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}]{3,1,1..."}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,2,})) egelbot: internal:1:191:syntactical:primary expression expected spruit11: egelbot: eval "[X -> X]" 1 b_jonas: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}]{3,1,1..."}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,2})) egelbot: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}]{3,1,1...", spruit11: Not sure I implemented that correctly. But seems to work. spruit11: It leaks, since it needs to rerun the interpreter. b_jonas: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}]{3,1,1..."}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5})) egelbot: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}]{3,1,1..."}]{3,1,1... b_jonas: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}]{3,1,1...5,1,5}))"}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5})) egelbot: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}]{3,1,1...5,1,5}))"}]{3,1,1...5,1,5})) b_jonas: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5}))"}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5})) egelbot: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5}))"}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5})) spruit11: Got it? b_jonas: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5}))"}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5})) egelbot: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5}))"}]{3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5})) spruit11: Looks right. b_jonas: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}] {3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5}))"}] {3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5})) egelbot: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}] {3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5}))"}] {3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5})) b_jonas: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}] {3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5}))"}] {3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5})) egelbot: egelbot: say(List:foldr(+)""(List:map[K->List:nth K{"\\","\"",",","egelbot: say(List:foldr(+)","(List:map[K->List:nth K{","}] {3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5}))"}] {3,1,1,4,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,5})) b_jonas: probably b_jonas: it is possible to write much shorter quines of course, this is just one that I like because it's easy to write spruit11: I have no idea what you did but color me impressed. b_jonas: you can read the list manipulation part, right? b_jonas: there's a list of strings, and a list of integers, and I index the list of integers with each of the list of strings and print them b_jonas: works well in most languages b_jonas: if they have a way to write string constants like this spruit11: This will need some thought on my part. I saved the expression for later. b_jonas: you can usually get shorter or nicer quines if you use properties that are more specific to the language spruit11: Looks okay enough to me. spruit11: I am off. Will let the bot run for a while. b_jonas: egelbot: "A""D" egelbot: ("A" "D") b_jonas: egelbot: [Q B->]"\"""\\" egelbot: internal:1:8:syntactical:primary expression expected spruit11: Yah, hint. There's no real difference between data constructors and other constants. spruit11: egelbot: 1 2 spruit11: This works fine. spruit11: egelbot: cons 1 nil egelbot: (System:cons 1 System:nil) spruit11: This works fine spruit11: egelbot: nil 1 cons egelbot: (System:nil 1 System:cons) spruit11: But that too. spruit11: There's no difference. It's just composition. b_jonas: egelbot: [Q B L->L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q]"\"""\\""[Q B L->L+Q+B+...L+Q]" egelbot: "[Q B L->L+Q+B+...L+Q]\"\\\"\"\"\\\\\"\"[Q B L->L+Q+B+...L+Q]\"" b_jonas: egelbot: [Q B L->L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q]"\"""\\""[Q B L->L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q]" egelbot: "[Q B L->L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q]\"\\\"\"\"\\\\\"\"[Q B L->L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q]\"" b_jonas: needs say b_jonas: egelbot: [Q B L->say(L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q)]"\"""\\""[Q B L->say(L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q)]" egelbot: [Q B L->say(L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q)]"\"""\\""[Q B L->say(L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q)]" b_jonas: egelbot: [Q B L->say(L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q)]"\"""\\""egelbot: [Q B L->say(L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q)]" egelbot: egelbot: [Q B L->say(L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q)]"\"""\\""egelbot: [Q B L->say(L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q)]" b_jonas: egelbot: [Q B L->say(L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q)]"\"""\\""egelbot: [Q B L->say(L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q)]" egelbot: egelbot: [Q B L->say(L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q)]"\"""\\""egelbot: [Q B L->say(L+Q+B+Q+Q+Q+B+B+Q+Q+L+Q)]" b_jonas: egelbot: quote "a\nb" egelbot: internal:1:2:semantical:undeclared quote spruit11: Ah, You removed the fold. b_jonas: egelbot: escape "a\nb" egelbot: internal:1:2:semantical:undeclared escape b_jonas: spruit11: and removed the list indexing b_jonas: also wrote it in such a way that there's nothing after the final double quote, so we don't need a fourth string b_jonas: egelbot: get 0 ("foo" "bar") egelbot: (System:get 0 ("foo" "bar")) b_jonas: egelbot: get ("foo" "bar") 0 egelbot: (System:get ("foo" "bar") 0) b_jonas: egelbot: get ("foo" "bar") 1 egelbot: (System:get ("foo" "bar") 1) b_jonas: egelbot: get {1,2} 0 egelbot: (System:get (System:cons 1 (System:cons 2 System:nil)) 0) b_jonas: egelbot: get {6,7} 0 egelbot: (System:get (System:cons 6 (System:cons 7 System:nil)) 0) b_jonas: egelbot: get {6,7} 1 egelbot: (System:get (System:cons 6 (System:cons 7 System:nil)) 1) b_jonas: egelbot: get 0 {6,7} egelbot: (System:get 0 (System:cons 6 (System:cons 7 System:nil))) b_jonas: egelbot: get 0 (6 7) egelbot: (System:get 0 (6 7)) b_jonas: egelbot: get (6 7) 0 egelbot: (System:get (6 7) 0) b_jonas: egelbot: get (6 7) 1 egelbot: (System:get (6 7) 1) b_jonas: egelbot: getv (6 7) egelbot: (System:getv (6 7)) b_jonas: egelbot: charAt "foo" 0 egelbot: (String:charAt "foo" 0) b_jonas: egelbot: charAt 0 "foo" b_jonas: egelbot: charAt 1 "foo" spruit11: egelbot: getv (var 0) egelbot: internal:1:8:syntactical:primary expression expected spruit11: egelbot: getv (v 0) spruit11: Right, that's for an unsafe extension of Egel. spruit11: egelbot: setv 1 (v 0) egelbot: (System:setv 1 (System:v 0)) b_jonas: egelbot: 10 % 3 b_jonas: egelbot: next egelbot: internal:1:2:semantical:undeclared next b_jonas: egelbot: last egelbot: internal:1:2:semantical:undeclared last b_jonas: egelbot: data next b_jonas: egelbot: data last b_jonas: egelbot: {next, last} egelbot: (System:cons next (System:cons last System:nil)) spruit11: egelbot: setv (v 1) 1 egelbot: (System:v 1) spruit11: egelbot: setv (v 0) 1 egelbot: (System:v 1) b_jonas: egelbot: loop egelbot: internal:1:2:semantical:undeclared loop spruit11: It overwrites the term. But the term needs to be a DAG, so that's unsafe. b_jonas: egelbot: def loop = [Func Init -> [(next X) -> loop Func X | (last R) -> R] (Func Init)] b_jonas: I'm trying to see if I can translate http://math.bme.hu/~ambrus/pu/olvashato/t2.olv b_jonas: egelbot: iota egelbot: internal:1:2:semantical:undeclared iota b_jonas: egelbot: def iota = [N -> loop [(K, D) -> if k <= 0 then last D else next (K - 1, cons (k - 1) D)] (n, {})] egelbot: internal:1:93:semantical:undeclared n b_jonas: egelbot: def iota = [N -> loop [(K, D) -> if k <= 0 then last D else next (K - 1, cons (k - 1) D)] (N, {})] b_jonas: egelbot: iota 7 b_jonas: egelbot: 47319 b_jonas: I probably made an infinite loop spruit11: Not exactly sure what that does but I like 'coalgebraic' loops more. spruit11: Oh right, moment. b_jonas: egelbot: data next b_jonas: egelbot: data last spruit11: egelbot: def ones = (1, [ _ -> ones ]) spruit11: egelbot: ones egelbot: (System:tuple 1 onesDOT0) spruit11: egelbot: tail ones egelbot: internal:1:2:semantical:undeclared tail spruit11: egelbot: [ (X,Y) -> Y ] ones egelbot: onesDOT0 spruit11: Oh, right. spruit11: egelbot: def ones = [ _ -> (1, ones) ] spruit11: egelbot: ones spruit11: egelbot: ones 0 egelbot: (System:tuple 1 ones) b_jonas: I probably did a stupid typo, but it's not easy to debug this spruit11: Right, that recursive can be used as an infinite list of ones. spruit11: Egel isn't user friendly. b_jonas: no, the code that I'm translating isn't user-friendly spruit11: Ah. ;) spruit11: Anyway, back later. b_jonas: fizzie: I'm not sure if I'll try to build this egel interpreter on HackEso, but if I will, then I'll ask for the libicu-dev package. is that big? the library itself is already installed, only the dev package isn't, it seems spruit11: My advice: Don't install. I am perfectly fine as is. zzo38: In 2600 it says: If you're referring to Spring having the IPv6 assignment of "2600" and not us, we definitely were not a part of how that played out. We'll have our revenge when IPv9 is implemented. b_jonas: spruit11: yes, but I want to experiment with the interpreter, and in a way that infinite loops don't kill it and suchlike zzo38: I thought that the next usable number of internet version numbering is ten and not nine, but, maybe I forgot or maybe they forgot or maybe we both forgot b_jonas: egelbot: ["a" -> 1 | X -> 0] "a" b_jonas: egelbot: ["a" -> 1 | X -> 0] "b" b_jonas: you can still run egelbot in paralllel to that spruit11: b_jonas: Oh. If you could get it to work otherwise I would want to see it! spruit11: egelbot: [ X Y -> 2 | X -> 1 | -> 0 ] 'a' spruit11: egelbot: [ X Y -> 2 | X -> 1 | -> 0 ] spruit11: b_jonas: There, the more esoteric part of Egel. b_jonas: spruit11: "otherwise"? b_jonas: other than what? b_jonas: egelbot: [-> 0] b_jonas: egelbot: let X = [1 -> 6 | -> 7] in {X 0, X 1} egelbot: (System:cons (7 0) (System:cons (7 1) System:nil)) b_jonas: that doesn't look right b_jonas: egelbot: let X = [1 -> 6 | X -> 7] in {X 0, X 1} egelbot: (System:cons 7 (System:cons 6 System:nil)) b_jonas: egelbot: let X = [1 -> 6 | -> 7] in X 1 spruit11: Nono, that's right. b_jonas: egelbot: let X = [1 -> 6] in X 1 spruit11: egelbot: [ -> 1 ] 2 spruit11: A zero-adic lambda. spruit11: Just rewrites to 1. b_jonas: egelbot: [_ _ -> 6] 0 1 b_jonas: egelbot: [Z Z -> 6] 0 1 egelbot: internal:1:5:semantical:redeclaration of Z b_jonas: egelbot: [_ _ -> 6 + _] 0 1 egelbot: internal:1:14:semantical:undeclared _ b_jonas: egelbot: P egelbot: internal:1:2:semantical:undeclared P spruit11: Hmm, kind-of right? spruit11: I shouldn't allow wildcards in expressions. That's a feature. spruit11: Will fix. b_jonas: what I don't understand is why def'ed variables are lowercase, as well as constructors, but local variables are uppercase. or is some of that optional? spruit11: Anything 'constant' is lowercase. spruit11: def f = [ X-> X ] spruit11: egelbot: def f = [ X-> X ] spruit11: egelbot: f b_jonas: def Pk1 = 1 b_jonas: egelbot: def Pk1 = 1 egelbot: internal:1:2:syntactical:combinator or operator expected spruit11: Right, it's a combinator which may rewrite. spruit11: egelbot: [ f -> 'hi' ] f egelbot: internal:1:11:lexical:error in char spruit11: egelbot: [ f -> "hi" ] f spruit11: I took it as far as I could go. I.e., you have some 'introspection' qualities. spruit11: egelbot: sin egelbot: internal:1:2:semantical:undeclared sin spruit11: egelbot: Math:sin egelbot: Math:sin spruit11: egelbot: using Math b_jonas: ok that's weird spruit11: egelbot: [ sin -> "using sin" ] sin egelbot: "using sin" b_jonas: egelbot: [0 -> 6| ] 0 egelbot: internal:1:11:syntactical:-> expected spruit11: I was looking for exploitable features in the operational model. But couldn't take it very far. b_jonas: egelbot: [0 -> 6| 1 X -> 7] 0 2 b_jonas: egelbot: [0 -> 6| 1 X -> 7] 1 2 b_jonas: egelbot: [0 -> 6| X 1 -> 7] 0 1 b_jonas: egelbot: [X 1 -> 7| 0 -> 6] 0 1 b_jonas: egelbot: [X 1 -> 7| -> 6] 0 1 b_jonas: egelbot: [1 -> 7| -> 6] 1 b_jonas: egelbot: let X = [1 -> 7| -> 6] in X 1 b_jonas: yeah, nicely esoteric b_jonas: that other thing too, where b_jonas: egelbot: (cons 2) nil egelbot: (System:cons 2 System:nil) b_jonas: egelbot: {2} egelbot: (System:cons 2 System:nil) spruit11: It's probably something to do with let. b_jonas: functions are clearly curried b_jonas: egelbot: [X Y -> 6] {2} egelbot: (Dummy33DOT0 (System:cons 2 System:nil)) b_jonas: egelbot: [X Y Z -> 6] {2} egelbot: (Dummy34DOT0 (System:cons 2 System:nil)) b_jonas: egelbot: [(X Y) -> 6] {2} egelbot: (Dummy35DOT0 (System:cons 2 System:nil)) b_jonas: egelbot: [(X Y Z) -> 6] {2} b_jonas: you can't match them as curried, you need to match the exact number of arguments b_jonas: that too is strange spruit11: Right. spruit11: Thinking about let X = [1 -> 7| -> 6] in X 1 b_jonas: egelbot: [1 -> 7 | -> 6] b_jonas: evaluates it nullary immediately b_jonas: egelbot: {[1 -> 7 | -> 6]} egelbot: (System:cons 6 System:nil) b_jonas: that too b_jonas: egelbot: ([1 -> 7 | -> 6],) egelbot: internal:1:19:syntactical:primary expression expected b_jonas: egelbot: tuple [1 -> 7 | -> 6] egelbot: (System:tuple 6) spruit11: egelbot: [ X -> X 1 ] [1 -> 7| -> 6] spruit11: Right, it fits if you understand the operational model. spruit11: It's eager. spruit11: This, [1 -> 7| -> 6], gets rewritten to 6 first, then applied. b_jonas: oh, that's a nice weasel phrase. "it fits if you understand the operational model." I'll try to tell that to my supervisor the next time something is broken at work b_jonas: fungot, do you fit if you understand the operational model? fungot: b_jonas: http://lambda-the-ultimate.org/ node/ 841??! b_jonas: `8-ball do you fit if you understand the operational model? HackEso: It is decidedly so. spruit11: No, it's just that you need to be very careful with zero-adic functions. spruit11: They might rewrite before you apply them. spruit11: It's a feature, not a bug! b_jonas: "very careful" as in I should probably never use them spruit11: Right. spruit11: Like I said, I took the operational model as far as I could get it to go. spruit11: I wasn't designing something to be actually used. spruit11: This is #esoteric, right? spruit11: Right. spruit11: The thought was: Lisp got very far by exploiting their operational model as far as they could get it. Let's try the same. spruit11: I wanted to explore what you can do. spruit11: Most of what you can do turned out to be bad. b_jonas: I think we can do this even without nullary functions: b_jonas: egelbot: [_ _ -> 2 | _ -> 1] 0 0 b_jonas: egelbot: ([_ _ -> 2 | _ -> 1] 0) 0 b_jonas: egelbot: let X = [_ _ -> 2 | _ -> 1] 0 in X 0 spruit11: Right! spruit11: Sure, but you can do it! spruit11: It's a bit of joke, the language. spruit11: You're supposed to laugh now! spruit11: But I agree, variadic lambda's don't really make sense. At least, I haven't found good use for them yet. spruit11: Still looking, though. spruit11: Well, I was. b_jonas: egelbot: unescape "\u006D\U0000006D\u0142\U00000142" egelbot: internal:1:13:lexical:error in string b_jonas: egelbot: unescape "\\u006D\\U0000006D\\u0142\\U00000142" egelbot: internal:1:2:semantical:undeclared unescape b_jonas: egelbot: unescape "\\u006D\\u0142" spruit11: There's only provisional support for unicode. egelbot: internal:1:2:semantical:undeclared unescape b_jonas: egelbot: unescape "\\u006d\\u0142" egelbot: internal:1:2:semantical:undeclared unescape spruit11: I am not sure what the lexer does on it. b_jonas: egelbot: unescape "\\u0061" egelbot: internal:1:2:semantical:undeclared unescape b_jonas: egelbot: unescape "\\x61" egelbot: internal:1:2:semantical:undeclared unescape b_jonas: egelbot: unquote "\\u0061" egelbot: internal:1:2:semantical:undeclared unquote b_jonas: egelbot: String:unquote "\\u0061" egelbot: internal:1:2:semantical:undeclared unquote b_jonas: egelbot: String:unescape "\\u0061" b_jonas: egelbot: String:unescape "\\u006D\\U0000006D\\u0142\\U00000142" egelbot: "mmłł" b_jonas: that works b_jonas: so it's possible to implement chr from that spruit11: egelbot: using String spruit11: I honestly forgot what unescape is supposed to do. spruit11: Lemme check. spruit11: Oh, right. That's from libicu. b_jonas: egelbot: [U->[F->F F[X->X]0 U][F B L U->[false->B|true->F F(B L)(L+1)U]L[F->F F[X->X]0 U][F B L U->[false->B|true->F F(B L)(L+1)U](L[F->F F()0 U][F B L U->[false->B|true->F F(B L)(L+1)U](L[F->F F tuple 0 U][F B L U->[false->B|true->F F(B L)(L+1)U](L 10 * X + Y] in 7 & 1 egelbot: internal:1:7:semantical:undeclared & b_jonas: egelbot: let (&) = [X Y -> 10 * X + Y] in (&) 7 1 egelbot: internal:1:7:semantical:undeclared & spruit11: What you can do is introduce a combinator which just doesn't rewrite. spruit11: If you really want it. b_jonas: are there infixes that behave like an uppercase variable? b_jonas: you know, so when I write say (X & Y) it should be parsed as ((&) X Y) where (&) is like an uppercase name that you can use as a local variable in lambdas b_jonas: but possibly for an infix other than & b_jonas: like, infixes starting with : or something kmc: in GHC Haskell you can use :& spruit11: Uhm, no. Guards are simplified expressions and parsed differently. spruit11: So, you can have [ (/) X Y -> 3 ] like guards, but that's about it. b_jonas: spruit11: even if I can't use the infix form in a pattern, only in an expression, my question stand b_jonas: spruit11: like can I write [(&) -> 3 & 7] [X Y -> 10*X+Y] b_jonas: egelbot: [(&) -> 3 & 7] [X Y -> 10*X+Y] egelbot: internal:1:4:semantical:undeclared & spruit11: I think so. b_jonas: where (&) should be a local variable spruit11: Oh, no. spruit11: Operators are always constants. b_jonas: so no local variable infixes spruit11: Just parsed differently. spruit11: There's no big difference between 'v' or '-' except they're parsed differently. And all uppercase are variables. spruit11: Right. b_jonas: egelbot: [F->F F tuple 2 111][F B L U->[false->B|true->F F(B L)(L+1)U](LF F tuple 2 111][F B L U->[false->B|true->F F(B L)(L+1)U](LF F tuple 2 111][F B L U->[false->B|true->F F([T->T T 2][T C->[true->B|false->[false->B L|true->T T(C+1)]C*C<=L]0==L%C])(L+1)U](LF F tuple 2 111][F B L U->[false->B|true->F F([T->T T 2][T C->[true->B|false->[false->B L|true->T T(C+1)](C*C<=L)](0==L%C)])(L+1)U](LF F 2 3 111][F B L U->[false->B|true->F F([T->T T 2][T C->[true->B|false->[false->B L|true->T T(C+1)](C*C<=L)](0==L%C)])(L+1)U](L"yes"|_->"no"]true egelbot: internal:1:5:syntactical:) expected b_jonas: egelbot: [F->F F 2 3 111][F B L U->[false->B|true->F F([T->T T 2][T C->[true _->B|_ false->B L|_ _->T T(C+1)](C*C<=L)(0==L%C)])(L+1)U](LF F 2 3 111][F B L U->[false->B|true->F F([T->T T 2][T C->[true _->B|false false->B L|false true->T T(C+1)](C*C<=L)(0==L%C)])(L+1)U](LF F 2 3 111][F B L U->[false->B|true->F F([T->T T 2][T C->[true _->B|false false->B L|false true->T T(C+1)](0==L%C)(C*C<=L)])(L+1)U](LF F 2 3 111][F B L U->[false->B|true->F F([T->T T 2][T C->[true _->B|_ true->T T(C+1)|_ _->B L](0==L%C)(C*C<=L)])(L+1)U](LF F tuple 2 111][F B L U->[false->B|true->F F([T->T T 2][T C->[true _->B|_ true->T T(C+1)|_ _->B L](0==L%C)(C*C<=L)])(L+1)U](LF F tuple 2 111][F B L U->[false->B|true->F F([T->T T 2][T C->[true true->B|_ true->T T(C+1)|_ _->B L](0==L%C)(C*C<=L)])(L+1)U](LF F tuple 2 111][F B L U->[false->B|true->F F([T->T T 2][T C->[_ true->B L|true _->B|_ _->T T(C+1)](0==L%C)(LF F tuple 2 111][F B L U->[true->F F([T->T T 2][T C->[_ true->B L|true _->B|_ _->T T(C+1)](0==L%C)(LB])(L+1)U](LF F tuple 2 111][F B L U->[true->F F([T->T T 2][T C->[_ true->B L|true _->B|_ _->T T(C+1)](0==L%C)(LB](LF F tuple 2 111][F B L U->[true->F F([T->T T 2][T C->[_ true->B L|true _->B|_ _->T T(C+1)](0==L%C)(LB](L not ( X == Y ) ] egelbot: internal:1:2:syntactical:combinator or operator expected spruit11: egelbot: def ~= = [ X Y -> not ( X == Y ) ] b_jonas: egelbot: def /= = (!=) b_jonas: egelbot: 2 /= 2 egelbot: System:false b_jonas: egelbot: 2 /= 3 egelbot: System:true b_jonas: egelbot: (2,2)<(2,1) egelbot: System:false b_jonas: egelbot: (2,2)<(2,3) egelbot: System:true b_jonas: egelbot: (2,2)<(1,3) egelbot: System:false b_jonas: egelbot: (2,2)<(3,3) egelbot: System:true b_jonas: egelbot: (2,2)<(3,1) egelbot: System:true b_jonas: egelbot: (2,2)<(1,1) egelbot: System:false spruit11: Yah, it's overlap because operators starting with '!' are supposed to be prefix, I think. spruit11: Didn't think of it. spruit11: Will fix. b_jonas: it looks as if these try to do a full lexicographical ordering. that's nice. b_jonas: egelbot: 2 < true egelbot: System:true spruit11: Yah, it does a best effort on basis of a table. spruit11: The table orders operators lexicographically where the first char defines the class (infix/prefix). spruit11: That way you can always introduce an operator without thinking to much about fixity numbers. int-e: FWIW, this is ridiculous: echo $(< 2020-02-04.txt wc -l) $(< 2020-02-04.txt grep -Ev 'egelbot' | wc -l) ==> 1424 622 spruit11: But the table isn't stable yet. spruit11: Oh, right. Shall I shut it down? spruit11: I can run the bot in #egel. int-e: Well from where I'm standing (I'm a bit grumpy though) it would be nice if the noisy experiments could happen somewhere else... highlights are still welcome here? b_jonas: spruit11: is there a simple comment syntax? b_jonas: egelbot: (1.5<2,2.0<2,2.5<2) egelbot: (System:tuple System:false System:false System:false) b_jonas: egelbot: (2<1.5,2<2.0,2<2.5) egelbot: (System:tuple System:true System:true System:true) b_jonas: int-e: I asked if I could talk to the bot on a different channel. not yet apparently. it should be possible to install the interpreter to HackEso, in which case I could talk to it on both channels. b_jonas: egelbot: (abs 2,abs 2.0) egelbot: (System:tuple (Math:abs 2) 2.000000000000000) b_jonas: egelbot: 2+2.0 egelbot: (System:+ 2 2.000000000000000) b_jonas: egelbot: (tofloat 2,toint 2,tofloat 2.0,toint 2.0,tofloat 2.5,toint 2.5) egelbot: (System:tuple 2.000000000000000 2 2.000000000000000 2 2.500000000000000 2) b_jonas: egelbot: (1/0,1.0/0.0) egelbot: exception(System:divzero) b_jonas: egelbot: (1.0/0.0) egelbot: exception(System:divzero) int-e: yeah fine. I'll be back in a couple of days then. b_jonas: that latter should probably give an infinity though b_jonas: egelbot: floor(1e199/3) egelbot: internal:1:9:semantical:undeclared e199 b_jonas: egelbot: floor(1.0e199/3) egelbot: (Math:floor (System:/ 1.000000000000000e+199 3)) b_jonas: egelbot: floor(1.e199/3) egelbot: internal:1:10:lexical:error in float b_jonas: egelbot: floor(1.e199/3.0) egelbot: internal:1:10:lexical:error in float b_jonas: egelbot: floor(1.0e199/3.0) egelbot: 3.333333333333333e+198 spruit11: Comments start with #. spruit11: I had C-style but got rid of that. b_jonas: egelbot: toint(floor(1.0e199/3.0)) # let me test comment syntax egelbot: -9223372036854775808 b_jonas: egelbot: (random,random,random) egelbot: (System:tuple 1681692777.000000 846930886.0000000 1804289383.000000) b_jonas: that is almost certainly a bug or a documentation bug spruit11: Which one? b_jonas: egelbot: [X->(X*X,X*X*X,X*X*X*X)]1.0e99 egelbot: (System:tuple 9.999999999999999e+197 9.999999999999999e+296 inf) b_jonas: the random spruit11: Right. That's a bug. spruit11: egelbot: Math:random egelbot: 1714636915.000000 spruit11: Weird. b_jonas: egelbot: say 3.2 egelbot: 3.200000000000000 b_jonas: egelbot: say (3.2,1) egelbot: (System:say (System:tuple 3.200000000000000 1)) b_jonas: egelbot: say {3.2,1} egelbot: (System:say (System:cons 3.200000000000000 (System:cons 1 System:nil))) spruit11: Ah, random() in the C-source probably links to something else. Only way I can explain it. spruit11: There's a better random here: https://github.com/egel-lang/egel/blob/master/lib/random/random.cpp spruit11: But you can't use that from the bot. spruit11: I forgot. Fix /= and random. There was something else? spruit11: Oh, right. Escaping in the bot. b_jonas: egelbot: [F->F F tuple 5][F B X->[true->F F(B(X/10)(X-1))|false->B](-20F F tuple 5][F B X->[true->F F(B(X/10))(X-1)|false->B](-20F F tuple 2 111][F B L U->[true->F F([T->T T 2][T C->[_ true->B L|true _->B|_ _->T T(C+1)](0==L%C)(LB](LF F tuple 5][F B X->;[true->F F(B X)(X- 1)|false->B](-20F F tuple 5][F B X->[true->F F(B X)(X- 1)|false->B](-20F F tuple 5][F B X->[true->F F(B(0.1*tofloat X))(X- 1)|false->B](-20F F tuple 5][F B X->[true->F F(B([P->P P 0(0.1*tofloat X)0.3 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2*U*V)|_->sqrt(abs(U*U+V*V))](S<12)]))(X- 1)|false->B](-20F F tuple 5][F B X->[true->F F(B([P->P P 0(0.1*tofloat X)0.3 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2*U*V)|_->sqrt(abs(U*U+V*V))](S<12)]))(X- 1)|false->B](-20P P 0 -0.8 0.3 0.0 0.0][P S X Y U V->[true->P(S+1)X Y(X+U*U-V*V)(Y+2*U*V)|_->(U,V)](S<10)] egelbot: (Dummy0DOT2 1 -0.8000000000000000 0.3000000000000000 -0.8000000000000000 (System:+ 0.3000000000000000 (System:* (System:* 2 0.000000000000000) 0.000000000000000))) b_jonas: egelbot: [P->P P 0 -0.8 0.3 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2*U*V)|_->(U,V)](S<10)] egelbot: (System:tuple (System:+ -0.8000000000000000 (System:- (System:* (System:+ -0.8000000000000000 (System:- (System:* (System:+ -0.8000000000000000 (System:- (System:* (System:+ -0.8000000000000000 (System:- (System:* (System:+ -0.8000000000000000 (System:- (System:* (System:+ -0.8000000000000000 (System:- (System:* (System:+ -0.8000000000000000 (System:- (System:* (System:+ -0.8000000000000000 (System:- (System:* (System:+ -0.8000000000000000 ( spruit11: It refuses to rewrite something. b_jonas: egelbot: [P->P P 0 -0.8 0.3 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2*U*V)|_->(U,V)](S<2)] egelbot: (System:tuple (System:+ -0.8000000000000000 (System:- 0.6400000000000001 (System:* (System:+ 0.3000000000000000 (System:* (System:* 2 0.000000000000000) 0.000000000000000)) (System:+ 0.3000000000000000 (System:* (System:* 2 0.000000000000000) 0.000000000000000))))) (System:+ 0.3000000000000000 (System:* (System:* 2 -0.8000000000000000) (System:+ 0.3000000000000000 (System:* (System:* 2 0.000000000000000) 0.000000000000000))))) spruit11: '(System:* (System:* 2 0.000000000000000) 0.000000000000000))' <- doesn't seem right. b_jonas: egelbot: [P->P P 0 -0.8 0.3 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->(U,V)](S<2)] egelbot: (System:tuple -0.2499999999999999 -0.1800000000000000) b_jonas: egelbot: [P->P P 0 -0.8 0.3 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->(U,V)](S<10)] egelbot: (System:tuple -2.551589956236643 -3.469983401598749) b_jonas: ] (+*:)^:(11)~ _0.8j0.3 b_jonas: egelbot: [P->P P 0 -0.8 0.3 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->(U,V)](S<11)] egelbot: (System:tuple -6.330173502603112 18.00794959165446) b_jonas: egelbot: [P->P P 0 -0.8 0.3 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->(abs U)+(abs V)<2](S<11)] egelbot: internal:1:88:semantical:undeclared abs b_jonas: egelbot: using Math b_jonas: egelbot: [P->P P 0 -0.8 0.3 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->(abs U)+(abs V)<2](S<11)] egelbot: System:false b_jonas: egelbot: [P->P P 0 -0.8 0.3 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->(abs U)+(abs V)<2](S<11)] egelbot: System:false b_jonas: egelbot: [P->(P 0.3,P 0.4)][P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->(abs U)+(abs V)<2](S<11)]-0.8 egelbot: (System:tuple (Dummy7DOT1 0.3000000000000000) (Dummy7DOT1 0.4000000000000000) Dummy7DOT3 -0.8000000000000000) b_jonas: egelbot: [P->(P 0.3,P 0.4)]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->(abs U)+(abs V)<2](S<11)]-0.8) egelbot: (System:tuple System:false System:false) b_jonas: egelbot: [P->(P 0.3,P 0.4)]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->[true->1|_->0]((abs U)+(abs V)<2)](S<11)]-0.8) egelbot: (System:tuple 0 0) b_jonas: egelbot: [P->[0 0->" "|0 1->"."|1 0->"'"|1 1->":"](P 0.3)(P 0.4)]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->[true->1|_->0]((abs U)+(abs V)<2)](S<11)]-0.8) b_jonas: egelbot: [P->(P -7)+(P -8)+(P -9)][X->[P->[0 0->" "|0 1->"."|1 0->"'"|1 1->":"](P 0.3)(P 0.4)]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->[true->1|_->0]((abs U)+(abs V)<2)](S<11)](0.1*tofloat X))] b_jonas: egelbot: [P->(P -6)+(P -7)+(P -8)+(P -9)][X->[P->[0 0->" "|0 1->"."|1 0->"'"|1 1->":"](P 0.3)(P 0.4)]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->[true->1|_->0]((abs U)+(abs V)<2)](S<11)](0.1*tofloat X))] egelbot: " " b_jonas: that doesn't look right b_jonas: egelbot: [P->[0 0->" "|0 1->"."|1 0->"'"|1 1->":"](P 0.3)(P 0.4)]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->[true->1|_->0]((abs U)+(abs V)<2)](S<11)]-0.6) b_jonas: egelbot: [P->[0 0->" "|0 1->"."|1 0->"'"|1 1->":"](P 0.3)(P 0.4)]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->[true->1|_->0]((abs U)+(abs V)<2)](S<11)]-0.2) b_jonas: egelbot: [P->(P 0.3,P 0.4)]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->[true->1|_->0]((abs U)+(abs V)<2)](S<11)]-0.2) egelbot: (System:tuple 0 0) b_jonas: egelbot: [P->(P 0.3,P 0.4)]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->(U,V)](S<11)]-0.2) egelbot: (System:tuple (System:tuple -0.2033919406239670 0.2129649016690347) (System:tuple -0.2238013223122670 0.2711989067998540)) b_jonas: FireFly: J-bot stopped reacting b_jonas: egelbot: [P->(P 0.3,P 0.4)]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->(abs U)+(abs V)](S<11)]-0.2) egelbot: (System:tuple 0.4163568422930016 0.4950002291121210) b_jonas: egelbot: [P->(P -6)+(P -7)+(P -8)+(P -9)][X->[P->[0 0->" "|0 1->"."|1 0->"'"|1 1->":"](P 0.3)(P 0.4)]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->[true->1|_->0]((abs U)+(abs V)<2.0)](S<11)](0.1*tofloat X))] egelbot: ":\' " j-bot: FireFly: 1 FireFly: b_jonas: wrong prefix :p spruit11: Uh. What are you trying to do? b_jonas: and, while it accepts that prefix ] in private message, I put a space before it accidentally b_jonas: spruit11: more numeric calculations. you'll see. b_jonas: there were just some typos in my code spruit11: I need food. b_jonas: egelbot: [P->[H->H H""5][H B X->[true->H H(B+P X)(X- 1)|_->B](-20[P->[0 0->" "|0 1->"."|1 0->"'"|1 1->":"](P 0.3)(P 0.4)]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->[true->1|_->0]((abs U)+(abs V)<2.0)](S<11)](0.1*tofloat X))] egelbot: " \'::::::::::\' \'\'\' " b_jonas: egelbot: [P->[H->H H""5][H B X->[true->H H(B+P X)(X- 1)|_->say B](-20[P->[0 0->" "|0 1->"."|1 0->"'"|1 1->":"](P 0.3)(P 0.4)]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->[true->1|_->0]((abs U)+(abs V)<2.0)](S<11)](0.1*tofloat X))] egelbot: '::::::::::' ''' b_jonas: good, good b_jonas: egelbot: [Y->[P->[H->H H""5][H B X->[true->H H(B+P X)(X- 1)|_->say B](-20[P->[0 0->" "|0 1->"."|1 0->"'"|1 1->":"](P Y)(P(Y+ 0.1))]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->[true->1|_->0]((abs U)+(abs V)<2.0)](S<11)](0.1*tofloat X))]]0.3 egelbot: '::::::::::' ''' b_jonas: egelbot: [H->H -0.9;H -0.7;H -0.5;H -0.3;H -0.1;H 0.1;H 0.3;H 0.5;H 0.7;H 0.9][Y->[P->[H->H H""5][H B X->[true->H H(B+P X)(X- 1)|_->say B](-20[P->[0 0->" "|0 1->"."|1 0->"'"|1 1->":"](P Y)(P(Y+ 0.1))]([P X Y->P P 0 X Y 0.0 0.0][P S X Y U V->[true->P P(S+1)X Y(X+U*U-V*V)(Y+2.0*U*V)|_->[true->1|_->0]((abs U)+(abs V)<2.0)](S<11)](0.1*tofloat X))]] egelbot: .. ..::.... egelbot: :::::::::: egelbot: ::::::::::::..::: egelbot: ::::::::::::::::::..... egelbot: .::::::::::::::::'' egelbot: '::::::::::' ''' egelbot: .:':::::::: b_jonas: yay! Mandelbrot fractal calculation spruit11: Or rather. spruit11: Awesome! b_jonas: it's basically translated from the Mandelbrot code in https://code.jsoftware.com/wiki/User:B_Jonas b_jonas: not exactly the same, but uses the same grid b_jonas: obviously it would have been nicer to write the top level loop as a loop too, rather than with a series of constants like that b_jonas: but I'm lazy now b_jonas: int-e: you wanted the highlights only, right? ^ Mandelbrot fractal calculation b_jonas: egelbot: [F->F F tuple 2 111][F B L U->[true->F F([T->T T 2][T C->[_ true->B L|true _->B|_ _->T T(C+1)](0==L%C)(LB](L" "|0 1->"."|1 0->"'"|1 1->":"] spruit11: I'll save your explanation to a text file and think about it tomorrow. b_jonas: and there's the inner loop, in which X and Y are constant, representing a complex number (X,Y), and we iterate for 11 steps, S is the step counter, and (U,V) is the complex number that changes b_jonas: in each step, I square the complex number and add (X,Y) to it, which is the normal Mandelbrot loop b_jonas: at the end of the inner loop, I extract a result from the final value of (U,V) with [true->1|_->0]((abs U)+(abs V)<2.0) b_jonas: that result is 1 if the point is in the Mandelbrot set, or 0 if it isn't b_jonas: I use 0 and 1 instead of true and false only to make the lookup table shorter to write b_jonas: the second loop also concatenates the result characters b_jonas: and the string that we get for that line is printed with the say function b_jonas: that's about all there is to it b_jonas: to choose the grid of X and Y samples, I stole the numbers from the J snippets spruit11: Right, I am putting it into the examples dir. spruit11: B. Jonas fine as a reference? b_jonas: no, that's a messed up username that I ended up with after migration from the older wiki. please use b_jonas instead. b_jonas: the older wiki was of a sort that wanted CamelCase pagenames, then those got converted to Camel Case b_jonas: when they copied the content to a mediawiki spruit11: Excellent. spruit11: You want a link to a page you have. Only thing I got now is "b_jonas (freenode)". Not really descriptive. spruit11: Unless you prefer anonymity. spruit11: Okay, I am going with what I have now. spruit11: https://github.com/egel-lang/egel/blob/master/examples/mandelbrot.eg arseniiv: the mandelbrot was really cool salpynx: agree, watching the live coding / language investigation unfold in the logs, the quine, and ending with the neat fractal code was very entertaining! salpynx: @metar nzwn lambdabot: NZWN 050030Z AUTO 17011KT 9999 FEW019/// SCT026/// 17/11 Q1016 NOSIG salpynx: Someone mentioned around NYE that there was no one from New Zealand in the channel. I was away from keyboards at that time so couldn't provide advance reports from 2020, but that's where I'm based. salpynx: Awkward timezone explains why I tend to miss the interesting chats. salpynx: @fungot what's new? fungot: salpynx: what's a python editor? lambdabot: Unknown command, try @list salpynx: @fungot A person who edits other people's python? I did some of that today. lambdabot: Unknown command, try @list fungot: salpynx: what could be an omgrofl command i guess) salpynx: That's a common reaction. lambdabot: What module? Try @listmodules for some ideas. salpynx: lambdabot: fungot is more ... fun to talk to, sorry. fungot: salpynx: an unspecified value." is the term " reference nets" in petri nets, and petri couldn't give a better answer, but in parts slightly outdated or implementation specific? zzo38: Now I made loading PK fonts and it can render individual glyphs (typesetting paragraphs is not yet implemented). zzo38: For typesetting text, will need to support ligatures, kerning, accented characters, multi-layer characters, paragraph line breaking, and what else should be needed? I may have missed some, although there is probably some things which is not needed. salpynx: RTL / LTR text? zzo38: I think in TeXnicard, there isn't a need to mix different text directions in the same paragraph (I also think even when used in other documents, it doesn't work so well, either). But still I should think it would be good to support different text directions, even if only one text direction per paragraph. zzo38: Since it is specifically for typesetting text on a card (e.g. Magic: the Gathering), that may tell what features are more important to want. zzo38: Also, due to having custom separations, if you want to render a page with custom separations into RGBA, there will need to be some way to define how to convert it. (There will also need to be the way to transmit the separations individually (in CMYK mode), when you want to print out the custom separations on a printer that supports separations.) zzo38: Due to limitations in the Ghostscript display device, the maximum number of custom separations is four (these four are in addition to the CMYK process colours, so there are eight separations in total). Do you expect this to be sufficient? You should tell me if you think you will need more separations for some reason, and if you know what reason. salpynx: where is the latest TeXnicard source? I found repo.or.cz but that is 7 years old. Interested because I am currently working on a number of esolang things involving .svg graphics, and have been using TeX for another, but mainly for maths typesetting. zzo38: salpynx: It is available at the following Fossil repository: http://zzo38computer.org/fossil/texnicard.ui zzo38: TeX is good for typesetting many kind of books whether or not you are using much mathematics. For doing vector graphics, PostScript works better; however, SVG is not an available output format in Ghostscript. salpynx: TeX doesn't seem to be able to do arbitrary, nested, text scaling (which makes sense because that's not a practical typsetting problem), so svg seemed better for some of the things I was trying to do, but there might be something I could learn from. zzo38: TeX is able to specify the scaling of fonts. For other effects, you can modify the METAFONT code for the fonts. zzo38: What exactly are you trying to do anyways? zzo38: Maybe then, we can see what to do about it. salpynx: The scaling problem was to for a 2D text substitution to replace say one character with a block of typeset text at a scaled to occupy the area of the original character, theoretically recursive to any level zzo38: O, OK. It should be possible to do that with TeX, I think (as long as the aspect ratio of the glyphs is maintained), although such a thing probably isn't going to work so well. TeX doesn't support arbitrary precision, but neither does PostScript, and I don't know if SVG does or not. salpynx: each of these text areas would have a position in its parent reference, but would itself potentially be a 'page' with its own layout. Effectively every symbol would be a character AND (potentially) a page salpynx: svg seems to be able to do arbitrary level nesting or scaling, which is why it seemed a better choice for extreme scaling. zzo38: TeX supports adding "specials" which you could use to represent whatever you want it to represent, such as links to other pages. PostScript doesn't, although I thought that they should add specials into level 4 PostScript, since it might be of use for some applications. salpynx: For the 2D replacement, something like TeX would be nicer for the concept, even if there is a limit to the nesting level I'd try to use it. zzo38: As I said, you could define a special for that purpose, and then use a specialized DVI viewer to use the page links to use arbitrary nesting/scaling. salpynx: One of the things I've not fully completed or written up properly uses svgs with user defined units in Planck lengths to represent the source code. I haven't found a render that displays the objects properly with visible lines, but all the control points are in the correct places, and are converted to cm correctly. They validate as compliant svg. zzo38: (And anyways, TeXnicard only produces raster output anyways, so is not suitable for what you are describing. But if you want to make up cards for games such as Magic: the Gathering or a card game you invent by yourself, and/or if you want to make the database of the cards too (and will want statistics and so on), and/or if you have used Magic Set Editor but want something better, then you should consider TeXnicard.) salpynx: I thought maybe the dc syntax would let arbitrary shapes and symbols be drawn on the cards (which is similar to another thing I was playing with), but from reading the docs, that looks like that has been completely replaced in the latest version zzo38: You can still do that using PostScript, which is still stack based programming. But neither version allows nesting to arbitrary levels. zzo38: (TeXnicard now uses a combination of PostScript and SQL, and also has something called EVALUATE code for some things (currently only gradients for pictures, but in future may do other stuff too).) salpynx: thanks for the 'special' tip I'll look into that. That looks like a way to get some basic output support using TeX, but still allowing for 'invisible' content to be present zzo38: Do you know any PostScript programming? PostScript can draw arbitrary shapes/symbols on the cards better than the old dc syntax could, although there are also many additional features specific to TeXnicard (such as PK font rendering, alpha transparency, etc). All PostScript commands which can draw graphics on the page still work. tswett[m]: Hey, anyone familiar with combinatorial game theory? salpynx: I'm not a Magic: the Gathering fan, but I like the idea of custom card games, and games in general tswett[m]: I'm wondering about a thing. Consider the game G = { Z | Z } — that is, either player may move to any integer. tswett[m]: Is G + G + 1 = 0? tswett[m]: Oh, I figured out the answer to my question in the process of typing it. The answer is no, it's equal to 1 and not 0. zzo38: salpynx: Well, TeXnicard isn't only for Magic: the Gathering. However, it is meant for card games (maybe someone can find a use for something else too, but I do not know of any). salpynx: No PostScript experience. I've only recently been teaching myself how to use LaTeX/TeX, which I like the idea of. PostScript doesn't excite me in the same way salpynx: tswett[m]: glad we could help! tswett[m]: Thanks. :D zzo38: tswett[m]: I have read about surreal numbers and how it is work with the game theory. By the rule of addition, I suppose, can figure out the answer of such question. tswett[m]: There's a simple proof that it can't be 0: if G + G + 1 were 0, that would mean that G + G = -1, but G + G is symmetrical about 0, so it can't be -1. tswett[m]: I think that in fact, G + G = 0 and so G + G + 1 = 1. zzo38: If a keyword action is added in Magic: the Gathering which applies to an object or player but successfully does nothing to that object or player (although things can trigger on it), what would such a keyword action be called? salpynx: zzo38: I just made some progress with \parboxes inside \scaleboxes (from the graphicx package) to get nested scaled text which gives me the basic output I need. I've tried 3 levels of nesting and it seems to work like I wanted. salpynx: Not sure how well this shares, but https://latexbase.com/d/af902ebe-99ac-411b-8d02-a8a4c4be4d9f is an example b_jonas: zzo38: does "target" count? b_jonas: if not, how about "choose a" wib_jonas: spruit11: question. how do you define a function in egel that is sometimes unevaluated depending on its arguments, but where I can't easily write the condition when it's evaluated as a pattern? wib_jonas: spruit11: for example, I want to define a function f so that if X is an even integer then (f X) evaluates to (X/2) but if X is an odd integer then (f X) remains unevaluated? wib_jonas: egelbot: [F -> (F String:length, F List:length)][F -> (F 7, F "7", F {7})] egelbot: (System:tuple (System:tuple (String:length 7) 1 (String:length (System:cons 7 System:nil))) (System:tuple (List:length 7) (List:length "7") 1)) myname: egel is horrible to search for if you are german because google will give you pages about the length of leeches wib_jonas: egelbot: [D -> (D (String:length "7"), D (String:length {7}), D (List:length "7"), D (List:length {7}))][(String:length _) -> "SL" | (List:length _) -> "LL" | (_ _) -> "A1" | V -> ("O", V)] egelbot: (System:tuple (System:tuple "O" 1) "SL" "LL" (System:tuple "O" 1)) wib_jonas: egelbot: (7/2, 10/3, (-10)/3) egelbot: (System:tuple 3 3 -3) wib_jonas: egelbot: [_ -> ] 0 egelbot: internal:1:8:syntactical:primary expression expected spruit11: wib_jonas: You can't. spruit11: It either rewrites a pattern, or not. I guess it could if I introduced guards but that turned out to be non-trivial. spruit11: For more or less exactly that reason, I estimate. spruit11: It needs to inspect something and then return on failure, that's non-trivial to implement. wib_jonas: ok, so even though builtin functions can do this, egel functions can't. if they want to return unevaluated, they should return some other unevaluated data. wib_jonas: egelbot: throw egelbot: internal:1:7:syntactical:primary expression expected wib_jonas: egelbot: throw 1 egelbot: exception(1) spruit11: egelbot: try 1 + throw "hi" catch [ X -> say X ] spruit11: ^syntax for try/catch and throw. wib_jonas: spruit: is there a nice way to test if a value is an integer (a float, a character, a string), or do I have to rely on things like whether String:length X is unevaluated like I tried above? wib_jonas: also, is there a nice way to test if something is an application, if I don't know the arity? wib_jonas: like a =.. function spruit11: The former I need to check, the latter, no. I could introduce combinators for that, though. spruit11: egelbot: [ X:int -> "yes" ] 1 egelbot: internal:1:4:semantical:undeclared int spruit11: Hmm, did I remove that? wib_jonas: there was some builtin called int wib_jonas: egelbot: int egelbot: System:int wib_jonas: egelbot: [ int X -> "i" | "n" ] 2 egelbot: internal:1:23:syntactical:-> expected wib_jonas: egelbot: [ int _ -> "i" | _ -> "n" ] 2 wib_jonas: egelbot: [ int _ _ -> "i" | _ -> "n" ] 2 wib_jonas: egelbot: [ int -> "i" | _ -> "n" ] 2 spruit11: egelbot: [ X::int -> "yes" ] 1 spruit11: Needed to check in the source. For some reason I changed it to a double colon. spruit11: egelbot: [ X::int -> "an int" | X::float -> "a float" ] 1.0 egelbot: "a float" spruit11: Allowing for an application is a good idea, btw. I'll see whether I can add that. spruit11: *testing on application. spruit11: Right, I'll add checks like [g::app -> .. | f::comb -> ..] and some extra introspection combinators. wib_jonas: egelbot: [T -> (T true, T {}, T {1}, T nop, T 7, T 7.0, T 'a', T "a", T (2 3))] [true->"b", false->"b", _::int->"i", _::float->"f", _::char->"c", _::string->"s", _->"o"] egelbot: internal:1:83:syntactical:] expected wib_jonas: egelbot: [T -> (T true, T {}, T {1}, T nop, T 7, T 7.0, T 'a', T "a", T (2 3))] [true->"b"| false->"b"| _::int->"i"| _::float->"f"| _::char->"c"| _::string->"s"| _->"o"] egelbot: internal:1:142:semantical:undeclared string wib_jonas: egelbot: [T -> (T true, T {}, T {1}, T nop, T 7, T 7.0, T 'a', T "a", T (2 3))] [true->"b"| false->"b"| _::int->"i"| _::float->"f"| _::char->"c"| _::str->"s"| _->"o"] egelbot: internal:1:142:semantical:undeclared str wib_jonas: egelbot: [T -> (T true, T {}, T {1}, T nop, T 7, T 7.0, T 'a', T "a", T (2 3))] [true->"b"| false->"b"| _::int->"i"| _::float->"f"| _::char->"c"| _->"o"] egelbot: (System:tuple "b" "o" "o" "o" "i" "f" "c" "o" "i") wib_jonas: spruit11: what was the typename for strings? wib_jonas: egelbot: {1|2} egelbot: internal:1:4:syntactical:} expected wib_jonas: no improper list input syntax :-) spruit11: egelbot: [ X::text -> "text" ] "hello" egelbot: "text" spruit11: egelbot: [ X::text -> "text" | X::char -> "char" ] 'a' egelbot: "char" spruit11: Right. wib_jonas: egelbot: [T -> (T true, T {}, T {1}, T nop, T 7, T 7.0, T 'a', T "a", T (2 3))] [true->"b"| false->"b"| _::int->"i"| _::float->"f"| _::char->"c"| _::text->"s"| (cons _ _)->"l"| (nil _)->"l"| _->"o"] egelbot: (System:tuple "b" "o" "l" "o" "i" "f" "c" "s" "i") wib_jonas: egelbot: {} egelbot: System:nil wib_jonas: egelbot: [T -> (T true, T {}, T {1}, T nop, T 7, T 7.0, T 'a', T "a", T (2 3))] [true->"b"| false->"b"| _::int->"i"| _::float->"f"| _::char->"c"| _::text->"s"| (cons _ _)->"l"| nil->"l"| _->"o"] egelbot: (System:tuple "b" "l" "l" "o" "i" "f" "c" "s" "i") wib_jonas: egelbot: [X::int -> ("i", X)] (2 3) egelbot: (System:tuple "i" (2 3)) wib_jonas: egelbot: [X::tuple -> ("t", X)] (2,3) egelbot: (System:tuple "t" (System:tuple 2 3)) wib_jonas: egelbot: [X::tuple -> ("t", X)] (2,3,4,5) egelbot: (System:tuple "t" (System:tuple 2 3 4 5)) wib_jonas: so this lets you recognize the head? wib_jonas: egelbot: [X::tuple -> ("t", X)] tuple spruit11: Oh, god. RIght. egelbot: (System:tuple "t" System:tuple) wib_jonas: egelbot: [X::tuple -> ("t", X)] {} spruit11: I forgot what it does that. egelbot: (Dummy48DOT0 System:nil) wib_jonas: egelbot: [X::tuple -> ("t", X)] 0 egelbot: (Dummy49DOT0 0) wib_jonas: egelbot: [X::int -> ("t", X)] (int "foo") egelbot: (System:tuple "t" (System:int "foo")) wib_jonas: egelbot: (int "foo") spruit11: Need to think it over whether I can change it then. Should be possible. egelbot: (System:int "foo") spruit11: Unsure why I made that decision. wib_jonas: recognizing the head can be useful. it's halfway to a =.. introspection that breaks down any application wib_jonas: lets you recognize arbitrary tuples and all that wib_jonas: egelbot: [A@(B,C) -> (A,B,C)] (3,0) egelbot: internal:1:4:syntactical:-> expected wib_jonas: (had to try that) spruit11: I think it's because I am worried about unary tuples like (1). spruit11: So, I programmed defensively to just return the type of the head. spruit11: I don't know whether unary tuples are ever introduced. I don't think so, but that would need testing. wib_jonas: egelbot: (1,) # the parser doesn't recognize them, egelbot: internal:1:5:syntactical:primary expression expected wib_jonas: egelbot: tuple 1 # but you can make them explicitly egelbot: (System:tuple 1) wib_jonas: I don't see what that has to do with this though spruit11: Oh, right. Sorry, not tuples. Compositions. spruit11: Or arrays, internally. spruit11: egelbot: (1 2) spruit11: Stuff like that. spruit11: egelbot: (1) spruit11: Right, there's something I didn't have time to think a lot about. What to do with (1)? wib_jonas: (1) is just 1 spruit11: Is it a unary composition/array, or just a constant? wib_jonas: it's not a composition wib_jonas: it's just a different way to write 1 spruit11: Right, but I have to absolutely certain it never introduces a unary composition in the runtime. spruit11: *to be wib_jonas: you may have unary compositions, but (1) isn't one spruit11: So, I programmed defensively around it, and just hoped that would turn out fine. spruit11: There are examples in the implementation (bytecode operators) I wasn't very certain. wib_jonas: egelbot: [_::1->"o"] 1 egelbot: internal:1:6:syntactical:lowercase expected wib_jonas: egelbot: [_::(1)->"o"] 1 egelbot: internal:1:6:syntactical:lowercase expected wib_jonas: egelbot: [_::_->"o"] 1 egelbot: internal:1:6:semantical:undeclared _ wib_jonas: egelbot: [_::tuple->"t"] tuple wib_jonas: egelbot: [_::tuple->"t"] (2,0) wib_jonas: egelbot: [_::tuple->"t"] {tuple,2} egelbot: (Dummy58DOT0 (System:cons System:tuple (System:cons 2 System:nil))) spruit11: egelbot: [ _::cons -> "cons" ] {1,2} egelbot: "cons" spruit11: Right, if (1 2 3) and (1 2) are compositions then why not (1)? spruit11: This is a case where the written syntax forces one to disambiguate. wib_jonas: spruit11: because this is a curried language, ((x y) z) is the same as (x y z) spruit11: Unfortunately, for the runtime model, that would mean checking loads of invariants to make sure a unary composition is never introduced. wib_jonas: you can introduce unary composition if you want, it's just that (1) shouldn't be one, because you want to use parenthesis to override precedence spruit11: Sure, but the point is that (1) shows you where the runtime model might disagree. Unary composition exists. spruit11: I.e., your syntax and ast might differ. wib_jonas: egelbot: 1 (2 3) spruit11: If the syntax would be unambiguous, I wouldn't have a problem. egelbot: (1 (2 3)) spruit11: Be back in an hour, shopping. wib_jonas: you can add custom syntax if you want to print or input unary compositions. the easiest is to add a custom builtin function for it, so (unary 1) is a unary composition, and ((unary 1 2) 3) is a binary composition (as opposed to ((1 2) 3) which is ternary) wib_jonas: so eg. [X Y->(X,Y)] ((unary 1 2) 3) would return ((1,2), 3) whereas [X Y->(X,Y)] (1 2 3) is unevaluated wib_jonas: no wait wib_jonas: [(X Y)->(X,Y)] ((unary 1 2) 3) would return ((1,2), 3) whereas [(X Y)->(X,Y)] (1 2 3) is unevaluated wib_jonas: and [(unary X) -> (0,X)] (unary 7) would return (0,7), but [(unary X) -> (0,X)] 7 is unevaluated, and so is [(unary X) -> (0,X)] (6 7) wib_jonas: only you represent it in memory as a function composition with one element, and add custom input and ouput syntax, just like how you have custom input syntax for tuples and lists, and should have custom output syntax for tuples and lists wib_jonas: fizzie: can you install the libicu-dev package so that I can try to build this egel interpreter https://github.com/egel-lang/egel/archive/master.zip on HackEso? spruit11: I don't think it's worth it. It's just a thing which pops up because Egel is untyped and the syntax is ambiguous. wib_jonas: fungot, please turn down the sun a bit fungot: wib_jonas: this is perhaps not abrupt enough. jumped off a bridge cpressey: hi rain1 rain1: hello cpressey nice to see you rain1: what's up rain1: hows it going kmc and LKoen LKoen: slowly and depressingly kmc: goes fine rain1: any new discoveries? rain1: or what is new to you ? kmc: about to do some mushroom cultivation work kmc: grain->grain and grain->agar transfers rain1: wow that's such a cool thing to do kmc: yeah! it's fun kmc: the main failure mode of mushroom cultivation is contamination kmc: any substrate which is good for growing mushrooms is also good for growing bacteria and mold kmc: so sterile technique is key kmc: i'm doing the transfers inside a still air box, which is just a transparent box with two holes cut in one side so you can reach your arms in kmc: like a glovebox without the gloves kmc: as the name implies the intent is to keep the air inside motionless so it will not carry contamination from one point to another b_jonas: so it has like curtains on the holes, but it's not vacuum sealed? kmc: mine doesn't even have that kmc: there are various levels of sophistication kmc: what i really want is a laminar flow hood/box kmc: in which you have a continuous sheet of HEPA-filtered air blowing smoothly (laminar) over the work surface kmc: and you position things so that the less clean cultures are downwind kmc: and you are selectively transfering the desired organism upwind kmc: but you can do fine work on a hobby scale with just a still air box b_jonas: a pressure gradient, like into a clean room or nuclear reactor. kmc: similar idea, yeah arseniiv: mushrooms! interesting! kspalaiologos: greets kspalaiologos: any ideas on golfing this C program: http://kspalaiologos.baselinux.net/doc/golf.c ? b_jonas: egelbot: [F->{F 0,F 1,F 2}][X->if 0X+Y] else [Y->10*X]] egelbot: (System:cons (Dummy61DOT2 0) (System:cons (Dummy61DOT1 1) (System:cons (Dummy61DOT1 2) System:nil))) b_jonas: egelbot: [F->{F 0,F 1,F 2}][X->if 0X+Y] else [Y->10*Y]] egelbot: (System:cons Dummy62DOT2 (System:cons (Dummy62DOT1 1) (System:cons (Dummy62DOT1 2) System:nil))) b_jonas: egelbot: List:map [F->F 7] ([F->{F 0,F 1,F 2}][X->if 0X+Y] else [Y->10*Y]]) egelbot: (System:cons 70 (System:cons 8 (System:cons 9 System:nil))) b_jonas: egelbot: List:map [F->F 7] ([F->{F 0,F 1,F 2}][X->if 0X+Y] else "zero"]) egelbot: (System:cons ("zero" 7) (System:cons 8 (System:cons 9 System:nil))) b_jonas: egelbot: ([F->{F 0,F 1,F 2}][X->if 0X+Y] else "zero"]) egelbot: (System:cons "zero" (System:cons (Dummy65DOT1 1) (System:cons (Dummy65DOT1 2) System:nil))) b_jonas: egelbot: ([F->{F 0,F 1,F 2}][X->if 0X+Y] else "zero" [Y->10*Y]]) egelbot: (System:cons ("zero" Dummy66DOT2) (System:cons ("add" (Dummy66DOT1 1)) (System:cons ("add" (Dummy66DOT1 2)) System:nil))) b_jonas: egelbot: ([F->{F 0,F 1,F 2}][X->if 0X+Y] else [Y->10*Y]]) egelbot: (System:cons Dummy67DOT2 (System:cons (Dummy67DOT1 1) (System:cons (Dummy67DOT1 2) System:nil))) b_jonas: egelbot: List:map [S::text F->(S,F 7)] ([F->{F 0,F 1,F 2}][X->if 0X+Y] else "zero" [Y->10*Y]]) egelbot: (System:cons (Dummy68DOT0 ("zero" Dummy68DOT3)) (System:cons (Dummy68DOT0 ("add" (Dummy68DOT2 1))) (System:cons (Dummy68DOT0 ("add" (Dummy68DOT2 2))) System:nil))) b_jonas: egelbot: List:map [(S::text F)->(S,F 7)] ([F->{F 0,F 1,F 2}][X->if 0X+Y] else "zero" [Y->10*Y]]) egelbot: (System:cons (System:tuple "zero" 70) (System:cons (System:tuple "add" 8) (System:cons (System:tuple "add" 9) System:nil))) b_jonas: egelbot: 40644>>3 b_jonas: egelbot: (-1)>>1 kspalaiologos: It's wrong b_jonas: no it's not, it's a proper signed right shift b_jonas: I wanted to see if it was a signed shift or an unsigned shift kspalaiologos: But the signs bit kspalaiologos: It should be 0x7F(FF)n kmc: whee, two jars of grain + 6 petris inoculated spruit11: egelbot: List:map [(S::text F)->(S,F 7)] ([F->{F 0,F 1,F 2}][X->if 0X+Y] else "zero" [Y->10*Y]]) egelbot: (System:cons (System:tuple "zero" 70) (System:cons (System:tuple "add" 8) (System:cons (System:tuple "add" 9) System:nil))) b_jonas: spruit11: anyway, those snippets I wrote, the prime lister and the mandelbrot, would probably have been much cleaner if I defined some functions with good names, like a rangeTo function, and used List:map b_jonas: or List:foldr as appropriate b_jonas: or whatever else, just proper abstractions spruit11: Nah, good enough. spruit11: Or awesome! spruit11: I liked them a lot b_jonas: Well, I have to relax. I sometimes need to write readable and maintainable code for work. spruit11: Go do that! b_jonas: helloerjan oerjan: hellonas oerjan: b_jonas: my theory has a corollary: the cause of belkar's very permanent death may be him trying to save the cat from the snarl b_jonas: oerjan: I don't think he'll live long enough to meet the snarl, but it's possible oerjan: we'll see. oerjan: of course it could still be years in real time until either event happens. oerjan: visiting explainxkcd was useful today, i learned about https://en.wikipedia.org/wiki/Spacecraft_cemetery b_jonas: oerjan: yeah, but it doesn't always tell all the important things about strips, and I'm too lazy to edit it b_jonas: oerjan: like, did you know that there's actually a James Bond movie in which the villain tries to kill James Bond with a giant centrifugue? so that strip mixes up two different James Bond movies (the other being Goldfinger, which is what the punchline refers to) oerjan: i think i learned that when i googled "i expect you to die" oerjan: well the goldfinger part oerjan: ...i guess i didn't, then. b_jonas: I knew about the goldfinger one b_jonas: and I think explainxkcd tells about Goldfinger too b_jonas: it doesn't tell about the other movie arseniiv: didn’t even know that related to actual Bond movies zzo38: I tried compressing some pictures with and without YCoCg, LZ77, Paeth, etc. It seems that YCoCg helps even if LZ77 is disabled. zzo38: If the picture is CMYK, then what loss transformation could be used? zzo38: s/loss/lossless/ zzo38: int encode_prediction(int p,int v) { if(p==v) return 0; if(p&128) v^=255,p^=255; if(v sure! and you can pass parameters to the encoders too. but I wouldn't call that experimental. zzo38: Yes, although there can be ways to modify the format and to do stuff which is not already a part of the format; such as, PNG doesn't have the LOCO-I predictor, doesn't have the function I mentioned above to encode predicted values, encodes the prediction types as part of the same data stream as the picture, doesn't support YCoCg, and doesn't have a rotation flag. zzo38: There is a simple way to calculate the length of huffed data without actually encoding the data: While more than one node remains, combine the two smallest nodes into a single node with their sum, and add that sum to a running total. WillGibson: thanks wib_jonas: fungot, are you an angel? fungot: wib_jonas: and there are web servers written in drscheme? should i read then? would take a certain mood to be more functional, and good spruit11: egelbot: try 1 + throw [ X -> say X ] catch [ F -> F "hello" ] wib_jonas: `pbflist https://pbfcomics.com/comics/the-flight/ HackEso: pbflist https://pbfcomics.com/comics/the-flight/: shachaf Sgeo quintopia ion b_jonas Cale kmc wib_jonas: egelbot: [A->[A->A]]7 8 fungot: ...unterminated (! test11: ^ul ("()S fungot: ...unterminated (! rain1: cant believe the monad reader is over test11: > putStr ((show(chr(ord '7')))++"test\n") lambdabot: test11: > ((show(chr(ord '7')))++"test\n") lambdabot: "'7'test\n" test11: > t="test" lambdabot: :1:2: error: lambdabot: parse error on input ‘=’ lambdabot: Perhaps you need a 'let' in a 'do' block? test11: > take 39(map(\x->117-(mod(div(read(concat(map(\x->show(ord x))"\STX?3T\NUL\SOH0\"c\STX.SV:MN=\SOH3\STX2)+\SOH'`3\STX!\SOHA[\SOH2\STXKZD\STXN\"&$\STX5\"\ETX\SOH"))-1)(117^(38-x)))117))(iterate(+1)0)) lambdabot: [50,51,49,53,49,32,83,101,103,109,101,110,116,97,116,105,111,110,32,102,97,1... test11: > take 39(map(\x->chr(117-(mod(div(read(concat(map(\x->show(ord x))"\STX?3T\NUL\SOH0\"c\STX.SV:MN=\SOH3\STX2)+\SOH'`3\STX!\SOHA[\SOH2\STXKZD\STXN\"&$\STX5\"\ETX\SOH"))-1)(117^(38-x)))117)))(iterate(+1)0)) lambdabot: "\STXusu\ACK\ETXu\STX\DC1r\STXp\SOHt\SOH\STX%\STX\ETX3\STX\EOTk\STXt\STXs\ST... zzo38: I thought of the way to store a canonical Huffman table: First start one bit telling if the largest code length is odd or even. And then store the number of codes of each length using truncated binary. And then store the values in truncated binary, alternating lowest and highest values, in order that the window is made narrow after each one. zzo38: I have not compared this working with other schemes, such as the way used in DEFLATE. Do you know how well it work compared with the other way? b_jonas: zzo38: I don't know how that part of Deflate or Jpeg works zzo38: There is an explanation of DEFLATE at: https://zlib.net/feldspar.html They mention comp.compression; perhaps I will post my idea to comp.compression and see if anyone responds. zzo38: Article <1581103940.bystand@zzo38computer.org> on comp.compression elaborates further on the idea I described above, and gives an example. zzo38: (I just posted it now; it might not have propagated yet.) zzo38: (The number at the beginning of the message ID is the time when I started writing the message, and not the time when it is sent.) moony: zzo38: i'm still unable to even figure out how to utilize usenet zzo38: moony: You will need to access a Usenet server; one free one is nntp.aioe.org. You will then need a NNTP client (or you can just communicate with it directly), to configure it to use it. There are also many Usenet archives available, including Google. zzo38: (One way to retrieve an article is to connect to the NNTP server and then type ARTICLE followed by the message ID (the < and > are part of it).) moony: thanks, finding a server was the stumbling block. zzo38: Yes, that was what I had a trouble with at first too, but now I found one. moony: doesn't seem to have any history data for groups like comp.m88k , oh well zzo38: Yes, most Usenet servers do not have a lot of retention, although you may be able to find archives elsewhere. If the archive includes the message ID of the article, then you can still post a follow-up article to that one. zzo38: (To post a follow-up you will also need the contents of the "References" header of the article, if it has one. If it isn't a follow-up message itself then it won't have such a header.) moony: google's archive should work well enough for such a thing zzo38: Yes, if that works for you, you can use that to find the article that you want. zzo38: (Unfortunately Google's archive is mangled.) moony: how so? zzo38: Stuff that it believes is a email address is mangled. oerjan: iirc the Very Galactic Array in schlock observes ordinary slow light, i'm not sure how that'll help here... zzo38: Someone I know asked me if there is a pre-processor for PHP which inlines all included files and strips all comments. Is there such a program? Ethan30: I heard fungot lives here, and had to see for myself fungot: Ethan30: edit formicidae.sh and add the result to what fnord pushes a onto the stack" instead of ' the strict definition of pun ais523, though fungot: ^ ; ^def ; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool oerjan: fungot: how does it feel to be famous fungot: oerjan: nobody needs more than 100mb x_x b_jonas: fungot, are you asbestos-free? fungot: b_jonas: use sara to leave him message... eh never mind), then i have to rain1: hello all arseniiv: how do you like an approach between no closures in a language at all and their full support (but that needs tricky things without GC, and not many people would like to implement them). Instead we don’t allow functions to capture variables, but we do allow constructing partially applied functions and passing them around. That should definitely be not as tricky? rain1: i guess it could work zzo38: I don't know. spruit11: I don't understand the difference.. spruit11: If you pass around partially applied functions wouldn't that imply some form of GC too? zzo38: Yes, that is what I thought. The difference seems to be that captured variables might be used and altered by multiple functions (and multiple calls to the same function), I think. zzo38: SQLite still uses ARCFOUR for random numbers, even though I have read somewhere that sometimes the period is too small. moony: This makes me think of just how tricky to design Rust's closures probably were moony: the language is built around tracking the lifetimes of everything, i'd imagine they could throw a wrench in the works kmc: yes, it was tricky kmc: https://doc.rust-lang.org/1.30.0/book/second-edition/ch19-02-advanced-lifetimes.html kmc: it's one of the reasons why they support bounds of the form "Type: 'lifetime" as well as "Type: Trait" kmc: meaning "everything in this Type is live for at least 'lifetime" kmc: it's not really unique to closures, because Rust closures (like C++ closures) are sugar for creating and populating an anonymous struct type with appropriate Fn/FnMut/FnOnce implementation kmc: and (like C++) higher order functions are either generic over that type (static dispatch) or take a "trait object" (dynamic dispatch) kmc: anyway it's a lot of complexity but integrating closures into this scheme of things is really powerful kmc: for example you can capture stack objects by reference without fear that the closure will escape that stack frame kmc: you can even build a "scoped threads" library around this, which allows you to spawn a thread that is guaranteed not to outlive that scope kmc: which is a nice starting point for very efficient data parallelism kmc: splitting work up among threads without having to copy the data that they will be working on kmc: although it's not perfect, I think the design of Rust came together really well kmc: it was designed by some very smart people who didn't give up on having the trifecta of safe, fast, convenient kmc: and the tradeoff is complexity kmc: but the complexity is pretty harmonious and most of it's there for a good reason kmc: unlike C++, which is similarly or more complex but for mostly accidental reasons kmc: but yeah closures in Rust are funky kmc: there's the lifetime-bounds-on-captures thing I just discussed kmc: and then there's the question of capture by move vs. capture by reference kmc: and then there's the three call traits Fn/FnMut/FnOnce which determine whether you can move *out* of the captures, and whether you can mutate them kmc: 'mut' in Rust really means 'exclusive pointer' not 'mutation-allowing pointer' kmc: you need exclusive access to mutate, but it's the exclusivity that actually drives so much of the language design kmc: it's a much stronger difference than &T vs const &T in C++ zzo38: If you have "abcdefhijk" then you can put into the order "akbjcidhef" what is such an ordering called? myname: like in the movie memento? zzo38: (That is, put the lowest element first, and then the highest element, and alternate the lowest and highest remaining element) arseniiv: If you pass around partially applied functions wouldn't that imply some form of GC too? => maybe not, if we would do something awful to pointers :D arseniiv: didn’t see there was answers, as no one mentioned me :P arseniiv: If you have "abcdefhijk" then you can put into the order "akbjcidhef" what is such an ordering called? => interesting thing, I haven’t seen a name for this zzo38: arseniiv: Have you seen this kind of ordering used with anything though? arseniiv: zzo38: maybe in a deck shuffling method, but I’m not sure that’s not my imagination b_jonas: arseniiv: I don't think that works as a deck shuffling method, because you can't quickly reverse a deck. it could be a pancake shuffling method, because you can reverse a stack of pancakes. arseniiv: I would name that a spiral ordering maybe, as one can draw an archimedean spiral with center somewhere near the midpoint of the string, and it will pass through the string’s characters in that order zzo38: It is used in a method of storing a Huffman tree that I invented, but I don't know how good it is compared with other methods. The values for each code length are stored in this order. zzo38: O, that is what it is called. arseniiv: b_jonas: now I want pancakes zzo38: I don't know what other uses there might be of such ordering zzo38: Do you have the ingredients to make pancakes? arseniiv: yeah, but it’s very late here and I’m going to take a bath and then sleep arseniiv: not so very late but still zzo38: O, OK. In morning you can make pancake then, if you like to do. arseniiv: it’s a good suggestion! arseniiv: well, bye b_jonas: fungot, do you eat pancakes fungot: b_jonas: i don't think you'd like grad cs? ( other than one .cpp arseniiv: fungot: do you bathe or are you intristically clean and shiny as bots go? fungot: arseniiv: wait a second arseniiv: maybe it’s because I again typoed “intrinsically” spruit11: egelbot: try 1 + throw ([X Y -> say X " "] "hello") catch [ F -> F "world!" ] spruit11: egelbot: try 1 + throw ([X Y -> say X " " Y] "hello") catch [ F -> F "world!" ] egelbot: hello world! spruit11: Just checking. b_jonas: what? how does that work b_jonas: egelbot: say "a" "b" "c" b_jonas: egelbot: (say "a") "b" "c" b_jonas: egelbot: say "a" b_jonas: egelbot: (say "a", 0) egelbot: (System:tuple System:nop 0) b_jonas: egelbot: [(X, Y) -> X "b"] (say "a", 0) b_jonas: that's evil b_jonas: variadic magic b_jonas: egelbot: [X -> X "b"] say "a" b_jonas: egelbot: [X -> X "b"] (say "a") b_jonas: egelbot: nop "a" b_jonas: nop as a head suppresses the printing? b_jonas: egelbot: [V -> (V, V)] (7; 6) egelbot: (System:tuple 6 6) myname: egel looks a lot like haskell imo zzo38: It looks like difference to me. b_jonas: myname: egel is not lazy, and it's weakly typed b_jonas: egelbot: [V -> "unused"] (say "side effect") egelbot: side effect egelbot: "unused" ais523: I can imagine a strict language that looks identical to Haskell, and is semantically very similar apart from being strict ais523: I guess I can imagine untyped Haskell too; does Haskell ever use its type system to figure out how to parse something? b_jonas: ais523: no, but Haskell uses typeclasses in a way that which class is chosen depends on the type of the result, not of the input arguments, like rust but unlike C++ spruit11: egelbot: try 1 + throw ([X Y -> say X " " Y] (2+2)) catch [ F -> F "?" ] spruit11: Just to be sure. spruit11: Yah, variadic magic _is_ evil when combined with eager semantics. b_jonas: > (maxBound - (0::Int8), maxBound - (0::Int)) -- ais523: try that in an untyped language lambdabot: (127,9223372036854775807) spruit11: But, ah well. ais523: b_jonas: I wasn't thinking in terms of existing programs still working, just in terms of the syntax and semantics making sense b_jonas: fizzie: can you please install libicu-dev onto HackEso inside, plus make it ignore egelbot while you're there? spruit11: b_jonas: nop is just the return value for "say". It needs to rewrite to some value. spruit11: b_jonas: Egel is impure, eager, weakly typed. ais523: spruit11: I think the "consensus" return value for that among computer scientists is to use an empty tuple ais523: there are a number of mathematical benefits to that particular value spruit11: ais523: Could be. I am not that informed. b_jonas: ais523: I don't think that's the consensus, that's just what Haskell uses ais523: OCaml too ais523: the reason is based on the properties of product and sum types, a type with only one possible value is a unit for a product type, thus a type with only one possible value is an empty tuple b_jonas: yes, but there can be multiple distinct types with only one possible value ais523: (likewise, the return value from functions that never return is an empty enum / a variant with no options, because it's the unit for a sum type) ais523: b_jonas: how do you distinguish the types? b_jonas: regardless of whether the language is weakly typed or compile time typed, you can use different types to distinguish isomorphic types for catching programming errors or making programming easier to think about ais523: I guess you just have to arbitraily say "these things belong to different types", mathematicians dislike that sort of arbitrary requirement ais523: because they're semantically identical after the language is compiled, they only affect type checking b_jonas: fungot, do lions eat watermelons? fungot: b_jonas: and got really scared :p. but, not a technical problem... altho my cat is in a kmc: Rust also uses an empty tuple kmc: if a function has no declared return type then it returns () kmc: and "return;" is short for "return ();" spruit11: It makes a bit more sense to use a special value in an untyped language. spruit11: egelbot: nop kmc: and a { ... } block which ends with a non-expression (e.g. a semicolon-terminated statement) produces the value () spruit11: egelbot: tuple egelbot: System:tuple spruit11: ^ because of that. kmc: (because blocks are expressions so it has to produce *something*) kmc: Rust's concrete syntax is all braces-and-semicolons but the abstract syntax is closer to ML than C kmc: seeing as most constructs are expressions and there are only a few kinds of non-expression statement ais523: Rust has a bit of a backwards compatibility mess, though, with various competing empty types ais523: there's ! which wasn't a type for ages, and various empty enums invented to serve as an empty type until ! became a type ais523: I think that's likely to get fixed eventually though kmc: Haskell doesn't have a standard empty type either, does it Taneb: Data.Void.Void is in base now kmc: and I don't think you can define it in standard Haskell Taneb: But that's a GHCism b_jonas: kmc: you can define it with the GADT syntax these days kmc: but that's not in standard Haskell, is it? b_jonas: I think it's like data Void where {} b_jonas: no clue b_jonas: doesn't matter, GHC is the de facto standard kmc: if it's a de facto standard then it should be a lot better documented kmc: and they should at least have a subset of extensions which are semi guaranteed not to change randomly b_jonas: kmc: it is, there's a user manual that explains all the extensions kmc: """explains"" kmc: "read this paper that we implemented a variant of half of" kmc: "and may completely change in the next minor version release" b_jonas: https://downloads.haskell.org/ghc/latest/docs/html/users_guide/glasgow_exts.html#declaring-data-types-with-explicit-constructor-signatures specifically b_jonas: kmc: well some extensions are like that, but some are pretty stable kmc: but there's no actual indication of which is which, is there? kmc: Rust has a lot of unstable features as well, and there's no Rust standard to begin with. but they're pretty careful about distinguishing stable from unstable features and not breaking backwards compat after something is declared stable b_jonas: and there's another extension to declare an empty enum, https://downloads.haskell.org/ghc/latest/docs/html/users_guide/glasgow_exts.html#data-types-with-no-constructors , but the GADT syntax is clearer kmc: GHC doesn't even comply with the Haskell spec anymore kmc: even with all extensions off kmc: there is valid Haskell 98 code that isn't accepted by GHC because they've defined stdlib stuff differently b_jonas: kmc: you know there's a haskell 2010 standard, right? www.haskell.org/onlinereport/haskell2010/ kmc: s/98/2010/ in what I said kmc: it's still true kmc: and Haskell 2010 is only a minor revision of Haskell 98 b_jonas: and yes, one of the important changes is in the class hierarchy where Monads are now a ... Functor? or an Applicative? I don't follow kmc: it didn't capture most of the GHC extensions in use in 2010 let alone whatever crazy shit people are using now b_jonas: "minor revision"? it's what documents a lot of nice stable what used to be GHC extensions to haskell 98 b_jonas: it doesn't want to revolutionize the language, but it gives you tools that you'll want to use without a standard anyway b_jonas: it only documents the more stable stuff, not every crazy experimental ghc extension b_jonas: and obviously it's like nine years old kmc: yes, it's a minor revision kmc: it included a small number of minor extensions to Haskell 98 kmc: there are not many large Haskell programs that required GHC extensions with 98 but are valid standard Haskell 2010 kmc: if they're going to have one language release per decade then they need to step up the pace a lot to be relevant at all kmc: and well kmc: they aren't relevant kmc: as you yourself said kmc: people don't code Haskell they code for GHC and whatever version happens to be available now b_jonas: kmc: yes. and that's not particularly different for rust either at the moment, until someone puts serious work into a rust frontend for gcc b_jonas: kmc: most current rust programs target the one rust compiler, and depend on how exactly it does type inference kmc: the difference is that they have a strong committment to not break code which compiles without extensions turned on kmc: and even run regression tests against the entire published ecosystem on crates.io b_jonas: kmc: except for when it depends on the type inference. but sure. b_jonas: anyway, I do understand that haskell isn't too relevant, and I wouldn't recommend to write programs in it, but that's mostly because it's this strange research language based on lazy pure garbage-collected you know what b_jonas: and I do like rust b_jonas: I'm just saying that some of your complaints seem unfair b_jonas: and yes, the rust devs do indeed to good job about backwards compatibility in practice, but you do get most of the backwards compatibility with GHC too, except for the stupid Monad superclass issue, which you can fix, unless you use one of the crazy experimental extensions zzo38: Is there a auto super class extension? b_jonas: dunno. you can try asking in #haskell. b_jonas: I mean b_jonas: dunno. you can try asking in #haskell . b_jonas: what's the fancy word for a permutation of order 2? b_jonas: an involution, right? b_jonas: `? involution HackEso: involution? ¯\(°​_o)/¯ oerjan: ^scramble abcdefhijk fungot: acehjkifdb oerjan: ^unscramble abcdefhijk fungot: akbjcidhef oerjan: ^unscramble abcdefhij fungot: ajbichdfe oerjan: zzo38: i don't know what it's called, but as you can see fungot has an implementation fungot: oerjan: i've heard slime is at http://www.cliki.net/ slime if you don't want to ais523: that thing looks like a bot to me ais523: is anyone checking to make sure it doesn't fix intentional misspellings? ais523: actually, the edit summaries aren't quite consistent enough to be a bot ais523: maybe some sort of cyborg moony: ais523: it's actually a tool i think moony: those summaries look familiar moony: never the less moony: they're not using it very wisely moony: ais523: some of those edits actually broke things, so i'm gonna clean up their mess moony: hmm, no nbm moony: they seem to be doing fine moony: i just misread a edit summary moony: good on them oerjan: schlock mercenary just managed to get a lot darker. int-e: oerjan: Welcome to the Twilight Zone? oerjan: oh no... oerjan: . o O ( the twilight zone is made of dark matter ) zzo38: The TeXnicard repository now includes a (incomplete) experimental picture compression in the file called piccomp.c. In many cases it is better than PNG, but PNG works better for indexed colour pictures. But it seems to be much better than PNG for blurry pictures; if a picture is blurred, it is a bit smaller when this program is used but much larger when encoded as PNG, in my tests. zzo38: But probably artwork for cards for Magic: the Gathering and the other cards games, I would think you will probably not use artwork with indexed colours anyways (even if you use only a few colours, it might be with paints or something like that, so indexed colours might not do, anyways; but, maybe I am wrong), although if it is wanted, a indexed colours mode could probably be added b_jonas: so if the BBC village wants to have the most pages created on the wiki, then why does he have so many alt accounts? int-e: isn't A still banned from page creation? int-e: Assuming that's who you're talking about. b_jonas: int-e: if he is, then that might explain it b_jonas: but I don't think he is int-e: Not sure how to check... I'm assuming only wiki admins can do that. b_jonas: in https://esolangs.org/w/index.php?title=User_talk%3AA&type=revision&diff=68355&oldid=68352 fizzie claims that he's removed page creation rights, but I'm not sure if he did int-e: b_jonas: I'm pretty sure he did. int-e: b_jonas: I also believe there was a temporary total ban soon afterwards, which has expired. But I'm not sure. b_jonas: oh indeed, https://esolangs.org/w/index.php?title=Special%3AUserRights&user=a int-e: Ah, thanks b_jonas: but I don't see why that doesn't appear in Special:Logs . the change should appear there b_jonas: in that case, ais523: ^ arseniiv: int-ellonas! arseniiv: oh I think I have something interesting to a Haskell-interested lot arseniiv: a proposal for local modules, though I don’t see where it was proposed for actual GHC people to see: https://github.com/goldfirere/ghc-proposals/blob/local-modules/proposals/0000-local-modules.rst arseniiv: I think the approach is interesting, though I’m unsure it totally rings true. But what I thought about an import system in a potential language, I see this proposal like my ponderings being fleshed out arseniiv: so if it won’t even come to Haskell in any way, I bookmarked it to take something from, if I would make a language to my tastes zzo38: Some time ago I invented a variant of Elias gamma coding independently. It is encoded as the same number of bits that Elias gamma coding uses, although the ordering is different. The first few numbers are coded as: 0 100 110 10100 11100 10110 11110 1010100 zzo38: Is there a name for this variant? tomaw: Global Notice] We'll shortly be rerouting a number of servers that will result in most users seeing large numbers of people reconnecting. zzo38: I now notice a few more things about the equations above; one is that Co cannot be -128 (since then R+Co will not be in range). zzo38: I figured out the answer of my question above (mainly by experiments), and clipping predictions into the valid range improves compression. zzo38: Do you like heart shape pizza? b_jonas: zzo38: I've never met one. I've eaten square shaped pizza, and it was good, but it's not really the shape that made it good but the toppings. b_jonas: sadly the pizza store that used to sell that for order has closed since b_jonas: fungot, do you like heart-shaped pizza? fungot: b_jonas: ( for missing the obvious about fnord) int-e: fungot ... fungot: int-e: so far i think this is the int-e: ^style fungot: Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc* iwcs jargon lovecraft nethack oots pa qwantz sms speeches ss wp ukparl youtube int-e: Odd, usually fungot's IRC style isn't so brief. fungot: int-e: explain what you mean) int-e: fungot! fungot: int-e: does that satisfy ' a nice fnord. but my programs are compiled? into what? int-e: now we're talking. int-e: Though I wouldn't go so far as calling the f-word "nice". int-e: Ah I like getting emails that bugs I had filed and forgotten about finally got fixed. b_jonas: fungot, do you eat balsamic vinegar on your salad? fungot: b_jonas: i really should make lisp more like perl... anything with the ellipse int-e: @metar lowi lambdabot: LOWI 151350Z 27006KT CAVOK 12/M03 Q1023 R08/19//95 NOSIG arseniiv: @tell cpressey quote: “Abstractions are purely binders, with no reduction rules associated with them, and abstract binding trees are simply equated up to alpha-equivalence.” ← this is what I had stumbled upon that time ago too; I notated them v.expr, v1.v2.expr etc. arseniiv: @tell cpressey [cont.] though I came up with that after reading a book where this syntax was used firsthand, albeit in an appendix and not being explained in detail lambdabot: Consider it noted. lambdabot: Consider it noted. oerjan: those boloceade people must have a little bit of ostrich in their amphibian makeup oerjan: i have taken to looking up english words in wiktionary when i'm not sure how they're pronounced. sadly, more and more often i discover the page is already in my url history... zzo38: Sometimes I also look. But, sometimes they do not mention how to pronounce (mainly because whoever wrote it, did not put it there yet) oerjan: and sometimes every imaginable pronunciation is listed as alternative oerjan: @metar ENVA lambdabot: ENVA 160720Z 21015KT 9999 FEW055 SCT064 BKN084 10/01 Q0969 TEMPO 21018G28KT RMK WIND 670FT 22017KT int-e: could be worse oerjan: i was mostly checking if it was unusually dry oerjan: because i seem to keep sneezing b_jonas: I was just looking if there are any esolangs inspired by something fungot said. there is at least one. https://esolangs.org/wiki/Or fungot: b_jonas: i'd say plt-scheme. he claims it is compatible with r5rs, i believe, gcc does allow that. jar describes it in the topic b_jonas: mostly because he just said "i really should make lisp more like perl" kritixilithos: fungot: are these the languages used in the original implementation of or? fungot: kritixilithos: a wide-eyed, innocent unicorn, poised delicately in a meadow filled with procedures, approx aren't they? i don't int-e: "poised delicately in a meadow filled with procedures" b_jonas: int-e: I think that refers to the ICFP 2007, which involves an interstallar garbage collector and cow-shaped aliens b_jonas: also, we're totally old and in the future, since that one was 12 years ago fizzie: https://ldapwiki.com/wiki/Certificate%20Validity%20Period "In coming up with the worlds least efficient machine-readable time encoding format, the ISO nevertheless decided to forgo the encoding of centuries, a problem which has been kludged around by redefining the time as UTCTime if the date is 2049 or ealier, and GeneralizedTime if the date is 2050 or later (the original plan was to cut over in 2015, fizzie: but it was felt that moving it back to 2050 would ensure that the designers were either retired or dead by the time the issue became a serious problem, leaving someone else to take the blame)." fizzie: Started wondering while reading some tcpdump/wireshark logs, and seeing that the certificate validity time looked to have a two-digit year. b_jonas: fizzie: that's horrible b_jonas: `dateu HackEso: 2020-02-16 16:47:59.679 +0000 UTC February 16 Sunday 2020-W07-7 b_jonas: although at least the fields are in the right order, unlike in some historical compatibility formats, like b_jonas: ``` date --help | sed -n 2p HackEso: ​ or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] b_jonas: liek that compatibility date format that date accepts without a switch (the better way to give it a date is to use the -s option) b_jonas: or that thing that date prints by default HackEso: Sun Feb 16 17:08:26 UTC 2020 oerjan: now i wonder what martellus sees in the kitchen cat int-e: it it food? oerjan: i doubt it hth int-e: tromp: I've been spending too much time trying to formalize that Goodstein sequence implementation in Isabelle/HOL. It's easy to define (just take the Haskell code). It's fairly easy to show that the translation to lambda calculus plus the fancy inlining is correct (which is probably the most error-prone step, so that's nice to hav). But I'm still exploring how to best show that it faithfully... int-e: ...implements the Goodstein sequence. (I have no doubt that it does, but the proofs get delicate and easily explode into a mess of case distinctions which I'd like to avoid.) Lykaina: i had a dream i found what was apparently the holy grail for trekkies (in the dream): Alexander Siddig's email addr. tromp: I assumed your computation was based on Cichon's 1983 paper that relates G(n) to the Hardy hierarchy, as noted in Wikipedia int-e: Hmm. I knew a bit of the theory (mainly the idea of replacing the base by \omega to get a termination proof). I also knew a bit about representing countable ordinals. int-e: I kind of filled in the gaps myself back then. int-e: And yes, this is intimately connected to the Hardy function. In fact if you are willing to accept a result that is larger by 2, you can save a couple of bits, by getting rid of the succ (succ n) thing, and starting at 3 instead of 1. tromp: you probably rediscovered Cichon's relation by yourself then tromp: yeah, those succs suck:-) tromp: i also revisited our programs on Laver tables tromp: those are even more fun than goodstein tromp: and have a natural killer big number (first time period exceeds 16) tromp: which takes almost exacty same number of bits as G(16) int-e: We have h_\alpha(n+2) - 2 = G_\alpha(n). The shift comes from the fact that the Goodstein sequence basically starts evaluation in base 3 (given the heriditary base 2 representation of the starting value in the form of an ordinal). But subtraction is awkward on Church numerals, so if you want G(16) rather than G(16)+2, it's easier to do the shift by 2 inside of the function... hence the two succ-s. tromp: i'm just as happy with G()+2 ... int-e: You came from a different angle, just trying to make big numbers. I wanted to have the Goodstein function. tromp: best to just define both variants int-e: 8 bits is what it saves int-e: and... pushed tromp: thanks int-e: The expw part looks funny in diagrammatic form. int-e: @free o :: r -> (r -> r) -> ((N -> r) -> r) -> r lambdabot: f . g = h . f => f . k = p . (.) f => f (o x g k) = o (f x) h p int-e: (These free theorems are one way to formally justify pulling applications into folds: consider f = ($ x)) int-e: Which after some renaming and rephrasing becomes (forall n. s n x = s' (n x)) ==> (forall f. l f x = l' (\i -> f i x)) ==> o z s l x = o (z x) s' l' int-e: And I've realized that I've been down this path (free theorems and optimizing folds) before. It's always fun to rediscover such things, though I'd prefer to remember them... wib_jonas: `fetch /hackenv/tmp/egel.zip https://github.com/egel-lang/egel/archive/master.zip HackEso: 2020-02-17 13:22:41 URL:https://codeload.github.com/egel-lang/egel/zip/master [145943] -> "/hackenv/tmp/egel.zip" [1] wib_jonas: ``` set -e; cd /hackenv/tmp; rm -rv egel-master HackEso: removed 'egel-master/lib/io/Makefile' \ removed 'egel-master/lib/io/channel.hpp' \ removed 'egel-master/lib/io/io.cpp' \ removed directory 'egel-master/lib/io' \ removed 'egel-master/lib/regex/regex.cpp' \ removed 'egel-master/lib/regex/Makefile' \ removed directory 'egel-master/lib/regex' \ removed 'egel-master/lib/fs/Makefile' \ removed 'egel-master/lib/fs/fs.cpp' \ removed directory 'egel-master/lib/fs' \ removed 'egel-master/lib/random/Ma wib_jonas: ``` set -e; cd /hackenv/tmp; unzip egel.zip HackEso: Archive: egel.zip \ 1074f699606e00ca151cf5a4916b9a4c052d1d9f \ creating: egel-master/ \ inflating: egel-master/.gitignore \ inflating: egel-master/LICENSE.md \ inflating: egel-master/NOTES.md \ inflating: egel-master/README.md \ inflating: egel-master/TODO.md \ inflating: egel-master/VERSION.md \ creating: egel-master/bugs/ \ inflating: egel-master/bugs/bug0-fixed.eg \ inflating: egel-master/bugs/bug wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master; make -C src &>> buildlog wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master; url buildlog HackEso: https://hack.esolangs.org/tmp/egel-master/buildlog HackEso: No output. wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master; rm -v src/desugar.o; make -C src &>> buildlog # the rm is just in case the compiler got interrupted during writing the object file HackEso: rm: cannot remove 'src/desugar.o': No such file or directory wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master; rm -vf src/desugar.o; make -C src &>> buildlog # the rm is just in case the compiler got interrupted during writing the object file HackEso: No output. wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master; ( rm -vf src/math.o; make -C src &>> buildlog ) HackEso: No output. wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master; ( cd src; c++ --std=c++17 -Werror utils.o lexical.o operators.o syntactical.o ast.o transform.o semantical.o desugar.o lift.o emit.o builtin/system.o builtin/math.o builtin/string.o builtin/evaluate.o builtin/thread.o egel.o -ldl -lpthread -licuio -licui18n -licuuc -licudata -o egel ) &>>buildlog HackEso: No output. wib_jonas: ``` set -e; f=/hackenv/tmp/egel-master/a0.eg; echo $'using System\n using Math\ndef main = (3+5)' > "$f"; cd /; /hackenv/tmp/egel-master/src/egel "$f" wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master; make -C lib/io LIBS="-ldl -lpthread -licuio -licui18n -licuuc -licudata" &>> buildlog HackEso: No output. wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master; mkdir stag; cp -vi lib/io/io.ego src/egel stag/ HackEso: cp: cannot stat 'lib/io/io.ego': No such file or directory \ 'src/egel' -> 'stag/egel' wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master; mkdir stag; cp -vi lib/io/io.o stag/ HackEso: mkdir: cannot create directory 'stag': File exists wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master; cp -vi lib/io/io.o stag/ HackEso: ​'lib/io/io.o' -> 'stag/io.o' wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master; rm -vf stag/io.o; cp -v lib/io.ego stag/ HackEso: removed 'stag/io.o' \ 'lib/io.ego' -> 'stag/io.ego' wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master/stag; echo $'using System\nusing Math\nusing IO\ndef main = print "hello, world"' > a0.eg; ./egel io.ego a0.eg HackEso: No output. wib_jonas: that's better, no longer an error, though it doesn't seem to print anything wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master; (for d in io fs random regex; do make -C lib/$d LIBS="-ldl -lpthread -licuio -licui18n -licuuc -licudata"; done) &>> buildlog HackEso: No output. wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master; cp -vi lib/*.ego stag HackEso: cp: overwrite 'stag/io.ego'? 'lib/fs.ego' -> 'stag/fs.ego' \ 'lib/random.ego' -> 'stag/random.ego' \ 'lib/regex.ego' -> 'stag/regex.ego' wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master/stag; echo $'using System\nusing Math\nusing IO\ndef main = (print "hello, world", 2)' > a0.eg; ./egel io.ego a0.eg HackEso: No output. wib_jonas: oh, I think it only loads io.ego, not the second argument wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master/stag; echo $'import "io.ego"\nusing System\nusing Math\nusing IO\ndef main = print(String:unescape"hello\\nworld")' > a0.eg; ./egel a0.eg HackEso: hello \ world wib_jonas: ^ that. I've been missing an import statement wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master/stag; echo $'import "io.ego"\nusing System\nusing Math\nusing IO\ndef main = (print "hello\\nworld)"' > a0.eg; ./egel a0.eg HackEso: a0.eg:6:1:syntactical:) expected wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master/stag; echo $'import "io.ego"\nusing System\nusing Math\nusing IO\n''def main = print "hello\nworld"' > a0.eg; ./egel a0.eg HackEso: hello \ world wib_jonas: ok, now I need a wrapper with a prelude, and install this thing spruit11: It worked? wib_jonas: spruit11: there's still the problem that the interpreter doesn't seem to accept an absolute path for the script filename. I wonder if you could fix that. wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master/stag; echo $'import "io.ego"\nusing System\nusing Math\nusing IO\n''def main = print "hello\nworld"' > a0.eg; ./egel /hackenv/tmp/egel-master/stag/a0.eg HackEso: input/output:file "/hackenv/tmp/egel-master/stag/a0.eg" not found wib_jonas: alternately, give a way to take the script from standard input, but without printing the prompts wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master/stag; echo $'import "io.ego"\nusing System\nusing Math\nusing IO\n''def main = print "hello\nworld"' > a0.eg; ./egel > >> >> >> >> >> wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master/stag; echo $'import "io.ego"\nusing System\nusing Math\nusing IO\n''def main = print "hello\nworld"\nmain' > a0.eg; ./egel > >> >> >> >> internal:1:32:syntactical:\ unexpected \ >> wib_jonas: ``` set -e; cd /hackenv/tmp/egel-master/stag; echo $'import "io.ego"\nusing System\nusing Math\nusing IO\n''def main = print "hello\nworld"'$'\nmain' > a0.eg; ./egel > >> >> >> >> >> hello \ world>> spruit11: Try ./a0.eg? spruit11: I'll look it up. wib_jonas: spruit: ./a0.eg did work, yes. but an absolute path didn't work. wib_jonas: spruit: this is a problem because . is in the search path by default, so you can't just execute scripts with any wd, you risk accidentally running files from the wd, which could be malicious. this is not such a big problmem on HackEso of course. spruit11: Oh, right. I'll check spruit11: You're correct. Bug. spruit11: I assume I only programmed it to look at extensions of paths. I.e., only look in the -I dirs. spruit11: See if I can add a clause. wib_jonas: thanks spruit11: The code is already there but I commented it out... spruit11: Ah, I get it. The .ego files need absolute paths to run a dlopen(). spruit11: Hmm, I just removed the comments and everything seems to work anyway? wib_jonas: spruit11: and .eg script files need an absolute path to open(). sure. spruit11: I pushed the commit. spruit11: Hope it didn't break anything. spruit11: Seems to work on my end. wib_jonas: oh wait no, ignore the above one line spruit11: egelbot: eval "[X->X]" 1 spruit11: That still seems to work too. spruit11: You should be fine. *Fingers crossed* spruit11: I guess a problem might arise since Egel's -I is different from the path dlopen() uses to search for files. spruit11: But it works for now. wib_jonas: thank you spruit11: I'll hack a check on '.ego' extensions later. int-e: . o O ( Pet peeve: People linking to PDFs on arxiv.org, rather than the abstract. ) b_jonas: `olist 1192 HackEso: olist 1192: shachaf oerjan Sgeo FireFly boily nortti b_jonas zzo38: Does PDF or DjVu allow specifying the first page number in the document? (If so, it doesn't seems to work.) (DVI supports up to ten 32-bit numbers associated with each page; normally the first one is the page number and the restare zero.) b_jonas: zzo38: PDF definitely does, I think it allows you to specify the page number of each page b_jonas: zzo38: I think postscript does this only with the EPS-like postscript comments that you use to make individual pages of the postscript viewable, not in postscript code by the way b_jonas: I don't know about DjVu b_jonas: zzo38: that said, many PDFs of course don't have the right page numbers. eg. the version of my MSC thesis that you find online has the page numbers shifted by one. fizzie: That's the case with my PhD thesis as well, because the printed page numbers don't count the cover, but the PDF includes the cover, and hasn't had the numbering corrected. fizzie: I think this isn't the PDF I made personally, because the cover was provided separately in the printing company's web thing, I think this PDF came out of their system. zzo38: How can I adjust the page numbers of a PDF? b_jonas: In my case I can only blame myself for this, I made the PDF b_jonas: zzo38: I don't know sadly fizzie: Well, I did make the printed numbers, I could've set those up properly. I didn't do the thing where the front matter is numbered with lowercase Roman numerals either. zzo38: You mention "the EPS-like postscript comments that you use to make individual pages of the postscript viewable", which I am guessing means DSC. I don't use DSC myself, because I use PostScript only as a programming language and not as a document storage format. Still I would think it to be sometimes useful to specify (depending on the output format), possibly by adding an entry named /PageNumber to the page device dictionary for this pu b_jonas: fungot, have you ever mowed the lawn on a golf court or raked the pebbles in a castle garden? fungot: b_jonas: i include the time zone in the date that it records ( actually the sign at the current rate everyone but the implementations that you'd usually use a calculator... b_jonas: fungot, would you like some tea? fungot: b_jonas: or just about anything can be disconnected from with fnord. i rarely do. i think he is spruit11: fizzie: Did you ever submit anything to Arxiv? I am a bit tempted to place my last musings there but it might be too lightweight. spruit11: I'll have another look at it. Maybe it's not so bad. b_jonas: spruit11: I haven't submitted them, but preprints of two of my research articles are on arXiv as a coauthor submitted them there. spruit11: Ah, right. Scientists abound. spruit11: b_jonas: Nice. spruit11: Maybe I'll try to figure out how this all works. oerjan: (although maybe not already in today's comic) zzo38: The "units" program on my computer does not understand the unit "AU" (although I could try to add it). int-e: zzo38: it knows it as 'au'. zzo38: O, I have to type in lowercase. OK olsner: I guess it was bound to happen eventually, but on my next job I'll actually be working with Django b_jonas: ``` set -e; cd /hackenv/wisdom; grep -REi 'this entry|d[yi]sentery|d[iy]ssent|descent' . HackEso: ​./wisdom:wisdom is always factually accurate, except for this entry, and, uh, that other one? It started with, like, an ø? \ ./.doorstop:You do not have the clearance necessary to view this entry. \ ./zarutian:You can trust Zarutian. He fixes, as an electronics technician, banal mistakes of electronics engineers. Rather cy(ph|b)erpunkish in outlook regarding the 'Net. Knows more about ocaps than you can imagine. Possesses an Icelandic unn b_jonas: ``` set -e; cd /hackenv/wisdom; grep -REi 'this entry|d[yi]sentery|d[iy]ssent|descent' . | tail -n+4 HackEso: ​./prooftechnique:prooftechnique né NihilistDandy: He was there some time ago. Maybe he'll come back. Maybe he's a nihilist, too. (Note from the Editor: He came back, and is a nihilist.) He is inevitably on a mathematical descent. \ ./soap:Soap is the main ingredient for the iridescent visions that internet startups sell to investors. \ ./issue:You do not have the clearance necessary to view this entry. \ ./elronnd:Elronnd desperately want b_jonas: ``` set -e; cd /hackenv/wisdom; grep -REi 'this entry|d[yi]sentery|d[iy]ssent|descent' . | tail -n+6 HackEso: ​./issue:You do not have the clearance necessary to view this entry. \ ./elronnd:Elronnd desperately wants this entry to say something. fizzie: olsner: You know what they say: it takes two to Django. fizzie: (Maybe that should've been "takes два to Django".) WonderedLamb256: Anybody wanna see my sample of brainfuck code WonderedLamb256: It’s a truth machine. Cale: `smlist http://www.supermegacomics.com/index.php?i=509 HackEso: smlist http://www.supermegacomics.com/index.php?i=509: shachaf monqy elliott mnoqy Cale Cale: very wholesome longname: My monitor's too matte. zzo38: Is it possible in PostScript to specify output page numbers using the "pdfmark" command? zzo38: (Also, do any PostScript interpreters that do not produce PDF support any subset of uses of pdfmark?) oerjan: ouch, it looks like clog/tunes has started deleting old logs shachaf: They are at http://tunes.org/~nef/logs/old/ oerjan: oh. well i've already found the esolangs.org version. oerjan: oh and they're zipped by year, i see, so even worse for linking zzo38: Also, I think I read somewhere that if you make DjVu output from PostScript then it tries to figure out automatically what to put into foreground/background. Is there a way to specify it by yourself? I don't really know if it make sense, as I don't know how the DjVu is working. int-e: tromp: Ooph, I pushed my formalization effort through. https://int-e.eu/~bf3/tmp/Goodstein.html int-e: (In Isabelle/HOL) int-e: tromp: The issue with these formalizations is that one has to make many intuitive steps more detailed. This is hard, and easily ends up in a mess. In this case the property that stood out to me was this: Consider the map that takes a number in hereditary base n and convertes it to heriditary base n+1. So for n=2, we map [0..8] to [0,1,3,4,9,10,12,13,27]. This map is monotonic. Obvious? Yeah,... int-e: ...kind of, but it's not immediately clear what the proof is. tromp: that looks like a major effort! tromp: does Isabelle have ascii alternatives for symbols like ⇩ ? int-e: tromp: It's actually a subscript (for the next character) in the editor. Could be replaced by _ for ASCII. int-e: tromp: If you look at the .thy file it's actually \<^sub> there... but nobody wants to type or read things like that, I believe. int-e: And yeah, it was quite some effort. I mean, you brought this up a week ago; I spent maybe a day wrapping my head around why things work, and realized that while I kind of trusted what I did, it was subtle enough to have gone wrong somewhere... so I foolishly started to formalize and it turned out to be a bit trickier than anticipated. tromp: link added to now capitalized Goodstein.hs in AIT repo int-e: I'm happy with the result though. Will probably clean up a bit more another day. int-e: Hmm, linking to my tmp directory isn't good :-/ int-e: And I haven't decided yet where to put it permanently. But I'll find a public place. tromp: feel free to add it to AIT repo tromp: i also link to Goodstein.hs from Wikipedia article int-e: And oops, I got the mapping wrong... should be [0,1,3,4,27,28,30,31,81]. b_jonas: int-e: are you fighting a dire hydra? int-e: b_jonas: Nah, I'm not in the mood for hydras, though that should fit into the same kind of ordinal number representation. int-e: b_jonas: Also the point here is that the Goodstein problem is reall subverted... we get termination for free (essentially) because it's all primitive recursion. (And the lambda calculus version is typeable in System F... again termination is free.) But proving that it actually implements the Goodstein iteration is where all the effort goes instead. b_jonas: ok. I don't actually know how Goodstein works. arseniiv: suppose you have a biased coin with probability of heads p. How do you find the most uniform distribution on a set {1, …, k} which can be realized by n flips of that coin (and assigning each outcome to 1, …, k)? I came to a greedy algorithm which ended up not optimal. Brute force search suffers from combinatorial explosion even for quite small n, k b_jonas: arseniiv: ooh, a box packing thing.... I don't know int-e: arseniiv: You should try this months' Ponder This problem, it has a similar (but more awkward) binpacking flavour. arseniiv: my algorithm was the following: sort coin flip outcomes from the most probable to the least probable and then assign each one in turn so that the current (incomplete) distribution has the largest entropy. Sadly, for (n, k, p) = (4, 2, 0.7) that gives a suboptimal answer arseniiv: int-e: ok I’ll chek that out. Though I’m not at all into packing, this one just popped from a discussion of making almost uniform distributions with a fair coin, which is far more trivial int-e: arseniiv: It's something that /should/ be NP-hard but will be awkward to actually prove NP-hard. int-e: (The biased coin problem.) b_jonas: int-e: why should it be NP-hard? arseniiv: I reckon if we have a completely arbitrary distribution instead of the binomial here, it could get tricky enough to be more obviously NP maybe int-e: Because bin-packing is NP-hard and I don't see how the additional structure that is there helps once you get close to the optimum. int-e: (Though obviously I may just lack imagination. My "awkward to prove" includes the possibility that it's actually false for some incredible reason.) arseniiv: ❝Your challenge this month is to design a game with 10 ladders and snakes altogether that will lead to an expected number of moves (rounded to the 6th decimal place) of 66.978705.❞ => omg arseniiv: no no no I won’t int-e: arseniiv: If you have an arbitrary partition of 1 into positive rational numbers, and you try to split them as closely into two parts as possible, that *is* NP-hard. int-e: tow parts -> two equal parts b_jonas: int-e: but isn't it more like a lattice small vector search problem, with the O(sqrt(n)) types of boxes around n/p counting? int-e: (Deciding whether you can get equality is NP-complete, cf. https://en.wikipedia.org/wiki/Partition_problem) b_jonas: not that that helps much arseniiv: int-e: oh, that’s pretty close! I’ll tell this to the person which was interested in the packing. I bet 3, 5 etc. parts aren’t becoming not NP-hard suddenly too int-e: b_jonas: The downside is that the number of pieces you're working with is exponential in the input size. b_jonas: int-e: yes, but they're identical pieces, like in a small vector search problem, or like in that problem we considered some months ago about finding a number close to a target with only small divisors b_jonas: I should get back to that problem some day by the way int-e: Hrm, we should probably make the output size the parameter here, not the input size (because the input is compressed too much. The output is a partition into k parts, each of which can be described by n (that's the number of different probabilities) n-bit numbers.) b_jonas: yes, but only sqrt(n) of those numbers can count b_jonas: well, O(sqrt(n)) b_jonas: all the other types of boxes are small even if you take all the available ones together b_jonas: because of Cramer's theorem b_jonas: probably doesn't matter in whether it's NP-complete though int-e: But they're still important for the optimum. arseniiv: hopefully I infected you with not too hopeless a problem b_jonas: hmm, maybe they can be if the optimum is exponentially close to 1/k so you have to approximate it very closely int-e: arseniiv: Nah, I think it *is* hopeless. b_jonas: but not if you only want to get within 10**(-6) of 1/k int-e: b_jonas: Clearly the results about approximability do not carry over. int-e: arseniiv: This should approximate very well, but except for small n I would not have big hopes of finding the optimum. And I'm not really sure how small "small" is here. arseniiv: that one counterexample I found was pretty close to the optimum, yeah arseniiv: though maybe there are very bad ones arseniiv: I’d be interested what could be done to find them BTW :D int-e: Presumably you can randomize a little and avoid the terrible cases. b_jonas: arseniiv: I think how you find good approximations for these is to type your program into an irc channel full of geeks and hope they'll spend their time to torture their computer to find a good approximation and tell you b_jonas: unless of course your inputs are too secret int-e: arseniiv: I guess you can also make a collection of micro-optimizations... different multisets of proabilities that have almost the same sum, that you can swap between the partitions to make small adjustments. int-e: arseniiv: At the very least this gives you something to burn CPU cycles with, in contrast to the greedy algorithm which will be over very quickly and never get a better answer. arseniiv: int-e: b_jonas: (and others interested) tangentially, how would you generate *truly* uniform variates (on that same finite set 1..k) having an infinite sequence of fair coin flips? I believed one simple algorithm using a binary tree is optimal until I calculated the entropy several years later. Now I was told another algorithm, quite a more efficient one as it seems, though I haven’t checked its optimality by myself. Could you reinvent it? (It shoul arseniiv: n’t be hard, I wonder why I hadn’t stumbled upon it myself) int-e: I also don't have the right theoretical background on this. b_jonas: arseniiv: that one is much easier int-e: arseniiv: Welcome to the wonderful world of entropy coding. b_jonas: arseniiv: if k is small, throw your coin k times, if it is head the rth time but tail all other k-1 times, then your result is r, otherwise retry b_jonas: you can do better than this, arithmetic coding is probably optimal int-e: arseniiv: You can get as close as you want to log_2(k) coin flips per choice, but at the expense of keeping increasingly bigger entropy buffers. arseniiv: b_jonas: no, I have no practical need to solve instances of this problem, though it’s a bit interesting as we can see here :) b_jonas: arseniiv: or in practice, flip the coin enough times to get more than 256 bytes of entropy (how many times that is depends on p), feed that to initialize a cryptographic pseudonumber generator, and use the outputs of that for all the randomness you want to generate arseniiv: (that was an answer to the older post) arseniiv: arseniiv: that one is much easier => yeah I know! :) b_jonas: you can get an arbitrarily long random output, nobody will notice that the seed is only 256 bits long b_jonas: s/256 bytes/256 bits/ b_jonas: you can use 512 bits if you're particularly paranoid b_jonas: yeah, probably better use 512 bits arseniiv: arseniiv: You can get as close as you want to log_2(k) coin flips per choice, but at the expense of keeping increasingly bigger entropy buffers. => yeah that’s what that newer algorithm needs, but it has a neat and very concise description which is yet to be spoiled here int-e: I'd use some kind of range coder. b_jonas: so if you know that your coin's probability is between 1/4 and 3/4, then the entropy of one flip is at least 0.81 bits, so flip 632 times and use that as your seed b_jonas: if you need only a few random outputs and you want fewer coin flips, then use arithmetic coding to approximate a real number with smaller and smaller intervals after each coin flip, and generate your randomness from that real number when the output is certain b_jonas: there's probably also a way to use arithmetic coding if you don't know the exact value of p, but it might be ugly b_jonas: at least I don't know a way how you'd do that optimally, but I could probably do it optimally by constant factor of flips b_jonas: the easiest way to do that is do pairs of coin flips, and rethrow for HH and TT b_jonas: and then use the HT and TH results as your fair flip input arseniiv: the description they gave me was this (for the fair coin): use the coin to divide a line segment into halves etc., and when the small subsegment is completely inside of one of k equal parts of the original segment, you have one value; then you divide that part into k parts and continue further. So I definitely see the need for unbounded entropy storage but the description is quite neat in itself b_jonas: arseniiv: yes, that's how arithmetic coding works arseniiv: if you need only a few random outputs and you want fewer coin flips, then use arithmetic coding to approximate a real number with smaller and smaller intervals after each coin flip, and generate your randomness from that real number when the output is certain => ah you wrote it all already arseniiv: so now I see how that person gave an answer almost immediately: they probably knew arithmetic coding too arseniiv: and then use the HT and TH results as your fair flip input => definitely cool thing b_jonas: arseniiv: https://www.perlmonks.com/?node_id=877696 has an example code for arithmetic coding with big integers; practical algorithms for compression are trickier because they want to stream the output without having to keep all the input or all the output in memory int-e: arseniiv: this is a sketch: http://paste.debian.net/1131148/ b_jonas: it's an example of steganographic typography: I use a known pre-existing text verbatim, and hide information in its presentation int-e: arseniiv: (It's not code because I (deliberately) didn't include the policy for balancing refills and making choices.) b_jonas: sadly it's not very impressive because I managed to hide very little information arseniiv: and the suboptimal algorithm was to have a set of nodes, just one node at the start, and double them for each coin flip, giving an answer if there are enough nodes, and continuing with the remainder of nodes otherwise. That gives quite a heavy entropy loss for some k but it runs in constant space arseniiv: (when optimizing, that relates to a binary digits of 1/k) int-e: arseniiv: I made this a sketch because I wanted to make the following point: This procedure does not waste any entropy, except in the FAIL case in make_choice. So in the long run, you need to minimize the probabilitiy of that case... which means you want to make the range large. The downside of having a large range is startup cost, and, if you overdo it, expensive computations. But in practice,... int-e: ...keeping r around 2^32 * max(k) is probably good enough. int-e: (*waves hands*) arseniiv: I just can’t absorb too much at once :D arseniiv: wait, is it bounded-space after all? arseniiv: int-e: ^ int-e: Well, that's up to the user... int-e: if you just keep adding flips you'll run out of space. int-e: (imagine an arbitrary precision type for "int") arseniiv: ah so it’s unbounded if we don’t want to lose entropy but if we can afford it I see, that can be simplified to the tree algotihm even arseniiv: but that one isn’t good because we can’t tweak it, and a normal arithmetic coding is tweakable arseniiv: (that one = tree one I described) int-e: what do you want to tweak? arseniiv: and your sketch shows how we can keep the buffer the length we want int-e: You can get arbitrary (rational) distributions with a fairly minor tweak... int-e: The add_flip can be generalized to adding an arbitrary uniform choice (multiply by number of choices c instead of 2; add value [0.. what do you want to tweak? => the amount of entropy we discard/keep. I just hadn’t thought about that at all before I wrote here, as I wasn’t aware in full that we need to have unbounded space to not lose entropy int-e: And then you can sample a distribution described by frequencies [a1,a2,...,an] in three steps: 1) sample uniformly from a1+a2+...+an choices. 2) find corresponding ak and offset into ak chunk (in range [0.......d@.....@.......° ..........@.8..@.........@.......@.@.....@.@.....À.......À............................@......@............................................@.......@.....4......4........ ............8......8`.....8`.....H......X........ ...........P......P`.....P`.....à.......à..........................@.....@.....D.......D..............Påtd...X......X@.....X@.....,.......,.. moonythehammer: `cat ../bin/print_args_or_input HackEso: ​#!/bin/bash \ if [ "$#" -gt 0 ]; then printf '%s\n' "$*"; else cat; fi moonythehammer: i wonder what the oldest files in hackeso are moonythehammer: `ls -lah .. HackEso: ls: invalid option -- ' ' \ Try 'ls --help' for more information. moonythehammer: `` ls -lah .. HackEso: total 344K \ drwxr-xr-x 22 1000 1000 4.0K Dec 31 16:10 . \ drwxr-xr-x 13 0 0 0 Feb 20 01:58 .. \ drwxr-xr-x 2 1000 1000 12K Jan 4 13:28 bin \ -rw-r--r-- 1 1000 1000 101 Jul 19 2019 canary \ drwxr-xr-x 2 1000 1000 4.0K Apr 7 2018 emoticons \ drwxr-xr-x 2 1000 1000 4.0K Apr 7 2018 esobible \ drwxr-xr-x 3 1000 1000 4.0K Jul 8 2017 etc \ prw-r--r-- 1 1000 1000 0 May 4 2019 f \ drwxr-xr-x 2 1000 1000 4.0K Jul 8 201 moonythehammer: `` ls -a .. HackEso: ​. \ .. \ bin \ canary \ emoticons \ esobible \ etc \ f \ factor \ .hg \ .hg_archival.txt \ .hgignore \ hw \ ibin \ interps \ karma \ karma.orig \ karma.rej \ le \ lib \ misle \ paste \ ply-3.8 \ quines \ quotes \ share \ src \ stuff \ tmflry \ tmp \ wisdom fizzie: It's a bit hard to tell, because the whole thing's been moved a few times. moonythehammer: yea, but could go through the mercurial. How long has it been up anyways fizzie: The "initial import" currently in the version control isn't the actual initial import either. moonythehammer: as a whole moonythehammer: like how old is hackego fizzie: It was born around June 2009. fizzie: So that's, what, 10 and a half? fizzie: https://esolangs.org/wiki/HackEso#History -- very briefly. fizzie: The alleged "Initial import" is from 2012-02-16, and already contained quite a bit, http://hack.esolangs.org/repo/file/e037173e0012 fizzie: You could argue that in a sense some of the ibin/! stuff are likely the "oldest files", because those were copied over from EgoBot, which predates HackEgo. longname: `wisdom HackEso: ​gaspatsjo//gaspatsjo is a norwegian soup, which died out due to a lack of hot summer days longname: Hm, neat fizzie: `wisdom wise HackEso: ​wise//Uninstalling software installed by the Wise Installation Wizard is unwise. It's neither clockwise nor counterclockwise nor otherwise. fizzie: What I wonder is how many copies of most of this exists. I've got 6, I think. moonythehammer: `gforth HackEso: Gforth 0.7.3, Copyright (C) 1995-2008 Free Software Foundation, Inc. \ Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license' \ Type `bye' to exit moonythehammer: oh hey fizzie: There's a bit of a wrapper as well. fizzie: https://hack.esolangs.org/repo/file/tip/bin/forth -- auto-adds the 'bye'. fizzie: `forth 2 2 + . longname: So what would happen if you rm -rf /'d? fizzie: Depends on how exactly rm behaves with things. Assuming it actually removed the bits you have access to, it should get caught by a "have all the files been removed" check, because that's such a common idea. Assuming you circumvented that, it would commit a revision with no files, which either someone would `revert, or I'd do the same in an out-of-band manner because we don't need any more "delete and fizzie: then restore all" revisions in the history, they break a bunch of "who's edited this file" features. fizzie: https://hack.esolangs.org/repo/file/tip/share/scowrevs are pretty much all mass-edits of that kind. longname: That is a really cool bot. fizzie: `` cut -d: -f1 ../share/scowrevs | while read r; do hg log -r $r -T '{desc}\n'; done | paste HackEso: https://hack.esolangs.org/tmp/paste/paste.1511 fizzie: (All kinds of nonsense people have done.) zzo38: Is it possible to configure Firefox so that selecting links in PDFs does not change the zoom level? b_jonas: also rm in gnu coreutils specifically has a check to catch that, because it's usually a typo b_jonas: so you need a switch to override that HackEso: 1/1:39) If I ever made a game where you jabbed bears ... I'd call it jabbear. \ 773) i think in general it's against nature for an animal to be a boat int-e: Hmm, two good ones, lucky me. int-e: `wisdom HackEso: ​5318008//5318008 is a famous number because its reciprocal is 1.8804033389946 * 10^-7, which when upside down on a calculator spells L-vOI * ghGGBEEEOhOBB.I. int-e: `cwlprits 5318008 HackEso: rdocöc rdocöc rdocöc int-e: `wisdom HackEso: ​aglist//aglist is update notification for the Abstruse Goose webcomic. http://abstrusegoose.com/ int-e: `wisdom HackEso: ​nnection//Nnections are measured in millibytes per siemens. int-e: fungot: spam? fungot: int-e: it is the subjunctive tense, whereas " fnord" 2)) int-e: @metar lowi lambdabot: LOWI 200850Z 26005KT 9999 SCT075 BKN110 02/M01 Q1025 NOSIG int-e: That's all. FireFly: @metar essb lambdabot: ESSB 200850Z 14005KT 9999 BKN012 01/00 Q1012 R12/09//95 int-e: The frequency at which Debian sid (unstable) gets updates of all the texlive packages is ridiculous. int-e: (That may be unfair. What *is* ridiculous is the ratio between download size and the amount of data that changed.) int-e: https://mobile.twitter.com/Foone/status/1229641258370355200 is funny. cpressey: hi int-e cpressey: Do you like ABTs? Taneb: Algebraic Beta Types? cpressey: Abstract Binding Trees Taneb: What are they? cpressey: ABTs are ASTs with names-binders in them. Two ABTs are considered equivalent modulo alpha-conversion. Taneb: OK, I'm with you int-e: cpressey: I'm not sure I like them. I know them under the name "nominal datatypes" though (or maybe they're different but then I don't know what the difference is) from the Isabelle bubble. And there's a nominal rewriting concept in the rewriting bubble, too. int-e: I think I actually prefer nameless things (like de Bruijn indices) when push comes to shove. wib_jonas: cpressey: vegetarian alligator families? int-e: (Obviously when there's nominal rewriting, there's also nominal logic.) wib_jonas: anyway, I manipulate a lot of data structures that have arrays with the order (or keys) not mattering, and indexes into such arrays from other tables wib_jonas: like database row identifiers and such wib_jonas: of course sometimes I choose an order or key that matters, for convenience, or an order that doesn't semantically matter but makes debugging easy if I show the data in order int-e: "order of keys doesn't matter" <--> "associative maps (or arrays)" cpressey: int-e: I think of ABTs as sort of being "nameless in spirit". Converting ABTs to de Bruijn-indexed trees before comparing them (or doing other operations on them) sounds like possible way to implement them. wib_jonas: sometimes I even need to compare small sets of things in which the order doesn't matter, in which case I sort them before comparing int-e: cpressey: I don't know, it just seems so shallow. int-e: (I've googled a bit and it appears that the focus with ABTs is really more of a design pattern to work with terms modulo alpha, resolving names when they are constructed and giving back fresh names when they're navigated. But even that design pattern is very shallow.) sixyears: howdy folks int-e: `relcome sixyears HackEso: ​06sixyears: 13Welcome 04to 07the 08international 09hub 02for 06esoteric 13programming 04language 07design 08and 09deployment! 02For 06more 13information, 04check 07out 08our 09wiki: 02. 06(For 13the 04other 07kind 08of 09esoterica, 02try 06#esoteric 13on 04EFnet 07or 08DALnet.) sixyears: heck yeah, thank you sixyears: I've got this urge thats been floating around my head for a few years to make an esoteric programming language, but I'm honestly too inexperienced. figured i could soak up some information here via osmosis sixyears: is the channel inactive because its like 0 in the morning or is it just usually lowkey? FireFly: eh it varies, it's not super busy all the time int-e: There are logs (see the topic) so you can judge for yourself. FireFly: it's like most IRC channels I guess sixyears: ah, gotcha. Peak houra and trough hours sixyears: makes sense int-e: You can always talk to fungot ;) fungot: int-e: how faulty! :p. google did indeed have sufficient context? sixyears: Fungot how has your day bern sixyears: been* oops int-e: is Fungot case-sensitive? sixyears: Seems like it int-e: Apparently so, I didn't know that. sixyears: fungot do a jig fungot: sixyears: because i'm investigating a strange bug in my brainfuck... and many of those are ds sixyears: cool jig kmc: hi sixyears sixyears: Hey! What's up? wib_jonas: welcome, sixyears. sixyears: Thank you wib_jonas: sometimes the channel is mostly silent for days, like it's been now; sometimes we have like three different long involved conversations at the same time kmc: sixyears: not a lot. I'm in Denver at the moment so it's not even 5AM yet sixyears: It's honestly 4 am for me and i am running purely on water bottles kmc: er, not even 6AM kmc: it's not even 5AM at home in San Francisco, which is the time zone my VPS is set to sixyears: fair! I'm also near sf sixyears: cupertino is cool its a small town with like a billion apple buildings wib_jonas: ``` for z in America/New_York America/Los_Angeles; do TZ="$z" date +"%Y-%m-%d %H:%M:%S %Z %z"; done HackEso: 2020-02-20 07:41:26 EST -0500 \ 2020-02-20 04:41:26 PST -0800 sixyears: okay a billion is exaggerating but sixyears: there are at least 50 sixyears: i know because they are numbered int-e: Have you checked that all the numbers are in use? sixyears: no honestly! theyre not all in order sixyears: instead of numbering with a grid system where one street is one range of numbers i think they have it like... a central building with rings of numbered ones? Maybe? sixyears: its just weird sixyears: like u got 17 next to 25 sixyears: in what world did u think that was okay int-e: It could be the order in which they were built. Maybe even re-using numbers to make it messy. Or not, to inflate the numbers. sixyears: Its very strange i should figure out the pattern someday when its not 4 AM sixyears: good point int-e wib_jonas: is there a map? int-e: (build <--> acquired) wib_jonas: and do you work in one of those buildings? sixyears: i think it may be in order they were built sixyears: because some streets are in order like chunks of them and then you go right forward and theyre not anymore sixyears: which implies that they were probably built together sixyears: anyway no i do not work at apple sixyears: i just ended up passing by their weird spiderweb most days sixyears: wib_jonas: the city is called Cupertino if you have access to google maps rn sixyears: though some of their buildings enter neighboring cities such as saratoga and sunnyvale wib_jonas: https://en.wikipedia.org/wiki/File:Apple_Campus_2_aerial_Aug_2016.jpg looks weird wib_jonas: "Apple Park is the corporate headquarters of Apple Inc., located at One Apple Park Way in Cupertino, California, United States. ... Its circular design, courtesy of Norman Foster, and extreme scale have earned the structure a media nickname “the spaceship"." https://en.wikipedia.org/wiki/Apple_Park sixyears: Looks like crop circles but not fame sixyears: IDK folks something abt apple just gets me in the uncanny valley sixyears: There's one on uh... Results Way 16 that is also constructed kinda interestingly sixyears: man i sound like a conspiracy theorist right now sixyears: watch out guys the evil building's gonna get you and feed your soul to the archons wib_jonas: no no, only a good building would serve the archons by feeding Apple people's souls to them wib_jonas: an evil building would sacrifice them to demon princes to power some devious spell sixyears: I don't imagine apple people souls have very high nutritional value anyway sixyears: shits like cardboard kmc: I'm taking the train back to the Bay Area sixyears: ogh, rad! sixyears: Safe travels kmc: it's supposed to be one of Amtrak's most scenic routes kmc: trains in America are not a fast way to travel, but they're very enjoyable j4cbo: zephyr? kmc: choo choo kmc: it's real pretty kmc: we're going through the foothills right now kmc: they're covered in fresh snow Taneb: Been a while since I was in a train in the mountains Taneb: Actually... last October, in the Appenines Taneb: It was raining so the view wasn't great fizzie: Every time someone mentions the California Zephyr, it reminds me of the Unsong book. arseniiv: BTW I have finished reading that one a month or so ago LKoen: bonsoiir b_jonas: hello LKoen LKoen: hello b_jonas arseniiv: hello all too! b_jonas: hi arseniiv kmc: it's another 2's day kmc: 2020-02-20 kmc: 2 bad it's not also Tuesday kmc: "just press 2 for a while" b_jonas: `datei HackEso: 2020-02-20 22:00:12.819 +0000 UTC February 20 Thursday 2020-W08-4 b_jonas: yeah, it would have to say W??-2 for a Tuesday b_jonas: ok, let's see this once more from the start b_jonas: `fetch /hackenv/tmp/egel.zip https://github.com/egel-lang/egel/archive/master.zip HackEso: 2020-02-20 22:16:43 URL:https://codeload.github.com/egel-lang/egel/zip/master [145944] -> "/hackenv/tmp/egel.zip" [1] b_jonas: ``` set -e; cd /hackenv/tmp; rm -rv egel HackEso: rm: cannot remove 'egel': No such file or directory b_jonas: ``` set -e; cd /hackenv/tmp; rm -rv egel-master HackEso: removed 'egel-master/lib/fs.ego' \ removed 'egel-master/lib/io/Makefile' \ removed 'egel-master/lib/io/channel.hpp' \ removed 'egel-master/lib/io/io.cpp' \ removed 'egel-master/lib/io/io.o' \ removed directory 'egel-master/lib/io' \ removed 'egel-master/lib/regex.ego' \ removed 'egel-master/lib/regex/regex.cpp' \ removed 'egel-master/lib/regex/Makefile' \ removed 'egel-master/lib/regex/regex.o' \ removed directory 'egel-master/lib/regex' \ re b_jonas: ``` set -e; cd /hackenv/tmp; rm -rv egel-master HackEso: rm: cannot remove 'egel-master': No such file or directory b_jonas: ``` set -e; cd /hackenv/tmp; unzip egel.zip HackEso: Archive: egel.zip \ a518d99f704f07f90f507eb59ef904b40dd785dd \ creating: egel-master/ \ inflating: egel-master/.gitignore \ inflating: egel-master/LICENSE.md \ inflating: egel-master/NOTES.md \ inflating: egel-master/README.md \ inflating: egel-master/TODO.md \ inflating: egel-master/VERSION.md \ creating: egel-master/bugs/ \ inflating: egel-master/bugs/bug0-fixed.eg \ inflating: egel-master/bugs/bug b_jonas: ``` set -e; cd /hackenv/tmp/egel-master; make -C src LIBS="-ldl -lpthread -licuio -licui18n -licuuc -licudata" &>> buildlog b_jonas: ``` set -e; cd /hackenv/tmp/egel-master; url buildlog HackEso: https://hack.esolangs.org/tmp/egel-master/buildlog HackEso: No output. b_jonas: ``` set -e; cd /hackenv/tmp/egel-master; (rm -fv src/lift.o; make -C src LIBS="-ldl -lpthread -licuio -licui18n -licuuc -licudata") &>> buildlog HackEso: No output. b_jonas: ``` set -xe; cd /hackenv/tmp/egel-master; (rm -fv src/thread.o; make -C src LIBS="-ldl -lpthread -licuio -licui18n -licuuc -licudata") &>> buildlog HackEso: ​+ cd /hackenv/tmp/egel-master b_jonas: ``` set -xe; cd /hackenv/tmp/egel-master; ./src/egel -v HackEso: ​+ cd /hackenv/tmp/egel-master \ + ./src/egel -v \ egel 0.0.x \ Copyright (C) 2016 M.C.A. (Marco) Devillers b_jonas: ``` set -xe; cd /hackenv/tmp/egel-master; (for m in io fs random regex; do make -C lib/$m LIBS="-ldl -lpthread -licuio -licui18n -licuuc -licudata"; done) &>> buildlog HackEso: ​+ cd /hackenv/tmp/egel-master b_jonas: ``` set -xe; cd /hackenv/tmp/egel-master; (mkdir -p stage; cp -v src/egel lib/*.ego stage/) &>> buildlog HackEso: ​+ cd /hackenv/tmp/egel-master b_jonas: ``` pwd HackEso: ​/hackenv/tmp spruit11: Neat. Egel works? b_jonas: don't know yet, I'm still trying spruit11: Well, let me know if you need anything. b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; >a0.eg echo $'import "/hackenv/egel-master/stag/io.ego"\nusing System\nusing Math\nusing IO\n''def main = print "hello\nworld"'; /hackenv/egel-master/stag/egel a0.eg HackEso: bash: /hackenv/egel-master/stag/egel: No such file or directory b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; >a0.eg echo $'import "/hackenv/egel-master/stage/io.ego"\nusing System\nusing Math\nusing IO\n''def main = print "hello\nworld"'; /hackenv/egel-master/stage/egel a0.eg HackEso: bash: /hackenv/egel-master/stage/egel: No such file or directory b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = print "hello\nworld"'; "$l/egel" a0.eg HackEso: hello \ world b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = [F -> F 0; F 1; F 2; F 3; F 4; F 5][K -> print(tostring K+"\n")]'; "$l/egel" a0.eg HackEso: a0.eg:5:59:semantical:undeclared tostring spruit11: toString? spruit11: Unsure. b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = [F -> F 0; F 1; F 2; F 3; F 4; F 5][K -> print(totext K+"\n")]'; "$l/egel" a0.eg HackEso: 0 \ 1 \ 2 \ 3 \ 4 \ 5 b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = [F -> F 0; F 1; F 2; F 3; F 4; F 5][K -> print(totext(K*(K+1)/2)+"\n")]'; "$l/egel" a0.eg HackEso: 0 \ 1 \ 2 \ 6 \ 8 \ 15 b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = [F -> F 0; F 1; F 2; F 3; F 4; F 5][K -> print(totext(K*K)+"\n")]'; "$l/egel" a0.eg HackEso: 0 \ 1 \ 4 \ 9 \ 16 \ 25 b_jonas: wait, that previous one looked wrong b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = 2*(2+1)/2'; "$l/egel" a0.eg b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = 2*(2+1)'; "$l/egel" a0.eg b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = (2*(2+1))/6'; "$l/egel" a0.eg b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = ((2*(2+1))/6)'; "$l/egel" a0.eg b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = ((2*(2+1))/2)'; "$l/egel" a0.eg b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = (2*(2+1))/2'; "$l/egel" a0.eg b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = 2*(2+1)/2'; "$l/egel" a0.eg spruit11: Did I get priorities wrong? b_jonas: you set the associativity of multiplication and division wrong, yes spruit11: Right. b_jonas: multiplications and divisions should be parenthisized from left to right b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = [F -> F 0; F 1; F 2; F 3; F 4; F 5][K -> print(totext((K*(K+1))/2)+"\n")]'; "$l/egel" a0.eg HackEso: 0 \ 1 \ 3 \ 6 \ 10 \ 15 spruit11: See if I can fix that. b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = [ForN B -> ForN 0 [K -> print(totext((K*(K+1))/2) + "\n")]] ([U -> U U 0][U K N -> ]) HackEso: bash: -c: line 0: unexpected EOF while looking for matching `'' \ bash: -c: line 1: syntax error: unexpected end of file b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = [ForN B -> ForN 0 20 [K -> print(totext((K*(K+1))/2) + "\n")]] ([U -> U U][U K N B -> if K < N then (B K; U U (K + 1) N B) else nop]) HackEso: bash: -c: line 0: unexpected EOF while looking for matching `'' \ bash: -c: line 1: syntax error: unexpected end of file b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = [ForN B -> ForN 0 20 [K -> print(totext((K*(K+1))/2) + "\n")]] ([U -> U U][U K N B -> if K < N then (B K; U U (K + 1) N B) else nop])' HackEso: No output. b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = [ForN B -> ForN 0 20 [K -> print(totext((K*(K+1))/2) + "\n")]] ([U -> U U][U K N B -> if K < N then (B K; U U (K + 1) N B) else nop])'; "$l/egel" a0.eg HackEso: ​(mainDOT1 (mainDOT5 mainDOT5)) b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = [ForN -> ForN 0 20 [K -> print(totext((K*(K+1))/2) + "\n")]] ([U -> U U][U K N B -> if K < N then (B K; U U (K + 1) N B) else nop])'; "$l/egel" a0.eg HackEso: 0 \ 1 \ 3 \ 6 \ 10 \ 15 \ 21 \ 28 \ 36 \ 45 \ 55 \ 66 \ 78 \ 91 \ 105 \ 120 \ 136 \ 153 \ 171 \ 190 b_jonas: let's use your fancy let statement spruit11: Pffrt. Not sure what goes wrong. Maybe it'll need a lot of thought. 2*3+1=7. 2*3/2=1... spruit11: Could be an error in parsing. spruit11: Bit experimental. b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = let ForN = [U -> U U][U K N B -> if K < N then (B K; U U (K + 1) N B) else nop] in ForN 0 20 [K -> print(totext((K*(K+1))/2) + "\n")]'; "$l/egel" a0.eg HackEso: 0 \ 1 \ 3 \ 6 \ 10 \ 15 \ 21 \ 28 \ 36 \ 45 \ 55 \ 66 \ 78 \ 91 \ 105 \ 120 \ 136 \ 153 \ 171 \ 190 b_jonas: let me find the prime factoring thingy b_jonas: no, not prime factoring b_jonas: prime testing b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = [F->F F tuple 2 111][F B L U->[false->B|true->F F([T->T T 2][T C->[true->B|false->[false->B L|true->T T(C+1)](C*C<=L)](0==L%C)])(L+1)U](L '/hackenv/tmp/egel-master/include/prelude-hackeso.eg' spruit11: Looking at this now: https://github.com/egel-lang/egel/blob/master/src/syntactical.hpp#L612 spruit11: Should be a bug somewhere. b_jonas: ``` mkdir -pv /hackenv/interps/egel HackEso: mkdir: created directory '/hackenv/interps/egel' b_jonas: ``` cp -v /hackenv/tmp/egel-master/stage/* /hackenv/interps/egel HackEso: ​'/hackenv/tmp/egel-master/stage/egel' -> '/hackenv/interps/egel/egel' \ '/hackenv/tmp/egel-master/stage/fs.ego' -> '/hackenv/interps/egel/fs.ego' \ '/hackenv/tmp/egel-master/stage/io.ego' -> '/hackenv/interps/egel/io.ego' \ '/hackenv/tmp/egel-master/stage/random.ego' -> '/hackenv/interps/egel/random.ego' \ '/hackenv/tmp/egel-master/stage/regex.ego' -> '/hackenv/interps/egel/regex.ego' b_jonas: also I should put some more utilities to the prelude later, like numeric ranges and a foreach b_jonas: in theory we could even invent a lazy list (iterator) type, but I won't bother with that now spruit11: Lazy lists are pretty straightforward. b_jonas: sure, but if you want lists, you need like fifty functions for them b_jonas: wait, I have a list library in prolog, let me show just how many you need spruit11: It's just a hassle in an eager language since you end up copying everything. Once eager, once lazy. spruit11: egelbot: def ones = [ _ -> (1, ones) ] spruit11: ^ I like that encoding. spruit11: egelbot: ones spruit11: egelbot: ones nop egelbot: (System:tuple 1 ones) spruit11: 'Push the button' approach. Everytime you supply an argument, it gives another head/tail. spruit11: Coalgebraic, I guess. b_jonas: http://dpaste.com/34M0CW3 b_jonas: ^ and that doesn't even have range functions spruit11: I can almost read Hungarian, I guess. b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = 7 * /* this is a comment */ 7'; "$l/egel" a0.eg HackEso: a0.eg:5:16:syntactical:primary expression expected b_jonas: ``` set -e; d=egel-scripts; mkdir -p $d; cd $d; l=/hackenv/tmp/egel-master/stage/; >a0.eg echo 'import "'"$l/io.ego"$'"\nusing System\nusing Math\nusing IO\n''def main = 7 * 7'; "$l/egel" a0.eg spruit11: Is it Hungarian? b_jonas: how did comments work? b_jonas: yes, it's Hungarian spruit11: 'listak' b_jonas: I wrote it for school stuff so it has comments in Hungarian b_jonas: I wrote that one back in 2009 spruit11: Right. Neat. b_jonas: how do I write comments in egel? I know I asked this once, but I forgot b_jonas: I was more hoping that you can almost real Prolog spruit11: Prolog isn't the problem. What you did takes some time. b_jonas: https://esolangs.org/logs/2020-02-04.html#lOx spruit11: I recognize some stuff. b_jonas: there are comments about that library somewhere in the #esoteric logs where I explain it b_jonas: but I don't know where spruit11: Hmm. Okay. But what does it do? spruit11: I recognize the list functions. Unsure about the lambda. spruit11: You can do this way more straightforward with the 'coalgebraic' list approach in Egel. spruit11: I.e., algebraic a list is something of type 1+(T,L[T]) -> L[T]. Coalgebraic, reverse the arrow L[T] -> 1+(T,L[T]). spruit11: Then, to make it work eager, 'push the button' and produce either a 'nil' or a 'cons' tuple. b_jonas: `fetch /hackenv/tmp/egel-master/include/prelude-hackeso.eg https://hack.esolangs.org/get/tmp/egel-master/include/prelude-hackeso.eg HackEso: 2020-02-20 23:09:11 URL:https://hack.esolangs.org/get/tmp/egel-master/include/prelude-hackeso.eg [3303/3303] -> "/hackenv/tmp/egel-master/include/prelude-hackeso.eg" [1] spruit11: I guess I should fix a small colist.eg. b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\n''def main = let ForN = [U -> U U][U K N B -> if K < N then (B K; U U (K + 1) N B) else nop] in ForN 0 20 [K -> print(totext((K*(K+1))/2) + "\n")]'; /hackenv/interps/egel/egel a0.eg HackEso: a0.eg:2:50:semantical:undeclared < b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\n''def main = 3 * 3'; /interps/egel/egel a0.eg HackEso: bash: /interps/egel/egel: No such file or directory b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\n''def main = 3 * 3'; /hackenv/interps/egel/egel a0.eg HackEso: a0.eg:2:14:semantical:undeclared * b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'using System\n''def main = 3 * 3'; /hackenv/interps/egel/egel a0.eg b_jonas: but that prelude has using System right in it b_jonas: `fetch /hackenv/tmp/egel-master/include/prelude-hackeso.eg https://hack.esolangs.org/get/tmp/egel-master/include/prelude-hackeso.eg HackEso: 2020-02-20 23:13:46 URL:https://hack.esolangs.org/get/tmp/egel-master/include/prelude-hackeso.eg [3358/3358] -> "/hackenv/tmp/egel-master/include/prelude-hackeso.eg" [1] b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'using System\n''def main = 3 * 3'; /hackenv/interps/egel/egel a0.eg b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\n''def main = 3 * 3'; /hackenv/interps/egel/egel a0.eg HackEso: ​/hackenv/tmp/egel-master/include/prelude-hackeso.eg:48:31:semantical:undeclared length b_jonas: that's better b_jonas: `fetch /hackenv/tmp/egel-master/include/prelude-hackeso.eg https://hack.esolangs.org/get/tmp/egel-master/include/prelude-hackeso.eg HackEso: 2020-02-20 23:14:53 URL:https://hack.esolangs.org/get/tmp/egel-master/include/prelude-hackeso.eg [3355/3355] -> "/hackenv/tmp/egel-master/include/prelude-hackeso.eg" [1] b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\n''def main = 3 * 3'; /hackenv/interps/egel/egel a0.eg HackEso: a0.eg:2:14:semantical:undeclared * b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\n''def main = (System.*) 3 3'; /hackenv/interps/egel/egel a0.eg HackEso: a0.eg:2:21:syntactical:primary expression expected b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\n''def main = (System:*) 3 3'; /hackenv/interps/egel/egel a0.eg b_jonas: why is it not running the prelude? b_jonas: it looks as if it compiles the prelude but doesn't run it b_jonas: strange b_jonas: spruit11: ^ b_jonas: spruit11: the lambda part is to define a closure type in prolog spruit11: Oh right. spruit11: Lemme look at that prelude thingy first. b_jonas: the closure has an argument list, a body which is just a prolog goal, and a set of variables that must not be copied when you copy the closure because they may be variables shared with the containing code spruit11: Oh right. Egel doesn't 'run' anything from imported files. It just imports all defs. spruit11: It should define your function though. spruit11: Test that. b_jonas: other variables in the body have to be copied with copy_term, so that you can reuse the same closure body several times, even if unifications in it succeed b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\n''def main = (isThisEvenRan; System:*) 3 3'; /hackenv/interps/egel/egel a0.eg HackEso: a0.eg:2:34:syntactical:) expected b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\n''def main = (isThisEvenRan; (System:*) 3 3)'; /hackenv/interps/egel/egel a0.eg HackEso: prelude-hackeso loaded \ 9 b_jonas: yes, but b_jonas: spruit11: so I can't just stick my using statements into a prelude, I have to put them in my code? b_jonas: I can do that, since I need a wrapper anyway b_jonas: does it at least run imports? b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\nusing System\nusing IO\n''def main = let ForN = [U -> U U][U K N B -> if K < N then (B K; U U (K + 1) N B) else nop] in ForN 0 20 [K -> print(totext((K*(K+1))/2) + "\n")]'; /hackenv/interps/egel/egel a0.eg HackEso: 0 \ 1 \ 3 \ 6 \ 10 \ 15 \ 21 \ 28 \ 36 \ 45 \ 55 \ 66 \ 78 \ 91 \ 105 \ 120 \ 136 \ 153 \ 171 \ 190 b_jonas: it did at least import the IO module b_jonas: ok, I'll remove the using statements from that prelude then b_jonas: and add using System; using Math; using String; using IO to the wrapper spruit11: It doesn't run anything. Like Java, I think. It imports and runs the 'main', if defined. b_jonas: `fetch /hackenv/tmp/egel-master/include/prelude-hackeso.eg https://hack.esolangs.org/get/tmp/egel-master/include/prelude-hackeso.eg HackEso: 2020-02-20 23:22:22 URL:https://hack.esolangs.org/get/tmp/egel-master/include/prelude-hackeso.eg [3254/3254] -> "/hackenv/tmp/egel-master/include/prelude-hackeso.eg" [1] b_jonas: spruit11: yes, but isn't using a compile-time thingy? b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\nusing System\nusing IO\n''def main = let ForN = [U -> U U][U K N B -> if K < N then (B K; U U (K + 1) N B) else nop] in ForN 0 20 [K -> print(totext((K*(K+1))/2) + "\n")]'; /hackenv/interps/egel/egel a0.eg HackEso: 0 \ 1 \ 3 \ 6 \ 10 \ 15 \ 21 \ 28 \ 36 \ 45 \ 55 \ 66 \ 78 \ 91 \ 105 \ 120 \ 136 \ 153 \ 171 \ 190 spruit11: Look at this start: https://github.com/egel-lang/egel/blob/master/examples/colist.eg spruit11: Everything for colists should follow from that, mulling over comap at the moment. b_jonas: ``` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/ HackEso: ​'/hackenv/tmp/egel-master/include/prelude-hackeso.eg' -> '/hackenv/interps/egel/prelude-hackeso.eg' b_jonas: I'll leave soon though, I won't write the wrapper now spruit11: No problem. spruit11: I'll think about colists a bit more and the parser problem. spruit11: Added the comap function. spruit11: Maybe make it pretty later. spruit11: https://github.com/egel-lang/egel/blob/master/examples/colist.eg b_jonas: also I'll have to look at what these four libraries in lib can do b_jonas: I mean their basics only spruit11: Yah, but very very alpha. Some are hurried implementations inspired by Ocaml, regex is just trying to get as much from libicu as I could. spruit11: But be my guest. spruit11: But I think you'll enjoy it more to just puzzle a bit. spruit11: I like your small programs. spruit11: More of those! b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\nusing System\nusing IO\ndef main = ''let Range2 = [U -> U U][U U K N -> if K < N then cons K (U U (K + 1) N) N else {}] in ({3,4,5,6}, Range2 3 7)'; /hackenv/interps/egel/egel a0.eg HackEso: a0.eg:4:38:semantical:redeclaration of U b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\nusing System\nusing IO\ndef main = ''let Range2 = [U -> U U][U K N -> if K < N then cons K (U U (K + 1) N) N else {}] in ({3,4,5,6}, Range2 3 7)'; /hackenv/interps/egel/egel a0.eg HackEso: ​(System:tuple (System:cons 3 (System:cons 4 (System:cons 5 (System:cons 6 System:nil)))) (System:cons 3 (System:cons 4 (System:cons 5 (System:cons 6 System:nil 7) 7) 7) 7)) b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\nusing System\nusing IO\ndef main = ''let Range2 = [U -> U U][U K N -> if K < N then cons K (U U (K + 1) N) else {}] in ({3,4,5,6}, Range2 3 7)'; /hackenv/interps/egel/egel a0.eg HackEso: ​(System:tuple (System:cons 3 (System:cons 4 (System:cons 5 (System:cons 6 System:nil)))) (System:cons 3 (System:cons 4 (System:cons 5 (System:cons 6 System:nil))))) b_jonas: better b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\nusing System\nusing IO\ndef main = ''let Range2 = [U -> U U] [U K N -> if K < N then cons K (U U (K + 1) N) else {}] in let Foreach = [U -> U U] [U B nil -> nop | U B (cons A D) -> B A; U U B D] in Foreach [] (Range2 3 7)'; /hackenv/interps/egel/egel a0.eg HackEso: a0.eg:4:182:syntactical:-> expected b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\nusing System\nusing IO\ndef main = ''let Range2 = [U -> U U] [U K N -> if K < N then cons K (U U (K + 1) N) else {}] in let Foreach = [U -> U U] [U B nil -> nop | U B (cons A D) -> B A; U U B D] in Foreach [K -> print (tostring K + ",")] (Range2 3 7)'; /hackenv/interps/egel/egel a0.eg HackEso: a0.eg:4:194:semantical:undeclared tostring b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\nusing System\nusing IO\ndef main = ''let Range2 = [U -> U U] [U K N -> if K < N then cons K (U U (K + 1) N) else {}] in let Foreach = [U -> U U] [U B nil -> nop | U B (cons A D) -> B A; U U B D] in Foreach [K -> print (totext K + ",")] (Range2 3 7)'; /hackenv/interps/egel/egel a0.eg HackEso: 3,4,5,6, b_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\nusing System\nusing IO\ndef main = ''let Range2 = [U -> U U] [U K N -> if K < N then cons K (U U (K + 1) N) else {}] in let Foreach = [U -> U U] [U B nil -> nop | U B (cons A D) -> B A; U U B D] in Foreach [K -> print (totext (totext K) + ",")] (Range2 3 7)'; /hackenv/interps/egel/egel a0.eg HackEso: 3,4,5,6, spruit11: I don't see the parser error. :/ Maybe tomorrow. oerjan: `` ls ../ka* HackEso: ​../karma \ ../karma.orig \ ../karma.rej oerjan: `t doag karma.orig HackEso: 12249:2019-12-06 undo 12128 oerjan: `t doag karma.rej HackEso: 12249:2019-12-06 undo 12128 oerjan: `t hurl karma.orig HackEso: https://hack.esolangs.org/repo/log/tip/karma.orig oerjan: that's weird. is undo broken? oerjan: `` t rm karma.* HackEso: rm: missing operand \ Try 'rm --help' for more information. oerjan: `t ` rm karma.* HackEso: No output. oerjan: `` ls ../ka* HackEso: ​../karma oerjan: `doag ../karma HackEso: 12248:2019-12-05 karma+ fizzie \ 12128:2019-11-17 karma+ fizzie \ 7828:2016-05-06 ` echo "hppavilion[1] has -i karma" >> karma \ 7812:2016-05-06 ` sed -i \'s/now //\' karma \ 7319:2016-03-30 karma+ oren \ 7318:2016-03-30 karma+ \\oren\\ \ 3389:2013-08-07 rm karma \ 3193:2013-06-20 karma+ GregoR \ 1529:2013-01-15 karma+ karma \ oerjan: `undo 12128 HackEso: patching file karma \ Hunk #1 FAILED at 1. \ 1 out of 1 hunk FAILED -- saving rejects to file karma.rej oerjan: `url ../bin/undo HackEso: https://hack.esolangs.org/repo/file/tip/bin/undo oerjan: and i had modified undo to ignore the usual HackEso cd to tmp oerjan: `1 hg diff -c 12128 HackEso: 1/1:diff -r a8288b8b34ca -r 89f3cb7bc99f karma \ --- a/karma Sun Nov 17 00:56:47 2019 +0000 \ +++ b/karma Sun Nov 17 00:58:16 2019 +0000 \ @@ -1,2 +1,1 @@ \ -oren has 1 karma. \ -hppavilion[1] has -i karma \ +fizzie now has 1 karma. oerjan: `` hg diff -c 12128 | patch -p1 -R HackEso: patching file karma oerjan: `doag ../karma HackEso: 12248:2019-12-05 karma+ fizzie \ 12128:2019-11-17 karma+ fizzie \ 7828:2016-05-06 ` echo "hppavilion[1] has -i karma" >> karma \ 7812:2016-05-06 ` sed -i \'s/now //\' karma \ 7319:2016-03-30 karma+ oren \ 7318:2016-03-30 karma+ \\oren\\ \ 3389:2013-08-07 rm karma \ 3193:2013-06-20 karma+ GregoR \ 1529:2013-01-15 karma+ karma \ oerjan: `lastfiles HackEso: ​/hackenv/karma.orig \ /hackenv/karma.rej oerjan: it says patching yet did nothing oerjan: `t ` hg diff -c 12128 | patch -p1 -R HackEso: patching file karma \ Hunk #1 FAILED at 1. \ 1 out of 1 hunk FAILED -- saving rejects to file karma.rej oerjan: `cat ../karma HackEso: fizzie now has 2 karma. oerjan: `url ../karma HackEso: https://hack.esolangs.org/repo/file/tip/karma oerjan: *sigh* it's just the repo viewer confusing me because the file logs shown depend on revision you're in oerjan: `t ` rm karma.* HackEso: No output. oerjan: which is presumably what happened back when i did the original undo too oerjan: MOVE ALONG int-e: fungot: Do you want to have good looks, too? fungot: int-e: fnord esoteric fnord this work: int main() int-e: fungot: Well, ouch. You could've just said "no", you know. fungot: int-e: so you create a new file, and be able to actually use oerjan: fungoteeth? fungot: oerjan: ( figured that since he already got his phd dissertation was written on irix :) int-e: And now it's mocking my age? int-e: fungot's so mean. fungot: int-e: i'm not going to debate any more with a nicer syntax. fungot: oerjan: ( trust me, it seems viznut really likes it. oerjan: i think fungot has been hanging out with the wrong crowd fungot: oerjan: how about just making every function call an actor thingy in the other int-e: Apparently I cannot spell "hereditary"... the number of times I've now changed the second letter from 'i' to 'e' is getting embarrassing. cpressey: hi int-e cpressey: Do you like zygohistomorphic prepromorphisms? int-e: Not today. int-e: (Another day I might at least try to find out what they are.) cpressey: "Used when you really need both semi-mutual recursion and history and to repeatedly apply a natural transformation as you get deeper into the functor." cpressey: Y'know, I find it hard to say if I've ever really needed that or not int-e: Well, we have explicit recursion. int-e: So I usually lose interest soon after cata- and anamorphisms. int-e: cpressey: Does anybody outside of compiler theory for deforestation need such terminology? cpressey: int-e: There seem to be lots of people who take pointfree-ness very seriously. Taneb: There's a whole game show on BBC about expressing Haskell functions without binding names Taneb: It's called Pointless wib_jonas: `? zygohistomorphic prepromorphisms HackEso: A zygohistomorphic prepromorphism is used when you really need both semi-mutual recursion and history and to repeatedly apply a natural transformation as you get deeper into the functor. wib_jonas: int-e: that makes sense, since the verb form is "inherit", not "inheret". but apparently the adjective doesn't inherit the spelling. int-e: wib_jonas: Tell that to my fingers. wib_jonas: "talk to the hand" int-e: Hmm, I guess that was implied. spruit11: egelbot: 2*3/2 spruit11: It seems it was just a mistake in priorities. spruit11: I guess. wib_jonas: spruit: no, it's a mistake in associativity. (*) and (/) should have the same precedence, and whatever associativity/fixity is the opposite that the power operator should have wib_jonas: egelbot: {2}*{3}/{4} egelbot: (System:/ (System:* (System:cons 2 System:nil) (System:cons 3 System:nil)) (System:cons 4 System:nil)) wib_jonas: egelbot: {2}*{3}*{4} egelbot: (System:* (System:* (System:cons 2 System:nil) (System:cons 3 System:nil)) (System:cons 4 System:nil)) wib_jonas: ok, that looks correct wib_jonas: egelbot: 100/2/2 spruit11: Egel doesn't have same precedence operators. wib_jonas: well it should spruit11: Sorry. wib_jonas: egelbot: 10*10/2*2 wib_jonas: egelbot: 10/2*2/10 wib_jonas: egelbot: ((10/2)*2)/10 wib_jonas: `python3 -cprint(10//2*2//10) wib_jonas: spruit11: now you're misparsing that spruit11: Right. wib_jonas: C parses (10/2*2/10) as (((10/2)*2)/10) wib_jonas: admittedly I think there are interpreters where / has a higher precedence wib_jonas: but I think almost all of those were written before our prophets K&R declared the table of precedence of C spruit11: Yah. I'll note it but I don't think I'll change it, yet. spruit11: It wouldn't be too hard, I just like the scheme I have now. wib_jonas: sure, we'll just parenthisize everything then spruit11: Yahyah. spruit11: Nah, I'll document it but I don't see a pressing reason to change it. spruit11: The idea is that you can introduce ++ and ** operators yourself and deduce the priorities. spruit11: I don't want to give that up. wib_jonas: spruit: I don't see why that would stop you from having equal precedences wib_jonas: spruit: haskell and prolog lets you introduce custom infix operators, and declare their precedence and fixity wib_jonas: it's not even too complicated to parse it wib_jonas: as long as you don't have other insane syntax rules like haskell does spruit11: Nono, it isn't that much more complicated, I agree. spruit11: But I never liked the scheme of introducing your own priorities. That can break a lot of stuff. spruit11: You're right that if my aim was to implement a GHC I would need to. spruit11: But Egel isn't a GHC, a 'real' language, but a playground. spruit11: I.e., I want to see how this simple scheme works out in practice. spruit11: The problem with priority introduction is (often) that it's very prone to errors, let alone modification. (What happens accross module boundaries, what happens to your source code after you find out you need to swap two operators.) spruit11: Sometimes a simple scheme is best. So I'll just document it as a 'best effort' solution. spruit11: Ah well. wib_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\nusing System\nusing Math\nusing String\nusing IO\ndef main = ''[F->F F tuple 2 111][F B L U->[false->B|true->F F([T->T T 2][T C->[true->B|false->[false->B L|true->T T(C+1)](C*C<=L)](0==L%C)])(L+1)U](La0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\nusing System\nusing Math\nusing String\nusing IO\ndef main = ''[F->F F tuple 2 777][F B L U->[false->B|true->F F([T->T T 2][T C->[true->B|false->[false->B L|true->T T(C+1)](C*C<=L)](0==L%C)])(L+1)U](L "/hackenv/interps/egel/readme-hackeso.txt" [1] cpressey: Weeks ago, I puzzled over what it meant for Frege to be "a Haskell", now I'm going to puzzle over what it means to implement "a GHC". cpressey: For instance, to implement a GHC, must you be physically located in Glasgow? Is it a strict requirement? wib_jonas: cpressey: I don't know. there was an esoteric language featured on ICFP called GHC, but totally unrelated to the famous GHC wib_jonas: I don't know if it was implemented in Glasgow though wib_jonas: ICFP 2014 spruit11: I implemented a GHC once, the Grafwegen Hi Compiler. It was a language I made prior to Egel but it was way too much to get right. (A heterodox type system, compiled to C, ..) spruit11: Learned a lot from that. spruit11: Most I learned was: don't create 'real' languages by yourself. The point where that can be done as a one-man-effort is gone. wib_jonas: I want to test something wib_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\nusing System\nusing Math\nusing String\nusing IO\ndef main = ''(3,3*3)'; /hackenv/interps/egel/egel a0.eg HackEso: ​(System:tuple 3 9) wib_jonas: ``` set -e; cd egel-scripts; d=/hackenv/tmp/egel-master/include/; mkdir -vp "$d"; echo BOO > "$d/prelude-hackeso.eg"; echo done wib_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "/hackenv/tmp/egel-master/include/prelude-hackeso.eg"\nusing System\nusing Math\nusing String\nusing IO\ndef main = ''(3,3*3)'; /hackenv/interps/egel/egel a0.eg HackEso: ​/hackenv/tmp/egel-master/include/prelude-hackeso.eg:1:1:syntactical:declaration or directive expected wib_jonas: ok that's still buggy wib_jonas: spruit11: if I give an absolute path (any path starting with a slash), you should not search for that file under the search path, you should only use the path as is wib_jonas: spruit11: because as is, the interpreter can still be confused by files in the pwd, so you can't just run egel scripts in any pwd wib_jonas: spruit11: this is important because it's darned hard to work it around properly by whoever invokes egel wib_jonas: you'd need to temporarily chdir to a safe path, but pass a file descriptor to the old wd, start egel, then in the wrapper script, after loading libraries, fchdir to the old wd, so that the egel script itself can conveniently access files in the wd with relative names spruit11: Uh. Right? spruit11: You need it to not search if the path start with '/ spruit11: ', right? spruit11: I can do that. wib_jonas: yes, don't prepend stuff to absolute paths, wib_jonas: and ideally also add command-line switches such that I can invoke egel with my own search path that doesn't include "." wib_jonas: so in this case I'd put /hackenv/interps/egel into the search path, but . shouldn't be in that search path wib_jonas: or does the -I switch already do that? I haven't actually tested wib_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "prelude-hackeso.eg"\nusing System\nusing Math\nusing String\nusing IO\ndef main = ''(3,3*3)'; /hackenv/interps/egel/egel -I /hackenv/interps/egel/ a0.eg HackEso: ​(System:tuple 3 9) wib_jonas: ``` set -e; cd egel-scripts; d=/hackenv/tmp/egel-master/include/; echo BOO > "$d/perlude-hackeso.eg"; echo done wib_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "perlude-hackeso.eg"\nusing System\nusing Math\nusing String\nusing IO\ndef main = ''(3,3*3)'; /hackenv/interps/egel/egel -I /hackenv/interps/egel/ a0.eg HackEso: a0.eg:1:1:input/output:file "perlude-hackeso.eg" not found wib_jonas: oh great wib_jonas: I rescind my second objection wib_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "perlude-hackeso.eg"\nusing System\nusing Math\nusing String\nusing IO\ndef main = ''(3,3*3)'; /hackenv/interps/egel/egel a0.eg HackEso: a0.eg:1:1:input/output:file "perlude-hackeso.eg" not found wib_jonas: no wait int-e: tromp: If you're interested, I'd be happy to get some feedback on the introduction I wrote for https://int-e.eu/~bf3/tmp/Goodstein.pdf ... also, if there's a better way to cite BLC I'm all ears. wib_jonas: ``` set -e; >/hackenv/tmp/egel-scripts/hackenv/interps/egel/perlude-hackeso.eg" echo BOO; echo done HackEso: bash: -c: line 0: unexpected EOF while looking for matching `"' \ bash: -c: line 1: syntax error: unexpected end of file spruit11: I committed the start with '/' exception. No idea whether it'll work. wib_jonas: ``` set -e; >/hackenv/tmp/egel-scripts/hackenv/interps/egel/perlude-hackeso.eg echo BOO; echo done HackEso: bash: /hackenv/tmp/egel-scripts/hackenv/interps/egel/perlude-hackeso.eg: No such file or directory wib_jonas: ``` set -e; mkdir -pv /hackenv/tmp/egel-scripts/hackenv/interps/egel/ HackEso: mkdir: created directory '/hackenv/tmp/egel-scripts/hackenv' \ mkdir: created directory '/hackenv/tmp/egel-scripts/hackenv/interps' \ mkdir: created directory '/hackenv/tmp/egel-scripts/hackenv/interps/egel/' wib_jonas: ``` set -e; >/hackenv/tmp/egel-scripts/hackenv/interps/egel/prelude-hackeso.eg echo BOO; echo done wib_jonas: ``` set -e; >/hackenv/tmp/egel-scripts/hackenv/interps/egel/perlude-hackeso.eg echo BOO; echo done wib_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "perlude-hackeso.eg"\nusing System\nusing Math\nusing String\nusing IO\ndef main = ''(3,3*4)'; /hackenv/interps/egel/egel a0.eg HackEso: a0.eg:1:1:input/output:file "perlude-hackeso.eg" not found int-e: tromp: (My plan is to submit it to the AFP, https://www.isa-afp.org/ ) wib_jonas: ``` set -e; >/hackenv/tmp/egel-scripts/perlude-hackeso.eg echo BOO; echo done wib_jonas: ``` set -e; >/hackenv/tmp/egel-scripts/prelude-hackeso.eg echo BOO; echo done wib_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "perlude-hackeso.eg"\nusing System\nusing Math\nusing String\nusing IO\ndef main = ''(3,3*5)'; /hackenv/interps/egel/egel a0.eg HackEso: perlude-hackeso.eg:1:1:syntactical:declaration or directive expected wib_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "perlude-hackeso.eg"\nusing System\nusing Math\nusing String\nusing IO\ndef main = ''(3,3*5)'; /hackenv/interps/egel/egel -I /hackenv/interps/egel a0.eg HackEso: perlude-hackeso.eg:1:1:syntactical:declaration or directive expected wib_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "prelude-hackeso.eg"\nusing System\nusing Math\nusing String\nusing IO\ndef main = ''(3,3*5)'; /hackenv/interps/egel/egel -I /hackenv/interps/egel a0.eg HackEso: prelude-hackeso.eg:1:1:syntactical:declaration or directive expected wib_jonas: ``` rm -fv /hackenv/tmp/egel-scripts/prelude-hackeso.eg HackEso: removed '/hackenv/tmp/egel-scripts/prelude-hackeso.eg' wib_jonas: ``` set -e; cd egel-scripts; >a0.eg echo $'import "prelude-hackeso.eg"\nusing System\nusing Math\nusing String\nusing IO\ndef main = ''(3,3*5)'; /hackenv/interps/egel/egel -I /hackenv/interps/egel a0.eg HackEso: ​(System:tuple 3 15) wib_jonas: yes, my second object is still there wib_jonas: spruit: thanks wib_jonas: spruit11: ideally, make it so that if you give -I options from command line, then egel doesn't search in . , unless of course you give -I . in the command line. if you don't want that, for compatibility, then add some other switch to not search in . wib_jonas: because it would be better to also not have to use absolute paths spruit11: I'll look at it. wib_jonas: thank you int-e: @unignore HackEso lambdabot: Plugin `system' failed with: user error (invalid usage) int-e: Heh maybe I can induce cpressey to give feedback too if I claim that it's all about the power of folds. spruit11: I can change it but I am not sure what it'll break.. It'll take a bit to surpress '.'. spruit11: Do you really need it? int-e: (The fold angle is not a lie but I'm really not framing it in this way.) wib_jonas: spruit: I don't need it implicitly, it can be a different switch. I don't need it in the master version, I can make a fork. and I don't need it in a HackEso toy language, but I would need it in a serious language. wib_jonas: spruit: for quite a while I ran perl with a wrapper script that removes . from the search path (that's just a switch -M-lib=. or some such, I don't recall the exact syntax), until eventually perl removed it by default in some major version update spruit11: Ah well. I hacked something. Fingers crossed. wib_jonas: thanks wib_jonas: also I probably won't look at it today wib_jonas: and every time I say "I won't look at it today" there's some chance that I get bored and never get back to experimenting with the language spruit11: I committed the change which should surpress '.' when -I is used. spruit11: Untested. wib_jonas: thanks spruit11: No problem. You already gave Egel a lot of attention. spruit11: It's about time to wrap it up? spruit11: I mean, you want to create a wrapper around an installation, right? spruit11: (BTW, comment is #, missed that yesterday.) spruit11: Real life takes over here too. BBL. wib_jonas: spruit11: I'll definitely create a wrapper, and if you fixed those two mistakes then the wrapper will be able to work well wib_jonas: I just won't create it now, because I have to do real payed work too, or pretend to or whatever wib_jonas: I make my own crazy tools there wib_jonas: I don't plan to use egel for that cpressey: int-e: I'm flattered but also fairly sure that any feedback I have would not be useful to you int-e: cpressey: Well I wouldn't know. But you were not really involved in this :) tromp: int-e in explaining hereditary notation, i wouldn't change 1 to 2^0, as 1 is alrd a digit in base 2. https://en.wikipedia.org/wiki/Goodstein%27s_theorem#Hereditary_base-n_notation doesn't do that either int-e: But this way it's closer to how the code works. Though I guess I should put the digits last (3^0 * 2 rather than 2 * 3^0) for the same reason... int-e: Oh whatever, I changed it int-e: (both things) tromp: maybe explain that later when you get to the code. for reader's initial understanding it's better to stop at digits below b, i think tromp: and limit notational clutter tromp: for BLC reference, use instead (or in addition) the reference 1 on https://tromp.github.io/cl/Binary_lambda_calculus.html tromp: which might survive my website:) int-e: Hmm, the links are both on tromp.github.io. The Binary_lambda_calculus.html doesn't have a page title :/ int-e: But I'll pretend it's "Binary lambda calculus". int-e: (And it links to the playground anyway, if the reader makes it to the bottom.) tromp: i mean your paper should containt the reference to John Tromp, Binary Lambda Calculus and Combinatory Logic, in Randomness And Complexity, from Leibniz To Chaitin, ed. Cristian S. Calude, World Scientific Publishing Company, October 2008. (The last reference, to an initial Haskell implementation, is dated 2004) tromp: than the ordinal*s* themselves. tromp: as trees (nested lists) int-e: tromp: Tweaked references. Do you have page numbers for your chapter? (I now actually cite Goodstein too) int-e: 1944. Who knew people were interested in stuff like that back then. ;) tromp: pages 237-260 int-e: tromp: Oh and I've added an acknowledgement. Taneb: int-e: what is this you're working on? int-e: Taneb: A formalization of the Goodstein function in connection with lambda calculus; https://int-e.eu/~bf3/tmp/Goodstein.pdf is the current draft document. Taneb: I don't understand this but luckly you have linked me the perfect thing to begin learning with int-e: hrm, with a broken reference, *fixes* tromp: "we start counting at 1" -> "the first argument is one less than base, so 0 is not valid" int-e: tromp: Hmm. Yeah I can add that. But one could change c+2 and c+1 to c+3 and c+2 below and start counting at 0. Taneb: int-e: thank you, this is interesting int-e: Taneb: Ah does that mean you actually understand it (if you understand the introduction and maybe a bit of the Specification section I'll be quite happy.) int-e: (Will be afk for a bit, but I will read replies.) wib_jonas: " I don't understand this but luckly you have linked me the perfect thing to begin learning with Taneb: Ah does that mean you actually understand it" hmm, is that quote material? wib_jonas: `addquоte I don't understand this but luckly you have linked me the perfect thing to begin learning with Taneb: Ah does that mean you actually understand it [...] HackEso: addquоte? No such file or directory int-e: wib_jonas: I thought they were different "this". int-e: wib_jonas: You also misassigned context, fwiw. int-e: wib_jonas: I was replying to the "the perfect thing to begin learning with" part. wib_jonas: int-e: so Taneb understands a different article that your article references? int-e: wib_jonas: I thought the scope of "this" was just the IRC line... in particular, the reference to the Goodstein function. int-e: But w/e. Taneb: To actually answer the question, I'm afraid I was a little confused so I looked at the Wikipedia page for the Goodstein function to clarify things Taneb: (I had in my head that you always went base 2 to base 3, rather than base n to base n + 1) int-e: Yeah I'll add "The next step is the same with $b$ incremented by $1$, and so on." int-e: The other thing *probably* wouldn't terminate. Taneb: Looking back it it, I thought your explanation had all the bits I needed, I just misunderstood int-e: Yeah but I can also see how it could be misunderstood. This kind of feedback is valuable! int-e: Basically it was ambiguous without the example and that's less than ideal. int-e: And I made another small update to the pdf. int-e: Oh well. I guess I'll just submit it now :) wib_jonas: if you made changes, always sleep a day on it, read it again, and submit it only if you haven't made changes for a day, unless you're in a real time pressure int-e: I've slept on it once already ;-) int-e: And besides, it's done. wib_jonas: yes, but then you made a small update on it afterwards. sleep until it reaches a fixed point. int-e: That process would terminate, but only because my life time is finite. wib_jonas: I guess it doesn't matter, even if it seems to be in a fixed point, you'll find an error soon after you submit it wib_jonas: we can't fight that wib_jonas: hopefully just a small error wib_jonas: bye now int-e: Also, the good news is that AFP entries can be updated. int-e: And... the material is formalized, the the substance of it must be correct. b_jonas: hi all b_jonas: ``` cat /hackenv/bin/ls HackEso: ​#!/bin/bash \ if /bin/ls -id "$@" 2>/dev/null | grep -q ^"$(/bin/ls -id /hackenv/wisdom | cut -d\ -f 1)" && [[ "$IRC_TARGET" == \#* ]]; then echo 'As the wisdom directory contains many files named after nicks, listing it in public annoys people. Try listing it in private instead.'; else exec -a ls /bin/ls "$@"; fi oerjan: no pressure, schlock oerjan: although i'm guessing the boloceade people maybe aren't going to be helpful, at least at that step oerjan: Do you like zygohistomorphic prepromorphisms? <-- . o O ( did shachaf and cpressey swap nicks ) oerjan: egelbot: 1 - 2 + 3 oerjan: ok that's right oerjan: egelbot: 10 * 10 / 2 * 2 oerjan: and that's dubious. although some people like it that way. oerjan: egelbot: 1 - 2 - 3 oerjan: it accidentally works to have addition have lower precedence than subtraction, because (a + b) - c = a + (b - c) oerjan: so that's probably what's happening oerjan: multiplication lower than division would also work in a true field, but i think rounding may break that solution here oerjan: egelbot: 10 / 3 oerjan: egelbot: 10 * (2 / 5) oerjan: egelbot: 10 * 2 / 5 oerjan: @tell spruit11 ocaml has precedence decided by the first character, although it still manages to give * and / the same one afair. lambdabot: Consider it noted. oerjan: oh you returned spruit11: Oh year, sure. I could add it, it's 'just' adding a field to my operator table with explicit priority numbers. spruit11: I just don't think I should at this moment. oerjan: egelbot: 2*3+4 spruit11: Most stuff works as expected, it's the same priority precedence which is different. But honestly, I think most people parenthesize those anyway. spruit11: And I like the scheme of having a fixed order for newly introduced operators. spruit11: I don't feel it's worth it for this 'corner case'. spruit11: *to change it spruit11: I.e., this is a very specific corner. What if I add ** and ++ (and,or) for Boolean connectives? spruit11: Dunno. ArthurStrong: I think you all should know something :) kmc: ArthurStrong: GEB is a pretty sprawly book. which parts interest you most -- the math, the philosophy, Hofstadter's style? ArthurStrong: kmc: whatever connected to math.logic and theorem proving zzo38: I don't know what other book, but I think Godel, Escher, Bach is good. I know Hofstadter wrote other books, but I haven't read them so I cannot comment about it. ArthurStrong: zzo38: OK zzo38: GURPS rules for Biology skill specifies that you must specialize by planet type. I thought it might make more sense to specialize by planet, and later found out that another (official) book mentions the same thing. int-e: hi fungot fungot: int-e: i actually wrote an lalr(1) parser generator for scheme based on using regular array code, but there are some zzo38: How to determine what Linux kernel options are present in the current system? Hooloovo0: what kind of kernel options? Hooloovo0: often there's /proc/config.gz which will tell you how it was configured Hooloovo0: there's also kernel command line options which would be in /proc/cmdline zzo38: I don't have /proc/config.gz in my computer Hooloovo0: if config.gz isn't there, there's still a possibility it's in the kernel, but not advertised, I think the linux source has a tool to extract it Hooloovo0: what are you trying to do? zzo38: I just want to see how it was configured int-e: There may also be a config-* file corresponding to your kernel image in /boot/ ... though you have to trust the distribution on that. zzo38: OK, I found it Hooloovo0: good point zzo38: That file is present Hooloovo0: scripts/extract-ikconfig could do it, but that's moot int-e: $ grep CONFIG_IKCONFIG /boot/config-$(uname -r) int-e: # CONFIG_IKCONFIG is not set int-e: wouldn't work anyway (Debian here) int-e: oerjan: The dinos have a doomsday device :) oerjan: [citation needed] int-e: Well, Schlockmercenary. int-e: Also a bit of a pun. oerjan: OKAY (i don't get it) int-e: It's less about causation, and more about prediction, than your usual doomsday device. int-e: The effect is almost the same though ;) oerjan: also those are not the dinos. (my headcanon says they're logically "ceans", although that's not been said in comic) int-e: Sure look like dinos to me. int-e: Does that make me racist? oerjan: (all boloceade people look the same to you?) int-e: No? I'm not sure that's required though. oerjan: the dinos are the ones with feathers hth int-e: Actually that topic came up earlier: https://mobile.twitter.com/SeS73123646/status/1230841180633653248?p=p int-e: oerjan: You may have a point there though... I am mixing those up. int-e: The variance within the species?! feels greater than the differences of the species. oerjan: ah dagsson. the one comic i used to carefully skip over back when the VG newspaper had a comic webpage oerjan: (they might have one again, i haven't checked) int-e: What's a newspaper? int-e: Oh no. oerjan: GET OFF MY LAWN int-e: The editing distance between oerjan and oldman *could* be bigger. int-e: Soon we won't have lawns anymore either. oerjan: what? but then what will our cattle eat? int-e: Algea. oerjan: `? alg ii HackEso: alg ii? ¯\(°​_o)/¯ oerjan: `wisdom alg HackEso: ​shor's algorithm//Shor's algorithm allows a quantum computer to factor large integers, such as 21. Taneb thought of it. oerjan: `wisdom alg HackEso: ​alg. ii//Algae II, the successor class to Algae I. Discusses hydroponics and such. oerjan: there you go int-e: `cwlprits alg. ii HackEso: boil̈y boil̈y oerjän hppavilion[1̈] int-e: `quote boily HackEso: 908) boily: the man eating chicken is just a normal man, it's quite common to eat chicken in some parts of the world \ 909) ~eval 1+2 Error (127): this is a great bot boily i love it \ 918) not only there is no God, but try to find an APL keyboard on Sunday. \ 921) ais523: I'm not sure my grasp of the English language is getting better by visiting this channel.. \ 923) had a tromp: int-e: i've been trying to get short blc programs for the infinite laver table tromp: my best attempts are in laver1.lam and laver2.lam tromp: former uses church numerals; latter uses some cross between scott and church numerals tromp: both versions need explicit lists int-e: Nice, but I don't think I'll go down that rabbit hole. b_jonas: YAY! Order of the Stick (Giant in the Playground, giantitp) phpbb forum is back b_jonas: http://www.giantitp.com/index.html#oXsSwf27fSs6vscZlMX arseniiv: tromp: latter uses some cross between scott and church numerals => are they those where S n z' s' = s' n (n z' s')? arseniiv: I read somewhere about these and they were called Church—Scott in obvious manner :D tromp: arseniiv: succ = \n\s\z. s z n; -- without the z on right these would be Scott numerals arseniiv: tromp: ah, interesting! What there is from Church, though? tromp: instead of applying f n times to z, they apply f sign(n) times to z tromp: hmm, that doesn't look right tromp: have to rethink that tromp: what they have from Church is that the successor case has the z argument available int-e: tromp: But what you wrote lacks the actual recursive call; the caller could just apply the s to z themselves. \n\s\z. s (n s z) n would make a bit more sense to me, but that's what arseniiv had, only with the two arguments s and z swapped. int-e: so I'm a bit confused :) arseniiv: yeah I’m too but I thought I had misunderstood something int-e: \n\s\z. s z n might be a Scott encoding with a bit of extra Curry. tromp: oh, i thought Scott numerals lacked recursion int-e: They do. int-e: But Church is all about the recursion to my mind. tromp: so i forego the recursion because in laver you need to apply predecessor, which is easier with the non-recursive Scott numerals tromp: so now i can get pred without recursion, and use recursion for indexing a list arseniiv: right, that’s precisely the reason behind Church—Scott \n \z \s. s n (n z s) int-e: The extra z doesn't introduce recursion though, so I don't see the Church angle. tromp: like i said it's not Church style. it just has in common that both cases use the 2nd argument arseniiv: hm Church—Scott is worse than Church because of typing issues and is worse than Scott because of nonlinearity. Though I’m yet to get why linearity matters here tromp: i just stick z in there to save a few bits elsewhere int-e: tromp: I'd call it a (variant) Scott encoding arseniiv: tromp: but why z and not n? arseniiv: as far I understand z will not be useful(?) int-e: The variant allows you to write n s z instead of n (s z) z. int-e: And you can get the Scott behavior back by doing n (\_. s) z. int-e: So it's essentially the same? int-e: But incompatible, of course. tromp: yes, sorry for mentioning Church; it's just a Scott variant int-e: Okay. Glad we cleared that up :) tromp: so here's where the extra z comes in handy tromp: i can now define laver = \a. a (\b\a1. go a1 (idx b)) int-e: arseniiv: These weird encoding tricks come up a lot when squeezing lambda terms. tromp: whereas with pure Scott i would need laver = \a\b. a (\a1. go a1 (idx b)) b int-e: arseniiv: Along with things like picking the right argument order, and doing some funny transformations on folds (which can be justified by free theorems). tromp: the former allow me to never show the 2nd argument to laver tromp: yes, i also put the tail before the head in my cons to save bits arseniiv: interesting int-e: Funny though, I don't remember ever wanting to just swap the arguments of a Church numeral. b_jonas: dual SIM cards sure drains the battery of my mobile phone so quickly, though at least it also charges quickly too arseniiv: b_jonas: though at least it also charges quickly too => isn’t that more a symptom of the battery’s age? arseniiv: sometimes I drink green tea adding some milk to it. Tastes unusually b_jonas: arseniiv: more like of how the battery is a small one in first place in this model b_jonas: it's not that old, I bought the phone in 2018-11 according to https://www.perlmonks.com/?node_id=1225327 , so that's one year and a few months int-e: fungot: do you speak lapack? fungot: int-e: i'm actually thinking more about the actual integer values. int-e: (Just look at this matrix... http://www.netlib.org/lapack/lug/node26.html ... I get that it's all very regular, but limiting all identifiers to 6 letters is feels kind of crazy from today's perspective.) arseniiv: int-e: i'm actually thinking more about the actual integer values. => ring the bells, fungot being sensible again! fungot: arseniiv: by the time that k6-2 acted up, could you post some of the srfi-s." fnord int-e: arseniiv: Heh I didn't actually read the reply. fungot: So sorry! fungot: int-e: drscheme doesn't support ( fnord list-lib)...) x) ( 1 1)) int-e: fungot: No need to rub it in though. arseniiv: fungot: btw what do you think, does M-Audio Code 49 keyboard have some merit over M-Audio Oxygen 49 or not? fungot: arseniiv: and anyway i can't actually feel the vibration, i'm not supposed to register a type ( stm t), and suddenly firefox has nothing better to do fungot: int-e: it's also ironic that you appear so eager to deny it. int-e: `complain fungot's a big meanie! fungot: int-e: if you can call it this way, forcer. i think this language is evil indeed... i like the HackEso: Complaint filed. Thank you. arseniiv: fungot: you’re totally right about firefox, but what do you mean by vibration? Is one of them built not robust enough, or do you intrinsically feel MIDI data as vibrations? fungot: arseniiv: these headphones suck. forget it) as the basis; any number of such functions as above, each keeping their own local state... the value of the stack arseniiv: man, they even know about my headphones int-e: http://www.netlib.org/lapack/lug/node65.html is fun. tromp: ok, i switched to pure Scott numerals tromp: turns out you don't need a list index function in that caqse tromp: as long as your cons puts the tail before the head tromp: i.e. cons = \h\t\z.z t h int-e: is it just me or does that sound a bit dirty tromp: in that case the n'th element of a list is simply list n tromp: all is fair in war and codegolf:-) tromp: now my infinite laver is down to 223 bits tromp: and further down to 215 by switching laver arg order! tromp: and i have to say, the laver2 diagram looks awesome tromp: paste test: tromp: ┬────────── tromp: ┼─────┬──── tromp: ┼─────┼─┬── tromp: │ ──┬─┼ ┼ ┬ tromp: │ ┬─┼─┼ │ │ tromp: │ │ ├─┘ │ │ tromp: │ ├─┘ │ │ tromp: └─┤ │ │ tromp: └─────┤ │ tromp: hmm, doesn't look good in my IRC client tromp: (that was just the pred function) int-e: looks fine for me, but I'd still prefer a pastebin. tromp: https://pastebin.com/9wFrMpm0 int-e: weird. https://pastebin.com/raw/9wFrMpm0 looks better for me. int-e: hah, so much recursion tromp: yes, the Y's stand out:-) int-e: (the \x. x x part is easy to recognize) int-e: nice flag. int-e: tromp: Hah, those diagrams don't really work when there are no applications at all. int-e: (Though that's a limitation of the program more than the diagrams.) FireFly: the line-drawing glyphs look pretty good to me, http://xen.firefly.nu/up/2020-02-22_202521.png int-e: tromp: I mean, http://paste.debian.net/1131572/ would make perfect sense, wouldn't it? FireFly: would maybe look better with some extra horizontal lines int-e: FireFly: they represent lambda-terms, so there isn't really any room for *more* horizontal lines? FireFly: I meant more that ─┬─ might look better than just ┬ (or maybe ╶┬╴) FireFly: to make it a bit more pronounced int-e: FireFly: Well, ideally it would be using a square font. int-e: tromp: Oh, the ASCII and pbm versions actually deal with that case more gracefully. int-e: And now I'm confused... I obviously messed up my test(s). int-e: tromp: So never mind, false alarm. int-e: The only idea that remains is that one could stick an extra ╵ under the root of the `boxchar` variant of diagrams, and that's too minor to worry about. tromp: the boxchar has a root, but the alternative Boxchar omits is for aesthetic reasons tomaw: Global Notice] In around 20-21 hours we'll be taking NickServ, ChanServ, etc offline for a short while for relocation. During that time you'll be unable to auth to NickServ or connect via Tor. Further updates will be provided by WALLOPS, enable them with /mode +w int-e: Hmm, stumbled over Fortran's column major array storage, fun. int-e: But I've now successfully used lapack to solve a system of linear equations. Progress. :) tromp: posted the 215 bit Laver to this thread https://www.reddit.com/r/math/comments/f1mr5y/expressing_grahams_number/fihckrq/?utm_source=share&utm_medium=web2x zzo38: I don't know how it is working in Fortran, but the Microsoft BASIC compiler usually uses column major arrays but there is also an option for row major storage; I think FreeBASIC is row major only. zzo38: FireFly: In your picture still the lines are not lined up very well; on my computer (I use Fixed as the font) the lines are perfectly lined up properly, and are not fuzzy, either. FireFly: there's a minor font issue, yeah. my primary font doesn't cover some of the glyphs IIRC, for unknown reasons... I have a patched version of the font somwehere, but am not using it currently on this machine zzo38: Are you combining two fonts that don't match? Can the combination be changed? b_jonas: int-e: I recommend Eigen. it has a much more modern interface, and can do most of the things that BLAS+LAPACK can do b_jonas: including solving systems of linear equations fizzie: I recommend Eigen too, although I'm not particularly familiar with it. fizzie: Certainly you get less "ooh, that's so retro" experiences with it than BLAS/LAPACK though. int-e: maybe next time int-e: I don't actually mind the retro feeling. What I do mind is that the documentation (the LAPACK user's guide) doesn't cover the actual API (it gives you concepts and corresponding function names)... for that you have to go to the actual Fortran source files (as far as I can see). Once you realise that, I think it becomes quite usable. (example: http://www.netlib.org/lapack/double/dgetrs.f ) b_jonas: int-e: the docs are in a somewhat bad state, yes arseniiv: re BLAS/LAPACK/Eigen: and what thing does Numpy uses as a backend? (if it doesn’t use its own implementation) fizzie: My undestanding is that it uses the BLAS/LAPACK interfaces, so you can sawp the implementation to thinks like Intel MKL or OpenBLAS. fizzie: s/thinks/things/ blah fizzie: fungot: What do you use for linear algebra? fungot: fizzie: the problem is creating the word lists that are complicated." i didn't want to fix a bug or not arseniiv: fizzie: oh, interesting! Didn’t expect it may use these fizzie: https://markus-beuckelmann.de/blog/boosting-numpy-blas.html for a random blog post about it. arseniiv: also a week or two ago I surfed posts with names “… considered harmful” and ended up reading something about named tesors which is a suggestion to use named tensor indices in (particularly, ML) code using tensory computations as it may benefit such and such. And I thought: uh, wait, seriously you haven’t done it already? Penrose already invented abstract index notation years ago (and even that was suspiciously late, I think: the idea is so sim arseniiv: though there was an interesting point in the named tensor post which isn’t obviously related to abstract index notation: a suggestion to make only some indices visible to some code. Though that’s not too unrelated: we can treat “ground tensors” as structs with fields, all public, which one can cast to “tensor interfaces”, which can have less members. I’d add covariance/contravariance as a further improvement, but I don’t know at all if arseniiv: this would have any sense in real code. Maybe that would only harm arseniiv: ta-ta! b_jonas: and, by the way, Eigen can both provide a BLAS implementation and use a different BLAS implementation for optimizing its own operations tswett[m]: I feel a theorem coming on. tswett[m]: Suppose you have a stock market moving according to geometric Brownian motion. You can buy and sell stock, and borrow and repay money (with interest charged), with no transaction costs and no delays. tswett[m]: Theorem (?): You can make an arbitrarily large amount of money in an arbitrarily short amount of time with an arbitrarily large probability of success and an arbitrarily tight upper bound on the amount of money that may be lost. tswett[m]: Obviously this can't be done in the real world; it's a theorem about a flawed model, and the result isn't applicable to the actual stock market. tswett[m]: Here's the idea. Start by borrowing a dollar. Then buy one trillion dollars' worth of stock. Borrow and repay money constantly so that the amount of stock you own is always equal to one trillion times your net worth, disregarding the dollar you borrowed. tswett[m]: After a second, you'll have either an extremely large amount of stock or an extremely small amount of stock. If it's an extremely large amount, great job; sell it and retire. If it's an extremely small amount, borrow another 50 cents and repeat. tswett[m]: I might be falling prey to some kind of gambler's fallacy here. imode: currently, I am creatively and motivationally dead. imode: halted all my projects. spent most of the day in bed. imode: here's to those of you who are enjoying your time. ais523: tswett[m]: thinking about the Martingale gambling strategy (i.e. always bet enough that a win would cover all your losses so far; note that this doesn't work in the real world either), I realized that casinos effectively run Ponzi schemes ais523: if every better had infinite capital they would all make a profit in the long term, and so would the casino tswett[m]: Do you mean they're Ponzi schemes at the bettors' expense or the investors'? tswett[m]: Let's see, I'm trying to figure out if my theorem is actually true or not. tswett[m]: Suppose you try to do the same thing with, say, roulette. Start with a dollar and bet 99% of your money each time; stop when you have either a billion dollars or a billionth of a dollar. tswett[m]: Well, that's not a useful strategy because you have less than a one in a billion chance of getting to a billion. tswett[m]: Let's say it's a 50-50 coin flip game instead of roulette. tswett[m]: You have a 50% chance of losing 99% and a 50% chance of winning 99%. But there's a lot of compounding burden. If you look at logarithmic percentages, the loss is 461%L, whereas the gain is only 69%L. tswett[m]: You're going for a billionfold increase, which means you want to gain 2072%L before you've lost 2072%L. tswett[m]: But each play loses you about 200%L on average, and it's very unlikely that the variance will make up for that average loss. tswett[m]: Okay, suppose you try to reduce your compounding burden by making much smaller bets. Let's say you only bet 1% of your money at a time. tswett[m]: Of course, you still have less than a one in a billion chance of getting to a billion. tswett[m]: Now a win gives you a 0.995%L increase and a loss gives you a 1.005%L decrease. You're still losing about 0.01%L on average, and now the variance is much, much less. tswett[m]: So what happens if you take the limit as the bet sizes approach zero? Well, the expected value of the game is 0 no matter what your bet size is, so even with an infinitesimal bet size, the expected value remains 0. tswett[m]: So now if you apply that to investing in geometric Brownian motion with leverage... I don't know what that limit looks like. int-e: imode: Welcome to IRC, the place for people who have trouble moving on in their life. imode: int-e: you know, I've been on IRC for 10 years. and you're right. and I hate that. int-e: Well, about 15 years here. I kind of know what I'm talking about. imode: what happens when we die. int-e: Earth keeps moving. We actually have a good chance of going out with a (nuclear) bang. int-e: `? marvin HackEso: marvin? ¯\(°​_o)/¯ imode: I just realized my first few messages almost made a cute rhyme. int-e: a rap song in the making, perhaps. ais523: hmm, this place got so depressing while I was gone ais523: imode: for what it's worth, I've been there too, and I shook myself out of it eventually ais523: now I'm there again now, but still managing to at least get my day job done, and hopefully I'll recover soon imode: the oscillation hurts. int-e: . o O ( Look on the bright side: Without depression, we would have destroyed Earth centuries ago. ) int-e: ais523: I feel that one important difference between Casinos and Ponzi schemes is that Casinos don't punish late "investors"; everybody gets the same (somewhat lousy) chances of making a profit, except for the people running the scheme, whose chances are much better (that's where the analogy works again). ais523: nor do Ponzi schemes, intentionally int-e: (But don't ask me why I felt I had to capitalize casinos.) ais523: it's just that when they inevitably run out of money or get found out, late investors are the people who end up screwed int-e: Well, Ponzi schemes inevitably run out of investors. And often you get an exit scam on top. ais523: I guess the difference is that a casino's advertised average rate of return is negative ais523: so they accumulate money over time rather than losing it int-e: (Which is where the people running the scheme run off with all the money, and later turn up shot dead or swimming with the fish in a remote place.) int-e: I suppose you can put it that way, yeah. int-e: Also, casinos are far more romantic. ais523: in the UK, gambling machines have to advertise their rate of return on the outside of their case ais523: (it's normally around 90%) ais523: I wonder if that means that they can't be games of skill to any extent, as that would influence the rate of return? ais523: at least, from what I've seen of other people playing them, the choices it offers seem to be rigged to provide the same return no matter which choice you make int-e: Does it have to be exact or a lower bound? ais523: I don't know int-e: And yet it makes all the difference for this question. :-P int-e: (That is, whether you are allowed to reward skill.) int-e: I guess the people most interested in a stable payout rate are those running the machines. zzo38: I think that it is designed so that it can't pay out more than a certain percentage of all money put in, so that will ensure the rate of return is what it says it is, I think. I think that is what I read somewhere, at least. zzo38: I should think, they should fix it so that it is permitted to reward skill if the machine designer wishes to do so, although it is unclear how the rate of return should be advertised in that case. Do you know? ais523: I don't know int-e: Rewarding skill is allowed... apparently incluindg ripping off unskilled players: "THE RETURN TO PLAYER BASED ON BEST STRATEGY IS (VALUE) %" http://www.gamblingcommission.gov.uk/for-gambling-businesses/Compliance/Sector-specific-compliance/Arcades-and-machines/Gaming-machine-technical-standards.aspx (for example Section 8.3 in the B2 version.) int-e: Obviously this is for the UK (and not straightforward to find... the primary law is the Gambling Act 2005 which is easy enough to find, but the details are filled in by regulations such as these. zzo38: Yes, if it specifically says "THE RETURN TO PLAYER BASED ON BEST STRATEGY IS" then it is clear what it means. sixyears: good eve int-e: . o O ( such silliness: M -= M.Identity().diagonal().asDiagonal(); ) olsner: int-e: incidentally I spent most of this week working with (against?) Eigen int-e: olsner: I was just playing around. However, I made the mistake of looking at the machine code resulting from the naive M -= M.Identity()... and it had two nested loops :-/ olsner: to modify a diagonal you can also do something like M.diagonal() -= 1; (but probably with a random extra .array() somewhere, and maybe it randomly doesn't work with scalars at that place) int-e: Ah, that looks more proper actually. int-e: Yeah, M.diagonal().array() -= 1 works. int-e: Thanks :) int-e: I find the documentation of Eigen hard to digest as well, btw. The problem being unfolding the abstraction to find out what methods actually exist. int-e: For example I almost missed Matrix::row(int) and Matrix::col(int). int-e: (Because it's defined in DenseBase) olsner: I tend to browse around randomly to find methods accidentally mentioned in examples :) int-e: Im also mildly curious how (in)sane auto b = decltype(M.col(0))::Constant(-1); is. olsner: maybe the method to use is to just try stuff, like "I wish I could write X.row(foo) = bar" and then you find out both that row() exists and that it can be used as an lvalue int-e: (To get a compatible column vector with all entries equal to -1) int-e: olsner: Unfortunately I don't have that kind of faith in library designers. int-e: olsner: But I was actually clued in on this by an example... which pointed me to the block interface, of which row() and col() are members. ArthurStrong: Hi all. What is the name of problem of finding shortest path in a graph that has no Hamiltonian path? Like TSP, but edges can appear >1 in resulting path fizzie: ...restarted the wrong system. My own fault for not putting something more obvious in the shell prompt, I guess. int-e: Yay, reboot. int-e: It's way more fun with halt/shutdown -h/poweroff fizzie: I have a sinking feeling getting zemhill back up and running is going to be a headache. Fortunately, it's not really seen any use for some months. b_jonas: olsner: you can come to #eigen and ask questions, it's a friendly channel, or at least used to be a few years ago when I used eigen a lot b_jonas: fizzie: I actually have a shellscript to avoid this: (sudo kingreboot) reboots the machine only if its hostname is king b_jonas: also, it appears that twitter has changed their website again, so it now doesn't even load anything without javascript. it used to load a few pages long part of a thread, just hid it under an overlay that I could remove with user css zzo38: b_jonas: The mobile version still works int-e: b_jonas: Yes, they have some recent changes. So now I'm using the mobile version, which works reasonably well without JS, but only lets you in with cookies. Can't win :/ int-e: @botsnack int-e: kmc: Don't worry about surveillance on the Internet. Here, have a cookie. zzo38: Mobile version probably isn't a problem if you only want to read and not write, though. zzo38: (Mobile version also works even if you do not have an account.) int-e: (I don't have an account.) b_jonas: I'll try the mobile version, thanks zzo38: The TeXbook mentions that sometimes you will not want to defer a \write. However, it does not mention that you might want to defer a \write without shipping out the page. But, I have figured out a way to do a similar thing anyways (with some restrictions), involving alternating marks and penalties in an insertion, and then using \vsplit to extract the marks. zzo38: I found there is a DjVu driver for Ghostscript, and I read somewhere that it supports the pdfmark command (well, some uses of it; some pdfmarks are not supported in DjVu, which is good because I think they should not belong anyways), but the license of DjVu driver for Ghostscript is incompatible not only with Ghostscript but also with itself. Also, I don't know if it can be overridden the foreground/background mode. wib_jonas: If values of a type can have multiple possible representation of the same value, so I have a function that takes any representation to a canonical one, sometimes that's called a "canonical" value, sometimes a "normalized" value. when should I use which of those two words? and what's the verb form of "canonical", analogous to "normalize"? cpressey: I use the verb canonicalize cpressey: I don't know how many other people do wib_jonas: I'm asking because I want to name some function in a program that I'm writing of course wib_jonas: cpressey: I see int-e: Oh, -march=native makes a huge difference for Eigen, why didn't I think of that sooner. int-e: With thatr insight, lapack+openblas is still a bit faster, but only like 20% rather than by a factor of 2. wib_jonas: int-e: yes, because then you get to use more than just SSE2. but be careful, there's also a binary incompatibility issue if you link files compiled to Eigen with different optimization switches, int-e: Yeah, not an issue here. int-e: I've just been tinkering with http://www.research.ibm.com/haifa/ponderthis/challenges/February2020.html ... it's a just a single self-contained program. wib_jonas: and if you want to avoid that, you either need to set EIGEN_MAX_ALIGN_BYTES and EIGEN_MAX_STATIC_ALIGN_BYTES explicitly, or else be aware of which types can have different requirements depending on the switches. int-e: And the linear algebra is the boring bit. wib_jonas: int-e: try also -fno-math-errno wib_jonas: to make sure that the sqrt function doesn't try to check the flag and update errno taht is wib_jonas: ah, Markov chain stuff. int-e: Oh. But there should not be any no sqrt calls. int-e: It's just LU decomposition (that's the slow bit) and matrix multiplication. wib_jonas: int-e: ok. I didn't know your particular case, I'm just saying this for the future wib_jonas: it doesn't come up too often anyway int-e: And I can probably speed this up significantly using https://en.wikipedia.org/wiki/Sherman%E2%80%93Morrison_formula int-e: But I will focus on strategy first :) int-e: Though the stupid thing just found an eligible solution. int-e: (value: 66.97870495509361888) int-e: Well, not all of those digits are correct. wib_jonas: int-e: oh, and obviously, get a recent enough version of Eigen wib_jonas: and a non-ancient compiler wib_jonas: but I think you figured that out yourself int-e: I didn't pay attention to that... for most stuff Debian unstable is fairly up-to-date. Seems to have worked out in this case as well. cpressey: Suppose we have a set of functions that map syntax to syntax. (You could call these functions "macros".) Further, we want to characterize some of these functions as "hygienic" and others as "not hygienic". I propose that the difficulty of doing this depends on the data structure we choose for representing syntax. cpressey: By "syntax" I mean, a chunk of a program. So, we could represent syntax as character strings. But then this characterization is difficult. cpressey: If we represent syntax with S-expressions, it's a little less difficult. If we represent it with ASTs, it should be less difficult still. cpressey: I don't think I've said anything really earth-shattering so far. But now, I propose: if we represent syntax with ABTs, it should be even less difficult still to make this characterization. cpressey: Now, would de Bruijn indices make it even easier still? Perhaps - I don't know. But even if they do, that doesn't invalidate the chain of reasoning so far. cpressey: I'd like to treat ABTs as an abstraction, and whether that abstraction is implemented by alpha-conversion (performed as needed on demand), or by de Bruijn indices (rewritten as needed on demand), is an implementation detail. cpressey: int-e: ^ this is why "I like ABTs", if you care. cpressey: So if you think of an ABT as an abstract data type, it has operations to create primitive ABTs, and operations to build new ABTs from existing ABTs, and each one of these operations is guaranteed to preserve the binding structure. int-e: cpressey: Sure, and that's fine. int-e: cpressey: I called it a design pattern the other day, basically because of that view. cpressey: int-e: I see. I'd like to think there is a little more structure here than what I think of as a design pattern, but maybe not. "hygienic macro" feels like a design pattern though; no two hygienic macro systems seem they same, they all feel so ad-hoc. I'd like to see a better theoretical underpinning here, I think that's why I'm interested in it. rain1: a good theoretical basis for hygiene is the scope sets system rain1: just like you can partially reduce lambda terms under binders etc. with beta reduction. the scope sets system lets you partially expand code with macros cpressey: rain1: Thanks, I'll look into that. int-e: cpressey: I mean its' obviously not useless... It solves one problem that plain de Bruijn indices have: it's easy to mess up the index of a bound variable because one entered another binder. wib_jonas: also with de Bruijn indexes, it's harder to see all occurances of a variable wib_jonas: at least for humans. wib_jonas: and you have to renumber everything when you want to change the program to introduce a new binding in the middle int-e: Which is a solvable problem as well if you introduce a dual for abstraction that removes a variable from scope. int-e: (Removal works by index when working with de Bruijn indices. Say /2.t which means indices 0,1,2,3 inside t are mapped to 0,1,3,4... outside t. / is supposed to be the opposite of \.) int-e: And you have laws to push those around: /2.\t = \/3.t and /2.(t u) = (/2.t)(/2.u), or /2./5.t = /6./2.t int-e: tromp_: https://www.isa-afp.org/entries/Goodstein_Lambda.html int-e: tromp_: (I did update Goodstein.hs as well) tromp: thx, int-e b_jonas: oh and by the way, the IOCCC has closed 10 days ago int-e: Giving a whole new meaning to "March". int-e: (deadline is 2020-Mar-15 06:26:49 UTC) b_jonas: I'm stupid about time and date again b_jonas: I blame month names. just use numbers, and write them in %02d format, not %d nor roman numerals. b_jonas: wtf there's now RAM with over 4 GB clock speed? how do they ever make that work? b_jonas: (admittedly it's expensive, but still) b_jonas: I'd like fast RAM, but I didn't know it went that high zzo38: Why is the temperature of my computer going up higher now than it usually does? Still it isn't going above the "high" (+60.0 C) number, at least. b_jonas: zzo38: the new flu from China oerjan: ennesby, meet grippy oerjan: Banana51: Hey. Anyone here experienced with the npiet interpreter and decoding npiet? oerjan: is npiet something other than piet? oerjan: oh i see. oerjan: i know some here have done piet, at least. Banana51: Its the same Banana51: I have a challenge I have to solve, and it asks for a password. I have to reverse engineer it. It is a piet file. Banana51: I have tried to "visual trace" it, but I cannot find any compare instructions that compares to my input. b_jonas: put printfs in the interpreter? b_jonas: it might not be enough since there could be multiple execution paths with conditionals, but it's a start int-e: npiet has a non-visual trace already Banana51: put printfs in the interpreter? I have a .ppm file that I run with ./npiet -t, and it prints the actions (instructions). int-e: (But no, I have not used it for anything, not recently anyway.) Banana51: Yeah, that would be the -t I think Banana51: I know approximately where it compares, but there are no cc or compare instructions, which makes me a bit confused. Banana51: But yes, there seems to be multiple execution paths oerjan: maybe give it two different passwords and see where execution starts to differ oerjan: and then find out why Banana51: ill give it a shot, thanks. int-e: As for comparison it could be obfuscated in various ways, but it may also simply be a 'not', which does a comparison with 0. int-e: oerjan: Clippy got a face-lift :) b_jonas: how large is the piet program? is it large enough to do a strong cryptographic checksum of the password, to make it hard to decode it? Banana51: I wouldnt say it is that large Banana51: I think I just found a way to do it, by reading all the stack values and converting decimal -> ascii cpressey: I just noticed that this channel is the international center for esoteric programming library design. int-e: It happens. int-e: Though I had not realized we were branching out into architecture. Banana51: Seems like that was a dead end... Did not find anything useful... wib_jonas: `pbflist https://pbfcomics.com/comics/rubbed/ HackEso: pbflist https://pbfcomics.com/comics/rubbed/: shachaf Sgeo quintopia ion b_jonas Cale kmc tromp: https://mathoverflow.net/questions/353514/whatt-the-smallest-lambda-calculus-term-which-is-not-known-to-have-a-normal-for rain1: I like that question rain1: I had wanted to work on it but I didn't do it int-e: tromp: you need to specify a reduction strategy for that. int-e: tromp: At least for the quantitative version (the busy beaver function) rain1: I feel like it would be very interesting to approach this problem using automated theorem proving tromp: i specified normal order tromp: ps: fixed subject which moved it to https://mathoverflow.net/questions/353514/whats-the-smallest-lambda-calculus-term-not-known-to-have-a-normal-form int-e: tromp: Oh so you did, sorry. I was looking for something more verbose (leftmost outermost) tromp: i went with the Wikipedia nomenclature tromp: https://en.wikipedia.org/wiki/Lambda_calculus#Reduction_strategies tromp: i also thought it sounded less arbitrary:-) int-e: It does. tromp: i expect all terms under 50 bits should be manually decidable tromp: but things should get interesting under 100 bits tromp: one may be able to look for odd perfect number in under 200 bits tromp: computing divisors by indexing cyclic lists int-e: tromp: Oh I found your https://oeis.org/A114852 int-e: Though I wanted int-e: this for sizes up to 100 :) wib_jonas: int-e: follow the references int-e: Terms with size up to 50: 145448015544; size up to 100: 14186608955706026703799033 rain1: too many to check exaustively then int-e: wib_jonas: Well, the way I found the sequence is that I wrote code to compute it :P So I basically was already at my goal. wib_jonas: 145448015544 is around 2**38, 14186608955706026703799033 is around 2**84, for those who don't like counting digits because it's a computer's chore int-e: You can prune quite a bit (e.g., any terms with a non-duplicating beta-redex, possibly using some extended beta-reduction (what I have in mind is reducing (\x\y\z.M[x,y,z]) r s t to (\x\y.M[x,y,t]) r s). int-e: But the space will still be large after that. int-e: `? lol HackEso: lol? ¯\(°​_o)/¯ int-e: kmc: What are you laughing about? wib_jonas: https://www.smbc-comics.com/comic/villainy-theory another one about modern supervillain strategy, so soon after https://www.smbc-comics.com/comic/supervillainy tromp: well, you can also prune a term t if it ever reduces to some term smaller than t tromp: (generalizing your existence of non-duplicating beta-redex) tromp: i changed the lambda busy beaver definition to use normal form size rather than number of normal order reduction steps tromp: see https://mathoverflow.net/questions/353514/whats-the-smallest-lambda-calculus-term-not-known-to-have-a-normal-form zzo38: I played GURPS game today. Now in addition to Ziveruskex and Strixan is also Iuckqlwviv Kjugobe, who has a astrolabe, Fanucci deck, pet leech, robe, and quarterstaff (which he traded for a magic quarterstaff, but intend to trade back later). Kjugobe is also psychic. zzo38: But the princess got lost and they blamed us for it. But I found some sort of magic tree, the parallax doesn't looks like properly, but then we went there and found ourself in some kind of desert with a lot of sand (including wind). zzo38: Do you like this? b_jonas: zzo38: ooh, that part about the tree and desert sounds like Jimmy Knopf zzo38: Who is Jimmy Knopf? oerjan: the birth of ennesquid oerjan: zzo38: What is that? oerjan: latest schlock mercenary oerjan: `olist 1193 HackEso: olist 1193: shachaf oerjan Sgeo FireFly boily nortti b_jonas oerjan: @metar ENVA lambdabot: ENVA 260250Z 12006KT CAVOK M11/M13 Q0998 RMK WIND 670FT 10009KT zzo38: But the Sun is almost directly overhead, therefore we are probably close to the equator (it is the equinox), and this is a small astrolabe without interchangeable plates, so some of the functions will not work at this latitude unless it is a magic astrolabe that can automatically recalibrate itself. arseniiv: `? password HackEso: The password of the month is leapfrogging rats. arseniiv: leap earring arseniiv: it would be silly and wonderful if we didn’t know if the current year is leap until it almost ends arseniiv: with the mechanism like something with leap seconds, I presume? int-e: fungot: what's my motivation? fungot: int-e: you mean demoscene.tv requires proprietary software? :) fnord/ compilers/ linguine/ linguine.py': errno 13 permission denied: ' lament' oerjan: the proprietary fnord suite, the bane of demosceners everywhere int-e: Freefall isn't helping my motivation either. int-e: (Monday's that is) oerjan: 's ok sam will fix it all he just needs to get a green cloak for proper style oerjan: s/cloak/outfit/ oerjan: today's girl genius went about as i'd expected oerjan: (vaguely) int-e: Nice reminder of the hat though. oerjan: there were way too many scenes in comic where gil _should_ have noticed. int-e: But Gil never notices anything, except when it matters. oerjan: i'm pretty sure it's been pointed out that he notices more than he lots on int-e: Not that I noticed ;) int-e: (No, it has definitely been pointed out that he notices a lot more than he lets on. There have also been some interesting fights that he won way too casually.) cpressey: int-e: Now that your paper is safely submitted to AFP, I could give you my feedback. int-e: cpressey: I might feel obliged to update it... int-e: (there is a process for that; what happens is that the update ends up in the development version and in future AFP releases. AFP-2020 will appear at some point.) int-e: The old versions are archived, so it's still transparent. int-e: cpressey: But sure, go ahead if you like. cpressey: "omg in Isabelle/HOL the expression for G_16 cannot be typed?! lol l/\m3" cpressey: See, I didn't think you'd find it useful. int-e: cpressey: Yeah that isn't useful. I even mention it in the paper :P I didn't mention Coq or Agda, because I really didn't want go looking for the proper references. int-e: (Or figure out whether there should be more ITPs or programming languages on that list.) cpressey: It was more of a reaction than feedback, I suppose. But on the subject of ITPs. I've been toying with the idea of learning one, but I don't have many strong feelings towards any of them. cpressey: I am tickled by the fact that Isabelle has "moreover" and "ultimately" keywords. int-e: cpressey: It also has 'also' and 'finally'. int-e: cpressey: Which are for chaing (in)equalities. int-e: *chaining* (is that an auto-portmonteau?) cpressey: int-e: Have you seen https://github.com/avigad/arwm ? I found the slides interesting, haven't read the notes yet. int-e: No I have not. int-e: August 2019, hmm. int-e: Well, not sure how I could've found out either; for example, I don't see anything on the isabelle users mailing list... int-e: (though perhaps I missed it) cpressey: Gah, looking over all the choices again, I still can't decide, and I forget why I wanted to do this again? int-e: I've been meaning to look at Lean for a while now. Learning any ITP is a major investment of time, and if you formalize anything non-trivial, it's bound to be an exercise in frustration (you may expect to spend 90% of your time on proving obvious things, or thinking of ways to avoid that kind of dive into trivialities). int-e: (One of the running gags is that formalizing a paper proof is easy until you run into the word "obviously".) int-e: I think both Coq and Isabelle/HOL are very formiddable contenders. HOL4 and HOL Light have large bodies of formalizations as well. Lean is a promising new project. And there's a lot of things I know exist but know little about Mizar strives to be accessible (and definitely inspired Isabelle's Isar proof language). ACL2 is huge but again I know fairly little about it. PVS is probably on its way... int-e: ...out. Agda is more of a programming language. I'm sure I'm missing a ton of other stuff. int-e: Coq will work better for shallow embeddings of PL stuff (and I don't see Isabelle/HOL growing strong in the PL area for this reason...). Isabelle/HOL commits to classical reasoning very early on, which has advantages for reusability: Only one kind of sets, only one kind of natural numbers. There's also a big formalization of real numbers and analysis included... nbot sure how Coq does there. int-e: cpressey: Now you sound more like a PL person to me, so I'd reluctantly recommend Coq. I like Isabelle/HOL better (largely because of the nicer proof language). int-e: (And of course because I've used it way more than Coq.) int-e: But I also think the builtin proof tactics in Isabelle/HOL are just better. The number of proofs that are solved by 'auto' (which combines rewriting and classical reasoning for quantifiers, sets, and the like) is fairly amazing... I have not found a Coq equivalent yet (the two parts, rewriting and refining goals by introduction and elimination rules, only exist separately, as far as I've figured... int-e: ...it out) int-e: But experience counts for so much in this area... that Goodstein thing could easily become twice as long without a couple of tricks that I've learned over the years. int-e: Basically I've built an intuition for what auto can and cannot do. I can't fully explain it. And I don't have anything approaching that for Coq's proof tactics. int-e: (And if you look inside that theory you'll see that many 'auto' uses come with extra hints (additional simplification and introduction rules, mostly.... sometimes flipping a simplification rule because the default direction of rewriting happens to hurt the proof in this particular case); there's a lot going on under the surface (a result of exploring the proof goal interactively and then... int-e: ...extracting those hints for auto from that). int-e: Hmm, long monologue. Oh well, this is about 6 years of my life. cpressey: int-e: Thank you. I was in fact leaning towards Coq (yesterday, before I started wondering why I wanted to do this again). cpressey: My interests in this area are difficult to explain, even to myself. It's not like I have a great deal of mathematics laying around that I want to formalize. To some degree, I'm interested in proof languages per se, as computer languages, just as programming languages are. cpressey: I tried to learn Agda once. It didn't go well. int-e: I've actually used Coq a little bit: https://github.com/int-e/coq-playground/ (there's both a Coq and an Isabelle/HOL version of Dilworth's theorem in there. The Isabelle version is shorter, but it's not a fair comparison; I wrote the Isabelle version *after* the Coq version, so some of the compression is from understanding the proof better; another part is of course that I have much more... int-e: ...experience with Isabelle/HOL. I still think that Coq is a tad worse at arithmetic (which does come up a few times). cpressey: I have the following very general problem: dependent types rub me the wrong way. I would have to learn to put that aside before I would be able to get very far with anything where type-value dependence is prominent. int-e: (Both developemnts have a huge monolithic proof at their core... Dilworth's theorem just keeps stacking more and more information extracted from the setup until finally it all combines into a successful conclusion. This means that factoring the proof would result in lemmas with tons of assumptions. The formalization is embarrassingly large compared to the paper proof; compare... int-e: ...https://en.wikipedia.org/wiki/Dilworth%27s_theorem#Inductive_proof . int-e: cpressey: Oh I'm not a huge fan of dependent types either *especially* for programming. int-e: Maybe it's a matter of having convenient coercions for the common case that you don't want to prove anything about your program and just get on with it. int-e: ("trust me, I know that n+m = m+n for natural numbers") Taneb: I like dependent types but mostly because I find them fun int-e: I'm less dismissive of their use in ITPs though. int-e: Since there the purpose is to prove everything rigorously. int-e: So it's more about expressiveness of the term language, and more expressiveness is usually better. (There's a cost to this... automatic proof methods have to deal with those types, so that gets harder.) Taneb: int-e: I know Agda has "trustMe : ∀ {a} {A : Set a} {x y : A} → x ≡ y", is this the kind of coercion you're after? int-e: Taneb: That's the kind of thing I'm after, yes. Except that's too verbose. int-e: Btw, I have not actually tried to use Agda; this is speculation, somewhat educated by working with constraints (and, to a far lesser extent, type literals) in Haskell. Taneb: Have you tried Lean? (disclaimer: I have not). I believe there you can do as much or as little proving as you like, but I may be mistaken int-e: Taneb: I've been meaning to look at Lean for a while now. Taneb: Ah, I didn't see that int-e: (No, I can't really blame you for not reading all that.) int-e: (Especially since I am terrible at catching up on context myself.) cpressey: There are a few ITPs based on set theory (Metamath, mainly) but they're a definite minority. The general feeling seems to be, if you want to formalize mathematics, you want to avoid set theory, you want to use type theory instead, so that some ill-defined things can't even be stated. cpressey: And then, beyond that, most of those ITPs use a type theory with dependent types, because more expressive. But is there any space for an ITP based on a non-depedent type theory? cpressey: Like (just blue-skying here) System F, or System F_omega? cpressey: (Or do you just get a programming language if you try that?) Taneb: I keep meaning to mess around more with metamath int-e: cpressey: I think I would like a System F ITP. But I'm not sure where it should come from... I mean these systems are typically developed in Academia and what can you publish about this? Any reviewer will say "but we already have Coq which does more"... int-e: (But as usual this may be my lack of imagination.) cpressey: It could come from the burgeoning field of esoteric proof languages... :) cpressey: Or it could if I had more spare time int-e: Well, making a /usable/ ITP is a huge effort. cpressey: No argument there cpressey: On a different note, this year I learned what a "fexpr" and what the "vau-calculus" is, and realized this is basically what Robin is. (I borrowed the idea from PicoLisp, which doesn't use that terminology at all.) cpressey: And realized that conventional exception handling is (roughly speaking) dynamically scoped and therefore technically violates referential transparency. arseniiv: I am tickled by the fact that Isabelle has "moreover" and "ultimately" keywords. cpressey: It also has 'also' and 'finally'. => wow! Though, `finally` isn’t that new after languages with C-like syntax and exceptions int-e: arseniiv: Well, it doesn't have "throw". arseniiv: int-e: I propose adding “throw” somewhere as a comment marker, like in “throw that human language text away” :D arseniiv: re esoteric proof languages: are there any? (and I’m almost hooked but I can’t say I could try making one myself, I have too little experience with things for simplifying proving in the real proof assistant thingies, so the image would be incomplete) int-e: arseniiv: can you name a non-esoteric one... arseniiv: int-e: erm, don’t Isabelle, Coq, Agda mentioned above count? cpressey: I have https://github.com/catseye/Maxixe but it's hardly esoteric. cpressey: Metamath's syntax certainly *looks* esoteric. int-e: arseniiv: I may have been somewhat facetious there. :P int-e: arseniiv: My more serious thought process went in the direction of minimal logic, pure Hilbert systems... anything that lacks second-order instantiation of lemmas because you can just redo the lemma's proof in place. arseniiv: cpressey: ah, hm, Metamath could be claimed to be an esoteric one, now that I think int-e: (This is a first-order logic phenomenon, obviously. You prove something that holds for an arbitrary predicate P. But you can't instantiate P later on.) arseniiv: anything that lacks second-order instantiation of lemmas because you can just redo the lemma's proof in place. => but that’s too boring, or should I say, inhumane cpressey: If it's repetitive and inhumane in the way brainfuck code is repetitive and inhumane, that's an argument for it being esoteric cpressey: And maybe one could build on that to make something a bit more interesting. int-e: Yeah that was kind of my reasonings... those logics were not made to be used. int-e: They have their place in reasoning *about* proofs. (AKA Proof Theory.) int-e: So they're in a similar niche as (most) Turing tarpits. int-e: (most, because some of them are really hard to reason about, and also some of them are actually fairly programmable...) int-e: The main programmable Turing tarpit is lambda calculus, simply because the mechanism for evaluation that is offers is very close to the mechanism we use for code reuse: take an existing paramterized program and instantiate the paramter. int-e: Yes, basic data is represented in an unfamiliar way, but you can treat that as an abstraction... and soon you can write ordinary functional code. cpressey: It does look like Coq is quite heavily used in the "proving properties of programming languages" space. Taneb: `quote HackEso: 764) Do you think " `addquote [with no context] < zzo38> Do you think psychology is worse, or not?" is worse, or not? arseniiv: If it's repetitive and inhumane in the way brainfuck code is repetitive and inhumane, that's an argument for it being esoteric => right, but that’s why I’m not writing in it and don’t make its analogs :D though I’m guilty in writing a simple interpreter of it, which compiles to a slightly optimized bytecode, but that was no big feat, so no special dedication too arseniiv: int-e: hmm now I think about a Hilbert-style language indeed, but with more usability still, though via adding a C-style preprocessor to it. Maybe that would be both simpler and a bit funny, as one would be able to write incorrect macros arseniiv: hm could one continue the C analogy further?.. Like, how could we make a proof language not only just low-level, but also potentially unsafe?.. arseniiv: eh, Metamath is very good at being esoteric in that way. One can write syntax definitions that would lead to ambiguity, and actual proofs in .mm files are stored as a RPN (if I remember that it’s a reverse one indeed) of rule applications, referenced by their names. And if that’s not enough unreadability, there’s also a compressed format (though fairly human-readable one, as it’s not a binary encoding of some sort, but a seque arseniiv: ce of rule names being used and then a string of corresponding ASCII letters (at least that’s what I’ve seen when there are not too many rules involved) arseniiv: hard to outdo kspalaiologos: greets b_jonas: int-e: "finally" isn't that unusual, python and java and javascript and more languages also have that as a keyword int-e: b_jonas: that's totally missing the point int-e: Isar's "finally" has a very different meaning. zzo38: What is Isar's "finally" meaning? int-e: Hrm. Isar is a proof language; the central statement is 'have "foo"' followed by a proof to establish that "foo" holds. Such facts can be used later one either by giving them names, or by chaining them more implicitly. int-e: One way of chaining is "then"; have "foo" then have "bar" makes "foo" available for the proof of "bar". int-e: But sometimes you want to chain multiple facts into a proof. You can do that using "moreover" and "ultimately": have "foo" moreover have "bar" ultimately have "baz" will chain "foo" and "bar" into the proof of "baz". int-e: Now... similar to "moreover" and "ultimately" there is another pair, "also" and "finally". They use transitive reasoning; if you do have "a = b" also have "b = c" finally have "foo" then the chained fact will be "a = c". (There's more to it; for example you can write "... = c" instead of "b = c", but this is the basic story.) int-e: The full gory details are somewhere in https://isabelle.in.tum.de/dist/Isabelle2019/doc/isar-ref.pdf int-e: (I also wonder whether any of that explanation made any sense.) zzo38: Converting the German "ss" ligature into uppercase (e.g. "\xDF".toUpperCase()) produces "SS" in V8 JavaScript, but leaves it unchanged in Mozilla JavaScript. b_jonas: int-e: wasn't the point that "moreover" and "ultimately" are strange words to be used as pl keywords? b_jonas: maybe I only think that because I don't use SQL much b_jonas: ah, I see arseniiv already said that about "finally" arseniiv: (I also wonder whether any of that explanation made any sense.) => I don’t know how proofs look like but I think I get these constructs in most part zzo38: I think that "moreover" and "ultimately" are not keywords in SQL either. But, different programming language has a different use so it will have different keywords too, I think. int-e: Meh, finally wrapped up the Ponder This thing. I had almost all the relevant ideas the first day; what took me so long, I wonder. Taneb: Idea I just had for a new game: Curling Go int-e: is this a gentle variant of throw-in go... int-e: or do you just do it mathematically... require the stone to be able to travel to its final spot on a straight line without touching other stones? Taneb: You play on an ice rink int-e: (possibly restricted to verticals and horizontals) Fuchs: Global Notice] During the Easter weekend (April 12th to April 15th 2020) we will purge unused nicks and accounts from services. Please see https://freenode.net/news/scheduled-maintenance-services-database-spring-cleaning for details and what you need to do in order to keep rarely used nicks. Feel free to ask any questions you might have in #freenode or staffers listed on /stats p. int-e: fungot: what year it is? fungot: int-e: ' ok' when you've digested what i've said. :) int-e: fungot: is that supposed to be hard to stomach? fungot: int-e: anyone using sxml-match? something about static typing in the names, people might be wondering now why this isn't working for some reason. :p http://www.deviantart.com/ deviation/ fnord arseniiv: have you seen somewhere a proof that for all real a and natural N, points {na mod 1 | n ∈ 0..N} ∪ {1} divide [0; 1] into segments of at most three different lengths? It’s quite an obvious fact but I can’t make myself sit and prove it rigorously. It seems I should look through all length configurations possible here and I had even made a model in Geogebra (lol) to help me see them all with my eyes, but I just procrastinate away arseniiv: every time kritixilithos: arseniiv: attempt at proof, the differences are s_n-s_{n-k} (which occurs until n-k 70/2^53 lambdabot: 7.771561172376096e-15 int-e: > 128/2^53 -- corresponding ulp lambdabot: 1.4210854715202004e-14 int-e: b_jonas: So all things considered that's pretty good. And it's okay; I produce candidate solutions at 1e-12 and filter them with a GP script which is much slower but offers better precision. b_jonas: int-e: yeah, that's what I should do for the small prime factors problem. double precision is enough to filter down to a very small number of candidates. mind you, it's easier there because there's much less rounding error. int-e: Are you still planning to work on that? b_jonas: int-e: probably eventually some time... dunno int-e: b_jonas: I guess the real question is, would you mind if I told you what my approach was? b_jonas: int-e: I would't mind b_jonas: I am more or less already decided on my approach, though I can vary parameters int-e: b_jonas: I basically came up with a meet-in-the middle approach. The idea is that if you have N written as a product of (quite a few) primes, then it's very likely that the product can be split into two nearly equal parts. So if N is too big for brute force, I gather solutions centered around sqrt(N) first, and then look for pairs of those whose product is close to N. int-e: The caveat is that this easily misses solutions that have few distinct prime factor. int-e: *factors. int-e: You can compensate for that somewhat by also looking for solutions near N/p for primes p in the list. int-e: Anyway, the beauty of this approach is that you get closer to N (relatively speaking) as N increases. tomaw: Global Notice] We're due to complete the final part of our services migration this weekend. Sunday, around 1800UTC ChanServ, NickServ etc will be offline for a short while. Further updates will be sent via WALLOPS (/mode yourNick +w to receive them) oerjan: surprisingly, it looks like int-e may be wrong about the foglios. although probably just temporarily. oerjan: also i find that diagram strangely parallel to schlock mercenary a few days ago oerjan: well if it's a diagram. it could be just background decoration suspiciously looking like that. oerjan: maybe it's a shout-out oerjan: hm i don't think it's decoration because it's absent in the neighboring panels oerjan: (https://www.schlockmercenary.com/2020-02-22) oerjan: * cpressey: Good morning. My researches into ABTs have revealed a bewildering array of attempts to "solve the alpha-equivalence problem" in a nice way". cpressey: Especially when I got more into the Coq related literature, which makes sense, since a lot of people using Coq are using it to prove things about languages. So they want it to be able to reason about named things more easily. oerjan: what about attempts to prove it unsolvable wth oerjan: hm unfortunate acronym oerjan: `? dth HackEso: dth is the dth ordinal. dth? cpressey: Yeah well, it's probably a bit hard to publish a result that consists of "Argh, I give up", isn't it? oerjan: no, what you do is "Argh, I've proved _no one_ can do it" hth cpressey: "in a nice way" though oerjan: fiendish oerjan: although that reminds me a bit of those P vs. NP obstacles scott aaronson has sometimes written about cpressey: https://homepages.inf.ed.ac.uk/jcheney/programs/aprolog/ cpressey: http://blog.discus-lang.org/2011/08/how-i-learned-to-stop-worrying-and-love.html cpressey: this will work int-e: cpressey: make sure to keep an escape route for yourself int-e: @tell oerjan I may have been wrong about the Foglios but I was definitely right about Clippy. lambdabot: Consider it noted. int-e: arseniiv: 15 digits now (I left the program running over night, but it's stopped now so this will be the last update) ;-) arseniiv: int-e: I hoped you’d get to 20! (not a factorial) int-e: . o O ( I wonder how much could be accomplished in 200,000 years of computation though.) int-e: arseniiv: I won't say impossible, but I have no clue how to get there. int-e: Other than extreme luck, perhaps. kritixil1: arseniiv: did you find a proof of the segment length problem? int-e: (200,000 years because the last few dates on the current list of solvers are all in February 202020) int-e: Hmm, cute. But the "uncountable ordinals" reference feels off. int-e: (Looking at the int** thing.) arseniiv: kritixil1: not yet int-e: Actually I'm sure this is ill-defined; one should be able to encode Russell's paradox in this. int-e: Unless it forbids recursion, hmm. arseniiv: if they wouldn’t mention pointer types as an analogy, which isn’t a good one anyway. they wouldn’t need to say several times that changing an int* value doesn’t change anything other int-e: Well, a lot of paradoxes anyway, maybe not Russell's in particular. cpressey: From one of the examples it looks like int* is the same as int(int) so what is this actually cpressey: C already has mappings from ints to ints, they're called functions arseniiv: yeah in Haskell terms it allows Bool and data NatF (n :: Nat) where { NatZ :: Nat -> NatF 0; NatS :: (NatF n -> NatF n) -> NatF (n + 1) }, only all the values are strict arseniiv: I’d also think that modern C++ frowns upon indexing pointers but IDK cpressey: I expect they don't consider the inconsistency an actual problem, they probably categorize it under "the interpreter may never halt if it is unable to prove that two values are equivalent." int-e: arseniiv: Well what int** adds is an oracle... I suspect for the whole arithmetic hierarchy, but I have not thought it through completely, just handwaved that each level of contravariance should give you an alternation in quantifiers. int-e: And, of course, inconsistency. cpressey: int-e: So Coq also has an "auto" tactic. I did my first proof in Coq, I got halfway, I wasn't sure how to finish it, so I tried "auto" and it worked. I'm still not sure what it did. int-e: I think it mostly uses existing introduction rules to solve goals recursively? int-e: There's some setup for this, where lemmas can be registered for use with auto... I forgot what it is. There is a #coq (or ##coq? should be the former...) btw. cpressey: The proof I was doing was a very simple one so I'm not surprised it worked, it's more of a comment on the opacity of working with tactics. int-e: oh yeah, but soon you'll be happy it worked and move on ;) int-e: But that said, at the beginning it may actually be worthwhile to attempt a more detailed proof without automatic tactics. int-e: Often the real problem is to find the applicable lemmas. And you'll need to do that yourself when the automatic methods fail (and they often do...). int-e: I forgot, but I have some notes here... http://paste.debian.net/1132703/ int-e: (basic ideas for exploration) arseniiv: today is a good day int-e: fungot: is it? fungot: int-e: i always use. " you'll need this to tell your boss and coworkers and all your goddamn family which is made of! int-e: fungot: stop being coherent fungot: int-e: fnord of data? or only boolean?, and i don't cpressey: It's not a paradox, it's simply an infinite loop, see? int-e: I'm more irritated by the absence of global variables in conjunction with the example at https://esolangs.org/wiki/Int**#Functions int-e: But if there's nontermination then equality becomes more interesting. wib_jonas: so the whole "uncountable ordinal" thing is a red herring because they're all countable ordinals? int-e: Nah, there are no ordinals at all. cpressey: I'm guessing sure they meant "levels of the arithmetic hierarchy" where they said "ordinals" cpressey: That's right, I'm guessing sure. cpressey: Not going to attempt to correct that. int-e: They could simply mean cardinals. wib_jonas: cpressey: that might make sense cpressey: "cardinal" would also make more sense than "ordinal" int-e: which makes a bit of sense; testing equality of two (int -> int) -> int -> int functions naively means testing all uncountably many (int -> int) functions. int-e: ("naively" -- I would expect that there is a countable test set that always works) int-e: On a meta level, at least. In fact... start with a countable model of ZFC ;) wib_jonas: int-e: you can't find one of those models without being able to decide the truth of any unparametrized first order logic statement about natural numbers though wib_jonas: it's no surprise, there's no easy cheat to collapse the arithmetical hierarchy int-e: wib_jonas: Oh sure, I didn't mean to suggest that any of this can actually be done in "practice". int-e: . o O ( what happened to 0 to 79? ) kritixil1: fungot: which one's the real wib_jonas fungot: kritixil1: it might be wib_jonas80: I disconnected my laptop from the company network to diagnose a network problem wib_jonas80: then reconnected, but didn't bother to disconnect from irc first, so the other nick is still connected wib_jonas80: I'll fix that in a moment wib_jonas: there, now I'm wib_jonas wib_jonas: kritixil1: are you the real kritixilithos? int-e: . o O ( dear pixel cloud on my screen, define "real" ) wib_jonas: int-e: I don't know how the wob client chooses fallback nicknames, but I think this is more sensible than the underscore escalation method kritixil1: fungot: what do you think, am i the real one? fungot: kritixil1: no one comments on my perl style welcome :)), so i can crash due to my fnord alist or is something not going to waste any more of those undeclared identifiers now: wib_jonas: for some reason, listening to a performance of a classical musical opera where the libretto is originally in italian language but is sang in german sounds weird and wrong to me, much more so than when such an opera is sang in Hungarian wib_jonas: but maybe I'm just not used to it wib_jonas: I mean, there's a reason why some operas are in italian, others are in german (and a few are in french), so when it's sang in german, that seems like it's sang in the wrong language, whereas if it's in hungarian, it's obviously just a translation, because the original can't be in hungarian int-e: "Let's say that behavior in any disputable situation is implementation-dependent." int-e: Okay, that means we have a moving target for all interesting questions... moving on. b_jonas: int-e: are you reading old C code that doesn't know about or and breaks if long isn't exactly 32 bit wide? b_jonas: or the opposite, breaks if long isn't the size of a pointer b_jonas: both kinds of code exist b_jonas: sometimes you can find fixed versions of the source code that replace long with hopefully the correct type b_jonas: now we have and that partly solves this problem, as in, we now have a way to refer to an integer type that should be exactly 32 bit wide (int32_t, uint32_t), or the size of a pointer, etc, b_jonas: but there are still some problems, eg. there's an lrint/lfloor/lceil which return long, and an llrint/llfloor/llceil function which returns long long, but now how do I convert a floating point number to a 32-bit integer? int-e: b_jonas: No, I was engaging on the esowiki talk page for int** int-e: And Hakerh400's latest answer made me lose all my interest. zzo38: I read somewhere apparently they said that German language is too brutal for opera, and Italian is better. I don't know so much about opera, but, nevertheless I think they can try and then they can see if it is better or not. Different people might have a different opinion, too, I think. spruit11: zzo38: Weird? There's a _lot_ of German opera. spruit11: https://en.wikipedia.org/wiki/The_Magic_Flute <- Mozart, pretty well known. spruit11: You probably ran into a rivalry because Italian and German operas are the most well known. Then French, then English, both far behind. b_jonas: spruit11: yes, and that's why it sounds weird when an Italian opera is sang in German. zzo38: Well, I just mention what I read. Maybe that is what they meant; I don't know. What I know is that I don't know so much about opera, so I do not have any of my own opinions about it which is any good. zzo38: Do you like this? http://zzo38computer.org/gurpsgame/1.ui/wiki?name=Session+28 kritixilithos: ^^^ how do you store an arbitrary precision integer in orca? kritixilithos: (assuming no bounding box) int-e: `? password HackEso: The password of the month is leapfrogging rats. int-e: fungot: got fun? fungot: int-e: it sucks bigtime on anything requiring unboxed arithmetic by default otherwise... oh well int-e: . o O ( is there such a thing as bottom-up iterative deepening ) arseniiv: fungot: how are you today? fungot: arseniiv: but people *do*!! i want a mapreduce cluster now much to the point b_jonas: I think I just beat my personal best in impractical order to go into shops. I first went into Lidl, bought over 13 kilograms of food plus soda, some of which had to go to the freezer, then went to the DM shop next to it, and bought a single Carmex lip balm, which weighs 15 grams with packaging. That's a ratio of over 800 for impracticality. b_jonas: hi arseniiv arseniiv: fungot: but isn’t one happier when they have less needs of that big a caliber? fungot: arseniiv: actually i used fractions, but that would just be arseniiv: hi_jonas! int-e: . o O ( std::cout << "print solution here" << std::endl; ) int-e: programming is tedious :) int-e: Err, wtf. How am I supposed to use this macro in the presence of namespaces: define l_True (lbool((uint8_t)0)) (don't answer this, I know how, I just don't like it) arseniiv: do you like a language with one-letter keywords? arseniiv: b c Class { p i field = 0; b v setField(i value) { t.field = value; } } // J int-e: arseniiv: Not really. Typing isn't really where the time goes when programming, most of the time. int-e: escpecially for keywords where muscle memory sets in. arseniiv: int-e: ah I know! (At least that’s for me too.) But some programming language creators apparently think otherwise… int-e: If you can pick a shorter *meaningful* keyword, sure, go for it. arseniiv: like you’d probably seen pub mut fn go int-e: fun vs. function I can get behind; fn is a step too far. int-e: > (\x -> x) () -- beware of hypocrisy int-e: I'm at the time in my life where I'm using a SAT solver and need a cardinality constraint. int-e: s/time/point/ int-e: so I need a break :P b_jonas: fungot, do you used interlaced video? fungot: b_jonas: if you send a message cloaked: what's the topic int-e: `wElCoMe cloaked HackEso: cLoAkEd: WeLcOmE To tHe iNtErNaTiOnAl hUb fOr eSoTeRiC PrOgRaMmInG LaNgUaGe dEsIgN AnD DePlOyMeNt! FoR MoRe iNfOrMaTiOn, ChEcK OuT OuR WiKi: . (FoR ThE OtHeR KiNd oF EsOtErIcA, tRy #EsOtErIc oN EfNeT Or dAlNeT.) kspalaiologos: `wElCoMe HackEso: wElCoMe tO ThE InTeRnAtIoNaL HuB FoR EsOtErIc pRoGrAmMiNg lAnGuAgE DeSiGn aNd dEpLoYmEnT! fOr mOrE InFoRmAtIoN, cHeCk oUt oUr wIkI: . (fOr tHe oThEr kInD Of eSoTeRiCa, TrY #eSoTeRiC On eFnEt oR DaLnEt.) kspalaiologos: interesting b_jonas: kspalaiologos: by the way, if you rewrote your bot and want its nickname back, ping me, I'll transfer it back kspalaiologos: hmmm, I've been doing different things lately kspalaiologos: but I'll try rewriting the bot cloaked: thanks all, nice to meet you cloaked: I like the lime slices- very tasteful :] int-e: kspalaiologos: There's `WeLcOmE as well, for symmetry int-e: `welcom HackEso: welcom? No such file or directory int-e: `elcome HackEso: elcome o he nternational ub or soteric rogramming anguage esign nd eployment! or ore nformation, heck ut ur iki: . (or he ther ind f soterica, ry #soteric n Fnet r ALnet.) int-e: (No symmetry there, apparently.) kspalaiologos: a friend let me run a malbolge program on his dgx2 kspalaiologos: first time in my life I have seen my malbolge program run from start to end lol kspalaiologos: (a complex malbolge program obviously) kspalaiologos: also my TI-link cable will be here in 9 days kspalaiologos: and I'm planning to do some interesting stuff with it kspalaiologos: like, program a tracker and use my TI-83+ as a music player kspalaiologos: because I've got a pair of headphones on 2.5mm jack lying around kspalaiologos: I thought about making a chess engine on a calculator, I've got it programmed and it plays out quite well kspalaiologos: around 600 byte binary, written in z80 asm b_jonas: how will that work? does the TI-83+ even have sound hardware that can play more than beeps? kspalaiologos: it has a jack port b_jonas: kspalaiologos: 600 bytes? isn't that shorter than Oscar Toledo's chess engines? b_jonas: port, sure, but you need something to generate the analog sound waves in real time behind that b_jonas: more than just beeps if you want to call it music kspalaiologos: toledos program is 300 bytes kspalaiologos: my program is 600 bytes b_jonas: I thought it was larger than that for some reason kspalaiologos: i'll play protracker modules kspalaiologos: using ti-83+ kspalaiologos: it's perfectly possible kspalaiologos: I've wrote a program that imitates a tracker, i.e. it's just single channel, no mixing, and supports no effects kspalaiologos: I believe it'd run on TI-83+ kspalaiologos: sound on ti83 has been done before b_jonas: single channel. ok. kspalaiologos: ^ na na, I'll get it to mix channels kspalaiologos: so I'll have mono output of up to 4 tones at a time kspalaiologos: that's enough for some chiptune music kspalaiologos: or I can just trim sample rate of some songs to 16k or 8k (it'd sound like garabage tho) kspalaiologos: but I believe it'd fit on ti-83+ without problems kspalaiologos: oh and I used J as a scripting language to solve a practical problem kspalaiologos: https://github.com/kspalaiologos/ticalc/blob/master/extract.ijs arseniiv: how can one get transparent types for functions in a language when functions can have optional parameters, a vararg, keyword parameters and keyword-only parameters? (Something like Python.) I see something like union types, tuples (these both would make optional arguments expressible: e. g. in Ceylon [A, B=, C=] ≡ [A]|[A, B]|[A, B, C]) and extensible records (for keyword arguments) but I can’t see how to combine it all nicely int-e: Hmm, is [A,C] excluded? arseniiv: yeah, as these are positional-only parameters. Or I should check… arseniiv: anyway that behaviour (for positional-only parameters) is nice for me, I think int-e: it makes sense, it's just not obvious from the syntax. arseniiv: yeah I bet arseniiv: though in Ceylon there are no keyword-only arguments, but there can be a vararg which is represented smugly as [A, B, C*] or [A, B, C+], [C*] means the usual: []|[C]|[C, C]|[C, C, C]|… arseniiv: that’s the thing I would be glad to have, in my hypothetical future language arseniiv: clever tricks arseniiv: also I like languages with singleton tuples. They *are* useful, I see you Haskell int-e: Well, producing a raw escape character, for example using $(printf '\e'), does the trick int-e: But it's UGLY. arseniiv: int-e: thank you for showing me ##math BTW arseniiv: though that haven’t solved the original issue. But then I stumbled upon a xenwiki’s MOS page for that other person and it cleared for me that I would ultimately need a continued fraction expansion as you suggested originally, or the claim would be too strong to be true tromp: the modulo function i just wrote in lambda calculus curiously doesn't normalize for modulo 0 :-) b_jonas: int-e: produce a raw escape character with $'\e' instead b_jonas: or just match with perl instead arseniiv: oh well, type systems // why are you so hard // damn, nothing ever rhymes with “systems” int-e: b_jonas: thanks int-e: I keep forgetting about $''. kspalaiologos: how hard would it be to write a program generating random program with predictable output kspalaiologos: that would be able to test various parts of compiler, like optimizations and so on kspalaiologos: I'm looking mostly for existing codebase for testing an assembly-like language kspalaiologos: I know csmith, but is there something a bit simpler that would be easier to tweak? spruit11: What was that Haskell test package again? It's about fifteen years old now I think. spruit11: Quickcheck, I think. spruit11: https://wiki.haskell.org/Development_Libraries_and_Tools int-e: So... that's another Ponder This down. (March 2020... somehow they tend to publish these early.) :) b_jonas: new password in 5 hours int-e: fungot: any progress? fungot: int-e: i just implemented arseniiv: new password in 5 hours => haahahahehehe arseniiv: do you know any good solutions to the “covariant equality/containment problem” which is the following?: arseniiv: suppose we have a language with subtyping, co(ntra)?variant type parameters and interfaces, and that language likes immutable things arseniiv: and also there’s `interface Container { Bool contains(T val) }` which we would want to implement by an `interface Seq` arseniiv: of course we can’t do that in a simple way, as variances don’t match. We can e. g. make `interface Set : Container` where `Top` is the top type arseniiv: that’s not that good because the compiler will typecheck obvious errors like `Set s = …; return s.contains("str")` => this would always return false, which ideally is known statically arseniiv: we could abandon covariance, but that’s really unhandy when using immutable containers. We could abandon subtyping at all. Or…? arseniiv: NB: equality suffers in the same manner but at least we’re usually happy with that arseniiv: also “to implement by” may read more sensible as “to be a supertype of” arseniiv: may be read more sensibly*, sorry b_jonas: `perl -euse Date::Manip::Date; $n=Date::Manip::Date->new("now UTC"); $p=$n->new($n->calc($n->new_delta("1w"))->printf("%Y-%m-01 00:00 UTC")); $d=$n->calc($p); print "new password in ",$d->printf(0<$d->cmp($d->new("1h"))?"%.1hys hours\n":"%.0mys minutes\n"); HackEso: new password in 2.1 hours b_jonas: (yes, I know that's not the shortest way to write that. it's a readable way.) b_jonas: I wonder if it'd be evil to make the password a spoiler, such as to a Star Wars movie that recently came out b_jonas: I might try that arseniiv: b_jonas: make a spoiler to what the second next password will be(??) int-e: fungot: will this countdown ever end? fungot: int-e: the smilies in my earlier notation int-e: (I'm running my Ponder This program for board sizes 19 and 20... and it has a literal countdown. Unfortunately, the time taken at each stage increases exponentially (with somewhat erratic factors), so it's hard to make predictions for the ultimate running time based on the output.) zzo38: Do you know how a astrolabe is working? I do not actually have a astrolabe, so I have never actually used it. arseniiv: zzo38: IIRC in a mechanical one there are geniously arranged cogs that make each planet go at the correct pace, and for moons it should be analogous but with even more magic to deliver the rotation to where the moon’s planet is at the moment. Though I think these times there would be electric ones which should be way easier to control arseniiv: maybe you asked about more detailed view, unfortunately I may only guess there arseniiv: oops an astrolabe is not what I thought, sorry int-e: . o O ( `learn The password of the month is vacant. ) zzo38: I know there is a plate specific to the latitude, but I thought some functions require it and some don't. arseniiv: `password HackEso: uztohqhcddcqkua arseniiv: `? password HackEso: The password of the month is leapfrogging rats. int-e: The frog has croaked. int-e: Do rats carry SARS-CoV-2? (The naming of this thing is terrible.) arseniiv: `learn The password of the month was fought for, and stomped on, but it remains unreconciled with HackEso: Relearned 'password': The password of the month was fought for, and stomped on, but it remains unreconciled with arseniiv: and I tried not to int-e: (The diseaese is Covid-19, which is not descriptive at all ("corona virus desease 2019"). The virus has "SARS" in it which actually names the symptoms, "severe acute respiratory syndrome".) arseniiv: I hoped I will be sleeping at the time! int-e: arseniiv: Nice use of tenses. int-e: (I think grammar dictates "would" instead of "will" there.) int-e: . o O ( Will is out of the woods now. ) arseniiv: (I think grammar dictates "would" instead of "will" there.) => yeah I’m too, but I wrote before I realized that int-e: arseniiv: I read it as an artistic impression of how time becomes extremely fluid when one is tired. int-e: Especially when you start nodding off :) arseniiv: (BTW about puns: why did GHC people named an extension RecordPuns?) arseniiv: int-e: oh, that’s nice! arseniiv: though I’m not sure if I’m that tired yet int-e: I really try hard to be in bed before that point, and usually sleeping. int-e: (Though sometimes I read in bed and do notice starting the same paragraph over and over again.) arseniiv: (but that won’t do at all to sleep so late before Sunday) int-e: As for record puns... it's using the same word (identifier) for a different meaning. int-e: So it is a kind of pun. arseniiv: I have a habit reading in bed when I’m ill. I take books from the bookcase and lay them somewhere near to pick from at those unhappy days, and read when I’m not too exhausted int-e: I'm confused though, is this different from RecordWildCards ? arseniiv: various tales usually arseniiv: yeah it should be a different thing, let me see… arseniiv: ah I seem to remember it anyway int-e: Speaking of puns, I would rename "BlockArguments" to "NoBikeshedding". arseniiv: wildcards enable `Constructor {}` as a pattern int-e: Oh, it's "NamedFieldPuns" but the documentation says "record puns". https://downloads.haskell.org/ghc/8.8.1/docs/html/users_guide/glasgow_exts.html#extension-NamedFieldPuns int-e: So it's a precursor of the RecordWildcards. arseniiv: were BlockArguments added to no more bikeshed about what the precedence of blocks should be? int-e: The explanation is still the same though. int-e: In f (C {a}) = a, a is both a field selector name and a bound value. int-e: So this is analogous to using the same word with two meanings in a natural language. arseniiv: I should have a pun in Puntree^W^W^W^W^W^W^W arseniiv: (an extremely bad pun as a few would remember that one is named Punctree, not Puntree) int-e: I wasn't sure and didn't bother to check. int-e: arseniiv: I've just realized that your POTM is likely to make oerjan unhappy... because of the end of the sentenece int-e: That's the point. oerjan: @messages-told lambdabot: int-e said 1d 16h 34m 4s ago: I may have been wrong about the Foglios but I was definitely right about Clippy. oerjan: well duh oerjan: (or did you not see my previous joke) oerjan: while lying in bed, i had this wild idea that maybe tentacled Clippy contains some ancient backdoor installed by whoever became the dronuri, and so _would_ be helpful if ennesby asked em. zzo38: I think GHC should be fixed so that "data instance" is allowed where "type instance" is expected (but not vice-versa). zzo38: (And the same thing for associated type families.) int-e: oerjan: No I had not seen it. I was asleep at the time by the looks of it. int-e: I don't log-read, most of the time. int-e: oerjan: doing your job: shocking int-e: oerjan: which, incidentally, you have not yet said this year. int-e: (It's March and *nobody* has used "shocking" this year. SHOCKING!) int-e: (But I'm making up for it NOW.) int-e: "shocking" statistics over the years (lines containing the word): 2003:0 / 2004:0 / 2005:2 / 2006:3 / 2007:5 / 2008:16 / 2009:28 / 2010:45 / 2011:98 / 2012:86 / 2013:89 / 2014:50 / 2015:37 / 2016:111 / 2017:56 / 2018:10 / 2019:22 / 2020:3 int-e: So I guess 2016 was peak shocking. oerjan: ShOcKiNg int-e: I did use grep -i :) int-e: (Phew, lucky me. There were no Unicode shenenigans.) oerjan: . o O ( why would i be unhappy about the password ) oerjan: not using a period at the end is traditional int-e: because it's missing a point. and potentially a word, that's left up to interpretation. int-e: I was projecting, OKAY? int-e: `learn An ambitagonist gets along/gets into trouble with both antagonists and protagonists. HackEso: Learned 'ambitagonist': An ambitagonist gets along/gets into trouble with both antagonists and protagonists. int-e: Oh dang, another comic transitioning from the binging phase to the waiting phase. I hate when that happens. oerjan: fiendish Taneb: Groethendieck universes Taneb: Given a universe U, can we always define a universe V to be the smallest universe such that U is a set in V? Taneb: Oh, apparently that gets taken as an axiom int-e: tfw a tiny tweak to your program speeds it up by two orders of magnitude. Taneb: Commenting out the sleep calls? int-e: No, just realizing I do not need to enumerate *all* solutions while looking to bound their size. Taneb: If you think it might be interesting I would like to here what the change was Taneb: That would speed it up a lot int-e: Well, this is branch & bound, and I'm already within one of the actual maximal count. So previously I enumerated all solutions of that size, until I found a larger one, and then enumerated all solutions of that size as well. Now I start trying to find *larger* solutions and stop at one. int-e: This happened because I *also* need to enumerate solutions exhaustively later on. int-e: And obviously(?) I use the same code for that. int-e: Taneb: Obviously I changed the algorithm. "tweak" referred to the amound of code... something like 5 lines (introduce a bool variable, check it in one or two places) oerjan: `? algorithm HackEso: Algorithms (derived from the medieval "algorisms") are popular sayings by former president Al Gore, except for God's Algorithm which was invented by a Google computer cluster. int-e: Hmm, a mound of code? int-e: oerjan: I saw that I made a typo. tromp: trying o define an efficient equality for church numerals.... kspalaiologos: https://esolangs.org/wiki/Asm2bf#Automated_calls kspalaiologos: that's amazing actually kspalaiologos: using cpp as my preprocessor has been great decision so far zzo38: I think that if you use the C preprocessor, then tokens should also be in the C format (such as using // or /* ... */ for comments, instead of other formats, and using 'x' for a single character literal); otherwise some things might get confused kspalaiologos: it works so far kspalaiologos: switching from C preprocessor will eventually happen kspalaiologos: but yeah I can see the problems kspalaiologos: the fact C preprocessor refuses to concat two non-tokens seems quite constraining kspalaiologos: I think I'll employ lua to do my preprocessing zzo38: Yes, that might work better b_jonas: `? password HackEso: The password of the month was fought for, and stomped on, but it remains unreconciled with b_jonas: int-e: "another comic transitioning from the binging phase to the waiting phase" => which comic? int-e: b_jonas: https://www.monster-lands.com/ which I started reading a few days ago. int-e: b_jonas: but other than that it's just one of many webcomics out there int-e: Hmm, maybe 20x20 board size is where my current approach for http://www.research.ibm.com/haifa/ponderthis/challenges/March2020.html finally breaks down. int-e: (In the sense that it takes a long, long time to find something.) int-e: 19x19 finished in an hour; 20x20 is approaching 10 hours. int-e: (all sequential... some potential for parallelization if I'd care enough) kspalaiologos: I switched to Lua b_jonas: that was quick kspalaiologos: https://github.com/kspalaiologos/asmbf/tree/master/bfpp kspalaiologos: essentially I downloaded lua 5.1 source code, used lua2c to get the tiny preprocessor (~100 sloc) converted kspalaiologos: then I build it all and volia kspalaiologos: I had to yank off two unit tests for the old preprocessing mechanism, so I'm running really low on them lol, gonna write some more tomorrow kspalaiologos: the wiki article and documentation is now severely outdated so I'll have to eventually tackle on that kspalaiologos: I've also moved the permanent generation by two cells, so there are two additional registers available to the programmer kspalaiologos: and I've accidentally rm -rf'd my working directory, so I had to essentially do this thing twice lol b_jonas: fungot, which one do you prefer, practical or fashionable? fungot: b_jonas: i use that in my google article. :p fizzie: fungot: What's your "Google article" exactly? fungot: fizzie: we think in befunge when coding it yourself, or steal, say, b_jonas: fizzie: I think he means an article published on a blog hosted by google blogger b_jonas: fungot, according to the legend, what objects did Galileo drop from the leaning tower of Pisa to prove Aristoteles wrong? fungot: b_jonas: give me the applet already :d b_jonas: an apple? yes, that might have worked arseniiv: fizzie: we think in befunge => that’s certainly close to the truth fungot: arseniiv: i like the way optbot drags up old topics, it should sound like ' awak, awak, fnord! and fnord!) fnord! arseniiv: . o O ( an applet is a small chunk chipped of Apple by rival corporations ) arseniiv: fungot: fnord? fungot: arseniiv: i would say rather that there has been some discussion about this in the def-bf code arseniiv: now they’re probably verbatimize again zzo38: Can a Tor hidden service be set up which uses protocols other than HTTP(S)? b_jonas: zzo38: I don't think Tor can care about that high level layer of the protocol b_jonas: it could care about it going over tcp kmc: zzo38: yes, for example Freenode runs an IRCd on a Tor hidden service kmc: https://freenode.net/kb/answer/chat#accessing-freenode-via-tor kmc: I believe you can't do UDP, but anything TCP-based should work tromp: church equality down to 74 bits... b_jonas: kmc: oh yeah tswett[m]: arseniiv: Oh yeah, I own some applets. 5 of them, to be precise. tswett[m]: They were collectively worth about $1,700 at close on Friday. arseniiv: tswett[m]: :D b_jonas: which is funny because an apple is usually worth less than a dollar int-e: YAY: user 715m21.159s int-e: (meaning the 20x20 search for March's Ponder This did actually finish) b_jonas: int-e: is the line right above that "Segmentation fault" because it ran out of memory? int-e: Oh dang it. int-e: Okay, let's do this properly this time. int-e: (Dang it: I missed a corner case in my Ponder This approach.) int-e: And it was so typical... the mistakes are never in the tricky part of the code, but in the places you consider obvious and easy :-/ int-e: fungot: anything to lighten the mood? fungot: int-e: what really? i thought eval would bork when asked to input a character, or it's only in pity. zzo38: Apparently, someone used to sign their Usenet posts with a line about "evil umpire", but this was too early to be archived. zzo38: Also, I should probably implement scoring in bystand. There seems to be a lot of spam posted through Google to news.software.readers. (Maybe that is why some Usenet users do not want to receive messages posted through Google.) zzo38: (I do not wish to block all messages posted through Google, since some people who use Google have actual relevant stuff to write. However, I do not post using Google myself.) zzo38: Do you like Hollerith chording? kmc: zzo38: what is that? zzo38: It is my idea of how to enter text using a numeric keypad. There are other systems of entering text using a numeric keypad, and I think all of them are not very good. zzo38: Hollerith chording means if you push one button at a time then it makes numbers; if you push multiples at a time then it corresponds to multiple holes in one column of a computer card, and makes whatever letter that combination of holes represents. zzo38: (A separate button is needed for a space, although most systems using a numeric keypad already have a few other buttons anyways.) zzo38: What do you think is the best system for text entry using a numeric keypad? TellsTogo: zzo38 Dotsies https://dotsies.org/ Cale: `pbflist https://pbfcomics.com/comics/the-report/ HackEso: pbflist https://pbfcomics.com/comics/the-report/: shachaf Sgeo quintopia ion b_jonas Cale kmc cpressey: Good morning. If a conventional OS has a Command-Line Interface (CLI) then it stands to reason that a Befunge-based OS would have a Command-Plane Interface (CPI). Taneb: Naturally wib_jonas: cpressey: I'm not sure about that. a Befunge-based OS might use Befunge as a platform to run user-space programs, or for the kernel, neither implies that the shell has to be befunge too. wib_jonas: There are systems that run mostly machine code programs with system calls, but have a unix sh or dos shell or BASIC or Forth command line interface wib_jonas: On the other hand, some (but not all) BASIC-based interfaces are already command planes, in that they let you edit anywhere on a screen sized buffer of inputs and let you run any line there wib_jonas: By all rights that stupid system should be extinct, but it lives on in worksheet interfaces like that of Mathematica or SAGE, and the immediates window of VBA. wib_jonas: You could have a befunge command-plane shell on an OS that isn't based on befunge though, and befunge is particulary usable for this in fact, wib_jonas: because befunge already takes the program from the same command plane to where it can read data inputs and write outputs, just like how those BASIC shells work. int-e: tromp: Hmm, I tried to match your 74 bit equality test but I'm stuck at 79 for now. But I have a 73 bit *dis*equality test now. tromp: mine is 73 bit now tromp: hint: it's just using scott_succ and scott_pred FireFly: is this the binary format of LC? tromp: a slightly tweaked scott_pred actually FireFly: or what's the bitcount for? int-e: tromp: But I also have 58 bit less than and less than or equal tests, and a 66 bit minimum. tromp: yes, size measured in blc encoding FireFly: ah right tromp: now embarking on a much more involved term looking for odd perfect numbers tromp: btw, modulo is <= 113 bits tromp: and div <= 126 bits b_jonas: tromp: could you look for Fermat primes 2**(2**k)+1 for 5<=k integer instead? tromp: that would be straightforward given our small primesieve tromp: will try later b_jonas: though I guess odd perfect numbers would be a more interesting goal tromp: so far, smallest conjecture testing program is 213 bit Laver table one tromp: goldbach sits at 267 bits int-e: div is <= 105 bits. tromp: i expect oddperfect to come in between those tromp: int-e: cool, something new! int-e: And \n m. n `div` (m+1) is even shorter. b_jonas: int-e: what representation of natural numbers are you using here for those bit counts? int-e: Church b_jonas: the original one, which encodes 4 as (\x.\y.x(x(x(x y)))) ? int-e: yes, that one cpressey: The orthodox Church encoding. b_jonas: it's confusing that that's called Church encoding b_jonas: but that's not easy to fix it now FireFly: what other encoding is referred to that way? FireFly: That's the only one I know of under that name int-e: tromp: let's make that 95 int-e: (and 88 for n/(m+1)) b_jonas: FireFly: there's an encoding for algebraic types, where if you have a type with say three constructors A, B, C, then you encode a value A as (\a\b\c.a), the value (B x y) as (\a\b\c.bxy), and the value (C z) as (\a\b\c.cz) b_jonas: of which a special case is encoding False as (\f\t.f) and True as (\f\t.t) tromp: that's called the Scott encoding? b_jonas: is it? I think someone called it Church something, at least in the case of non-recursive data types b_jonas: let me look up the chat log b_jonas: hmm no, I'm probably just confused b_jonas: I don't know how all these encodings work FireFly: Ah, I guess the confusion might be due to there being a common subset of them? FireFly: So the Church booleans end up the same as the Scott encoding for a boolean type int-e: s/95/91/ (and 84 for n/(m+1)), hmm. But I think this may be it. mod will be worse. tromp: are you using any lists? tromp: mine are all list based:( int-e: I'm thinking of this as coroutines for the time being. tromp: that's way more awesome than lists int-e: trying the same with mod now, hmm. doesn't terminate... what did I do wrong :) b_jonas: int-e: try not to divide by zero int-e: b_jonas: that wasn't the issue ;) tromp: trust int-e to try with nonzero denominators:) tromp: did you also use coroutines for eq? tromp: int-e: eq/mod/div added to AIT repo. feel free to make improvements int-e: Hmm, mod with this approach seems to come out at 115 bits. int-e: Which is okay I suppose. :P tromp: very competitive with mine! tromp: your div is way better though int-e: yeah it's 90 bits now :) tromp: would that be the first example of coroutines in the repo? int-e: pushed the div, so feel free to argue whether this is using coroutines or not. int-e: and mod is now 107 bits int-e: (Observation: n carries enough "recursive power" to avoid the full fixed point construction) kritixilithos: tromp: where is this AIT repo? tromp: https://github.com/tromp/AIT tromp: int-e: good point about using n as poor man's Y kritixilithos: so you're golfing functions in binary lambda calculus? kritixilithos: oh you're this guy https://tromp.github.io/cl/cl.html tromp: yep, that guy:) tromp: or rather, this guy https://github.com/tromp/ tromp: int-e: that change also makes it so that mod n 0 no longer diverges:) tromp: now, we get mod n 0 = 1 int-e: . o O ( very useful ) tromp: it's really cool that you can define mod 0 m as m false, using only 2 bits for the inner argument int-e: so basically what "kills" the coroutine approach for mod is that the counter isn't monotonic, so I need to deal with an extra argument... doing that in three places adds up to 20-ish bits. cpressey: dare I ask why the counter isn't monotonic tromp: mod m m < mod (m-1) m int-e: because it has to be reset when it reaches the modulus. cpressey: ah. hm. ok. int-e: in contrast to 'div', which is just, pass, pass, pass, bump counter, pass, pass... Taneb: Can you use mod x y = x - div x y to get any gain? Taneb: *x - y * div x y int-e: Taneb: No, I can't do - and * in 25 bits. int-e: (- is the worse of the two... 56 bits is the best I have for that) int-e: But even \m\n. \f\x. m f (n f x) is already 33 bits. int-e: err. what am I doing? int-e: that's addition. int-e: Multiplication *is* cheap, \m\n. \f. m (n f) = 19 bits. (These numbers change by about 10 when the thing is inlined.) tromp: i sometimes ponder if i should rename binary lambda calculus to "bitwise" tromp: but it would make googling way harder:( int-e: meh it's the "LC" part that's alluring to me tromp: yes, i like to mention that too. it's just quite a mouthful tromp: normally, programming languages names are single words fizzie: Just smoosh those words together, into "Bilaca" or something, Fortran-style. fizzie: (Or Bilamcal.) int-e: . o O ( BottLeneCk ) tromp: I mean BLaCk tromp: ot in spanish BLanCa tromp: regarding this month's Ponder This: the nice regular spacing of 20% unoccupied board squares is ruled out. so it's something irregular with higher unoccupied density towards the borders tromp: in particular, there can be no unoccupied square surrounded regularly by 4 others at knight's move distance arseniiv: tromp: you could portmanteau BLaCk and BLanCa into BLanCk which may be more googlable if not many people misspell “blank” (or write “blanck” intentionally) tromp: as its 4 directly adjacent squares would all need to be different arseniiv: (or for a z-grade linguistic pun, BLãCk) int-e: tromp: We should probably discuss this in April :P int-e: (I know I talked about this a lot but I tried to keep it vague and avoid spoilers.) tromp: oh, thought you talked about the ladders and snakes one int-e: tromp: I also talked about that one previously int-e: tromp: they tend to post these challenges a bit early (the March one was posted February 27th, and I discovered it on the 29th). int-e: They also tend to close them a bit late. tromp: i like that this one can be solved manually int-e: I guess it's not inconceivable. int-e: (I didn't really try.) MTGBusyBeaver: Hello, I have been working on doing the most possible damage in Magic the Gathering, without going infinite, and while we have gotten some big numbers, we would like to implement some sort of turing complete set of (forced) operations as the BusyBeaver function would grow even faster. MTGBusyBeaver: MTG has already been proved Turing complete, however all of the known setups actually allow for the creation of nondeterministic Turing machines, which could loop for an arbitrary amount of time before halting. longname: That's pretty cool. longname: I wonder if YGO is turing complete. MTGBusyBeaver: We have been trying to get https://esolangs.org/wiki/The_Waterfall_Model to work but have run into a few problems b_jonas: welcome, MTGBusyBeaver MTGBusyBeaver: YGO has finite board-space right? so I doubt it, longname: You do have an infinite hand and there's quite a lot of non-HOPT self bouncing effects b_jonas: MTGBusyBeaver: yes, ais523 was trying to get a simulation of that to work, and I think he did get it to work eventually, just didn't make a clear enough documentation of the details of that construction MTGBusyBeaver: There is a working construction, it just also allows for nondeterminism as nothing forces the encoded waterfall program to never have two registers zero simultaniously MTGBusyBeaver: and we have no way for that to trigger the halt b_jonas: MTGBusyBeaver: sure, but you can choose the program b_jonas: so just choose a waterfall model program that never has two register zero simultaneously b_jonas: you can translate any program to twm that way int-e: b_jonas: that's not useful for the busy beaver function though b_jonas: int-e: why not? b_jonas: take a busy beaver turing machine, translate it to TWM MTGBusyBeaver: yeah we can't allow for even the opportunity for nonderterminism b_jonas: translation is rather inefficient because TWM is like that, but it works int-e: b_jonas: so you're saying, take a TC language, translate it to TWM in a special way, and then do BB on top of that? b_jonas: and then translate the TWM program to an M:tG game plan int-e: Makes sense, I just missed the first indirection. MTGBusyBeaver: But the MTG game plan with the same cards could make a nondeterministic TWM program and beat the BB bound b_jonas: MTGBusyBeaver: the game with the same cards could also just not enter any TWM loop, you might just never play the right combos b_jonas: setting up the combo is nontrivial, it's easy to mess it up actually int-e: b_jonas: I imagined you'd filter TWM programs for those that are "good" in the sense that they never have two zero registers as they run. b_jonas: I don't see the problem b_jonas: int-e: you can't really "filter" them after the fact, that's uncomputable and at least as halt as telling if a turing machine halts int-e: b_jonas: hence my initial response (and objection) MTGBusyBeaver: but we get to pick our draws and plays, we wont "mess up" the combo, and if there is a line that does more damage we will take it MTGBusyBeaver: and if that amount of damage is unbounded, the deck is disqualified. b_jonas: MTGBusyBeaver: sure, but nothing in the deck forces you to do that specific combo. if you can go off with the deck, you can just win instantly rather than try to set up a combo b_jonas: oh I see b_jonas: MTGBusyBeaver: but then the TWM indeterminacy doesn't matter either, you could also set up a TWM program that deals infinite damage, or just deal infinite damage without going through the hoops b_jonas: longname: infinite hand like https://www.xkcd.com/1099/ ? MTGBusyBeaver: The idea is that the busy beaver machine would incidentially output tokens that could only attack after the TM halts b_jonas: https://www.xkcd.com/2275/ a Giant Spider? aaargh int-e: b_jonas: Have I complained already that covid-19 is a totally awful name? "corona virus disease 2019". b_jonas: int-e: yes, it should have a four-digit year name in there int-e: But the virus name got some actual symptoms, SARS-CoV-2. longname: You can only have 60 cards in your deck, max int-e: b_jonas: No, my complaint is about descriptiveness. longname: So I guess you could only have 60 cards in hand total. longname: Unless you took cards from your opponents hands too actually, so total 120 int-e: "Standard decks must contain a minimum of sixty cards. There is no maximum deck size; however, one must be able to shuffle one's deck without assistance." int-e: has this changed? longname: I'm talkin' YGO, Beaver's talking MTG b_jonas: in M:tG, you can momentarily put tokens into your deck or your hand, though they disappear the next time state-based actions are processed, and in some crazy cases they actually matter in your deck and make it hard to figure out how to follow the rules int-e: b_jonas: "is just too catchy" -- is that a play on its virility? longname: Ah, hm. Then yeah I guess maybe YGO is impossible to make turing incomplete without some change in rules just 'cus of a lack of memory. longname: *impossible to make turing complete. b_jonas: longname: really? that's surprising longname: You can summon shitloads of tokens (actually infinitely in theory with some mayakura the destructor + utlimate offering + phantom skyblaster + gy looping shenanigans) but they can only appear on the field MTGBusyBeaver: The useful operations we have: 2xArcbond (when this creature takes damage it deals that much damage to each other creature) allow us to set up a 'clock' that locks us out of interaction once the TM has been put into motion until one of the targeted creatures dies, artificial evolution lets us change the creature types a card refers to, rotlung MTGBusyBeaver: reanimator (whenever a creature of type X dies create a 2/2 Y token) allows us to remake/change things Dralnu's Crusade (all X's are also Ys) lets us have things with multiple types. b_jonas: I mean, if it were impossible to make it Turing-complete because it lacks crazy building blocks like (Rotlung Reanimator or Xathrid Necromancer or Hungry Lynx) and Artificial Evolution MTGBusyBeaver: I'm thinking about trying some sort of cyclic tag system using Coat of arms (each creature gets +x+x for each creature that shares a type with it) but I dont think that is enough b_jonas: that wouldn't surprise me. but if you can actually prove that YGO is not TC because of lack of memory, that _would_ surprise me. b_jonas: it wouldn't surprise me for a newer game like Hearthstone that may be specifically designed to avoid such crazy combos, but Yu Gi Oh is old longname: Infinite loops like that are handled weirdly depending on who you ask. Techncially they're illegal, and playing a card that would start infinite loop is an illegal play (Pole Position comes to mind) MTGBusyBeaver: YGO is probably not even as strong as regular expressions. b_jonas: longname: can you have an unlimited number of tokens on the battlefield at the same time? longname: Nope, you can have, at most 7 monsters total on the field. longname: and that's only under very specific circumstances (co-links) MTGBusyBeaver: Hearthstone is also very much limited in board/deck space so it would suffer the same limitations b_jonas: oh, so that's where Hearthstone got that rule from? MTGBusyBeaver: YGO is normally 5 right? longname: Yeah, 5 under normal circumstances b_jonas: MTGBusyBeaver: yes, Hearthstone is limited. but YGO is an older game. MTGBusyBeaver: so there is not much space for computation in YGO, longname: Master rule 4 introduced Extra Monster Zones, so with Link monsters you can have 7 max if both EMZs are connected by link monsters--again very specific scenario longname: Yeah, doesn't seem like it. b_jonas: oh well b_jonas: MTGBusyBeaver: but how would it even be possible to set up a situation where you can set up a busy beaver damage loop, but no infinite damage loop? MTGBusyBeaver: If the TM output tokens that couldn't attack until the TM halted. b_jonas: MTGBusyBeaver: sure, but why would the player choose to build that particular TM, instead of a TM... oh b_jonas: you want a combo that can only deal damage once b_jonas: that's clever b_jonas: does Goblin Cannon help? MTGBusyBeaver: no because it has to be in one chunk b_jonas: probably no, it's not better than like a Fireball b_jonas: or some other non-permanent that deals X damage, what's the simplest one b_jonas: why does the damage have to be in one chunk? MTGBusyBeaver: because the opponent would die and the game would end b_jonas: oh, you're not going by DMM's rules for this? b_jonas: though I also don't see how you'll limit the size of the Turing Machine. b_jonas: if you can set up a TM, you can probably clone the cards more times to set up a turing machine with a longer BB program and thus more damage MTGBusyBeaver: We will only have a finite amount of mana MTGBusyBeaver: and yes we can probably setup a VERY large TM b_jonas: Heat Ray b_jonas: that's the canonical instant that deals X damage for XR mana b_jonas: MTGBusyBeaver: ok, so how will you have only a finite amount of mana, and no Omnipotence I assume, but enough mana to build up a complicated combo? MTGBusyBeaver: We are slightly limited by the number of creature types (~200) but we can just implement a UTM b_jonas: that does seem more easily solvable b_jonas: because there are some large infinite combos that involve mana b_jonas: large finite combos MTGBusyBeaver: heat ray is probably no good because as an instant we could inturrupt the TM's function MTGBusyBeaver: https://www.mtgsalvation.com/forums/magic-fundamentals/magic-general/615089-most-turn-1-damage-in-a-deck-with-no-infinite?page=97 b_jonas: well Disintegrate if you want a sorcery b_jonas: but I assumed you'd be in a loop that you can't exit anyway, so you need an instant MTGBusyBeaver: no we want the loop to only exit if the machine halts MTGBusyBeaver: not asking you to read that whole 90+ page thread MTGBusyBeaver: but many of the "how?" questions are answere in there MTGBusyBeaver: for a full writeup of what we accomplished in old standard: https://docs.google.com/document/d/174jrMcjZ8rWurGCvylWyql9cH0sAVPIXPzT0ucMq308/edit?usp=sharing MTGBusyBeaver: (I'm FortyTwo on the forums there) MTGBusyBeaver: but that name was obviouslly taken here MTGBusyBeaver: anyway I g2g, thanks, I will check back. b_jonas: MTGBusyBeaver: and you probably don't even need such complicated combos here, because you don't need a huge finite number of mana with power towers, only like a million mana, which should be easier to generate MTGBusyBeaver: I think I have an implementation of https://esolangs.org/wiki/The_Waterfall_Model in Magic: The Gathering. https://www.mtgsalvation.com/forums/magic-fundamentals/magic-general/615089-most-turn-1-damage-in-a-deck-with-no-infinite?comment=2434 But it seems that we might run out of creature type namespace, How big does a waterfall TM need to be to MTGBusyBeaver: encode a universal TM? oerjan: ais523 isn't here at the moment, he's the main one who's trying to do this. oerjan: MTGBusyBeaver: ^ oerjan: although i think getting a "small" TC waterfall model may be exactly where he was stuck last i heard MTGBusyBeaver: Well it doesnt need to be tiny, there are 249 creature types so we get a size 124 waterfall machine oerjan: i'm pretty sure that's way more than needed oerjan: assuming you mean 124 clocks oerjan: i think ais523 was aiming for something small enough that he could remember it for an actual tournament MTGBusyBeaver: yeah, i figured 20-30 would be sufficient. oerjan: oh i see you've been discussing on this channel before oerjan: int-e: you can't really "filter" them after the fact, that's uncomputable and at least as halt as telling if a turing machine halts <-- there's a simple checkable property that ensures a TWM program never is ambiguous and which any other can be translated into oerjan: basically, if N is the number of clocks, multiply all adjustments by N, and let the clocks start with distinct values (mod N) oerjan: (well N>=number of clocks suffices) oerjan: then they can never become the same (mod N), so will never trigger simultaneously oerjan: MTGBusyBeaver: ^ in case you still have this problem oerjan: int-e: ^ you too b_jonas: oerjan: ais said that he's pretty sure there is a very small universal waterfall machine program, but it's hard to explicitly construct one b_jonas: but for a tournament, you don't necessarily need a program with the smallest number of clocks, rather you'll need a program with a reasonable number of clocks where the numbers in the program matrix aren't too difficult to remember b_jonas: and that might be impossible b_jonas: the tournament rules have two rules relevant for this: 2.11 "Taking Notes", which says that during a game, you can't refer to notes except those taken during the game, except "Artistic modifications to cards that provide minor strategic information" with the Head Judge's permission, and I don't think a huge TWM program could count as such; b_jonas: and 5.5 "Slow Play", which I quote "Players must take their turns in a timely fashion regardless of the complexity of the play situation and adhere to time limits specified for the tournament. Players must maintain a pace to allow the match to be finished in the announced time limit. b_jonas: " which means you aren't allowed to take too much time just because before the tournament you came up with a funny strategy to create a hard to determine or even incomputable outcome myname: are those artistic modifications limited to the front side of the back or can i basically play with a marked deck? myname: knowing what i will draw next is quite the strategic information b_jonas: myname: you can't mark the backs unless those marks are completely covered by an opaque sleeves, there's a separate rule for that b_jonas: myname: this causes actual problems because cards and/or sleeves become worn and accidentally marked over time myname: yeah, like in higurashi b_jonas: chapter 3 is relevant on this b_jonas: anyway, previously I suggested that rule 5.2 "Bribery" may also be relevant for the Turing Machine setup, but it seems it isn't b_jonas: anyway, these rules basically imply that to pull off the combo in a tournament, you have to be able to reconstruct it without prior notes, and do all that fast enough to fit the game or match in the time limit or before the opponent or a judge gets annoyed of you playing very slowly oerjan: well ais523 _is_ also a speedrunner :P b_jonas: yes. and there are some feats that even speedrunners can't do, because the tool-assisted speedrunners haven't found them a way to break the game completely, so they actually have to, like, play levels rather than just warp to the end b_jonas: some games are too well programmed b_jonas: interesting examples are NES Super Mario Brothers, which does have some crazy bugs including wrong-warping to a world that isn't among the eight planned worlds and so behaves strangely, yet that doesn't seem to help you finish the game any faster b_jonas: and GB Super Mario Land which is surprisingly bug-free, the only serious bugs I've seen are one that lets you defeat the world 4 boss somewhat quicker (and with a graphical glitch), and one that freezes the game in 4-4 when the star wears off b_jonas: but nothing that would let you skip levels or warp to the end of the game b_jonas: gtg bye arseniiv: but nothing that would let you skip levels or warp to the end of the game gtg bye => b_jonas warped to the end of the conversation int-e: Ah, the Ponder This February challenge is closed. :) int-e: The "intended solution" is funny. int-e: arseniiv: The main trick to getting close to the target is that the game is amenable to being split in the middle; if you have snakes leaving five consecutive squares n-5..n-1, and confine all other snakes and ladders to the resulting two parts of the board, you can simply add the expected number of moves to reach square n, and the expected number of moves to get from there to 100. So you can... int-e: ...meet in the middle: tabulate solutions for one part of the board, and then go through solutions for the right part and find the best candidates to complete it with a binary search. int-e: arseniiv: So it's not *just* brute force, and that made this problem interesting :) arseniiv: int-e: hi to you too (: int-e: arseniiv: :P (no, you don't have to reply to that. I singled you out because I know you at least looked at the problem briefly :P) arseniiv: now I’m coughing :D longname: {Hot Red King Calamity} longname: {Hot Red King Calamity} longname: did not mean to paste arseniiv: my laziness again ends up in that I want to program something but I’m bored and don’t want anything coming to my mind arseniiv: that’s unhealthy int-e: arseniiv: I have plenty of ways to make this worse if you're intestested. arseniiv: int-e: :) for example? int-e: arseniiv: webcomics, project euler, various youtubes int-e: (For example I've watched way too much "8 out of 10 cats does Countdown" episodes recently) arseniiv: don’t know what that is. I suppose I shouldn’t check? arseniiv: project euler => ah. You wouldn’t believe but I hadn’t tried anything like this either, though I considered why not (and then proceeded with the not) int-e: arseniiv: it's a mock version of https://en.wikipedia.org/wiki/Countdown_(game_show) arseniiv: int-e: I see int-e: arseniiv: so it's pretty harmless (and, to me at least, entertaining), but it takes time, of course. int-e: arseniiv: and if all else fails you can get into a fight with some stupid person on ##math :P int-e: Living the dream: https://xkcd.com/386/ int-e: It won't make you feel any better, it'll just make you older. :P arseniiv: int-e: yeah arguing with people over the fact their approach to divide by zero isn’t sensible is quite unbearable these times arseniiv: I’m only glad I haven’t stuck myself even once in an argument about parity of zero int-e: zero is even. two is the odd prime. that seems to exhaust the topic ;) arseniiv: but even these times I still rarely make a grave mistake on a local forum and only then realize what I’ve done and that it’s already written in the furniture of space-time arseniiv: I mean, fabric arseniiv: zero is even. two is the odd prime. that seems to exhaust the topic ;) => what about primality of one? arseniiv: though, there are of course many far weirder things to argue about with strange people, of course int-e: arseniiv: every definition of primes I've ever seen excluded 1. :P arseniiv: yeah I agree it shouldn’t be prime int-e: interestingly this is far less contentious than the question whether 0 is a natural number, or whether 0^0 should be 1 or undefined. arseniiv: I think the main fallacy of why people want to have 1 prime is that they don’t sufficiently understand the theorem about prime decomposition and can’t see why “prime vs. composite” is a false dichotomy arseniiv: interestingly this is far less contentious than the question whether 0 is a natural number, or whether 0^0 should be 1 or undefined. => ah, yeah, just about anyone has a strong opinion on these (mine are yes and 1, resp.) int-e: The worst discussions are usually those about 0.999... = 1 though, because invariably the people arguing don't have a firm enough grasp on the definition of the reals and the alternatives to have a meaningful discussion about this. arseniiv: unfortunately the historic tradition in here is to exclude zero. Then they say “ah your CS and set theory and whatnot may benefit from a natural zero, but don’t you touch our analysis and here, take our beloved limit of x^y for several different bases) arseniiv: oh, 0.(9) = 1 is a sad thing, yes int-e: . o O ( Decimal expansions with digits indexed by a non-standard model of the natural numbers. ) arseniiv: it seems I forgot to close the quote, here now” int-e: I believe 0 is slowly winning over mathematicians as well. arseniiv: . o O ( Decimal expansions with digits indexed by a non-standard model of the natural numbers. ) => yeah I thought about that a few times but didn’t think it would lead to something not already known int-e: arseniiv: My favorite idea involves surreal numbers, but decimal expansions are not adequate for describing those. arseniiv: int-e: BTW don’t you know how these compare to Puiseux series? I think the latter were a smaller set? int-e: What's that... fancy. But they are a set. (Surreal numbers are a proper class.) int-e: (Which is one of the facets that makes them surreal.) arseniiv: (Surreal numbers are a proper class.) => ah yeah I forgot about that, that settles it kspalaiologos: #esoteric's <=> #math for some time now b_jonas: more arghj kspalaiologos: yet again I'm doing useless brainfuck stuff instead of taking on something that has sense kspalaiologos: wrapping my head on implementing an itoa-like hex mechanism kspalaiologos: i'd really like to do this without reversing but I'm a bit worried to have my taperam smashed when the number's big enough if I start from the end kspalaiologos: but I mean is it worth it to support bignum brainfuck interpreters being 0.00001% of the total ais523: re the M:tG Turing machine: if all you want is a TWM problem that the judges won't be able to work out the resolution of, I recommend quadratic residuosity ais523: which should be pretty easy to implement in TWM ais523: I posted https://crypto.stackexchange.com/questions/70743/what-makes-the-quadratic-residuosity-problem-hard as a setup for encoding QRosity into TWM, hopefully in a program that's small enough to memorise ais523: (the issue being that we need to find an example program for which there's no known way to discover whether it halts or not in a viable length of time) ais523: MTGBusyBeaver: I'm going to bed now but I'll try to get online tomorrow, the idea of combining a universal computer and a no-infinite-loops deck hadn't occured to me at all but is the sort of ridiculousness I approve of Hooloovo0: I think some of the more simple ones I've seen in other ]] Hooloovo0: err other simple systems are a twin prime checker and a collatz relative in CGOL Hooloovo0: but those are still pretty complicated, and aided by the 2d nature of the CA MTGBusyBeaver: Thanks ais523, unsolved problems arent actually very good, as either it is proved false in which case the machine never halts, or there is a counter example probably at less than 10^^^10, which is a score we can already beat. MTGBusyBeaver: So we want to implement the biggest busy beaver machine possible MTGBusyBeaver: But that is limited by the namespace, so we really get the improvement via a UTM. MTGBusyBeaver: How does a waterfall UTM work? We can get oodles of googles as the variables in a waterfall program, what sort of ratio are we getting for the inputs to the size of machine simulated? MTGBusyBeaver: Not to mention that we can iterate the UTM to get BB(BB(....BB(X)...)) b_jonas: no you can't b_jonas: you can't get BB(BB(X)) b_jonas: (also I find it ridiculous when an ultrafinitist argues that 10**400 might not exist, but if you talk about BB(BB(X)) I might have some more sympathy to their side) b_jonas: what you can get is BB(X) for a large X, just by putting O(X) (or maybe O(2)**X) tokens somewhere into the waterfall program, so you can't just compute BB(100), which is already ridiculous, but BB(10**(10**100)) b_jonas: heck, you very likely can't even get BB(100), you can only pick a long-running program that you can prove will finish b_jonas: and that won't run for anything close to BB(100) turns b_jonas: though it can run longer than most of the other M:tG loop constructions tromp: int-e: how to reconnect in a private chat? tromp: int-e: your unsatisfiability proof is correct, except that the center using all 3 colors can only be concluded in the 6th diagram ais523: b_jonas: I think MTGBusyBeaver's point is that you can create an M:tG deck that's capable of simulating all The Waterfall Model programs below a specific size, but can't get any output from the simulations unless they halt ais523: the question is now "how much damage can this deck do turn 1?", which is a busy beaver problem, as it'll depend on which program produces the largest output ais523: it doesn't require you to find some specific program (although it's helpful to show that you can at least construct a UTM, because that gives you a bound on how fast the busy beaver function grows in this context) ais523: MTGBusyBeaver: fwiw, I'm concerned about the use of Arcbond in the construction; what's to prevent a player setting up an infinitely looping machine without protecting the opponent from Arcbond, and doing infinite damage that way? ais523: or does the fact that the opponent loses at 0 life count as stopping the loop, and thus it isn't infinite damage unless you do it all at once? MTGBusyBeaver: yes if the opponent dies thegame ends. MTGBusyBeaver: as for iterating the BB function, why is that not something we can do? The BB machine outputs a lot of some resource, then we use that resource to build an even bigger TM and use a more finite resource to trigger the run. int-e: The busy beaver function is uncomputable. MTGBusyBeaver: but it is by definition some finite number MTGBusyBeaver: we will never know it exactly int-e: But it's a function, so it's not just a single number. MTGBusyBeaver: BB(X) is the busy beaver number of a turing machine of size X, taking the integers to the integers, so BB(BB(X)) is a well formed statement, even though we will never be able to evaluate it int-e: There's a conceptual gap here somewhere. For example, we can create a Turing machine, that, given n, outputs a sequence lower bounds for the busy beaver function, such that the last value output is the value of the busy beaver function itself. MTGBusyBeaver: But that TM never halts? int-e: I don't get how you intend to accomplish that iteration. MTGBusyBeaver: Because the MTG:TM incidentially outputs lets say life for us. and the size of the TM we can make is limited by our life, and running the TM takes something else eg: red mana. MTGBusyBeaver: so say we start with a combo that makes X life and 5 red, then use our TM to turn 1 red into BB(X) MTGBusyBeaver: then we can spend another red after the BB machine halts to run BB(BB(X)) int-e: There is no TM that computes BB(X), given X. MTGBusyBeaver: But there is a size X machine that outputs BB(X) int-e: Yes (more or less). But *you* have to know what that machine is when setting up the computation. int-e: And when you iterate, *you* have to come up with the TM of size BB(X) that outputs BB(BB(X))? MTGBusyBeaver: No we don't, knowing the machine exists is enough to define it. MTGBusyBeaver: for our purposes at least int-e: I'm missing something about the intention here. int-e: I thought you wanted to leave the game in a state where there are no choices left, and leave it to the arbiter to run it to its conclusion. MTGBusyBeaver: no, we want to do the most damage possible. int-e: Are you doing something like assuming best play by both players? int-e: (I suppose that would bring you into ATM territory where you can play such tricks indeed.) int-e: (But again, all the burden of finding the machines would be on the players.) MTGBusyBeaver: a little stronger than that. Our opponent knows what we are trying and is trying to either minimze the total damage or disqualify the deck by allowing it to go infinite. MTGBusyBeaver: single card draw is a Demonic Tutor in disguise: you can assume that the order of your deck is exactly what you want it to be. This veers pretty heavily into magical christmasland, but if we didn’t do it this way you’d have to figure out the average amount of damage a deck could deal, which is probably impossible. MTGBusyBeaver: with a deck of 60 wastes. However, they are still playing to stop you: if you give your opponent a choice, they will pick whichever one is worse for you. The only exception is that they won’t concede the game. This is a sadistic goldfish that wants to make you play it out. MTGBusyBeaver: of the time, so we define it like this: when you make your deck, I pick a finite number, say, a million, or Graham’s Number, or four. If, no matter what number I pick, there’s a line your deck can take that will deal at least that much damage, your deck goes infinite and is disqualified. MTGBusyBeaver: magic apply: if I put 80,000,000 copies of Shock on the stack and target my opponent with each one, they’ll die on the tenth one, and I’ll have dealt only 20 damage. In practice, that means you’re either winning with a giant X-spell or by attacking with a lot of very big creatures. cpressey: "Do the most damage possible in MtG" reminds me a lot of "Name the Biggest Number": https://www.scottaaronson.com/writings/bignumbers.html int-e: cpressey: I'll be generous and let you go first. int-e: (That's how it works, doesn't it?) tromp: int-e: did you say you had a less-than in 58 bits with coroutines? int-e: tromp: Yes. tromp: i was able to reproduce that:) tromp: much more straightforward than your div and even your min int-e: tromp: I thought that if you take 'min' as the blueprint you should be able to find the comparisons :) tromp: i see now what you mean by div (m+1) being ewsier cpressey: You can work on BB(10) and you can have a working theory for what BB(10) might be but you'll never know if it actually is BB(10). Similarly, you could work on BB(BB(10)) but you have to revise your theory about BB(BB(10)) every time you revise your theory about BB(10). tromp: still surprising that you can do div m with only an additional appllication to id int-e: tromp: It has occurred to me that maybe a divisibility test would be a tad shorter than the modulo operation. int-e: (I haven't put that one to the test though, yet.) MTGBusyBeaver: that's not a problem? We are basically playing that name the biggest number game, We can get a bit beyond Ackermann numbers in standard. MTGBusyBeaver: (though on a later turn) tromp: int-e: did you also try a less-than-or-equal ? int-e: tromp: it's the same? int-e: tromp: I mean, swap the arguments and true and false tromp: good point:-) int-e: MTGBusyBeaver: Which is fine. Basically you're looking for busy beavers, where the model of computation of M:tG. You can define a busy beaver function for that, say in terms of the deck size. int-e: MTGBusyBeaver: But none of that lets you iterate the busy beaver function itself. int-e: Because it's uncomputable. MTGBusyBeaver: only this week we worked out a turing machine setup that works in the rules, MTGBusyBeaver: and can set it up to be repeatable some finite number of times Taneb: There's no Turing machine that computes BB(x) MTGBusyBeaver: No, but there is some turing machine of size x that outputs BB(x) Taneb: There's certainly one that takes that many cycles to halt Taneb: Or well, writes that number of 1s on the tape int-e: Maybe "there's a line in your deck" is not precise enough. Taneb: You can't then take that number and emit BB(BB(x)) without knowing the answer beforehand int-e: What does that mean, exactly? Taneb: At which point, why not just do that directly? Why not go straight to BB(BB(x)) + 1? int-e: (Who gets to make the choices for that line of play?) MTGBusyBeaver: the opponent int-e: Yeah then you have no alternation. int-e: So no way of iterating the busy beaver function at all, not even theoretically. tromp: int-e: please add div test term to the repo if it offers nontrivial improvement over mod size int-e: Because the opponent will just pick a non-terminating TM instead. tromp: shld be called divides.lam i guess MTGBusyBeaver: but a ton terminating TM doesnt do any damage int-e: MTGBusyBeaver: "non-terminating" was for "something that does infinite damage". int-e: or unbounded, which is the same. MTGBusyBeaver: but the only way to do damage is by attacking with all the giant creatures the TM makes MTGBusyBeaver: if the TM never halts we cant attack int-e: Hmm. I see, I'm wrong about needing alternation. int-e: Plain non-determinism is enough, and you get that. MTGBusyBeaver: we need the TM to be deterministic, or we can just loop for an arbitrary amount of time and then halt int-e: The non-determinism is in the choices the player can make in setting up that TM. MTGBusyBeaver: yes we have that MTGBusyBeaver: The working TM implementation of the Waterfall Model is here: https://www.mtgsalvation.com/forums/magic-fundamentals/magic-general/615089-most-turn-1-damage-in-a-deck-with-no-infinite?comment=2434 int-e: So we have: NTM A(n): guess TM B of size n; run B to completion; return number of steps taken, and a computational model that discards all non-terminating runs and picks the maximum value produced by the others. MTGBusyBeaver: pretty much cpressey: "a computational model that discards all non-terminating runs" MTGBusyBeaver: a run that never terminates does no damage and scores zero cpressey: How do you propose to test a run to see if it will never terminate imode: very carefully. ;) int-e: cpressey: You don't. MTGBusyBeaver: we don't need to every actually construct the busy beaver machines, just know that they are bounded by BB(n) int-e: cpressey: It's a perfectly fine definition, just not computable. int-e: MTGBusyBeaver: Obviously to actually deal that amount of money you still have to fine the busy beavers. int-e: money? int-e: Fun brain fart. int-e: I meant damage. imode: didn't know you bet on MTG int-e. :P MTGBusyBeaver: well we just want to set bounds for the damage, highest lowest bound with an upper bound wins int-e: imode: I don't. But I imagine it would be as good a way of losing money as all the others. imode: high-stakes MTG tournaments lmao. MTGBusyBeaver: so we can bound it by BB(...BB(X)...) MTGBusyBeaver: BB^X(X) for some large X cpressey: int-e: Did you notice you didn't stop at "money", you also said "fine" for "find"? cpressey: Image of a parking patroller tucking a ticket under the wipers on a Turing machine. fizzie: int-e's all about the money, all about the dum dum da da dum dum. int-e: cpressey: No I had not noticed that. int-e: cpressey: That's a plausible typo though, at least. cpressey: I'm a little unclear on whether just having a (perfectly fine) definition is sufficient for MtG, or if you have to actually, you know, be able to compute it, in order to take your turn. int-e: cpressey: I think it works just as MTGBusyBeaver claims... you don't need to know what the upper bound is, just that it exists. int-e: cpressey: And the trick is, non-termination doesn't kill you; it's only the things that do terminate that eventually deal you any damage. MTGBusyBeaver: We'd like to be a little less handwavey and at least explicitly construct/explain/justify the UTM in the Waterfall method int-e: cpressey: It's a really funny situation where given a candidate for an upper bound you'll (probably) never be able to tell whether it's big enough already :) MTGBusyBeaver: as we are limited to 124 waterclocks cpressey: So "In principle there's a TM that deals a huge amount of damage because it computes BB(...(BB(10)...), but I don't know exactly what that TM is" is sufficient? cpressey: If so then OK int-e: cpressey: No, it's an NTM that computes that thing, and we do know what that NTM is. MTGBusyBeaver: we are the NTM int-e: But we can't run NTMs in practice. int-e: cpressey: Somewhere, internally, that NTM *guesses* the actual TM. MTGBusyBeaver: There are only finitely many possible TMs of a given size int-e: Or TMs, plural. One that computes BB(10), one that computes BB(BB(10)), and so on. cpressey: "An NTM guesses a TM" is roughly the same as "In principle there's a TM", what I said int-e: cpressey: True. int-e: But also kind of missing the point; for any natural number n, there's a TM that computes n. int-e: But I didn't mention the size constraint either, so I'm not sure what my objection is. arseniiv: we are the NTM => I would doubt that int-e: many-world quantum physics gets somewhat close int-e: but even that has a hard time collecting results ais523: I guess the idea with this Magic construction is that it lets you calculate any number a UTM can calculate ais523: up to a certain size n ais523: so we know that it's capable of calculating BB(n) and no higher number, but we don't know what input you have to give it to produce that ais523: there doesn't seem to be a conceputal issue with iterating that: you could perhaps modify it so that it's capable of calculating a range of numbers of which the highest is BB(BB(n)), given the appropriate input ais523: but not be able to determine what that input is ais523: the reason this works is that what we have is, conceptually, an interpreter that refuses to run non-halting programs ais523: I really should create a universal interpreter for some TC language in TWM some day, even if it's far from optimal ais523: just to get a baseline ais523: on how many waterclocks you need ais523: I keep on getting sidetracked trying to optimise it MTGBusyBeaver: yeah, even if it is inefficient as long as it works with 124 waterclocks MTGBusyBeaver: which is probably way more than needed ais523: well, the limit's a little less than 124 because you need a few creature types to set it up, right? Cat in particular is unusable ais523: but much less than 124 seems definitely viable MTGBusyBeaver: well the halting clock is one of the 124 MTGBusyBeaver: but we get to use everything else as we can make the setup creatures lose their types (and avoid arcbond damage) with One with the stars ais523: I personally count halt states, although not everybody does ais523: that's a fun card, and one I came up with myself when brainstorming custom cards (although my version of it was white) ais523: `card-by-name One With the Stars HackEso: No output. ais523: oh right, I need to persuade someone to add Theros Beyond Death to that thing ais523: `card-by-name Hungry Lynx HackEso: Hungry Lynx \ 1G \ Creature -- Cat \ 2/2 \ Cats you control have protection from Rats. (They can't be blocked, targeted, or dealt damage by Rats.) \ At the beginning of your end step, target opponent creates a 1/1 black Rat creature token with deathtouch. \ Whenever a Rat dies, put a +1/+1 counter on each Cat you control. \ C17-R MTGBusyBeaver: Enchanted permanent is an enchantment and loses all other card types. (It still has its abilities, but it’s no longer a creature.) ais523: I was mostly just trying to show it off ais523: b_jonas: can you update HackEso's M:tG database to include the latest cards? given the current topic of discussion it may well be relevant MTGBusyBeaver: well we don't use hungry lynx anymore MTGBusyBeaver: 'card-by-name coat of arms ais523: backquote, not apostrophe ais523: and yes, that was an interesting idea for the construction MTGBusyBeaver: `card-by-name coat of arms HackEso: Coat of Arms \ 5 \ Artifact \ Each creature gets +1/+1 for each other creature on the battlefield that shares at least one creature type with it. (For example, if two Goblin Warriors and a Goblin Shaman are on the battlefield, each gets +2/+2.) \ EX-R, 7E-R, 8ED-R, 9ED-R, 10E-R, M10-R, DDS-R, H09-R ais523: my main aim was to hit the whole thing into a sideboard, so I wanted to do it with as few cards as possible ais523: but single-purpose cards are much better for what you're doing MTGBusyBeaver: it still fits in a sideboard ais523: hmm, neat ais523: but Coat of Arms is an artifact, so it might be hard to wish it out of the sideboard MTGBusyBeaver: there are several ways to wish for it MTGBusyBeaver: `card-by-name Karn, the great creator HackEso: No output. MTGBusyBeaver: hasn't been updated in a while? ais523: right, but the point is that you'd need extra cards in maindeck for sideboard ais523: yes, I think it's out of date MTGBusyBeaver: Fae of wishes is another pretty generic wish MTGBusyBeaver: and Mastermind's acquisition ais523: Omni-tell naturally runs multiple Cunning Wish and Burning Wish, which is one of the things that made it such a good shell to set the UTM up ais523: like, the whole point was to make a UTM that was tournament-competitive MTGBusyBeaver: well wish for Mastermind's acquisition for the rest of the SB MTGBusyBeaver: though the sb doesnt have enough slots to ensure your opponent can't interact also. MTGBusyBeaver: I think ais523: would the presence of Doubling Season mess up an attempt to use the UTM? ais523: e.g. by, if it were still on the battlefield at that point, producing too many triggers that could be stacked in awkward ways to introduce player-choosable nondeterminism? MTGBusyBeaver: the order the tokens etb doesn't change the operation of TM ais523: even if there are too many of them? MTGBusyBeaver: if there are more than expected, there will be some other operation we are doing, but it doesnt give us extra choices ais523: right, in that case it's fine ais523: (assuming we have a way to get rid of the Doubling Seasons, and I suspect we do) MTGBusyBeaver: yeah, we can bounce them MTGBusyBeaver: we can bounce the doubling seasons MTGBusyBeaver: before starting the tm ais523: on a related note, I was trying to prove Android: Netrunner TC a while back, but I don't think it is ais523: it has the opposite problem to Yu-Gi-Oh ais523: in Yu-Gi-Oh, there are ways to store data but you can't store a program, there just isn't enough room on the playmat ais523: in Android: Netrunner, storing a program is trivial (subroutines are a game mechanic!), but although you have a few places to write data, reading it back is incredibly difficult, and I don't think you can get sufficiently many variables that you can read ais523: another issue is that the game designers are paranoid about infinite combos of any sort, although I did manage to construct a nontrivial mandatory infinite loop ais523: (it involved Always Be Running on the runner side, and two copies of Off the Grid, Whirlpool, Hourglass, and Mirāju on the Corp side, plus one unplayable card in hand; every turn, the runner is forced to run a specific central, is banned from jacking out, loses all their clicks, then puts the corp card from their hand back into their deck) ais523: (and on the corp turn they can't do anything but click for credits, assuming their deck is empty) int-e: tromp: pushed (non-)divisibility int-e: tromp: (non-divisibility is shorter because of the accident that m false = false for Church numerals m > 0). b_jonas: MTGBusyBeaver, ais523, int-e: I'll review this conversation about M:tG later, but not this evening. I was busy with some urgent real life stuff. b_jonas: ais523: sorry, I can't update the database. so far my copies of Oracle were either a straight copy of Yawgatog's database, or mined from the previous iteration of the Oracle website. now I'll have to download the data from the new Oracle site, which I started once but it got complicated so I suspended it indefinitely, or download Scryfall's more accurate database. b_jonas: ideally both and compare them. b_jonas: for now I just want to mention that Lifespark Spellbomb; Utopia Sprawl; Freed from the Real is a simple infinite green mana combo that doesn't also let you deal unlimited damage by attacking with a small creature each turn, so that plus Disintegrate lets you deal an unlimited amount of damage only once MTGBusyBeaver: yeah, that combo would disqualify the deck as it is not bounded. MTGBusyBeaver: bad news for the MTG turing machine for the most damage challenge: Arcbond triggers can be interleaved with death triggers. This seems like a hard problem to fix. zzo38: Try the Unusenet newsgroup un2.org.zzo38computer.magic.maths if you are interested in those kind of things with Magic: the Gathering; there may also be some Usenet newsgroups about such thing although I do not know which ones they are. cpressey: Good morning. I have a vague idea for an esolang. It's like a Turing machine, but instead of writing symbols on the tape, it writes continuations. cpressey: Now, if you could compare continuations, you could use them like symbols, and that would be boring, so ideally, what the machine does with these continuations written on its tape, is to continue them. cpressey: But I don't know how that would work. cpressey: I don't actually think it *would* work. One of the salient aspects of a Turing machine is that it looks at what symbols are on the tape, it compares them against something. To do something far removed from that would be very un-Turing-machine-like. cpressey: So maybe you can compare them, even though that's boring. cpressey: Or... well, I'll think about it. cpressey: Maybe tape cells contain pairs of continuations. But what determines which one is chosen? cpressey: In the absence of closures, continuations are basically jump labels. Maybe this would be more like OISC et al. cpressey: On a Turing machine, jump labels are state labels. So, in this, state labels and symbols are the same thing? cpressey: "If the state written on the tape is not S3, transition to state specified on the tape and move head left" cpressey: You have to use something like "not", obviously. cpressey: But then, you are introducing boolean expressions in these conditions. That's more complexity than a simple table, and it's less pleasing. cpressey: But maybe not much, maybe you could still keep it simple somehow. cpressey: "If the state written on the tape is less than the current state, transition to it and write Sn on the tape and move the head L/R. Else if greater, transition to it and write Sm and move L/R. Else transition to Sz and maybe do other stuff." cpressey: Which assumes a total order on states but whatever cpressey: You can't make an omelette and whatever cpressey: I think we can drop "And maybe do other stuff". So every state's tuple is like (state, direction, state, direction, state). cpressey: S1=(S4, L, S5, L, S9), and so forth cpressey: I think this might work. I don't know that it's very interesting. cpressey: Wait wait. Does making two small holes in an egg in order to blow it out count as breaking it? If not, then it should be possible to make an omelette without breaking any eggs. arseniiv: cpressey: an interesting idea! arseniiv: what would this turn into if one uses delimited continuations as an inspiration? or (algebraic?) effects? longname: Can't you just make one on the bottom and let it all drip out? longname: Omletwise, that is, no comment on the esolang idea arseniiv: what would this turn into if one uses delimited continuations as an inspiration? or (algebraic?) effects? => hm I think these aren’t compatible with the spirit that TC is “imperative” int-e: "Do this now!" "I'll do it later and get back to you." int-e: (delimited by end of working day? :P) int-e: (I still don't get delimited continuations.) cpressey: I don't pretend to understand what delimited continuations are or how they work kspalaiologos: Any TI wizards out there? Having problems with TI-Connect, I essentially own a TI83+ and a silverlink, I'm able to transfer programs from the calculator to my PC, but not the other way round kspalaiologos: always getting an error on TI side saying "error in xmit" kspalaiologos: tried various USB ports, tried clearing ram, tried changing batteries kspalaiologos: I removed the drivers too kspalaiologos: but installed them soon afterwards again wib_jonas: kspalaiologos: I suspect that you're the most qualified TI calculator wizard here kspalaiologos: interesting kspalaiologos: I'm tired of BASIC and I'd like some of my assembly programs sent over. I've got them in a correct .8xp format wib_jonas: kspalaiologos: does it work if you transfer the same BASIC program back that you have sent from the calculator? kspalaiologos: I did reboot kspalaiologos: and I'll check that kspalaiologos: works! kspalaiologos: how so arseniiv: I have a weird game for y’all: take four points randomly in some area, make a Bézier curve on them, then vary one of the points to make that curve have the least length possible, by hand :o arseniiv: I don't pretend to understand what delimited continuations are or how they work => sad :( I think I had some understanding one time, and that required to use a call stack and cut/paste segments of it arseniiv: int-e: ^ too arseniiv: though I think shift…reset, or was there something less confusing to express them, is nonetheless less clear than effects+handlers arseniiv: it’s like `shift` does the work which should be done in another place (cf. try…except for exceptions) and because of that delimited continuations are weird and unhandy. Call/cc is too by virtue of being a `shift` without `reset` kspalaiologos: I think I may have compiled my app for ION shell kspalaiologos: I changed it to an asm( executable kspalaiologos: doesn't work aswell though arseniiv: kspalaiologos: what’s ION? kspalaiologos: TI83+ shell kspalaiologos: I'll try Devpac8x kspalaiologos: xaxaxaxa it worked kspalaiologos: it doesn't seem to function though kspalaiologos: I'm so out of ideas, what could go wrong arseniiv: re. shift…reset: a call to `reset` marks a place in the call stack and then when we call `shift`, that marks the other end of the segment which is cut away and packaged into a delimited continuation which is fed, as a kind of closure, to the function passed to `shift`. If `shift` doesn’t happen, so be it, the `reset` mark would perish when we step out of the call to `reset`. Yes this is more or less easy but nonetheless I’d have an effectful pr arseniiv: mitives instead of `shift` and handlers instead of both `reset` points and passing a “handler” to `shift`. This is the way with exceptions (`throw` as a handlerless `shift`, `catch` as a handler, though we don’t get a continuation because the effect is the most boring one possible) arseniiv: more specifically, because `throw :: exc -(Throws)> Void`, so if we would get a continuation, it would be an uncallable one (a → Void), and so we usually aren’t given one. If I get it right arseniiv: I would need to consult a paper on this if someone would be interested in these details int-e: we had a link to a paper here a while ago that cast continuations as evaluation contexts arseniiv: int-e: delimited too? int-e: yes, delimited int-e: A context being a term with a single hole... it has a root and the hole where you can plug stuff in. arseniiv: btw if there’s a formulation more like effectful primitives + handlers instead like shift…reset, I may love delimited continuations back again cpressey: OK, so `shift` gets a ... a "delimited continuation" that extends from the `shift` to the `reset`. What happens when you call this "delimited continuation"? I mean, what happens when it finishes? cpressey: Does it return to somewhere? int-e: cpressey: you plug the argument into the place where reset was invoked. cpressey: So it returns to the `reset`. cpressey: So it's not a continuation at all, it's a regular function. arseniiv: but I think it isn’t too possible as there can be many sorts of effects, and we’ll need dynamic typing in the worst case, static in the best, and then we’ll get algebraic effects int-e: It's not really true that 'shift' gets a delimited continuation as an argument either. you can perform actual computations inside shift before `reset` is performed. It's all rather messy. arseniiv: cpressey: `shift` effectively would return out of a call to `reset` arseniiv: (that is, if it will at all) int-e: cpressey: And that part (evaluation before reset) makes it much closer to a continuation int-e: s/makes/brings/ kspalaiologos: verdict: z88dk is garbage, omit it if you'd like to keep your sanity, tigcc doesn't target TI83 at all, therefore there is no C compiler for TI83+ cpressey: Just never mind, I've already given up again int-e: you just "fix" the part where continuations never return. arseniiv: int-e: yeah `shift` gets a handler which it applies to a d. continuation int-e: (because that part makes continuations highly non-modular) int-e: but I'm not convinced that delimited continuations are actually modular, so, meh. cpressey: But they have so many useful applications, like... arseniiv: So it's not a continuation at all, it's a regular function. => it’s both; one of the points of delimited continuations is that they are functions and so are composable and easy to do something with int-e: cpressey: Writing papers. arseniiv: cpressey: it would be easier with a picture in mind, I think. I read a page somewhere, with simple examples, and now it seems I can succesfully rebuild the understanding from scratch arseniiv: I don’t remember what I’ve read though cpressey: Maybe I just associate continuations too closely with continuation-passing style. int-e: cpressey: I mean they're good for writing papers *about*, of course. arseniiv: but I'm not convinced that delimited continuations are actually modular, so, meh. => don’t you think that’s because of `shift` taking a handler instead of `reset`? (Because I do) int-e: cpressey: Well CPS is special in that the continuations are never duplicated. cpressey: int-e: ? I thought CPS was special because *everything* is a continuation (and everything ends by calling another continuation). int-e: Sure, it's also special in that way. cpressey: Maybe in practice, you'd also never duplicate a continuation, buuut... maybe there's a counterexample for that too, dunno arseniiv: CPS is good to implement, yeah. Nonlinear use of continuations seems to be a big problem in implementing analogous things (like alg. effects), as they get too costly AFAIR int-e: You don't do callCC in CPS. int-e: (where a continuation escapes itself and then later on you might continue at that point in execution several times... which is just weird.) arseniiv: BTW is there a computational framework in which CPS translation is trivial (like, you write it in the first place) int-e: CPS is a very sand fragment of what continuations can do. kspalaiologos: sdcc as always nails the task int-e: `? sdcc HackEso: sdcc? ¯\(°​_o)/¯ cpressey: arseniiv: I hesitate to even mention this, but there's a strong similarity between CPS and Haskell's "do" notation int-e: I think you mean the stuff that the do notation *hides* int-e: foo >>= continuation cpressey: Right, "what Haskell's 'do' notation desugars to", is what I meant cpressey: do { x1 <- action1 ; x2 <- action2 ; mk_action3 x1 x2 } cpressey: becomes: action1 >>= (\ x1 -> action2 >>= (\ x2 -> mk_action3 x1 x2 )) cpressey: There's obviously some relationship between monads and continuations, and I've even heard people whisper about it on occasion, but I'm not sure I've ever seen it in broad daylight cpressey: (I don't think it's Cont. Cont is for people who can't handle CPS without it being wrapped in a monad. Or something.) int-e: Cont is more or less CPS, except that it also allows some of the more insane stuff that leads to coroutines and callCC. And I've seen people say that Cont is really implementing delimited continuations rather than full ones. (Obviously there's no way to go beyond the initial runCont. But inside that it felt more like full continuations to me.) int-e: :t lookup lambdabot: Eq a => a -> [(a, b)] -> Maybe b int-e: :t M.lookup lambdabot: Ord k => k -> M.Map k a -> Maybe a int-e: (I find that argument order counter-intuitve) int-e: Mostly because it violates the principle that the argument you're less likely to vary should go first, but also because it's the opposite order from M.! and I'd like to use `lookup` as an infix operator. Sigh. cpressey: The answer https://stackoverflow.com/a/3323122 starts with "The first thing to realize about the continuation monad is that, fundamentally, it's not really doing anything at all." and a comment on it rephrases that as "So basically, bind is just CPS-transformed function application?" and I feel those are getting pretty close to the matter. cpressey: I still hate and fear monads, btw cpressey: Ruination, I tell you int-e: cpressey: https://wiki.haskell.org/wikiupload/1/1d/Monica_monad_falconnl.png int-e: "This is Monica Monad, and she's a Warm Fuzzy Thing. Just giving a face to SPJ's alternative name for monads :)" (from https://wiki.haskell.org/Haskell_logos/New_logo_ideas which is huge) arseniiv: Right, "what Haskell's 'do' notation desugars to", is what I meant => yeah, this is an interesting point! I didn’t connect these two before arseniiv: (Obviously there's no way to go beyond the initial runCont. But inside that it felt more like full continuations to me.) => I think I’ve seen `reset` implemented using precisely `runCont` in there arseniiv: Mostly because it violates the principle that the argument you're less likely to vary should go first, but also because it's the opposite order from M.! and I'd like to use `lookup` as an infix operator. Sigh. => yeah I think I was stunned by that too kspalaiologos: I did chess on TI83 kspalaiologos: and it's only 2 kilobytes arseniiv: kspalaiologos: how often does it win you? (if you tested enough times) kspalaiologos: I just did the openings kspalaiologos: it has 6 ply search depth kspalaiologos: I beat it up with king's gambit but it's kinda unfair because the computer is materialistic kspalaiologos: and when it realises it should start defending instead of greedy taking my pieces it's already too late arseniiv: anyway I hadn’t written any chess at all so it should be cool! kspalaiologos: the C code size itself is around 800 bytes kspalaiologos: but it works, somehow kspalaiologos: next I'll try maybe tetris kspalaiologos: I did already pong in BASIC, it was a real torture tho kspalaiologos: took me around two boring lectures to finish it kspalaiologos: there are some problems tho kspalaiologos: damn it crashed in the middle of the game int-e: resign! int-e: Well, "rage quit" would be more accurate :P. arseniiv: roflol arseniiv: rofoldl* arseniiv: some haskell designs there associate with something Hebrew, like that double lambda thing, maybe it resembles an aleph… arseniiv: > let { the [x] = x; the _ = error "the: there are many or no values" } lambdabot: : error: lambdabot: not an expression: ‘let { the [x] = x; the _ = error "the: there are man... int-e: lambdabot's not a repl int-e: there's @let though int-e: and @undef to undo all the damage @let can do arseniiv: > the "a" lambdabot: '\228' arseniiv: > the "ä" lambdabot: *Exception: the: there are many or no values arseniiv: HAHAHA arseniiv: UNICODE IS ILL-DEFINED arseniiv: (not that it’s news or that I really think so) int-e: I'm surprised. int-e: I really think so. :P kmc: @let 2 + 2 = 5 lambdabot: Defined. arseniiv: it’s ill-defined but not so ill-defined as to say that for the sake of it kmc: > 2 + 2 lambdabot: error: lambdabot: Ambiguous occurrence ‘+’ lambdabot: It could refer to either ‘Prelude.+’, int-e: > 2 L.+ 2 int-e: @undef lambdabot: Undefined. kmc: qualified infix operators always look Wrong int-e: I got used to them. arseniiv: int-e: that’s cru… ah, you’ve undone that already arseniiv: > :t the lambdabot: :1:1: error: parse error on input ‘:’ kmc: > let 2 + 2 = 5 in 2 + 2 kmc: > let 2 + 2 = 5 in 1 + 1 arseniiv: my poor the lambdabot: *Exception: :3:5-13: Non-exhaustive patterns in function + int-e: kmc: I use M.! quite a bit. arseniiv: kood emcening int-e: > let the x | [x] <- x = x in the [] lambdabot: *Exception: :3:5-24: Non-exhaustive patterns in function the int-e: Haskell: Oh my god, it's full of syntax! int-e: (irssi, screen, xterm... I don't want to figure out which) int-e: arseniiv: But the logs gave you away, and confirmed what the error message already suggested. arseniiv: int-e: ah, I didn’t think it would be non-obvious kmc: was it actually canonicalized? or just rendered the same way kmc: you can usually tell when the combining sequences are rendered by combining glyphs kmc: because they look like ass arseniiv: kmc: yeah, frequently with fonts which aren’t up-to-date or whose creators think nobody uses non-accented non-latin arseniiv: or when font is okay but the renderer is not int-e: kmc: I pasted it into od -tx1 arseniiv: the question is could an Unicode analogue be simpler? (IDK, but I know many people think it could be, but I’m not sure many of them aren’t overlooking things) kmc: there's a hot-button question if ever there was one kmc: given all the design requirements I think it couldn't be made that much simpler kmc: for example the requirement of round-trip compatibility with all legacy encodings adds a lot of complexity kmc: or at least a lot of characters kmc: that's why accented characters exist in both combined and combining-sequence versions kmc: but round trip compatibility is a nice thing to have because then you can design systems (programming languages, databases, etc) where all text is canonically represented as Unicode and you convert to/from legacy encodings at the edges int-e: arseniiv: I wasn't confused about what you did, I just looked for confirmation. Also, it could've been a zero-width space :) int-e: > text $ reverse "äa" int-e: arseniiv: ^^ :) arseniiv: int-e: nice!! arseniiv: Also, it could've been a zero-width space :) => a good idea too arseniiv: that's why accented characters exist in both combined and combining-sequence versions => oh, I didn’t think about the compatibility reason arseniiv: Unicode makes more sense now int-e: https://xkcd.com/927/ int-e: Arguably we could get away without emoji. Or having a ton of different math fonts in there. int-e: Of course it's not that easy. arseniiv: yeah math fonts are a weird thing int-e: If Unicode didn't accept emoji, we'd have vendor-specific encodings for those, because clearly there's a desire to have them embedded in text. arseniiv: I wouldn’t say “a mistake” aloud but I’ll be thinking that secretly int-e: And I suspect the same kind of reasoning is behind the math fonts. arseniiv: but does anyone use them seriously? int-e: Otoho, why isn't there a full set of Shogi pieces? arseniiv: someone should propose int-e: chess: ♔♕♖♗♘♙♚♛♜♝♞♟ shogi: ⛉⛊☖☗ int-e: seems a bit unfair. int-e: (Also the turned Shogi pieces look different from the normal ones to me. Fun.) int-e: (But that's a font issue, of course.) int-e: "Otoho", hmm. Some Japanese influence there? :P zzo38: For shogi, I think you can just use the kanji, sometimes upsidedown in case of a diagram b_jonas: `olist 1194 HackEso: olist 1194: shachaf oerjan Sgeo FireFly boily nortti b_jonas arseniiv: is there a distinction between consistency and soundness in logic? I think I missed that one but now I suspect the first is syntactic and the second is semantic spruit11: That should be on wikipedia. arseniiv: ah, seems it’s more complicated: a set of formulas is or isn’t consistent, but soundness is a property of a particular logic. Hm I think there still were other uses of these words arseniiv: spruit11: fair spruit11: The usual distinction is soundness vs completeness. spruit11: Consistency is of course also an issue but most systems you'll encounter are consistent. spruit11: Unless you're interested in para-consistent logics, the subject doesn't come up a lot. arseniiv: ah, I think it clarified for me. Consistency of a set Γ is “not (Γ ⊦ ⊥)” and consistency of a logic is the consistency of ∅; and there is no “soundness of Γ” as it’s just not obvious how and for what reason would one define that spruit11: That doesn't seem right to me but it's a long time ago for me too. spruit11: Uhm, it should be possible for classical logics to state false theorems.. I guess. spruit11: I.e., 3=2 is simply false. That doesn't make a logic inconsistent. spruit11: Dunno. int-e: spruit11: it's okay; {3=2} is an inconsistent set of statements; it doesn't make the logic itself inconsistent spruit11: Right. So the question is what Γ denoted in that statement. spruit11: But okay, too long ago. I refer to wikipedia. WillGibson: helloooooo WillGibson: anyone in saudi zzo38: Do you like or hate daylight saving time? I don't like daylight saving time. zzo38: Beckett wrote "The costs of DST outweigh the benefits. But if a significant majority of people really want that extra hour of daylight in the summer, just leave the whole country on DST year-round. I prefer standard time, but Ill be happy to compromise if it means not losing an hour every spring." zzo38: I agree with Beckett; I also prefer standard time, but permanent DST would still be better than changing it all of the time kmc: I agree that changing time zone twice a year is stupid kmc: I haven't formed an opinion on which of the two time zones would be better for permanent use kmc: zzo38: did you know that Spain changed to Central European Time during WW2, and never changed back, with the result that in western Spain during the summer the sun doesn't set until after 10 PM? kmc: https://en.wikipedia.org/wiki/Time_in_Spain#/media/File:Tzdiff-Europe-summer.png zzo38: I think standard time would be better, for use with sundials, so that it is based on noon/midnight (I don't know what is Beckett's reasoning for preferring standard time). However, either way will work as long as there is agreement what time it is, so that if something is scheduled for "five o'clock" then you will know when it is, and so on. zzo38: I did not know that about Spain. Now I do know. zzo38: I did not know that about Spain. Now I do know. oerjan: Well that was easier than I thought oerjan: only hitch is that the history says nothing about why the name is now DINAC rather than User:DINAC zzo38: I am working on adding some more stuff to bystand, including a scoring function. (This might be the only NNTP client which uses both a interactive line-oriented interface and SQLite, and may also be the only one to use SQL as its customization language.) zzo38: (Of course, these would not be the features everyone wants, but that is OK, because there are many alternatives.) HackEso: 1/1:1034) kmc: you gotta tell me if you're an op \ 4) GKennethR: he should be told that you should always ask someone before killing them. cpressey: Welcome to the international center for esoteric programming lingonberry design, development, and deployment int-e: fungot: do you like bat buns? fungot: int-e: and that information may or may not be covered there? like oop, but after a while oerjan: `? banana HackEso: Bananananananana BATMAN! int-e: oerjan: you are halfway there oerjan: living on a prayer int-e: surely by now you've found the "bad pun". oerjan: google images gives a split between cupcakes, hairstyle and furrydom int-e: I think you're overcomplicating this. oerjan: also some rabbits dressed for halloween oerjan: definitely. what otherway is there to handle it? int-e: I'm not complaining. int-e: This is free entertainment :P cpressey: I still don't know where the NTM came from in that MtG thing. cpressey: Probably the same place the bat buns came from, huh. int-e: The NTM is in the hypothetical play where the opponent tries to find a way to make the deck deal unbounded damage. int-e: And the thing is constructed such that damage is all dealt in the end, so for it to happen, the intermediate simulated TMs must all terminate. int-e: So you get the behavior that non-terminating runs are discarded. cpressey: This is uncomputable, of course, but that doesn't seem to matter for this hypothetical? int-e: The hypothetical is just to show that there is an upper bound. int-e: Who cares that we'll never know what it is. int-e: But you still have to play the actual busy beaver game to actually deal huge amounts of damage. int-e: So basically what's happening here is that they're trying to build an M:tG deck that can deal any conceivable amount of money, for a very wide range of "conceivable". int-e: I've done it again. int-e: Apparently "amount" and "money" are tightly linked in my brain. int-e: Woah, xkcd... title="" cpressey: I might be wrong but I also thought there was a limit of something like 125 water clocks, i.e. a MtG hand corresponds to a The Waterfall Model program with 125 water clocks. In that case, I would say that the maximum damage a MtG hand can do, is literally BBtwm(125), where BBtwm is a version of the busy beaver function adapted to The Waterfall Model. cpressey: Literally that number, because that number is literally asking "what's the largest number you can compute with this number of water clocks". int-e: 124, I think int-e: But I'm not sure that's correct. int-e: The 124 is what restricts the universal machine that they implement. cpressey: If they want to simulate some other machine with that UTM there's the question of how they get the description of that other machine, into the UTM int-e: It's guessed. cpressey: By a person, and then encoded as waterclocks? int-e: Yes. Or by hypothetical play. int-e: So in actual play, you need to find a busy beaver. But for hypothetical play you actually get the busy beaver function as an upper bound in the end. int-e: Actual play: The player sets up a terminating TM of bounded size by making corresponding choices. It is run; the number of steps (or something like that) that it runs for turn into damage at the end. int-e: Hypothetical play: We consider all the possible TMs. But only those that terminate produce any damage. So there's an upper bound, given by the busy beaver function. cpressey: A TM implemented with 124 water clocks can compute BBtwm(124) and no larger, even if said TM is a UTM and someone guesses a good TM for that UTM to simulate int-e: cpressey: You're forgetting that the outside is nondeterministic. cpressey: I don't know what that means cpressey: You don't need to model "hypothetical play" as an NTM, that's what confuses and bugs me int-e: None of this really works without non-determinism. int-e: Because then you couldn't externalize the TM definition from the program. cpressey: Is there anything really MtG-specific to this problem? Part of it is that I don't want to guess what rules there are in that game, because I don't play it. int-e: As I suggested yesterday, we're doing something like this: NTM A(n): *guess* a TM B of size m. Run B to completion, counting steps. Return number of steps taken. int-e: Err, n, not m. cpressey: You don't need to "guess" a TM. Rather just say: let B be the TM of size n which terminates and takes the largest number of steps to do so of any TM of size n. cpressey: No NTM needed! int-e: And the variant that computes BB(BB(n)): NTM A'(n): *guess* a TM B of size n. Run B to completion, counting steps. Let m be the number of steps taken. *guess* a TM C of size m. Run C to completion, counting steps. Return number of steps taken. int-e: cpressey: guessing is essential to escape the fact that the busiest beavers cannot be found effectively. cpressey: Why "guess" when you can stipulate? int-e: Because then you can't implement it at all. cpressey: You want to "implement" hypothetical play? int-e: Nobody's *actually* computing busiest beavers here. The busiest beavers just materialize in a proof that the value we get is bounded. int-e: But as long as the play is hypothetical, we can actually have those busiest beavers. cpressey: "Our hand of cards represents a TM, so the largest damage we can do is a busy beaver number" pretty much follows from the definition of busy beaver function. int-e: If you absolutely want to avoid the NTM angel (personally I find it tremendously helpful), you have to allow input instead. int-e: I can't type at all anymore. int-e: speling errros evryerhawe... int-e: cpressey: And the matter of the fact is that we can have a fixed *N*TM without input of small size that computes the busy beaver function for a much higher number of states. cpressey: This is maddening int-e: You do know about Universal Turing Machines, right? int-e: I need a break. int-e: But maybe I should make the idea concrete at least: NTM BB_googol: *guess* a TM A with 10^100 states. Use an UTM to run it to completion, counting steps. Return number of steps taken. int-e: And recall that the model of computation here maximizes the output of all the possible runs that terminate. int-e: The corresponding TM would instead have to take the description of the TM of size 10^100 as input. By virtue of having input, it's not bounded by the busy beaver function. cpressey: Are you trying to say that BB numbers on NTMs can be much larger than BB numbers for DTMs? If so, I don't disagree. int-e: I guess so. int-e: However, then we're *definitely* not talking about BB for TWM here anymore. int-e: But something like BB for M:tG. int-e: Anyway, whenever I wrote "busy beaver" I meant DTM ones. cpressey: I'm still lost. I think I'll just resign. int-e: cpressey: Can you see what that BB_googol thing does and that the result is BB(10^100) where BB is the standard busy beaver function for DTMs? cpressey: I thought I did, but I guess not. cpressey: Or rather: BB_googol is just a NTM for computing BB(10^100) but why do we need that? cpressey: We can just say BB(10^100), we know what it means cpressey: This NTM doesn't relate to anything in the model we're working with int-e: Well the point is that the NTM can be written up as a program, and perhaps translated to a deck of cards. cpressey: Not unless the cards are played nondeterministically somehow cpressey: From what I understand about MtG, they're not, but I don't play that game cpressey: You can talk about "all possibly plays of a hand of cards" without using an NTM int-e: The whole point is that BB(10^100) is an upper bound on the possible outputs of terminating runs. cpressey: *possible int-e: Other than that, BB(10^100) will never materialize. int-e: cpressey: The choices that set up the TM are made during play though. int-e: So the NTM model matches the actual play much more closely than a TM with input. int-e: And of course, in real play, the player will just use the best TM they can prove termination of, not the busy beaver. (And I should probably allow TMs of size less than 10^100 as well :P) cpressey: But but but cpressey: So frustrating. cpressey: BB(n) is a function on a *set of Turing machines*, yes? cpressey: All TMs with size n. lambdabot: Maybe you meant: v @ ? . int-e: BB(n) is a natural number. int-e: given a natural number n. int-e: It's the maximum of number of steps taken by any TM of size n (or less, but that's monotonic) cpressey: To compute BB(6) you must consider all TMs of size 6. int-e: that terminate. cpressey: "all TMs of size 6 that terminate" is a set of TMs. int-e: It's more like... int-e: ...to compute BB(6) you *would have to* consider all TMs of size 6. int-e: Because nobody's actually computing it. cpressey: Fine, for my present purposes this is nitpicking. cpressey: BB(6) is a result *about* a *set* of Turing machines. cpressey: All possible plays of a hand of MtG cards also represents a *set* of Turing machines. cpressey: All possible plays of a hand of MtG cards of size n, represents a set of Turing machines of size m (where n and m are, let's assume, linearly related.) myname: well, all plays of a hand in any card game does cpressey: Therefore the maximum damage a hand of MtG cards of size n can do, is proportional to BB(m). cpressey: Using n MtG cards you can make a TWM program of size m. cpressey: is how I'm using those letters. myname: i doubt that line of reasoning int-e: You keep missing the fact that a program of bounded size can work on arbtirary sized data. myname: it fails if you have cards that do exponential damage myname: exactly that int-e: A singe universal machine can run everything. cpressey: int-e: No, the busy beaver function *accounts for that fact*. cpressey: BB(6) doesn't say *anything* about how much data any TM of size 6 uses or does not use. int-e: cpressey: Then stop saying "the" busy beaver function and define what you're actually using. "The" busy beaver function is for programs without input. int-e: cpressey: It starts on an empty tape. cpressey: I'm not talking about input. int-e: NO INPUT. cpressey: I agree, no input! int-e: The card games have input in the form of choices the players make. cpressey: The machines in BB(6) can use a lot of tape, even though they have no input int-e: This is CRUCIAL. cpressey: What kind of choices do the players make? int-e: Which cards to play, how much mana to spend on it, how often to repeat a cycle if they enter one... int-e: tons of them myname: the number of steps does not have to be proportional to the amount of damage myname: if one step doubles the damage, you are out of luck int-e: Which is why I have all those *guesses* up there. cpressey: OK. I don't play MtG, I'm not aware of the kinds of choices players can make. int-e: One of the real challenges they face is to make a TM interpreter that does *not* leave any choices to the players (with some constraints, like refusing to resign; the M:tG rules stipulate that a player may resign at any point during the game). cpressey: I guess there's not much point trying to understand this, unless I want to understand the rules of MtG first, and I don't really have any interest in that int-e: For me the new insight here was that NTMs can compute (and even iterate computations of) the busy beaver function for DTMs. int-e: So for this purpose, M:tG is just a peculiar NTM. And I totally ignored TWM. cpressey: If there's an NTM that can compute the BB function then there's also an NTM that can solve the halting problem. int-e: (As a two-player game with best play, M:tG might actually be a full ATM. I don't know.) int-e: Well the halting problem is r.e. even with TMs. cpressey: I'm aware of that. int-e: And the usual acceptance condition for NTMs is "there is an accepting run", generalizing what you do for r.e. (accepts the input). int-e: So yes, that solves the halting problem. int-e: One real stumbling block for me is to extend this to a functional model of computation, that actually computes a value from the input. int-e: s/is/was/ cpressey: I have a hard time understanding why someone would think that they could extend "there exists an accepting path" to something that actually finds that path in all cases. int-e: I mean, it's just a definition. cpressey: I guess my brain pressure is just too high. Occupational hazard of us constructivists, don't ya know. int-e: We can do it mathematically (inside a proof, say). We can't do it in practice. int-e: Using classical logic, obviously, like most people. cpressey: It would still seem that you're simply saying something like, the maximum damage you can deal in a hand of n MtG cards, is BBN(n), where BBN(x) is the busy beaver number for an *NTM* with x states. cpressey: OK, BBN(m) where m is some function of n. int-e: It's more bounding BBN(n) from below by (iterated) BB(m) where both iteration and m depend on the concrete n-sized program. myname: the amount of damage is obviously bounded by BBN(f(n)) for a function like f(n) = infty int-e: myname: Hey we're having a serious discussion here. int-e: cpressey: You're not wrong, there is something resembling BBN(n) for a fixed n here somewhere, namely in the task of finding an M:tG deck that allows dealing a huge amount of damage while having an upper bound on that damage. int-e: cpressey: But the point where the discussion started was that they wanted to find an M:tG deck, that is, an NTM, that actually computes BB(m) or BB(BB(m)) for another fixed m instead, so that they had something easier to work with: Busy beavers (for some deterministic model of computation that's easy to implement a universal machine for in TWM). cpressey: OK. "NTM" and "actually compute" do not go together. That's my first problem. int-e: You can define BB(n) but you can't compute it. int-e: The NTM semantics are something you can define, not compute. int-e: I should probably not have used "actually" there. int-e: s/actually computes/defines/ int-e: You still need the busy beavers (not necesaarily the best ones) to actually play the game and deal some damage. cpressey: I think it is a bad idea to model a hand of cards an as NTM. I think it is better to model (hand of cards + player's strategy) as a DTM. int-e: Well, and I disagree completely. cpressey: Well... int-e: I honestly believe that NTM (and ATM for the full game) is the most natural model for this. I don't want to mess things up by restricting the players to a computable strategy. Not that it matters here... there are only finitely many choices to be made anyway. cpressey: Are there really only a finite many choices that a player can make when playing their hand? int-e: In this particular case? Yes. cpressey: If so then I object even more strongly to modelling that as an NTM cpressey: This is just combinatorics. cpressey: Occam would prefer you not complicate it unnecessarily, and so would I. int-e: Yes, don't model choices that happen on the fly as input, defying causality. int-e: Use the proper model for that, which is non-determinism. int-e: This may be our main disagreement really... I think non-determinism is *simple*. int-e: Yes, you get a tree of computations rather than a line. But that's all. Trees are simple. int-e: And "just combinatorics" -- in either case you still get to the point where the model of computation solves the halting problem for you. int-e: By simply disregarding non-terminating paths of execution (inputs for which your program doesn't terminate) cpressey: It seems to me that you would rather introduce an NTM that represents selecting all possible finite combinations from a finite set, than merely consider all possible finite combinations from a finite set, in your explanation, that's all. int-e: Yes. At least in this particular context. cpressey: I would call that overkill, not just because it's nondeterministic, but also because it's a TM. int-e: (I could argue against the idea that I introduce the NTM... the NTM is already present in the game, to my mind. But meh.) int-e: Playing 13 No Need To Argue.ogg. cpressey: If you have an NTM that "guesses" an arbitrary DTM description and writes it to a tape, then uses a UTM to simulate that DTM and "produce" its result as an integer, there is no upper bound to the integer the NTM can "produce"; it only needs to "guess" bigger DTMs to get bigger numbers. cpressey: On the other hand, if there is a limit to the set of DTMs it can "guess" - if they are drawn from a finite set - then you don't need to talk about "guessing" them and then simulating them at all - you just have an enumeration of DTMs. int-e: cpressey: But I /prefer/ to do it by guessing. Taneb: Are you two doing the thing where you argue about a fundamentally unimportant detail while agreeing about all the important bits? cpressey: I think I disagree about some of the actual conclusions too, but it's hard enough to find out exactly what they are cpressey: Wouldn't BBN(x) be infinite for large enough x? Taneb: What is BBN? cpressey: Busy-beaver number for NTMs. Taneb: Where x is the number of states? Taneb: How would BBN(x) be > BB(x)? cpressey: The NTM has no limit to the number of states it can "guess" a DTM description to have, then it can simulate it with a UTM cpressey: So probably BBN(10) is infinite cpressey: If not 10, then some fairly small number, in the scheme of things Taneb: Hmm, wouldn't the definition of the busy beaver function preclude machines that might not halt, and hence preclude any that could be infinite cpressey: So probably BBN(10) is ω, is that better Taneb: I don't think I understand how you're defining BBN Taneb: I can't see how ω could even be in the codomain of BBN cpressey: OK. BB(x) is the largest number of steps any terminating DTM with x states takes before terminating. BBN(x) is the largest number of steps any terminating execution path of an NTM with x states. cpressey: *states has. Excuse my awkward phrasing. Taneb: Ah, I had taken BBN(x) to be the lagest number of steps of any terminating execution path of an NTM with x states that terminates in all execution paths Taneb: Because otherwise, BBN(2) is undefined, I think Taneb: Take a non-deterministic turing machine with states (I, H), and transitions I -> {1RI,1RH} Taneb: This has a terminating execution path for every natural number int-e: cpressey: BBN(n) is cleverly defined to exclude not only non-terminating machines but also those that have unbounded results. cpressey: "they wanted to find an M:tG deck, that is, an NTM, that [defines] BB(m) or BB(BB(m)) for another fixed m instead, so that they had something easier to work with: Busy beavers (for some deterministic model of computation that's easy to implement a universal machine for in TWM)." My problem with this is in two parts: cpressey: 1) If they only have 125 waterclocks at their disposal to make this machine in TWM, then their damage is limited to BB(125) (or something proportional to it) int-e: You're ignoring the starting values of the clocks? cpressey: 2) If they use these 125 waterclocks to make a UTM, and then feed it some kind of TM description as part of how they play their hand, then I need an explanation why they are not allowed to give it an arbitrarily large TM description that produces BB(x) for arbitrarily large x, i.e. it would appear there is no upper bound at all. int-e: The x needs to be encoded in the deck, obviously. cpressey: Why obviously? int-e: Because otherwise, as you say, things would be unbounded. cpressey: How do we know they're not unbounded? int-e: Which is specifically forbidden by their task description... if the deck produces unbounded damage, it doesn't qualify. int-e: Which links back to "BBN(n) is cleverly defined to exclude not only non-terminating machines but also those that have unbounded results." cpressey: Why does x need to be encoded in the deck as opposed to the choices that the player takes when they play their cards? int-e: We're running in circles here. int-e: You just asked that question, I just answered it. int-e: Nothing has changed in the meantime. cpressey: I guess there's something I still don't understand about how MtG is played. int-e: The encoding may be indirect, of course. In particular, x may be something like BB(10). cpressey: I don't even care about this, it's just frustrating that, every time I say something, hoping to get more clarity, I just get responses that seem to make it more opaque. Taneb: cpressey: I think you might have misinterpreted the nature of the puzzle Taneb: Or I have misinterpreted the nature of your complaint int-e: What frustrates *me* is that you seem to understand everything about this and still are, obviously, confused, and I have no idea what you are confused about. cpressey: I don't see how how n cards could *possibly* generate the number BB(BB(n)). cpressey: I can see how they could generate the number BB(n), yes. cpressey: But you see, I don't see how they could generate any number *larger* than it. cpressey: Unless it's something like: n cards generates BB(n), then BB(n) *plays* of those cards, generates BB(BB(n)). Something like that. int-e: BB_BB_googol: Guess a TM A of size 10^100. Run it to its conclusion, counting steps. Let m be the number of steps taken. Guess a TM B of size m. Run it to its conclusion, counting steps. Return the number of steps. int-e: (You can make the TMs your input. I don't care.) int-e: You discard all non-terminating runs, and take the maximum length of the terminating ones. int-e: That length is BB(BB(10^100)). int-e: s/length/value returned/ int-e: (sorry) cpressey: "Guess a TM A of size 10^100" - May I ask to what object in the game of MtG does this A correspond? int-e: Some number of creatures of a particular creature type. int-e: Creature types === counters in TWM. cpressey: OK, can I ask another question/ int-e: It's not a perfect analogy. int-e: I really prefer to think of this in terms of (N)TMs, because that's far more familar territory to me. cpressey: I can guess a TM of size 10^100. Can I guess a TM of size 10^10000 instead? int-e: Sure. That would be a different NTM though. cpressey: Can I guess an arbitrarily large TM? cpressey: Why not? int-e: That's the whole point of building that bound into the NTM. cpressey: May I ask, what object in the game of MtG the NTM corresponds to? int-e: You have given the explanation above: If you /could/ guess a TM of arbitrary size, there would be no maximum result (the results would be unbounded), and we don't want that. int-e: The NTM is the deck of cards. cpressey: Wait what? cpressey: I thought we were trying to find out what the maximum result *is*. int-e: Find a deck of card whose maximum damage is bounded, but really really big. int-e: The damage is all done in the end, and corresponds to the number computed by the NTM. cpressey: The answer seems to be that you can find decks of cards that do arbirarily large finite damage. int-e: But the deck size is bounded. cpressey: I was pretty sure the constraint was that we had to avoid *infinite* damage. cpressey: What is the deck size bounded by? int-e: Plus a side-board of, what, 10 cards? Something like that. int-e: But that's all so awfully M:tG-specific. cpressey: OK, so you're modelling this 60-card deck as an NTM with 60 states (roughly speaking). cpressey: But there is some reason this 60-state NTM can't guess (and then simulate) arbitrarily large DTMs. cpressey: But I'm not seeing that reason. int-e: https://esolangs.org/logs/2020-03-02.html#lNe int-e: cpressey: The bound (whatever it is) must be enforced by the NTM. int-e: cpressey: I doubt that the number of states corresponds to the number of cards in any nice fashion. But I also don't really care about that aspect of the problem. int-e: My interest is really this: My initial reaction to the idea that you can iterate the BB function was that this can't be done. No way. Then I homed in on alternation as a possibility, and then I realized that plain non-determinism is enough. int-e: Which was a new insight for me. And I'm still enjoying that. int-e: All the TWM and M:tG details... meh I just assume they work out somehow. int-e: And if they don't work out, that's no skin off my nose either. cpressey: "if there is a line that does more damage we will take it", but "if that amount of damage is unbounded, the deck is disqualified.", so basically this is ruling out any sequence that grows forever. int-e: Yes. This is the same as ruling out an NTM that produces unbounded results. cpressey: OK, that makes sense I guess. cpressey: I can't quite convince myself of it. cpressey: "Let m be the number of steps taken. Guess a TM B of size m." ... the NTM has to allow guessing a TM as large as m, without knowing how big m is beforehand, but also has to prevent guessing arbitrarily large TMs. int-e: A is *deterministic* int-e: So it either fails to terminate (and we're good, the run will be discarded) or produce a fixed result. int-e: Same for B. cpressey: Back up int-e: m is bounded by BB(10^100). cpressey: I *understand* that A is deterministic; in fact I am assuming that the NTM correctly guessed the DTM which computes BB(10^100). int-e: So in that case m equals BB(10^100) by the point we're guessing B. int-e: So that's not arbitrarily large anymore? int-e: (Though obviously so insanely large that it makes no difference in practice.) int-e: (Where "practice" refers to the scenario where we actually play out one of those runs with concrete choices for A and B) cpressey: OK, so there's a deck of 60 cards where there's a possible play that writes a TM A of size 10^100 to the tape and then simulates it to obtain m = BB(10^100) and then writes another TM, this one of size m, to the tape, and then simulates it to obtain BB(m), i.e. BB(BB(10^100)), and then does that much damage. int-e: Yeah, that's the mental model I have of this. cpressey: I think I understand it now. int-e: I'm hazy about the actual models of computation (TWM is involved, but it's used to implement a universal machine, and that may be something entirely else still). cpressey: Now that I have explained it to myself in terms that do not involve an NTM. int-e: The important bits to me is that the outer model is non-deterministic (you prefer input, we disagree, let's not reopen that discussion), and that the innner thing that the BB() function is based on is deterministic (so that non-termination of the simulated machine manifests as non-termination of the whole thing). cpressey: You *could* do the steps the other way around. You could write a TM B of size BB(10^100) to the tape and simulates it to produce BB(BB(10^100)), then write a TM A that computes BB(10^100) to obtain m, then aborts if TM B consists of more than m states (but it doesn't so you're ok and you output BB(BB(10^100)).) cpressey: I'm not sure why I mention this. Taneb: (I don't get how people are computing BB(BB(x)) given BB(x)) tromp: that's not possible:( cpressey: They're basically getting very, very lucky, if you want to think of it as something that could actually happen. tromp: a lucky NTM of 1 or 2 states can also output BB(10^100) :) cpressey: For obscure reasons, we also want to also disallow NTMs that can produce arbitrarily large numbers. cpressey: Details are available in the scrollback, if they can be extracted from the painful misunderstandings. cpressey: I'm still digesting it, myself. int-e: cpressey: It's not all that obscure... it's fairly easy to do unbounded damage in M:tG. cpressey: For reasons that will be obscure to anyone who doesn't care much about the MtG angle. int-e: (Use any of https://hobbylark.com/card-games/best-infinite-mana-combos-mtg to fuel a Fireball, which does X damage for 1 red and X other mana.) int-e: cpressey: But it also makes sense to do that when trying to define the busy beaver function for NTMs ;) int-e: (Because what would the point be if the value can be infinite...) int-e: cpressey: The reason is not that dissimilar to that 2-state NTM you had earlier... non-determinism means you can expect to turn an infinite loop into an unbounded one very easily. int-e: And for some reason the M:tG designers don't consider infinite loops to be a design flaw in the cards... as long as they either don't do anything useful, or are expensive to set up. cpressey: Fine, how would you like to me say it? cpressey: tromp: For reasons that int-e will be happy to explain, we want to avoid NTMs that produce arbitrarily large numbers. cpressey: Have a good weekend. zzo38: I think they should add a dot command in the SQLite command-line interface for editing the definition of a view or trigger using an external editor. zseri: I think it would be interesting to invent a programming language which supports a metatype above "type kinds". ref = https://github.com/YZITE/rfcs/blob/master/proglangs/0004-typelang.md arseniiv: posted a thing to ##math to no avail, maybe #esoteric-setminus-##math people will make something of it: arseniiv: hey hey you probably know that solutions to ordinary differential equations like P dx + Q dy = 0 are integral curves. The previous night it occurred to me that one could take 2-forms (and higher ones) instead of 1-forms and make an equation like α := P dx∧dy + Q dy∧dz + R dz∧dx = 0 whose solutions would be “integral surfaces” (resp. submanifolds of higher dimension). But I haven’t seen an equation like that anywhere. Do you know why? arseniiv: the thing doesn’t seem ill-defined: as with integral curves, every point P of an integral surface should have a tangent bivector A such that α(P, A) = 0. One can also think about nonlinear higher-order equations, again in the same way as for the ordinary “1-form equations”. WDYT? b_jonas: differential equations question? no thanks zseri: (@arsentiv) I don't really know how to interpret your question, but that might be because I don't really know how to translate your "textification" of integral formulas back into the standard notation. hm. ref = https://en.wikipedia.org/wiki/Surface_integral arseniiv: hehe those weren’t integrals, those were differential form fields (equated to zero), but there is a hidden argument to which they are applied to: a vector field, or a bivector field in the second case. So a solution will consist of points with tangent (bi)vectors sticking out of them, and as fields by usual definition are smooth, these points would (in most cases?) make a curve, a surface etc. arseniiv: zseri: if you are reading logs ← here’s a mention to simplify the search arseniiv: also a person said me that in general there should probably be jets instead of forms arseniiv: but I don’t know if they cover k-forms for k ≥ 2 zzo38: Wikipedia mentions some things they try to do to reduce draws (especially short draws). zzo38: (in chess) zzo38: Something I thought of is to use "goulash rules" after a drawn game. This is similar to what FIDE suggested, although in addition to faster time controls, draws by agreement and repetition and 50 moves are disallowed in the goulash game with my idea, and also a few moves (but not the first few moves; rather, moves coming much later) are decided at random, and if it is still a draw, the draw stands. zzo38: (I do not believe draws should be eliminated entirely, just to be reduced a bit.) imode: have there been any esolangs or programming languages based on the idea of L-systems? where your "instruction stream" is generated according to a string rewriting system? zzo38: I don't know; maybe. I don't really remember, either. rain1: hey whats new ais523: my attempt at explaining the MTG busy beaver thing: ais523: the deck is designed so that it has two possible modes to be played in ais523: one mode allows the player to choose one of a finite (but very large) number of strategies, this produces an output which is a (deterministic) Waterfall Model program ais523: the number of waterclocks that can be used is bounded at 124; the size of the zeroing triggers is not inherently bounded, but it has a maximum because there are only finitely many strategies available ais523: the other mode deterministically simulates the Waterfall Model program to completion; if it is not a terminating program, the game immediately ends in a draw ais523: if you just have these two modes and nothing else, the largest possible output you can get is thus a busy beaver function (although not a cleanly defined one) ais523: now, what the players involved are looking to do is to create a deck that can be switched between these modes finitely many times ais523: so, first a player chooses, by their strategy, one of the possible Waterfall Model programs ais523: then, that program is simulated, and (if it halts) produces an output ais523: now, we go back to the first mode again, and use the output of that program as a bound on the size of the zeroing triggers of a second Waterfall Model program ais523: so we still have finitely many options here, but the number of options is now bounded by a busy beaver number that we calculated earlier ais523: repeat finitely many times ais523: the maximum possible final result is an iterated busy beaver number; however, due to busy beavers being uncomputable, it's not known what path you would have to take to reach that result b_jonas: can you really have a deck of Magic cards that can build Waterclock simulations but nothing slightly better? b_jonas: also, wait, what busy beavers? b_jonas: if the zeroing triggers aren't bounded, then can't you just choose an arbitrarily large number? b_jonas: fungot, is the lifetime warranty in the base price for your immortality serum, or do you charge extra? fungot: b_jonas: isn't that roughly how your average server app works? just out of memory, then i wont be using motif as a template ais523: b_jonas: the way it works is that the deck generates large numbers some resource (e.g. mana) using a more traditional non-infinite combo, then that resources bounds the zeroing triggers by limiting how much time you have to set them up ais523: also, the key idea is to create a deck that can construct a Waterclock simulation, but has no instant speed effects that can be used to interfere with the simulation while it's running, and no way to create a gamestate where trigger stacking order is relevant ais523: that last part seems to be the hard part ais523: so it's not so much about "nothing slightly better" as "the only loops that aren't clearly bounded have no way to produce output if they're infinite, and no way to manually interrupt them" int-e: ais523: shouldn't the setup also include the initial values of the counters? int-e: If not, then my mental model of TWM isn't right. int-e: counters -> clocks ais523: int-e: oh, yes ais523: but it turns out that that's mostly irrelevant because you can use a zeroing trigger to set the initial values ais523: so even when restrictions on the initial values exist, they typically turn out not to matter int-e: Well, I thought the way to go about this was to work with a fixed TWM program that implements a universal machine. But maybe not. ais523: I think the idea is, as long as we know that at least one universal machine exists within our given bounds int-e: (And, upon reflection, probably not, because then encoding 124 triggers in the deck itself becomes infeasible.) ais523: then we know that we have some sort of busy beaver being calculated ais523: which is /either/ a busy beaver for the universal machine in question, /or/ a busy beaver for some other TWM program that fits witihin the bounds in question ais523: either way, it's a finite number by the definition of busy beavers, and it's bounded from below by the busy beaver for our particular UTM b_jonas: what would be really crazy is if you could make a deck that not only can't make infinite loops, but where the computation (say the waterfall matrix values) are limited by some resource in the deck itself, like it can use numbers up to 2**200 if you have 200 spare Islands in the deck. deck size is limited to something between 100 and 5000 cards by the rule that you have to be able shuffle your deck b_jonas: without assistance. the number of players might not be limited, but I don't think there are tournament games with more than 8 players or more than 8 decks. MTGBusyBeaver: Well we encountered a problem with our setup that currently makes iterating very difficult, but otherwise yes MTGBusyBeaver: The deck size is limited to 60, and we can use numbers up to around 10^^^^55 b_jonas: what limits deck size to 60? int-e: b_jonas: arbitrariness MTGBusyBeaver: the rules, otherwise we could have a deck of an arbitrary number of relentless rats b_jonas: ais's deck is limited to 60 so that it can be more consistent in realistic games b_jonas: MTGBusyBeaver: no, not an arbitrary number. like I said above, there's a limit in the rules. It's just higher than 60 cards. ais523: b_jonas: MTGBusyBeaver's aiming for an entry in a competition that has specific rules, one of which is a maximum deck size of 60 MTGBusyBeaver: his TM is actually trying to be SB only, so he can wish for the whole thing from a normal deck int-e: . o O ( Future M:tG players will be bred to have extra large hands. ) MTGBusyBeaver: the shuffling limit is a soft limit, and hard to properly bound. int-e: What's "SB"? MTGBusyBeaver: you'll get people coming along saying "oh but i can shuffle 5001 cards" b_jonas: but those rules don't include DMM's special rule about infinite loop, because nobody knows how that would apply to setting up a simulation like this? MTGBusyBeaver: SB=Sideboard b_jonas: int-e: sideboard MTGBusyBeaver: which is 15 extra cards you can bring that dont get shuffled into your main deck for game one b_jonas: int-e: no, those of us with large hands prefer the Rubik's cube MTGBusyBeaver: you can add/exchange them with the main deck or fetch them with cards like cunning wish int-e: b_jonas: I have an 8x8x8 one which I wish I had larger hands for. The other sizes I have are just fine :) b_jonas: int-e: also no because, outside of crazy exercises like this, you usually want your deck to be as small as the rules allow or close to it int-e: b_jonas: So, to put numbers to that, (8.2cm)^3 is uncomfortably big. (6.7cm)^3 (that's my 6x6x6 one) is fine. b_jonas: which is 60 cards for most constructed format, 100 cards for a few other constructed formats b_jonas: wait, 10^^^^55? that's rather big. and you hope to fit a universal computer within the same deck as the combo that does that? MTGBusyBeaver: 10^^^^55 is a lot smaller than our other strategies, but the largest that looks to be compatible with the (Very restrictive) TM setup ais523: if you can use all 60 cards you can do things like compute the Ackermann function MTGBusyBeaver: Yeah, we have had Ackermann beating decks in standard for 3 years in a row now. MTGBusyBeaver: and vintage could already get quite beyond that, requiring the "fast growing hierarchy" notation MTGBusyBeaver: but BB functions are even better than that b_jonas: MTGBusyBeaver: and you're allowed to customize the deck of only one player for this, right? multiple players lets you separate different mechanisms with less risk of interactions much more easily. MTGBusyBeaver: yes our opponent's deck is 60 wastes b_jonas: ais523: I'm thinking not really about the number of cards here, but the interactions between the two machines ais523: b_jonas: the basic trick is that the whole deck is sorcery speed apart from the triggers that build the waterfall b_jonas: and the waterfall macnine program would execute without resolving? b_jonas: also I'll have to reread the older logs about this later b_jonas: I was just too busy during the week MTGBusyBeaver: it executes to completion without (meaningful) choices by either player ais523: except inasmuch as Arcbond is involved, which always struck me as a potential weak point MTGBusyBeaver: what do you mean? MTGBusyBeaver: what we choose to put arc bond on? ais523: trigger stacking MTGBusyBeaver: Yeah, we did run into a propblem there, but we managed to find a way to force all of the bishop of wings on the opponent's side MTGBusyBeaver: (this is why we arent taking about iterating BB(BB(BB...)))) right now) MTGBusyBeaver: that way triggers are forced to get stacked in APNAP order and arcbond is our trigger MTGBusyBeaver: so it has to go below all of their death triggers ais523: oh, neat ais523: that's the same solution I used in my sideboard turing machine ais523: but /forcing/ it, rather than making it an option, is pretty impressive MTGBusyBeaver: we bounce/replay/copy Dowsing dagger to give them a bunch of plants MTGBusyBeaver: then Mirrorweave them to Dralnu's crusades and Bishop of Wings ais523: might there be a way to set up a nondeterministic loop using the original Bishop of Wings on your own side? MTGBusyBeaver: but in order to do damage to kick the machine off, we need to sacrifice our bishop MTGBusyBeaver: originally via Goblin grenade and no other creatures ais523: well, it doesn't have to be the same machine ais523: I guess if that's the only way to set off /any/ potentially infinite loop… MTGBusyBeaver: yeah, its fortunate that opalescence does not grant a creature type ais523: so the idea is that the deck cannot play any more than 1 creature that has a creature type (Bishop of Wings) on its own side ais523: but can play arbitrarily many on its opponent's side ais523: and any way to start a loop requires a sacrifice of a creature with a creature type MTGBusyBeaver: we have gotten a bit beyond that as bishop of wings only trigges for things on its controller's side MTGBusyBeaver: and not arbitrarily many, only 10^^^^55 or so. ais523: ah right ais523: fwiw, optimising the number /inside/ the BB(…) hadn't really crossed my mind ais523: because the BB function is so much larger than anything you can describe in a reasonable number of charactesr MTGBusyBeaver: it is much much less important MTGBusyBeaver: than actually getting BB numbers ais523: anyway, I saw a suggestion that maybe limiting this thing to 12 waterclocks would help ais523: is that still the case? because I've wanted to make a "small" TCness construction for The Waterfall Model for a while ais523: and if that number would be helpful, it gives me a target MTGBusyBeaver: we could probably go even a bit higher than that if we need to, but yes 12 is the limit of number of copies of a single enchantment without shenanigans, (4xoriginal, 4x copy enchantment, 4x Mirrormade) MTGBusyBeaver: really 13 as the halting clock does not need a dralnu's crusade ais523: anyway, I need to go, but I'll keep thinking about this MTGBusyBeaver: also helpful would be proving whether the "growing" variant is TC MTGBusyBeaver: I suspect it is not, but my initial attempts at proving that have been flawed. zzo38: SQLite documentation mentions four kind of "application file formats", being fully custom, pile of files, wrapped pile of files, and SQLite. But Microsoft Office documents are actually a wrapped pile of files (although using a container format which isn't used much elsewhere, although 7-Zip can open it). There may be other formats nested, too. zzo38: And then, there is stuff such as JSON, XML, etc b_jonas: zzo38: no, Microsoft Office uses zip as the container format b_jonas: and the contents are mostly XML files, except it stores images in ordinary formats like jpeg zzo38: Perhaps the new version does; the old version uses a different container format, and the contents are a custom format. b_jonas: oh, the old file formats are custom and optimized for MS Office's internals b_jonas: and for slow computers int-e: . o O ( Let's crash and pretend the resulting core dump is a file format. ) olsner: . o O ( in addition to unexec, emacs also allows you to save files as "plain text" ) sombrero: mmm, just a quick visit to express my gratitude to the esolanguagers and esolinguists that build esolang.org , I was a good source of inspiratio sombrero: It was a good source of inspiration arseniiv: `relcome sombrero HackEso: ​02sombrero: 06Welcome 13to 04the 07international 08hub 09for 02esoteric 06programming 13language 04design 07and 08deployment! 09For 02more 06information, 13check 04out 07our 08wiki: 09. 02(For 06the 13other 04kind 07of 08esoterica, 09try 02#esoteric 06on 13EFnet 04or 07DALnet.) sombrero: well, besides help with eso-inspiration, I was trying to locate ternary material, and indeed there was an esolang called "TrybblePusher". https://vixra.org/abs/2002.0570 (specifically for the last section ) sombrero: thanks zzo38: Now I implemented the "setsheet" command in TeXnicard, which needs an array of up to sixteen sheet names. (Sheet names are separate from page names.) Hopefully sixteen sheets per card should be sufficient! b_jonas: fungot, where do I buy baby weight scales conforming to the 2019 redefinition of the kilogram? fungot: b_jonas: advice for me? :d hehe. yea. right) b_jonas: fungot, how do you pronounce "complacent"? fungot: b_jonas: yep also didn't like hw much, well doing electronics to be exact. b_jonas: neither hace I int-e: Hmm there's "complaisant" as well, didn't know that. b_jonas: int-e: that sounds like someone tried to spell "complacent" in french b_jonas: fungot, what does the english verb "discress" mean? fungot: b_jonas: luxy like, *now*, for example int-e: b_jonas: No, they just borrowed the word from french, and it ended up with two homophones that have slightly different meanings. b_jonas: fungot: ok, so what's your quote for the immortality serum with the lifetime warranty, adult size? arseniiv: fungot: I join b_jonas here fungot: arseniiv_: if you think she is lacking in my idea, really; it's just an example of how to implement v and started writing them down arseniiv: hm fungot knows about the v language fungot: arseniiv: reading nested stuff is a pain arseniiv: I agree to an extent b_jonas: fungot: what's your quote for the immortality serum with the lifetime warranty, adult size? fungot: b_jonas: does it generate? i'm not talking about programmers that are beginners in scheme. ais523-: the hyphen is half an underscore MTGBusyBeaver: so underten? ais523-: seems about right :-D ais523-: (I add extra underscores to my name to indicate how insane the method via which I'm connecting to IRC is) b_jonas: I was thinking more of ↽ which is half of ← ais523-: on the subject of the "growing" alternative waterfall model, it doesn't act much like The Waterfall Model at all, I suspect it may be TC via some other mechanism but it's going to be hard to prove b_jonas: oh, I use nc_jonas as my nick when I connect using (rlwrap netcat chat.freenode.net 6667 | cat -v) except that I don't because I most often do that to renew the last seen time of alternate nicks that I own ais523-: the way to think about it is that the zeroing triggers are delayed for a while, then all run at once ais523-: b_jonas: that's ais523|telnet (or ais523|nc) when I do it, and merits less than half an underscore ais523-: really, the issue with the underscore scale is that ais523_ is actually fairly restricted, there should have been more scales with fewer underscores than that b_jonas: I don't recall what exact program I used to connect from the rescue system of debian install images ais523-: b_jonas: that is very very close to my current half-underscore setup, as it happens MTGBusyBeaver: you think it is actually TC? Interesting. I'm having a hard time seeing how it could behave nicely. ais523-: as a general rule, if you can't easily prove something sub-TC, and don't notice a restriction that seems insurmountable, it usually is TC MTGBusyBeaver: if it is, that opens up a lot more waterclocks (249-c where c is some small constant like 3) MTGBusyBeaver: and makes the setup a lot easier b_jonas: I don't think the difference between 120 and 240 clocks matters, if your limit on the matrix values isn't small zzo38: I add the underscores when the server is unaware that the connection with the name "zzo38" is lost. MTGBusyBeaver: also there was a question about how these implementations handle the case when two waterclocks zero at the same time. Both of their rules get run before the next decrements. ais523-: that's OK, any deterministic resolution will be OK for this ais523-: because you can write programs to never need to do that ais523-: obviously it has to be deterministic so that you can't create a loop where a player controls the number of iterations MTGBusyBeaver: yeah, exactly. Thats why we are using Coat of Arms as the way to boost toughness MTGBusyBeaver: `card-by-name Coat of Arms HackEso: Coat of Arms \ 5 \ Artifact \ Each creature gets +1/+1 for each other creature on the battlefield that shares at least one creature type with it. (For example, if two Goblin Warriors and a Goblin Shaman are on the battlefield, each gets +2/+2.) \ EX-R, 7E-R, 8ED-R, 9ED-R, 10E-R, M10-R, DDS-R, H09-R b_jonas: well, google says "Your search - immortality serum lifetime warranty - did not match any shopping results." b_jonas: it also says "Suggestions: Make sure that all words are spelled correctly." which is a bit ridiculous because google knows perfectly well how to fix misspelled words zzo38: Someone told me that Google Groups has stopped carrying Usenet groups, but this morning I downloaded six articles and four were from Google Groups. Do you know anything about this? Maybe it is just new ones they have stopped adding? I don't know? zzo38: I made up a "separations output format", which is meant for use when a program outputs raster data for printing with an arbitrary set of separations, and to be not too complicated to read and write, but allows metadata to be specified if needed. zzo38: Do you like this? ais523-: I don't think I've ever written a program that needs to do that ais523-: but its probably good to have a defined format if you're writing a program that does b_jonas: zzo38: doesn't ImageMagick 7's format already allow an arbitrary number of color channels? b_jonas: although sometimes you want 8-bit rgb channels and 16-bit depth b_jonas: I just use multiple images for that sort of thing though zzo38: Maybe it does, although I think that has a somewhat different use that what I did. zzo38: Here is the current version of the document: http://sprunge.us/3VkU32 I can change it if you have suggestions to change it, though (maybe). Hooloovo0: I think I don't understand what "raster" and "separations" mean int-e: raster ~ a grid of pixels int-e: I imagine separations are for color channels? I haven't looked. Hooloovo0: yes, I know what both of those words mean, but not in context zzo38: Yes, mainly, although separations are generally used for printing, and not for display on screen. zzo38: Printing separations is normally CMYK, although sometimes additional separations are used. (e.g. Magic: the Gathering cards are printed with two additional separations; one for the "underprinting layer" on shiny cards, and one for the text (which is still black, but I read somewhere that it is a separate black layer than the black layer for the art)) kmc: zzo38: interesting, do you know why they use a separate black layer? b_jonas: kmc: they do that for most color printing, different ink for the black in the full color parts and in the black and white parts b_jonas: kmc: even most home printers have separate black inks for them, except for some very cheap ones b_jonas: it's nothing specific for M:tG int-e: . o O ( Which are probably very expensive in the long run, and have awful looking text. ) b_jonas: mind you, M:tG does use other special printing technology b_jonas: including I think printing the back in a different way than the front, to keep the back hard to distinguish between different sets while the front can become nicer int-e: https://en.wikipedia.org/wiki/Spot_color also comes up int-e: (Generally. I don't quite understand why M:tG comes up here... nerds!) b_jonas: int-e: why does category theory come up here? nerds int-e: b_jonas: I know, right? int-e: But I honestly didn't expect people to care about how M:tG cards are *printed*. b_jonas: and SAT solvers and comparison of different proof systems b_jonas: int-e: I do care about that sort of thing, typography looking nice int-e: b_jonas: Obviously I'm embracing that label myself. b_jonas: not only for M:tG cards b_jonas: like Knuth says, "I can't eat in a restaurant because I only see what font is used on the menu." int-e: kemming b_jonas: oh yeah int-e: (why did I put a second 'm' in there) b_jonas: `? font HackEso: ​#esoteric bitmap fonts include: \oren\'s font http://www.orenwatson.be/fontdemo.htm , lifthrasiir's font https://github.com/lifthrasiir/unison/ , b_jonas's font http://www.math.bme.hu/~ambrus/pu/fecupboard20-c.pcf.gz , fizzie's font https://github.com/fis/rfk86/tree/master/web/font , FireFly's fonts http://xen.firefly.nu/up/fonts/ b_jonas: ^ this one is characteristic of the channel b_jonas: I should add more characters to mine some day int-e: b_jonas: Anyway, I apologize if you felt insulted. b_jonas: I'm not insulted MTGBusyBeaver: Wouldn't the text be on a different layer than the art/frame due to translations? kmc: that's what i was wondering int-e: Makes sense to me. b_jonas: MTGBusyBeaver: that doesn't mean they have to print it in different layers b_jonas: those are layers for editing shachaf: Why is writing state machines/iterators for traversing recursive structures and so on so hard? shachaf: What language features can help with it? Some form of coroutine, I suppose, but if you want something that operates in fixed space it seems pretty tricky. zzo38: kmc: I don't know why Magic: the Gathering has a special black layer for text than for art. But this is what I have read; that there are two black layers. cpressey: Welcome to the international center for esoteric programming Lagrangian design, development, and deployment! wib_jonas: Lagrangian_ arseniiv: Lagrangian_? arseniiv: Hamiltonian^ arseniiv: I counted all the ordinals, all of them! int-e: classy kmc: how many were there MTGBusyBeaver: Update on where we are at on the MTG max damage deck implementing The Waterfall Method with ~124 waterclocks to get Busy Beaver numbers MTGBusyBeaver: We have managed to allow us to iterate the Busy Beaver function. MTGBusyBeaver: ... A Busy Beaver number of times MTGBusyBeaver: so BB_2(X) is BB(BB(BB(...X) where there are BB(X) nested functions MTGBusyBeaver: We are currently getting to at least BB_6(X) and possibly to as much as BB_8(X) kmc: that's a very busy beaver indeed MTGBusyBeaver: proving TWM turing complete with 12 clocks (and a halting clock) improves the X, and possibly opens up other improvements, Even better is proving the "growing" or "flooding" variant of TWM. wib_jonas: why does python not have a command-line option to add directories to the module search path, like perl -I ? cpressey: Because Python programmers love typing the word PYTHONPATH. Taneb: (I still don't get how those MtG people are managing to iterate the busy beaver function) cpressey: Taneb: I think of it this way: there is an NTM that recognizes BB(BB(100)) and recognizes no larger finite numbers. cpressey: It recognizes smaller numbers, too - I think that's unavoidable. cpressey: But BB(BB(100)) is the largest finite number it recognizes. Taneb: So they're calculating a set with an upper bound of BB(BB(100))? cpressey: For a certain deck, there is a set of possible plays; the largest-damage play in this deck does a damage of BB(BB(100)). They don't *calculate* it. But it is a *possible* play of the deck. cpressey: If you were to somehow guess it, you could play it. You wouldn't *know* you guessed it. cpressey: Importantly: any larger guess would not be playable, with this deck. Taneb: Right, I think I understand now Taneb: They're making decks with extremely high but finite upper bounds on how much damage they can do cpressey: Right (and part of that is disallowing a deck if it can deal unbounded damage). cpressey: "100" is just picked out of the air. int-e used 10^100. I think the actual constant is limited by what you can encode in the deck. cpressey: But I'm not sure you couldn't also make a deck iterate BB multiple times, so you could maybe BB(BB(BB(BB(BB(6))))) - you probably don't need a large constant. Taneb: 01:47 MTGBusyBeaver: so BB_2(X) is BB(BB(BB(...X) where there are BB(X) nested functions Taneb: 01:50 MTGBusyBeaver: We are currently getting to at least BB_6(X) and possibly to as much as BB_8(X) wib_jonas: wait what_ wib_jonas: really? Taneb: I only have MTGBusyBeaver's word for it longname: 08:02 <+Lisbeth> Sorry N33R I just love seeing your reaction longname: it keeps accidentally copy/pasting arseniiv: how many were there => |Ord| many Cale: The value of BB(1919) is already independent of ZFC arseniiv: uh I may have answered “two many”, damn arseniiv: might* Cale: Quantifiers get really weird here. While it's obviously the case that given any natural number n, we can give a construction of a Turing machine that recognises numbers up to n, when we have no way of explicitly writing down the numeral for n, and instead it's a natural number that is defined by some formula, we immediately run into cases where constructing such a Turing machine is no longer so easy. Cale: So, while you can say "there is an NTM that recognizes BB(BB(100)) and recognizes no larger finite numbers", and in some sense it's obviously true Cale: There's something a bit weird about it, because we don't know (and it'll be undecidable for practically any system of mathematics we've devised) which number that is, and it doesn't seem easy to otherwise produce a machine that would have to fit the bill regardless. Cale: So if you wanted to write down the precise states of the machine in its entirety, even with an unlimited amount of paper, it would be beyond us and it's not even entirely clear that such a thing is well-defined. :D Cale: (because the values of busy beaver numbers become independent of axiomatic systems so quickly) cpressey: What gets me is, if you were to somehow (miraculously!) guess BB(BB(100)), the NTM would accept it, but you'd never know if the number you guessed was *actually* BB(BB(100)). The NTM that accepts BB(BB(100)) necessarily accepts smaller numbers too. How that necessity comes about definitely feels a little weird to me. Cale: cpressey: Well, if somehow we could prove in ZFC that a Turing machine with a concrete representation only accepted, for example, BB(1919), then there would additionally be a finite sequence of steps in ZFC explaining the evaluation of that Turing machine on a particular numeral n = S(S(S...(SZ)...) and thus deciding the value of BB(1919). But there is a Turing machine with 1919 states which unless ZFC is Cale: inconsistent, ZFC can't prove that it terminates, because the machine searches for contradictions in ZFC. Cale: At the same time, it's fine that ZFC proves that such a Turing machine exists in the sense of proving a sentence of the form (exists x. ...) because it doesn't necessarily tell us what that machine is. cpressey: "The NTM that accepts BB(BB(100)) necessarily accepts smaller numbers too" <-- After taking a walk, I think this is not quite right now. But it all makes my head spin. Taneb: You can definitely make a turing machine that accepts that number and only that number, if you happen to out-of-band know what that number happens to be cpressey: "Do you accept this number?" "Yes." "Do you accept any smaller numbers?" "No." "Do you accept any larger numbers?" "Beats me, pal." MTGBusyBeaver: Sorry to miss the earlier conversation about how we iterate the BB function Taneb: No worries, I'm satisfied with it now MTGBusyBeaver: Without going too deep into the technical details, the TM outputs a resource (life) that we can use to increase the efficiency of our conversion into more/bigger TMs MTGBusyBeaver: chaining these together lets us get higher order BB functions. wib_jonas: sure, but don't you run out of kinds of resources? M:tG doesn't offer that many easily usable types, and you need some for internal use by the turing machine, and some for the part before that generates the resource that limits the entries of the waterfall matrix wib_jonas: don't you get all sorts of conflicts where the cards of the deck can be used in ways other than you planned? MTGBusyBeaver: yes the number of resources is why we are at about BB_6 instead of higher. MTGBusyBeaver: The TM itself uses creatures and bans many instants MTGBusyBeaver: The setup is extremely limiting with the number of creatures and enchantments we can have total MTGBusyBeaver: (non aura enchantments) wib_jonas: ok, but BB_6 of a non-small number still sounds hard to attain to me, so I'll have to look up the details later MTGBusyBeaver: The TM construction uses 2 creature types per waterclock, so we are limited to 124 waterclock (plenty enough to implement a Universal TM) wib_jonas: yes, that part doesn't sound too limiting MTGBusyBeaver: and yes I plan on getting this properly written up so that interested parties dont have to comb through the 100+ page forum thread. wib_jonas: ah yes, that's always the plan. at least there's a forum thread and irc logs where I'll be able to see the main ideas MTGBusyBeaver: well I did it for beating ghram's number in standard last year wib_jonas: I don't even know yet how you'll get a waterclock from Door of Destinies... no wait, what enchantment was it? MTGBusyBeaver: `card-by-name rotlung reanimator HackEso: Rotlung Reanimator \ 2B \ Creature -- Zombie Cleric \ 2/2 \ Whenever Rotlung Reanimator or another Cleric dies, create a 2/2 black Zombie creature token. \ ONS-R wib_jonas: Coat of Arms MTGBusyBeaver: `card-by-name coat of arms HackEso: Coat of Arms \ 5 \ Artifact \ Each creature gets +1/+1 for each other creature on the battlefield that shares at least one creature type with it. (For example, if two Goblin Warriors and a Goblin Shaman are on the battlefield, each gets +2/+2.) \ EX-R, 7E-R, 8ED-R, 9ED-R, 10E-R, M10-R, DDS-R, H09-R wib_jonas: I do understand the Rotlung Reanimator construction, more or less MTGBusyBeaver: `card-by-name Dralnu's crusade HackEso: Dralnu's Crusade \ 1BR \ Enchantment \ Goblin creatures get +1/+1. \ All Goblins are black and are Zombies in addition to their other creature types. \ PS-R wib_jonas: there are three cards like Rotlung Reanimator, and they are very important for all these constructions MTGBusyBeaver: yeah we actually use bishop of wings but thats probably not in the DB wib_jonas: ok, then there's more than three wib_jonas: I knew of Rotlung Reanimator, Xathrid Necromancer, Hungry Lynx. MTGBusyBeaver: hungry lynx doesnt make tokens, it buffs tokens MTGBusyBeaver: it got replaced by coat of arms MTGBusyBeaver: to not be a triggered effect wib_jonas: doesn't matter, it still refers two different creature types that you can evolve wib_jonas: in an assymetric manner wib_jonas: that's sort of the limiting factor wib_jonas: we have very few cards that refer two creature types in such a way that we can use it for constructions where one creature type is the trigger and the other is the action and it's repeatable enough to run the program MTGBusyBeaver: yeah so the construction is a bunch of crusades saying all X' are X MTGBusyBeaver: and the bishops triggering on X dying to make a',b',c's MTGBusyBeaver: and remaking the one X wib_jonas: but if you still have a card like Bishop of Wings in, then I'm not too surprised wib_jonas: I assumed too much when you mentioned the Coat of Arms wib_jonas: I mean, I'm still surprised about BB_6 on a large number wib_jonas: but not about having a working universal computer wib_jonas: just surprised on having a deck with such a large damage limit but no infinite damage loop wib_jonas: without DMM's additional rules MTGBusyBeaver: and yes there are often unintended infinites that need to get patched out wib_jonas: you know that ais's original attempt to simulate StackFlow failed beacuse of too much freedom on putting triggers onto the stack, and we never found a fix for that, right? wib_jonas: that's why it scared me when you mentioned trigger stacking order about this construction wib_jonas: eventually ais invented The Waterfall Machine instead, and simulated that, so that problem got solved, but still MTGBusyBeaver: that's why coat of arms is perfect, it doesnt matter what order the tokens get made in MTGBusyBeaver: they will all be the same size MTGBusyBeaver: and will all die at the same time MTGBusyBeaver: we do need to force only our opponent to have bishops when the TM starts running MTGBusyBeaver: so that the arcbond trigger is forced to be at the bottom. wib_jonas: but I don't understand how Coat of Arms is used, or how you're using creature types wib_jonas: do you have two creature types per clock? and how do you use them? MTGBusyBeaver: yeah 2 perclock MTGBusyBeaver: we have the main creature type and a secondary type for each clock MTGBusyBeaver: Dralnu's crusade gets hacked to say that the primary type is also the secondary type MTGBusyBeaver: Bishops trigger on the primary type dying and make secondary types for the appropriate clocks and also remake the primary MTGBusyBeaver: Coat of arms causes the secondary creatures to buff the primary ones, keeping them at the proper distance from dead, as well as ensuring that any damage that kills the primary will also kill all of the secondaries. wib_jonas: so you only have one creature per primary creature type? wib_jonas: that might work wib_jonas: then only that one creature causes death triggers, but it takes its size from the lots of creatures of the secondary type wib_jonas: that's a new idea, I don't think I've seen it in the previous constructions, and it does explain Coat of Arms wib_jonas: that's a nice trick wib_jonas: there are a few cards that have such triggers built-in, I'll have to look at them if they're usable for something: MTGBusyBeaver: yeah, though we'd also like to know/prove if the variant without Dralnu's crusades is TC, there its just one creature type so the death triggers start getting multiplied and compoinding pretty quick wib_jonas: Mark of the Oni; Stenchskipper wib_jonas: maybe Ophiomancer but unlikely MTGBusyBeaver: (tentatively calling it Flooded Waterfall Machine, because it causes overflow) wib_jonas: Aysen Crusader wib_jonas: no, none of those will work easily because you can't bring them back wib_jonas: it has to be external like the Coat of Arms MTGBusyBeaver: and happen quickly, not waiting until end of turn, (we only get one) MTGBusyBeaver: (did I mention that this is all happening on turn 1?) wib_jonas: sure, that makes sense MTGBusyBeaver: anyway g2g be on later. wib_jonas: Alex Churchill et all's construction happens over (twice) as many turns as the underlying machine runs, but you can't do that if you want no infinite damage loops in your machine wib_jonas: s/all's/et al/ kspalaiologos: ,[>[-]<[->+<],]>[>+>+<<-]<-[>+<-----]>-->>[-[->>+<]>[<]<]>>[-<<++>>]<<<[->-<]+>[<->[-]][-]+>[-]<<[<.>>-]>[<<-.>>->] <- an interesting thingy in Brainfuck; around 100 byte isEven, requires uint8_t cells and 0 on EOF kspalaiologos: supports arbitrary length integers ais523: hmm, I've finally figured out why you can't create an infinite damage loop with the present construction ais523: it's set up so that you can't interrupt a damage loop at instant speed ais523: so either the loop ends naturally (e.g. with the opponent dying) in which case it isn't infinite ais523: or else, the loop /is/ infinite, but in that case the game ends in a draw before any damage is actually dealt, because it's infinite ais523: the important point is that you can't have any manual control over the amount of damage dealt once the loop is started ais523: this feels unsatisfyingly tautologous, it's "you can't create an infinite loop because you can't create an infinite loop" ais523: but it more boils down to "you can't create an arbitrarily large loop because you have no mechanism to specify an arbitrarily large number" ais523: it's rather counterintuitive to the normal idea of "no infinite combos", though; there are infinite combos, which can kill opponents from any amount of life, but you can't overkill via a chosen amount of life so it still fits the definition b_jonas: so you can't deal an unlimited amount of life and continue the match b_jonas: sort of like http://anselan.com/tutorial.html b_jonas: ais523: wait, can the second case, the case when you deal an unlimited amount of damage to the opponent but you do this so fast that he never loses the game, even happen? I don't think such a tight loop is possible, because the opponent would lose at state-based effect speed. b_jonas: or do you just mean an infinite loop that doesn't deal damage to the opponent? ais523: `card-by-name Arcbond HackEso: Arcbond \ 2R \ Instant \ Choose target creature. Whenever that creature is dealt damage this turn, it deals that much damage to each other creature and each player. \ FRF-R ais523: the specific example is two copies of Arcbond on creatures with lifelink and indestructible ais523: the loop does damage on every iteration, but the players gain life too, so it never actually exits ais523: this would be "infinite damage" except that the game rules prevent the loop happening, because it has no way to end ais523: (the actual combo doesn't IIRC involve lifelink at the moment, but it has an alternative method to gain the players life) b_jonas: oh wtf. why would Wizards think that's a good idea to print, even as a rare? b_jonas: ah, the players gain life b_jonas: tricky ais523: double arcbond is used for the steady decrement in the current busy beaver TWM construction b_jonas: and yes, the opponent gaining life explains why my reasoning is wrong b_jonas: ais523: I'm not surprised about constructions using them. I'm just surprised that they printed that in a standard-legal set. b_jonas: so what you mustn't put in these decks are combos that are unlimited and a player can choose how many times they execute it b_jonas: at least if there's any possibility that something from it can be converted to damage to the opponent arseniiv: was here a holy war about whether ++ and -- (and specifically, both prefix and postfix kinds of these) are such a good thing in a language? ais523: just putting this out there for people who are interested: I've made a draft of what a 10+halt-waterclock interpreter for a TC language in The Waterfall Model could look like: http://nethack4.org/pastebin/and-high-rise.txt b_jonas: arseniiv: not really a hot holy war, but python and ruby silently don't have them ais523: I haven't proved this TC, nor implemented the actual interpreter yet ais523: just described the basic design and what all the waterclocks are used for ais523: so it's quite possible there's a mistake ais523: but I thought I'd post it anyway ais523: it's almost certainly possible to do better than 10 but I thought I'd err on the side of producing something TC arseniiv: b_jonas: yeah Python is amidst sane ones here :) (for what I think) b_jonas: ais523: do you also have a suspected order of magnitude on the upper bound of the waterfall matrix elements, as a function of the program size in some other more well-known computational model? arseniiv: ais523: The Waterfall Model is nice b_jonas: I'd like to know how many exponentials you need ais523: b_jonas: two of the matrix exponents are probably single-exponential in the size of a 2-tag system that emulates the program MtGBusyBeaver: I am also curious to how big the initial setup needs to be ais523: err, actually 1, in this construction ais523: MtGBusyBeaver: a double-arrow number is enough, a single-arrow number might not be ais523: I wasn't quite sure how powerful the pre-BB layers would be ais523: if you can reconfigure the machine between iterations you can make do with small numbers by constructing a Waterfall Model program whose purpose is to output a large number rather than to be a UTM MtGBusyBeaver: they are less powerful for sure, but they are still layers MtGBusyBeaver: so they are roughly one arrow each b_jonas: ais523: yes, but how about a 150***3 or 150***4 number? I'd like to know how many exponentials you need. a double arrow number like 150***150 is likely enough. ais523: but I figured you'd probably find a way to create a double-arrow number ais523: b_jonas: well, the issue is that you're encoding the UTM you want to run as the digits of a number b_jonas: not many of even your esolanguages need more than a few levels of exponential to simulate something sane ais523: so it's exponential in the size of the UTM b_jonas: ais523: yes, there are no inputs, only program b_jonas: both in the turing machine you run and the waterfall program ais523: I believed I only used a double-exponential (2**(2**x)) once, and even in that situation it later turned out to be unnecessary b_jonas: that's why I asked as a function of the program size ais523: *I believe MtGBusyBeaver: we can probably make something like 5-7 arrows with just what we have b_jonas: ais523: though I guess in this case I have to ask this restricted to less than a hundred waterclocks, regardless of input program size, to be more relevant for M:tG ais523: b_jonas: this is a specific construction with 10 waterclocks ais523: + a halt waterclock ais523: that I haven't figured out the details of yet, but have a basic plan for b_jonas: MtGBusyBeaver: I also guess that just a double arrow number like 150***150 should be enough for most programs b_jonas: four arrows like you mentioned earlier should be more than enough ais523: the idea is to implement a version of High Rise in base 3 where carrying is disallowed, sequences 0 and 1 are empty, and sequence 2 alternates between a geometric progression and 0 ais523: that High Rise language, I'm about 99% confident has a fairly direct implementation of 2-tag MtGBusyBeaver: well once we run one BB we have access to that number so iterations really grow very fast ais523: via arranging the base of sequence 2's geometric progression so that the distances between pairs of 2s in the data string (with one intervening 2 between them) represent tag system elements b_jonas: MtGBusyBeaver: yes, the question is just how larege you need to start the bootstrapping arseniiv: . o O ( wait, only just now I noticed that zero arrows is the multiplication (and both can be denoted by an empty string), so arrow notation is even better than I thought! ) b_jonas: it almost certainly won't be a problem in your M:tG construction, but I'm still curious for reasons other than that construction ais523: and I'm also fairly confident that a The Waterfall Model program using the waterclock assignment I linked above can be made to implement it MtGBusyBeaver: checking the logs for it MtGBusyBeaver: http://nethack4.org/pastebin/and-high-rise.txt this link? b_jonas: ais523: that should work. and how many exponentials do you need to encode *to* a 2-tag system ais523: now, if you have a double-arrow startup, you could make do with a fixed program (and simply varying the initial waterclock sizes) by writing a UTM in 2-tag and hardcoding that ais523: MtGBusyBeaver: right ais523: MtGBusyBeaver: although it's just a thought dump rather than presented in a way that's easy to follow ais523: https://esolangs.org/wiki/High_Rise might help for some context ais523: I will probably end up writing out the explicit proofs and Waterfall Model machine at some point, but likely not in the next few days because I have a day job ais523: b_jonas: I don't know offhand how complex UTMs in 2-tag are b_jonas: ais523: I'm not asking for an UTM there, rather how large the tag system program is as a function of the program you're compiling from ais523: the problem with languages that are "well known" to be TC is that I often haven't proved them TC myself and thus don't have much of an intuitive idea of what the complexities are like b_jonas: ais523: for the Waterfall model, you need an UTM so that the program always fits in 150 or so waterclocks, because the M:tG construction can't handle more ais523: b_jonas: well, this is the usual trick when optimising universal machines ais523: you want your machine to be small, so you want as little code as possible, so much of the complexity is in the data b_jonas: yeah, I guess that's true b_jonas: if you only care about program size, not runtime (and we don't care about runtime here), then an UTM probably helps ais523: just look at, e.g., Three Star Programmer or the I/D machine MtGBusyBeaver: well we have to do shenanigans to get 124 clocks ais523: the interpreters are ridiculously simple and small, but writing a program to do anything is very complex because you have to code all the basic operations you want into the program itself MtGBusyBeaver: 12 and under requires much less restriction on the setu ais523: Three Star Programmer requires a complex one-time setup just to be able to write to specific memory addresses, for example, then needs to neutralise the extra copies of that setup on every future iteration because it has no way to run code only once MtGBusyBeaver: and it looks like 10 is going to be enough for TC-ness ais523: MtGBusyBeaver: that's why I was aiming for 12 as a target, it's nice to have a concrete number rather than continuously worry about if I'm wasting a waterclock somewhere ais523: the 10 is almost certainly improvable, but I can't immediately see how b_jonas: "no way to run code only once" => oh no... Countercall ais523: b_jonas: I think oerjan proved Countercall sub-TC? although I can't remember b_jonas: did he? ais523: it'll be in the IRC logs from around when Countercall was created MtGBusyBeaver: also reading the logs, there are actually two ways for the MTG program to halt MtGBusyBeaver: either by killing them MtGBusyBeaver: or by killing all of the other arcbonded creatures MtGBusyBeaver: the second one can be delayed in a BB method and we can prevent them from dying MtGBusyBeaver: so the creatures with arcbond act as the halting clock ais523: one nice thing about your construction is that I think it has no limit on "self-reset" values, right? ais523: a waterclock that zeroes can set itself to any value ais523: with the Hungry Lynx construction, I used Elesh Norn partly for the static +2/+2, giving me a self-reset max of 4, because I was worried it might not be high enough ais523: (although I think we subsequently discovered that a self-reset of 3 is enough) ais523: but large self-resets might be needed for the 10-waterclock construction MtGBusyBeaver: the +1/+1 from dralnu's crusade means we can't reset ourself smaller than 2 b_jonas: ais523: I'm not entirely sure, but I think oerjan only conjectured that Countercall is not TC, and proved something much weaker ais523: ah, OK ais523: MtGBusyBeaver: there's no issue with low self-resets b_jonas: at least that's what it seems from checking the logs again b_jonas: but it could be hiding anywhere ais523: you can always just increase all the other waterclocks to compensate MtGBusyBeaver: yeah, but it is worth noting ais523: right, definitely worth being aware of all your limitations MtGBusyBeaver: also if you need any of the "growing"/"flooding" type clocks those don't count towards the 12 limit ais523: right, I figured that out; it might be interesting to try to create a UTM with some number of those ais523: you'd want to store data using the length of time the program had been running ais523: even with the help of a few normal clocks, though, it'd be a pain to keep things under control MtGBusyBeaver: yeah it seems really chaotic MtGBusyBeaver: volatile b_jonas: ais523: anyway, it's useful to know that you will probably be able to prove that 10 or 12 clocks are enough b_jonas: for turing-completeness that is MtGBusyBeaver: well that 10 proof looks close so 12 is almost assured b_jonas: oh, since we're talking about M:tG, I wanted to advertise the play-by-post M:tG variant game that we're running: https://forums.giantitp.com/showthread.php?601011 MtGBusyBeaver: three card blind always interesting b_jonas: each round, players secretly choose a 3-card deck, then they're revealed, then each deck plays two games against each other deck, you don't lose for drawing from an empty library, all game information that would normally be hidden is known, we figure out the result of each game assuming perfect play, ais523: that sounds like 3-card blind so far ais523: I assume luck always goes against the player who put the luck card in their deck? MtGBusyBeaver: my first forum name was to participate in that on the old WotC MtGBusyBeaver: forums b_jonas: players get a point for a draw and three points for a match won, the player with the most points in that round wins the round and an internet point and right to boast. MtGBusyBeaver: IIRC luck was decided by the opponent b_jonas: ais523: yes, it's 3-card blind, and yes, random choices go against the person who put that card in their deck b_jonas: and it's vanishing, which means that the cards from the deck that won a round are banned from future rounds, except certain cards like basic lands and storage lands are immune to getting banned this way. b_jonas: and you aren't allowed to mulligan, despite that with the latest mulligan rule it would actually help you if you could b_jonas: but apparently the player base is conservative and not used to the new mulligan rule yet, so they don't want to upset the meta from that ais523: I can't think of many situations where you'd prefer to have a card in your deck than in your hand MtGBusyBeaver: miracles ais523: maybe if you're going second and the opponent is playing Thoughtseize or the like? ais523: oh yes, miracles, didn't think of that one but it's obvious now you said it b_jonas: ais523: that's sort of why the situation didn't come up before the current mulligan rule b_jonas: but read the new mulligan rule: ais523: you put cards from hand on the bottom of your library, so you choose which one you put there ais523: rather than it being random b_jonas: exactly b_jonas: so now it mostly protects you from Burning Inquiry and other discards b_jonas: well, it would b_jonas: not completely, but to a very large amount b_jonas: only we don't allow mulliganing, as a house rule, so nope ais523: well, you have a house rule to not lose by outdraw ais523: but that can happen during mulligans in regular MTG ais523: so it's a bit of a weird interaction ais523: (admittedly, it requires Shahrazad to be possible in a black-border game) b_jonas: nevertheless, we did manage to get strange metas from newly released broken cards, most notably the non-black-bordered small print run cards Impatient Iguana and Mirror Lotus b_jonas: s/Mirror Lotus/Mirrored Lotus/ ais523: `card-by-name mirrored lotus HackEso: No output. ais523: oh, wait, is this from Unsanctioned? b_jonas: *newly released* ais523: oh, Mystery Booster Playtest b_jonas: ais523: technically does not require Shahrazad anymore, because of Karn Liberated, but that won't come up in a real game, because you'll win before it'd happen b_jonas: ais523: yes ais523: that isn't a silver-bordered card, it has a black border and a "not for constructed play" footer b_jonas: ais523: I didn't say silver-bordered, I only said non-black-bordered b_jonas: also not gold bordered b_jonas: I'm not sure if it technically counts as having any border ais523: the border is black, though, with a few intrusions MtGBusyBeaver: oh the playtest cards b_jonas: but isn't that just the border of the card that the playtest sticker is sticked on? b_jonas: the properties of that card shouldn't matter b_jonas: even if you can somehow see them ais523: b_jonas: the underlying card is part of the card, as printed, though ais523: the sticker is also part of the card ais523: they're on the same print sheet and printed together b_jonas: that said, there probably won't be a judgement on this, because there are only three un-cards that care about whether a card is black-bordered ais523: so the underlying card is part of the card; most of its properties don't matter because there's a sticker over it, but I'd argue it determines the border color b_jonas: ais523: yes, but the underlying card shouldn't matter to determine characteristics b_jonas: well I don't know ais523: the sticker doesn't cover the border b_jonas: maybe they are black-bordered then ais523: it's a bit like host/augment, parts of the card are covered by the augment but those parts that aren't still count ais523: or Curse of the Fire Penguin ais523: `card-by-name curse of the fire penguin HackEso: Curse of the Fire Penguin \ 4RR \ Enchantment -- Aura \ Enchant creature \ Curse of the Fire Penguin consumes and confuses enchanted creature. \ UNH-R \ \ Curse of the Fire Penguin Creature \ 4RR \ Creature -- Penguin \ 6/5 \ Trample \ When this creature dies, return Curse of the Fire Penguin to the battlefield. \ UNH-R ais523: was wondering how the bot would represent that thing ais523: I guess that's a decent effort b_jonas: ais523: I don't think playtest stickers are like that. if they were, I'd make an Ulamog proxy such that the sticker happens to not cover the mana cost {W} ais523: b_jonas: the cards in question are not playtest stickers ais523: they're cards whose design /looks/ like a playtest sticker ais523: but the sticker and underlying card are part of the same printed card, and in particular the underlying card is always the same b_jonas: and admittedly they made a good job where the playtest sticker covers almost everything ais523: I think I'd take border color and frame color from the underlying card, but pinline color from the sticker b_jonas: ok, then they're black-bordered cards that aren't valid for tournaments ais523: that said, I'm not sure if M:tG will ever have a card that cares about pinline color MtGBusyBeaver: Form of the mulldrifter is clearly on a mulldrifter though ais523: even silver-bordered b_jonas: that category already exists I think, because I think some very low print run cards were printed as black bordered with square corners rather than gold bordered b_jonas: pinline color would be tricky because pre-Mirrodin cards don't have it b_jonas: MtGBusyBeaver: heh, indeed b_jonas: MtGBusyBeaver: and One with Death is on One with Nothing ais523: One with Death is actually a fairly good card in constructed, IIRC ais523: because there are a few combos that force your opponent to resolve one of your spells, and that's about the strongest possible payoff for one of those b_jonas: ais523: that sounds a bit hard to do. isn't the normal route just donating an Illusions of Grandeur or a Phage? MtGBusyBeaver: Hive Mind + pact of negation ais523: I think Hive Mind is the most common core of the combo ais523: `card-by-name Hive Mind HackEso: Hive Mind \ 5U \ Enchantment \ Whenever a player casts an instant or sorcery spell, each other player copies that spell. Each of those players may choose new targets for their copy. \ M10-R ais523: you don't even need anything else when using One With Death because the opponent's copy resolves first ais523: the normal kill in tournaments uses pacts in the hope that the opponent doesn't have the right color of mana to pay for them b_jonas: I played a Phage deck twice in the three card blind, got a second place from it once, and that one doesn't try to get the opponent to resolve Phage, just puts it to play under the opponent's control (as one path to win; the other is to just play it and attack with it) wib_jonas: fizzie: the log bot seems to have stopped yesterday wib_jonas: oh nice! wib_jonas: I created a stub at https://esolangs.org/wiki/Orca , and a few months later the person who created this esolang came along and edited more details onto the wiki wib_jonas: including a scan of a print magazine article reviewing the language (or its implementation) wib_jonas: I don't know if they came to the wiki because I wrote the stub, or on the other hand the stub was useless and they'd have written the wiki article anyway, though myname: there is much more to explain, though myname: explanations of examples would be lovely wib_jonas: myname: there's a link saying "Tutorial Video on Youtube" myname: yeah, if i don't forget i will watch that later wib_jonas: ah, the log bot is working now. and the previous one might have been false alarm. HackEso: 1/1:378) elliott: You have become the very thing you fought for! \ 1254) actually a small trebuchet onto the balcony might work myname: the youtube video is interesting myname: now i want to install it arseniiv: myname: there is a browser version also, the article says. Maybe it’s functional enough not to install locally (haven’t tried, but you’ve intrigued me into watching tutorial, maybe a bit later though) myname: i downloaded it, but i have no idea on how to create a midi device arseniiv: I think I had a thing somewhere that creates a virtual midi device but that’s a windows one arseniiv: that thing is interesting, though I’m not comfortable with that kind of music environments Phantom_Hoover: kmc, what level of smug prepper are you on right now kmc: hi there oerjan: unless some recent C standard broke it, or something. zzo38: What did they break this time? int-e: nothing. int-e: I hope this is correct: We have an unsinged int x, and a comparison x == -1. The -1 is of type int and gets promoted to unsigned int (turning into 0xFFFFFFFF on 32 bit platforms) before the comparison is made. int-e: shold probably give that a U suffix. But who cares. int-e: *should int-e: I'll own the "unsinged" though. int-e: `grwp unsigned HackEso: No output. int-e: `grwp unsinged HackEso: No output. oerjan: *MWAHAHAHA* int-e: Well, I guess it's officially demoted to singed now. int-e: If it had been a fireball it might have been an explicit cast. int-e: But I'm not sure torches can be interpreted in terms of the C standard. int-e: "32 bit platform" -- includes most 64 bit platforms as well, I should check the right terminology here. Surely there's something shorter than "having a 32 bit int type". int-e: is this another incArnation? oerjan: ask ais523 int-e: Well, I'm probably wrong. They're actually revisiting old pages and improving them. int-e: But I still find this pattern odd :) moony: per an earlier convo, decided to look into Orca moony: seems like a fun esolang moony: trying to get it to play a note rn moony: already like it a lot. Still haven't got a value to play, but it's fun moony: I feel like having a large screen gives me a unfair advantage in programming with it zzo38: I found a program with the comment: "This can't, but will, happen." myname: i like it myname: what is an "unfair advantage in programming"? zzo38: I don't know. cpressey: "The NTM that accepts BB(BB(100)) necessarily accepts smaller numbers too" <-- I think I see the problem with this now. s/The NTM/Any *constructible* NTM/ cpressey: You can posit an NTM that accepts only BB(BB(100)), and such an NTM exists in principle, much like how BB(BB(100)) itself exists in principle. But you can't construct (compute) it. wib_jonas: in the OOTS comic, word of god at "https://www.patreon.com/posts/answer-post-2020-34406298" says that Greg was *also* stuck in Durkon's body without being able to control it until Malack was destroyed. wib_jonas: so Greg was honest and truthful in "http://www.giantitp.com/comics/oots0939.html" that Belkar shouldn't incriminate him for how Malack's thrall drunk Belkar's blood; and Belkar's argument in "http://www.giantitp.com/comics/oots0957.html" was invalid. wib_jonas: well, that part of Belkar's argument. the rest still stands. cpressey: "Never use a higher-order solution when a first-order solution would suffice." cpressey: Also, always remember, automatic merge is a best effort heruistic. int-e: cpressey: How far is the author of that quote willing to push that idea? int-e: . o O ( unfold all your procedures. cut&paste code is the best code. embrace goto. ) cpressey: Didn't WvO [plan to] write a paper called "Abstraction considered harmful"? int-e: And "The NTM that accepts BB(BB(100))" obviously refers to the particular construction that we can actually write down without knowing anything about BB() except its definition. int-e: But I guess I'm counter-nitpicking. Surely not very useful, that is. wib_jonas: cpressey: I don't know, but some of my coworkers managed to internalize that principle and built large unmaintainable systems with it without the need for a paper int-e: mmm WvO int-e: cpressey: I'm not even disagreeing with that premise. int-e: cpressey: I think one should stop abstracting when it stops significantly compressing the code, in a weak and fuzzy sense that takes readability into account. int-e: (For "real" code.) int-e: But who's WvO. cpressey: I don't know who might've said those words before me (and I put them in quotes for a reason) but here's how far I'd push it: if you're thinking of writing a macro or a middleware or a metaclass please, please think hard about the class of problems it's supposed to solve and why it's the best way to solve them. cpressey: WvO = Wouter van Oortmerssen int-e: That doesn't ring a bell? cpressey: You don't know who Wouter van Oortmerssen is? wib_jonas: cpressey: yes, that version is more reasonable int-e: (But at least now I can $GOOGLE) cpressey: I feel old now int-e: cpressey: I'm not sure it's an age thing. It's probably more of a bubble phenomenon. cpressey: But... but... FALSE int-e: Also I'm bad with names. It's quite possible that I've encountered him before. I've certainly heard of False and also of Ardappel (at least in passing). int-e: Anyway, I could lament abstractions all day. Especially abstractions that solve a simple problem but are unreasonably complex (because they solve many more problems that nobody has). Favorites: Docker. Kubernetes. int-e: (I'm expecting some backlash for this :P Though maybe this is the right crowd to not get much of it.) int-e: cpressey: I forgot, do you use Haskell? int-e: cpressey: If so, what do you think of lens? cpressey: I use Haskell but I only use like 15% of it. I don't even use monads (if I can help it) so, no, I haven't used lenses. int-e: (lens is a bit of a puzzle to me. And I'm not sure whether I'm just not serious enough of a programmer to appreciate it, or whether it's *actually* a cult with no real gain. I suspect the former.) int-e: I do recall a blog post (I believe?) that said that lens is not idiomatic Haskell, and that certainly resonated with me. cpressey: I get the impression that if I had an actual need for reversible translations, lens would be useful, but, I could also believe there are lots of people who want translations to be reversible for what are mostly aesthetic purposes... int-e: I have broken into the level of complexity where I felt that monads (the RWS kind) pay off. int-e: And I use the list monad all the time. int-e: cpressey: The kind of deeply nested data structures that lens is (supposedly) good for just don't seem to come up in my code. int-e: And its vocabulary is just so overwhelming that I never really tried to learn any of it. cpressey: I'm more interested in recursion schemes. But, right now, even more interested in learning Coq and seeing what can be done with extraction. cpressey: I've worked through the exercises in the first 2 chapters of the first volme of https://softwarefoundations.cis.upenn.edu/ so far int-e: Do you use coqide or something else? wib_jonas: my recursion schemes are accidental infinite recursion bugs cpressey: I started out using jsCoq, then eventually figured out how to install CoqIDE, now using it instead int-e: wib_jonas: you could type them in a system with strong normalization int-e: (with obvious downsides) wib_jonas: int-e: even the simplest typesafe language would give an error (or at least warning) for that int-e: hais523 arseniiv: And its vocabulary is just so overwhelming that I never really tried to learn any of it. => I used lens in one unfinished interpreter project, I think the code was more or less nice but I haven’t used full potential of lens ever. Lens is mildly intriguing but I totally agree it’s so big and complex arseniiv: in that project, I used those assignment-like operations for State monadic code Taneb: I like lens, but I'm the one responsible for there being so many damn operators arseniiv: they were convenient Taneb: (because I needed <<+= for one thing so I added all the rest too) ais523: what does <<+= do? arseniiv: Taneb: oh now I know who to blame why I can’t let myself dive into them ais523: hmm, idea: a programming language that accepts every keyword, operator, control structure etc. from all other languages Taneb: ais523: "l <<+= n" adds the number n to the target of the lens l in the state, and returns the value before the addition was performed Taneb: (in a MonadState) ais523: hmm, oddly languages like C don't have a "postincrement-by" operator arseniiv: ais523: and all control structures which aren’t possibly implemented anywhere yet, like exitwhen Taneb: > runState (do _1 <<+= 3) (4, "hello") ais523: we can always create an esolang to have somewhere to put them lambdabot: (4,(7,"hello")) arseniiv: or a straightforward extension to exitwhen to allow it to represent arbitratry, albeit local, effects ais523: CLC-INTERCAL has a way to run a statement and it doesn't do anything until it becomes not an error, then it runs at that moment ais523: even though some other part of the code is executing ais523: I think, at least ais523: you can probably jury-rig an exitwhen out of that arseniiv: and returns the value before the addition was performed => mhmm could this kind of a behavior be abstracted out somehow? Taneb: :t (%%~) lambdabot: LensLike f s t a b -> (a -> f b) -> s -> f t ais523: arseniiv: Java uses the name "getAndUpdate" for that ais523: (Java doesn't have overloaded operators, just overloaded functions) Taneb: :t (<<%~) lambdabot: LensLike ((,) a) s t a b -> (a -> b) -> s -> (a, t) ais523: <<+= would be "getAndAdd" Taneb: moony: that is rather the point of this channel sometimes, I feel Taneb: Then you learn what's going on and we move on to something else, leaving you a little bit more enlightened in the mystical arts of the absolutely useless moony: I feel that esoteric languages present a learning opprotunity, and as such are not absolutely useless Taneb: It's not the language that is useless, but what it teaches Taneb: In this case the language is more or less Haskell moony: "ais523 | hmm, idea: a programming language that accepts every keyword, operator, control structure etc. from all other languages" moony: just make a language that can selfmodify, and implement that as a construct in itself moony: i.e. make a FORTH and build from there :P cpressey: "It's not the language that is useless, but what it teaches" I'll have to remember that one ais523: or a CLC-INTERCAL ais523: although I guess IACC is the better term for it ais523: (the language in which CLC-INTERCAL is implemented) ais523: IACC itself is implemented in Perl, also IACC ais523: there is a very complex bootstrapping process involved Taneb: cpressey: it's not what I say that's profound, but the thoughts it inspires moony: ais523: Pharo smalltalk would work too' moony: it's written in a subset of itself ais523: well, lots of languages are moony: I kinda wish there was a JIT language that was implemented in itself. So even the JITting logic would be JIT'd int-e: Is that entering Featherweight territory? ais523: most implementation schemes I thought of for Feather were something like that, although it was more like "alternating AOT compilation" ais523: maybe a JIT would work better, though ais523: (alternating AOT = when you alternate between compiling and running) Taneb: moony: isn't Pypy that? Taneb: (I don't know it very well though) moony: I think so? int-e: Alternating AOT is definitely a thing though... I believe both in the Smalltalk world and in the SML world, probably elsewhere as well. int-e: And it may extend to JIT (with the profiling-based hotspot optimization) as well. int-e: In my mental picture of this, the real trouble is to get rid of the bootstrapping parts eventually. cpressey: Alternating compilation: odd-numbered statements are interpreted, even-numbered statements are compiled olsner: (it's implementation-defined if statement numbering starts on 0 or 1) b_jonas: cpressey: or statements starting with PLEASE or PLEASE DO are compiled, statements starting with DO are interpreted int-e: PLEASE ABSTAIN FROM USING INTERCAL int-e: (Not serious, it's kind of fun. Though I haven't touched it in years...) b_jonas: int-e: no! don't do that, now we have to figure out how to do the equivalent of a REINSTATE from the C API int-e: b_jonas: pretend there was a line number and use a COME FROM statement? b_jonas: oh, that could work, yes int-e: Which is a fun way to effectively disable a statement... at least as long as the COME FROM is not ABSTAINED FROM. b_jonas: int-e: tcsh can run goto statements in an interactive shell, forwards and backwards across multiple separate input lines. you can goto back to lines that have already been executed immediately. this is such a nice eso feature that I don't understand why no other interactive interpreter supports it. b_jonas: allowing come from in an interactive interpreter would be impossible though. b_jonas: at least without a time machine. int-e: Yeah... and then things get paradoxical quickly int-e: but maybe many-world intercal would be a lot cooler than threaded intercal ais523: COME FROM [19:09] ais523: DO COME FROM [19:09] ais523: my IRC client has timestamps, it's OK int-e: Now you just have to deal with time zones. int-e: Though I guess that was UTC. ais523: well it's correct for my client, so I get to use INTERCAL, at least ais523: it's GMT I think, which is basically identical to UTC but with some minor technical difference int-e: Does it alternate between GMT and BST? int-e: . o O ( time will tell ) ais523: my client does, yes ais523: OK, so it seems that GMT is ambiguous with respect to how it handles leap seconds, but it's traditionally considered a proportion of a day ais523: so GMT times are supposed to smooth out leap seconds across the year ais523: and are apparently also affected by the tides (which influence the earth's rotation to some extent) ais523: also, once GMT had midday rather than midnight at time 0, but that was changed int-e: On computers you'll get something close to UTC anyway (maybe with smoothed leap seconds) ais523: but apparently you can write times like "December 31.5 GMT" ais523: which is a great idea, fractional days in dates is pretty obvious once you see it int-e: Though it's a bit odd to start at 1.0 and end at <32.0. b_jonas: ais523: oh yeah. http://www.madore.org/~david/weblog/d.2007-03-32.1434.html#d.2007-03-32.1434 is dated to a stylized nonexistent date ais523: March 32 2007 ais523: how did that happen? b_jonas: ais523: deliberate style thing ais523: I guess it's the same basic concept as 9690 September, 1993 b_jonas: David may have had to modify his blog engine to allow that for all I know int-e: What kind of format is this... '2020 M05 30' ais523: well it makes it clear what's the month and what's the day b_jonas: there's also http://www.madore.org/~david/weblog/d.2016-12-31.2414.html#d.2016-12-31.2414 which is dated to an existent date but its topic is a fictional date ais523: at least if you use a language where "month" starts with "m" b_jonas: well, more like the topic is what special event happens on a fictional day int-e: ais523: Oh that kind of makes sense. Still looks odd. ais523: perhaps it might be useful for unambiguity if you normally use a format that gives week numbers rather than month numbers ais523: (those normally put a W into the format to avoid people misinterpreting them as months) b_jonas: ais523: no, for week numbers you use b_jonas: `datei HackEso: 2020-03-12 19:29:19.493 +0000 UTC March 12 Thursday 2020-W11-4 b_jonas: 2020-W11-4 <--- that thing b_jonas: int-e: I think the date was written as 2020 MAY 30 first, then someone changed the MAY to 05 but wasn't precise enough with the corrector fluid b_jonas: or possibly 2020 MAI 30 int-e: b_jonas: It's how Firefox renders the expiration date of certificates for me in the "Security" tab of the "Page info" dialog... int-e: (And no, it's M for all months.) int-e: This may have something to do with it, of course: LC_TIME="POSIX" b_jonas: int-e: oh, that's an improvement. aren't those expiration dates stored in some insane format in the certificates, with the fields in some random order like %m%d%y%H%M%C%Z,%S ? ais523: huh, so some of the BBC radio stations send a time reference signal by radio on the hour most hours, consisting of five short beeps and one longer beep ais523: but they adjust for leap seconds by sending an additional short beep on the leap second ais523: that's kind-of clever, I should listen out for it next time there's a leap second b_jonas: ais523: nice int-e: Annoyingly, LC_TIME has no effect on this. But setting LANG to en_US changes the format. ais523: this also adjusts for negative leap seconds in the obvious way, but a negative leap second has never happened b_jonas: the five beeps from radio was how I set my watch long ago, when the internet didn't exist, I wore a watch, and cheap watches keep time so inaccurately that I had to set the time often b_jonas: the television also showed the time but that was not usable for setting an accurate clock because it had an impredictible amount of delay up to 5 seconds ais523: I wonder whether radio-controlled clocks use the BBC time signal, or some other time signal b_jonas: I think they use some other signal b_jonas: but I'm not quite sure b_jonas: I don't like radio controlled clocks ais523: in the UK there's a phone number you can dial for an accurate time signal spoken as words ais523: (humans have recorded a description for every time it can display, a computer replays the human speaking the time) ais523: but it's rarely useful nowadays now that NTP exists, and IIRC fairly expensive b_jonas: yes, that still exists in Hungary, and surprisingly it's a three digit phone number too b_jonas: it's useful because you can use it on dumb analog home phone lines when the electricity is out int-e: also, imagine you're blind and need to know the current time ais523: you would probably have a local speaking clock, wouldn't you? LKoen: I had a blind teacher who had a wristwatch LKoen: he would touch the hands of the watch to know the time b_jonas: yes, a local speaking clock on your mobile phone, because you don't want to pay for the telephone call every time int-e: Yes, there are devices for that. But that niche by itself should justify the 3 digit number :) ais523: I just tried running `date | espeak` but its default output format isn't great for speaking int-e: Even if it's not used much. int-e: b_jonas: Hah. Now imagine making that into a cloud service that calls that phone number once per minute, and replays the resulting recording to all the users of the app. int-e: . o O ( The sad part is that I can't rule out with certainty that this is being done. We build amazingly stupid things. ) b_jonas: there are some other potentially useful but rarely used services that used to be available on dumb phone lines but have been discontinued since. I imagine the speaking clock service is very cheap to run now so there's not much incentive to discontinue it ais523: `date '+%H:%M:, %A %-d  %Y' | espeak` HackEso: date: invalid date ‘'+%H:%M:\023, %A %-d \002 %Y' | espeak`’ ais523: err, my client didn't interpret that well, n b_jonas: the Wikimedia Commons Picture of the Year competition round 1 voting is on, but I'm too tired to look through the images now. I'll have to remember to do that some time before the voting ends on 2020-03-22 ais523: `quote privmsg #esoteric :date '+%H:%M:, %A %-d  %Y' | espeak HackEso: No output. ais523: date '+%H:%M:, %A %-d  %Y' | espeak ais523: there we go? LKoen: I don't know what's the command to make my computer speak ais523: apparently noy b_jonas: ais523: HackEso doesn't have a sound output ais523: b_jonas: I wasn't trying to run it ais523: just post it in IRC int-e: `date +%H:%M:%S, %A %-d %Y HackEso: 19:44:46, Thursday 12 2020 ais523: but apparently my client interprets escapes even in /quote LKoen: it has text-to-speech in system preferences / accessibility, but how to get it from terminal? ais523: date '+%H:%M:%S, %A %-d %B %Y' | espeak ais523: there we go ais523: `date '+%H:%M:%S, %A %-d %B %Y' HackEso: date: invalid date ‘'+%H:%M:%S, %A %-d %B %Y'’ ais523: `` date '+%H:%M:%S, %A %-d %B %Y' HackEso: 19:45:29, Thursday 12 March 2020 ais523: espeak is fairly good at pronouncing that format b_jonas: ais523: the actual speaking clock uses a different format including "half past" and "quarter to" and that sort of nonsense ais523: I didn't want an actual speaking clock-alike, just something I could tell the time from b_jonas: but we're slowly advancing towards using a proper positional number system b_jonas: so we can just use %H:%M:%S now b_jonas: and more importantly, almost nobody writes months in roman numerals now, so that's one less format for months that I have to deal with b_jonas: but I still hate how months are sometimes named and almost no calendar lists both the name and the number of months ais523: hmm, if you're going to have a d:m:y date format, an h:m:s time format is inconsistent ais523: it should be s:m:h for consistency b_jonas: I never know what number of month August and September are ais523: I wonder why times are consistently big-endian, whereas big-endian dates are rarely used outside technology b_jonas: ais523: no, I'm using %Y-%m-%d date format ais523: 8 and 9 respectively ais523: I was thinking of my espeak date format b_jonas: time formats are not consistently big endian, because "quarter to five" is not big endian, nor is "12 PM" b_jonas: or "12:10 PM" b_jonas: as for datetime formats, you know which website I hate the most about that? ais523: hmm, I just realised that middle-endianness is actually really common in the real world ais523: after seeing all these examples ais523: I hadn't thought of AM/PM as a digit but of course it is b_jonas: the OOTS forums, not because "Today, 07:25 PM" is a really stupid datetime format, but because of the hypocricy: it says " (ISO 8601)" after each such timestamp and links to some webpage on W3C about what date formats you should use. b_jonas: and no, I checked https://forums.giantitp.com/profile.php?do=editoptions , you can change the time zone, but you can't change to a saner datetime format ais523: the only forum where I customized the date/time format (beyond changing the timezone) was mafiascum.net, which appears to allow all of strftime ais523: that was because the default format didn't show the seconds and they were often important b_jonas: if you follow the "show printable version" of thread link, that timestamp changes to "2020-03-12, 07:25 PM" zzo38: Yes, some web forums allow that customization and some dont. zzo38: That is one thing how NNTP is better. While it uses one date/time format, the client can reformat it for display. b_jonas: zzo38: I could technically have a custom client for these forums too b_jonas: but the problem is that phpBB's HTML format changes so often that you'd have to replace half of your client every year b_jonas: I've parsed phpBB forums multiple times, they're never the same zzo38: b_jonas: Yes, or a GreaseMonkey script, or whatever, but that isn't that good (including for the reason you specify, and others) ais523: I think it's open source, isn't it? you could try to upstream an API b_jonas: ais523: you can't even deterministically parse the "Today" or "Yesterday" datetime format when it's near a day boundary ais523: does it give you a better format when you mouse-hover it? b_jonas: ais523: not the OOTS server, no. ais523: on Reddit the default time format is very imprecise but it gives you a proper datestamp in the title field b_jonas: some other websites do b_jonas: ais523: I don't need an "API", those are for sites that use so much crazy javascript for rendering that the normal web output can't be parsed, with the website possibly trying to add extra restrictive terms for anyone using the API; phpBB isn't like that, the HTML can be parsed just fine, almost everything is represented in there, b_jonas: it's just that they change the format every few years ais523: b_jonas: well the point of the API is also to be stable and machine-parsable, avoiding the need to scrape b_jonas: I prefer websites where there's no separate API, instead the HTML format has reliable classes and other extra info that isn't necessarily used for rendering the default view, but reliable for anything you want to do client-side b_jonas: ais523: an API, sure. those are fine. it's "API"s that I don't like. ais523: Wikipedia's pages are very scrapable and I've written a number of scripts to scrape them, yet it was nonetheless decided that an API would be useful and it is widely used ais523: simply because it's less likely to break as a consequence of unrelated changes b_jonas: ais523: yes, mediawiki has the api.php which is mostly well designed, better than most others b_jonas: it's not perfect, but good enough b_jonas: I have used the mediawiki API for reading a few times, not yet for writing zzo38: I think it should be made to use NNTP; if a message is received by NNTP, the headers should be kept (including message ID if the client specifies one), and then decide how to render for the web interface (it should render the message as plain text, unless there is a "Content-type: text/markdown" header, perhaps); and then also implement other way around. zzo38: The web interface should also need to display the message ID and connection information, even if JavaScript and CSS are both disabled. arseniiv: once I considered making changes to espeak’s data to make it pronounce Russian better, but I think that’s a hard task without some software to help with editing and analyzing all the stuff e. g. in which direction vowel parameters should be changed, to not try all possible values in vain int-e: . o O ( esqueak ) ais523: espeak is one of those programs which I would /expect/ to be almost impenetrable to someone not familiar with the code b_jonas: by the way, the IOCCC submission deadline is coming soon ais523: because it's trying to do something that, for most humans, would be poorly defined and very difficult to express rigorously ais523: oh, it's open again? ais523: I probably won't have a submission for this year arseniiv: and also this usually requires extending the dictionary with many rare wordforms ais523: I had a great idea a number of years ago but never had time to work on it ais523: (and another great idea a number of years ago which GregorR used to win) int-e: it's closing in a few days anyway b_jonas: I have a few IOCCC ideas, but most probably wouldn't work, and I didn't have the energy to work on the remaining ones b_jonas: if I felt like working on them, I wouldn't care about the deadline, because it's a recurring event now b_jonas: it doesn't matter much if I can only submit something two years later and it's judged two years after that b_jonas: well, it can matter a little b_jonas: but not too much arseniiv: ais523: ah, I didn’t mean the code, the language properties are defined in separate files ais523: arseniiv: those too arseniiv: yeah their format is quite complex I think b_jonas: arseniiv: it has to be. languages are complex if you want to text to speech them. zzo38: I have done some changes with espeak files before ais523: languages are complex full stop, apart from a few conlangs and computer languages arseniiv: and also there are the recordings for consonants, which also can require meddling with. Though the vowels may come first ais523: this is because information is complex ais523: and languages are about expressing information b_jonas: zzo38: are they domain-specific words, possibly acronyms, added to the dictionary with custom pronunciations arseniiv: yeah languages are a ton of complexity on so many levels zzo38: I did not do dictionary modification, just the speech modification arseniiv: though phonetics per se is not that complex, but even this one task, of representing an appropriate average phonetic invertory for a dialect, may be rendered hard to do, as in espeak b_jonas: "invertory" arseniiv: phonology is where things become more complex, and mapping from the written text, still more zzo38: Now I wonder if a file can be written for clock speech b_jonas: zzo38: there's an old IOCCC entry for that arseniiv: I’m almost jealous for Spanish where marking accent is for what I know mandatory arseniiv: haha I accidentally forgot to pay to my ISP, here now take my money and give me #esotetic back arseniiv: and this post hadn’t even gone through: arseniiv: and with languages having accent which jumps here and there and isn’t usually marked in the text, oh. A dictionary wouldn’t solve annotating accents as this may require parsing the actual syntax to make out which of homographic words each one is. Happily, espeak allows to mark accents manually, and happily, Russian has only one kind of accent and no tones arseniiv: "invertory" => hm? :) b_jonas: ¿„invertory„? int-e: arseniiv: you typoed that one first arseniiv: ww… why arseniiv: I’ll consult my dictionary one sec arseniiv: ah I see arseniiv: a sneaky one. I haven’t even noticed something’s wrong b_jonas: ais523: did you at least notice "#esotetic"? arseniiv: (but why ais52̈3) ais523: I wasn't paying attention to the channel ais523: I'm not, most of the time ais523: although I'll catch up on scrollback on occasion b_jonas: argh sorry b_jonas: I should stop tab-expanding the wrong person b_jonas: `? torgle HackEso: torgle? ¯\(°​_o)/¯ arseniiv: `? perl HackEso: Perl is the Perfect Emacs Rewriting Language arseniiv: makes sense arseniiv: someone has non-secret plans for 2020-04-01? b_jonas: arseniiv: I'll be reading the SIGBOVIK proceedings probably arseniiv: oh I forgot about that, I should make a bookmark arseniiv: but I meant, have you planned something impure, i. e. effectful int-e: `? plans HackEso: plans? ¯\(°​_o)/¯ arseniiv: for my part I’m still to have an idea from somewhere. Unfruitful. No flashy philosophic zen esolang ideas too. Completely unacceptable arseniiv: though maybe an esolang utilizing exitwhen only, but I’m not confident that’s possible arseniiv: and also obviously exitwhen is a local construct, and the corresponding global thing is simply algebraic effects (if one treats exitwhen in an extended sense) b_jonas: arseniiv: it's a Wednesday so I'll go to the swimming pool. how much do viruses survive in a chlorinated swimming pool? because infecting others or getting infected could be impure. b_jonas: wait, is it a wednesday? b_jonas: let me recheck arseniiv: hopefully that kind of impure wouldn’t happen to any of us! b_jonas: `datei 2020-04-01 HackEso: 2020-04-01 00:00:00.000 +0000 UTC April 1 Wednesday 2020-W14-3 b_jonas: yes, wednesday b_jonas: fungot, are you a mad scientist, called mad by the world? fungot: b_jonas: have to go pick up tomorrow without any pain at all and defer you to write the procedure f which i just can't ais523: b_jonas: I habituallly use two context characters when nickpinging someone b_jonas: WHOA I just found a useful feature in the UI of this phone b_jonas: still sucks in general, just slightly less than I thought b_jonas: ais523: um, what do you mean by "two context characters"? ais523: the first two characters ais523: sometimes you can nickping someone with just tab, but the IRC client needs to guess a lot in that case ais523: I just tried it out and it guessed "b_jonas:" which seems like a reasonable guess in the circumstances b_jonas: ah, tab expansion arseniiv: in the meantime I hypothesize a concatenative language with dynamic-typed effects and handlers *rofl* arseniiv: though I think I’m doing something wrong as I came to need an additional `unhandle` primitive to be able to represent rethrowing an exception, when treating throwing exceptions as a type of effect arseniiv: or else the code would try to handle an exception thrown in the handler by that same handler arseniiv: . o O ( tab expansion makes your tabs 8 characters wide ) arseniiv: tabstops* arseniiv: I thought I would be able to represent alg. datatypes and matching on their values via this effect framework, but it seems impossible. Their analogy is not of this kind arseniiv: hm or maybe with quasiquoting and making a set of data constructors separate from effect constructors one could go Scott on them: a data constructor DataX takes the corresponding number of values v1, …, vn from the stack and pushes a quote [ v1 … vn EffectX ]. Then a match construct pops a quote and evaluates it in the context of an effect handler corresponding to this data type. Hm but if one tries to handle a wrong value, it can be arseniiv: handled with some outer matching construct not intended to do so. Though that’s a pretty esotetic behaviour arseniiv: and again that typo arseniiv: do you like this? (not “esotetic” but data via effects) arseniiv: come to this, it may as well be called Esotetic Invertory arseniiv: this hypothetical language arseniiv: but I’m lazy to write many things needed for that to work at all: a basic stack language, quotes, quasiquoting, dictionary literals (maybe as a kind of macro), a couple of basic datatypes for making IO with, and also a symbol datatype too, for specifying effect names and constructors in handlers arseniiv: though one can do with integer indices for constructors, and then arrays instead of dictionaries. Hmm… b_jonas: arseniiv: modify an existing langauge then? arseniiv: b_jonas: it may be more tedious as I would need to understand how it works first arseniiv: I think I can minimize this thing sufficiently, though int-e: . o O ( I hate email ) oerjan: are the logs down arseniiv: suppose one can push not only a fresh quote by using `[ ... ]` but also push a function pointer by just writing `'word` or something. Then I can make effect types into plain words, and effect constructor will just push that “effect quote” and an additional index. A handler will be able first to compare the pointer to the one it’s supposed to handle, and if it’s OK, it’ll apply it to the constructor index and select the handling arseniiv: path based on the result arseniiv: all that requires way less primitives but it can be wrapped gracefully. An effect constructor wrapper would just place an effect quote and index on the stack and call an universal `effect` primitive which would find a nearest correct handler nearest to the top of the call stack, slice a continuation, push it under those two valuesm call the handler etc. etc. arseniiv: though I’d be more glad if I’ll come up with something neater than arbitrary values to represent effect constructors. Or I should reject constructors altogether and think of that value as an argument. Hm but that way one could make it to shift/reset and this is too far oerjan: hm i think my net connection is dead slow arseniiv: oerjan: at least alternative logs http://tunes.org/~nef/logs/esoteric/?C=M;O=D do work. The primary ones don’t load for me right now too, but approx. 2 hours ago they did oerjan: i got the tunes ais523: are the logs down ← stalker mode is still updating live ais523: but I can't load the page in a new tab ais523: so I think the logs are updating but the webserver hosting them is having issues ais523: 504, apparently int-e: (re: email, but it turns out that poking people via email is more effective than leaving them reports on github) arseniiv: int-e: what have you poke them with? int-e: pointy letters and rount letters int-e: round even fizzie: The web thing's been a little flaky occasionally. I was meant to debug it, but haven't managed to. fizzie: Should be back now. fizzie: ...or maybe not. fizzie: Well, at least it's started to hang up kind of consistently. fizzie: I think chances are there's some bug in the websocket-based stalker mode that manages to hang up the regular request processing, even though it's not supposed to. fizzie: When I restart it, it works for a bit, until there's a new stalker mode connection, and then it stops working again. fizzie: Might have something to do with there being two active stalkers at the same time, that's probably not something I actually tested. MTGBusyBeaver42: ais523: looking at your WiP proof for 10 waterclocks, I'm not familiar with the language you are implementing, but it looks like the idea is to use that language to implement a cyclic tag system and prove TC that way, ais523: 2-tag, but yes MTGBusyBeaver42: the eso wiki says not all variants of high rise are TC, what makes this implementation one of the TC ones? ais523: it's pretty easy to implement High Rise variants in The Waterfall Model, the hard part is to aim for a TC variant ais523: I erred on the side of implementing a more powerful variant to make almost certain that it's TC ais523: (you can implement a simpler variant that /might/ be TC with 8 waterclocks, I added two extra here to more or less totally make sure) ais523: to prove this particular Waterfall machine TC, you have to do two things, prove it implements that particular High Rise variant, and prove the variant TC ais523: it's only a WIP proof because I haven't done either half yet, I'm currently working on the second half (when I'm working on something that isn't my day job) MTGBusyBeaver42: yeah, it looks like implementing it in TWM isnt asking for anything TWM has a hard time doing ais523: it's the use of the E' waterclock that makes it almost certainly TC, its purpose is to outright skip every second 2 in the High Rise data string ais523: that gives us the one bit of state that you need to add to 1-tag to make it TC, so the only remaining hurdle is to prove that the rest of the language can implement 1-tag ais523: I may as well write my thoughts on that up here, too: the only thing that determines where new 2s are added in the data string is the distance between two (non-ignored) 2s scrolling off the data string ais523: the basic idea is to use two sorts of distances, small distances which also happen to be odd numbers, and large distances which also happen to be even numbers ais523: then small distances push the corresponding large distances onto the data string, large distances push a string of small distances onto the data string ais523: for the latter, you have a block of 1s in one half of the data string that matches up to the pattern you want (made of 1s) in the other half ais523: for the former, you have a sequence 101010101010101… in one half of the data string against a 1 in the other that adds up to a 2 only if you have a small (thus odd) distance ais523: and a few sporadic 1s in both halves which match up only when using a specific small distance ais523: err, I don't mean one half of the data string, I mean one half of the geometric sequence ais523: the ratio between successive elements is a very large power of 3 ais523: and the two halves are around 3^n and 3^(n+1) ais523: actually this proof uses 9 rather than 3 but it's the same principle ais523: I probably haven't explained this very well, it'll probably be better to write it up as an actual proof, or else write a compiler ais523: to make it more formal MTGBusyBeaver42: thanks, this did actually help, high-rise is wierd ais523: it's funny, in the early history of esolangs, people made things like INTERCAL and Malbolge which were weird on purpose, for the sake of weirdness ais523: and nowadays, when we look into the simplest, most fundamental available tarpits, we get just as much weirdness but it's naturally occurring MTGBusyBeaver42: Yeah I actually was looking at 3-star programmer randomly like a year ago ais523: there's a High Rise language in base 2, with carries allowed, which uses a blank sequence for 0 and a geometric (not interleaved-geometric) sequence for 1 which I'm genuinely not sure whether it's TC or not, it seems so close to being TC but I can't quite make it work MTGBusyBeaver42: so wierd for operations like that to be TC ais523: it gets easier once you realise that you can set things up so that some of the addresses are constants that always point to the same place, that effectively lets you get rid of stars when you don't want them ais523: it doesn't seem that ridiculous to me that a program based on ++*k, ++**k, ++***k can be TC for constant k ais523: only having increments available for writing and only having dereferences available for reading is painful, but by keeping regimented control over the whole of memory, it's not /that/ bad MTGBusyBeaver42: yeah, it is still bizarre to think about, more common operations like XOR are a lot easier to understand why. ais523: actually I think the hardest part with Three Star Programmer (and with the I/D machine) is that every statement has to increment /something/ so you need to find a lot of useless variables to throw your increments away in ais523: the TC proof for the I/D machine goes to the effort of setting up a queue that's never read from, just so that it can write to it the same way that it writes to the queue that it does use, thus vastly reducing the number of writes that need to be special-cased to sometimes write to somewhere useless ais523: this is a common trick in esoprogramming, I think, creating a dummy data structure that's just like your real, useful data structure so that you can throw away unwanted writes without using a conditional ais523: it was invented by Donald Knuth when he was programming in INTERCAL MTGBusyBeaver42: yeah I've definitely seen it before. MTGBusyBeaver42: anyway back to TWM->high-rise -> 2-tag -> TM MTGBusyBeaver42: what approximate ratio do we need in TWM to get an X state TM? ais523: let's see: a TWM program is defined by zeroing triggers and initial values ais523: and number of waterclocks ais523: the number of waterclocks is fixed ais523: the initial values could be small because 2-tag is good at bootstrapping itself ais523: (by "small" I mean in the 1000-10000 range, although you could add an additional waterclock if you needed them smaller) ais523: the zeroing triggers are mostly small but a few of them will be enormous, encoding the High Rise program that encodes the 2-tag program that encodes the TM MTGBusyBeaver42: Initial values are the same cost as the transitions ais523: right, that doesn't surprise me ais523: the size of the zeroing triggers will be a small multiple of the ratio of the High Rise geometric series times the base of High Rise geometric series, as a number ais523: but the 2-tag translation sees it as a string of digits ais523: which we'll be converting into a number using base 9 ais523: the length of the string, I suspect is roughly quadratic in the number of colors of the 2-tag system (the length of the productions obviously also matters but it's only linear in those, so the number of colors probably dominates) ais523: so we have a number of the form 9^(2^colors) ais523: this is larger than most reasonable one-arrow numbers, but smaller than almost all two-arrow numbers ais523: wait, no ais523: it's 9^(colors^2 * constant) which is much smaller ais523: it's large as one-arrow numbers go, but perhaps in reach, and thus easily dominated by two-arrow numbers ais523: the question is, how large of a 2-tag system do you need to implement a UTM ais523: and I don't know that part because the 2-tag-from-UTM translation isn't one that I've personally worked on MTGBusyBeaver42: Well there are some pretty small UTMs ais523: there's a paper covering this but it isn't publicly available ais523: so I can't just look up the complexity ais523: ofc, the simpler the UTM, the larger the encoding of its input you typically need ais523: so the busy beaver function for a given UTM will grow more slowly the simpler the UTM is (although not much more slowly because busy beaver functions grow faster than anything computable, so they're all pretty fast) MTGBusyBeaver42: wait we dont need a UTM, we can encode the TM busy beaver as the 2-tag program ais523: right; and in fact you could encode a Waterfall Model busy beaver which would probably be busier (it would have to be at least as busy) MTGBusyBeaver42: Yeah once we iterate the conversion doesn't particularly matter ais523: it's an interesting problem because you need to show that the UTM exists in order to prove that the busy beaver function grows quickly, but the busiest beaver probably won't use one at all ais523: hmm, or maybe it will? that's an interesting question in its own right ais523: (and one that's very hard to answer because finding busy beavers is almost impossible even for very small machines) ais523: hey, #esoteric regulars: if you have a language that is sub-TC, does that imply that finding busy beavers for it is computable? or can a language be sub-TC and yet have an uncomputable halting problem? MTGBusyBeaver42: Yeah, though how to define the size of a TWM busy beaver something like (Clocks, Max size) ais523: "number of Plant tokens required to set it up" MTGBusyBeaver42: if Flooding Waterfall Machines have real busy beavers then we can have a lot more freedom in the setup and probably get an extra layer of iterations too ais523: well, 10 waterclocks + a number of flooding clocks is going to give you much busier beavers, because you can write a UTM using the 10 waterclocks, and use the flooding clocks as additional storage that naturally tends to explode ais523: if all your waterclocks are flooding, I'm still unsure what happens ais523: I think the best way to think about the flooding version of the language is that the zeroing triggers actually run every cycle, but their effects don't become visible until their clock zeroes ais523: but that way of thinking about it hasn't helped me much with actually programming in the language :-D MTGBusyBeaver42: yeah, either way of thinking about it, there's not really a good way to encode the values, due to combining multiplication and addition/subtraction ais523: MTGBusyBeaver42: you should point out to the thread that Battletide Alchemist doesn't work if there's any way to have it on the field when setting up a double-Arcbond (even among your own creatures); you can use the optional damage prevention to make the loop run for a set, unlimited number of iterations ais523: like, the idea is that you make the opponent gain loop each iteration but don't use it yourself, set up a trivial infinite loop, run yourself out of life via choosing not to use Battletide Alchemist after a chosen number of iterations in order to deal a chosen amount of damage to the opponent ais523: although, I think it isn't being used anyway in the current versions zzo38: "There's a reason the comprehensive rules and errata for Magic: The Gathering is hundreds of pages long and reads like a federal tax code" I don't think so; the tax code is much more confusing. MTGBusyBeaver42: Well the score is actually how negative their life goes, not the total dealt. MTGBusyBeaver42: is the federal tax code TC? zzo38: I don't know, but that is independent. b_jonas: ais523: "can a language be sub-TC and yet have an uncomputable halting problem?" => certainly. just take a language that is like a normal TC language but the programs are encrypted with a random function that is very uncomputable in both directions. basically just take a random language that has no rules to it. b_jonas: like, the encryption isn't uncomputable because of some fancy complexity theory reason, only because by cardinality reasons most functions are uncomputable. Cale: Can an actually-implementable language be sub-TC and have an uncomputable halting problem? Cale: It seems likely to me Cale: Just saying "this thing has an uncomputable halting problem" doesn't feel like it should get you Turing completeness for free. Taneb: A program p in Language P does no computation and halts if and only if p doesn't halt Cale: That sounds more like a description of a language with no correct implementation. Cale: But I can see what you're trying to do :) Cale: Maybe just take a single Turing machine whose halting already can't be decided... say it searches for a proof of a contradiction in our metatheory, and then define a language with but a single program whose implementation is that machine. kritixilithos: maybe for a particular program of this language, it runs the input as a TM, and after the completion of execution (if it does halt), the program returns 0 Cale: Oh, that's a good one Cale: Just take any ordinary Turing complete language and make sure it can't produce any interesting output other than whether it terminated. Taneb: I think that might be too easy to argue it's not turing complete Taneb: It can semi-decide any semi-decidable language Cale: Well, it's supposed to not be Turing complete Cale: But have an uncomputable halting problem Cale: Of course, you might be able to also hope for a more practical language that could be used to solve a wider range of problems... Cale: Like, it should maybe contain a consistent type theory as a sublanguage. Taneb: I mean, argue it is turing complete Cale: Well, you can't solve most ordinary decision problems Cale: Like, the problem of whether the number on input is even Cale: You can only semi-decide it cpressey: Welcome to the international center for esoteric programming libation design, development, and deployment! wib_jonas: libation design cpressey: This theme and variations will continue until someone fixes the topic. HackEso: Go is a common irregular verbal game programming language invented by the Germanic Taneb tribes catching monsters in the strategic territories of East Asia. int-e: cpressey: so no incentive to change anything then HackEso: 3) that's where I got it rocket launch facility gift shop arseniiv: is there a nonstandard model of natural numbers in a Heyting arithmetic (this is an intuitionistic counterpart to Peano arithmetic) int-e: arseniiv: Just take any classical non-standard model? arseniiv: though I should first find and understand what is a model of an intuitionistic first-order theory arseniiv: int-e: yeah I thought that could be the case but there’s a strange lack of mentions of nonstandard models for the case so I thought maybe there’s something interesting going on wib_jonas: arseniiv: I think there's somethink like models in intuitionistic logic but it's much more complicated than ordinary models int-e: https://en.wikipedia.org/wiki/Kripke_semantics ... but this only seems necessary if you want to capture the lack of excluded middle in the semantics, which seems unnecessary if you just want a non-standard model. int-e: (Insofar as the term makes any sense at all... I mean, what is /the/ standard model anyway if you don't have the law of excluded middle?) arseniiv: int-e: for a formula A without quantifiers, in Heyting arithmetic it’s provable A ∨ ¬A, so in particular equality of terms is decidable so the usual standard model should suffice if elevated to an intuitionistic model (in a way I don’t know yet) arseniiv: (also it makes sense that in a constructive world there should be the standard natural numbers thing: where at all if not here? Though this isn’t an argument at all as I heard in type theories there are still issues analogous to nonstandard elements, but they aren’t as visible or petrifying) int-e: so does that make the standard model of natural numbers a non-standard model :P int-e: . o O ( And just to add to the fun, it could still not be non-standard. ) wib_jonas: int-e: *the* standard model is probaby still the classical logic one in which the exculded middle happens to hold, which intuitionistic logic still supports as a special case, or so this person with his traditional classical logic habits thinks cpressey: So we have lots of esolangs where we guess they are Turing-complete, and some where we even have informal proofs that they're TC. Do we have any where we have a formal, machine-checkable proof that it's TC? wib_jonas: cpressey: probably not machine-checkable, because nobody bothers to write those wib_jonas: but I can point to at least two books about theory of algorithms with formal proofs wib_jonas: cpressey: https://esolangs.org/wiki/Minsky_machine says "A proof of Turing-completeness is also given in the textbook ...", this is an important TC-ness theorem, because we often prove TC-ness by compiling Minsky machines (with a fixed number of counters) to an esolang wib_jonas: there are other similar classical computational models arseniiv: that reminds me I haven’t finished a Python module with utilities for working with generalized Minsky machines. Maybe I should start a C# module for that instead arseniiv: more like a reference implementation of the algorithm deciding whether an “algebraic type universe” is infinite and constructing a term and an unary function to realize Z and S int-e: fungot: have you stocked up on toilet paper? fungot: int-e: this is what you're trying to do, is to load it ais523: cpressey: the proofs have varying levels of formality, I'm not sure if any are machine-checkable wib_jonas: ah yes, cpressey summoned ais ais523: I have actually started writing TC proofs for a couple of esolangs in Agda, but abandoned them pretty early int-e: cpressey: This kind of stuff is really tedious, hard to justify the effort (unless you do it just for fun). ais523: it's not an easy sort of thing to translate into Agda ais523: I was considering joining wib_jonas: the problem is that a lot of these proofs are really hairy, because eg. when you want to simulate a RAM machine with a turing machine, you need to be able to move all symbols on the tape to insert a space and get back to that space and copy all these move routines multiple times in the turing machine program so that you can return to the previous wib_jonas: state, ais523: I felt we needed a fourth d word wib_jonas: and be able to store numbers on the tape, and copy or compare numbers between faraway palces in the tape, etc ais523: right, I was concentrating mostly on simulating one queue-based language with another ais523: but even that is hard to prove things about in Agda int-e: I have a formalization that Minsky Machines can implement recursive functions in Isabelle/HOL. That went fairly well, but it's a really nice programming model compared to many esolangs. int-e: For example it's very easy to compose Minsky machines; just rename the states apart and add a few glue transitions. wib_jonas: and then you want to prove that you can translate a structured program (with if blocks, while blocks, function definitions and non-recursive function calls) to a finite control structure (either with a state for each possible call stack in the original program, or by storing return addresses as data); wib_jonas: then you want to prove the same thing for programs with recursive calls too; etc int-e: (And I did not impose any bound on the number of registers) wib_jonas: and then that you can translate a language that has closures (like lambda expressions) to a language that doesn't have closures but has recursive calls wib_jonas: there's a step between, that you can simulate function pointers wib_jonas: there are a lot of "high-level" abstractions in real programming languages that you need to be able to prove that a simple computation model can simulate int-e: You have to consider that each of these "simple steps" probably involves defining an intermediate language, a semantics for it, a translation, and proofs that the translation preserves the semantics, all for something that we can handwave through in a couple of lines of text. int-e: (Because it's highly intuitive.) wib_jonas: you have to define the translation of the intermediate states, and prove that each step preserves that translation, translating the effect of a step of one machine to the effect of a step of the other machine wib_jonas: of course it's more likely multiple steps of one machine cpressey: Is #coq a moderated channel? I tried to ask a question there but got "Cannot send to nick/channel". ais523: you can try writing /mode #coq while you're there cpressey: afaict it's mode is [+cnt] and afaict that does not mean it's moderated ais523: that should give you full information on what channel modes might prevent you sending there ais523: hmm, perhaps you're banned from it (although you're unlikely to be banned personally, this could happen as a result of a ban that matches on characteristics other than nick/ident/IP) wib_jonas: cpressey: are you logged in to nickserv? a lot of channels ban everyone who isn't logged in to nickserv cpressey: int-e: Do you know anything about extraction in Coq? ais523: err, muted, not banned ais523: if you were banned you wouldn't be able to join it int-e: cpressey: nothing beyond the term cpressey: OK. It's a really simple question, I expect I already know the answer, it would be nice to have it confirmed but I'll just keep reading and I'll eventually know int-e: cpressey: Meaning I think I know what it is abstractly, but not how it's done. cpressey: int-e: Well, it's this: Coq is guaranteed to terminate. Are the programs extracted from Coq also guaranteed to terminate? cpressey: I think it's "yes" int-e: cpressey: I think so too (though you can mess up the setup) cpressey: Yeah, you can do some low-level things and mess it up. What I'm thinking though, is more like: you can't extract a Turing-complete interpreter from a Coq proof. You could extract a compiler, though. int-e: Uh, but there's a loophole there. int-e: Namely, codata int-e: (co)data Res a = Continue (Res a) | Return a int-e: Whatever that is in Coq, I haven't ventured there. cpressey: Is that a good loophole or a bad loophole cpressey: Or, to put it another way... int-e: It's a good one? cpressey: My understanding of it is bad though int-e: The corresponding function Res a -> a is still not total. cpressey: We can't extract an big-step interpreter, but we can extract a single-step interpreter that we can iterate as much or as little as we like? int-e: The corrsponding notion to termination for codata is productivity: The outermost constructor is produced in finite time. ais523: cpressey: my Agda interpreters for TC languages had a cycle limit and got around the no-nonprovably-halting-programs restriction that way ais523: you proved two languages were equivalent by proving that if one halted after some number of cycles, the other would also halt after some number of cycles ais523: (and vice versa) wib_jonas: makes sense cpressey: OK. There would also seem to be a stronger definition of equivalence, where their behaviours have some correspondence regardless of whether they halt or not. wib_jonas: cpressey: yes, and you almost certainly have to use such a stronger equivalence statement in the induction part of the proof of the weaker equivalence wib_jonas: cpressey: if you want to see formal a simulation proof, I have one written down in detail at http://www.madore.org/cgi-bin/comment.pl/showcomments?href=http%3a%2f%2fwww.madore.org%2f~david%2fweblog%2f2017-08.html%23d.2017-08-18.2460#comment-23792 , and this is an easy one, because the languages it talks about ((1) with arrays and (1)) are both wib_jonas: high-level and similar, so there's no messing about with low level details like how to copy a variable length string in a one-tape Turing machine wib_jonas: but even then I omit a lot of fiddly details that you'd have to expand on if you wanted a machine language proof cpressey: wib_jonas: OK, thanks. wib_jonas: and even there I'm lucky because (1) supports early function returns from inside loops, which simplifies the human-readable description a lot arseniiv: codata above reminded me about how I tried to invent what a coeffect should look like when I couldn’t sleep the day before. Does anybody knows if coeffects are at all considered somewhere? wib_jonas: is that the dual of when nsiders are effected? MTGBusyBeaver42: Regarding the non-TC halting problem I'd argue that forcing the output to be 0 is not enough to force something sub TC, as we also get how long it took to terminate. arseniiv: I thought something like: in an effectful computation, one can choose and use effect constructors as many times as they like, and in an effect handler, one “deconstructs” exactly one effect and they don’t choose which one, so a coeffectful computation may be where one uses a coeffect constructor just once and doesn’t choose which and a coeffect (co?)handler allows one to pick how many coeffects to eliminate. Looks like gibberish arseniiv: wib_jonas: hmmm? wib_jonas: arseniiv: sorry. stupid joke like the one about how cocoa is really just a wib_jonas: `? cocoa HackEso: A is a village in Norway. The BBC invented it by not understanding things on top of letters. arseniiv: wib_jonas: ah, “considers”. I thought it’s a special spelling of “insiders” but didn’t understand why arseniiv: though I don’t, still :D wib_jonas: no, that one is about Darth Sidious arseniiv: I like co jokes but hadn’t got this one ais523: arseniiv: IIRC coeffects are a real area of research that's quite busy ais523: I think I've met people who work on them ais523: they're the sort of thing that you use comonads to implement, just like you can use monads to implement effects ais523: and normally correspond to some sort of resource that is consumed by a computation arseniiv: ais523: do you know an expository paper or something? ais523: I was hoping there'd be a Wikipedia article but there isn't wib_jonas: .oO(if coeffects is a busy area with lots of researchers, then the coronavirus spreads there, so the ronavirus... nah, it doesn't work) arseniiv: (yeah I thought about comonads and resources/contexts but inside one head in the early morning it’s not that fruitful) arseniiv: I also imagined what it would do with a call stack but the result was of a mixed usefulness too ais523: arseniiv: try this: http://tomasp.net/blog/2014/why-coeffects-matter/ ais523: sorry for not answering earlier, I was reading it first to make sure that the author actually understood the subject, but he does ais523: (it strikes me that linking a random coeffect tutorial would have had the same risks as linking a random monad tutorial, but fewer people seem to write coeffect tutorials so they're probably of higher average quality) ais523: that said, the post does remind me a lot of a monad tutorial :-D MTGBusyBeaver42: "co-" is a common prefix, so I'm confident that constant concentrated comedy (contingent on contex of course) could confound/confuse the constituents in the conversation ais523: it's a running joke in #esoteric wib_jonas: what if you link to the Typeclassopedia instead, since that's known to be a good book? https://wiki.haskell.org/Typeclassopedia#Comonad ais523: wib_jonas: that doesn't explain much about why you'd use them wib_jonas: true, but it links to references about comonads wib_jonas: presumably those are pre-vetted MTGBusyBeaver42: I almost posted it like this: "-" is a mmon prefix, so I'm nfident that nstant ncentrated medy (ntingent on ntex of urse) uld nfound/nfuse the nstituents in the nversation ais523: you have to be careful, if comedy is confounding constituents, then nstituents should nfound medy ais523: because the co- relationship reverses subject and object ais523: it's like a mathematical version of the "in soviet russia" jokes ais523: (does this make Soviet Russia an untry?) MTGBusyBeaver42: fair point wib_jonas: it works well because "co" is like the thickest part of an English dictionary cpressey: "co" jokes are one thing, cojokes are quite another. kmc: ais523: :D arseniiv: sorry for not answering earlier, I was reading it first to make sure that the author actually understood the subject, but he does => thanks! No problem, as coincidentally I was busy away from here arseniiv: (it strikes me that linking a random coeffect tutorial would have had the same risks as linking a random monad tutorial, but fewer people seem to write coeffect tutorials so they're probably of higher average quality) => lol :D arseniiv: a cojoke is probably a thing several people say crying and an unsuspecting person nearby then feels witless ais523: I think a cojoke is something you say in the hope that someone else will cheer you up ais523: I'm not sure though zzo38: Does any web browser include the command to pause/rewind/fast-forward animations? ais523: I think it depends on the nature of the animations ais523: if they're based on a