00:01:07 figured as much. iirc two states with some fenangling makes you TC. 00:01:27 thaaaaanks~ 00:01:37 yeah, two states and sufficiently many symbols... hmm 00:01:39 right, but see ais523's language https://esolangs.org/wiki/StackFlow for when you have multiple tapes, and you choose which one to read from in the next step in each step 00:02:05 huh. that's interesting. 00:02:37 * imode wonders if a two-tape one-state TM could be TC... 00:02:41 -!- xkapastel has quit (Quit: Connection closed for inactivity). 00:02:55 ais523 is involved in https://en.wikipedia.org/wiki/Wolfram%27s_2-state_3-symbol_Turing_machine :P 00:03:10 naively you could store your current state in that alternate tape. 00:03:24 wait really? lmao. 00:03:31 imode: in that case you can certainly use one tape to store the state of an ordinary TM. 00:03:41 `? ais523 00:03:42 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. 00:03:52 useful information. 00:04:09 it's more useful than you may think... the "Smith" is accurate. 00:05:12 that two-tape one-state idea has me thinking about rewrite languages and CAs now.. 00:05:43 I can think of a good reason to have two active stacks for coroutines/asynchronous code. Is there ever a reason to have more than two? 00:06:12 hmm... define "active" 00:06:41 I mean something like, you pass two stack pointers to procedures in two registers, and it's part of the calling convention or something. 00:06:51 It's not really a precise word. 00:07:00 you could use one tape as a buffer to hold the CA state along with markers around the start end end of the state... and you could swap between them based on whether or not you read the marker. 00:07:16 if you have coroutines more than two of those may be involved in any particular computation and they may each want to do their own recursive stuff 00:07:41 Right, that's the kind of thing I was trying to avoid with the vague word "active". 00:08:13 It seems like the compiler/calling only ever has to know about two stacks, and the switching between them would be done in user code or something. 00:08:14 generator ( | transducer )* | consumer 00:08:39 "If you read X from tape A, write Y to tape B, move head A right.", "If you read X from tape B, write Y to tape A, move head B right." 00:08:46 Also does anyone actually implement coroutines using two stacks? 00:09:09 I tend to prefer cooperative multitasking and use state machines. 00:09:33 I'm talking about cooperative multitasking, and about ways of expressing these state machines nicely. 00:09:51 Well, they're not finite state machines, because there's a stack. But you could bound the size of the stack and prohibit recursion. 00:10:02 shachaf: why *two*? 00:10:33 Well, the usual implementation technique for coroutines involves only one stack. Right? 00:10:34 each coroutine should have its own stack, in principle... 00:10:42 And then the context switch switches to a new stack. 00:11:01 I don't know why you want to use two. 00:11:16 But then various things are stored in the coroutine stack that could just go on the main stack because they never yield. 00:11:42 Which means you get a lot of unnecessary cache misses, and also the stacks need to be bigger for no real reason. 00:12:30 You also get things like https://marcan.st/2017/12/debugging-an-evil-go-runtime-bug/ 00:12:49 Well if you like, Haskell does that... the "main" stack is almost exclusively for FFI; all the coroutine stacks are managed on the heap. 00:13:10 Yes, but if you're using Haskell you've already given up on performance. 00:13:51 No, not really. I've given up a factor of 3-10, depending on what I'm doing. Less when working with big integers. 00:14:15 If you think about the "optimal" way of writing an asynchronous task, it probably involves giving the task some fixed-size block of memory, and doing regular computation in the regular stack. 00:14:57 I want to approach something like that but with nicer code. 00:15:21 I've been trying to work on a small-scale network of automata that can communicate. 00:16:00 cooperative multitasking with round-robin scheduling is pretty much my go-to. instead of trying to cram code into an automata framework, I'd rather just use automata. 00:16:33 Automata can be awkward to write. 00:16:51 true, but so can assembly. 00:17:10 the difference is that automata are composable. state tables can be arbitrarily wired up. 00:17:33 That's why I want something which is neither automata nor assembly. 00:17:44 you can build simple machines from smaller state tables. 00:17:51 and then more complex machines from those simple machines. 00:18:32 So compile to state machines. I suspect that this is something people actually do in this context (for tightly coupled coroutines. not threads.) 00:18:58 exactly my thought. I'm planning on not breaking that thread of modeling, though. LSL from Second Life does some similar stuff. 00:19:19 meaning, every script is a state machine with some internal stuff. you have to model things in terms of states. 00:20:59 shachaf: I actually think that the principle of the Haskell analogy is sound, that is, to manage a coroutine local stack on a heap, possibly as a linked list. In many cases where you care about performance this will degenerate into doing a single allocation of a block that stores all the state for the whole lifetime of the coroutine invocation. 00:22:25 Sure, the thing GHC does is more or less reasonable at a high level. 00:22:27 To my mind the stack switching approach is mainly attractive because it doesn't require much (if any) compiler support. 00:22:44 If you had compiler support and also cared about performance, what would you do? 00:23:18 I think the answer would look a lot like having two stacks. Though maybe you should care about performance even more, prohibit recursion, and statically bound the size of the stack. 00:25:23 https://www.youtube.com/watch?v=j9tlJAqMV7U was inspiring in this context. 00:25:46 That's the new C++ thing? 00:26:09 yes, but it's more about the power of static analysis 00:26:20 I think that might be in the right direction though I haven't looked at the details. 00:26:42 LLVM has a coroutine thing that looked reasonable at a high level though the details might've been a bit weird. I don't remember anymore. 00:33:13 -!- tromp has joined. 00:34:44 Oh he gives a lot of talks. https://www.youtube.com/watch?v=_fu0gx-xseY may be the one that I actually watched? I don't recall precisely. 00:35:25 I can't watch a talk right now but I'll look later. 00:35:36 Is there a spoiler for why the overhead is negative? 00:37:28 -!- tromp has quit (Ping timeout: 246 seconds). 00:37:41 My vague idea was that the compiler gets more information from statically analysing the coroutines than it did from analysing a hand-written state machine. And it did its own state-machine, while preserving the improved static analysis information. 00:39:07 And I didn't think that the talk fully explained it. It does make for an amazing punchline though. ("We wrote high-level code, and the compiled result was better than our hand-optimized low-level (but still C++) code.") 00:40:46 As far as I recall, this falls into the category where the coroutines are tightly coupled, and only need finite state. 00:42:49 I was kind of wondering whether this kind of thing can be implemented well as a pretty straightforward macro, but I think the answer is no, you want compiler support to do it well. 00:43:57 In this one collection of language ideas I've been trying to figure out, stack memory allocation for variables is explicit, alloca-style. 00:44:06 shachaf: yeah, just "a pretty straightforward macro" is where all the downwards spirals to crazy preprocessing magic starts with 00:44:28 b_jonas: well, that's not straightforward anymore, is it hth 00:44:35 . o O ( just a simple recursively defined template ) 00:44:58 Something like "x := Var(int)", where x is a (const) pointer to a stack-allocated memory location. 00:45:11 Or "x := Var(0)" or whatever 00:46:45 But a thing like that isn't enough. 00:48:03 -!- oerjan has joined. 00:49:21 http://www.afjarvis.staff.shef.ac.uk/sudoku/sudoku2.cc features a template static inline void search(); 00:50:02 Which inspired the "just a simple recursively defined template" thought. 00:50:12 2005, so long ago... 00:50:30 I wish C++ had a way to pass an argument either at compile-time or at runtime. 00:51:19 For some reason C++ people love to do complicated recursive things with templates. 00:51:25 Rather than just, y'know, a for loop 00:52:43 -!- tromp has joined. 00:53:20 Well that particular thing generates up to 81 nested for loops. 00:53:53 But I'm not sure I would do it quite that way anymore. Probably not :) 00:54:37 i,i,i for (int i = 0; i < 81; i++) { printf("for (int i%d = 0; i%d < k; i%d++) {\n", i, i, i); } 00:54:56 right. 00:56:20 What language is good at doing things like that? Plus isn't lisp. 00:56:45 I'd happily use Haskell to generate C code. 00:56:58 I mean something slightly nicer than string generation. 00:57:10 More like quasiquoting, I guess? 00:57:20 quasiquoting but not lisp? i don't know any 00:57:23 But statically typed with a reasonable idea of eventually generating a compiled program. 00:57:33 i suppose metaocaml 00:57:38 -!- tromp has quit (Ping timeout: 268 seconds). 00:59:37 http://hackage.haskell.org/package/inline-c maybe? 01:00:01 Also it's the same language as the language you're generating code for. 01:00:35 -!- xkapastel has joined. 01:01:48 Template Haskell isn't all that bad. But it would defeat the purpose of generating nested loops for sudoku enumeration in the first place, which was performance. :P 01:02:10 counterpoint: template haskell is all that bad 01:02:18 http://hackage.haskell.org/package/haskell-src-meta 01:02:22 even ignoring performance 01:03:14 whatever 01:03:53 -!- Essadon has quit (Quit: Qutting). 01:04:01 true 01:04:40 Have you used the fancy variadic templates in C++11? 01:33:04 I guess more widespread coroutines might be useful for other uses. 01:33:28 Possibly nicer than using callbacks for a lot of things? 01:33:45 Say, a function that wants to request more memory from the caller mid-execution. Do people do things like that? 01:36:21 -!- Remavas[AFK] has changed nick to Remavas. 01:48:13 -!- Remavas has quit (Quit: Leaving). 01:51:14 shachaf: either it just returns an error telling how much memory it needs, like snprintf, or it calls an allocator callback 01:51:40 oh, you're asking about coroutine 01:51:44 um 01:52:11 -!- b_jonas has quit (Quit: leaving). 02:23:26 -!- tromp has joined. 02:27:33 -!- tromp has quit (Ping timeout: 245 seconds). 03:10:18 -!- xkapastel has quit (Quit: Connection closed for inactivity). 03:13:04 -!- tromp has joined. 03:15:38 a generalized version of finite automata would have transitions labeled with try/assett statements. 03:15:59 s/assett/assert 03:16:17 that sounds like a kind of scow generalization tdnh 03:16:32 scow? :P 03:16:42 ..boat? 03:17:17 -!- tromp has quit (Ping timeout: 246 seconds). 03:18:32 lemme elaborate: any given entry for a state table would look like `in if then and go to ` 03:18:59 I actually think someone's come up with that... abstract state machines or something. 03:27:51 -!- biscayne has joined. 03:34:42 -!- biscayne has left. 03:38:23 [[Bitwise Trance]] https://esolangs.org/w/index.php?diff=59789&oldid=59788 * Zzo38 * (-9) 03:49:40 I thought of one chess variant can be Thue-Morse chess, similar to Marseillais chess but you don't always get a extra turn. 03:49:49 (I don't know how well it is work) 03:50:30 Did you play this kind of chess? 04:12:44 [[Deadfish]] https://esolangs.org/w/index.php?diff=59790&oldid=59751 * Zzo38 * (-6) Colon include syntax in glasm 04:23:28 -!- FreeFull has quit. 04:49:11 https://esolangs.org/wiki/Vague <-- i think Cortex may be parodying certain other users... 04:50:15 oerjan: oh man, this is tg 05:00:56 -!- tromp has joined. 05:05:28 -!- tromp has quit (Ping timeout: 245 seconds). 05:09:27 [[Joke language list]] M https://esolangs.org/w/index.php?diff=59791&oldid=59782 * Oerjan * (+0) abcelmrs 05:16:53 [[Hurgusburgus]] M https://esolangs.org/w/index.php?diff=59792&oldid=58667 * BradensEsolangs * (-197) It's really a deque, I will continue tomorrow, don't touch 05:44:44 -!- ashirase_ has joined. 05:49:08 int-e: Watching the video now. Compared to this std::future lambda code, sure, I can see that coroutines would be faster. 05:49:31 Oh, he's writing it as a state machine, never mind. 05:55:43 -!- tromp has joined. 06:00:05 -!- tromp has quit (Ping timeout: 244 seconds). 06:20:08 int-e: I bet if you were comparing to C code rather than C++ code it would go the other way. 06:21:29 -!- oerjan has quit (Quit: Nite). 07:22:14 -!- tromp has joined. 07:26:36 -!- tromp has quit (Ping timeout: 250 seconds). 07:30:38 -!- liuqingyao has joined. 07:36:19 -!- liuqingyao has quit. 08:05:54 -!- tromp has joined. 09:18:24 -!- heroux has quit (Ping timeout: 250 seconds). 09:19:13 -!- heroux has joined. 09:23:01 -!- tromp has quit (Remote host closed the connection). 09:40:50 -!- arseniiv has joined. 09:43:56 -!- tromp has joined. 09:48:34 -!- Arsal has joined. 10:02:05 -!- Arsal1 has joined. 10:04:37 -!- ashirase_ has quit (Ping timeout: 268 seconds). 10:05:28 -!- Arsal has quit (Ping timeout: 245 seconds). 10:13:27 -!- ashirase has joined. 10:23:56 -!- Arsal1 has quit (Quit: Leaving). 10:47:34 -!- AnotherTest has joined. 10:49:42 shachaf: I'll make no bets. What I see is a potential to do better lifetime analysis of variables when starting out with coroutines (if you loop over { A; yield x; B; yield y; } then you know exactly which variables need to be preserved over the course of the first and second yield respectively. A C compiler would have to basically recover the coroutines to do that. That is, given a state... 10:49:48 ...machine, it has to figure out that after the basic block A, it will never reach A again without first reaching B. That's doable in theory, sure, but I doubt it's done. 11:16:36 -!- b_jonas has joined. 11:19:44 -!- imode has quit (Ping timeout: 250 seconds). 11:25:00 zzo38: I still think that any version that adds extra turns without serious limitations to chess probably makes it less interesting. In fact, the creators of chess knew this, yet wanted to speed up the early game, 11:25:38 so they didn't just add unlimited extra turns, but a restricted variant where you can move the same pawn forward twice from the starting position. 11:26:45 The problems include that pieces often attack too much of the board if you can take two moves with them; and that if you have two moves and the opponent then has one, then it's very easy to set up a double attack that the opponent can't defend. 12:47:38 -!- FreeFull has joined. 12:51:58 [[Talk:Bitwise Trance]] N https://esolangs.org/w/index.php?oldid=59793 * Plokmijnuhby * (+709) Created page with "== Turing completeness == I'm not sure this really is a Turing complete language. Sure, it works fine as an FSM, but you run into problems when you start storing data. You wil..." 13:00:57 [[Bitwise Trance]] https://esolangs.org/w/index.php?diff=59794&oldid=59789 * Plokmijnuhby * (+109) /* Empty program */ 13:04:10 -!- Sgeo__ has quit (Read error: Connection reset by peer). 13:04:36 -!- Sgeo__ has joined. 13:12:05 [[Talk:Bitwise Trance]] https://esolangs.org/w/index.php?diff=59795&oldid=59793 * Plokmijnuhby * (+183) /* Turing completeness */ 13:12:42 -!- Lord_of_Life has joined. 13:22:42 -!- Essadon has joined. 14:42:56 -!- xkapastel has joined. 15:11:57 [[Talk:Bitwise Trance]] https://esolangs.org/w/index.php?diff=59796&oldid=59795 * Ais523 * (+1610) bignum arithmetic seems impossible to directly implement; however you could probably get a program to copy itself in memory and expand the addresses in the process, despite not being able to address things much larger than itself 16:03:40 In the scifi future, when people won't have fridges and freezers that cool food, but will instead simply have a stasis box that sends food forwards in time to the next time the door is opened, 16:03:45 will ice cubes in drinks turn from something ordinary that people make at home to something you only have in restaurants and bars? 16:04:36 Or will people once again buy ice (or get it delivered to them in some futuristic way, whatever) and put it into the stasis box so it doesn't melt? 16:22:10 -!- oerjan has joined. 16:33:55 [[Hurgusburgus]] https://esolangs.org/w/index.php?diff=59797&oldid=59792 * BradensEsolangs * (-14) Done 17:07:48 Maybe people buying ice cubes might be less common then but some people might still have a use for it 17:12:41 -!- xkapastel has quit (Quit: Connection closed for inactivity). 17:37:16 You could certainly add restrictions into a chess variant that adds extra turns, and there are different ways to add how many extra turns 17:38:36 maybe extra turns are overpowered in every well-designed multiplayer tabletop game, because if they weren't, then it would have been designed with more moves allowed per turn to make it more fluid 17:44:12 YYes, it may be 17:47:41 * oerjan wanted to use Esolang:Sandbox, and suddenly realizes it is not linked from any menus 17:52:17 You can also just to enter the name directly (or add it to some menu if you prefer that) 18:00:31 I was wondering if I should modify the *list commands to know which strips have been listed, and refuse to list a strip again if it's been listed already 18:01:12 https://twitter.com/CreeepyJoe/status/1094656141173305344 18:01:59 int-e: Compilers already do the thing you're describing, don't they? 18:02:23 Maybe not for coroutines but for regular stack usage. 18:03:08 so I'd change olist to do like echo -n "http://www.giantitp.com/comics/oots$1.html"; if ! test "$1" || ! grep -qxFe "$1" var/list-ids/olist; then echo -n ": "; tail -n+3 "$0" ; else echo " was already listed"; exit 1; fi 18:03:24 except I'd test the shell script and fix all the errors 18:03:39 oh right, it also has to say echo "$1" > var/list-ids/olist somewhere 18:04:09 so it would like save the strip numbers to a file in the version control, and not ping people unless the strip is new 18:04:26 that way I wouldn't have to check the channel logs to tell if a strip has already been listed 18:04:32 this applies not only to olist, but also pbflist 18:04:36 and others 18:04:56 what does my honorable and learned friend fungot think about that idea? 18:04:56 b_jonas: this has not been very good, and i am? with putin! the european union at the time that is not without a cost, and the fact of the matter is of course is the best security that the nation is the party of not planning. may i, in the nicest. 18:07:09 `ls 18:07:10 ​:#,_@ \ a.out \ bin \ canary \ emoticons \ esobible \ etc \ evil \ 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 18:07:51 I don't like a commit on every list 18:08:07 Except, y'know, `list, where it's unavoidable 18:09:59 Maybe like that but keep the state in unversioned storage. 18:10:23 -!- oerjan has quit (Quit: Later). 18:12:55 I've considered doing that before. 18:14:09 shachaf: it could be on just certain lists 18:14:17 like olists and pbflists 18:14:24 and only on successful ones with an argument 18:14:32 no need to commit for a failed or a no-arg one 18:14:42 that would mean a three-way if but so what 18:15:15 fizzie: hmm 18:15:49 fizzie: how does unversioned state work these days? is it just persistent, but doesn't get reverted when the bot redoes a stateful command? 18:16:08 and lost whenever hackego is migrated to a new owner? 18:16:12 oh, by the way 18:16:44 Other possibility, using Netsubscribe, storing the state by adding objects into a Netsubscribe database; if the object ID is telling what is being notified then you can easily check for duplicates 18:16:49 do we have a list that's triggered whenever the previous host or maintainer of hackego gives up and the next one reincarnates it from a backup with a slightly different name? 18:17:05 zzo38: um, how would you put that in hackeso? 18:18:05 b_jonas: I don't think hackeso has that capability, although it would be possible to use with IRC. 18:18:32 But about hackeso, if you need to copy any unversioned files then I suppose you can do so before moving it 18:18:44 (if you have enough advance notice) 18:18:56 b_jonas: It's just a directory. It doesn't participate in the redo in any special way (so "mv" out from it is unsafe), and will be lost if you have to migrate without access to the previous instance. 18:20:23 -!- imode has joined. 18:24:07 Normally you could maintain independent backups in "wget -m" style (in parallel with cloning https://hack.esolangs.org/repo) but I had to turn off nginx "autoindex" option to avoid an information leak -- there's no way to turn off following symlinks for the generated index page, so it could be used to get sizes of files outside the directory. 18:34:04 fizzie: but wouldn't that mean that if I tried to store this status there, and the *list command is re-ran, then it would falsely assume that the strip has been listed already, and we'd lose pings? 18:34:46 fizzie: in theory, the bot could have a directory that is reverted when a command is redone, but that isn't version-controlled. I don't know if we'd want that though. 18:35:20 we might abuse it, in exactly the ways that the version repo is supposed to prevent 18:35:40 oh, that reminds me 18:36:02 fizzie: if I put a file in hgignore, would it also behave just like a file in /tmp ? 18:38:45 fizzie: also, if someone, uh, "accidentally" moved everything from /hackenv to /tmp in one command, then moved everything back but also set everything to be hgignored in the next command, in order to break version control, how quickly would people notice that? 18:38:58 if, say, someone did that in private message 18:45:33 -!- pikhq has quit (Ping timeout: 252 seconds). 18:46:16 -!- xkapastel has joined. 18:48:14 [[Fractran]] https://esolangs.org/w/index.php?diff=59798&oldid=57538 * Oerjan * (+1324) Something I thought of when pondering [[Echo Tag]]: Squeezing fraction size 18:54:59 b_jonas: In the normal case a *list command wouldn't ever re-run, because the only modifications it would do would be in tmp/, so there would be nothing to commit. There might be some race conditions though; with concurrent commands you might indeed lose some pings. 18:55:05 b_jonas: And .hgignore is read-only now. Or, rather, automatically reverted to its pristine state right before any commit, since it couldn't really be made read-only, since it's not a directory. 18:57:16 (I think I was looking for an option to disable .hgignore and instead configure tmp/ in .hg/hgrc instead, but didn't find one.) 18:58:12 (Also the non-versioned persistent storage is tmp/ aka /hackenv/tmp/, plain /tmp is not persistent across commands.) 18:59:18 -!- pikhq has joined. 19:04:51 fizzie: hmm 19:05:04 it's automatically reverted? nice 19:05:28 oh, hg doesn't have that? doesn't it have a way to, like, tell what the name of that file is? Istr git had some such config 19:06:22 It has a way to set up additional ignore files. 19:06:42 From the documentation, it didn't seem like there was a way to disable the default .hgignore though. 19:06:46 ok 19:06:47 Didn't actually try this. 19:06:58 I don't know hg really 19:07:24 hackeso is where I used it the most, plus I've used it to clone a few other repos from the internet where people distribute some files only that way 19:07:54 Under the [ui] section, there's a config key 'ignore': "A file to read per-user ignore patterns from. This file should be in the same format as a repository-wide .hgignore file. Filenames are relative to the repository root. This option supports hook syntax, so if you want to specify multiple ignore files, you can do so by setting something like ignore.other = ~/.hgignore2." 19:08:13 The "as a repository-wide .hgignore file" sounded like it meant that's always there. 19:08:46 Although it's possible setting ui.ignore in the per-repository .hgrc would actually control that. 19:08:51 fizzie: but does hg at least not allow .hgignore files in any directory? 19:09:00 only at the repo top, right? 19:09:02 one per repo 19:09:47 Yes, only at the repository root. If you want to put a .hgignore in a subdirectory, the documentation recommends "subinclude"ing it in the root .hgignore. 19:09:59 ok 19:10:33 Still, reverting the .hgignore file is a bit messy, it needs to manually remove it first if someone replaces it with a directory tree. 19:10:35 makes sense, I guess. that you can put one anywhere is mostly useful for repos where you often do partial checkouts, eg. in cvs and svn 19:11:31 yeah, recursively (chmod then remove) 19:13:57 I wonder what happened if someone made tmp a symlink to . 19:15:06 (That kind of questions are exactly why we can't have nice things.) 19:15:29 I don't think it would do anything really 19:15:34 hg wouldn't even notice where it points 19:17:48 fizzie: I know, I've ran bots too, but I think me just asking won't make it worse 19:24:47 FWIW, it's still on the TODO list (though not up top) to allow (whitelisted, proxied) HTTP requests out of HackEso. It was possible at HackEgo at some point, though not for the last years. 19:26:38 You may wish to later add other protocols too, although that would also need whitelisted too. 19:29:49 fizzie: is hackeso intended to be a bot strictly for this channel, or is it on the todo list to allow it to join other channels where it's invited? 19:31:21 I don't know. It's pretty channel-agnostic, I know HackEgo was on more than one channel. 19:31:42 Feels like it should be only on channels I'm on, though, just to keep an eye on it. 19:32:00 And of course the repo and such are under the .esolangs.org domain. 19:32:13 So the answer is probably "don't know". 19:32:20 ok 19:32:42 hmm, I guess technically I could just make a proxy bot that forwards between a channel and HackEso private message both ways 19:49:28 At one point I was writing a "z80bot", which was to be a somewhat hackbot-style thing, except using an (emulated) Z80 core, with a system call API to a versioned filesystem (read/write-style, but also to map "ROM" pages from), and internet, and whatever else wouldn't be practical to implement internally. 19:50:18 I think I got that about three-quarters done, with the (homegrown) Z80 emulator, the filesystem bits, and yet another IRC client library done, before abandoing it. 19:51:09 Don't think very many people would've spent time using it though. It's a bit bigger barrier to entry than with hackbot. 19:51:25 that sounds fun 19:51:30 would it run CP/M? 19:52:06 fizzie: hmm, how much RAM? 19:52:26 I guess it might not matter since it has access to a file system 19:52:31 or TI-OS? 19:52:47 I'm sure some porting would be necessary, since it wouldn't have any of the expected hardware by those systems. 19:52:56 the hard part with these bots is always figuring out what it's allowed to do on IRC by users' commands 19:53:46 I think I was intending it to have just the directly addressable 64k of RAM, with the top one quarter (C000..FFFF) mappable as a ROM page from the filesystem. 19:54:09 hmm 19:54:20 z80 has a separate IO address space, right 19:54:53 fizzie: what kind of interface would it use for accessing the filesystem? a "modern" unix/dos2 one with open, close, read, write calls? 19:55:09 b_jonas: Yes, it has a separate I/O space, though only with 8 bits of addressing. 19:55:31 s/dos2/dos3/ 19:56:00 The syscall API had the usual read/write/seek calls, so you could access large files with (relative) ease. 19:56:24 (With both 16- and 32-bit variants for seek/tell.) 19:56:55 no 64-bit variants? 19:57:15 Well, no. I would've had some sort of quota for it. 19:57:16 -!- FreeFull has quit. 19:59:03 that would hit you back ten years later when most of the utilities developed up to that time can only deal with 32-bit files, and there's no sane way to recompile them to handle 64-bit files. like what's happend in unix. 19:59:41 and then again when 2038 is nearing and you still have programs storing expoch second timestamps in int32_t 19:59:47 -!- FreeFull has joined. 20:00:06 no problem 20:00:07 robots will kill us all before then 20:00:12 -!- shikhin has quit (Ping timeout: 250 seconds). 20:00:20 like we need robots for doing that 20:00:43 then the robots using the bot will curse you for having made such a stupid design 20:00:46 -!- shikhin has joined. 20:00:50 What I think I have read is that 64-bit Linux uses 64-bit timestamps, but, the filesystem does not support 64-bit timestamps. 20:01:17 zzo38: yes, that's more or less the current state, but it used to be worse 20:01:35 also we're mostly past the 32 bit file offset problem too 20:01:38 shachaf: I had a quick look at the LLVM optimization passes overview at https://llvm.org/docs/Passes.html and none of that sounds like it would be able to reconstruct the coroutine basic blocks (and their sequencing, which would then enable liveness analysis on that level) from a state machine. 20:01:49 but both of them caused a lot of trouble some time ago 20:02:08 obviously it's never anything as simple as "unix uses ... timestamps" 20:02:17 there are like a hundred different ways things on unix use timestamps 20:02:23 different apis and stuff 20:02:27 How to upgrade the filesystem to one that does support 64-bit timestamps? I do not need it right now, but maybe in eighteen years, will help 20:02:38 ICBMs with nuclear warheads are on the doomsday menu again. 20:02:44 again? 20:02:46 they always were 20:03:04 zzo38: for the file system, I'm more afraid of when the FAT timestamps run out. there still seems to be no plan to fix that, and there's no obvious way to fix it 20:03:10 I personally do not understand how anyone who works on nuclear weapons lives with themself 20:03:12 Oh sure but they were not advertised as such :P 20:03:19 You'd have to ask the chef. 20:03:26 When do the FAT timestamps run out? 20:03:27 mostly because windows 95 OSR2 was so reckless as to use up all bytes in the 32 byte directory entries, so there's no place to extend them now 20:03:36 zzo38: 2028-01-01 I think 20:03:39 in local time 20:03:47 that's the mtime, but nobody cares about the other two timestamps 20:03:49 that goes double for things like Project Pluto which were explicitly designed to kill as many civilians as possible and poison the earth 20:04:32 basically it started as a 7-bit year field within a 16-bit date field, and that 7-bit year field stores the date as an integer giving a two digit year 20:04:47 what about ntfs 20:05:19 Were the FAT timestamps those with the odd (or, rather, even) two-second accuracy? 20:05:39 perhaps we can change all the fs drivers to treat them rolling over, so 0 would get interpreted as 2028 instead of 1900 20:05:54 fizzie: yes, because the time of day is also a 16-bit field 20:06:05 and there's more than 65536 seconds in a day 20:06:23 so they made it 5 bits for the hour, 6 bits for the minute, 5 bits for half of the second 20:07:27 optimized for speed on the 8088 obviously 20:08:54 and I think it might be DOS 2 after all, not DOS 3, that started to have unix-like read/write calls after all 20:35:16 int-e: No, not from a state machine, I mean that optimization already exists for stack allocation in non-coroutine code. 20:35:32 I imagine you can do it by hand if you really cared, though, instead of using a struct. 20:35:43 how did file IO work before that 20:36:48 shachaf: Yes that exists but I'm not interested in that. I'm interested in a mechanism that would help a compiler starting from coroutines compared to a compiler that is facing a manually crafted corresponding state machine. 20:37:01 I think old DOS uses file control blocks for file I/O 20:37:19 Oh, sure. 20:37:52 I mean, I think you can still craft a state machine manually that would be as good. 20:38:15 iopl 20:38:55 Each state could have its own memory layout and you'd do the liveness analysis and so on yourself. Or something. 20:40:10 kmc: DOS1 had inherited the kind of IO from CP/M where (1) there's no close, the file descriptor is a fixed size structure, and more importantly, (2) read and write work in fixed size blocks, you can't choose how many bytes to read and write, (3) file size is tracked by the fs in block granularity, not byte granularity 20:40:43 and that's on a floppy disk, so it's less strange than the tape IO, which has variable sized blocks 20:40:58 well, it depends 20:41:05 it can have fixed sized blocks on tape too 20:41:30 oh, and there were no directories, or rather, only one per drive 20:41:37 mhm 20:42:26 that's why text files in DOS used to have an extra "EOF" byte at the end, so they can be read by very old programs that use the CP/M calls and wouldn't know how many characters there are in the last sector 20:42:33 I had a computer that ran what I think was an old version of DOS, or similar 20:42:37 the TRS-80 Model 100 20:42:43 (which has nothing to do with the other trash-80s) 20:42:48 such a cool machine 20:44:06 `? ^Z 20:44:07 ​^Z? ¯\(°​_o)/¯ 20:45:04 oh, one more difference 20:45:26 a laptop from 1983 that's *actually portable*, all solid state storage, indestructable, instant boot, 16 hours battery life 20:45:55 with the unix-like interface, DOS introduced the unix idea of how programs can use the console device with the same read/write calls as you use for disk files 20:45:59 and printers as well 20:46:16 and a good keyboard 20:46:19 or the serial console 20:46:35 of course, in terms of CPU and RAM it was quite underpowered compared to desktops of the day and the luggables 20:46:46 and you couldn't run real business software 20:46:59 but still very good at certain niches, such as traveling journalists 20:47:16 why would a traveling journalist need a computer? 20:47:43 you could write text with the built in word processor and then send it back to the home office at 300 baud, using an acoustic coupler in your hotel room :P 20:47:50 ah! 20:48:28 yeah, that makes sense 20:49:03 hah "luggable" 20:49:16 . o O ( better bring a cart? :) ) 20:49:19 it had a basic BASIC too, you could do cool things like scripting the terminal program to log you in automatically, etc 20:49:42 also I guess they envisioned it for portable POS use b/c it has a barcode reader, you could make your own POS software in BASIC i suppose 20:50:01 I'm not sure if it had expansion ROMs for other programs 20:50:43 iirc it did have PEEK and POKE, so you could probably have additional native code programs in RAM, and load them from the tape port with a BASIC stub 20:51:04 however the RAM is limited and is also the only built-in 'nonvolatile' storage (via backup battery) 20:51:17 that's why it had instant on, like a graphing calculator 20:51:57 it was already obsolete by the time I was born, but I had a hand-me-down and got many hours of fun out of it 20:52:02 I can still remember how the leather case smelled 20:52:14 funny how smells stay with you for life. 20:52:47 anyway, I loaded / saved programs into the Windows 95 sound recorder program, using the tape cable 20:53:06 heh 20:53:12 that sounds wasteful 20:53:20 but it makes sense 20:53:35 didn't you have a proper casette recorder? 20:53:41 well, less wasteful than a real casette recorder 20:53:47 what? 20:53:47 although that'd be more authentic 20:53:54 i mean, i didn't have to buy tapes :P 20:53:56 how is it less wasteful? 20:54:00 i might have been able to do it on my dad's boombox 20:54:04 it stores the wave forms uncompressed 20:54:08 using a bunch of transistors you have sitting around anyway is not really waste 20:54:09 you can't store much on a disk that way 20:54:11 that is true 20:54:20 however i didn't have that many programs 20:54:20 a few casettes would store more 20:54:24 and each one was < 30 seconds of audio 20:54:27 probably just one 20:54:30 also I bet you could dither them to 8 bits 20:54:32 didn't try tho 20:54:38 anyway even back then I had a 1 GB hard drive 20:54:57 to get the cable, my dad took me to radio shack -- this would have been mid to late 90s -- and they were shocked that someone was there to buy an accessory for a 15 year old computer, and even more shocked that they actually had one in the back room, in decaying packaging 20:54:59 sure, but even with one gigabyte of hard drive 20:55:03 Do you have a program that can convert the sound files to/from a more compact recording of the programs? 20:55:06 . o O ( did it come on a truck? ) 20:55:06 that's not more than a few recordable tapes 20:55:12 zzo38: no, but it would probably be pretty easy to make 20:55:13 I mean, you can only record an hour or two on that 20:55:23 I had more recordable casettes than that when I was a child 20:55:35 oh mid to late 90s... fine 20:56:18 but i did much more BASIC programming on TI calcs 20:56:19 IIRC around that time HDD sizes doubled every two years. 20:56:40 because I could easily take it to school, and mess around in math class while pretending to work on the material I'd already finished :P 20:56:43 int-e: I'd believe it 20:56:51 the TI calculators were also more capable in many ways 20:56:59 kmc: yeah 21:05:47 -!- xkapastel has quit (Quit: Connection closed for inactivity). 21:06:19 -!- xkapastel has joined. 21:35:16 -!- ashirase has quit (Remote host closed the connection). 21:55:26 -!- arseniiv has quit (Ping timeout: 240 seconds). 22:04:33 -!- Remavas has joined. 22:06:08 -!- Remavas has changed nick to Remavas[AFK]. 22:28:33 `perl -eopen$F,">tmp/perm10"; @a=0..9;for$s(1..3628800){ print$F"@a\n";$k=$s;$m=2;$k/=$m++until$k%$m;@a[0,$m-1]=@a[$m-1,0]; }; warn "done" 22:28:34 String found where operator expected at -e line 1, near "$F"@a\n"" \ (Missing operator before "@a\n"?) \ File size limit exceeded 22:28:40 `perl -eopen$F,">tmp/perm10"; @a=0..9;for$s(1..3628800){ print$F "@a\n";$k=$s;$m=2;$k/=$m++until$k%$m;@a[0,$m-1]=@a[$m-1,0]; }; warn "done" 22:28:41 File size limit exceeded 22:28:45 darn 22:28:55 `perl -eopen$F,">tmp/perm10"; @a=0..9;for$s(1..3628800){ print$F join("",@a),"\n";$k=$s;$m=2;$k/=$m++until$k%$m;@a[0,$m-1]=@a[$m-1,0]; }; warn "done" 22:28:57 File size limit exceeded 22:29:15 ``` ulimit -f 22:29:16 10240 22:29:38 is that ten megabytes or five megabytes? 22:29:50 hmm 22:29:56 in any case, it's too small for this 22:29:59 darn 22:30:13 5 I guess 22:31:14 TAOCP 7.2.1 says "No sensible person would want to make a list of the 10! = 3,628,800 permutations of {0,1,2,3,4,5,6,7,8,9} by printing them out on thousands of sheets of paper, nor even by writing them all in a computer file." 22:31:31 that sounds like the sort of thing #esoteric would want to do then 22:31:51 but the 5 megabyte limit makes it impossible 22:31:55 on hackeso that is 22:31:58 if you say so 22:33:31 > length $ permutations [0..9] >>= (++ "\n") . (>>= show) 22:33:38 mueval-core: Time limit exceeded 22:33:45 > length $ permutations [1..9] >>= (++ "\n") . (>>= show) 22:33:48 3628800 22:33:57 `perl -eopen$F,"|wc"; @a=0..9;for$s(1..3628800){ print$F "@a\n";$k=$s;$m=2;$k/=$m++until$k%$m;@a[0,$m-1]=@a[$m-1,0]; }; warn "done" 22:34:04 done at -e line 1. \ 3628800 36288000 72576000 22:34:20 `perl -eopen$F,"|wc"; @a=0..9;for$s(1..3628800){ print$F join("",@a),"\n";$k=$s;$m=2;$k/=$m++until$k%$m;@a[0,$m-1]=@a[$m-1,0]; }; warn "done" 22:34:24 done at -e line 1. \ 3628800 3628800 39916800 22:35:06 you should also consider the age of TAoCP. 22:35:24 int-e: volume 4 isn't old 22:35:37 and it doesn't say that it can't be done, it says it's not worth 22:36:13 or at least that it's not what you usually want when you're asking for generating all permutations 22:36:17 it does make for a fun compression benchmark 22:36:26 vol 4 handles some pretty big tasks 22:36:32 4A really 22:39:19 gzip -9: 1620145, bzip2 -9: 1150986, xz -9: 48068 ... wow?! 22:39:45 int-e: which order of permutations is that? the one I gave, or the one you gave? 22:39:52 the one you gave 22:40:08 with spaces and newlines 22:40:15 ok 22:40:46 `perl -e@a=0..5;for$s(1..999){ print join("",@a),"\n";$k=$s;$m=2;$k/=$m++until$k%$m;@a[0,$m-1]=@a[$m-1,0]; }; 22:40:47 012345 \ 102345 \ 201345 \ 021345 \ 120345 \ 210345 \ 310245 \ 130245 \ 031245 \ 301245 \ 103245 \ 013245 \ 213045 \ 123045 \ 321045 \ 231045 \ 132045 \ 312045 \ 012345 \ 102345 \ 201345 \ 021345 \ 120345 \ 210345 \ 410325 \ 140325 \ 041325 \ 401325 \ 104325 \ 014325 \ 314025 \ 134025 \ 431025 \ 341025 \ 143025 \ 413025 \ 013425 \ 103425 \ 301425 \ 031425 \ 130425 \ 310425 \ 410325 \ 140325 \ 041325 \ 401325 \ 104325 \ 014325 \ 214305 \ 124305 \ 421305 \ 2 22:41:12 `perl -e@a=0..4;for$s(1..120){ print join("",@a),"\n";$k=$s;$m=2;$k/=$m++until$k%$m;@a[0,$m-1]=@a[$m-1,0]; }; 22:41:13 01234 \ 10234 \ 20134 \ 02134 \ 12034 \ 21034 \ 31024 \ 13024 \ 03124 \ 30124 \ 10324 \ 01324 \ 21304 \ 12304 \ 32104 \ 23104 \ 13204 \ 31204 \ 01234 \ 10234 \ 20134 \ 02134 \ 12034 \ 21034 \ 41032 \ 14032 \ 04132 \ 40132 \ 10432 \ 01432 \ 31402 \ 13402 \ 43102 \ 34102 \ 14302 \ 41302 \ 01342 \ 10342 \ 30142 \ 03142 \ 13042 \ 31042 \ 41032 \ 14032 \ 04132 \ 40132 \ 10432 \ 01432 \ 21430 \ 12430 \ 42130 \ 24130 \ 14230 \ 41230 \ 31240 \ 13240 \ 23140 \ 3214 22:41:28 `perl -e@a=0..4;for$s(1..120){ print join("",@a)," ";$k=$s;$m=2;$k/=$m++until$k%$m;@a[0,$m-1]=@a[$m-1,0]; }; 22:41:29 01234 10234 20134 02134 12034 21034 31024 13024 03124 30124 10324 01324 21304 12304 32104 23104 13204 31204 01234 10234 20134 02134 12034 21034 41032 14032 04132 40132 10432 01432 31402 13402 43102 34102 14302 41302 01342 10342 30142 03142 13042 31042 41032 14032 04132 40132 10432 01432 21430 12430 42130 24130 14230 41230 31240 13240 23140 32140 12340 21340 41320 14320 34120 43120 13420 31420 21430 12430 42130 24130 14230 41230 01234 10234 20134 02134 1203 22:41:46 that's not even all permutations 22:41:49 that has repetitions 22:41:52 you're cheating 22:41:59 or I'm cheating 22:42:36 right I was going to check that... and that does explain the good compression, I guess. 22:44:32 for the Haskell thing (newline, no spaces), gzip -9: 7913058; bzip2 -9: 9620381; xz -9: 1562180. 22:46:30 and with spaces: gzip -9: 9525275; bzip2 -9: 9846341; xz -9: 2242728. 22:46:48 how about with (7z a -mx=9 -sia kts-Ae6seFQj.7z; cat kts-Ae6seFQj.7z) ? 22:47:21 (7z won't compress to a pipe, so I'm using a temporary file here) 22:47:47 oh wait, you're saying gzip -9 rather than gzip -c9 so I don't have to cat it 22:48:11 I'm piping into it. 22:48:34 piping into it is fine, it can take the uncompressed input in a pipe 22:48:46 it just can't put or take the compressed file from a pipie 22:49:05 so for compressing, it can read from a pipe, for decompressing it can write to a pipe 22:49:14 Archive size: 1759018 bytes (1718 KiB) 22:49:33 ha! so it does sometimes win over xz 22:56:34 -!- tromp has quit (Remote host closed the connection). 23:09:14 int-e: I wonder whether there's a test program to run benchmarks with. 23:15:56 -!- AnotherTest has quit (Ping timeout: 240 seconds). 23:27:16 -!- tromp has joined. 23:29:46 -!- Essadon has quit (Quit: Qutting). 23:30:42 I think it's 10 megabytes; bash ulimit -f is in 1024 byte units, except when in Posix mode. 23:30:46 `` ulimit -f; sh -c "ulimit -f" 23:30:47 10240 \ 20480 23:30:53 Checks out. 23:32:01 hmpf 23:32:04 -!- tromp has quit (Ping timeout: 250 seconds). 23:32:40 Actually, what's sh there? 23:32:43 `` ls -l $(which sh) 23:32:43 lrwxrwxrwx 1 0 0 4 Jan 24 2017 /bin/sh -> dash 23:33:19 That Debian thing. 23:35:36 `` cat /bin/sh 23:35:36 ​ELF............>.....7......@.................@.8..@.........@.......@.......@..................................8......8......8......................................................................... ..................!.....!...........>........ ...........h......h!.....h!................................T......T......T......D.......D..............Ptd...f......f......f.........................Q 23:36:04 -!- Remavas[AFK] has quit (Quit: Leaving). 23:36:13 why do you gotta cat that 23:37:59 `? cat 23:38:00 Cats are cool, but should be illegal. 23:38:05 true 23:38:10 `5 w 23:38:11 i disagree 23:38:13 1/2:precision//78.75211317% of the time precision is totally overrated. \ gene ray//Dr Gene Ray is the Greatest Philosopher, and is the Greatest Mathematician. Cubic Harmonics. Only Cubic Harmonics can save humanity. Cubic Harmonics will pacify all religions. 96-hour Cubic Day debunks 1-day unnatural god. 96-hour day willdisprove disunity god. Academians are teaching - pseudocience. Worshipping a Word God will destroy the USA. \ web access//Sorry, Ha 23:38:18 `n 23:38:19 2/2:ckEgo's sandbox currently has no web access. However, see `? `fetch \ type system//type system = kitten \ bugbear//A bugbear is a teddy bear that you can explain your bugs to. 23:38:55 `? `fetch 23:38:56 ​`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. 23:41:11 `` grwp -l HackEgo 23:41:12 ​`! \ `# \ `fetch \ guarantee \ hackego \ hackeso \ `help \ `hoag \ list \ med \ print_args_or_input \ ruddy \ `run \ source \ test \ tmp \ web access \ zarutian 23:41:17 Less than I thought. 23:41:32 fizzie: ah thanks 23:41:47 hmm 23:42:03 `? zarutian 23:42:05 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 this entry. It 23:42:41 . o O ( `pwste zarutian ) 23:42:51 `paste wisdom/zarutian 23:42:52 https://hack.esolangs.org/repo/file/tip/wisdom/zarutian 23:43:00 `2 ? zarutian 23:43:02 2/2: It has a whole subentry just on Icelandic unnerver. Even though the Icelandic unnerver has its own. 23:43:20 I also can't remember the proper repository URL command 23:43:27 It's `url. 23:43:38 I was just wondering if there was a `wrl. 23:44:51 `hwrl zarutian 23:44:52 come on, you can type seven characters 23:45:05 ... useful. 23:45:16 `dowg bin/hwrl 23:45:19 No output. 23:45:23 `doag bin/hwrl 23:45:24 9814:2016-12-02 mkx bin/hwrl//echo \'come on, you can type seven characters\' 23:45:46 what a horrible, opinionated character 23:46:28 Huh? 23:46:30 * int-e also wonders about the difference between `url and `hurl 23:46:37 I don't remember that. Maybe it was an impostor. 23:46:40 Also horrible: there are entirely independent scripts bin/url and bin/hurl, where the only difference is that only the former supports tmp. 23:46:51 `cat bin/hurl 23:46:51 ​#!/usr/bin/env python \ import sys, os.path, re, urllib \ if len(sys.argv) <= 1: \ print "https://hack.esolangs.org/repo/" \ else: \ f = os.path.abspath(sys.argv[1]) \ f = re.sub(r"^/+hackenv/", "", f) \ if re.match(r"/|(?:\.hg|tmp)(?:/|$)",f): \ sys.exit("File is outside web-viewable filesystem repository.") \ else: \ print ("https://hack.esolangs.org/repo/log/tip/" + \ urllib.quote(f)) 23:46:59 `dobg hurl 23:47:00 11469:2018-04-08 sled bin/hurl//s,hackego.esolangs.org/fshg,hack.esolangs.org/repo,g;s,/index\\.cgi,, \ 10395:2017-03-11 sled bin/hurl//s,http,https,g \ 10316:2017-02-18 sled bin/hurl//s,codu.org/projects/hackbot,hackego.esolangs.org, \ 9142:2016-10-02 ` cp bin/{,h}url; sed -i \'11s/file/log/\' bin/hurl 23:47:05 `cblprits hurl 23:47:06 ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: cblprits: not found 23:47:09 what! 23:47:19 `culprits bin/hurl 23:47:21 fizzïe oerjän fizzïe oerjän 23:47:31 `culprits bin/url 23:47:32 fizzïe fizzïe oerjän fizzïe oerjän fizzïe fizzïe fizzïe oerjän oerjän oerjän oerjän oerjän oerjän oerjän oerjän fizzïe fizzïe fizzïe fizzïe oerjän oerjän oerjän oerjän oerjän oerjän nitïa 23:47:42 ...yeah, nobody else to blame. 23:47:56 `url bin/url 23:47:57 https://hack.esolangs.org/repo/file/tip/bin/url 23:48:22 Looks like I even fixed the paths in both url and hurl 10 months ago. 23:48:31 So these aren't totally separate, they're almost identical. 23:49:10 I guess you can argue that because of the "h" in "hurl", it should only work for repository contents, while "url" is okay to support tmp as well. 23:49:30 Wait, these aren't independent. 23:49:34 One of them is for the history of a file. 23:49:43 Ohhh. 23:49:58 `mkx hwrl//hurl "wisdom/$1" 23:50:00 hwrl 23:50:06 I guess that makes sense. 23:50:08 `hwrl zarutian 23:50:09 come on, you can type seven characters 23:50:24 `` mv hwrl bin 23:50:25 No output. 23:50:29 `hwrl zarutian 23:50:30 https://hack.esolangs.org/repo/log/tip/wisdom/zarutian 23:50:39 `mkx bin/wrl//url "wisdom/$1" 23:50:41 bin/wrl 23:50:46 `wrl zarutian 23:50:46 https://hack.esolangs.org/repo/file/tip/wisdom/zarutian 23:50:47 I guess hurl can't support tmp. Oh well. 23:51:03 Yes, it makes sense, I just didn't realize what it was for. 23:51:28 Yeah I was puzzled by the 'h' as well. So I learned something... useless. Yay. 23:52:23 If you didn't know what hurl was, why were you hwrling? 23:52:39 because I looked at /bin in the repo browser 23:52:55 Ah. 23:53:01 `url bin 23:53:02 https://hack.esolangs.org/repo/file/tip/bin 23:53:20 Why is bin so full of nonsense? 23:53:36 Because of the people. That is, us. :P 23:53:43 `cat bin/shachaf1sum 23:53:43 ​#!/bin/bash \ sha1sum "$@" | tr a-z n-za-m 23:53:50 `dobg shachaf1sum 23:53:52 2666:2013-04-14 printf \'#!/bin/bash\\nsha1sum "$@" | tr a-z n-za-m\' > bin/shachaf1sum && chmod +x bin/shachaf1sum 23:54:20 kmc: SMILING CAT FACE WITH HEART-SHAPED EYES 23:54:33 `culprits bin/ 23:54:34 oerjän 23:54:38 HackEso: binaries of the people, by the people, for the people. 23:54:40 -!- Lord_of_Life_ has joined. 23:54:49 `cat bin/ 23:54:50 echo Stop taking everything literally! 23:54:59 fizzie: There's still a DNS entry for hackego.esolangs.org 23:54:59 `help 23:55:00 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/ 23:55:07 cute 23:55:07 Which was confusing when I tried to hg pull a little while ago. 23:55:14 -!- Lord_of_Life has quit (Ping timeout: 246 seconds). 23:55:41 -!- Lord_of_Life_ has changed nick to Lord_of_Life. 23:55:57 shachaf: I guess it doesn't look too likely the Cloud at Cost host is coming back... 23:56:00 `? shaventions 23:56:03 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. 23:56:13 No one ever uses things like before/now/lastfiles 23:56:51 I think edit is a fizzievention by now 23:57:08 `cat bin/No 23:57:09 ​#!/bin/sh 23:57:25 int-e: I think that's for ruining an error quote. 23:57:43 `dobg No 23:57:44 0:2012-02-16 Initïal import. 23:57:45 Or something along those lines. 23:57:55 `? nitia 23:57:56 nitia is the inventor of all things. The BBC invented her. 23:58:26 ...why the BBC 23:58:43 Probably https://en.wikipedia.org/wiki/BBC_Nitia 23:58:47 o 23:59:25 `cat bin/whoops 23:59:26 OLD="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}»" 23:59:34 `dobg whoops 23:59:35 9714:2016-11-17 whoop ../bin/whoop \ 9713:2016-11-17 ` mv bin/whoop{s,} \ 9710:2016-11-17 ` mv bin/whoops{s,} \ 9709:2016-11-17 whoops \ 9708:2016-11-17 mkx bin/whoops//OLD="wisdom/$1"; [ -z "$1" ] && OLD="$(lastfiles)"; NEW="${OLD}s"; if [ -f "$NEW" ]; then echo "\xc2\xab${NEW}\xc2\xbb already exists"; exit 1; fi; mv "$OLD" "$NEW" && echo "\xc2\xab${OLD}\xc2\xbb -> \xc2\xab${NEW}\xc2\xbb" \ 5338:2015 23:59:52 oh man, tg