←2019-11-20 2019-11-21 2019-11-22→ ↑2019 ↑all
00:02:26 <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).
00:02:53 <fizzie> Previously it was "con1=null,fd:M", which uses UML's 'null' console type instead, which makes reads block forever.
00:03:08 <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.
00:03:12 <fizzie> `cat
00:03:14 <HackEso> No output.
00:03:21 <fizzie> Odd.
00:10:35 -!- Sgeo has joined.
00:16:50 <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.
00:17:04 <kmc> *blink*
00:17:06 <kmc> wow
00:17:21 <shachaf> I mean, it's a book about computability or something, so not that random.
00:18:13 -!- FreeFull has quit.
01:32:25 -!- oerjan has joined.
01:40:49 <oerjan> ^wiki
01:40:49 <fungot> https://esolangs.org/wiki/
01:46:15 <oerjan> b_jonas: oh right, ed doesn't strictly need a terminal.
01:46:49 <fizzie> oerjan: That one I restored from the logs.
01:46:49 <oerjan> in fact probably doesn't care
01:46:59 <oerjan> fizzie: ah
01:47:22 <oerjan> i saw your message about restoring and wondered how much you'd wiped out
01:47:23 <oerjan> ^show
01:47:24 <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
01:50:23 <oerjan> ^a
01:50:23 <fungot> ............................................................................................................................................................................................................... ...
01:50:28 <oerjan> ^show a
01:50:28 <fungot> +13[.]
01:50:31 <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.
01:51:09 <oerjan> mhm
01:53:44 <fizzie> Hm, I've broken something. :/
01:55:21 <oerjan> NOOOOOOOOOOOOO
01:55:45 <fizzie> `` echo foo; echo bar; echo baz
01:55:46 <HackEso> foo \ bar \ baz
01:55:47 <fizzie> `` echo foo >&2; echo bar >&2; echo baz >&2
01:55:48 <HackEso> foo
01:55:52 <fizzie> That's not right.
01:58:52 <kmc> o_O
01:59:05 <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.
01:59:33 <fizzie> That said, I'm not sure what I managed to break there.
02:02:49 -!- joast has quit (Quit: Leaving.).
02:03:35 <oerjan> `` (echo foo; echo bar; echo baz) >&2
02:03:36 <HackEso> foo
02:03:44 <oerjan> something EOL handling?
02:04:00 <oerjan> `` (echo foo; echo bar; echo baz) >&2; echo fizz
02:04:01 <HackEso> No output.
02:04:09 <fizzie> Mmmaybe. I don't see how though.
02:04:14 <oerjan> huh
02:04:24 <fizzie> I also got two different outputs for the same command before, so there's a race condition somewhere as well.
02:04:26 <oerjan> `` echo buzz; (echo foo; echo bar; echo baz) >&2; echo fizz
02:04:27 <HackEso> foo
02:05:13 <fizzie> I assume it could be the newline translation, it's just odd how that could be affected.
02:07:41 <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.
02:09:33 <shachaf> int-e: Hmm, is something like "non-chronological backjumping" actually mandatory when doing clause learning?
02:09:53 <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?
02:09:56 <fizzie> b
02:10:24 <shachaf> Also maybe you're tired of random SAT questions, hmm.
02:11:57 <oerjan> . o O ( do you like random SAT questions? )
02:12:53 -!- joast has joined.
02:15:06 <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.
02:16:03 <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.
02:16:32 <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().
02:17:12 <oerjan> fiendish
02:20:11 <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.
02:23:49 <shachaf> int-e: Wait, maybe I'm just wrong and you can use the conflicting clause.
02:28:59 <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.
02:30:02 <fizzie> Maybe it could be non-blocking somehow... although I don't think so.
02:35:02 <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.
02:35:25 <fizzie> So it's just that somehow the uml terminates before it has written all the output.
02:40:35 <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.
02:52:44 <oerjan> did this change happen when you upgraded debian, or is there something you actually edited involved?
02:53:25 <oerjan> fizzie: ^
02:53:45 <oerjan> because the latter should at least be bisectable...
02:54:05 <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.
02:54:24 <fizzie> Right now I'm getting really bizarre behavior out.
02:55:12 <oerjan> just change that | cat to |& cat and call it a day :)
02:56:02 <shachaf> int-e: Wait, now I'm on the train and it doesn't make sense again.
02:56:03 <fizzie> It runs using /bin/sh, it doesn't work there. But I did give that a think.
02:56:16 <fizzie> 2>&1 | cat might work.
02:57:21 <oerjan> shachaf: that reminds me of something. oh right, the "i'm on a horse" meme.
02:57:37 <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.
02:58:18 <fizzie> I seem to consistently get all the output from the printfs before the first read, whatever that means.
02:59:17 <fizzie> Well, except sometimes I don't get even that.
02:59:26 <shachaf> oerjan: Is that like "I've been through the desert on a horse with no name"?
03:01:19 <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.
03:02:54 <oerjan> shachaf: probably{, not}
03:03:10 -!- imode has joined.
03:07:52 <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
03:07:56 <fizzie> Does that make any sense?
03:08:55 <fizzie> (No.)
03:10:38 <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.
03:12:01 <shachaf> fizzie: I haven't been reading the whole log. What's with only the first line being printed? Is that the nonsensical thing?
03:12:27 <fizzie> Well, occasionally it's weirder than that, but yes.
03:12:40 <shachaf> When is it weirder?
03:13:05 <fizzie> I don't think I can describe this.
03:13:10 <shachaf> Is this echo the builtin or /bin/echo? Can you strace it?
03:13:20 <shachaf> I'm typing on my phone so everything is scow.
03:13:43 <fizzie> I can't strace UML. I could probably strace inside it, but I'm not sure how much that would help.
03:13:53 <fizzie> Anyway, I switched to the new UML kernel and now it outputs nothing at all.
03:13:57 <fizzie> `echo ping
03:14:00 <HackEso> No output.
03:14:02 <fizzie> Not great.
03:14:31 <shachaf> What if you strace inside it? Is it one write call or three?
03:14:52 <fizzie> Well, I can't, now.
03:15:29 <fizzie> It just crashes with: Trying to reregister IRQ 2 FD 4 TYPE 0 ID (____ptrval____) \ open(rfile, O_RDONLY): Device or resource busy
03:18:00 <fizzie> (This is when it's trying to open the tty1 device.)
03:19:20 <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.
03:21:06 <fizzie> By the way, it was with the echo builtin; with /bin/echo both the plain and | cat version print all lines.
03:22:31 <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.
03:23:05 <shachaf> You can't strace into a file?
03:23:16 <fizzie> And with /bin/echo I get more of the strace output, but not all of it.
03:23:28 <shachaf> Is that bash -c /bin/echo or/bin/echo directly?
03:23:29 <fizzie> I guess I could, I would just need to hostfs mount something in writable form.
03:24:02 <fizzie> bash -c /bin/echo.
03:24:31 <shachaf> Maybe your computer's haunted?
03:26:09 <fizzie> Okay: with bash -c 'echo -e ...', no cat, I get the full output and it got written as three separate writes.
03:27:12 * oerjan suddenly thinks of the non-inheritable fds mentioned yesterday
03:27:25 <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.
03:27:27 <oerjan> could that be involved?
03:28:45 <shachaf> What is cat seeing? I guess read 5 and then read 0?
03:28:55 <shachaf> EPIPE is odd.
03:29:13 <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.
03:29:38 <fizzie> And occasionally I get the full output, and three separate writes of 5 bytes each.
03:29:49 <shachaf> OK, I'm spooked.
03:30:06 <fizzie> And the last combination, /bin/echo with cat, seems to consistently produce all three lines of output.
03:30:17 <fizzie> Written in a single 15-byte write.
03:30:49 <fizzie> I don't think I've even seen EIO before.
03:30:54 <shachaf> What's closing the pipe?
03:31:16 <oerjan> (gremlins)
03:32:34 <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.
03:32:41 <fizzie> Let me strace that cat on the outside too.
03:32:42 <kmc> EIEIO
03:33:27 <oerjan> <kspalaiologos> `quote 1000 <-- enough quotes have been deleted that numbers aren't remotely stable
03:34:02 <oerjan> . o O ( kmcdonald had a farm )
03:34:54 <kmc> lol
03:34:58 <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.
03:36:04 <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).
03:36:30 <fizzie> The umlbox wrapper script, and the UML kernel, should only have a file descriptor for the write end.
03:36:35 <oerjan> `doag ../quotes | grep 1000
03:36:38 <HackEso> No output.
03:37:11 <fizzie> Really going to give up for now though. It's late. There's ghosts about.
03:37:16 <oerjan> `` doag ../quotes | paste
03:37:19 <HackEso> https://hack.esolangs.org/tmp/paste/paste.20469
03:38:11 <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.
03:38:32 <oerjan> `quote steal.code
03:38:33 <HackEso> No output.
03:38:44 <oerjan> `quote steal..code
03:38:45 <HackEso> 687) <olsner> 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
03:38:59 <oerjan> hm that's older, so it _should_ be in the paste
03:39:08 <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.)
03:42:02 <oerjan> i vaguely think someone used sleep in HackEso not that long ago
03:45:53 <oerjan> kspalaiologos: https://esolangs.org/logs/2013-03-30.html#luq
03:46:13 <oerjan> it was actually quote 1000 itself when added
03:46:19 <oerjan> and still not cheating
03:46:53 <shachaf> Maybe you'll understand this better if you draw a UML diagram.
03:47:56 <oerjan> so: we had 1000 quotes back in early 2013, and currently have fewer than 337 more.
03:48:07 <oerjan> `` allquotes | tail -n 1
03:48:10 <HackEso> No output.
03:48:18 <oerjan> what
03:48:47 <oerjan> `` allquote | head -n 1
03:48:48 <HackEso> ​/hackenv/bin/`: line 5: allquote: command not found
03:48:53 <oerjan> `` allquotes | head -n 1
03:48:54 <HackEso> 1) <Slereah> EgoBot just opened a chat session with me to say "bork bork bork"
03:48:57 <fizzie> Maybe that's just more ghosts?
03:49:03 <oerjan> `` allquotes | tail -n 1
03:49:04 <HackEso> 1332) <shachaf> The domain is public, but what's the codomain?
03:49:09 <oerjan> apparently so.
03:49:41 <oerjan> so it's definitely not been that broken for long.
03:50:34 <fizzie> I'll try older versions later.
03:51:31 <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.
03:52:09 <oerjan> `` allquotes | tail -n 1
03:52:11 <HackEso> 1332) <shachaf> The domain is public, but what's the codomain?
03:52:29 <shachaf> That quote is terrible.
03:52:46 <shachaf> Maybe delete it or pick some other quote to keep quoting?
03:53:10 <oerjan> well i was really just checking how many quotes there were, and then a bug turned up.
03:54:32 <oerjan> ok i did 3 repeats in pm, and the last one failed.
03:54:48 <oerjan> (the second was a little slow.)
03:55:14 -!- imode has quit (Ping timeout: 240 seconds).
03:55:44 <oerjan> maybe it's timing out and it's related to the sleep thing
03:56:16 <oerjan> `cat
03:57:03 <fizzie> That always seems to take more time than the stipulated 30 seconds.
03:57:40 <HackEso> No output.
03:57:47 <oerjan> i was sort of hoping it might time out early and be a clue
03:57:49 <oerjan> `` echo hi; cat
03:57:50 <HackEso> No output.
03:57:54 <oerjan> ooh
03:57:58 <oerjan> so it was
03:58:11 <oerjan> but i had to print something first
03:58:56 <oerjan> fizzie: in case you weren't watching, that last command responded almost instantly
03:59:25 <fizzie> And didn't print the thing.
04:00:03 <fizzie> Shouldn't have anything to do with the timeout though.
04:00:46 <oerjan> no, more the reverse: it shows that it's aborted first.
04:01:52 <oerjan> `` echo hi; echo ho; cat
04:02:10 <oerjan> and now it's going to take the full time i guess
04:02:56 <HackEso> No output.
04:03:04 <oerjan> ...but still didn't print
04:03:16 <oerjan> very random.
04:03:57 <oerjan> `1 quote random
04:03:58 <HackEso> 1/5:
04:04:07 <oerjan> `n 1
04:04:09 <HackEso> 1/5:
04:04:17 <oerjan> `n 1
04:04:18 <HackEso> 1/5:
04:04:21 <oerjan> `n
04:04:22 <HackEso> 2/5:
04:04:24 <oerjan> huh
04:04:41 <shachaf> Probably closing after the first write?
04:05:04 <oerjan> apparently. but it hasn't been doing that since fizzie upgraded debian, has it?
04:05:21 <shachaf> I don't know what's going on at all.
04:05:27 <shachaf> I'm at the airport.
04:09:24 <oerjan> hm i find only one <HackEso> 1/...: response after i asked fizzie about "draft", which i assume was after the upgrade. although that one worked.
04:09:49 <oerjan> `1 stat le
04:09:50 <HackEso> No output.
04:09:54 <oerjan> `1 stat le
04:09:55 <HackEso> 1/1:
04:09:58 <oerjan> `1 stat le
04:10:00 <HackEso> 1/1:
04:10:12 <oerjan> so something changed after that, probably
04:13:43 <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.
04:20:55 <fizzie> I don't understand why it would only work for the one write.
04:24:43 <fizzie> `` /bin/echo a; /bin/echo b; /bin/echo c; /bin/echo d; /bin/echo e
04:24:44 <HackEso> a \ b \ c \ d \ e
04:24:48 <fizzie> `` /bin/echo a; /bin/echo b; /bin/echo c >&2; /bin/echo d; /bin/echo e
04:24:49 <HackEso> c
04:25:12 <oerjan> <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. <-- synchronicity hth
04:25:17 <fizzie> And there's that, which seems to behave very consistently.
04:26:01 <oerjan> `cat spout
04:26:04 <HackEso> No output.
04:26:06 <oerjan> huh
04:26:14 <oerjan> `cat spout
04:26:15 <HackEso> ​ File: le -> /hackenv/le \ Size: 11 Blocks: 0 IO Block: 1024 symbolic link \ Device: 12h/18dInode: 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: -
04:27:59 <oerjan> `n
04:27:59 <HackEso> 1/1:
04:28:04 <oerjan> `` n
04:28:08 <HackEso> No output.
04:28:10 <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.
04:28:29 <oerjan> `` n | cat
04:28:30 <HackEso> No output.
04:28:40 <oerjan> `` n | cat
04:28:41 <HackEso> 1/1: File: le -> /hackenv/le \ Size: 11 Blocks: 0 IO Block: 1024 symbolic link \ Device: 12h/18dInode: 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: -
04:29:20 <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?
04:29:59 <shachaf> fizzie: I was going to ask earlier what happens if cat keeps issuing read calls after the 0.
04:30:08 <shachaf> But I thought that'd be too niche a guess and too annoying to test.
04:30:09 <oerjan> `` 1 echo a; 1 echo b; 1 echo c; 1 echo d; 1 echo e
04:30:21 <HackEso> No output.
04:30:31 <oerjan> `cat spout
04:30:32 <HackEso> No output.
04:30:34 <oerjan> `cat spout
04:30:35 <HackEso> No output.
04:30:37 <oerjan> `cat spout
04:30:37 <HackEso> No output.
04:30:42 <oerjan> `` ls -l spout
04:30:44 <HackEso> No output.
04:30:47 <oerjan> `` ls -l spout
04:30:48 <HackEso> No output.
04:30:51 <oerjan> OH COME ON
04:31:04 <oerjan> `` ls -l spout | cat
04:31:05 <HackEso> ​-rw-r--r-- 1 1000 1000 0 Nov 21 04:30 spout
04:31:18 <oerjan> `` cat spout | cat
04:31:19 <HackEso> No output.
04:31:24 <oerjan> `` cat spout | cat
04:31:25 <HackEso> No output.
04:31:32 <oerjan> `` wc spout
04:31:33 <HackEso> 0 0 0 spout
04:31:35 <oerjan> oh
04:31:54 <oerjan> ok interesting, it failed at writing the spout file
04:34:02 <oerjan> `` (1 echo a; 1 echo b; 1 echo c; 1 echo d; 1 echo e) >/dev/null
04:34:10 <HackEso> No output.
04:34:20 <oerjan> `cat spout
04:34:21 <HackEso> No output.
04:34:27 <oerjan> `` wc spout
04:34:27 <HackEso> 0 0 0 spout
04:34:37 <oerjan> hum
04:35:01 <oerjan> that means that command failed somewhere, despite never printing to stdout
04:35:58 <oerjan> `` { 1 echo a; 1 echo b; 1 echo c; 1 echo d; 1 echo e } >/dev/null
04:35:59 <HackEso> ​/hackenv/bin/`: eval: line 6: syntax error: unexpected end of file
04:36:19 <oerjan> hum
04:36:34 <oerjan> `` (1 echo a) >/dev/null
04:36:35 <HackEso> No output.
04:36:36 -!- kspalaiologos has quit (Ping timeout: 240 seconds).
04:36:39 <oerjan> `cat spout
04:36:40 <HackEso> No output.
04:36:52 <oerjan> oh wait duh
04:37:45 <oerjan> `` 1 'echo a'; 1 'echo b'; 1 'echo c'; 1 'echo d'; 1 'echo e'
04:37:47 <HackEso> 1/1:a \ 1/1:b \ 1/1:c \ 1/1:d \ 1/1:e
04:38:01 <oerjan> darn
04:38:09 <oerjan> `cbt 1
04:38:10 <HackEso> ​\` "$@" |& sport
04:38:31 <oerjan> hum that should pass on everything
04:38:35 <oerjan> `cbt `
04:38:35 <HackEso> ​#!/bin/bash \ cmd="${1-quote}" \ TIMEFORMAT="real: %lR, user: %lU, sys: %lS" \ shopt -s extglob globstar \ eval -- "$cmd" | rnooodl
04:39:28 <oerjan> `slbd `//s,1,@,
04:39:30 <HackEso> ​`//#!/bin/bash \ cmd="${@-quote}" \ TIMEFORMAT="real: %lR, user: %lU, sys: %lS" \ shopt -s extglob globstar \ eval -- "$cmd" | rnooodl
04:39:37 <oerjan> `` echo hi
04:39:37 <HackEso> hi
04:40:07 <oerjan> `` 1 echo a; 1 echo b; 1 echo c; 1 echo d; 1 echo e
04:40:15 <HackEso> No output.
04:40:23 <fizzie> I'll try to roll back the live version to the post-Debian-upgrade-before-refactoring one.
04:40:25 <oerjan> or not.
04:40:48 <oerjan> `` 1 echo a; 1 echo b; 1 echo c; 1 echo d; 1 echo e
04:40:51 <HackEso> No output.
04:41:06 <oerjan> `` \` echo hi
04:41:06 <HackEso> hi
04:41:14 <oerjan> ok seems to work
04:41:41 <oerjan> `` 1 echo hi
04:41:42 <HackEso> 1/1:hi
04:42:03 <oerjan> `` 1 echo a; 1 echo b; 1 echo c; 1 echo d; 1 echo e
04:42:10 <HackEso> 1/1:a \ 1/1:b \ 1/1:c \ 1/1:d \ 1/1:e
04:42:27 <oerjan> `cat spout
04:42:27 <HackEso> e
04:43:18 <fizzie> `` /bin/echo a; /bin/echo b; /bin/echo c >&2; /bin/echo d; /bin/echo e
04:43:19 <HackEso> c \ a \ b \ d \ e
04:43:25 <oerjan> ok that was just me being stupid but now 1 and ` are a bit more resilient in shell
04:43:26 <fizzie> Well, there's clearly some difference there.
04:43:45 <fizzie> Oh well, at least I can bisect for it then. But not today.
04:43:53 <fizzie> Need to wake up in four hours.
04:44:06 <oerjan> sweet dreams
04:49:16 <kmc> `` url $(which 1)
04:49:17 <HackEso> https://hack.esolangs.org/repo/file/tip/bin/1
04:52:52 -!- TellsTogo has joined.
04:56:34 <kingoffrance> for a second it almost looked like the "tip" command was in operation, in all its glory :/
04:56:46 <kingoffrance> alas, just a directory name
04:59:20 <esowiki> [[User:Quadril-Is]] https://esolangs.org/w/index.php?diff=67294&oldid=67134 * Quadril-Is * (+14)
05:07:31 <oerjan> fungot: do you have any tips?
05:07:31 <fungot> oerjan: it's always hard for me to go function by function?
05:29:41 <oerjan> `? tip
05:29:42 <HackEso> A tip is [ $ ] if you're American, [ £ ] if you're British, and if you're Japanese.
06:14:50 -!- TellsTogo has quit (Remote host closed the connection).
06:25:56 <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.
06:27:10 <int-e> shachaf: Actually, nontrivial and at least marginally useful... it would have detected the conflict at hand one or more decisions earlier.
06:45:30 -!- tromp has quit.
07:32:14 -!- oerjan has quit (Quit: Nite).
08:00:57 <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!)
08:03:03 <int-e> So one way of viewing the backjump clause is as a way of identifying relevant literals for the current conflict.
08:09:14 <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. )
08:09:37 <int-e> s/backjump/backjump clauses/
08:10:04 <int-e> (complements of unsatisfiable cores, of course)
08:20:43 -!- zzo38 has quit (Ping timeout: 245 seconds).
08:29:42 <esowiki> [[Treesolang]] https://esolangs.org/w/index.php?diff=67295&oldid=67274 * Baidicoot * (+651) added IO
08:30:17 <b_jonas> so HackEso has grown mysterious bugs?
08:33:30 <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.
08:34:10 <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.
08:36:04 <int-e> heh it probably made it slower ;)
08:36:48 <shachaf> I mean, it was written in Python.
08:36:50 <int-e> Maybe I should implement a SAT solver. But to what end...
08:36:53 <shachaf> So it was already maximally slow.
08:37:18 <shachaf> int-e: Anyway, when you do something like FirstUIP, you need a "reason" for each assignment (other than decisions).
08:37:57 <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?
08:39:39 <int-e> True, you'd have to derive the corresponding backjump clause (LastUIP)
08:40:23 <shachaf> Oh, you can keep resolving on units from this level until your clause includes the decision literal, you mean.
08:40:47 <int-e> yeah, since that's how backjumping simulates backtracking
08:41:26 <shachaf> Right. I guess I can do that.
08:41:54 <shachaf> I implemented CDCL and FirstUIP on the flight (no clause deletion, just allocating enough memory for all the learned clauses).
08:42:27 <shachaf> It made the number of decisions and units go way down, but the solver also takes much much longer.
08:42:52 <shachaf> Which seems like a great tradeoff, since I hate making decisions.
08:44:03 <int-e> Yeah deleting clauses is very important for performance. Which is awful because it's another open-ended playing field for heuristics.
08:44:44 -!- kspalaiologos has joined.
08:45:45 <kspalaiologos> =str 0s +[----->+++<]>+.++++++++++++..----.+++.+[-->+<]>.-----------..[--->+<]>.[--->+<]>----.----.---.-----------.+++++++++++++.-------.++++++++++++.+[++>---<]>.---[----->+<]>.+++.-----------.--[->+++<]>.++[--->++<]>+.+[->+++<]>+.++.--.----[->+++<]>.
08:45:45 <bfbot> ok
08:46:05 <kspalaiologos> =str 0a [,.]
08:46:05 <bfbot> ok
08:46:11 <kspalaiologos> =def 0wiki
08:46:12 <bfbot> ok, defined 'wiki'
08:46:17 <kspalaiologos> =wiki bfbot
08:46:18 <bfbot> ..............................................................................bfbot
08:46:26 <kspalaiologos> Oh gosh damn it man
08:46:30 <kspalaiologos> What happened
08:46:36 <shachaf> int-e: Why is it important?
08:46:40 <kspalaiologos> 8bit cells?
08:46:44 <shachaf> I thought it was just for keeping memory use fixed.
08:46:55 <shachaf> But even with 2WL you spend way too much time checking clauses, or something?
08:46:55 <kspalaiologos> `bf_textgen x
08:46:56 <HackEso> ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: bf_textgen: not found
08:47:04 <kspalaiologos> ``` bf_textgen
08:47:05 <HackEso> bash: bf_textgen: command not found
08:47:14 <kspalaiologos> Where is it located
08:47:36 <kspalaiologos> I need to add bitness to the wiki page because I forgot it
08:49:00 <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).
08:50:24 <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.
08:50:31 <int-e> The average 2WL list grows linearly with the number of clauses.
08:51:56 <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.)
08:52:18 -!- b_jonas has quit (Quit: leaving).
08:52:20 * int-e shrugs
08:52:42 <int-e> That "probably" is a fairly wild guess. I have no data.
08:52:50 <shachaf> Ideally watches move to and stay on literals you don't assign as much.
08:53:11 <shachaf> Or whose negation you don't assign as much, anyway.
08:53:43 <int-e> The way I think of it, I'd put A v B on the watch lists for ~A and ~B.
08:54:24 <shachaf> I mean, where you put the negation doesn't matter.
08:54:30 <int-e> But I don't know what's standard here...
08:54:32 <int-e> Yeah.
08:54:50 <int-e> I understood what you said.
08:55:02 <int-e> Or wrote. Whatever.
08:55:40 <shachaf> Clause collection seems hard.
08:55:51 <shachaf> By which I mean you have to make a lot of decisions.
08:58:07 <int-e> Yeah I'm afraid this is where you read another half dozen papers.
09:00:02 <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?)...
09:00:13 <shachaf> OK, some of these learned clauses are pretty bad, now that I look at them.
09:00:58 <shachaf> One of the is a unit!
09:01:22 <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.
09:01:32 <int-e> Okay, if you learn a unit clause you have a clear way of pruning the clauses :)
09:01:50 <shachaf> It's kind of an odd property of CDCL that you can't do that in general.
09:01:57 <shachaf> (When normally you think of DPLL as solving subproblems.)
09:02:30 <int-e> You can check for clause subsumption... just not efficiently ;)
09:02:41 <int-e> (Maybe I'm not imaginative enough.)
09:03:27 <int-e> Even if you learn a unit clause it's not entirely clear how to deal with that efficiently.
09:03:57 <shachaf> Why?
09:04:00 <int-e> (If you want to avoid scanning *all* clauses. Maybe just go through that literal's watch lists?)
09:04:14 <int-e> (But then you have to do that periodically.)
09:04:15 <shachaf> Oh, I was thinking to just go through the watch list.
09:04:32 <shachaf> But also scanning all clauses up to num_vars times doesn't seem that bad.
09:04:48 <shachaf> Maybe the clause database gets really big, or real-world SAT problems have a large number of variables.
09:05:14 <int-e> I'm sure both of these happen.
09:06:01 <shachaf> But you can probably do it opportunistically reasonably well.
09:06:15 <shachaf> I mean, if you're learning a lot of units, you're doing pretty well, I'd hope.
09:07:03 <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...)
09:30:58 <shachaf> Does it make sense to resolve on the same variable twice while doing LastUIP?
09:31:10 <shachaf> I should get some paper and figure out what's going on with my life.
09:32:11 <int-e> shachaf: not really? I mean the resolved variable is on the trail, which should not have any duplicates?
09:33:04 <shachaf> Oh, that's not what's going on.
09:33:23 <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?
09:33:29 <shachaf> Hmm.
09:34:06 <int-e> Oh. That may happen.
09:34:34 <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?
09:34:46 <int-e> Are you sure you don't want to do that?
09:34:51 <shachaf> I feel like I'm making this too complicated.
09:35:02 <shachaf> You just said it doesn't make sense to resolve on it again.
09:35:38 <int-e> I mean, resolution proofs /must/ typically resolve on the same variable several times for completeness.
09:36:07 <int-e> shachaf: No, *I* said that it doesn't happen when finding a backjump clause.
09:36:18 <int-e> But that's ignoring the history of the clauses involved in that.
09:38:57 <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.
09:41:26 <shachaf> I'm not sure what you mean.
09:45:41 <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.
09:46:45 <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.
09:47:11 <shachaf> Wait, how do you resolve through the trail?
09:48:10 <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.
09:48:39 <shachaf> And keep doing that with the new clause until there's only one literal from this level in it.
09:49:30 <int-e> Yes. The unit-propagated literal is from the trail. The variable you resolve on corresponds to that literal.
09:50:19 <int-e> Maybe I'm begin stupid but I see no reason why you'd involve the same literal twice in the conflict analysis.
09:50:37 <shachaf> Sure, it's from the trail, but you don't find it by just looking back through the trail, do you?
09:50:43 <shachaf> Hmm.
09:51:22 <shachaf> Maybe you just do?
09:51:26 <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.
09:51:37 <shachaf> Maybe the code I wrote was way too complicated.
09:52:37 <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.
09:53:05 <shachaf> Ah, but I'm just picking an arbitrary one.
09:53:27 <shachaf> Now what you said makes more sense.
09:53:36 <int-e> Then I'm not sure. But don't you risk missing the last UIP then?
09:53:55 <shachaf> Do you still find the first UIP?
09:54:27 <int-e> Oh right we're looking from the end of the trail. So I mean first.
09:54:49 <int-e> The last UIP can't be missed, it's the backtracking case.
09:56:55 <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.
09:58:01 <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.
09:58:48 <shachaf> I think what you say makes more sense than what I was thinking.
09:59:22 <shachaf> I was just picking an arbitrary unit each time.
09:59:34 <shachaf> I mean arbitrary unit-propagated literal from this level.
09:59:52 <shachaf> Now I need to think about how to implement the thing you said and some other things.
09:59:59 <shachaf> Probably not today.
10:04:03 <int-e> shachaf: out of curiosity, which imperfect programming language are you using for this?
10:04:22 <shachaf> C.
10:05:45 <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.)
10:06:47 -!- wib_jonas has joined.
10:06:48 <int-e> (C++ mostly for sane namespaces... and probably vectors out of laziness)
10:07:12 <shachaf> I did give in and use https://github.com/nothings/stb/blob/master/stb_ds.h at one point.
10:07:14 <myname> int-e: out of curiosity, which programming language is not imperfect?
10:07:18 <int-e> Not for inheritance, virtual methods, exceptions, or templates.
10:07:22 <int-e> myname: Brainfuck.
10:07:28 <myname> how so
10:07:43 <shachaf> int-e: Vectors are great for SAT solvers because there's a lot of linear algebra involved.
10:07:53 <int-e> myname: There's this quote. "There are two kind of programming languages. Those that everybody complains about and those that nobody uses."
10:08:05 <int-e> myname: Brainfuck is pretty much perfect for what it does.
10:08:18 <myname> int-e: in this case, malbolge would be a lot better
10:08:32 <int-e> No, Malbolge is overcomplicated. :P
10:08:46 <shachaf> I'm using these dynamic arrays for watch lists. But I suspect I'll replace them with some other data structure anyway eventually.
10:08:58 <myname> but a lot of people are "using" brainfuck
10:09:21 <int-e> myname: The original purpose of Brainfuck was not to make programming hard. The purpose was to allow writing small compiler.
10:09:33 <int-e> +a
10:10:33 <int-e> shachaf: I'm not sure to what extend you're kidding about the linear algebra.
10:10:50 <int-e> *extent
10:11:18 <shachaf> I think std::vector is useful because I often want to apply scalar multiplication to my arrays.
10:11:45 <int-e> myname: The "imperfect" was an oblique reference to earlier discussions with shachaf about whether there are any good programming languages out there.
10:12:06 <int-e> myname: We have yet to find one.
10:12:25 <myname> what about lambda calculus=
10:12:27 <myname> ?
10:13:09 <int-e> We can't even agree on whether Haskell is a good programming language.
10:13:44 <shachaf> Good for what?
10:13:50 <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.)
10:14:38 <shachaf> I don't think that's the only thing I complain about.
10:15:35 <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.
10:15:50 <shachaf> Can you give me a nice definition of PTIME and PSPACE for lambda calculus?
10:16:53 <int-e> Sure, just use a graph model and measure term size and count reduction steps.
10:16:59 <int-e> Maybe that's not nice enough for you.
10:18:01 <shachaf> Turing machines are obviously scow to program on.
10:18:02 <int-e> (Hmm, I may have to go the explicit substituition route.)
10:18:04 * int-e shrugs.
10:18:08 <myname> int-e: well, typed lambda calculus is not that far away from haskell, isn't it?
10:18:25 <shachaf> But at least Turing machines are in spirit similar to actual machines.
10:18:25 <int-e> myname: what did you think I meant by "real programming"? :P
10:19:21 <myname> okay
10:19:54 <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?
10:20:23 <wib_jonas> oh, you said graph model
10:20:39 <wib_jonas> so the former
10:21:22 <shachaf> Do you like stb_ds.h?
10:21:22 <int-e> tbh, graph models are not very nice from a theoretical perspective.
10:21:59 <int-e> If you really want to go *that* route maybe drop the lamdba calculus and do interaction nets instead.
10:22:00 <myname> petri nets!
10:22:22 <int-e> no, not petri nets
10:22:44 <myname> :(
10:27:04 <int-e> . o O ( I prefer multiset rewriting ;-) )
10:28:21 <shachaf> ⟅1,1,2⟆
10:28:44 <int-e> unordered string rewrting = multiset rewriting = Petri nets if you interpret the symbols as places and the rules as transitions.
10:29:44 <wib_jonas> ⦃1,1,2⦄
11:00:13 -!- kritixilithos has joined.
11:51:31 <kspalaiologos> =list
11:51:31 <bfbot> 8ball echo f msg1 simple wiki
11:51:39 <kspalaiologos> =wiki xd
11:51:39 <bfbot> ..............................................................................xd
11:51:48 <kspalaiologos> I need to set bitness
11:52:02 <kspalaiologos> But I forgot how to do it
11:52:08 <kspalaiologos> =f
11:52:13 <kspalaiologos> =f aaa
11:52:19 <kspalaiologos> =simple
11:52:19 <bfbot> simple
11:54:21 <kspalaiologos> I need to update bfbot docs though on the wiki
12:12:20 -!- kritixilithos has quit (Ping timeout: 260 seconds).
12:12:26 -!- xkapastel has joined.
12:18:53 -!- arseniiv has joined.
12:53:50 <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.
12:53:50 <lambdabot> Consider it noted.
12:59:07 <wib_jonas> fizzie: nice
13:01:35 -!- wib_jonas has quit (Remote host closed the connection).
13:09:58 -!- kritixilithos has joined.
13:46:13 <esowiki> [[Bfbot]] M https://esolangs.org/w/index.php?diff=67296&oldid=67265 * Palaiologos * (+265)
13:46:35 <esowiki> [[Bfbot]] M https://esolangs.org/w/index.php?diff=67297&oldid=67296 * Palaiologos * (+24)
13:47:38 -!- kspalaiologos has quit (Quit: Quit).
13:50:06 -!- kspalaiologos has joined.
13:50:47 <kspalaiologos> Greetings
13:50:59 <kspalaiologos> =help
13:50:59 <bfbot> bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot.
13:50:59 <bfbot> Commands: =str =def =undef =list =plist =doc. More help at https://esolangs.org/wiki/bfbot
13:58:10 <kritixilithos> =list
13:58:10 <bfbot> 8ball echo f msg1 simple wiki
13:58:17 <kritixilithos> =plist
13:58:17 <bfbot> 8ball echo f msg1 simple wiki
13:58:49 <kritixilithos> =doc msg1
13:58:49 <bfbot> Error: no documentation for msg1.
13:59:01 <kritixilithos> =msg1 test
13:59:01 <bfbot> @APQ`apq....
13:59:01 <lambdabot> Unknown command, try @list
14:00:02 <kspalaiologos> =help
14:00:02 <bfbot> bfbot is a bot executing brainfuck natively. You may add your very own commands to the bot.
14:00:02 <bfbot> Commands: =str =def =undef =list =plist =doc. More help at https://esolangs.org/wiki/bfbot
14:00:35 <kspalaiologos> =str 0s >++++++++++>+>+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<<]>.>>[[-]<[>+<-]>>[<<+>+>-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>+>+<<<-[>+<-]]]]]]]]]]]+>>>]<<<]
14:00:35 <bfbot> ok
14:00:49 <kspalaiologos> =def 0fib
14:00:49 <bfbot> ok, defined 'fib'
14:00:51 <kspalaiologos> =fib
14:00:51 <bfbot> 011235813213455891442333776109871597258441816765109461771128657463687502512139319641831781151422983204013462692178309352457857028879227465149303522415781739088169632459861023341551655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025203650110743295128009953
14:01:05 <kspalaiologos> =list
14:01:05 <bfbot> 8ball echo f fib msg1 simple wiki
14:01:15 <kspalaiologos> =8ball test 123
14:01:15 <bfbot> It is certain.
14:01:55 <kspalaiologos> =8ball anything
14:01:56 <bfbot> My reply is no.
14:02:12 <kspalaiologos> =8ball A0
14:02:12 <bfbot> Yes - definitely.
14:03:17 <kspalaiologos> =list
14:03:17 <bfbot> 8ball echo f fib msg1 simple wiki
14:03:22 <kspalaiologos> =echo test
14:03:23 <bfbot> test
14:03:25 <kritixilithos> what does msg1 do?
14:03:32 <kspalaiologos> let's check
14:03:33 <kspalaiologos> =msg1
14:03:33 <bfbot> @APQ`apq....
14:03:33 <lambdabot> Unknown command, try @list
14:03:37 <kspalaiologos> oerjan possibly defined it
14:04:08 <kritixilithos> =msg1 oerjan
14:04:08 <bfbot> @APQ`apq....
14:04:09 <lambdabot> Unknown command, try @list
14:04:26 -!- sprocklem has quit (Ping timeout: 240 seconds).
14:04:53 <kspalaiologos> fungot, tell me something
14:04:53 <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
14:11:02 -!- kritixil1 has joined.
14:11:26 <kritixil1> oops why are there two of me
14:12:02 -!- arseniiv has quit (Ping timeout: 240 seconds).
14:12:39 <esowiki> [[Asm2bf]] https://esolangs.org/w/index.php?diff=67298&oldid=67292 * Palaiologos * (+2181) Gisa part
14:12:44 -!- kritixilithos has quit (Ping timeout: 260 seconds).
14:12:47 -!- kritixil1 has quit (Client Quit).
14:13:09 -!- kritixilithos has joined.
14:13:29 -!- wib_jonas has joined.
14:13:54 <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
14:14:12 <wib_jonas> I just defined various different temporary bf snippets to that command, and didn't bother deleting it
14:14:26 <wib_jonas> I wanted to check if the bot still isn't willing to print any non-ascii bytes
14:14:35 <wib_jonas> and apparently it still isn't
14:18:41 <kspalaiologos> I will patch it
14:18:54 <kspalaiologos> but I have added a new feature today
14:19:00 <kspalaiologos> check the bot wiki page
14:19:45 <kspalaiologos> =str 0s 3+[----->+++<]>+.++++++++++++..----.+++.+[-->+<]>.-----------..[--->+<]>.[--->+<]>----.----.---.-----------.+++++++++++++.-------.++++++++++++.+[++>---<]>.---[----->+<]>.+++.-----------.--[->+++<]>.++[--->++<]>+.+[->+++<]>+.++.--.----[->+++<]>.[,.]
14:19:45 <bfbot> ok
14:19:50 <kspalaiologos> =def 0wiki
14:19:51 <bfbot> ok, defined 'wiki'
14:19:53 <kspalaiologos> =wiki bfbot
14:19:53 <bfbot> ..............................................................................bfbot
14:19:59 <kspalaiologos> gosh damn it man
14:20:02 <kspalaiologos> why does it happen
14:20:12 -!- arseniiv has joined.
14:20:59 <kspalaiologos> =str 0s
14:20:59 <kspalaiologos> ++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>.<<<<<<<<<<<<<>>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<<>>>>>>>>>>>>>>.<<<<<<<<<<<<<<>>>>>>>>>>>>>>+++.---<<<<<<<<<<<<<<>>>>>>>++.--<<<<<<<>>>>>>-.+<<<<<<>>>>>>-.+<<<<<<>>>>
14:20:59 <bfbot> ok
14:21:06 <kspalaiologos> >>>>>>>>>---.+++<<<<<<<<<<<<<>>>>>>>>>>>>>>+++.---<<<<<<<<<<<<<<>>>>>>>>>>>>>>-.+<<<<<<<<<<<<<<>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<>>>>>>>>>>>>+.
14:21:09 <kspalaiologos> damn tooo long
14:21:41 <kspalaiologos> =str 0s ++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>.>>----.++++----.++++<.+++.---<<<<<<<++.--<-.+-.+>>>>>>>---.+++>+++.----.+----.++++<<+.->>--.++<-.+>+++.---<<<<<<<<--.++>>>>>>>>-.+++.--<-.+<<<<<<<-.+>>>>>>>>>-.+<<+.-+++.---+.-<<<<<<<-.+<<<<<<.
14:21:42 <bfbot> ok
14:21:47 <kspalaiologos> =def 0wiki
14:21:48 <bfbot> ok, defined 'wiki'
14:21:50 <kspalaiologos> =wiki please work
14:21:50 <bfbot> https://esolangs.org/wiki/
14:21:53 <kspalaiologos> kinda
14:21:57 <kspalaiologos> =str 0a [,.]
14:21:57 <bfbot> ok
14:22:00 <kspalaiologos> =def 0wiki
14:22:00 <bfbot> ok, defined 'wiki'
14:22:02 <kspalaiologos> =wiki bfbot
14:22:02 <bfbot> https://esolangs.org/wiki/
14:22:09 <kspalaiologos> that's kinda pants
14:22:20 <kspalaiologos> =str 0a ,[.,]
14:22:20 <bfbot> ok
14:22:23 <kspalaiologos> =def 0wiki
14:22:23 <bfbot> ok, defined 'wiki'
14:22:26 <kspalaiologos> =wiki bfbot
14:22:26 <bfbot> https://esolangs.org/wiki/bfbot
14:22:28 <kspalaiologos> yay
14:22:40 <kspalaiologos> so you can check this page as it contains new features
14:22:42 -!- kspalaiologos has quit (Quit: Lost terminal).
15:01:37 -!- sprocklem has joined.
15:12:04 -!- kspalaiologos has joined.
15:16:15 <esowiki> [[User talk:Palaiologos]] https://esolangs.org/w/index.php?diff=67299&oldid=67260 * Palaiologos * (+156)
15:39:51 <esowiki> [[Brainfuck]] M https://esolangs.org/w/index.php?diff=67300&oldid=67293 * Palaiologos * (+1) Dead link?
15:56:47 <kspalaiologos> `asmbf db_ 2/db_ 3/rcl r1,1
15:56:48 <HackEso> ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>>>>>>>>>>>>++>>+++<<<<<<<<<<<<<+<<<<[-]>>>>[<<<<<+>>>>>>>>>>+>>>>>+<<<<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>>>[[>>]+[<<]>>-]+[>>]<[<[<<]>+<<<<<<<<<<<<<+>>>>>>>>>>>>>>[>>]<-]<[<<]>[>[>>]<+<[<<]>-]>[>>]<<[-<<]><<<<<<<<<[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<]
15:57:37 <kspalaiologos> `asmbf db_ 2/db_ 3/raw .*/rcl r1,1/raw .*
15:57:37 <HackEso> ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>>>>>>>>>>>>++>>+++*<<<<<<<<<<<<<+<<<<[-]>>>>[<<<<<+>>>>>>>>>>+>>>>>+<<<<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>>>[[>>]+[<<]>>-]+[>>]<[<[<<]>+<<<<<<<<<<<<<+>>>>>>>>>>>>>>[>>]<-]<[<<]>[>[>>]<+<[<<]>-]>[>>]<<[-<<]><<<<<<<<<[-]*<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<]
16:02:12 -!- xkapastel has quit (Quit: Connection closed for inactivity).
16:23:01 <kspalaiologos> I came into realisation
16:23:07 <kspalaiologos> that I spent this much time on codegolf
16:23:07 <kspalaiologos> https://github.com/KrzysztofSzewczyk/codegolf-submissions
16:23:15 <kspalaiologos> 0x40 submissions
16:31:32 <kspalaiologos> `asmbf sto r1, 2
16:31:33 <HackEso> ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>++<<<<[<+>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<-]<[>+<-]>>>>>[<<<<<+>>>>>>>>>>>>>>+<<<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>>>[[>>]+[<<]>>-]+[>>]<[-]<[<<]>[>[>>]<+<[<<]>-]>[>>]<<[-<<]><<<<<<<<<[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<]
16:31:45 <kspalaiologos> `asmbf db_ 5/sto r1, 2
16:31:46 <HackEso> ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>>>>>>>>>>>>+++++<<<<<<<<<<<++<<<<[<+>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<-]<[>+<-]>>>>>[<<<<<+>>>>>>>>>>>>>>+<<<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>>>[[>>]+[<<]>>-]+[>>]<[-]<[<<]>[>[>>]<+<[<<]>-]>[>>]<<[-<<]><<<<<<<<<[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<]
16:38:51 -!- mint_ has joined.
16:40:01 <kspalaiologos> I'm working on https://github.com/KrzysztofSzewczyk/asmbf/pull/28 now
16:40:17 <kspalaiologos> so the memory I/O and stack operations will be a whole lot faster.
16:40:21 <kspalaiologos> and smaller by a half
16:42:10 -!- mint_ has left.
16:51:04 -!- wib_jonas has quit (Remote host closed the connection).
17:07:45 -!- lf94 has left ("WeeChat 2.4").
17:10:20 -!- kspalaiologos has quit (Quit: Leaving).
17:13:26 -!- Preacher883 has joined.
17:14:38 -!- kspalaiologos has joined.
17:16:42 -!- Preacher883 has left.
17:36:59 <esowiki> [[Graverage]] N https://esolangs.org/w/index.php?oldid=67301 * Challenger5 * (+1549) Created page with "Graverage is an automaton/esolang designed by [[User:Challenger5]]. === Program Structure === A Graverage program consists of: * A set of one or more objects, called points..."
17:46:08 -!- sprocklem has quit (Ping timeout: 245 seconds).
17:59:22 <kspalaiologos> @tell oerjan greets! Are you the person who made Malbolge Unshackled?
17:59:22 <lambdabot> Consider it noted.
17:59:27 <kspalaiologos> I
17:59:31 <kspalaiologos> 'm genuinely curious
17:59:43 <kspalaiologos> because I made a lot of malbolge unshackled programs
17:59:57 <kspalaiologos> and an assembler that ultimately created my chess game in Malbolge
18:02:43 <int-e> `? Ørjan
18:02:44 <HackEso> 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.
18:14:25 -!- FreeFull has joined.
18:29:48 <esowiki> [[User:Palaiologos]] M https://esolangs.org/w/index.php?diff=67302&oldid=66264 * Palaiologos * (+354) Slight update
18:32:10 <esowiki> [[EsoInterpreters]] https://esolangs.org/w/index.php?diff=67303&oldid=63677 * Palaiologos * (+191) Deadfish interpreter in Malbolge Unshackled
18:32:35 <kspalaiologos> So I wrote deadfish interpreter in Malbolge
18:32:36 <kspalaiologos> Requires 3,5 gigabytes of RAM to operate.
18:33:06 <kspalaiologos> after it hogs up 20% of your memory, it slowly starts responding to commands at a rate of one per 10 seconds
18:40:23 -!- kritixilithos has quit (Quit: tixe\).
18:43:38 -!- bfbot has quit (Ping timeout: 240 seconds).
18:47:24 -!- b_jonas has joined.
18:59:20 <kspalaiologos> what happened
18:59:24 <kspalaiologos> to my bfbot
18:59:33 <kspalaiologos> may it be outage?
19:00:02 -!- bfbot has joined.
19:23:45 -!- lambdabot has quit (Remote host closed the connection).
19:30:17 -!- lambdabot has joined.
19:30:34 <b_jonas> =echo hello bfbot
19:30:34 <bfbot> hello bfbot
19:31:07 <b_jonas> =echo @botsnack
19:31:07 <bfbot> @botsnack
19:31:15 <lambdabot> :)
19:31:37 <b_jonas> =echo @echo =echo hello
19:31:38 <bfbot> @echo =echo hello
19:31:45 <lambdabot> echo; msg:IrcMessage {ircMsgServer = "freenode", ircMsgLBName = "lambdabot", ircMsgPrefix = "bfbot!~bfbot@206.ip-51-91-102.eu", ircMsgCommand = "PRIVMSG", ircMsgParams = ["#esoteric",":@echo =echo
19:31:51 <lambdabot> hello"]} target:#esoteric rest:"=echo hello"
19:32:07 <b_jonas> =echo @run var"=echo hello"
19:32:08 <bfbot> @run var"=echo hello"
19:32:17 <lambdabot> =echo hello
19:32:32 <b_jonas> uh oh
19:32:45 <b_jonas> these two could be looped
19:35:45 <b_jonas> =set 1s.
19:35:45 <bfbot> No such command. Try =help.
19:35:50 <b_jonas> =str 1s.
19:35:50 <bfbot> ok
19:35:58 <b_jonas> =def 1msg1
19:35:58 <bfbot> ok, defined 'msg1'
19:35:59 <b_jonas> =msg1
19:36:48 <b_jonas> =set 1s++++[->++++<]>[->++++<]>+....
19:36:48 <bfbot> No such command. Try =help.
19:36:52 <b_jonas> =str 1s++++[->++++<]>[->++++<]>+....
19:36:52 <bfbot> ok
19:36:54 <b_jonas> =def 1msg1
19:36:54 <bfbot> ok, defined 'msg1'
19:36:56 <b_jonas> =msg1
19:36:56 <bfbot> AAAA
19:36:59 <b_jonas> =def 1msg0
19:36:59 <bfbot> ok, defined 'msg0'
19:37:00 <b_jonas> =msg0
19:37:01 <bfbot> AAAA
19:37:19 <b_jonas> =echo @run (\s -> var (s ++ show s))"=echo @run (\\s -> var (s ++ show s))"
19:37:19 <bfbot> @run (s -> var (s ++ show s))"=echo @run (\s -> var (s ++ show s))"
19:37:21 <lambdabot> <hint>:1:39: error:
19:37:21 <lambdabot> lexical error in string/character literal at character 's'
19:38:05 <b_jonas> =echo @run (\ s -> var (s ++ show s))"=echo @run (\\s -> var (s ++ show s))"
19:38:05 <bfbot> @run ( s -> var (s ++ show s))"=echo @run (\s -> var (s ++ show s))"
19:38:07 <lambdabot> <hint>:1:40: error:
19:38:07 <lambdabot> lexical error in string/character literal at character 's'
19:38:21 <b_jonas> it mangles the backslashes?
19:38:32 <b_jonas> whoa
19:41:13 <b_jonas> @run (\s -> (var . tail . init . show) (s ++ show s))"=echo @run (\\s -> (var . tail . init . show) (s ++ show s))"
19:41:14 <lambdabot> =echo @run (\\s -> (var . tail . init . show) (s ++ show s))\"=echo @run (\\...
19:41:20 <b_jonas> ah, too long
19:43:14 <b_jonas> @run (var.ap(++)show)"=echo @run (var.ap(++)show)"
19:43:17 <lambdabot> =echo @run (var.ap(++)show)"=echo @run (var.ap(++)show)"
19:43:24 -!- sprocklem has joined.
19:44:04 <b_jonas> =echo @run (var.ap(++)show)"=echo @run (var.ap(++)show)"
19:44:04 <bfbot> @run (var.ap(++)show)"=echo @run (var.ap(++)show)"
19:44:06 <lambdabot> =echo @run (var.ap(++)show)"=echo @run (var.ap(++)show)"
19:49:33 -!- atriq has changed nick to Taneb.
19:50:51 -!- subleq has quit (Ping timeout: 246 seconds).
19:52:36 -!- subleq has joined.
19:59:39 <b_jonas> =str 1s+++++++++++[->+++++++++<]>-----.+++++++++++++++++++.++++.------------.+++++.---------.
19:59:39 <bfbot> ok
19:59:48 <b_jonas> =str 0s.
19:59:48 <bfbot> ok
20:00:06 <b_jonas> =str 0s++++[->++++<]>[->++++<]>+....
20:00:07 <bfbot> ok
20:00:11 <b_jonas> =def 0msg1
20:00:11 <bfbot> ok, defined 'msg1'
20:00:13 <b_jonas> =msg1
20:00:13 <bfbot> AAAA
20:00:40 <b_jonas> ^def quine ul (=quine)S
20:00:40 <fungot> Defined.
20:00:47 <b_jonas> =def 1quine
20:00:48 <bfbot> ok, defined 'quine'
20:00:49 <b_jonas> =quine
20:00:49 <bfbot> ^quine
20:00:58 <b_jonas> ^quine
20:00:58 <fungot> =quine
20:00:58 <bfbot> ^quine
20:04:27 <b_jonas> =echo `thanks bfbot
20:04:27 <bfbot> `thanks bfbot
20:04:28 <HackEso> Thanks, bfbot. Thot.
20:05:04 <b_jonas> =echo `echo =echo `thanks bfbot
20:05:04 <bfbot> `echo =echo `thanks bfbot
20:05:06 <HackEso> ​=echo `thanks bfbot
20:06:12 <b_jonas> ^echo =echo hello
20:06:12 <fungot> =echo hello =echo hello
20:06:13 <bfbot> hello =echo hello
20:25:53 -!- kspalaiologos has quit (Quit: Leaving).
20:26:24 -!- wmww has quit (*.net *.split).
20:28:16 -!- kspalaiologos has joined.
20:28:45 <kspalaiologos> b_jonas: check the wiki page, I added a few modes for Brainfuck interpreter
21:02:45 -!- hppavilion[1] has joined.
21:03:31 <b_jonas> hello hppavilion
21:05:32 -!- arseniiv_ has joined.
21:09:53 -!- Lykaina_ has joined.
21:11:04 -!- Hooloo42 has joined.
21:12:17 -!- arseniiv has quit (Read error: Connection reset by peer).
21:12:17 -!- Hooloovo0 has quit (Remote host closed the connection).
21:12:17 -!- relrod has quit (Ping timeout: 240 seconds).
21:12:17 -!- Lykaina has quit (Ping timeout: 240 seconds).
21:12:55 -!- relrod has joined.
21:12:57 -!- relrod has quit (Changing host).
21:12:57 -!- relrod has joined.
21:18:47 -!- xkapastel has joined.
21:28:16 -!- kiwi-doorframe has joined.
21:29:42 -!- kiwi-doorframe has quit (Client Quit).
21:36:29 -!- hppavilion[1] has quit (Ping timeout: 276 seconds).
21:43:28 -!- hppavilion[1] has joined.
21:55:20 -!- hppavilion[1] has quit (Ping timeout: 276 seconds).
22:08:15 -!- kspalaiologos has quit (Ping timeout: 265 seconds).
22:12:04 -!- arseniiv_ has quit (Quit: gone completely :o).
22:16:30 -!- hppavilion[1] has joined.
22:26:43 -!- hppavilion[1] has changed nick to \.
22:26:52 <\> Weird that this is allowed.
22:26:58 -!- \ has changed nick to hppavilion[1].
22:28:10 <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
22:30:58 <hppavilion[1]> >ː(
22:32:24 -!- sprocklem has quit (Ping timeout: 252 seconds).
22:36:07 <fizzie> `` echo $HOME # Hm, I didn't realize this was set.
22:36:09 <HackEso> ​/tmp
22:36:43 <fizzie> Guess it's usual for HackEso-golfing, since ~ is shorter than /tmp.
22:36:46 <fizzie> s/usual/useful/
22:42:57 <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.
22:43:49 <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
22:48:04 <fizzie> I guess arguably if you say "CASEMAPPING=rfc1459" you should use that case-mapping, even if ~ isn't supported.
22:48:19 <fizzie> (Wasn't this network ascii at some point?)
22:48:39 <b_jonas> fizzie: the casemapping matters for channel names
22:48:50 <b_jonas> fizzie: and yes, the casemapping on freenode changed when they changed services
22:49:04 <b_jonas> and I still don't know what they did with nickserv registrations that suddenly started to clash
22:49:11 <b_jonas> or channel registrations
22:49:19 <b_jonas> but all that is old history, they changed very long ago
22:53:49 <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.
22:54:45 <esowiki> [[Turing Machine But Way Worse]] https://esolangs.org/w/index.php?diff=67304&oldid=63107 * Ais523 * (+824) /* Computational class */ TC
22:55:11 <kingoffrance> i thought that was the use of "raw" mode: specifically for <things that are not terminals, so dont do any "cooked" "processed" i/o magic>
22:55:17 <kingoffrance> that sounds like a good thing to me
22:59:18 <fizzie> Maybe that makes sense. I'm just not sure what effect it has here.
23:01:11 <fizzie> The commit message just says "Make sure everything is uncooked."
23:03:10 <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
23:03:20 <kingoffrance> s/have a terminal/& attached/
23:03:57 <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"
23:04:39 <kingoffrance> "translate" meaning alter/otherwise mangle/etc.
23:06:57 -!- hppavilion[1] has quit (Ping timeout: 240 seconds).
23:08:31 <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"
23:13:56 <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.
23:14:09 <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.
23:14:14 <fizzie> So it does some amount of "forwarding" of these attributes.
23:18:16 -!- FreeFull has quit.
23:36:16 <b_jonas> fungot, what are the two most famous operas written by Rossini?
23:36:16 <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.
23:36:33 <b_jonas> um
23:36:35 <b_jonas> ok
23:37:12 <fizzie> For the record, it's probably talking about Stalin, the optimizing Scheme compiler.
23:37:14 -!- subleq has quit (Ping timeout: 240 seconds).
23:38:11 <b_jonas> he does make some sense, for a chilled glass bottle may be just as classy as an opera
23:38:20 <kingoffrance> stalin singing a C note
23:39:15 -!- subleq has joined.
23:44:00 <b_jonas> yes, that too
23:44:53 <b_jonas> so how about Guillaume Tell, fungot?
23:44:53 <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...
23:45:28 <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
23:46:38 <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
23:46:44 -!- sprocklem has joined.
23:46:56 <b_jonas> `quote 1215
23:46:56 <HackEso> 1215) <b_jonas> fungot, do you like running double exponential time algorithms? <fungot> b_jonas: im not sure
23:48:25 <b_jonas> `quote 1323
23:48:26 <HackEso> 1323) <b_jonas> I don't care for the bf backend as long as it doesn't make the rest of ayacc harder to sue
23:48:33 <b_jonas> on the other hand there are these two related entries:
23:48:36 <b_jonas> `wisdom ^
23:48:37 <HackEso> hppavilion^k//hppavilion^k is a k-tuple of elements of hppavilion.
23:48:46 <b_jonas> `? ^
23:48:47 <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.
23:49:02 <b_jonas> `quote 1260
23:49:03 <HackEso> 1260) <b_jonas> shachaf: different notation. -o is logical or in find, but it's linear implication in linear logic
←2019-11-20 2019-11-21 2019-11-22→ ↑2019 ↑all