←2019-09-27 2019-09-28 2019-09-29→ ↑2019 ↑all
00:18:10 -!- hakatashi1 has joined.
00:18:37 -!- hakatashi has quit (Read error: Connection reset by peer).
00:19:09 <shachaf> OK, I have a solution to NP.
00:22:15 <zzo38> What solution is that?
00:22:53 <shachaf> You have f : 2^k -> 2 and you're looking for x such that f(x) = 1
00:23:05 <shachaf> You have k prisms.
00:23:32 <shachaf> You activate prisms until you've either activated k, or seen a blue light, and then you stop.
00:24:25 <shachaf> Then you have a partial bit string, where each R corresponds to 0, B corresponds to 1, and the rest of the bits are unknown.
00:25:18 <shachaf> You ask your B prism what the rest of the bits are, and then you pass that information on to each of your R prisms, along with your known bits.
00:25:44 <shachaf> Now you have a full bit string and you can test f on it. If f(x) = 1, you tell all your prisms you find a solution, and then they pass it on to their prisms, and so on.
00:26:09 <shachaf> There are 2^k/2 worlds that just got a B, 2^k/4 worlds that got RB, and so on.
00:39:42 -!- sprocklem has quit (Read error: Connection reset by peer).
00:41:14 -!- sprocklem has joined.
00:44:59 <fizzie> I guess I don't understand the premise. If you stop activating prisms at the first blue flash, wouldn't you only have (for n=4) only the five worlds that saw the sequences B, RB, RRB, RRRB and RRRR?
00:47:22 <fizzie> Oh, I guess it doesn't work that way, because all those other worlds must have a different single-B world to talk to.
00:47:31 <fizzie> Weird stuff, though.
00:49:19 <shachaf> Right. I think that if you split yourself once into A and B, and then B activates a prism to split into C and D, there must be two copies of A as well.
00:49:30 <shachaf> One connected to C and one connected to D.
00:49:55 <kmc> hm
00:49:55 <shachaf> So if you just indiscriminately activate k prisms, you get 2^(2^k-1) worlds, or something.
00:50:07 <kmc> because A can talk to the original who can talk to B who can talk to C and D?
00:50:09 <kmc> hm
00:50:14 <kmc> it's confusing
00:50:19 <kmc> can you implement this?
00:50:41 <shachaf> What do you mean, original?
00:51:09 <shachaf> Say you take this action: You activate prism 1 and, if it flashes red, you activate prism 2.
00:51:27 <shachaf> If it flashes blue, you type "What color did prism 2 flash?" into it.
00:52:22 <fizzie> The way I was thinking about it, after the split to C and D, they both still have that first prism, which can't both talk to A, so there must be A_C and A_D.
00:52:37 <shachaf> Right.
00:52:48 <shachaf> I think that's the only reasonable answer.
00:53:02 <shachaf> Effectively A is part of B's universe, so when B splits, A must split too.
00:56:20 -!- oerjan has joined.
01:13:32 <fizzie> So it's not really a directed binary tree of worlds where each of the non-leaf node represents a prism activation in the past, but rather it's an undirected tree of worlds, and every time any node activates a prism, you make a copy of the entire tree and link the (now two) prism-activating worlds together with an edge that represents what that prism connects.
01:38:34 <esowiki> [[Resource]] N https://esolangs.org/w/index.php?oldid=66352 * A * (+286) Created page with "[[Resource]] ([Re]stricted [source]) is a [[queue]]-based [[Esoteric programming language|EPL]] created with restricted source challenges in mind. It currently sucks at these..."
01:42:52 <fizzie> I think it's also always a connected subgraph of Q_n (where n is the total number of prism activations that have happened in the multiverse) with all the vertices but only some of the edges. And since you're arranged for there to be n activations overall, the standard n-bit string labels of Q_n will probably be the n-bit inputs of your f.
01:42:57 <fizzie> I've convinced myself that works. Can you buy these prisms on Amazon?
01:43:32 <zzo38> Can you invent a esolang based on this?
01:44:22 <fizzie> Sounds like you should be able to.
01:44:26 <kmc> i need some diagrams
01:44:31 <kmc> and yeah
01:44:34 <kmc> it sounds like a fun esolang
01:44:40 <kmc> or an esolib for some other language
01:45:04 <fizzie> (Got to sleep now.)
01:45:16 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66353&oldid=66352 * A * (+683)
01:45:29 <kmc> 'night fizzie
01:45:43 <kmc> shachaf: smells like a continuation / monad, maybe
01:45:55 <kmc> i mean, you can probably implement this evaluation model using one of those
01:47:15 -!- Sgeo has joined.
01:56:58 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66354&oldid=66353 * A * (+589)
01:59:29 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66355&oldid=66354 * A * (+36) I have to be busy for a while
01:59:59 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66356&oldid=66355 * A * (+85) /* Instructions */
02:08:08 <zzo38> Yes, maybe, you can try to do in Haskell, to see if it work
02:09:09 <kmc> imo implement it with fork() and pipes
02:09:41 <kmc> like that thing i did in a past life
02:11:27 <kmc> shachaf: oh, did you read _Recursion_ by Blake Crouch
02:11:56 <kmc> highly recommend
02:13:40 <kmc> forgot if i already recommended it
02:13:52 <shachaf> have not read it or heard of it
02:14:07 <shachaf> did you play the puzzle game Recursed
02:15:27 <kmc> no
02:17:24 <kmc> what's it like
02:18:29 <shachaf> recursive
02:18:42 <shachaf> you can jump into boxes that contain copies of rooms and so on
02:44:16 -!- rodgort has quit (Ping timeout: 265 seconds).
02:45:08 -!- rodgort has joined.
02:49:22 -!- Lykaina has joined.
03:20:53 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66357&oldid=66356 * A * (+52)
03:32:30 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66358&oldid=66357 * A * (+51) /* Implementation */ Okay
03:34:03 <esowiki> [[Language list]] M https://esolangs.org/w/index.php?diff=66359&oldid=66342 * A * (+15) /* C */ Add the relatively interesting language
03:50:52 -!- zzo38 has quit (Ping timeout: 245 seconds).
03:54:04 -!- zzo38 has joined.
03:54:56 -!- xkapastel has joined.
03:57:21 <zzo38> On Monday when I played GURPS game, I used the word "wabe", which was used by Lewis Carroll before, isn't it?
04:27:52 <oerjan> 'twas brillig, and the slithy toves did gyre and gimble in the wabe
04:28:47 <oerjan> wow i spelled that correctly
04:30:18 <zzo38> I think what they said is that "wabe" refers to the grass plot around a sundial, and this is the way it was used in the GURPS game.
04:30:29 <shachaf> `grWp wabe
04:30:30 <HackEso> eol:EOL stands for End Of Lawn. It's often found past the wabe. oerjan requests your presence there immediately.
04:47:27 -!- QazNotQuaz has joined.
04:47:57 -!- Lord_of_Life has quit (Ping timeout: 240 seconds).
04:51:03 -!- Lord_of_Life has joined.
04:57:15 <zzo38> I wrote unreferenced footnotes, recursive footnotes, footnotes that themself have footnotes, footnote references without a corresponding footnote, footnotes numbered in unusual ways, and then there is footnote 2 on session 19; what other stuff with the footnotes would there be?
05:07:16 -!- QazNotQuaz has quit (Remote host closed the connection).
05:12:42 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66360&oldid=66358 * A * (+652) /* DISCHARM THE B.O.M.B.! */
05:15:01 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66361&oldid=66360 * A * (+378) /* Useful Instructions (I am not sure whether they are useful in restricted source contests though) */
05:17:49 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66362&oldid=66361 * A * (+39) /* Useful Instructions (I am not sure whether they are useful in restricted source contests though) */
05:38:41 <kmc> `cat bin/grWp
05:38:42 <HackEso> grwp -i "$@"
05:38:49 <kmc> `cat bin/grwp
05:38:50 <HackEso> ​#! /bin/bash \ cd wisdom; shopt -s dotglob; grep -R "$@" -- *
05:39:12 <kmc> `` ls wisdom | paste
05:39:13 <HackEso> https://hack.esolangs.org/tmp/paste/paste.7592
05:39:26 <kmc> `` /bin/ls wisdom | paste
05:39:27 <HackEso> https://hack.esolangs.org/tmp/paste/paste.12817
05:39:41 <kmc> that's a lot of wisdom
05:40:45 <kmc> `` cat "wisdom/$(/bin/ls wisdom | shuf | head -n 1)"
05:40:46 <HackEso> augur took no cakes, but he's a linguist.
05:40:48 <kmc> `` cat "wisdom/$(/bin/ls wisdom | shuf | head -n 1)"
05:40:49 <HackEso> Nothing happens.
05:40:51 <kmc> `` cat "wisdom/$(/bin/ls wisdom | shuf | head -n 1)"
05:40:51 <HackEso> Everything's better with `mk.
05:41:30 <kmc> `` w="$(/bin/ls wisdom | shuf | head -n 1)"; echo -n "$w: "; cat wisdom/"$w"
05:41:31 <HackEso> ​🐐: 🐐 <(Unicode goat laments your inability to render Unicode goat.)
05:41:34 <kmc> `` w="$(/bin/ls wisdom | shuf | head -n 1)"; echo -n "$w: "; cat wisdom/"$w"
05:41:35 <HackEso> wisdom.pdf: Nicely formatted classical wisdoms and quotes book at https://www.dropbox.com/s/fyhqyvy3i8oh25m/wisdom.pdf
05:41:39 <kmc> `` w="$(/bin/ls wisdom | shuf | head -n 1)"; echo -n "$w: "; cat wisdom/"$w"
05:41:40 <HackEso> roborosewater: RoboRosewater is generating random Magic: the Gathering cards, see https://mobile.twitter.com/roborosewater
05:42:35 <shachaf> `w
05:42:35 <HackEso> baba//BABA IS ¯\(°​_o)/¯
05:42:42 <shachaf> `5 w
05:42:44 <HackEso> 1/2:synergy//Synergy is when the whole is greater than the sum of its parts. A possible future Uncontrolled Synergy Scenario is a looming existential threat to humanity. \ orin//orin is oren's evil twin, stalking him from the other side of the international date line. \ england//England is a conspiracy of cartographers. \ comedogenic//comedogenic is something that causes comedy when applied to the skin, e.g. an accelerated cream pie in parabolic
05:42:46 <shachaf> `n
05:42:46 <HackEso> 2/2:motion. \ cuisine//Cuisine is the posh cousin of cooking.
05:43:05 <kmc> `` paste < bin/w
05:43:06 <HackEso> https://hack.esolangs.org/tmp/paste/paste.22039
05:43:13 <kmc> `` paste < bin/wisdom
05:43:13 <HackEso> https://hack.esolangs.org/tmp/paste/paste.20622
05:43:39 <kmc> bot
05:43:42 <kmc> `` w="$(/bin/ls wisdom | shuf | head -n 1)"; echo -n "$w: "; cat wisdom/"$w"
05:43:42 <HackEso> smileyiese: smileyieses is the plural of smiley.
05:44:59 <kmc> `w mushroom
05:44:59 <HackEso> mushroom//A mushroom is a fungus that grows above ground, especially after rain.
05:45:01 <shachaf> `cbt w
05:45:02 <HackEso> wisdom "$@"
05:45:04 <shachaf> `cbt wisdom
05:45:06 <HackEso> ​#!/bin/sh \ f=$(find wisdom -ipath "wisdom/*$1*" -type f -print0 | shuf --random-source=/dev/urandom -z -n1); if [ -n "$f" ]; then echo -n "${f#wisdom/}//"; cat "$f"; else echo "That's not wise."; fi | rnooodl
05:45:14 <kmc> `cbt bin/cbt
05:45:15 <HackEso> cat: bin/bin/cbt: No such file or directory
05:45:22 <kmc> `cbt cbt
05:45:22 <HackEso> cat bin/"$1"
05:45:33 <kmc> some p. fancy aliases here
05:45:40 <kmc> `` ls bin | paste
05:45:41 <HackEso> https://hack.esolangs.org/tmp/paste/paste.25458
05:46:08 <kmc> `` wc -l bin/* | sort -nr | paste
05:46:10 <HackEso> https://hack.esolangs.org/tmp/paste/paste.18402
05:46:32 <kmc> `` wc -c bin/* | sort -nr | paste
05:46:33 <HackEso> https://hack.esolangs.org/tmp/paste/paste.19174
05:46:50 <kmc> `file bin/udcli
05:46:51 <HackEso> bin/udcli: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, for GNU/Linux 2.6.26, BuildID[sha1]=de5daa4389e466f31e31fde064e80be5907986ba, stripped
05:47:03 <kmc> `` file bin/* | paste
05:47:06 <HackEso> https://hack.esolangs.org/tmp/paste/paste.6883
05:47:39 <kmc> `` file bin/* | cut -d: -f2- | sort | uniq -c | sort
05:47:41 <HackEso> ​ 11 ASCII text \ 12 POSIX shell script, ASCII text executable \ 12 POSIX shell script, ASCII text executable \ 13 ASCII text \ 13 ASCII text \ 14 POSIX shell script, ASCII text executable \ 15 ASCII text \ 1 a /bin/dash script, ASCII te
05:47:41 <kmc> `` file bin/* | cut -d: -f2- | sort | uniq -c | sort -nr | paste
05:47:43 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66363&oldid=66362 * A * (+214) /* Explanation */
05:47:44 <HackEso> https://hack.esolangs.org/tmp/paste/paste.25767
05:47:51 <kmc> lol
05:48:29 <kmc> a momentary diversion on the road to the grave
05:48:38 * kmc hugs HackEso
05:48:38 <shachaf> `dobg udcli
05:48:40 <HackEso> 4426:2014-02-09 <km̈c> mv udcli bin/ && chmod +x bin/udcli
05:49:43 <oerjan> `doag udcli
05:49:45 <HackEso> 4426:2014-02-09 <km̈c> mv udcli bin/ && chmod +x bin/udcli \ 4425:2014-02-09 <km̈c> fetch http://ugcs.net/~keegan/drop/udcli
05:50:27 <kmc> so weird
05:50:29 <kmc> being alive
05:50:35 <kmc> time passing, etc
05:50:59 <kmc> when did i first set foot in this channel?
05:51:07 <kmc> 2009?
05:51:16 <pikhq> The passing of time confuses and infuriates me.
05:51:23 <kmc> not sure if it was because of shachaf or cheater
05:51:40 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66364&oldid=66363 * A * (+50) No comments though. :(
06:03:56 -!- xkapastel has quit (Quit: Connection closed for inactivity).
06:35:54 -!- oerjan has quit (Quit: Nite).
06:40:49 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66365&oldid=66364 * A * (-19) /* Useful Instructions (I am not sure whether they are useful in restricted source contests though) */
06:42:27 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66366&oldid=66365 * A * (+22) /* Salary program */
06:42:55 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66367&oldid=66366 * A * (+0) /* Salary program */
06:46:57 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66368&oldid=66367 * A * (+0) /* Salary program */
06:55:17 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66369&oldid=66368 * A * (+0) /* Salary program */
07:53:52 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66370&oldid=66369 * A * (+59)
08:28:20 <rain2> hello
08:28:35 <rain2> let us define x = y to mean that for all contexts C, C[x] halts iff C[y] halts
08:28:48 <rain2> what do you think about this?
08:29:18 <rain2> it could be used for a notion of observational equality or to differentiate between expressions in a programming language
08:42:25 -!- MDead has joined.
08:44:50 -!- MDude has quit (Ping timeout: 265 seconds).
08:44:54 -!- MDude has joined.
08:45:06 <esowiki> [[Talk:Woefully]] https://esolangs.org/w/index.php?diff=66371&oldid=52059 * Kritixilithos * (+1545) turing-completeness?
08:47:17 -!- MDead has quit (Ping timeout: 240 seconds).
09:27:11 -!- xkapastel has joined.
09:30:36 -!- Sgeo_ has joined.
09:34:08 -!- Sgeo has quit (Ping timeout: 265 seconds).
10:01:08 <int-e> rain2: In lambda calculus that's "observational equivalence wrt normal forms" (or whatever your precise notion of "halting" is)
10:03:11 <int-e> `? rpm
10:03:12 <HackEso> rpm? ¯\(°​_o)/¯
10:03:45 <int-e> `learn RPM is short for "rapid piece movement", a phenomenon often seen in bullet chess.
10:03:47 <HackEso> Learned 'rpm': RPM is short for "rapid piece movement", a phenomenon often seen in bullet chess.
10:08:53 <int-e> rain2: I don't know who first studied this kind of things. Böhm is a strong candidate, but far from the only one.
10:09:12 <rain2> OK
10:10:07 -!- APic has quit (Ping timeout: 268 seconds).
10:32:38 -!- APic has joined.
11:28:49 <esowiki> [[Mice in a maze]] https://esolangs.org/w/index.php?diff=66372&oldid=58069 * TwilightSparkle * (+179) Infinite Loop
11:29:49 <esowiki> [[Mice in a maze]] M https://esolangs.org/w/index.php?diff=66373&oldid=66372 * TwilightSparkle * (+30) /* Infinite Loop */
12:16:47 -!- arseniiv has joined.
12:27:58 <esowiki> [[Resource]] https://esolangs.org/w/index.php?diff=66374&oldid=66370 * A * (+97) /* DISCHARM THE B.O.M.B.! */ I am glad that this works
12:46:53 -!- xkapastel has quit (Quit: Connection closed for inactivity).
13:38:37 -!- Sgeo__ has joined.
13:42:15 -!- Sgeo_ has quit (Ping timeout: 268 seconds).
13:53:25 <esowiki> [[BF instruction minimalization]] https://esolangs.org/w/index.php?diff=66375&oldid=62527 * TonyBrown148 * (+637) /* TonyBrown148's attempt */ 3 command
13:54:10 <esowiki> [[BF instruction minimalization]] M https://esolangs.org/w/index.php?diff=66376&oldid=66375 * TonyBrown148 * (-1) /* TonyBrown148's attempt */
13:57:30 <esowiki> [[Resource]] https://esolangs.org/w/index.php?diff=66377&oldid=66374 * A * (-2) /* DISCHARM THE B.O.M.B.! */
13:59:49 <esowiki> [[BF instruction minimalization]] M https://esolangs.org/w/index.php?diff=66378&oldid=66376 * A * (-540) /* Iamcalledbob's attempt */
14:00:35 <esowiki> [[BF instruction minimalization]] M https://esolangs.org/w/index.php?diff=66379&oldid=66378 * A * (+540) Undo revision 66378 by [[Special:Contributions/A|A]] ([[User talk:A|talk]])
14:00:49 <esowiki> [[BF instruction minimalization]] https://esolangs.org/w/index.php?diff=66380&oldid=66379 * A * (-540) Undo revision 66379 by [[Special:Contributions/A|A]] ([[User talk:A|talk]])
14:01:20 <esowiki> [[BF instruction minimalization]] M https://esolangs.org/w/index.php?diff=66381&oldid=66380 * A * (+540) Undo revision 66380 by [[Special:Contributions/A|A]] ([[User talk:A|talk]])
14:01:35 <esowiki> [[BF instruction minimalization]] https://esolangs.org/w/index.php?diff=66382&oldid=66381 * TonyBrown148 * (+239) /* TonyBrown148's attempt */ 2 command
14:06:05 <esowiki> [[Resource]] https://esolangs.org/w/index.php?diff=66383&oldid=66377 * A * (+71) Oh no, what will they say?
14:08:39 <esowiki> [[Resource]] M https://esolangs.org/w/index.php?diff=66384&oldid=66383 * A * (-1) /* Implementation */ This happenedddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
14:41:21 <esowiki> [[Resource]] https://esolangs.org/w/index.php?diff=66385&oldid=66384 * A * (+0) /* Useful Instructions (I am not sure whether they are useful in restricted source contests though) */ Opposite!
15:17:14 -!- MDude has quit (Ping timeout: 240 seconds).
15:36:02 -!- APic has quit (Ping timeout: 240 seconds).
15:36:28 -!- APic has joined.
16:00:42 -!- xkapastel has joined.
16:27:57 -!- APic has quit (Ping timeout: 245 seconds).
16:31:50 -!- APic has joined.
16:32:37 -!- Sgeo_ has joined.
16:35:36 -!- Sgeo__ has quit (Ping timeout: 240 seconds).
16:44:21 <izabera> hey
16:44:34 <izabera> someone here wrote a terminal emulator i think
16:45:12 <izabera> was it oerjan?
16:45:39 * FireFly wonders if there's an actual question hidden behind the statement
16:47:15 -!- Lord_of_Life_ has joined.
16:50:02 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
16:50:08 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
16:50:48 <izabera> i'm writing a thingy
16:51:03 <izabera> that needs some special escape sequences
16:51:28 <izabera> and i've been reading https://invisible-island.net/xterm/ctlseqs/ctlseqs.html for a while without finding what i can use for my custom sequences
16:54:34 <FireFly> I think you could use OSC in theory
16:55:20 <FireFly> There's a ##tty which has some knowledgeable folks, I'd think LeoNerd would know since they have a fair buncha terminal emulation experience (both on the terminal emulator side and the application side)
16:56:57 <FireFly> There's also other space for more extravagant custom CSI-prefixed escape seqs I think, in the grammar for them that ECMA-48 specifies
16:57:32 <FireFly> (ECMA-48 also has an ANSI and an ISO/IEC name, but apart from being easier to remember, it's also helpful that ECMA releases their pdfs for free so you can just google it and grab the spec)
16:58:30 <FireFly> There is a grammar for escape seqs starting with CSI that is basically.. CSI followed by intermediate bytes followed by parameter bytes followed by a terminating byte.. and I think most of the space where you add intermediate bytes is unoccupied/unused
16:58:37 <zzo38> What special escape sequences do you need?
16:58:47 <FireFly> ^ also wondering that, because it sounds interesting :)
16:59:54 <FireFly> oh whoops, it's parameter then intermediate then final byte
17:00:25 <FireFly> http://xen.firefly.nu/up/2019-09-28_190010.png (from ECMA-48)
17:01:10 <FireFly> I think most escape seqs are either using no intermediate byte, or just a '?', but there's more room for other more exotic intermediate byte values, or extending it to more than one byte..
17:01:57 <FireFly> (they express bytes funnily, but really e.g. 07/14 is just 0x7E, etc in that excerpt)
17:02:58 <izabera> thanks FireFly!
17:03:21 <izabera> i had little success in the past asking in ##tty
17:04:25 <zzo38> Is it acceptable to put two question marks instead of just one?
17:05:12 <shachaf> I know someone who wrote a terminal emulator, but isn't in this channel.
17:05:28 <shachaf> I had a bunch of ideas of what I'd like a terminal emulator to be like and I was considering writing it.
17:05:38 <shachaf> It'd be more a combination terminal emulator/shell, probably.
17:05:39 <FireFly> zzo38: yes
17:05:50 <FireFly> shachaf: I'm curious (I've had ideas along these lines)
17:07:12 <shachaf> Hmm, I don't remember the details anymore. I could find old chat logs where I talked about them probably.
17:07:38 <shachaf> I think each command should be able to run independently, with its own output stream/pty.
17:07:58 <FireFly> okay, this sounds a lot like thoughts I've had :p
17:08:02 <shachaf> And the shell/terminal emulator interface should be much richer than a text interface.
17:08:04 <FireFly> like scarily similar
17:08:34 <shachaf> The terminal emulator should just automatically "time" every command and remember a bunch of information about it, which you can get through the UI.
17:09:34 <shachaf> Golly.
17:09:59 <shachaf> A thing I use a lot right now is ^Z/fg.
17:10:13 <FireFly> job control is sweet
17:10:24 <shachaf> Instead of that I'd like to just keep an old command running and type into a prompt underneath it which will have its own pty.
17:10:29 -!- APic has quit (Ping timeout: 276 seconds).
17:10:34 <FireFly> *nod*
17:10:43 <izabera> so i have this idea
17:10:45 <shachaf> I'd like each command to have its own searchable output buffer, rather than piping things into less.
17:10:58 <izabera> my program is a shell manager thingy
17:11:47 <shachaf> FireFly: Since your program is identical to mine in every respect, you should implement it so I don't have to, twh
17:12:24 <shachaf> I was kind of going to do this, but first I needed to write my own UI library, so I started doing that, but then I wanted to make my own programming language for it.
17:12:29 <shachaf> You know, the usual story.
17:13:33 -!- APic has joined.
17:13:42 <FireFly> https://pbs.twimg.com/media/DJXrLg2XoAAJcfd?format=png&name=medium here's an old random mockup of some of my thoughts (the point here isn't really the visual bits of the UI, but more having a command-line interface (as opposed to a "your terminal is a gird of character cells") where each job gets its own usual-character-grid output block (for compat reasons and whatnot if nothing else, because I wouldn't
17:13:42 <FireFly> want to reinvent everything here)
17:14:32 <shachaf> FireFly: Also have you seen mzero's old project plush?
17:14:37 <FireFly> nope
17:14:48 <shachaf> https://github.com/mzero/plush
17:15:15 <shachaf> It's not quite the thing I want but it might be the closest someone has made.
17:15:19 <FireFly> w*nod*
17:15:24 <FireFly> -w
17:16:37 <shachaf> I went to a talk about it and he talked about all the things I'm sure you've thought of too, like how ridiculous it is to press enter a bunch of times to fill the screen with prompts so you can see where a command started when you scroll up.
17:16:58 <FireFly> *nod*
17:17:23 <shachaf> Anyway I don't want a web UI, obviously.
17:17:30 <FireFly> sure
17:18:41 <zzo38> Can the terminal emulator determine the process ID of the foreground process?
17:18:44 <FireFly> The way I thought about my interface, it should have worked with (existing) TUI apps as well (like htop, vim etc)
17:18:46 <shachaf> Anyway, I agree, each command should probably get its own TTY grid interface, but there's no reason for the shell to limit itself that way.
17:19:11 <FireFly> zzo38: I'm pretty sure it couldn't typically in a terminal emulator today
17:19:13 <shachaf> Instead the shell should probably be exposed as an API that the TTY can call.
17:20:14 <shachaf> I agree that it should work with things like htop and vim. For those uses it could just start a full pty (and maybe have a pool of them that it reuses -- I looked into this a bit and it's kind of a mess).
17:20:21 <FireFly> The way I imagined it was to add a few extra escape sequences (in a way that they should be possible for existing terminal emulators to just silently ignore, if they have spec-compliant escape seq parsers) to annotate the stream of data from the shell with some extra in-band metadata
17:20:45 <FireFly> and the most critical bit would be to somehow encode in-band which job (or process or whatever) is producing a certain segment of output
17:20:49 <shachaf> I feel like the shell should just totally break compatibility. It's not compatible with any other terminals, and why should it be?
17:20:57 <shachaf> In-band signaling is scow anyway.
17:21:01 <FireFly> fair
17:21:14 <shachaf> If you want you can use the fancy shell API to implement a simple text-based mode like normal shells.
17:21:40 <FireFly> I don't think I'd do separate pty's per se
17:21:42 <FireFly> maybe
17:21:45 <shachaf> Anyway presumably when you start vim you want it to take over the entire window by default, but you also want to be able to get a prompt, *without* suspending vim.
17:21:47 <FireFly> I don't really know.. heh
17:22:08 <shachaf> One thing that I do a lot is: Edit a program in my editor; ^Z and run the program; fg
17:22:14 <FireFly> yeah, same here
17:22:20 <shachaf> Except if the program is a long-running process, I'm stuck outside of my editor.
17:22:34 <shachaf> It's silly. I don't actually want to suspend the editor, I just want a shell prompt.
17:22:42 <FireFly> well you could ^Z and bg the long-running job, and then fg vim :P
17:22:46 <FireFly> but I get what you mean
17:22:48 <shachaf> (Which is "associated" with the editor in some way, not the same window.)
17:22:58 <shachaf> Sure, but say I'm timing the long-running job or something.
17:23:12 <FireFly> *nod*
17:23:27 <shachaf> Or say I want to look at the code while I type text into an interactive program.
17:23:48 <shachaf> It's just that ^Z/fg isn't really what I want almost all the time. I just want better multiplexing in my terminal.
17:23:50 <FireFly> I would definitely want to be able to run multiple TUI programs at once, and just switch which one I'm sending input to as the 'foreground'
17:23:56 <FireFly> right
17:24:19 <FireFly> anyway, I'm unlikely to actually implement my thoughts, but heh, they're fun to ponder
17:24:23 <shachaf> I also want all the other things like scrolling/searching the output of just one command.
17:24:36 <shachaf> It seems like a pretty basic desideratum in 2019.
17:24:49 <FireFly> mm
17:26:38 <shachaf> plush also shows a list of files on the side of the terminal so you don't have to run ls all the time.
17:26:46 <shachaf> Seems like there are a lot of things like that that you can do.
17:27:48 <FireFly> mm, I'm not sure I'd want to do all of them, but *nod*
17:28:53 <FireFly> I think the thing about the in-band escape seqs that I wanted to do was like... minimal (or small) changes to the shell (at least the way I imagined it) that could let the terminal emulator to a lot more with how it manages and presents output (enabling all these things with separate output blocks for separate jobs and stuff)
17:29:36 <shachaf> I guess that's possible? I think escaping the legacy of VT-100 is a worthy goal.
17:29:38 <FireFly> whereas now it's a bit of a deadlock because there's only so much you can do if you *only* create a new innovative terminal emulator, or *only* a new innovative shell (and you want to remain compatible with existing applications)
17:30:23 <FireFly> I think there's been a number of "actually let's just reinvent everything and cut off existing programs entirely" attempts, but they all seem to fail quickly because there's just too much software out there that's useful that you wouldn't want to reinvent
17:30:40 <FireFly> well, I guess it depends on who you are. I guess say, Microsoft can reinvent all the things with powershell, because they're a big corp and stuff
17:30:50 <FireFly> but I couldn't realistically do that myself
17:30:59 <zzo38> It look like foreground process groups can be figured out at least
17:31:06 <FireFly> oh hm, huh
17:31:07 <shachaf> FireFly: All I'm replacing is the shell, though.
17:31:15 <FireFly> shachaf: *nod*
17:31:29 <shachaf> Programs running in the shell still get a standard pty and a semi-standard terminal emulator.
17:31:36 <FireFly> I just mean that there's several steps to this, and whilst I like the ideal of taking it all the way, I don't think it's practical
17:31:58 <FireFly> I guess we end up on slightly different points along the scale of "today" to "ideal future terminal emulator", but that's fine
17:32:10 <FireFly> shachaf: *nodnod*
17:32:18 <FireFly> yeah, that's sort of the approach I'm thinking too
17:32:29 <shachaf> I think the shell needs to be replaced anyway.
17:33:06 <shachaf> I don't want anything near the complexity of bash.
17:33:17 <FireFly> sure
17:33:36 <shachaf> Shell scripting is probably a bad idea anyway.
17:33:54 <FireFly> a lot of the things that the shell would have been traditionally responsible for (like line editing) I'd like to move to the terminal emulator anyway
17:34:12 <shachaf> Right.
17:34:52 <FireFly> hmm
17:35:04 <shachaf> I don't want to say upfront that the interface between the terminal and the shell is made of escape sequences. I think it can be much richer than what that realistically allows for and it's silly to bound it upfront like that.
17:35:22 <FireFly> maybe I should try to write a simple prototype proof-of-concept shell of what I have in mind
17:35:30 <FireFly> shachaf: that's totally fair
17:35:41 <zzo38> My own ideas of terminal emulator is much like xterm, although a few features are different, such as SVG and HTML screen dumps are not built-in but rather you can configure external programs to execute when those escape codes are received. If you push the break key then it can use tcgetattr() to emulate it.
17:36:09 <FireFly> there's plenty of stuff about escape seqs (and terminals today) that's just bonkers and terrible
17:36:16 * FireFly grumbles about how keystrokes are encoded
17:36:26 <shachaf> Obviously that's all nonsense.
17:36:41 <shachaf> I'd eventually like to move away from TUI programs in general.
17:36:46 <FireFly> *nod*
17:36:52 <FireFly> I have complicated thoughts
17:37:03 <FireFly> I agree in principle
17:37:13 <zzo38> A few new escape codes might be added, such as UTCE character encoding selection, application keyboard mode for the escape key, save states with optional passwords (for security), etc
17:39:00 <zzo38> (Also the ability to select character sets which include characters not in Unicode. This only works if the font supports it, though.)
17:39:40 <shachaf> CP437 is obviously the only thing my terminal supports.
17:40:45 <FireFly> "b) If the first bit combination of the parameter string is in the range 03/12 to 03/15, the parameter string is available for private (or experimental) use. Its format and meaning are not defined by this Standard."
17:40:50 <FireFly> hm
17:41:30 <FireFly> izabera: anyway, digression aside, I think ECMA-48 section 5.4 is what I'd look at for figuring out sensible custom-escape-seq options :P
17:41:35 <zzo38> If the terminal emulator is only for PC, then it can be sense to support only CP437, although one problem with that is that escape codes can interfere unless you have a command to indicate that a character should be interpreted as a graphic rather than control.
17:49:18 <zzo38> Another thing that tcgetattr() could be used for is to figure out what response to give to DECREQTPARM. When connecting to a remote service that might have optional fancy animations or whatever, reporting a lower baud rate could be used as a hint to disable some of the fancy animations.
17:59:57 <zzo38> Possibly a save state command I mentioned before is not needed, since I have another idea.
18:01:00 <zzo38> There can be one escape code which, the first time will save the state and later uses will restore the state; you can include it in your shell prompt. A user command (on a menu or a keyboard combination) can discard the saved state in case you wish to enter a command to permanently change the state.
18:13:42 <shachaf> FireFly: You should totally work on this with me, when I do it.
18:13:54 <FireFly> maybe :o
18:13:59 <shachaf> Which will probably be never? But it might instead be sometime.
18:14:26 <zzo38> Another feature (although not a new control code) is you can program a different mouse cursor shape for when the program has requested mouse events.
18:14:43 <shachaf> I want to set up a good way to write cross-platform GUI programs.
18:16:16 <zzo38> Depending on the program, there is ways, such as SDL
18:18:08 <shachaf> Well, I'm OK with writing my own bindings for X11 and Win32 and whatever.
18:18:28 <shachaf> I feel like the bulk of the work is in making a good UI library.
18:18:37 <shachaf> Even if it's not extremely general.
18:21:45 <zzo38> Can you use Xaw?
18:27:21 <shachaf> No, I want it to be good.
18:27:27 <shachaf> And also portable.
18:32:17 <zzo38> I think that it is not that bad (although, it isn't portable unless you also have a portable X server), although some features it lacks such as displaying the underlined letters to indicate which keys to push
18:40:02 <shachaf> That is the only missing feature, true.
19:02:03 -!- imode has joined.
19:02:14 <imode> new laptop, new me.
19:02:58 <shachaf> `? imode
19:02:59 <HackEso> imode is an Innovative Multicomponent Drug Designer, afflicted by a severe case of the UPPERs.
19:03:28 <imode> LOL.
19:03:33 <imode> I was not aware I had a page.
19:03:53 <imode> or, what would you call that... a quote?
19:04:01 <shachaf> `dowg imode
19:04:08 <HackEso> 11145:2017-08-03 <boil̈y> le/rn imode//imode is an Innovative Multicomponent Drug Designer, afflicted by a severe case of the UPPERs.
19:04:29 <FireFly> I spoke with someone in another channel with the nick inode, the other day
19:04:35 <FireFly> it confused me for a li'l...
19:04:40 <imode> hah.
19:15:03 <arseniiv> BTW has someone here used sound change appliers in a while?
19:15:15 <arseniiv> (hi :D)
19:15:22 <imode> allo. o/
19:18:36 <FireFly> sound change appliers?
19:20:46 <arseniiv> FireFly: basically they take a description of phonetic/phonological rules and apply them to a list of words
19:21:44 <arseniiv> some go for more, there could be dialects sharing some rules and then having each own newer rules, and there are many other features one or the other implements
19:22:13 <FireFly> o
19:23:44 <arseniiv> when conlanging, it can be a hand, though often people say that if you want a naturalistic result, this would be a hard task, as just phonetic changes aren’t enough and there would be many exceptions due to other processes
19:24:01 <arseniiv> a while ago I played with ASCA a bit
19:26:41 <zzo38> Do you know much about Old English, and what sound changes there are?
19:30:47 -!- kspalaiologos has joined.
19:35:19 <kspalaiologos> Hi. Have you guys ever worked on compression of "obese" esolangs?
19:35:27 <kspalaiologos> I'm already trying to figure it out.
19:35:27 <imode> "obese"?
19:35:39 <kspalaiologos> By obese I mean the literal code pottery
19:35:41 <kspalaiologos> like Malbolge
19:35:58 <kspalaiologos> I've had some luck with compressing my malbolge with a burrows-wheeler based compression algo
19:36:06 <kspalaiologos> but I don't feel satisfied enough
19:36:10 <imode> you mean literally compressing the size of the source?
19:36:15 <kspalaiologos> sure
19:36:23 <kspalaiologos> It's too big for any resonable scale tbh
19:36:37 <kspalaiologos> currently my assembler produces 3MB-200MB malbolge programs
19:36:47 <kspalaiologos> the 2048 test program created around 74MB of Malbolge
19:36:57 <kspalaiologos> so the size is pretty much unsalvageable and I can't do anything about it
19:37:19 <kspalaiologos> so the size is pretty much unsalvageable and I can't do anything about it (in terms of organic code shortening, of course)
19:37:37 <imode> I think that's the point of malbolge, to be so large it's nearly incomprehensible.
19:38:09 <kspalaiologos> possibly yes, but I think it would be nice to distribute malbolge programs in smaller form
19:38:31 <kspalaiologos> so one could put it in volume limited areas, then decompress it in an unlimited place
19:38:36 <kspalaiologos> and run it afterwards
19:38:47 <imode> are you assembling _to_ malbolge or assembling malbolge to executables.
19:39:07 <kspalaiologos> I'm assembling to malbolge
19:39:33 <kspalaiologos> from many existing reasons I can't really improve my assembler, but I'm working on it
19:40:19 <imode> are you just generating macro instructions literally.
19:40:40 <kspalaiologos> umm, no
19:40:50 <kspalaiologos> It's impossible to do that
19:41:04 <imode> you didn't get what I said. you're writing some form of assembly, right.
19:41:10 <imode> and you're compiling that down to malbolge.
19:41:22 <kspalaiologos> It's a program that transpiles an assembly-like language into malbolge
19:41:26 <kspalaiologos> an example program:
19:41:33 <imode> okay. so each instruction corresponds to some snippet of malbolge, right.
19:41:52 <kspalaiologos> https://pastebin.com/raw/mnpHXvVp
19:42:08 <kspalaiologos> It's impossible for an instruction to correspond 1:1 to malbolge snippet
19:42:19 <kspalaiologos> because of immutable nop cycles and all the other crazy stuff
19:42:42 <imode> how is that possible.
19:43:00 <kspalaiologos> well. Malbolge encrypts each instruction after it's ran
19:43:12 <kspalaiologos> and the encryption key is dependant of position of command in the source file
19:43:44 <kspalaiologos> to run it once again
19:43:50 <kspalaiologos> e.g. make an immutable instruction
19:43:58 <kspalaiologos> you need to produce different code for different position in file
19:44:03 <kspalaiologos> and the code might differ severely.
19:44:11 <imode> okay, but you have some _template_.
19:44:15 <imode> right.
19:44:27 <kspalaiologos> strictly speaking, kind of
19:44:41 <imode> okay. so you have larger-scale structures in your assembly.
19:44:44 <imode> things like loops.
19:44:50 <imode> initializations of memory, etc.
19:44:57 <kspalaiologos> no indirect loops
19:45:05 <imode> you have large scale structures.
19:45:06 <kspalaiologos> you have to make loops out of comparasion instruction, a jump and a label
19:45:10 <imode> replace those with smaller templates.
19:45:16 <imode> yeah, that's what assembly is.
19:45:16 <kspalaiologos> have you programmed with x86 Assembly?
19:45:27 <imode> yes.
19:45:34 <kspalaiologos> well, then you probably understand
19:45:38 <kspalaiologos> me and my idea
19:45:47 <imode> I've built my own ISAs, yes, I understand.
19:45:49 <kspalaiologos> of making the assembler as low level as possible, because I won't write it by hand
19:46:19 <kspalaiologos> I've already worked on gluing together C to Brainfuck compiler and now I'm having fun with bits and pieces of malbolge
19:46:57 <kspalaiologos> it's probably worth noting that C was a quite bit broad subset
19:47:02 <kspalaiologos> but it's as capable as C
19:47:45 <imode> you're not really getting it, so I'll explain it verbosely: if you have a template for a single instruction (i.e, you see the instruction, then you output a snippet of malbolge with the relevant places filled in), and if you have multiple instructions that make up a larger construct (like a loop, etc.), you can replace the generated sequence of templates with a single template that performs the
19:47:47 <imode> loop.
19:48:19 <kspalaiologos> umm
19:48:23 <kspalaiologos> yes, you'
19:48:32 <kspalaiologos> re right, but I'm not implementing higher level structures
19:48:51 <imode> you're not going to be writing loops in your assembly?
19:48:51 <kspalaiologos> (on the assembly level, of course)
19:48:59 <imode> the point is you're generating them.
19:49:00 <kspalaiologos> indirect, broad loops, nope
19:49:01 <imode> so.
19:49:06 <imode> it still applies.
19:49:18 <kspalaiologos> I think you are correct
19:49:25 <kspalaiologos> but, Malbolge is making this idea harder
19:49:28 <imode> you take 'whatever: add r1, r2, r3; cmp; jnz whatever;'
19:49:34 <imode> and you say "well, that's just a loop"
19:49:36 <kspalaiologos> because if I wanted to create a specific loop construct
19:49:42 <kspalaiologos> I had to write microcode for it
19:49:52 <kspalaiologos> and this would be a really, really, really (x99) hard task
19:50:00 <kspalaiologos> (or rather, a microcode generator)
19:50:25 <kspalaiologos> I'm looking for a lowest common denominator right now
19:50:29 <zzo38> I have used 6502, MMIX, and Glulx, but not the assembly for Malbolge.
19:50:35 <imode> well, you pretty much have two options.
19:51:05 <imode> group together larger scale assembly instructions into smaller templates.
19:51:11 <imode> resulting in smaller snippets of malbolge.
19:51:29 <imode> or compress the whole source using a lossless compression algorithm, and then unpack it incrementally at runtime.
19:51:29 <kspalaiologos> or?
19:51:45 <kspalaiologos> I prefer the second one tho, because the first one is going to take insane amount of time
19:51:49 <kspalaiologos> and I'm probably going to turn insane
19:52:04 <imode> I'd ask why bother, but then I realized what channel I was talking to.
19:52:09 <imode> or talking in, rather.
19:52:45 <kspalaiologos> so
19:52:54 <kspalaiologos> do I have to derive my own algo
19:53:05 <kspalaiologos> or there is something that would suffice
19:53:10 <zzo38> Maybe if you add enough instruction that can result smaller Malbolge codes, then you can.
19:53:19 <kspalaiologos> I've already managed to get 47 megabytes to one megabyte
19:53:25 <kspalaiologos> but it's still too much
19:53:50 <imode> someone built a brainfuck to malbolge compiler, I think you can build an assembler.
19:53:56 <kspalaiologos> zzo38 If i write microcode generator for complex instructions, I will going to turn insane
19:54:03 <kspalaiologos> imode really?
19:54:08 <kspalaiologos> I've seen just the theoretical explanations
19:54:22 <imode> iirc...
19:54:50 <kspalaiologos> well, it's not going to be the most efficient route ever made
19:55:02 <kspalaiologos> C hello world -> 1.5MB of brainfuck -> ???MB of Malbolge
19:55:17 <kspalaiologos> but it seems quite easy, lol
19:55:42 <kspalaiologos> I'll stick to my malbolge assembly idea, because I can port my pseudoC compiler to it
19:58:01 <kspalaiologos> I'm thinking
19:58:07 <kspalaiologos> why shouldn't I made a harvester program
19:58:13 <kspalaiologos> and generate a few random malbolge assembly programs
19:58:26 <kspalaiologos> and the harvester program would generate a dictionary of most used symbols
19:58:40 <kspalaiologos> and then go ahead with a dictionary compression, but with the dictionary built into the decompressor
20:01:11 <imode> <arseniiv> at least I, for a practical language, think of it as a pretty normal thing. Why should a low-level language have unstructured control flow, not all low levels are that low so to be able to execute on a sufficiently simple hardware <-- I really agree with this now. I didn't used to.
20:01:38 <imode> structured control flow is _not_ hard to implement properly and speedily.
20:01:51 <imode> you can even use a jump cache based on the current instruction pointer.
20:03:27 -!- kspalaiologos has quit (Remote host closed the connection).
20:05:44 <imode> one thing I don't like, however, is the idea that break is not required. rather, breaking (and conditional breaking) makes it so you don't have to duplicate code.
20:08:01 <imode> I have to wonder what would change if brainfuck's loops were changed so that the conditional check happened at the end of a loop.
20:08:57 <imode> so instead of while(...) { ... }, you'd have do { ... } while(...)
20:09:50 <FireFly> I believe that's been studied before
20:10:09 <FireFly> I think that'd change quite a lot, since you can't easily do conditionals anymore (since each loop runs at least once)
20:10:32 <imode> interesting.
20:10:35 <shachaf> The other day I realized that if (...) is a loop that executes at most once, and do { ... } while (...) is a loop that executes at least once.
20:10:56 <shachaf> while (...) { ... } is a loop that executed any number of times, and { ... } is a loop that executes exactly once.
20:11:25 <FireFly> APLs use the view of booleans as 0 or 1 in a similar manner to that, sometimes
20:11:32 <imode> makes sense as to why while (...) { ... } is considered universal. I remember teaching someone how to build things like "and" statements.
20:11:44 <imode> using only while loops, acting in lieu of if statements.
20:11:52 <FireFly> e.g. you can express a "filter" operation in terms of a "take n copies of" operation if the predicate produces 0 or 1 for false or true
20:12:04 <arseniiv> <zzo38> Do you know much about Old English, and what sound changes there are? => no, unfortunately
20:12:12 <FireFly> taking 0 copies of something omits it, and taking 1 copies of something passes it through to the result (including it)
20:12:27 <imode> that's interesting.
20:12:32 <FireFly> [ 1 1 0 1 0 1 # 'abcdef'
20:12:33 <j-bot> FireFly: abdf
20:13:53 <FireFly> [ (#~ >&4) i.10 NB. produce the list [0..9], then filter on the predicate >&4, i.e. "is greater than 4"
20:13:54 <j-bot> FireFly: 5 6 7 8 9
20:13:57 <imode> does APL _require_ control flow structures?
20:14:08 <imode> J included.
20:14:24 <imode> or can all programs be expressed in terms of array transformations.
20:14:35 <FireFly> It doesn't require traditional control flow structures
20:15:56 <FireFly> there's a reasonably common pattern in J that's something like f^:predicate^:_ (where ^: repeats the application of a function, so e.g. f^:3 is the same as f compose f compose f)
20:16:21 <imode> what are the _minimal_ primitives that J has.
20:16:52 <FireFly> because f^:0 is identity, f^:1 executes it once. if you then raise that to infinity, you can essentially express a while loop
20:16:57 <FireFly> imode: dunno :o
20:17:09 <imode> that'd be fascinating to know.
20:17:15 <FireFly> I'd look toward K probably, beacuse in my mind it's much more toward the minimalistic side of things
20:17:23 <FireFly> I don't know if K has traditional control structures?
20:17:34 <imode> minimalist in terms of primitives or minimalist in terms of size?
20:17:41 <FireFly> in terms of having a few primitives
20:17:45 <FireFly> s/a //
20:17:50 <imode> interesting.
20:17:52 <FireFly> and avoiding redundancy
20:17:59 <FireFly> (J has plenty of redundancy and convenience features)
20:18:06 <imode> array languages seem hard to implement.
20:18:10 <FireFly> http://kparc.com/k.txt
20:18:14 <FireFly> I don't think so
20:18:23 <FireFly> well, in what sense?
20:18:46 <imode> just a lot of moving parts.
20:19:05 <imode> from parsing to actual interpretation.
20:19:35 <FireFly> I think in many ways a lot easier than other paradigms (very simple syntax, often just needs a lexer.. although often very context-dependent and intertwined with execution, tbf)
20:20:53 <FireFly> there's the http://nsl.com/papers/origins.htm which is a bit classic, and admittedly perhaps not super representative, but always fun (a minimal proto-J which implements a few select verbs and stuff, and no error handling)
20:22:17 <FireFly> https://github.com/JohnEarnest/ok/blob/d6d3ee4bbb550a806895ffb92fbe76321dc7552e/oK.js implements a K variant in about 1000 lines of JS, and that's AFAIK pretty feature-complete
20:23:13 <FireFly> I don't know if it's necessarily harder, or if it's just a bit different and requires some pondering how things fit together
20:25:24 <imode> that C snippet is so obfuscated I can't even read it.
20:25:28 -!- asdfbot has quit (Ping timeout: 245 seconds).
20:25:45 <imode> why would you bother doing that.
20:25:51 <imode> you don't get points for being terse.
20:26:29 -!- moony has quit (Quit: Bye!).
20:26:34 <shachaf> The argument is that this is just the way that's natural to write C, if your mind works in the way that it does if you write APL.
20:26:44 <imode> yeah, fuck that.
20:26:46 <shachaf> If that's true, it seems maybe worthwhile to get your mind working that way.
20:26:48 <FireFly> I wouldn't write it that way :P
20:27:01 <shachaf> `? FireFly
20:27:02 <HackEso> FireFly was a short-running but well-loved sci-fi TV series released in 2003, starring Nathan Fillion and directed and written by Joss Whedon. It's also a room whose gimmick is that it gets darker as you kill the enemies.
20:27:06 <FireFly> (unless I golf)
20:27:09 -!- Bowserinator has quit (Quit: Blame iczero something happened).
20:27:11 <imode> forth is comprehensible, that is a mess.
20:27:20 <shachaf> FireFly is not Arthur Whitney.
20:27:27 <FireFly> this is correct
20:27:30 <imode> given. :P
20:27:32 <shachaf> One time I deciphered most of that implementation of J with someone.
20:27:42 <shachaf> But there were still a couple of mysterious things left.
20:27:57 <FireFly> imode: APLs can be quite comprehensible I think
20:28:03 <FireFly> hmm
20:28:14 <FireFly> (but I'm not arguing for writing C that way)
20:28:50 -!- moony has joined.
20:29:42 -!- Bowserinator has joined.
20:30:06 <imode> anything can be written comprehensibly.
20:30:16 <imode> the key is documentation.
20:31:17 <FireFly> mm, with J the vocab page is quite handy: https://www.jsoftware.com/help/dictionary/vocabul.htm
20:31:30 <imode> the only reason why that C snippet is incomprehensible is because it lacks any human-readable documentation. and code is documentation.
20:31:51 <FireFly> *nod*
20:32:57 <shachaf> I think APLy people would disagree with you.
20:33:07 <shachaf> I'm looking for some document I read that talks about this, but I can't find it.
20:33:31 <shachaf> I found http://coding-is-like-cooking.info/2013/09/an-introduction-to-array-languages/ which talks about Whitney writing an editor in K.
20:34:42 -!- imode1 has joined.
20:35:10 <FireFly> http://kparc.com/edit.k ?
20:35:52 <imode1> if they disagree with me, shachaf, then they disagree with iverson.
20:36:02 <shachaf> Hmm, it's http://kparc.com/$/edit.k
20:36:48 <imode1> notation as a tool of thought pretty much said "let the notation serve as your documentation".
20:36:58 <imode1> executable notation == code.
20:37:32 -!- imode has quit (Ping timeout: 245 seconds).
20:37:37 -!- imode1 has changed nick to imode.
20:37:43 -!- iczero has quit (Quit: rip).
20:38:04 -!- iczero has joined.
20:40:27 <shachaf> Well, whoever wrote that post I linked to seems to be completely indoctrinated with nonsense.
20:45:02 <imode> despite my language looking like ass (this, for example, is a directly compiled 5 factorial: ,$5,$0\$$\$[:$,$0=~?:$,$1\$\$$-$].
20:45:32 <imode> the language you're _intended_ to use (which rides on top of it) emphasizes readability.
20:48:25 <FireFly> I think the J for expressing factorial of 5 (without using the built-in verb for it, duh) is pretty readable
20:48:32 <FireFly> I guess it's a matter of having gotten used to it
20:48:48 <imode> I imagine it is, yeah. by the by, I'm not arguing against array language readability.
20:48:54 <FireFly> sure
20:49:03 <FireFly> (I also think it looks like line-noise without being used to it)
20:49:13 <imode> lol. trying to adjust to writing in line noise.
20:49:41 <FireFly> [ */1+i.5
20:49:42 <j-bot> FireFly: 120
20:53:46 <imode> my bad, that was only.. _partially, a factorial function. here's the real deal: ,$5,$0\$$\$[:$,$0=~$?:$,$1\$\$$-$].[\$$\$:$,$0=$~$?*$].
20:54:41 <imode> it's comprised of two parts, one part generates a range of numbers from N on down to 1, and the other computes the product of that range.
20:54:53 <imode> the 'range' part is ,$0\$$\$[:$,$0=~$?:$,$1\$\$$-$].
20:55:05 <imode> and the 'product' part is [\$$\$:$,$0=$~$?*$].
21:08:01 <FireFly> ah
21:14:38 -!- arseniiv has quit (Ping timeout: 246 seconds).
21:17:38 <imode> unmangled, it looks like https://hatebin.com/ldolvvfofb
21:17:52 <imode> which is much more readable.
21:19:56 <imode> one sec..
21:19:57 -!- imode has quit (Quit: WeeChat 2.6).
21:20:52 -!- imode has joined.
21:39:34 <esowiki> [[Special:Log/newusers]] create * Vulture001 * New user account
21:40:31 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=66386&oldid=66298 * Vulture001 * (+97)
21:41:45 -!- imode has quit (Quit: WeeChat 2.6).
21:42:15 <esowiki> [[Special:Log/upload]] upload * Vulture001 * uploaded "[[File:Cz logo.png]]"
21:42:28 <esowiki> [[User:Vulture001]] N https://esolangs.org/w/index.php?oldid=66388 * Vulture001 * (+51) Created page with "[[file:cz logo.png|130px|]]<br> esoteric programmer"
21:42:39 <esowiki> [[User:Vulture001]] https://esolangs.org/w/index.php?diff=66389&oldid=66388 * Vulture001 * (-3)
21:57:22 <esowiki> [[Crazy]] N https://esolangs.org/w/index.php?oldid=66390 * Vulture001 * (+985) Created crazy language
22:05:35 -!- iovoid has quit (Ping timeout: 250 seconds).
22:05:39 -!- voidio has joined.
22:05:53 -!- moony has quit (Ping timeout: 252 seconds).
22:07:07 -!- moony has joined.
22:17:19 -!- LKoen has joined.
22:28:31 -!- LKoen has quit (Remote host closed the connection).
22:33:07 -!- LKoen has joined.
22:41:32 -!- LKoen has quit (Remote host closed the connection).
22:41:57 -!- voidio has changed nick to iovoid.
22:43:24 -!- LKoen has joined.
22:48:01 -!- LKoen has quit (Remote host closed the connection).
22:49:37 -!- LKoen has joined.
22:56:12 -!- imode has joined.
23:09:36 <zzo38> I found the "tap code", which uses 1/3 for both C and K, but maybe the code for K should be 2/6 instead.
23:20:50 -!- MDude has joined.
23:30:18 -!- hppavilion[1] has joined.
23:45:00 -!- b_jonas has joined.
23:46:19 <pikhq> https://www.unicode.org/L2/L2019/19025-terminals-prop.pdf was accepted for inclusion in future Unicode. Sweet.
23:46:21 <b_jonas> ais523: re string eval in perl without the letter e => hmm, I'll have to get back to this when I'm less tired. I just got home from vacation. you might want to look in those old obfuscations that are made of only ascii punctuation, space and newline. at least some of them cheat by using backticks to spawn something, but maybe there's some other.
23:46:29 <pikhq> Finally, PETSCII will actually have a Unicode mapping.
23:46:50 <b_jonas> there's probably a less cheating way (not necessarily easier, just less cheating), but I don't have it in mind now
23:47:14 <pikhq> (also, hey, more useful semigraphics)
23:50:16 -!- MDude has quit (Ping timeout: 240 seconds).
23:50:51 <b_jonas> you can eval stuff like $x = q(print 2+3,"\n"); $s = "(?{$x})"; use re "eval"; /$s/
23:51:15 <b_jonas> it would be possible to remove the e from the use re "eval" but really ugly
23:51:34 <b_jonas> and you'd almost certainly need an E for a BEGIN then
23:52:09 <b_jonas> hmm wait, maybe we can just BEGIN { $^H = ... } to have that effect, in which case it wouldn't be ugly
23:52:13 <b_jonas> I don't know how use re is implemented
23:54:56 <b_jonas> ais523: you can also write the code into a named file and then eval its contents with do
23:59:33 <b_jonas> `perl -e $i = 'for(1..7){print$_**2," "}'; BEGIN { $^H |= 0x200000; } $s="(?{$i})"; /$s/; # ais523
23:59:33 <HackEso> 1 4 9 16 25 36 49
23:59:37 <b_jonas> yup, that works
←2019-09-27 2019-09-28 2019-09-29→ ↑2019 ↑all