←2021-08 2021-09 2021-10→ ↑2021 ↑all
00:08:15 <oerjan> hm i forgot to log out yesterday
00:14:30 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87876&oldid=87871 * PixelatedStarfish * (+169) /* Meta-program Examples */
00:18:11 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87877&oldid=87876 * PixelatedStarfish * (-2) /* Hello World */
00:18:28 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87878&oldid=87877 * PixelatedStarfish * (-1) /* File Name Generator */
00:20:05 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87879&oldid=87878 * PixelatedStarfish * (-20) /* Random Number (1-10) */
00:29:21 <nakilon> is there a way to see all the Templates of the wiki?
00:30:48 <nakilon> for example I wanted to use this one but could not https://en.wikipedia.org/wiki/Template:Empty_section
00:31:57 <nakilon> ah I guess this https://esolangs.org/w/index.php?search=template&title=Special%3ASearch&profile=advanced&fulltext=1&ns10=1
00:32:27 <fizzie> https://esolangs.org/wiki/Special:PrefixIndex?prefix=&namespace=10
00:33:01 <fizzie> Ends up at the same place, I'm guessing.
00:33:12 <fizzie> More or less, anyway.
00:43:40 <esolangs> [[Quipu]] M https://esolangs.org/w/index.php?diff=87880&oldid=49825 * Dlosc * (+0) Fixed typo in lyrics
00:46:20 <esolangs> [[RASEL]] https://esolangs.org/w/index.php?diff=87881&oldid=87604 * Nakilon * (+314) added an example of how .rasela json file looks
00:47:36 <nakilon> still amazes me how I get the highlight sound from this bot even before the wiki page load after the save button press
00:48:20 <nakilon> even via the bnc web interface
00:48:21 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87882&oldid=87879 * PixelatedStarfish * (+23) /* Random Number (1-10) */
00:49:30 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87883&oldid=87882 * PixelatedStarfish * (+45) /* Quine */
00:55:43 -!- src has quit (Ping timeout: 252 seconds).
01:02:36 * oerjan 's mind boggles at someone wanting sound highlighting of esolangs announcements
01:04:18 <nakilon> I mean there is my nickname in that message
01:04:29 <nakilon> so I hear it
01:04:32 <esolangs> [[Ark]] https://esolangs.org/w/index.php?diff=87884&oldid=87349 * Spargle * (-188) /* Ark: The esolang that is actually kind of useful. */
01:04:38 <oerjan> oh
01:04:54 <oerjan> that would do it. i doun
01:05:19 <oerjan> don't have sound for highlighting my own name either
01:09:18 <nakilon> wow, truffleruby works exactly how people describe it
01:11:03 <nakilon> the first second is slow but then it runs faster and after 6 seconds of running the examples/prime.rasel it reaches the usual ruby
01:27:36 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87885&oldid=87883 * PixelatedStarfish * (+9)
01:28:14 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87886&oldid=87885 * PixelatedStarfish * (+0)
01:28:55 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87887&oldid=87886 * PixelatedStarfish * (+4)
01:44:55 -!- earendel has quit (Quit: Connection closed for inactivity).
02:09:18 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87888&oldid=87887 * PixelatedStarfish * (+65) /* Syntax */
02:09:45 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87889&oldid=87888 * PixelatedStarfish * (+19) /* Quine */
02:10:07 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87890&oldid=87889 * PixelatedStarfish * (+9) /* Quine */
02:18:27 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87891&oldid=87890 * PixelatedStarfish * (-51) /* Quine */
02:53:17 -!- Corbin has joined.
03:08:25 <nakilon> heh 1998 http://www.cs.cmu.edu/~infobot/purl/ in that year in my town people saw computers only in western movies; maybe this IRC bot is still alive
03:11:55 <nakilon> last commit is 2 years ago on sourceforge
04:09:55 <nakilon> oh seriously?
04:11:05 <nakilon> https://i.imgur.com/1XCeZm4.png
04:11:42 <nakilon> and I'm still not there lol https://www.janestreet.com/puzzles/it-s-symmetric-2-solution/
05:10:44 -!- Sgeo_ has joined.
05:12:57 -!- Sgeo has quit (Ping timeout: 245 seconds).
05:51:22 -!- imode has quit (Ping timeout: 244 seconds).
06:42:52 -!- Sgeo_ has quit (Read error: Connection reset by peer).
07:46:35 -!- Koen_ has joined.
08:05:21 -!- hendursaga has joined.
08:06:28 -!- tech_exorcist has joined.
08:06:59 -!- tech_exorcist has quit (Remote host closed the connection).
08:07:29 -!- tech_exorcist has joined.
08:09:24 -!- hendursa1 has quit (Ping timeout: 276 seconds).
08:23:56 -!- oerjan has quit (Quit: Nite).
11:30:06 -!- arseniiv has joined.
13:00:35 <esolangs> [[User talk:Fmbalbuena]] https://esolangs.org/w/index.php?diff=87892&oldid=87729 * Fmbalbuena * (+32)
13:12:32 -!- hendursaga has quit (Quit: hendursaga).
13:12:58 -!- hendursaga has joined.
13:15:24 -!- earendel has joined.
13:39:37 -!- tech_exorcist_ has joined.
13:41:01 -!- tech_exorcist has quit (Ping timeout: 244 seconds).
13:58:20 -!- Sgeo has joined.
13:58:29 -!- tech_exorcist_ has quit (Quit: Goodbye).
13:58:42 -!- vyv has joined.
13:58:52 -!- tech_exorcist has joined.
13:59:16 -!- tech_exorcist has quit (Remote host closed the connection).
14:14:35 -!- Everything has joined.
14:28:37 -!- Koen_ has quit (Remote host closed the connection).
14:39:05 -!- Koen_ has joined.
14:47:55 -!- wib_jonas has joined.
15:12:28 -!- imode has joined.
15:23:21 -!- wib_jonas has quit (Ping timeout: 256 seconds).
15:32:45 <nakilon> funny how they call the company "Equal Opportunity"
16:44:30 -!- earendel has quit (Quit: Connection closed for inactivity).
16:45:40 -!- SystemFFan has joined.
17:00:26 <esolangs> [[Talk:Unary]] https://esolangs.org/w/index.php?diff=87893&oldid=87874 * Ithkuil * (+0) /* Inefficient conversion to number */
17:26:10 -!- arseniiv has quit (Ping timeout: 240 seconds).
17:26:33 <int-e> `` echo x > a; ln a b; xz a
17:26:35 <HackEso> xz: a: Input file has more than one hard link, skipping
17:26:59 <int-e> I wonder what the rationale behind that is
17:27:20 <int-e> "compressing this won't save you any disk space... let's not do it", maybe
17:27:52 <fizzie> `` rm a b # it's not versioned, but it's still persistent
17:27:53 <HackEso> No output.
17:28:23 <int-e> `` ls
17:28:24 <HackEso> ​:#,_@ \ 🌱 \ a.o \ a.out \ asmbf-1.2.7 \ banana.txt \ bef2 \ bfi \ bin \ compiled_brachylog.pl \ egel-master \ egel-scripts \ egel.zip \ eGtbSgN68aHU \ just \ karma \ le \ olist.new \ output.b \ paste \ pd \ pd.c \ pikhqbow_tst \ program \ -.s \ spline \ spout \ stall \ test \ test.sh \ this.py \ tmp \ wisdomls.txt \ xaa
17:29:46 <fizzie> -.s comes out of some GCC misuse, I think. Something like `... | gcc -x c - -S`, forgetting the `-o -` bit. I've seen it before. In my own ~/tmp, probably.
17:30:32 <fizzie> There's also an empty file literally called '*.spp' in my ~/tmp, not sure what's up with that.
17:30:49 <int-e> maybe you should have a cron job that cleans up everything that is older than, say, a day
17:31:18 <nakilon> and file named as befunge code
17:31:18 <int-e> ls bin
17:31:24 <int-e> `` ls bin
17:31:25 <HackEso> rasel
17:32:13 <nakilon> I guess that is CAT program but with lost '>'
17:32:41 <fizzie> Yeah, it says "olleh" in it.
17:33:35 <fizzie> So it was probably from `echo "olleh">:#,_@ | ...` without considering that > will be interpreted as a shell redirection.
17:33:47 <nakilon> \rasel A"!dlrow ,olleH">:?@,Hj
17:33:59 <velik> output: Hello, world![LF], exit code: 0
17:34:00 <nakilon> ping
17:34:05 <velik> pong
17:34:30 <nakilon> `` wc -c bin/*
17:34:31 <HackEso> 34 bin/rasel
17:34:46 <nakilon> `` cat bin/rasel
17:34:47 <HackEso> echo "$@" | ​/hackenv/tmp/rasel
17:34:58 <nakilon> `` wc -c ​/hackenv/tmp/rasel
17:34:59 <HackEso> wc: ​/hackenv/tmp/rasel: No such file or directory
17:35:18 <nakilon> meh
17:35:43 <nakilon> there was some another bin I guess
17:35:44 -!- arseniiv has joined.
17:36:04 <nakilon> `` rm bin/rasel
17:36:06 <HackEso> No output.
17:36:37 <nakilon> `` which rasel
17:36:39 <HackEso> ​/hackenv/bin/rasel
17:36:52 <nakilon> `` wc -c ​/hackenv/bin/rasel
17:36:53 <HackEso> wc: ​/hackenv/bin/rasel: No such file or directory
17:37:02 <nakilon> woah
17:37:14 <nakilon> `` ls ​/hackenv/lib
17:37:16 <HackEso> ls: cannot access '​/hackenv/lib': No such file or directory
17:37:54 <nakilon> how is that possible that which points to unexisting file?
17:38:54 <fizzie> You *might* get that from a broken symlink, but it's not that.
17:39:07 <fizzie> https://hack.esolangs.org/repo/file/tip/bin/rasel does exist.
17:40:21 <nakilon> `` file ​/hackenv/bin/rasel
17:40:22 <HackEso> ​​/hackenv/bin/rasel: cannot open `​/hackenv/bin/rasel' (No such file or directory)
17:41:14 <int-e> `` wc -c /hackenv/bin/rasel
17:41:15 <HackEso> 45 /hackenv/bin/rasel
17:41:35 <nakilon> `` wc -c ​/hackenv/bin/rasel
17:41:36 <int-e> nakilon: you had some unicode garbage before the initial /
17:41:36 <HackEso> wc: ​/hackenv/bin/rasel: No such file or directory
17:41:45 <nakilon> _Oo
17:41:57 <fizzie> `unidecode c ​/h
17:42:04 <fizzie> Oh, a zero-width space.
17:42:19 <fizzie> Probably copy-pasted from HackEso output.
17:42:34 <fizzie> It adds one when the output line starts with a non-letter, as a botloop avoidance mechanism.
17:43:02 <nakilon> I guess I copypasted it from 20:36:39 <HackEso> ​/hackenv/bin/rasel
17:43:06 <int-e> the good old ^O might work better? Ah I don't know.
17:43:07 <nakilon> yeah
17:43:27 <int-e> It's Hack-Eso, not Production-Eso
17:43:40 <nakilon> hackesaw
17:44:21 <nakilon> `` ls /hackenv/lib
17:44:22 <HackEso> c++decl \ cdecl \ frink \ frink.jar \ interp \ karma \ kps \ morse-decode \ p7zip-16.02 \ rasel_gem
17:44:36 <nakilon> `` rm -rf /hackenv/lib/rasel_gem
17:44:40 <HackEso> No output.
17:44:55 <nakilon> `` rm /hackenv/bin/rasel
17:44:58 <HackEso> No output.
17:49:09 <nakilon> funny how it's hard to find where the code starts in befunge
17:49:31 <nakilon> I suppose this is some sort of switch-case but... https://github.com/fis/fungot/blob/47a5050c2541d8b23af4970e786449164708b328/fungot.b98#L181-L195
17:49:31 <fungot> nakilon: mathematical, huh?
17:49:40 <nakilon> fungot esoterical
17:49:41 <fungot> nakilon: also it has a white plastic ping-pong ball." works.)) be done in scheme that's dynamically adjustable
17:51:15 <nakilon> how do you reach the start of line 182?
17:51:45 <fizzie> From line 120 or thereabouts.
17:52:52 <fizzie> The `v_v#` at the start of line 120 (entered from the right) is I think the bit that branches based on whether the incoming line starts with the command prefix ^ or not.
17:53:31 <fizzie> Or if you meant the word "reload" literally, that's just a comment.
17:53:36 <int-e> "reload" is just a comment, I think. Line 182 is entered from line 183, with the |
17:53:50 <fizzie> Yeah, "daoler"Q is the *actual* executed code.
17:53:55 <int-e> which I vaguely recall to be a conditional
17:54:33 <nakilon> oh
17:54:37 <int-e> I really haven't touched Befunge at all, beyond skimming the list of opcodes once or twice.
17:54:41 <fizzie> Yep, ..."daoler"Q!| uses the Q instruction from STRN to do a string comparison, and then branches up if it matches, down if not.
17:55:48 <nakilon> would be less misleading if those comments were not in "" but in something else, anyway
17:56:15 <nakilon> (just thinking about some compact switch-case for [],.-=<>)
17:56:59 -!- tech_exorcist has joined.
17:57:19 <fizzie> Except for [], the rest are close enough in ASCII terms that they might even be worth a jvvvv... jump table.
17:57:50 <fizzie> Well, maybe not.
17:58:33 <int-e> line 202 is funny... "ignor" because the "e" didn't fit :P
17:59:42 <fizzie> Yeah... I think the reason why they're quoted is, other comments are just... regular comments *about* the code, but these are specifically mentioning strings the input is compared to.
17:59:48 <nakilon> there is no copypaste functionality in my IDE so to make this https://i.imgur.com/XPhcPaA.png I converted it to rasel, edited in sublime and converted back to rasela, lol
18:02:19 -!- vyv has quit (Quit: Konversation terminated!).
18:04:06 -!- src has joined.
18:15:55 -!- Koen_ has quit (Quit: Leaving...).
19:03:48 <nakilon> probably since I preload all the bf code into the stack I might better store the bf tape right after the code rather than doing even/odd addressing thing; just need one more cell to store the length of code permanently as a shift
19:50:34 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87894&oldid=87891 * PixelatedStarfish * (+750) /* Quine */
19:53:47 <nakilon> just found that Moscow subway has already implemented a "FacePay" on 4 stations -- system that when you enter the subway it recognizes your face to take the payment
19:55:01 <nakilon> now I wonder when will they cancel the usual way to pay for using metro
20:36:59 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87895&oldid=87894 * PixelatedStarfish * (+69) /* Interpreter */
20:37:44 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87896&oldid=87895 * PixelatedStarfish * (-5) /* Interpreter */
20:40:08 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87897&oldid=87896 * PixelatedStarfish * (-1) /* Hello World */
20:40:25 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87898&oldid=87897 * PixelatedStarfish * (-18) /* Quine */
20:40:52 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87899&oldid=87898 * PixelatedStarfish * (+4) /* Hello World (Quine) */
20:49:55 -!- Lord_of_Life_ has joined.
20:51:17 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
20:51:17 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:57:21 -!- SystemFFan has quit (Remote host closed the connection).
20:58:10 -!- SystemFFan has joined.
21:00:48 -!- tech_exorcist has quit (Remote host closed the connection).
21:03:22 -!- Oshawott has quit (Ping timeout: 245 seconds).
21:03:28 -!- tech_exorcist has joined.
21:55:42 -!- Everything has quit (Quit: leaving).
22:23:22 <nakilon> https://i.imgur.com/MHx5rSB.png -- 6 of 8 are done
22:34:51 <nakilon> is there any standard on documenting addresses/registers in very low level languages?
22:36:14 <nakilon> for example when I look at this https://i.imgur.com/Sw0ZqPK.png I get a picture of what are the meanings of each stack position, but I get the correct picture only if the program is correct
22:36:41 <nakilon> and only when I run it
22:37:55 <nakilon> would be nice to have the "stack structure in the given moment in the program" documented in the source code
22:38:57 <nakilon> so then when I run it and I could compare pictures to find where the things went wrong
22:42:12 -!- tech_exorcist has quit (Quit: Goodbye).
22:42:29 <fizzie> There's the Forth convention on documenting the stack effect of individual words, but that's more about transitions, not about snapshots.
22:46:09 <fizzie> : swap ( a b -- b a ) ... ; for example, where the ( a b -- b a ) is a stack effect comment, with the initial stack (shown up to the depth affected) on the left side of the --, and the stack after the word on the right.
22:47:07 <nakilon> reminds haskell function type signatures
22:48:20 <nakilon> don't you have some stack description in fungot? I feel like I saw somthing
22:48:21 <fungot> nakilon: oh my fnord on top of the simple levels, but advanced student will probably run out of mem or something even more mindless. :p i guess it's gotten more orthodox now. they certainly are easy to implement
22:49:25 <fizzie> I think not, I just have comments on all the important Fungespace locations. During development of individual "basic blocks" I definitely tend to write notes with stack annotations though.
22:49:31 <nakilon> oh I see starting here https://github.com/fis/fungot/blob/master/fungot.b98#L389
22:49:31 <fungot> nakilon: how nasty is this as a " highly interested" in your fnord library and much of my last two hours chasing a *feature* with what implementation?
22:49:52 <nakilon> ah, those are locations in instructions space
22:50:34 <fizzie> Yeah. Well, the section on brainfuck exec does document the that top of stack is mostly the instruction pointer, and second on stack the data pointer. Most of the time, anyway.
22:52:36 <fizzie> Would've been nice to have an editor that could have retained those actual stack notes, for future editability. I usually write them by just lining out the instruction sequence vertically (one command per line in the first column, as if execution was proceeding downwards) and then rest of the line indicating the stack on that line (I don't remember whether I usually make that before or after the
22:52:38 <fizzie> instruction).
23:22:15 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87900&oldid=87899 * PixelatedStarfish * (+51) /* Hello World (Quine) */
23:23:56 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87901&oldid=87900 * PixelatedStarfish * (-66) /* Interpreter */
23:24:06 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87902&oldid=87901 * PixelatedStarfish * (-54) /* Hello World (Cheating Quine) */
23:26:11 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87903&oldid=87902 * PixelatedStarfish * (+114) /* Interpreter */
23:26:30 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87904&oldid=87903 * PixelatedStarfish * (+0) /* Interpreter */
23:26:43 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87905&oldid=87904 * PixelatedStarfish * (-1) /* Interpreter */
23:44:07 -!- arseniiv has quit (Ping timeout: 252 seconds).
23:55:31 -!- oerjan has joined.
00:01:10 -!- SystemFFan has quit (Ping timeout: 240 seconds).
01:30:16 -!- src has quit (Ping timeout: 252 seconds).
01:51:32 <nakilon> hm
01:51:34 <nakilon> [Jump past the matching ] if the cell at the pointer is 0
01:51:34 <nakilon> ]Jump back to the matching [ if the cell at the pointer is nonzero
01:51:34 <j-bot> nakilon: |value error: is
01:51:34 <j-bot> nakilon: | Jump past the matching]if the cell at the pointer is 0
01:52:10 <nakilon> I wonder if ] has to do any check actually or just go back to the [ and [ will do the check
01:52:49 <nakilon> probably only [ has to have a condition
02:00:41 <oerjan> nakilon: yeah you can choose to put the check on only one
02:01:37 <oerjan> if you do check, you should jump to after [ for the second case too
02:02:23 <oerjan> well, can.
02:03:27 <oerjan> reversible brainfuck is similar, except you _must_ check on both and jump past, since the tests are reversed from each other
02:21:42 -!- simcop2387 has quit (Ping timeout: 245 seconds).
02:21:42 -!- perlbot has quit (Ping timeout: 245 seconds).
02:36:48 -!- perlbot has joined.
02:38:47 -!- simcop2387 has joined.
04:26:10 <nakilon> hopefully this is it https://i.imgur.com/tEdX7dL.png at least it passes these tests https://dpaste.org/73HP/slim
05:07:40 -!- imode has quit (Ping timeout: 240 seconds).
05:12:45 <nakilon> $ printf "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++." | ./bin/rasel examples/bf_interpreter.rasel | hexdump -C
05:12:45 <nakilon> 00000000 48 65 6c 6c 6f 20 57 6f 72 6c 64 21 0a |Hello World!.|
05:12:46 <nakilon> hooray
06:03:28 <zzo38> I have a book called "Concrete Mathematics". They mention the operation "mod", and also "mumble" which is the other one (x mumble y = y ceiling(x/y) - x). Should they be called "punk" (according to another suggestion in this book), or do you like mumble? Or is there another name for this?
06:10:39 <esolangs> [[RASEL]] https://esolangs.org/w/index.php?diff=87906&oldid=87881 * Nakilon * (+202) /* Computational class */ added link to bf interpreter
06:14:08 <oerjan> @check \x y -> y==0%1 || y * ceiling(x/y) - x == x `rem` y
06:14:10 <lambdabot> error:
06:14:10 <lambdabot> • No instance for (Integral (Ratio Integer)) arising from a use of ‘ceiling’...
06:14:15 <oerjan> oops
06:14:33 <oerjan> @check \x y -> y==0 || y * ceiling(x%y) - x == x `rem` y
06:14:35 <lambdabot> *** Failed! Falsifiable (after 9 tests and 3 shrinks):
06:14:35 <lambdabot> 7 3
06:15:12 <oerjan> i guess it's not that.
06:16:16 <oerjan> oh right
06:17:20 <nakilon> what is this @check thing?
06:18:01 <shachaf> It checks whether a proposition is true or false.
06:18:04 <shachaf> v. convenient
06:18:25 -!- Sgeo has quit (Read error: Connection reset by peer).
06:18:30 <nakilon> is it a built in haskell tool?
06:19:50 <nakilon> must be something similar in mathematica; but it's cool how it says "after 9 tests..."
06:42:30 <esolangs> [[EsoInterpreters]] https://esolangs.org/w/index.php?diff=87907&oldid=87648 * Nakilon * (+466) /* Main table */ added RASEL/Brainfuck
07:08:29 <oerjan> nakilon: https://hackage.haskell.org/package/QuickCheck
07:10:18 <esolangs> [[GG]] N https://esolangs.org/w/index.php?oldid=87908 * Hyperdawg * (+74) Created page with "'''GG''' is an esoteric programming language created by [[User:Hyperdawg]]"
07:11:01 <oerjan> nakilon: it's not a theorem prover, but a generator of random test cases
07:11:19 <nakilon> like fuzz testing?
07:11:34 <oerjan> perhaps? i don't know that.
07:12:18 <oerjan> although it also some mechanism for reducing the size of test cases, that's what the "3 shrinks" is about.
07:12:22 <oerjan> *also has
07:13:39 <oerjan> @check \x y z -> x + (y + z) == (x + y) + z
07:13:41 <lambdabot> +++ OK, passed 100 tests.
07:13:54 <oerjan> @check \x y z -> x + (y + z) == (x + y) + (z :: Double)
07:13:56 <lambdabot> *** Failed! Falsifiable (after 2 tests and 7 shrinks):
07:13:56 <lambdabot> 0.6571961060614686 -0.45461759492755616 -0.11907641039759291
07:14:16 <oerjan> that's IEEE floating point for you :)
07:14:42 <oerjan> (without the :: Double it uses Integer)
07:28:22 <int-e> > let x = 1; y = 2^^(-53); z = y in (x+y)+z == x+(y+z)
07:28:24 <lambdabot> False
07:29:06 <int-e> > let x = 2; y = 1; z = 1/3 in (x+y)+z == x+(y+z)
07:29:07 <lambdabot> False
07:29:39 <int-e> > let x = 1; y = 1; z = 1/3 in (x+y)+z == x+(y+z)
07:29:40 <lambdabot> False
07:30:06 <int-e> > let x = 1; y = 1; z = 1/3 in (x+y)+z == x+(y+z :: Float)
07:30:08 <lambdabot> False
07:32:24 <int-e> So, we learned that associativity is a lie. ;-)
07:32:41 <shachaf> I think we learned that floating-point values are lies.
07:32:42 <int-e> A crude approximation of the real world (tm)
07:33:26 <shachaf> Fuzz testing is a useful tool when you need to check the correctness of a kitten.
07:35:22 <int-e> fungot: what does a smiley have to look like in order to be taken seriuosly? apparently ;-) isn't enough
07:35:23 <fungot> int-e: a module or anything like that) was discussed in this records thread on cll about it
07:36:10 <shachaf> I mean, I don't think there's any doubt that you know what associativity is, and how Float works.
07:44:26 -!- Koen_ has joined.
07:47:16 <int-e> Hmm, do I know that though... addition and multiplication, yes. Division, not so much. I mean I've seen long division and that cute Newton iteration x |-> x(2-ax) for 1/a, and that's about it. Inverse square root... again not so much. Transcendental functions... there's cordic but I'm not convinced it's actually used. No clue what other things there are.
07:50:53 <int-e> > iterate (\x -> x*(2-5*x)) 0.3
07:50:55 <lambdabot> [0.3,0.15,0.1875,0.19921875,0.1999969482421875,0.19999999995343387,0.2,0.2,0...
07:54:12 -!- riv has quit (Quit: Leaving).
07:54:46 <shachaf> Well, I hope you can know how a type works without knowing all the algorithms on that type.
07:55:26 <shachaf> The real test is what you call the bits of the float that aren't the sign bit or the exponent.
07:55:27 <int-e> Sure, I can enjoy a sausage without knowing how it's made.
07:56:44 <int-e> As with many things, there's many levels of understanding here.
07:59:41 <shachaf> I should know how these things are computed.
07:59:54 <shachaf> Man, I don't even know how integer multiplication works, really.
08:00:05 <int-e> I realized I couldn't expand "ulp".
08:00:30 <shachaf> I think I have an OK understanding of carry-lookahead adders now. I could at least think about it and come up with a reasonable one.
08:01:54 -!- V has quit (Ping timeout: 250 seconds).
08:04:26 <shachaf> I read a short post that instantly answered all my questions about carry-lookahead adders and so on. It was great.
08:04:56 -!- hendursa1 has joined.
08:07:51 -!- hendursaga has quit (Ping timeout: 276 seconds).
08:08:13 <int-e> I'm happy with my fancy monoid
08:09:35 <shachaf> Which one is that, the propagate-generate monoid?
08:14:30 <int-e> it starts with the silly number-appending monoid, (d1,l1) <> (d2,l2) = (d1*b^l2,l1+l2), then integrates addition and carries into it and that'll give you something that computes 2 results (which boil down to either clearing the carry, propagating the carry, or setting a carry, if you focus on the carries alone)
08:15:29 <int-e> (two results: one with incoming carry, and one without)
08:16:07 <int-e> it's really overcomplicated, but it makes sense to me, and as far as me understanding something goes... that's all that matters :P
08:17:47 <int-e> I suppose "generate" corresponds to two possible cases.
08:21:01 <shachaf> "clearing the carry" never happens, I guess.
08:21:56 <int-e> 0+0+c never generates a carry
08:22:09 <shachaf> Oh, uh, right.
08:22:58 <shachaf> The thing that never happens is complement.
08:23:07 <int-e> right, it's monotonic
08:24:28 <shachaf> But nowadays I'm all about consensus things.
08:41:25 <int-e> . o O ( int-e's consensus algorithm: agree to disagree. )
08:44:03 -!- wib_jonas has joined.
08:45:03 <wib_jonas> fizzie: just use a 3-D befunge, lay out your code in 2 dimensions (since that already allows arbitrary control flow), and have comments go next to the instructions in the third dimension's direction
08:47:01 <wib_jonas> trefunge it's called
08:48:07 <shachaf> Hmm, I often use this style of comment: "code; // short comment"
08:48:11 <wib_jonas> of course you might want a 3D code editor for that that can view your code in any of the 48 rotated orientations, including rotating the directional instructions appropriately
08:48:21 <shachaf> But then if the comment is longer, I move it to its own line before the code, which feels oddly discontinuous.
08:48:24 <shachaf> What can I do about that?
08:49:53 <int-e> shachaf: use a 21:9 monitor? ;-)
08:50:13 <int-e> (does anyone else miss the 4:3 ones...)
08:50:48 <wib_jonas> int-e: not particularly, but I'd prefer to have 16:10 ones more available
08:52:26 <wib_jonas> they let me put four 30 row terminals in a 2x2 arrangement, or two 35 and two 25 row terminals etc
08:53:43 <wib_jonas> (actually only a 30 and a 29 row one, because I reserve one row for a thin taskbar at the bottom plus the border between the two terminals, and even so I have one pixel of overlap
08:53:45 <wib_jonas> )
08:55:45 <int-e> ooph, there's at least one 32:9 monitor on the market.
08:56:01 <wib_jonas> int-e: with or without touchscreen?
08:57:31 <int-e> without, I think. https://www.amazon.com/dp/B07L9HCJ2V/
08:58:12 <esolangs> [[GG]] https://esolangs.org/w/index.php?diff=87909&oldid=87908 * Hyperdawg * (+87)
08:58:56 <esolangs> [[GG]] https://esolangs.org/w/index.php?diff=87910&oldid=87909 * Hyperdawg * (+11)
08:59:28 <int-e> I don't get the whole touch screen monitor thing either, not for PCs nor home entertainment.
09:01:37 <oerjan> <int-e> Sure, I can enjoy a sausage without knowing how it's made. <-- i think it's generally acknowledged that it's even easier that way hth
09:02:17 <int-e> oerjan: I thought it was better without spelling that part out
09:03:28 <wib_jonas> int-e: sure, without touchscreen it's better, it's just that the extreme ratio made me question that.
09:05:35 <esolangs> [[GG]] https://esolangs.org/w/index.php?diff=87911&oldid=87910 * Hyperdawg * (+4)
09:09:00 <oerjan> my joke detection ability is going, i can feel it
09:10:37 <int-e> oerjan: Different topic, does the Geisterdamen language have a name?
09:11:38 <oerjan> hm not that i remember
09:12:20 <Hooloovoo> ghost damn
09:12:27 <int-e> okay
09:13:01 <oerjan> Hooloovoo: ghost dames is a more direct translation
09:13:34 <oerjan> oh wait
09:13:36 <oerjan> ladies
09:13:58 <int-e> Hooloovoo: It's "ladies". (Oh and "dame" actually exists in english, as a counterpart to "knight" in the UK)
09:14:01 <Hooloovoo> yeah, that sounds closer
09:14:26 * Hooloovoo was looking up "damen"
09:14:28 <int-e> Ah, took too long cross-checking things.
09:15:21 <oerjan> although "ghost dames" is a _cognate_ translation, i presume.
09:15:22 <int-e> (I knew that "dame" is one of those honorary titles in the UK, but I didn't know what exactly it corresponds to)
09:16:13 <int-e> ghost damsels <- let's make it worse, shall we
09:16:24 <Hooloovoo> ghost dammit
09:16:26 <oerjan> itym distressful
09:17:02 <int-e> hmmm. They *are* distressed a lot of times, aren't they.
09:17:22 <oerjan> it's the tight corsets, i think
09:18:37 <int-e> ...which ones...
09:20:06 <oerjan> the ones they have to wear to be properly dressed
09:20:25 <Hooloovoo> could you do something with geist as spirit?
09:21:20 <int-e> oerjan: aren't they usually naked in the lower torso area, which is what corsets tend to be made to shape?
09:21:29 <oerjan> Hooloovoo: perhaps, although these ladies happen to be grey in color
09:21:50 <oerjan> int-e: oh. i had somehow forgotten which damsels we were speaking about.
09:21:56 <int-e> Hooloovoo: there's also "geist" as "intellect"
09:21:59 <oerjan> in a compartmented way
09:22:19 <int-e> oerjan: I see
09:22:49 <int-e> Yeah, corsets have been blamed for all the fainting in romance novels.
09:23:05 <int-e> By all accounts they're truly breath-taking.
09:48:04 <fizzie> There was someone with a 32:9 monitor on the XMonad channel asking for advice on how to make it behave like two 16:9 monitors, which makes sense.
10:01:40 -!- tech_exorcist has joined.
10:19:09 <oerjan> . o O ( did anyone recommend a saw )
10:21:01 <int-e> hey they should support this on the monitor side. give the thing two inputs
10:22:15 <wib_jonas> int-e: the description that you linked to https://www.amazon.com/dp/B07L9HCJ2V/ explicitly says that they support two inputs
10:22:26 <wib_jonas> "Super ultra-wide 49 inch monitor provides the enhanced productivity thru split screen functions like Picture-by-Picture (PBP), letting you connect to two devices while maintaining their original quality "
10:23:17 <int-e> wib_jonas: oh, do they? sounds interesting (I didn't read)
10:32:21 <fizzie> Yeah, I've heard ultrawides do that. Hmm, I wonder if any support acting as two inputs over a single cable with DisplayPort MST. Because if the motivation is "two devices", that's not exactly needed.
10:33:36 <fizzie> Incidentally, XRandR 1.5 introduced a "monitor" concept that decouples "rectangular regions shown to the user" from "outputs of a GPU", so the client can now define those arbitrarily even if it's "physically" just one output.
10:34:29 <nakilon> would be cool if those monitors could take inputs from two machines
10:35:01 <nakilon> so I could see macos and windows at the same time
10:35:05 <fizzie> They can, that's what wob_jonas was describing.
10:36:36 <wib_jonas> fizzie: did XRandR have to do that to support DRM that sends TV series as encrypted video to the monitor?
10:37:06 -!- arseniiv has joined.
10:38:05 <wib_jonas> also I used my home monitor with inputs from two separate computer, but not displayed at the same time, but switching with a button on the front of the monitor
10:40:25 <fizzie> I don't know what the XRandR monitor motivation was. I think there's been a few monitors where it's "necessary" to merge two physical outputs to a single monitor, for link bandwidth reasons, before things like HDMI 2.1 and DP 1.4 added higher-bandwidth modes, it could have been that.
10:40:40 <fizzie> I do the input-swapping regularly now that WFH is a thing.
10:41:12 <wib_jonas> fizzie: hmm. I thought DVI already solved the bandwidth problem by having a more expensive variant with more pins in the cable
10:41:49 <int-e> people have come up with higher resolutions
10:41:54 <fizzie> If you're referring to single-link vs. dual-link, yes, but then people just kept on increasing both the resolution and the refresh rate.
10:42:04 <fizzie> People want 144 Hz now.
10:42:07 <wib_jonas> fizzie: that's what made me do it, yes.
10:42:19 <fizzie> Because it's apparently necessary for gaming.
10:42:46 <int-e> fizzie: I believe that actually
10:43:12 <fizzie> Well, I believe it depends on the game. ;)
10:43:37 <int-e> shooter stuff... you have up to about two frames of latency (start drawing frame, wait for vsync, wait for it to actually be displayed)
10:44:02 <int-e> assuming the GPU can keep up
10:44:09 <nakilon> https://www.reddit.com/r/Sino/comments/pg9x4b/fake_3d_billboards/
10:44:10 <fizzie> AIUI, 60, 120, 144 and 240 are the "standard" framerates now. Also, there's those "dynamic framerate" standards.
10:45:44 <fizzie> Regarding swapping inputs, quite handily both of my monitors have four buttons, two of which can be programmed to do a specific action. So I've got them set up so that button 1 on both selects the personal desktop input, and button 2 on both selects the work laptop input.
10:45:45 <int-e> there's also the less significant effect that 120Hz is a nice fit for 24fps movies
10:45:54 <int-e> much better than 60Hz
10:46:11 <nakilon> high fps in shooters isn't this much about latency than about the smoothness
10:46:45 <nakilon> there is no profit from seeing something 5 msec faster if your ping is 50 and human reaction limit around 150
10:46:47 <wib_jonas> fizzie: true,
10:47:28 <nakilon> but high fps helps your brain to understand what's going on and where things are moving and with which speed
10:47:42 <nakilon> instead of being a high framerate slideshow
10:48:21 <wib_jonas> fizzie: that's nice. on my monitor (which I'm going to replace soon), it's press the second button from the right to go from home to work computer, three times to go from work computer to home computer. (it cycles through the four inputs, in the order composite, VGA, DVI, HDMI)
10:49:45 <nakilon> wib_jonas and it takes monitor 2 seconds of black screen to finally switch, I hate it
10:50:02 <fizzie> Actually, there's a slightly curious effect from the work laptop using USB-C DP Alt Mode MST to drive both monitors over a single cable: when the directly connected monitor is switched to some other input, the indirectly connected monitor is not visible to it. So if I want to have both the work and home computers visible simultaneously (not common), I can only do that one way around.
10:51:37 <wib_jonas> the hard part is switching the keyboard actually, not the monitor
10:55:07 <fizzie> Oh, and when I switch from work mode to home mode, if I want to optimize it for speed, I must always switch the "second" monitor first. If I do the "first" monitor first, the second one loses signal and immediately goes to a special no-signal mode, and then those quick-access buttons don't work, but instead all buttons bring up the input selector menu, meaning the switch takes three button
10:55:09 <fizzie> presses (bring up menu, press up/down, press select).
11:11:41 <nakilon> rasel translator translates the helloworld in 80msec and then runs it in 100msec
11:11:57 <nakilon> rasel interpreter interprets in 400msec
11:26:17 <nakilon> btw, noticed it again, on https://esolangs.org/wiki/Brainfuck it says "Short program printing Hello, World! by primo" and states that its start is shifted by 4 positions
11:26:50 <nakilon> then it says "Currently, the shortest known program printing Hello, World! is written by KSab" but does not say that it needs shifted start too
11:27:04 <nakilon> both translator and interpreter throw the error
11:29:02 <fizzie> ^bf --<-<<+[+[<+>--->->->-<<<]>]<<--.<++++++.<<-..<<.<+.>>.>>.<<<.+++.>>.>>-.<<<+.
11:29:03 <fungot> Hello, World!
11:29:05 <fizzie> ^bf +[-->-[>>+>-----<<]<--<---]>-.>>>+.>>..+++[.>]<<<<.+++.------.<<-.>>>>+.
11:29:05 <fungot> Hello, World!
11:29:12 <nakilon> his codegolf stackexchnage post also doesn't mention it
11:29:53 <fizzie> (FTR, fungot's tape is a loop.)
11:29:53 <fungot> fizzie: i mean,
11:30:13 <fizzie> fungot: ...you mean what?
11:30:13 <fungot> fizzie: and i don't care about the result.
11:30:21 <fizzie> Such a grumpy bot.
11:34:46 <wib_jonas> typical. measuring speed without caring about whether the code they're timing actualy does the correct result.
11:42:40 -!- hanif has joined.
12:40:57 -!- src has joined.
12:55:48 -!- hanif has quit (Ping timeout: 276 seconds).
13:11:26 <wib_jonas> oerjan re `@check \x y z -> x + (y + z) == (x + y) + (z :: Double)`, I suggest 0.6+0.3!=0.9 as the staple example because that's true for both 32-bit and 64-bit floats, but we should probably search for an example that's false in even more common floating point types
13:12:05 <wib_jonas> one that doesn't just use loss of precision by adding two numbers of opposite sign or similar tricks
13:15:42 -!- hendursa1 has quit (Quit: hendursa1).
13:16:18 -!- hendursaga has joined.
13:19:35 <oerjan> wib_jonas: ok, although the main purpose of my command was to demonstrate @check, and only secondarily to demonstrate floats.
13:21:17 <wib_jonas> sure, but this is a question that I'll have to look for a good answer for anyway
13:21:18 -!- hanif has joined.
14:02:19 -!- Sgeo has joined.
14:05:31 -!- oerjan has quit (Quit: Nite).
14:06:28 <wib_jonas> apparently 1 + 2/3 != 5/3 is another example that works with float32 or float64
14:15:44 -!- delta23 has joined.
14:32:21 -!- src_ has joined.
14:34:34 -!- src has quit (Ping timeout: 252 seconds).
14:36:46 -!- src_ has quit (Ping timeout: 252 seconds).
14:40:59 -!- integral has quit.
14:41:17 -!- integral has joined.
14:41:36 -!- delta23 has quit (Quit: Leaving).
14:50:12 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87912&oldid=87905 * PixelatedStarfish * (+42) /* Syntax */
14:58:02 -!- riv has joined.
15:15:28 -!- wib_jonas has quit (Quit: Client closed).
15:34:24 -!- chiselfuse has quit (Ping timeout: 276 seconds).
15:34:54 -!- chiselfuse has joined.
15:58:27 -!- hanif has quit (Ping timeout: 276 seconds).
16:21:57 -!- dnm has quit.
16:22:12 -!- dnm has joined.
16:22:21 -!- archenoth has joined.
16:31:39 -!- chiselfuse has quit (Remote host closed the connection).
16:31:51 -!- chiselfuse has joined.
16:43:13 -!- monoxane has quit (Ping timeout: 252 seconds).
16:51:27 -!- imode has joined.
17:51:33 -!- hanif has joined.
18:05:22 -!- Koen_ has quit (Remote host closed the connection).
18:11:09 <fizzie> Hmm, spam email with "Subject: esolangs". That's not too common.
18:11:46 <fizzie> Apparently it's meant for "the CEO", however.
18:11:55 <b_jonas> fizzie: did you receive it at an email address at the domain esolangs.org ?
18:12:06 <fizzie> Yep. But there's not too much of those.
18:12:13 <fizzie> It was sent to webmaster@ on that domain.
18:12:52 <b_jonas> yeah, I've sent emails that start with "Dear $websitename,"
18:15:04 <fizzie> Allegedly an "Hongwei Ltd" is attempting to register "esolangs" as their .cn domain name and "internet keyword", but the diligent research of the guy who sent the email (a Service & Operations Manager at "China Registry (Head Office)") has revealed our "company name or trademark" is in conflict, and they want to confirm whether that's our business partner in China.
18:15:16 <fizzie> I think I got an identical one few months back as well.
18:16:25 <fizzie> The most prominent "Hongwei Ltd" would appear to be Hongwei Technologies Limited, which "manufactures and sells polyester differential fibers primarily to the yarn and textile manufacturers located in the southern People's Republic of China". But perhaps they're branching to the lucrative esoteric programming language business.
18:18:47 <b_jonas> fizzie: oh, and among the most common types of spam I receive to my main email address are the ones that try to claim that the mail server has stopped receiving (or will stop receiving) email to my mailbox and I have to confirm my personal data and/or password to make sure I receive further emails, and those emails often mention the domain name of the email address in the subject. plus of course I get
18:18:53 <b_jonas> spam about "Google lottery" to my gmail.com address, but that latter probably only counts for half credit.
18:20:07 <fizzie> I sometimes report the "Google lottery" ones through some internal channels, just for the sake of form. I get them on my non-Gmail address though.
18:20:24 <fizzie> Not very recently, I think.
18:22:19 <fizzie> I think the most common broad category of spam I get are (at least superficially) suppliers of various kinds of things for manufacturing. Like, just looking at the last few subject lines, there's "Re: Mould supplier", "Re: Both Liquid Crystal and Vacuum glass Technology", "Re: Leather products Supplies good quotation", "Re: Cooper wire mesh" and "Re: Stainless steel sintered explosion-proof net".
18:22:42 <fizzie> ("Cooper" was my own typo, it was in fact "Copper" in the email.)
18:24:33 <b_jonas> fizzie: I think the only ones I've reported are (1) spam in the name of Paypal, (2) bots in twitch chat that try to sell twitch subs, and (3) the paper spam that threatens to cut some utility (electricity maybe) if you don't pay some money with the deadline being the day it was taped to the entrance
18:24:37 <fizzie> And "hair bundles", whatever that is.
18:25:26 <b_jonas> fizzie: "esolang" isn't such a bad brand name for a new synthetic textile material though
18:25:41 <b_jonas> it sort of sounds chemical and synthetic, so I think it might work
18:27:52 <b_jonas> wait, "mould supplier"? but isn't "mould" an alternate spelling for the other meaning of "mold", the that you don't want to supply as a product because it's a generally harmful fungus, as opposed to a shaped template for materials that you shape by melting?
18:28:39 <b_jonas> (well, not necessarily melting, it can also harden chemically a bit of time after you mix it from its components, that's how you shape silicones because they don't melt)
18:31:43 <b_jonas> you're supposed to use the hair bundlesare for hair lengthening in your Real Fast Hair Salon I think
18:33:38 <fizzie> Apparently "mould" *can* be used for the other meaning of mold as well, as in the thing used for casting.
18:35:08 <b_jonas> can it? let me check my Oxford
18:36:15 <b_jonas> yes it can
18:36:27 <b_jonas> that's even the first meaning of "mould" in the order the Oxford gives them
18:36:47 <b_jonas> the second is the fungi, the third (and last) is "soft loose earth"
18:38:35 <keegan> did someone say fungi
18:38:57 <b_jonas> yes
18:39:07 <b_jonas> befungi
18:39:39 <fizzie> Have I ranted about my electricity supplier yet? I feel like ranting about my electricity supplier.
18:39:54 <fizzie> They have a "smart" meter they can read remotely, and it came supplied with an IHD (in-home display) with CAD (consumer access device) facilities, meaning it can do wifi and talk MQTT to a broker for pseudo-real-time electricity usage data. Which is all well and good.
18:40:15 <fizzie> But, the endpoint it deigns to talk MQTT to is hardcoded in the device, and requires a (valid, signed-by-a-trusted-CA) TLS server certificate, so the only way to actually make *use* of that feature is to register for the Samsung SmartThings cloud service, which it will then upload usage data to, from which you're then supposed to consume it with an app.
18:41:49 <keegan> blah
18:42:50 <fizzie> I think I read from somewhere that the regulations say the supplier must help the customer in pairing any device into the HAN (the Zigbee thing the actual meter uses to talk to the IHD) as long as it's a certified device, but from some forum conversations (a) they don't actually do that, and anyway (b) nobody seems to be making reasonably "open" yet certified devices. And anyway, I *have* a
18:42:52 <fizzie> device, which even knows how to export the data. It just doesn't want to export it to its nominal owner.
18:43:28 <fizzie> (Another thing I read is that I technically own the IHD, it's not one of those cases where I'm just renting it.)
18:49:10 -!- APic has quit (Ping timeout: 240 seconds).
19:01:09 <b_jonas> fizzie: a lot of us have the power meters outside the home, so much more people can gain physical access to it than me or the owners. anyone in the house, and anyone who can get in the house door, which is much less well guarded than the apartment doors. as of now, people can read the total consumption from an LCD on it only when they are physically present (or if they leave a hidden camera somewhere in
19:01:15 <b_jonas> the cupboard I guess). that's much less of a security risk. if this was a smart device and anyone who physically walks up to it could download data to it, that would be much worse.
19:01:57 -!- hanif has quit (Quit: quit).
19:02:21 <b_jonas> fizzie: and yes, that means people can turn off electricity in my apartment by flipping a switch if they walk up there, but that's a feature for safety in case of fire or gas leaks. otherwise they'd have to cut a wire or something.
19:03:16 <b_jonas> the actual downside is that people who walk there can vandalize the tamper seal, but then people can vandalize a lot of things everywhere and in general it's hard to protect from that
19:04:08 <b_jonas> so I wonder how you'd imagine that only the owner can pair their device to the power meter and download the data
19:12:43 <fizzie> You need (cryptographic) keys from the supplier to pair a device with the meter, or something along those lines.
19:13:59 <fizzie> The meter is in fact not inside the flat here, it's out there in a cupboard in the corridor. Anyone living in the building can go and borrow the key, if for example they need to read it.
19:14:15 <fizzie> I mean, the physical key to the cupboard.
19:14:54 <fizzie> Which has the meters for everyone on this floor, and I think it's the same key for at least a group of floors, based on how it's marked.
19:15:04 <b_jonas> fizzie: also isn't it like, the meter already must communicate with the provider, that's why they're installing it; and the provider must already communicate with you because they're sending you bills; so why set up a third connection when these two must already work and they can just forward you the data at not much extra cost
19:15:40 <fizzie> They download the data at a much lower resolution than what the meter can provide to the IHD.
19:16:17 <b_jonas> fizzie: I've seen such physical keys. the locks often go wrong, or just nobody bothers to lock the cupboard, plus they're the numbered kind of key that anyone can buy if they just know a small integer, or buy the whole set and try each of them, or open the cupboard without the key. for this apartment, I haven't ever seen this cupboard locked.
19:16:23 <int-e> fungot: do you like augmenting paths?
19:16:24 <fungot> int-e: don't you mean the spec bloats the grammar, whereas the normal windows mzscheme uses normal windows libraries. what it seems like
19:17:05 <fizzie> I do in fact collect daily usage data from the supplier, by crawling it from their entirely undocumented GraphQL endpoint that their fancy client-side web app uses to render a chart.
19:17:14 <b_jonas> hehe
19:17:51 <b_jonas> do you also have a cheap camera and led light in front of the display, light it up once an hour, take a photo, and read the number automatically?
19:18:11 <fizzie> I have thought about doing that, yes.
19:18:47 <b_jonas> hehe
19:19:20 <b_jonas> and you also thought of just installing your own meter, one per every inner circuit breaker, inside the house, but found that they're horribly expensive because they're priced for industrial applications
19:20:10 <fizzie> It's not that I'd really *need* the high-resolution data, I'm mostly just curious about the bottom-line power usage of some devices and I feel like it'd be a fun way to measure that, to just collect samples of the "instant" energy use (which has a resolution in the order of some seconds) with and without the device plugged in / turned on, and then do some statistics.
19:21:03 <b_jonas> yeah
19:21:26 <b_jonas> except of course that's hard because some of your other devices, especially the fridge, can just start consuming more or less power at any time
19:22:05 <fizzie> Yes, that's the "statistics" part, I think if I did collect enough samples it should be possible to cluster the numbers and see how the "baseline" power usage changes.
19:22:23 <b_jonas> yeah
19:22:31 <b_jonas> the computers can also vary their power usage a lot
19:26:18 <fizzie> Incidentally, I have the IHD unit plugged to a computer, because it's powered via USB, and there was already a computer next to it anyway, so plugging the USB cable to one of the computer's otherwise unused USB ports avoids having one less AC/DC adapter.
19:27:19 <fizzie> Someone had opened one up and said the data lines of the USB port are not connected to anything, but that there's some places on the PCB that *could* be populated, so potentially it could act as a USB device during development or something.
19:28:27 <fizzie> Hmm, "avoids having one less" is probably not right.
19:29:01 <fizzie> I think I meant either "avoids needing one more" or "allows having one less", but mixed them up wrong.
19:32:22 <b_jonas> "avoids having one less AC/DC adapter." => yeah, but some computers are willing to supply only much less power on their USB ports than designated fast mobile phone chargers.
19:33:11 <b_jonas> re "meant either", or "avoids having one less AC/DC adapter remaining"
19:33:28 <b_jonas> :-)
20:36:50 -!- delta23 has joined.
20:46:48 <nakilon> speaking about chinese and esoteric, just found this page https://github.com/yunwan1x/awesome-cn/blob/ee7b919f7c7ff1559a70de35f0582a199dd526b5/docs/awesome/awesome-esolangs.md#L56
20:48:35 <nakilon> though it feels like this guy translates all kinds of the "awesome lists" to chinese to then serve on a website
20:48:41 -!- Everything has joined.
20:50:10 <b_jonas> nakilon: that would be a useful service
20:50:13 <nakilon> yeah, direct replica of https://github.com/angrykoala/awesome-esolangs
20:50:51 <b_jonas> especially if they attribute the original somewhere
20:51:00 <nakilon> I don't see the original
20:51:08 <nakilon> I mean the attribution
20:51:42 -!- Lord_of_Life_ has joined.
20:52:10 -!- Lord_of_Life has quit (Ping timeout: 240 seconds).
20:52:47 <nakilon> especially funny to see "Logo used with permission of David Morgan-Mar"
20:52:56 <nakilon> translated
20:54:07 <b_jonas> nakilon: it does say '<div class="github-widget" data-repo="angrykoala/awesome-esolangs"></div>' which points to the original source
20:54:24 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:54:35 <b_jonas> that sounds like some github feature\
20:54:42 <b_jonas> I mean it has github in its name
20:55:12 <nakilon> where do you this div?
20:55:16 <nakilon> &do you see
20:55:32 <b_jonas> in the raw content of the file https://raw.githubusercontent.com/yunwan1x/awesome-cn/ee7b919f7c7ff1559a70de35f0582a199dd526b5/docs/awesome/awesome-esolangs.md
20:55:46 <b_jonas> that's the raw of https://github.com/yunwan1x/awesome-cn/blob/ee7b919f7c7ff1559a70de35f0582a199dd526b5/docs/awesome/awesome-esolangs.md#L56
20:56:58 <b_jonas> but with all the client-time scripting that goes on here, I'm not sure if that results in some link or something in the rendered interface
20:58:24 -!- immibis has joined.
20:58:40 <nakilon> I guess it's left in the source code by a mistake or a note for the future content update, but it does not render
20:59:41 <nakilon> oh, no, it actually renders here https://asmcn.icopy.site/awesome/awesome-esolangs/
21:00:17 <b_jonas> where in that?
21:01:19 <nakilon> https://i.imgur.com/F5nlROo.png
21:02:08 <b_jonas> nakilon: I see, thanks
21:02:17 <b_jonas> great
21:02:25 <b_jonas> then I approve of this translation thing
21:02:45 <nakilon> gotta check what other embedding formats github provides -- might be useful
21:09:01 <nakilon> got no response from shinh about rasel (
21:21:34 -!- arseniiv has quit (Ping timeout: 252 seconds).
21:35:17 -!- tech_exorcist has quit (Quit: Goodbye).
21:35:42 <b_jonas> wow, the libretto of Zauberflöte has a lot of different translations to hungarian, and they all render Sarastro's aria "O Isis und Osiris" quite differently
21:36:49 <b_jonas> (for search purposes: the libretto was written by Emanuel Shikaneder)
21:40:04 <b_jonas> the one I've hear dthe most is https://www.youtube.com/watch?v=cbJPqMwMIbc “Ó, Isis és Osiris, járjon bölcs szellemed e pár előtt! Hogy a veszéllyel szembeszálljon, adjatok nékik rá erőt! Sikerrel járjon majd a próba – ám ha az út halálos volna, bátrak jutalma nékik jár, fogadd be őket, égi pár!”
21:42:09 <b_jonas> https://hu.wikipedia.org/wiki/Osiris,_Isis,_itt_e_p%C3%A1rnak says “Osiris, Isis, itt e párnak ó égi lelket adjatok! Ti álltok őrt a vándor útján, melletük is ti álljatok! Amerre vándorútjuk elmegy, nyíljanak égi rózsakelyhek, s ha életük útja véget ér, fonjatok nékik szent babért!”
21:43:42 <b_jonas> https://mek.oszk.hu/14500/14584/14584.htm says the same
21:44:16 <b_jonas> but there's even a translation that doesn't even mention Isis and Osiris
21:45:24 <b_jonas> and no, it's not a socialist system censure either that doesn't mention any religion
21:45:35 <b_jonas> it just says something like "o gods in heaven" or something
21:46:49 <b_jonas> https://www.youtube.com/watch?v=tUZ0tfG7tNo has Székely Mihály singing that second translation by the way
21:49:21 <b_jonas> or maybe that third one is just confusion, translating a different part of the lyrics? I'm trying to find out
21:50:35 <b_jonas> maybe these are the only two translations?
21:51:13 <b_jonas> the second one seems to have been translated by Harsányi Zsolt a long time ago
21:52:26 -!- orichalcumcosmon has joined.
21:54:46 <b_jonas> https://www.youtube.com/watch?v=7qE88dtLHPQ is Kovács Kolos singing the first translation (“Ó, Isis és Osiris, járjon bölcs szellemed”), which is thus probably actually historically a later translation then the second one
21:55:01 <b_jonas> s/Kovács Kolos/Kováts Kolos/
22:01:02 <b_jonas> that seems more reasonable than what it seemed at first. just two translations, an old one and a modern one
22:01:29 <b_jonas> it's a typical pattern for works this famous. what do you think, fungot?
22:01:29 <fungot> b_jonas: what a strange way :p). can i just use texinfo. does anyone here have a link please? :)
22:02:28 <b_jonas> fungot: yes, the link is https://sourceware.org/bugzilla/show_bug.cgi?id=21383
22:02:28 <fungot> b_jonas: if it doesn't, since i am dealing with squares anyways, it would be a
22:10:47 -!- Lord_of_Life has quit (Excess Flood).
22:11:39 -!- Lord_of_Life has joined.
22:12:07 -!- Koen_ has joined.
22:20:08 <esolangs> [[Mandelbrot set]] https://esolangs.org/w/index.php?diff=87913&oldid=68888 * Nakilon * (+97) /* External links */ In Brainfuck written by Erik Bosman.
22:35:02 <nakilon> remember I converted fungot code to png via direct translating to netpbm? I think it might be used as a weird version of QR codes
22:35:02 <fungot> nakilon: strictly business. open source too.
22:36:25 <nakilon> but while QR codes are recovering via error correction to read the photo of text rendered in such way you have to adjust color curves
22:37:18 <nakilon> you can adjust curves automatically until text starts having enough many statistically valid n-grams of the known context
22:40:00 <FireFly> ^style
22:40:00 <fungot> Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc* iwcs jargon lovecraft nethack oots pa qwantz sms speeches ss wp ukparl youtube
22:46:49 <nakilon> the idea is that while barcode readers are used to black and white images in the era of smartphones with full color cameras it's a waste of data
22:48:10 <nakilon> yes, it may be post-compressed with some universal compression algorithms but why? if you could just use the full color range
22:49:47 <nakilon> each such pixel is depicted with thousands of pixels on the photo that might be convertable to a 2 bytes deep color channel
22:50:00 <nakilon> or even deeper
22:50:34 <nakilon> so instead of 0, 1 and error correction sums you can adjust some "floats"
22:52:00 <nakilon> omg, thinking about https://en.wikipedia.org/wiki/QR_code#JAB_code
22:52:31 <nakilon> actual light sensors don't have to be used exactly on human visible spectre
22:53:09 <nakilon> the whole world can be marked in some not visible color range
22:54:08 <nakilon> damn https://www.cognex.com/blogs/industrial-barcode-reader/invisible-barcodes-help-prevent-counterfeit-products
22:58:20 <nakilon> a form of steganography
23:06:21 <nakilon> imagine fungot sending important messages here every day we just don't know how to decypher
23:06:22 <fungot> nakilon: i'm also applying to be haskell apprentice from xerox parc, and vanished. kranz went to curl, rak philbin went on to become a famous phrase.
23:18:16 -!- Koen_ has quit (Quit: Leaving...).
23:25:25 <nakilon> also while or worse cameras you had to adjust each channel curve separately today's camera are enough good to only adjust the lightness
23:45:18 <nakilon> ok these guys implemented something like what I said about full color range encoding https://en.wikipedia.org/wiki/Boxing_barcode - https://github.com/piql/boxing
23:46:02 <nakilon> why don't I invent things before others do it...
23:47:03 <nakilon> https://en.wikipedia.org/wiki/Barcode
23:48:58 <zzo38> Because of the Bob Profit principle, is someone who think of something probably someone else has already done, too
00:28:34 -!- chiselfuse has quit (Quit: leaving).
00:29:04 -!- chiselfuse has joined.
00:52:20 -!- chiselfuse has quit (Quit: leaving).
00:52:53 -!- chiselfuse has joined.
00:55:14 -!- chiselfuse has quit (Remote host closed the connection).
00:55:47 -!- chiselfuse has joined.
00:56:05 -!- chiselfuse has quit (Client Quit).
01:09:02 -!- chiselfuse has joined.
01:17:25 -!- chiselfuse has quit (Quit: leaving).
01:18:29 -!- chiselfuse has joined.
01:21:57 -!- oerjan has joined.
01:22:52 -!- chiselfuse has quit (Client Quit).
01:45:54 -!- chiselfuse has joined.
01:46:03 -!- chiselfuse has quit (Client Quit).
01:55:15 <esolangs> [[Quipu]] https://esolangs.org/w/index.php?diff=87914&oldid=87880 * Jo King * (-35) updated factorial example to simpler program
02:03:10 -!- Everything has quit (Ping timeout: 240 seconds).
02:14:59 <esolangs> [[User:Jo King]] N https://esolangs.org/w/index.php?oldid=87915 * Jo King * (+840) created my user page, hooray
02:18:18 <esolangs> [[User:Jo King]] https://esolangs.org/w/index.php?diff=87916&oldid=87915 * Jo King * (+0) fixed link
02:22:05 <esolangs> [[User:Jo King]] M https://esolangs.org/w/index.php?diff=87917&oldid=87916 * Jo King * (-1)
02:31:45 -!- chiselfuse has joined.
02:31:45 -!- chiselfuse has quit (Client Quit).
02:38:55 -!- archenoth has quit (Ping timeout: 252 seconds).
02:47:37 -!- archenoth has joined.
02:49:21 -!- Oshawott has joined.
02:52:40 -!- archenoth has quit (Ping timeout: 240 seconds).
03:36:36 <esolangs> [[Special:Log/newusers]] create * MishaKlopukh * New user account
03:41:41 <esolangs> [[Esolang:Introduce yourself]] M https://esolangs.org/w/index.php?diff=87918&oldid=87872 * MishaKlopukh * (+191) /* Introductions */
04:46:25 -!- delta23 has changed nick to [a]delta23.
05:10:29 <esolangs> [[RarVM]] M https://esolangs.org/w/index.php?diff=87919&oldid=78815 * Void * (+49) /* Hierarchical resource models: intent vs transfer */
05:49:50 -!- orichalcumcosmon has quit (Quit: Leaving).
05:54:26 -!- monoxane has joined.
06:02:44 -!- [a]delta23 has quit (Quit: Leaving).
06:34:20 <citrons> esolamg
07:51:47 -!- imode has quit (Ping timeout: 245 seconds).
08:04:07 -!- joast has quit (Ping timeout: 240 seconds).
08:04:12 -!- hendursa1 has joined.
08:06:57 -!- hendursaga has quit (Ping timeout: 276 seconds).
08:07:39 -!- Sgeo has quit (Read error: Connection reset by peer).
08:17:58 -!- joast has joined.
08:19:42 -!- xylochoron[m] has quit (Ping timeout: 245 seconds).
08:21:50 -!- xylochoron[m] has joined.
08:22:44 -!- phdu[m] has quit (Ping timeout: 252 seconds).
08:22:44 -!- Deewiant has quit (Ping timeout: 256 seconds).
08:24:26 -!- wib_jonas has joined.
08:29:21 -!- Koen_ has joined.
08:31:33 -!- Deewiant has joined.
08:33:41 -!- phdu[m] has joined.
08:35:49 <esolangs> [[Transfinite program]] https://esolangs.org/w/index.php?diff=87920&oldid=79792 * Glubs9 * (+228) /* Collections of real numbers as programs */
09:13:44 -!- oerjan has quit (Quit: Later).
09:30:12 -!- Taneb has quit (Ping timeout: 272 seconds).
09:30:30 -!- Taneb has joined.
09:35:27 -!- craigoverend[m] has quit (Ping timeout: 245 seconds).
09:35:51 <wib_jonas> wow. the weather forecast says no rain for a week. I don't think I've ever seen such a flat precipitation graph yet.
09:38:32 -!- craigoverend[m] has joined.
09:45:46 -!- ProofTechnique has quit.
09:46:01 -!- ProofTechnique has joined.
09:57:42 -!- hanif has joined.
10:14:52 -!- Lord_of_Life has quit (Ping timeout: 252 seconds).
10:23:38 -!- yuu_ has quit.
10:23:53 -!- yuu_ has joined.
10:26:14 -!- tech_exorcist has joined.
10:27:42 -!- Lord_of_Life has joined.
10:53:16 -!- APic has joined.
11:11:58 -!- arseniiv has joined.
11:14:41 -!- hanif has quit (Remote host closed the connection).
11:15:01 -!- hanif has joined.
12:00:18 -!- hanif has quit (Ping timeout: 276 seconds).
13:05:52 -!- hendursa1 has quit (Quit: hendursa1).
13:06:21 -!- hendursaga has joined.
13:16:41 -!- delta23 has joined.
13:19:47 -!- fungot has quit (Ping timeout: 240 seconds).
13:35:22 -!- wib_jonas has quit (Quit: Client closed).
13:52:14 -!- hanif has joined.
14:06:10 -!- delta23 has quit (Ping timeout: 240 seconds).
14:08:37 -!- Sgeo has joined.
15:19:51 -!- hanif has quit (Ping timeout: 276 seconds).
16:32:54 -!- imode has joined.
17:04:50 -!- earendel has joined.
17:15:54 -!- hanif has joined.
17:20:45 -!- hanif has quit (Ping timeout: 276 seconds).
17:34:20 -!- Koen_ has quit (Quit: Leaving...).
17:43:10 -!- hanif has joined.
18:18:05 -!- tech_exorcist has quit (Remote host closed the connection).
18:19:42 -!- tech_exorcist has joined.
18:22:30 -!- hanif has quit (Ping timeout: 276 seconds).
18:22:30 -!- hendursaga has quit (Ping timeout: 276 seconds).
18:29:02 -!- hendursaga has joined.
18:30:02 -!- hanif has joined.
18:30:08 -!- Koen_ has joined.
18:32:31 -!- tech_exorcist has quit (Remote host closed the connection).
18:32:56 -!- tech_exorcist has joined.
18:39:24 -!- Everything has joined.
18:49:42 -!- hanif has quit (Quit: quit).
20:50:46 <zzo38> I think some of the block cipher modes can be used with hashes as well as block ciphers, since they do not use the decryption function of the block cipher. There are other variations that can be done too, including another way to verify the data
20:52:15 -!- Lord_of_Life_ has joined.
20:52:16 -!- Everything has quit (Quit: leaving).
20:53:25 -!- Lord_of_Life has quit (Ping timeout: 252 seconds).
20:54:55 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
22:19:02 <nakilon> b_jonas do you mean where you live you get rain at least once a week?!
23:07:31 -!- Koen_ has quit (Quit: Leaving...).
23:33:49 -!- tech_exorcist has quit (Quit: Goodbye).
23:45:56 -!- riv has quit (Remote host closed the connection).
23:46:15 -!- riv has joined.
00:00:03 -!- joast has quit (*.net *.split).
00:00:04 -!- Corbin has quit (*.net *.split).
00:00:04 -!- Noisytoot has quit (*.net *.split).
00:02:12 -!- Corbin has joined.
00:03:01 -!- joast has joined.
00:03:40 -!- Noisytoot has joined.
00:18:09 -!- Pyautogui has joined.
00:20:40 -!- Corbin has quit (Ping timeout: 240 seconds).
00:22:25 -!- arseniiv has quit (Ping timeout: 252 seconds).
00:53:27 -!- Pyautogui has quit (Ping timeout: 245 seconds).
00:56:20 -!- Pyautogui has joined.
00:58:53 -!- Pyautogui has left.
01:14:20 -!- Everything has joined.
01:14:21 -!- earendel has quit (Quit: Connection closed for inactivity).
01:33:06 -!- oerjan has joined.
02:12:27 -!- chiselfuse has joined.
02:12:41 -!- chiselfuse has quit (Client Quit).
02:19:06 -!- chiselfuse has joined.
02:49:05 -!- sebbu has quit (Ping timeout: 250 seconds).
02:54:15 -!- sebbu has joined.
03:01:53 -!- earendel has joined.
03:20:54 -!- orichalcumcosmon has joined.
03:22:02 -!- chiselfuse has quit (Quit: leaving).
03:24:17 -!- orichalcumcosmon has quit (Client Quit).
03:26:08 -!- orichalcumcosmon has joined.
03:35:12 -!- chiselfuse has joined.
04:42:13 -!- chiselfuse has quit (Remote host closed the connection).
05:25:28 -!- Corbin has joined.
05:39:10 -!- orichalcumcosmon has quit (Quit: Leaving).
05:41:06 -!- hendursaga has quit (Ping timeout: 276 seconds).
05:43:54 -!- hendursaga has joined.
06:19:54 <zzo38> Specifically, the CFB, OFB, and CTR modes do not require the block cipher to be able to decrypt anything. I think ChaCha20 is like CTR mode, anyways. Maybe any mode could also be combined with XEX mode, too.
06:21:00 <keegan> ChaCha20 is a stream cipher, not a block cipher
06:21:10 <keegan> and CTR mode is a construction for turning a block cipher into a stream cipher
06:23:02 <keegan> I think you are right that you could use something like hash(key ++ counter) in place of encrypt(key, counter) in a CTR construction
06:23:38 <keegan> but i'd have to think about the formal guarantees of such a construction
06:25:11 <keegan> whether it's actually secure given the usual assumptions of a cryptographic hash function
06:26:24 <keegan> it's easy to come up with (contrived) examples of hashes which are resistant to collision and pre-image attacks and yet do not produce a secure stream cipher this way
06:26:46 <keegan> for example pad the output of a standard cryptographic hash with zeroes
06:27:34 <keegan> however a lot of the time cryptographic systems are proven secure within the "random oracle model", where hashes are replaced with an idealized randomly-chosen mapping from the input space to the output space
06:27:46 <keegan> and that should suffice for a stream cipher, i think
06:35:37 <zzo38> Although they call ChaCha20 a stream cipher, it looks to me like a block cipher with CTR mode.
06:36:16 <nakilon> TIL: computers have mastered Gomoku in 2017 https://en.wikipedia.org/wiki/Gomoku#Computers_and_Gomoku
06:39:21 <keegan> I once looked into Salsa20/ChaCha as an example of a modern secure cipher that might be feasible (if annoying) to work by hand
06:39:30 <keegan> it's fairly simple as these things go
06:40:03 <nakilon> https://en.wikipedia.org/wiki/Computer_Olympiad
06:49:11 <zzo38> Yes, it will still be slow to work by hand for long messages, but it is still possible, I think
07:26:25 <zzo38> Why don't you like Free Hero Mesh? (It is similar to some (not all) of the kind of puzzle games sometimes mentioned by other people on here, and can also be considered as a alternative of Xsok and PuzzleScript (some of the features of Free Hero Mesh were designed to be similar to some of the features of those other programs, too).) Currently nobody else is on the Free Hero Mesh. If there is other IRC to suggest to try, you can suggest t
07:32:41 <zzo38> I suppose that the reversible ChaCha20 could be used (with key whitening) with other block cipher modes too, although I don't know if it is secure.
08:06:48 -!- hendursa1 has joined.
08:10:36 -!- hendursaga has quit (Ping timeout: 276 seconds).
08:22:51 -!- Koen_ has joined.
08:27:17 -!- Sgeo has quit (Read error: Connection reset by peer).
08:45:18 -!- imode has quit (Ping timeout: 256 seconds).
09:19:30 -!- earendel has quit (Quit: Connection closed for inactivity).
09:35:10 <b_jonas> nakilon: in the autumn at least, sure
09:35:17 <b_jonas> I'm not in Australia
09:37:36 <b_jonas> and even if there's no rain for a week, the week long forecast isn't so confident in it
09:43:36 -!- tech_exorcist has joined.
09:50:43 -!- Melvar has quit (Ping timeout: 250 seconds).
09:55:22 -!- Melvar has joined.
09:57:36 -!- Melvar` has joined.
09:59:42 -!- Melvar has quit (Ping timeout: 245 seconds).
10:02:44 -!- Melvar` has quit (Ping timeout: 252 seconds).
10:13:32 -!- tech_exorcist has quit (Remote host closed the connection).
10:14:09 -!- tech_exorcist has joined.
10:15:48 -!- Melvar` has joined.
10:33:57 -!- Everything has quit (Quit: leaving).
11:56:26 -!- earendel has joined.
12:15:15 -!- chiselfuse has joined.
12:48:35 -!- Koen_ has quit (Remote host closed the connection).
12:51:08 -!- V has joined.
13:02:37 <int-e> `learn The password of the month is Waiwhakaiho
13:02:40 <HackEso> Relearned 'password': The password of the month is Waiwhakaiho
13:04:04 <oerjan> oops
13:04:28 <oerjan> i distinctly recall having thought of a password well in advance, then forgotten about it,
13:04:31 <oerjan> .
13:05:00 <oerjan> (and of course i distinctly don't recall what it was.)
13:05:11 <int-e> There'll be another month.
13:05:18 <int-e> I think.
13:05:21 <oerjan> MAYBE
13:07:09 <int-e> oerjan: That anecdote is proving a point made previously: The password of the month is most forgettable.
13:07:38 <int-e> (This is a problem. I really like these kind of descriptions, but it's hard to come up with new ones.)
13:08:24 <oerjan> at least this month's is mysterious.
13:15:23 -!- Koen_ has joined.
13:17:25 -!- arseniiv has joined.
13:28:05 -!- hendursa1 has quit (Quit: hendursa1).
13:28:47 -!- hendursaga has joined.
13:47:01 -!- oerjan has quit (Quit: Nite).
14:13:15 -!- Koen_ has quit (Remote host closed the connection).
14:13:37 <fizzie> I had a pending password of the month too, maybe around May, and I remembered it for a while, but by now I've forgotten it.
14:15:55 -!- Trieste has quit (Ping timeout: 250 seconds).
14:59:33 -!- chiselfuse has quit (Remote host closed the connection).
15:00:17 -!- zegalch has quit (Remote host closed the connection).
15:00:42 -!- zegalch has joined.
15:02:59 -!- riv has quit (Quit: Leaving).
15:03:39 -!- chiselfuse has joined.
15:04:06 -!- chiselfuse has quit (Remote host closed the connection).
15:53:54 -!- earendel has quit (Quit: Connection closed for inactivity).
16:04:49 <arseniiv> `? password
16:04:51 <HackEso> The password of the month is Waiwhakaiho
16:05:02 <arseniiv> whm
16:19:30 -!- spruit11_ has joined.
16:22:27 -!- spruit11 has quit (Ping timeout: 250 seconds).
16:51:13 -!- Melvar` has changed nick to Melvar.
16:51:28 <Melvar> I have a number type here where (0.1 + 0.1) - 0.2 is 0.00390625 . I wonder how quickly someone will guess what number format this is.
16:53:19 <int-e> > log(0.00390625)/log(2)
16:53:21 <lambdabot> -8.0
16:54:18 -!- chiselfuse has joined.
17:00:53 -!- imode has joined.
17:06:52 <int-e> Melvar: overly specific link: https://gitlab.freedesktop.org/cairo/cairo/-/blob/master/src/cairo-fixed-type-private.h#L62
17:08:47 <int-e> (And no, I didn't take 15 minutes to think of a format, I just decided to act on the impulse to check whether cairo is still doing that
17:08:50 <int-e> )
17:10:12 <int-e> (I thought it uses double instead these days, but that code is still there. So I don't know.)
17:14:54 <Melvar> While you are correct that it is a 24.8 fixed point number, the reason I have it is that the Wayland protocol includes these.
17:17:43 <int-e> does wayland use pixman in any shape or fashion?
17:19:14 <Melvar> Supposedly wayland is a protocol, even though everyone’s *supposed* to just use the one implementation. But I don’t know if that one implementation uses pixman.
17:21:22 <int-e> it's probably irrelevant anyway... it should be using 16.16 fixed point (48.16 on 64 bit platforms)
17:21:24 <Melvar> (One implementation *for the protocol-speaking itself*, that is. Of course, I wrote my own anyway because I felt like it, that’s why the number discussion of the past couple of days had me bring this up.)
17:22:04 <int-e> As did cairo, initially... but people ran into problems with large geometries and they decided to compromise on 24.8 instead.
17:22:06 <Melvar> All the things in the wayland protocol are 32-bit words in host byte order, except byte arrays.
17:24:36 <int-e> But the reason I was asking was that IIRC, pixman is somewhat present in the X11 protocol's Render extension, so it might have crept into wayland that way. https://github.com/D-Programming-Deimos/libX11/blob/master/c/X11/extensions/Xrender.h#L129-L130 (And yes, there's some confusion about cause and effect here :-) )
17:24:53 <int-e> ...D-Programming-Deimos... search engines are so random
17:25:11 <Melvar> This is especially fun because one part of the message metadata is a 32-bit word with the message length in the high half and the opcode in the low half, but you can’t (at least not fully portably in principle) read this as two 16-bit words because the order of the 16-bit words switches between little-endian and big-endian systems.
17:26:46 <int-e> these days... leave it up to the compiler to figure that out
17:27:16 -!- Sgeo has joined.
17:27:42 <Melvar> Wayland’s thing is not actually having anything about client rendering in it, except for “how do you make the right kind of buffer” because in-GPU-memory buffers obviously need to be set up by different mechanisms than in-main-memory buffers.
17:28:04 <int-e> fizzie: ENOFUNGOT
17:28:55 <int-e> Melvar: then why do they have subpixel coordinates at all?
17:30:06 <int-e> Oh, I'm making an assumption there.
17:30:38 <Melvar> Because you may render your content at a higher resolution if wayland tells you it’s being shown on a hidpi display, it seems, mainly.
17:33:28 -!- riv has joined.
17:33:32 <Melvar> In the core protocol, it seems that mouse, touch, and scroll events use these fixnums for their coordinates, plus for the shape properties of touch points if those are supported by your input device.
17:34:43 -!- spruit11_ has quit (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.).
17:34:59 -!- spruit11 has joined.
17:35:14 -!- fractal42 has joined.
17:36:46 <Melvar> So the mouse/pointer can probably only be at locations corresponding to real pixels, but with the scaling you can have multiple real pixels per unit of surface coordinates.
17:39:31 <int-e> Hmm. I guess that makes sense.
17:39:48 <Melvar> The scaling stuff is such that the default is just that the compositor scales up your pixel data itself if you don’t say you’re rendering at the increased resolution it told you about.
17:40:49 * int-e is living a compositer-free life :P
17:40:58 <Melvar> Like, it tells you about the scale of any output you’re being shown on, and you tell it about the scale you’re rendering at (default 1), and the compositor has to make up the difference.
17:41:13 <int-e> which I guess is borderline insane these days
17:42:04 <Melvar> I’m not actually using wayland either because there’s still not a functional WayMonad yet.
17:44:26 <fizzie> Oh, right.
17:44:37 <fizzie> Our interweb at home went down yesterday.
17:44:56 <fizzie> I even said out loud "hmm, fungot has probably dropped off", but then did nothing about it.
17:44:59 <Melvar> And an actual XMonad developer noted that having garbage collection in the rendering path is a problem, so a new protocol to replicate the X setup of window manager as a separate process may need to be invented before a WayMonad becomes really usable.
17:45:34 -!- fungot has joined.
17:46:36 <Melvar> Good thing the wayland protocol is pretty extensible.
17:49:14 <fizzie> I imagine pen input can have subpixel accuracy even in terms of physical pixels. At least I remember pen displays quoting ridiculous numbers for that.
17:50:19 <Melvar> Possibly.
17:53:21 -!- fractal42 has left.
17:53:31 <fizzie> Wacom's almost-entry-level Cintiq 16 (I've been thinking about getting one, purely because I have an inexplicable attraction for things with pens) has a ~142dpi 1920x1080 display, but a "5080 lpi" "pen resolution".
17:53:33 <fizzie> Though I feel like that's the same sort of number as printer resolutions.
17:54:44 <b_jonas> I have certainly thought of passwords, including "DVD demagnetizer", but I don't find it important enough to set them, and it would feel dirty to automatically set them, and it's not clear where the ethics boundary is between running a script that automatically grabs the password at midnight (which timezone?) and just setting up a calendar reminder to grab the password, so I just don't do anything.
17:58:29 <shachaf> If I want a tablety thing I can draw on, which also has a screen so I can look at it while I'm drawing, what's the best option?
17:58:51 <shachaf> I mean for things like interactive online things where other people can see it.
18:00:11 <fizzie> Should it be a self-contained computing device, or just a peripheral to an existing computer?
18:01:25 <fizzie> I've been informed that the iPad Pro + Apple Pencil combination is up there, I've just personally ruled that out for software-related reasons.
18:03:01 <shachaf> My vague impression was that the iPad Pro Pencil thing was very good.
18:03:26 <shachaf> But I'm similarly not that into using an Apple thing.
18:05:03 <fizzie> There's also the Surface Pro and the Surface Pen, which I think wasn't bad either, but I've *also* ruled that out for software reasons.
18:05:13 <fizzie> HP's just introduced a "Chromebook x2 11" that supports the USI stylus standard, I've been hoping someone would review it for that sort of a use case.
18:07:48 <int-e> Hmm, peripherals. Apparently there's non-Wacom stuff in this area which is not completely unaffordable. https://www.amazon.com/dp/B07SR4615F/
18:07:54 <fizzie> And PINE64 recently announced they're going to produce an e-ink thing called a PineNote that's something along the lines of the Remarkable, but that's quite a different thing, what with having a monochrome and inherently-slow-refresh-rate e-ink screen.
18:08:11 <fizzie> I don't think the Wacom stuff qualifies as "completely unaffordable" any more.
18:08:23 <fizzie> It used to be a thing that Cintiq displays cost a whole lot of money, but now those really expensive ones have been rebranded "Cintiq Pro" and they've added two reasonably priced "basic" models, plus the Wacom One.
18:10:12 <int-e> Hmm so they have.
18:10:16 <fizzie> (The 16" Cintiq 16 costs $649.95, and the 13" Wacom One costs $399.95, in terms of the Wacom store list prices.)
18:10:54 <int-e> cintiq pro seems to start at $2k on Amazon
18:11:32 <b_jonas> shachaf: hmm, my coworker recommended something that they were taking notes on, but becuse I don't want one, I don't remember what it was
18:11:37 <b_jonas> plus it was partly software recommendation
18:18:36 <int-e> wth is Windows S-mode... oh... full vendor lockin mode.
18:24:38 <fizzie> I think I heard something about that.
18:26:23 <int-e> (my browsing drifted to cheap laptops)
18:27:16 <int-e> Of course "S" officially stands for "secure" but it's really the walled garden kind of "security".
18:28:11 <int-e> Not that I care all that much... as long as I can wipe it and install Linux. Which... well I guess I have to figure out for each model separately since we can no longer trust CPUs nor BIOSes to be open?
18:29:27 <int-e> (CPU: https://www.servethehome.com/amd-psb-vendor-locks-epyc-cpus-for-enhanced-security-at-a-cost/ ...not sure whether this crap has made its way to non-server x86 hardware by now.)
18:55:16 -!- kronk has joined.
19:58:03 -!- Everything has joined.
20:27:38 -!- tech_exorcist has quit (Remote host closed the connection).
20:52:45 -!- Lord_of_Life_ has joined.
20:53:52 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
20:54:01 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
21:05:22 <zzo38> There are many things that I don't like about Wayland, so I won't use it. I think instead a improved version of X could be made (mostly the core X11 stuff but with some differences), and then using proxying for security.
21:10:28 -!- tech_exorcist has joined.
21:40:42 <fizzie> Hmm, 2160x1440, that's an interesting resolution. (My browsing drifted to looking at first-impression comments on the HP x2 11, but nobody's been talking about the pen at all.)
21:41:28 <int-e> > 2160/1440 :: Rational
21:41:29 <lambdabot> 3 % 2
21:41:57 <fizzie> 3:2 is a nice aspect ratio though. My camera takes 3:2 pictures.
21:42:25 <nakilon> lol
21:42:26 <nakilon> $ rg "-V" ~/.rbenv/versions/2.3.8/
21:42:26 <nakilon> ripgrep 12.1.1
21:42:31 <int-e> I'm not judging (I think 16:9 is too wide, personally); I was just too lazy to do the math
21:42:41 <nakilon> can't grep for "-V" because it's a flag of a grep utility
21:42:42 <fizzie> Also, I'm a little worried about it being a ChromeOS device. I tried out a ChromeOS tablet with a pen once, and just couldn't figure out a way to make it do palm rejection at all, so it was really frustrating. That's why I've been thinking about the Wacom display: it doesn't do capacitive touch at all, so there's no need to worry about unintentional inputs.
21:43:07 <fizzie> Usually you pass arguments starting with a dash by doing -- before the arguments.
21:43:14 <fizzie> As in, `rg -- -V ...`.
21:43:46 <nakilon> worked, thanks
21:49:51 -!- ais523 has joined.
21:50:23 <ais523> I sort-of want to rant about system programming languages and general-purpose pointers/references
21:50:54 -!- hendursaga has quit (Ping timeout: 276 seconds).
21:50:58 <ais523> there are two things you can do with a pointer: a) pointer arithmetic operations like offset, compare, etc.; and b) dereferencing it to get at the value you're pointing to
21:51:17 -!- hendursaga has joined.
21:51:19 <ais523> operations in group a) are occasionally useful, but operations in group b) are much, much more common
21:51:33 <ais523> however, system programming languages seem to optimise for a) in practice
21:51:59 <ais523> for example, Rust has a way to cast an &T into a *const T, and you can do this with any &T, with no restrictions
21:52:56 <ais523> this means that any code that produces an &T needs to have an actual concrete memory location, with an address, for the thing that it points to, even though 99.9% of the time that's useless and the code you pass the &T to will only care about the thing it points to, not the location of the thing it points to
21:54:05 <ais523> and this seems like it could make optimisation much more difficult, e.g. you can *almost* optimize an &u32 into a u32 (i.e. replacing pass-by-reference with pass-by-value in a situation where the rules of the language prevent the reference target changing), but you can't, due to the off-chance that the program you pass the reference to cares about the address
21:54:50 <ais523> so I'm wondering how difficult it would be to make an optimiser that applies this optimisation anyway, and I'm wondering that it's likely to be too difficult in practice, and also suspect it may have a substantial performance impact
21:55:18 <ais523> (even if not at runtime, the compiler is going to need to do a lot of inlining, etc., to spot that the address isn't being used)
21:57:22 <ais523> something similar happens to constants; often you care about their value but not their address, but the compiler can't safely merge two constants with the same value if their address might be relevant
21:57:36 <ais523> (incidentally, NetHack contains at least one constant with an irrelevant value, which is used only for its address)
21:57:38 <zzo38> I know there is X on Wayland, but is there Wayland on X?
21:58:23 <shachaf> Go has b-type pointers only. Which seems very reasonable to me, I don't know why more high-level languages don't have b-type pointers.
21:58:35 <zzo38> C has a "register" command to indicate that taking the address is not possible.
21:58:39 <shachaf> Zig has distinct pointer types for a and b, I believe.
21:59:10 <shachaf> Not that this really addresses the thing you were saying.
22:00:13 -!- tech_exorcist has quit (Quit: see you tomorrow).
22:00:23 <shachaf> I think languages that have some sort of escape anaysis might be able to do this sort of thing? I vaguely remember that maybe Go does something like that to know whether it can stack-allocate pointers?
22:00:23 <ais523> I think that having them separate is one of the better solutions
22:00:38 <shachaf> Uh, stack-allocate values that it passes pointers to to things.
22:00:41 <ais523> it strikes me that Rust lifetimes might be abusable to track a-ness versus b-ness of a reference
22:01:05 <ais523> but, it wouldn't nest in the same way as other lifetimes
22:01:13 <ais523> would be nice for making code generic over pointer types though
22:01:33 <ais523> zzo38: I think it would make sense to reuse the "register" keyword as "you can't take the address of this"
22:01:41 <ais523> but it would be quite a big change to the language
22:02:48 <shachaf> Isn't it already how the language works?
22:02:54 <shachaf> I thought that was the entire meaning of "register".
22:03:13 <ais523> yes but it's only usable in one context
22:03:20 <ais523> which is defining local variables (including function parameters)
22:03:27 <shachaf> Oh, I see.
22:03:41 <ais523> you can't write int register* x
22:04:00 <shachaf> Right.
22:04:01 <ais523> err, int *register x
22:04:09 <ais523> (whereas int *const x says that x is const)
22:04:17 <ais523> err, that *x is const
22:04:30 <ais523> x is const would be int const * x or const int* x
22:04:58 <ais523> C type syntax is a good example of how something can have a very simple specification but be utterly unintuitive in practice, and I'm out of practice with it
22:05:14 <b_jonas> oh hi ais523
22:05:21 <b_jonas> I knew you'd be summoned eventually
22:05:22 <zzo38> I think that the confusing syntax for types is the worst feature of C.
22:05:36 <riv> yes
22:05:40 <shachaf> Should I switch to writing const after the type, for consistency?
22:05:52 <shachaf> int const x; instead of const int x; and so on.
22:05:58 <shachaf> I think maybe I should.
22:06:14 <ais523> shachaf: I've been wondering about that
22:06:33 <ais523> int const x; is more consistent, and makes the rules easier to remember; but const int x; is much harder to misinterpret
22:06:49 <ais523> I have gotten into the habit of writing *const rather than * const
22:06:52 <shachaf> The thing that made me remember how to make constant pointers and so on was when someone told me to think of it as a subscript.
22:06:58 <shachaf> As in "int *_{const} x;"
22:07:02 <ais523> (I got taught that by a syntax reformatter, I forget which one)
22:07:37 -!- arseniiv has quit (Ping timeout: 245 seconds).
22:07:41 <ais523> hmm, I wonder whether C's type syntax would be more readable if you just swapped the value and type
22:07:58 <ais523> x: *const int versus x: const *int
22:08:23 <ais523> that looks fairly intuitive?
22:08:31 <shachaf> I'm not so sure const is even a good idea in C.
22:08:45 <shachaf> Which is a separate matter from the syntax, of course.
22:08:48 <ais523> x: (*int)(int, int) maybe less so
22:09:14 <ais523> actually, that one's badly misleading, probably even ambiguous
22:09:26 <shachaf> This argument was sort of convincing: https://gist.github.com/pervognsen/a99c9b2e2712deeb5f174553b4dc0c88
22:09:51 <ais523> you'd want to write the function pointer as *(int)(int, int) but that's not a simple swap of type and value
22:10:26 <b_jonas> ais523: "you can *almost* optimize an &u32 into a u32" => in rust, the solution to that is to always just pass the value in your code, like the u32 in this case, if it works, because if it's too large, the ABI will pass it as a pointer if it's large anyway. this doesn't work if you want the called function to mutate the value, or if the value isn't movable, but both of those invalidate that
22:10:26 <ais523> I think my opinion of const in C is that it's badly designed, but still helps to catch enough errors that it's worth putting up with the design flaws and false positives
22:10:32 <b_jonas> optimization; and also if the value is not compile time fixed length, but then passing it as a function argument is a hard problem in general.
22:11:08 <ais523> b_jonas: it doesn't work well with generic code, or with non-Copy things
22:11:13 <ais523> a good example is Rc
22:11:31 <b_jonas> ais523: in C++, the solution to that is this newfangled | qualifier, which I'm not sure if it actually got into C++ yet or is in proposal stage, which you use in a function argument, and means that the compiler can either write const & or nothing there, as in, pass the value either by const reference or by value
22:11:31 <ais523> an Rc is 8 bytes long, and not Copy, but cloning it doesn't mutate the Rc itself (just the RcBox it points to)
22:12:01 <shachaf> Hmm, I still haven't figured out what Cell and RefCell in Rust are.
22:12:05 <ais523> so you'd want to optimise &Rc into &RcBox to avoid the double indirection, but it's hard to see that that optimisation is valid (because someone might take the address of the Rc itself)
22:12:12 <shachaf> The documentation doesn't seem to answer that question.
22:12:25 <ais523> shachaf: I figured it out when I wrote code that needed a custom RefCell-like thing
22:12:50 <ais523> the basic idea is, a Cell is something that can be mutated through a shared (&) pointer (whereas most things need an &mut pointer to be mutated)
22:12:56 <b_jonas> there is a reason why the actual thing you write differs in C++ vs rust, but it's irrelevant now, the main point is that both are trying to solve this and rust has solved it already
22:13:02 <shachaf> The memory layout of Cell<T> is the same as T, right?
22:13:05 <ais523> so, you can have a Cell<u32>, for example, and write a new u32 to it
22:13:27 <ais523> and yes, memory layout is identical to T, you're just marking it as being mutatable even if there are references to it
22:13:40 <shachaf> Is Cell something you need unsafe-or-similar to implement?
22:13:55 <ais523> it's implemented in terms of UnsafeCell, which is a compiler primitive
22:14:04 <shachaf> Why doesn't being able to mutate it through & cause problems?
22:14:17 <ais523> there are limits on the sort of mutations you can do
22:14:40 <shachaf> I see, you can only write an entire new value in, or something?
22:14:46 <ais523> the main rule is that you can `Copy` the value out of the cell, or overwrite a value into the cell, or swap the value in the cell with another, as long as it's only accessible from one thread
22:14:51 <shachaf> Rather than getting a pointer to the thing?
22:14:52 <ais523> but, you can never get a reference to the value inside
22:14:57 <shachaf> Right.
22:15:15 <ais523> `RefCell` is like `Cell` but does runtime checks rather than compile-time checks
22:15:16 <HackEso> RefCell`? No such file or directory
22:15:33 <b_jonas> I think people exaggerate how bad the C pointer/array/function thing is. it's something you have to learn once, but it's not something that will cause lots of hard to debug bugs in your program or anything. as problems with function languages go, it's mild. it's something only people who want to hate C will say.
22:15:48 <shachaf> So you can have fn f(a: &Cell<u32>, b: &Cell<u32>); let x: Cell<u32>; { f(&x, &x); }, and f doesn't care that the values alias.
22:15:55 <ais523> you can get a reference to the value inside, but only if there are no conflicting references, you get an error if you try to create a unique reference to it at the same time as any other sort of reference
22:16:01 <riv> another bad thing about C is the build system stuff
22:16:06 <ais523> shachaf: right
22:16:13 <shachaf> And it behaves sort of like "void f(u32 *a, u32 *b);" in C, where the compiler can't assume anything.
22:16:13 <riv> C should be designed so that it can be compiled easier
22:16:23 <ais523> shachaf: exactly
22:16:28 <shachaf> OK, got it, that makes sense.
22:16:46 <shachaf> Why does RefCell need runtime checks? What does it let you do?
22:16:51 <b_jonas> ais523: also you didn't react to what I wrote about Infinite Vector, so now I have to ask you
22:17:00 <b_jonas> ais523: does what I wrote about Infinite Vector sound right?
22:17:06 <ais523> it lets you take a reference to the inside of the cell, but the runtime checks make sure that there aren't too many
22:17:13 <ais523> b_jonas: it looked plausible but I didn't want to think about it too deeply
22:17:17 <ais523> I'm not surprised it's TC
22:17:18 <b_jonas> ok
22:17:34 <shachaf> Aha. RefCell lets you borrow the inside of the cell.
22:17:37 <ais523> right
22:17:48 <shachaf> In particular it lets you take any number of const references or at most one mut reference?
22:17:53 <ais523> yes
22:18:00 <shachaf> Makes sense!
22:18:05 <ais523> but the type system doesn't prevent you doing both at once, which is why the runtime checks are needed
22:18:10 <shachaf> Right.
22:18:12 <shachaf> I don't know why they don't say that in the documentation.
22:18:33 <shachaf> I asked someone about it, and they gave an explanation that would have required Cell<T> to have a different memory layout from T.
22:18:48 <ais523> that's technically correct but misses the point
22:18:59 <b_jonas> stuff about Infinite Vector at https://logs.esolangs.org/libera-esolangs/2021-08-31.html#lrc for future reference
22:19:36 <ais523> RefCell<T> needs a reference count to count the borrows, which does give a different memory layout, but the point is more that you need runtime checks to count the borrows
22:19:44 <shachaf> Yes, but Cell<T> doesn't.
22:19:52 <ais523> yep, because it can't be borrowed at all
22:19:55 <shachaf> So then we were both confused.
22:20:11 <shachaf> Anyway this makes sense, thanks for clarifying.
22:20:42 <shachaf> Maybe one day I'll understand Pin.
22:20:44 <ais523> in practice Cell<T> works best on things that are `Copy` and fairly small, so that you'd have little reason to borrow it (and don't need to swap a placeholder value in when you take the old value out)
22:20:46 -!- Koen_ has joined.
22:21:15 <fizzie> If "swap the value and type" means "pull out the identifier from the declarator, and then write the type name after it", I don't know how much that would help, since simple things are already simple, and complex declarators are probably even worse to read when the identifier isn't in there to show where to start from.
22:21:18 <fizzie> Go does the "strictly separate the identifier and type name" thing, but it *also* moves the [] syntax to be prefix to match *, and uses a keyword to introduce function types, which does a lot of the heavy lifting of making type names more "linear".
22:21:31 <b_jonas> ais523: I think that's deliberately hard. you have three options: move the Rc if you no longer need it, in which case you just pass by value; or if you do need it but the called function doesn't need to keep a reference but only look at the pointed value now, then pass a reference to the pointed value, it will be valid because you're the caller and you're keeping the copy of the Rc; or if both of you
22:21:37 <b_jonas> need it, then clone the Rc explicitly, but that's something Rust doesn't want to do implicitly without you actually writing .clone()
22:21:46 <shachaf> The Go syntax for types seems mostly better than the C syntax.
22:21:51 <shachaf> Some of it is a little odd but it's fine.
22:22:07 <b_jonas> but that third thing is rare
22:22:09 <ais523> b_jonas: this mostly comes up with generic code
22:22:09 <shachaf> Presumably you should have a really good reason not to make your programming language syntax LL(1).
22:22:14 <shachaf> Is the Go syntax LL(1)?
22:22:27 <ais523> almost all generic code assumes that the receiver for methods that don't need to mutate self is &self
22:22:46 <riv> mostly people just code without thinking or caring about theory
22:22:49 <shachaf> Oh, not quite apparently.
22:22:51 <riv> so things end up not being LL(1)
22:23:07 <fizzie> I remember there's an annoying syntax quirk in Go where you sometimes need to add ()s around the controlling expression of an `if` statement, when there's {}s involved in the expression as well.
22:23:16 <ais523> my opinion on this is that you normally have a separate parser and lexer anyway, so few languages are LL(1) at the byte level
22:23:20 <b_jonas> ais523: really? aren't you confusing that with C++ or with run-time dynamic type dispatch code?
22:23:29 <riv> yes LL(1) in terms of tokens
22:23:35 <riv> and the token language should be regular
22:23:52 <b_jonas> shachaf: no, I think that's only true for LR(1), not for LL(1)
22:23:56 <ais523> riv: my opinion on this is that it'd be great if the parser and lexer could be combined
22:24:08 <riv> i suppose they can be combined
22:24:22 <b_jonas> sure, simpler languages will be LL(1)
22:24:25 <riv> but it's good if they can be separated in terms of specification
22:24:30 <ais523> b_jonas: something that always amazes me is that the syntax of yacc (after tokenisation) is LR(2) but not LR(1)
22:24:45 <b_jonas> ais523: heh
22:24:46 <ais523> some yacc implementations work around this by getting the lexer to do an extra token of lookahead
22:24:51 <shachaf> Hmm, I should learn how LR parsers work.
22:24:53 <ais523> but it's crazy that it technically can't parse itself
22:25:06 <b_jonas> ais523: is that because there's no separator (semicolon) between the rules?
22:25:09 <ais523> and even more crazy that it's LR with a finite number that isn't 1
22:25:28 <riv> that is so funny
22:25:31 <ais523> b_jonas: right, semicolons are optional, and to parse the case where they're missing you need two tokens of lookahead
22:25:48 <b_jonas> odd
22:25:59 <b_jonas> I wonder why they defined yacc syntax like that
22:26:14 <b_jonas> is there some history behind it?
22:26:14 <ais523> it was probably some sort of historical accident?
22:26:25 <ais523> yacc probably wasn't originally programmed in itself, as it'd have been a pain to bootstrap
22:26:28 <b_jonas> like trying to unify the syntax of two incompatible parser generator syntaxes?
22:26:34 <ais523> so probably there was a hand-rolled parser, which wasn't necessarily going to be LR
22:26:48 <ais523> given that the name starts "ya", though, there must have been a number of parser generators before it
22:26:49 <riv> they could have still designed it to be LR(1) :P
22:26:52 <riv> i really love this fact
22:27:09 <b_jonas> sure, but whoever thought, let's write an LR(1) parser generator, they probably understood what makes a language LR(1), and automatically used such a syntax
22:27:30 <int-e> Do you have a shift/reduce parser in your brain? I'm pretty sure I don't.
22:27:33 <b_jonas> it's not like back when nobody knew how parsing is supposed to work, so they just wrote up syntax and figured out afterwards how to parse it, which is supposedly how fortran was born
22:27:49 <int-e> Also pretty sure that while the brain has limited lookahead, the limit isn't 1.
22:28:04 <ais523> I have been wondering about extensions to shift/reduce automata
22:28:24 <ais523> shift/reduce/rewind seems to have a lot of power, whilst still being efficient if you put appropriate limitations on it (it's probably TC if you don't put limitations on it)
22:28:34 <ais523> err, maybe LBA rather than TC
22:29:11 <b_jonas> what is "LBA"?
22:29:25 <int-e> linearly bounded automaton
22:29:39 <b_jonas> memory bound to O(n) where n is input size?
22:29:44 <int-e> logical block addressing
22:29:47 <int-e> little big adventure
22:29:59 <b_jonas> fungot, what does LBA stand for
22:29:59 <fungot> b_jonas: you should avoid using it for is to eliminate the usage of funky python.
22:30:00 <ais523> b_jonas: right
22:30:14 <ais523> you get O(n) memory where n is the number of bits in the input
22:30:19 <b_jonas> `? lba
22:30:21 <HackEso> This channel is having a Little Big Adventure(tm) with Linear Bounded Automata in devices using Logical Block Addressing.
22:30:45 <int-e> I may be responsible for that one
22:30:49 <int-e> `cwlprits lba
22:30:52 <HackEso> int-̈e
22:31:03 <shachaf> Man, LBA was such a big upgrade over Illogical Block Addressing.
22:31:13 <shachaf> Why did they even start with that scheme?
22:31:47 <int-e> physical addressing by head, cylinder, sector?
22:32:02 <int-e> I imagine it matched the hardware better at the time
22:32:21 <b_jonas> shachaf: because they designed the PC before DOS brought in the unix heritage of linearly addressed block devices
22:32:53 <int-e> also before HDDs made tracks have different numbers of sectors depending on how long they are
22:33:22 <int-e> and automatically remap bad sectors and all that
22:33:48 <b_jonas> you don't want to put too much complicated logic in the disk contorller, and especially not in the disk, because electronics was expensive, and there's already a CPU that can compute everything for you, so the CPU computes the cylinder, head, sector addresses and tells that to the disk controller
22:34:00 -!- delta23 has joined.
22:34:15 <ais523> nowadays, disk controllers run pretty powerful processors
22:34:31 <shachaf> SSD controllers are presumably just ridiculous.
22:34:33 <ais523> I've seen blog posts where people reprogrammed them to do interesting tihngs
22:34:46 <shachaf> And they should stop presenting a block device interface.
22:34:54 <ais523> and communicated with their software by writing files with particular text in
22:35:04 <b_jonas> yes, and funnily the C64's disk drive also runs a CPU about as powerful as the computer, but note that the disk drive is optional and also can be shared between multiple computers
22:35:14 <shachaf> What would a good interface for SSD controllers be like?
22:35:46 <ais523> one complication is working out who's responsible for the filesystem, the SSD controller or the operating system
22:35:51 <int-e> hrm which computer had a full CPU as floppy disk controller?
22:35:53 <shachaf> Another thing I was wondering about was whether desktop computers should have some amount of NVRAM that's exposed directly to applications.
22:36:12 <b_jonas> ais523: what we want more these days is reprogramming them to *not* do interesting things, in particular, not handle shingled storage, so that the OS can handle it itself and as such better optimize it together with the file system
22:36:25 <ais523> shachaf: they do, but you have to jump through lots of hoops to get at it
22:36:38 <shachaf> You mean in an SSD?
22:36:38 <int-e> Oh b_jonas answered that
22:36:43 <ais523> and also it normally belongs to the BIOS/UEFI so you can damage your bootloader if you mess with it
22:37:21 <b_jonas> rather than, as the current state is, the hard disk manufacturer is in a war with the OS, it tries to pretend very hard that it's not a shingled drive, until one day you write too many things to it too fast, at which point it freezes for half an hour to rewrite all the data on it, the OS decides that your drive is dead and removes it from the RAID array, and you can no longer make cheap RAID setups from
22:37:24 <ais523> b_jonas: apparently a major problem in practice is that they often lie about what they're doing to get beterr performance metrics
22:37:26 <shachaf> I just mean a region of RAM that's guaranteed to be dumped to disk on power loss.
22:37:27 <b_jonas> cheap drives
22:37:54 <b_jonas> yes, this is for hard disks specifically, not for SSDs
22:37:56 <ais523> shachaf: ah, I see
22:38:26 <b_jonas> int-2: the Commodore 64 had a full CPU in the floppy disk controller. just not too much RAM.
22:38:30 <b_jonas> int-e: ^
22:38:36 <ais523> apparently even getting journalled filesystems to work correctly on power loss is difficult, because there are all sorts of error conditions like "the CPU browned out and gave bad data to the disk controller"
22:39:11 <b_jonas> but still enough RAM to load enough code to it to completely upgrade how it reads and writes disks, rather than using its original ROM code, and still have enough buffers for that read/write thing
22:39:11 <ais523> you'd need the motherboard to carefully orchestrate the order in which various components lost power when the power was cut, probably with a number of capacitors to provide emergency powre for a clean shutdown
22:40:50 <b_jonas> ais523: I think the journaled thing came up more with old SSDs, because they were small and mostly intended as removable storage (pendrives), while I think (hope) it's mostly solved now with modern SSDs that are originally intended to be used as the main storage in computers
22:40:51 <shachaf> One thing that briefly surprised me is that my SSD has done a lot more writes than reads.
22:40:59 <shachaf> 18.1 TB read, 31.6 TB written.
22:41:08 <fizzie> There's a nice demo for the 1541 disk drive.
22:41:18 <shachaf> But it makes sense because in steady state everything I use fits in the page cache, so there's no reason to ever read.
22:41:20 <fizzie> https://cdm.link/2021/07/freespin-is-a-demo-made-for-the-commodore-1541-no-not-the-computer-just-the-floppy-drive/
22:41:38 <shachaf> But you always need to write for durability. My browser writes its state every time I open a new tab or even scroll, I think.
22:41:40 <fizzie> It bit-bangs a composite video signal out of the serial port.
22:41:44 <nakilon> how do I see my read/write stats?
22:41:56 <fizzie> IIRC, you need to use a computer to load it, but can disconnect the computer once it's up and running.
22:41:57 <shachaf> So having a region of memory you can write things to that's durable but will almost certainly be overwritten right away seems like it could be very useful.
22:43:03 <int-e> I tweaked my browser.sessionstore.interval to be 3 minutes.
22:43:06 <fizzie> http://www.quiss.org/freespin/ would've been a better link I think.
22:43:30 <int-e> Default is 15 seconds.
22:43:36 <int-e> (Firefox)
22:43:54 <fizzie> shachaf: Mine's even more unbalanced: 535 GB read, 6.86 TB written.
22:44:13 <ais523> shachaf: so basically a write-behind cache which you have little intention of ever flushing early but will get flushed on power failure, that does seem useful
22:44:22 <ais523> but it's the opposite safety characteristics to a typical write-behind cache
22:44:25 <shachaf> When I first saw these numbers, I did a read of the entire SSD, which added 1TB, to see how long it'd take.
22:44:57 <shachaf> ais523: Right.
22:45:22 <shachaf> Maybe the OS interface can just be a regular file with a hint that you want it in this region, or something.
22:45:45 <shachaf> For all I know SSD controllers already do a good job at this.
22:45:52 <shachaf> Though I kind of doubt it, they just don't have enough information.
22:46:26 <int-e> Oh my SSD doesn't report blocks read... odd?
22:47:07 <nakilon> got this https://dpaste.org/3ZTZ/slim
22:47:25 <fizzie> Hmm. The spinning disk is the exact opposite, at 37B units written and 476B units read. I don't know what the units are for "Total_LBAs_Written" and "Total_LBAs_Read". For the (NVMe) SSD, smartctl reported them in a human-readable form.
22:47:35 <nakilon> I'm using this machine for 2 years now
22:47:51 <nakilon> compared to your stats I guess it's a lot ( maybe damn google chrome?
22:49:23 <shachaf> SSD NAND flash is getting worse and worse to increase density, which makes these things more important.
22:50:34 <nakilon> as I understand the disk is dead when Available Spare goes down to Available Spare Threshold
22:51:15 <fizzie> int-e: I've got a (someone else's spare) SATA SSD that I use as a dual-boot (more like a never-boot) Windows drive, and I can't find any read/write stats for it either from smartctl -a output.
22:51:37 <shachaf> fizzie: The Internet is saying you should multiply by the "Sector Size" field, if you have one.
22:52:14 <fizzie> "Sector Sizes: 512 bytes logical, 4096 bytes physical"
22:53:12 <int-e> fizzie: this one reports lbas written, but not lbas read.
22:53:13 <shachaf> OK, so you've written 19 logical TB and 152 physical TB.
22:53:16 <shachaf> Simple enough.
22:53:23 <shachaf> What an amplification factor!
22:53:29 <int-e> which I guess makes some sense for NAND storage
22:54:07 <fizzie> This one doesn't report either. It reports a number of "Unknown_JMF_Attribute"s, but they're all 0s.
22:54:28 <shachaf> I've moved this SSD across several laptops by now.
22:54:42 <shachaf> I wonder how old it is.
22:55:11 <fizzie> I wonder if there would be any sort of benefit to trying to figure out some way of telling Linux that it should keep that particular SATA device just permanently powered down, since it's never going to be intentionally used.
22:55:23 <int-e> the spinning rust reports a higher Head_Flying_Hours value than Power_On_Hours ...I guess it's sleepflying
22:55:34 <shachaf> "Date first available" for this model is apparently 2016.
22:55:48 <int-e> (it's not a huge difference, about 2%)
22:55:54 <nakilon> oh, it's Terminal I suppose https://i.imgur.com/ggTnoDB.png I noticed before, probably because I set the buffer limit to infinity and if something prints a lot it goes to the disk; I wonder if swap usage is added as a specific app stat
22:56:31 <b_jonas> fizzie: wait, I think there's interface for that in /proc or /sys or something
22:56:50 <b_jonas> fizzie: I mean it's something you have to rerun after every boot, and the BIOS might power it on first
22:56:56 <b_jonas> but after that it keeps it powered down
22:57:12 <fizzie> Well, I don't boot that often. I just wonder if it would be a noticeable benefit in terms of... something.
22:58:54 <b_jonas> no idea
22:59:47 <b_jonas> I don't really trust SSDs too much yet
23:00:04 <b_jonas> I mean they're great for caching, but save everything to a hard disk too
23:00:21 <fizzie> There's also this other SATA SSD (the one I used to have in my desktop before), and that one reports via SMART counters called Read_Sectors_Tot_Ct and Write_Sectors_Tot_Ct; that one's saying 1.74 TiB read and 5.52 TiB written.
23:01:05 <nakilon> b_jonas lol you've hightlighted someone
23:01:38 <b_jonas> quite possible, some people have nicks that are common words
23:04:34 <shachaf> Maybe I should get a new SSD.
23:06:04 <b_jonas> I have a new SSD. I bought it with the new computer in 2020-10. I'm not using it yet, but I have it.
23:06:30 <shachaf> I wonder, maybe typical modern SSDs are actually slower than what I have, because they use TLC (or even QLC?).
23:07:05 <b_jonas> I had the intent to mostly use it as read cache (no writeback cache) for the hard disk file systems, for which there are like two different mechanisms in Linux already,
23:07:38 <b_jonas> but then I got distracted by the shingled hard disk RAID thing, and I definitely don't want to set up the read cache before I set up the RAID, because the cache has to go *over* the RAID layer
23:07:52 <b_jonas> or at least I should understand how the whole thing works before I set it up
23:08:51 <nakilon> the funny thing is that only those people who bother with RAID get their data lost
23:08:57 <nakilon> I never bothered and never lost anything
23:09:10 <b_jonas> also I deliberately bought a better computer than I need right now, so I don't have to get back to the hard process of selecting and buying computer parts, and wanted a configuration that can fit together
23:10:00 <shachaf> I wonder. RAID doesn't make sense for large distributed systems, and consumers don't use it, so the range of applications seems very limited.
23:10:12 <nakilon> it's like RAID -- is a technology to lose data, not preserve
23:10:17 <b_jonas> of course that never works out, because (1) I need a new monitor now, and (2) I deliberately didn't buy a video card, only a motherboard with a free slot for video card, thinking that when I need a video card, I just buy one, but BANG advanced electronics shortage, prices shooting up, nope, you can't just buy a video card when you need it
23:11:02 <shachaf> What multiplier does the shortage increase price by?
23:11:09 <shachaf> Is it ~2x or ~10x or what?
23:11:25 <b_jonas> shachaf: no clue
23:11:29 <ais523> there are two relevant shortages I think
23:11:43 <b_jonas> ais523: sure, the other is building supplies, especially steel
23:11:51 <ais523> one of them hit high-end GPUs in particular, the prices of those went up by a lot, but lower-end GPUs were mostly unaffected
23:11:54 <b_jonas> but that one doesn't affect me so directly
23:11:57 <ais523> the other one is more general-purpose
23:12:22 <ais523> I'm in the UK, which currently has shortages of pretty much everything due to a lack of transport
23:12:43 <b_jonas> I didn't say that I won't build a house now because I can just have it built later when I need it, unlike the video card thing
23:12:48 <ais523> (after brexit the amount of paperwork involved in international trade has gone way up, and scared a lot of people out of the field, so there's a shortage of employees)
23:13:19 <shachaf> How much does it cost to build a house normally?
23:13:31 <b_jonas> ais523: yes, and even in the EU, trade from outside the EU (as in, importing the cheap electronics from East Asia) got somewhat harder
23:13:47 <fizzie> I looked at bcache a little. It feels like it would be nice to have some sort of automation as to what to put on the SSD and what to keep on the spinning disks, rather than having to manually make that decision by choosing a location in the filesystem.
23:13:55 <b_jonas> shachaf: no idea, I don't want to have one built ever in my life
23:14:05 <b_jonas> if I have to build one, then free market economy failed me
23:14:16 <b_jonas> I want to rent apartments forever, and if I can't, the market sucks
23:14:26 <b_jonas> but even then I'll probably just buy a (used) house, I won't have one built
23:15:06 <b_jonas> so I never researched it
23:15:27 <b_jonas> but I won't have to, because building houses is mostly for people who want to live in the suburbs or agglomeration
23:15:46 <b_jonas> I want to live in a city, which is already densely packed with houses, and every free space immediately has a house built
23:16:10 <b_jonas> I knew a few people who do the suburb or agglomeration thing
23:16:22 <b_jonas> but that's definitely not the kind of life that I want
23:17:00 <ais523> I wonder why people don't normally talk about used / second-hand houses
23:17:07 <ais523> probably because that's the norm in many countries
23:17:18 <shachaf> I've heard people use that term.
23:17:27 -!- Hooloovoo has quit (Read error: Connection reset by peer).
23:18:05 <b_jonas> ais523: probably because nobody buys a whole new house. people either buy an apartment in a house that may be new, or have a custom house built
23:18:16 <b_jonas> if you want a whole house, and new, you want to customize it
23:19:12 <b_jonas> the second apartment that I lived in (moved there when I was about 10 years old) was in a new house, as in, my parents reserved it and partly payed it when the house wasn't even yet built
23:19:12 <ais523> not necessarily
23:19:39 <ais523> near here there are lots of new houses being built to standard designs, and then people buy them new, but with no input into the design
23:19:39 <fizzie> I'm weirded out by the "house" thing, and the UK notion of a "housing ladder", which you're supposed to use to climb up to a house, since I've exclusively lived in apartments that are units of much larger buildings, and don't find that odd. (That's at least partially orthogonal to the question about the ownership model though.)
23:19:42 -!- Hooloovoo has joined.
23:19:50 <ais523> (I have relatives who were considering buying one, but didn't like the design so chose not to)
23:20:38 <ais523> fizzie: the housing ladder exists, but choosing to participate in it is optional, and seems to be mostly due to people who have an idealistic idea of what people's lives should be like
23:20:59 <fizzie> Well, it is talked about a whole lot, it feels like.
23:21:01 <b_jonas> ais523: there are a few places where that happens, yes. my brother lives in a house that was probably originally built that way, because it's in a neighborhood with like a hundred family-sized houses built to the same template
23:21:12 <ais523> b_jonas: right
23:21:26 <ais523> that seems very common here (Birmingham specifically, I don't know whether it applies to the UK in general but it may do)
23:22:29 <b_jonas> I don't think it's too common here in Hungary
23:22:32 <b_jonas> it exists, but rare
23:22:42 <fizzie> Another thing that seems very UK-specific is this whole leasehold thing.
23:22:45 <nakilon> I guess people who can spend their money less practically have to be fooled, they have to be tricked to participate in the game of who will be the first buyer of a house and who'll be a "loser" to be the second buyer of it -- it just helps the builders to sell the stuff faster for their business
23:24:43 <ais523> I don't think being the first occupant of a house is considered a huge advantage here
23:25:03 <ais523> people care more about the location and size of the house than the number of previous owners
23:31:15 <nakilon> I knew a guy who was renting a 1 room flat in a very cool place in the city, it costed him 6 times more than my place, there was almost no profit in living there other than a bit smaller commute time, but mostly it was just about to be proud of where he lives
23:31:18 <b_jonas> I guess I'll have to edit the Infinity Vector page to give at least a summary of the Turing-completeness proof
23:32:50 <ais523> places like Cambridge and London seem to cause a vortex of price equalisation which caps the price of accommodation from below at the price in the centre minus the price to commute there
23:33:04 <ais523> and this can extend out hundreds of miles in some cases
23:33:46 <ais523> like, you can get the train from Norwich to London, so prices to live near a train station in Norwich are pretty high, taking only the cost of the train journey (which is not cheap!) into account
23:36:45 <fizzie> I feel like that's not quite true. Or at least that there's a pretty big variation in prices *within* London, bigger than could be explained by any transportation differences.
23:36:48 <fizzie> A little hard to say though. All I've seen are those "average property price" maps, and they're presumably quite a lot affected by what kind of properties there *are* in a region.
23:38:18 <ais523> well, transportation within London is actually fairly difficult, to the extent that it can be a significant portion of the travel time when taking journeys where London is one endpoint
23:38:38 <ais523> it has a good public transport network (although pretty bad roads), but not enough transport capacity
23:39:49 <ais523> I guess the problem is basically just that the population density is too high and the workplace density is also too high
23:40:06 <ais523> if businesses spread out more over the country rather than all grouping in one place, there'd be less of an issue
23:40:34 <nakilon> I hate that they group
23:42:39 <nakilon> even in the industrial age the factories were all spread, why the hell not IT companies all get crowded in centers?
23:42:47 <nakilon> *now
23:43:14 <nakilon> they don't have metal to be moved, they can work remotely, etc.
23:44:36 -!- Koen__ has joined.
23:45:33 <nakilon> I fucked up my health on one job with boss with a mania of having everyone being at their desks, not even spend 5 extra minutes on a dinner break; he could even come in and verbally shame someone in openspace in front of coworkers for "eating too slow" and such
23:47:07 -!- Koen_ has quit (Ping timeout: 252 seconds).
23:47:20 <nakilon> this was making people so stressed to be in place no matter what, for some even if their flat gets water flooded by a neighbor, for me it was ignoring the hurt it my back that I never had to ignore...
23:47:58 <nakilon> *in
23:48:51 <nakilon> fungot are you a remote worker?
23:48:52 <fungot> nakilon: do you know that in knuth's volume 1 a different formula is used, ( k val...) returns as if it were, would be possible
23:50:17 <fizzie> A "remote worker" in fungot context would probably be some sort of a Befunge-as-a-service cloud thing.
23:50:17 <fungot> fizzie: i would probably make more sense. or use lambdas. they might handle them with pieces tables ( make sense if hash maps wouldn't be better to have a coral reef.
23:51:32 <nakilon> he knows about AWS lambdas
23:55:13 -!- src has joined.
00:04:59 <nakilon> there should be a fungeoid with subroutines defined as rectangles anywhere so to call them you reach them from any of 4 sides and any row and column within their size; they take the arg and start their work internally from the local (0,0); not sure about the exit
00:05:15 <nakilon> oh maybe you should exit from the directly the other side of where you came from
00:07:33 <nakilon> the difference from the befunge is that there is a toroidal wrapping inside the subroutine so you can't exit its bounds unless using a special "return" instruction
00:08:06 <nakilon> so you are free to wrap around without worrying about where exactly you place the subroutine within the whole program
00:08:18 <nakilon> just connect them with "wires" of <>v^
00:09:06 <fizzie> Heh, that's novel. I think there's some "Befunge with functions" variants, but they have "non-physical" function calls, instead of having to route the execution into the function (and handle returns as well).
00:09:50 <fizzie> At least with the "exit from the opposite side" approach you wouldn't need the usual "push a 'return address' and switch on exit" kind of thing to make a subroutine you can use from more than one place.
00:10:25 <fizzie> As long as you route each call in from a different direction, anyway.
00:13:23 <nakilon> you can call some small rect subroutine from thousand of places probably if you attach a "bus" to it
00:13:42 -!- Koen__ has quit (Quit: Leaving...).
00:14:10 <nakilon> some another block with a plenty of inputs and outputs but calling the "small subroutine" in one place
00:16:09 <nakilon> and then such embedding subroutines into rects allows you to create a address-agnostic drag-n-drop IDE with autotracing
00:18:40 <fizzie> Yes, but then you need a return switch.
00:19:31 <fizzie> If you have a "bus", you lose information where it was called from, meaning you'll have to push something on the stack and then branch on that something on the way back.
00:19:48 <nakilon> maybe I used wrong word
00:20:49 <nakilon> or not
00:20:55 <nakilon> ah I understand
00:21:32 <nakilon> yeah one single output pin address
00:23:37 <nakilon> you can create/resize such buses automatically, while the subroutine knows nothing about it
00:26:37 <fizzie> There's a few "subroutine"-like sections in fungot, like the brainfuck-to-bytecode translation, which is used by both `^def foo bf ...` and `^bf ...`, and those are done using that mechanism. The vertical sequences on the rightmost edge of lines 229-231, 235-240 and 262-267 are the three different destinations a program preparation subroutine can return to (the ^bf, ^ul and ^def handlers).
00:26:48 <fungot> fizzie: or was it netscape?) was beaten up in otaniemi by fellow students.
00:28:24 <fizzie> Huh, I wonder what the context for that second part is.
00:28:55 <nakilon> is that DEFine and UnLearn or something?
00:29:29 <fizzie> That's ^def for define, and ^bf + ^ul for straight-up immediate execution of brainfuck and Underload, respectively.
00:29:44 <nakilon> ah
00:30:49 <fizzie> Have to say, for large Befunge programs some sort of auto-routing tool would probably be useful.
00:31:33 <shachaf> ais523: Do you think a modern instruction set would actually have Checkout-style instructions?
00:32:07 <shachaf> It's not clear to me whether "the things a CPU actually does" make for the best encoding to give a program to a CPU.
00:32:12 <ais523> shachaf: I think Checkout is too extreme, and probably a bad idea because letting the processor infer things saves bandwidth
00:32:18 <shachaf> Compared to out-of-order execution and register renaming and so on.
00:32:35 <ais523> modern instruction sets do have a few Checkout-style instructions; some of them aren't widely used because actually decoding the instruction costs more than the hint saves
00:32:52 <shachaf> Register renaming is a good example, I guess. A CPU has hundreds of registers, but you want instructions to be compact, so you may not actually want instructions to be able to address all of them.
00:33:16 <ais523> there are a few instructions for manual cache control that do genuinely seem to help in practice, though, and that nonetheless aren't widely used
00:33:17 <shachaf> I mean, a good example of the general thing I'm getting at, not something Checkout-specific.
00:33:46 <ais523> in particular, nontemporal read-write is easily worth the cost of decoding if you have an algorithm where it's useful
00:33:52 <ais523> * non-temporal read/write
00:34:48 <ais523> I have test programs which read and write memory in lots of different ways, and nontemporal memory access is the only thing that makes a real difference, due to where the bottlenecks are
00:36:04 <ais523> (non-temporal memory operations say "I want to read/write this memory now, but don't subsequently plan to read/write the memory again until after it's fallen out of cache"; in theory they work at cache line granularity, but the API for them reads in smaller chunks and you write several instructions in a row to cover the whole cache line or the part you care about)
00:36:26 <nakilon> "some sort of auto-routing" this all will break if there are are g and p
00:36:48 <ais523> and this is a pretty common performance pattern to have, whereas if you just use the default caching rules, you have all this data that's crowding things out of the cache and is completely useless
00:37:23 <ais523> also, even without the extra cache pressure, non-temporal is a little faster at writing to / reading from main memory (but slower for writes/reads that would go to/come from cache, for obvious reasons)
00:37:53 <ais523> it's a hint rather than a promise, too, so there's no undefined behaviour if you actually do need the value earlier than you said you would, just the processor has to slow down a little to find it
00:38:48 <shachaf> Man, modern CPUs are so complicated.
00:39:26 <shachaf> One thing I learned that was sort of surprising is that the common case (?) for instructions that have a register input isn't to read from the register file.
00:39:44 <ais523> right, the permanent register file hardly ever gets used in practice
00:39:49 <shachaf> At least for out-of-order processors, where the input for the instruction was likely just made available.
00:39:57 <shachaf> So instead most things go through the bypass network, or something.
00:39:59 <fizzie> Hmm, well. In fungot's case, almost all g/p are to the first few rows (because the addresses are shorter), plus the "negative space", so as long as that's kept clear, it'd be fine.
00:40:05 <ais523> only when you haven't touched a register for so long that the reorder buffer has forgotten the value, but you surprisingly actually still care about the value
00:40:07 <fungot> fizzie: or actually, don't. but if you don't use empty in production code
00:40:24 <fizzie> Also in Funge-98 g/p are local to the storage offset, so subroutines that need "local" fungespace storage *could* be position-independent.
00:40:34 <ais523> (the permanent register file normally isn't actually any slower to read than the reorder buffer, though, although a few processors can't read it twice in the same cycle)
00:40:37 <fizzie> (You'd just need to reset and restore the storage offset properly.)
00:42:38 <ais523> out-of-order execution bothers me a little because it's mostly just working around bad compilers; the only times it gives an advantage over putting the instructions in the correct order to start with are a) when you want to perform some instructions from inside a loop after it's ended / before it's started (so you'd need to peel a few iterations to reorder manually), or b) when instructions take varying times to execute due to caching effects
00:42:49 <ais523> b) is a pretty big reason, though
00:43:19 <shachaf> b seems like most of the point, doesn't it?
00:43:32 <ais523> yes
00:43:43 <shachaf> Good compilers can't do much about that.
00:43:48 <ais523> although, I'm not sure it actually speeds things up that much in practice
00:44:13 <shachaf> The Mill people claim it doesn't, and you can get away with static scheduling if you're clever.
00:44:16 <shachaf> I'm not sure.
00:44:31 <ais523> if your data is in main memory the reorder buffer won't help because it'll fill up before you get the data you need
00:44:46 <fizzie> The sequence 0{2u<y><x>02-u2} sets an arbitrary storage offset (<x>, <y>), and leaves the previous storage offset on the stack.
00:44:58 <ais523> if it's something like L1 versus L2 cache then it might help, though, the difference between those is only a few cycles
00:46:19 <shachaf> The Apple M1 has a 600-entry reorder buffer or something like that, people say.
00:46:29 <ais523> but, only when the dependency chains were short enough that you're bound on L2 latency
00:46:30 <shachaf> But helping with L2/L3 is surely still a big deal.
00:47:20 <shachaf> Someone gave this example: "x = *p; y = *q; [process x]; [process y]; result = x + y;"
00:47:27 <ais523> I'm finding it hard to think of an application where a) data is frequently in L2 or L3, but b) you can't just move the read of it earlier, and c) all this somehow forms a dependency chain so that you end up with a loop-carried dependency
00:47:43 <ais523> shachaf: what are you doing with result?
00:48:01 <ais523> in order to get a meaningful slowdown this needs to be in a loop and result needs to influence p or q somehow
00:48:28 <ais523> and, *p and/or *q need to be in unpredictable cache hierarchy levels
00:48:41 <ais523> it certainly seems possible, but this doesn't seem like a common case
00:49:02 <ais523> some sort of linked list traversal, perhaps? but why would the list be in varying cache levels?
00:49:53 <nakilon> didn't work with local offsets
00:50:00 <nakilon> I just made RASEL to not bother ..D
00:50:30 <fizzie> I don't think I've ever actually used the storage offset, I think it's mostly a bother in at least small-to-medium sized programs like fungot.
00:50:38 <fungot> fizzie: his syntax is a non-standard extension to receive, though, the empty
00:50:41 <nakilon> I guess I even have implemented them in my half-done funge-98 interpreter but didn't test it
00:51:31 <b_jonas> wait, non-temporal read? I haven't considered that for cpu caching, probably because neither x86 nor MMIX seems to have it. is it actually worth? for reading files non-temporary it exists (posix_fadvise and madvise), but that's different
00:52:03 <b_jonas> whereas SSE2 (or SSE1, I don't know which) has a non-temporal write instruction or two
00:52:48 <fizzie> I feel like I more often want to refer to "absolute" addresses from all around the program (as the equivalent of "global variables"), or just very temporary scratch space (which can be anywhere) as opposed to needing "scoped" local storage. Though it might be useful for position-independent self-modifying code too.
00:53:16 <b_jonas> I don't think non-temporal read is even reasonably possible, as in, just supporting it would require too much cost for programs that never use it
00:53:21 <ais523> MOVNTDQA is the non-temporal read
00:53:25 <ais523> SSE4.1, apparently
00:53:42 <ais523> although AVX/AVX2 also implement it
00:53:52 <shachaf> Hmm, I was just imagining for (i = 0; i < n; i++) { x = a[i]; y = b[i]; ... }
00:54:34 <ais523> shachaf: you can prefetch x and y in that example
00:54:52 <b_jonas> "the permanent register file" => there is a permanent register file? I thought registers always lived on the one temporary register file, and that one is huge because it has to save enough register values to roll back to several different points before instructions that are not yet finalized
00:54:53 <ais523> modern processors have prefetch hints for this, but don't actually need them; they'll notice you're accessing incrementing addresses and pull the next few elements into cache just in case
00:55:07 <ais523> so it's faster to not give the prefetch hints because they're effectively no-ops and tkae some time to decode
00:55:11 <b_jonas> why would there be a separate permanent register file?
00:55:27 <b_jonas> I mean maybe for special registers that never go to the normal register file
00:55:39 <ais523> b_jonas: in case you haven't used a register for so long that it isn't in the register renamer
00:55:55 <b_jonas> but those wouldn't be in a file I think, unless they're so useless they're basically never used for anything on a fast path
00:56:01 <ais523> I think the renamer works by changing instructions from "eax" to "internal register 54" or whatever
00:56:21 <ais523> but, if you don't use eax at all for a while, there'll be no instructions to rename, so it needs a permanent file to say "this register is rax"
00:56:42 <ais523> you could just have a permanent place to store "rax is register 54" but you may as well store the value of rax there, rather than a reference to it, and save one register
00:57:10 <b_jonas> out of order execution => hmm, that's an interesting point. I never thought of it like that, because pentiums were already out when I started to try to understand what x86 even does, so I took out of order execution for granted
00:57:54 <nakilon> in rasel there is a "problem" about the stack addressing such that the address often has to be adjust by 1, 2, 3 depending on in which place and which "routine" you use it
00:58:03 <nakilon> because the stack size is always different
00:58:41 <nakilon> once you add something somewhere in the middle of the routine all the following usings of that stack address should know it's not 1 off
00:58:45 <nakilon> *now
00:58:48 <b_jonas> although I'm still quite sure I don't understand cpus enough to be able to figure out what would make their design better or worse, I'm still at the stage where I mostly try to understand how to use the existing (future high-end x86) cpus well, and a very little of understanding why some of the apparently very odd designs in the cpu may potentially be worth even though it doesn't seem like they can ever
00:58:54 <b_jonas> be
01:00:45 <b_jonas> ais523: doesn't out of order execution also help because it allows for more compact code, as in more instructions that can only be coded in-place, or fewer registers that you can name?
01:00:51 <nakilon> so it would be a "common operation" to 1. take the stack address at N and then 2. add N to it before using it in swapn
01:02:20 <ais523> b_jonas: oh right, yes, I knew that once but I'd forgotten about it
01:02:31 <ais523> one big benefit of out-of-order execution is saving on register names in the machine code
01:02:55 <ais523> because it lets you place instructions in the order that uses the fewest register names, rather than needing to look for the most efficient order (which generally involves spreading dependency chains out through the code)
01:03:07 <ais523> thanks for reminding me of this, that's a very big reason to have out of order execution
01:04:11 <b_jonas> MOVNTDQA => you're right. I'm just stupid then. that is a genuine useful non-temporal read that I absolutely should have known about.
01:04:53 <b_jonas> ais523: oh, and more importantly denser code because you can have instructions that reference memory directly; without instruction reordering you'd need a separate load (or prefetch) and arithmetic instruction
01:04:57 <ais523> it's confusing because the difference between -A and regular instructions is normally alignment
01:05:12 <ais523> but, MOVNTDQ and MOVNTDQA are both aligned-only, the difference is write versus read
01:05:15 <b_jonas> that's probably even more important than the register count and stuff
01:05:21 <ais523> I had to read the documentation about three times to figure out what the difference was
01:06:04 <b_jonas> (and then I guess you'd also need more register names for those reads)
01:06:21 <b_jonas> basically any time you load from outside L2 cache, you couldn't combine it with the instruction that uses that load
01:06:32 <b_jonas> because the CPU couldn't reorder anything between
01:06:45 <b_jonas> but a real pentium (or other reordering cpu) will reorder instructions between those
01:07:21 <nakilon> is there any online dictionary that would immediately give a meaning of MOVNTDQA? because I thought it's some chat abbreviation and when pasting to google I hoped for Ubran Dictionary article but nope )
01:07:44 <ais523> it's an x86_64 instruction, most of the newer ones have really weird names
01:08:12 <b_jonas> nakilon: the "Intel 64 and IA-32 Architectures Software Developer's Manual" which you can download from somewhere on intel.com,
01:08:13 <ais523> to the extent that you can often figure out how new an instruction is by counting how many letters are in its name and how unpronounceable it is
01:08:18 <b_jonas> nakilon: as well as the equivalent AMD manual
01:08:28 <ais523> I normally use the AMD manual but I have both
01:08:29 <nakilon> I would make a universal definition lookup IRC bot command that would try to ask other channel bots and then if failed go to online dictionaries but this one is an example that I won't know where to lookup at
01:08:42 <b_jonas> I used to use the AMD manual, but now prefer the Intel
01:08:54 <b_jonas> nakilon: we could add the instructions to our whatisdb I guess
01:09:33 <nakilon> how large is whatisdb? where is it?
01:09:35 <ais523> the problem here is that it's a proper noun – the name of an instruction – which makes it hard to look up unless you know where it comes from
01:09:37 <b_jonas> "figure out how new an instruction is" => lol
01:09:51 <ais523> `whatis grep
01:09:53 <HackEso> grep(1) - print lines that match patterns \ grep(1p) - search a file for a pattern
01:10:03 <ais523> `whatis wisdom
01:10:07 <HackEso> wisdom(1hackeso) - print random wisdom matching a string \ wisdom(5hackeso) - no description
01:10:18 <b_jonas> ``` wc /hackenv/share/whatis # nakilon:
01:10:19 <HackEso> ​ 14662 97242 753236 /hackenv/share/whatis
01:11:56 <nakilon> holy shit, 14k definitions?
01:12:05 <b_jonas> nakilon: a lot of that is stub entries
01:12:08 <nakilon> it's like some little country language
01:12:14 <nakilon> ah ok
01:12:22 <ais523> the last time I downloaded the instruction list, the newest instructions were along the lines of VFNMSUB231PS
01:12:39 <b_jonas> there are of course counterexamples like ADCX and ANDN and CMPXCHG8B
01:13:06 <ais523> we're onto the AVX-512 era now, rather than the FMA wars era, but I still don't use AVX-512 because few people have a processor that handles it
01:13:10 <b_jonas> ais523: I think those are just the highly advertised ones, the ones you need for matrix product benchmarks and occasionally for actual matrix products
01:13:39 <ais523> b_jonas: well it does solve an actual problem that's hard to solve without processor help
01:14:06 <b_jonas> oh, and CVTTPS2DQ which is from SSE2 but looks newer
01:14:08 <ais523> although, it introduces yet more floating point inconsistency between processors, because you have an instruction for an accurate floating-point a * b + c
01:14:12 <nakilon> lol https://i.imgur.com/rc9wr9F.png
01:14:30 <ais523> but, you need a pretty new FPU to use it
01:14:41 <b_jonas> CMPXCHG8B is from pentium
01:14:46 <ais523> so, do you use the instruction, in the knowledge that older processors won't be able to do the same thing and thus will produce a different result?
01:15:13 <ais523> CMPXCHG8B is still only four words, though
01:15:41 <b_jonas> ais523: yes, because it only comes up in code that will give different results depending on how the optimizer chooses to optimize it, and to some extent even to how the low-level numeric library chooses to optimize it
01:15:48 <ais523> whereas, say, VPCLMULQDQ is an abbreviation of an eight-word prhase
01:15:48 <b_jonas> well, s/only/mostly/
01:16:27 <ais523> (great instruction, though, I actually spent some time trying to find it recently because I needed it and it would have been a pain to implement without processor support)
01:17:46 <b_jonas> wait... VPCLMULQDQ? is that a real instruction? how new is it?
01:18:23 <b_jonas> ah, here it is, PCLMULQDQ
01:18:26 <ais523> AVX (the original PCLMULQDQ was in a little feature set all of its own)
01:18:26 <b_jonas> so it can't be that new
01:18:29 <b_jonas> yeah
01:18:43 <b_jonas> ok, this one I'm fine with not remembering the mnemonic
01:18:57 <nakilon> the https://stackexchange.com/search?q=what+is+MOVNTDQA is a little bit helpful but still no direct link to the definition
01:19:02 <b_jonas> or anything specific about the instruction besides knowing there were a few carry-less multiply instructions
01:19:16 <b_jonas> but yes, that can be useful
01:19:50 <nakilon> (and 0 results for "what is VPCLMULQDQ")
01:19:57 <b_jonas> unlike the non-temporal loads, which I should have remembered (even if I don't know the mnemonic by heart)
01:20:35 <ais523> b_jonas: I think there's only one carry-less multiply instruction (two if you count the V- version differently, but the only difference is top-half-unchanged versus zero-extension)
01:20:44 <b_jonas> nakilon: carry-less multiply, like you need for polynomials over GF(2)
01:21:15 <b_jonas> ais523: that is possible, though isn't there one for a specific GF(2^n) representation too?
01:21:23 <nakilon> looks like stackexchange failed to index own entry: https://i.imgur.com/ulTX078.png
01:21:36 <b_jonas> yep: CRC2
01:21:40 <b_jonas> no
01:21:42 <b_jonas> CRC32
01:22:32 <b_jonas> oh, and apparently the AES instructions
01:23:00 <b_jonas> but you're probably right that PCLMULQDQ is the most general
01:23:22 <b_jonas> oh, there's also GF2P8AFFINEINVQB
01:23:36 <b_jonas> did you ask for eight words?
01:23:56 <nakilon> ah, stackexcahnge search can't automatically ignore the "what is"
01:23:58 <b_jonas> and GF2P8MULB
01:23:59 <b_jonas> wow
01:24:08 <b_jonas> so many instructions
01:25:41 <ais523> I've never heard of GF2P8AFFINEINVQB
01:25:44 <ais523> where does that one come from?
01:25:56 <b_jonas> same intel manual
01:26:05 <ais523> I mean, which instruciton set?
01:26:10 <b_jonas> let me check
01:26:13 <nakilon> I guess the universal searcher should have a huge list of dictionaries and automatically understand that "VPCLMULQDQ" should be searched in some "dictionary about CPUs"
01:26:47 <b_jonas> "CPUID feature falg: GFNI"... I don't know then
01:26:51 <ais523> it must be very new, my Intel manual from 2016 doesn't list any instructions starting with G
01:27:04 <ais523> which is a bit surprising, really
01:27:23 <b_jonas> there's also a third one that starts with GF2P8
01:27:55 <ais523> nakilon: Wikipedia's search box seems to do a pretty good job of recognising CPU instructions
01:28:00 <b_jonas> ais523: it's not surprising, most new instructions like VGATHERDPD go under V
01:28:02 <nakilon> while it can be understood from the 3-gram "MUL" that it's about CPU the GF2P8AFFINEINVQB is really a mess
01:28:11 <b_jonas> there are several instructions under VG
01:28:14 <ais523> although it can't find GF2P8AFFINEINVQB
01:28:31 <ais523> b_jonas: Intel have moved on from V, they're onto E now I think
01:28:50 <ais523> or, maybe not
01:28:53 <nakilon> ais523 indeed
01:28:54 <ais523> maybe they still start with V?
01:29:32 <b_jonas> including I haven't heard of this starting with E thing, but I admit I'm not following all the new instructions with a short lag
01:29:47 <ais523> ah, GF2P8 means "GF(2⁸)"
01:30:05 <b_jonas> like, I'm not familiar with all the AVX512 instructions
01:30:10 <ais523> b_jonas: I think starting with E is actually the encoding summaries rather than the instruction names, thinking about it
01:30:25 <b_jonas> ais523: yes, a particular representation of GF(2**8)
01:32:15 <ais523> appears to be the representation that chooses α such that α⁸+α⁴+α³+α+1=0
01:32:30 <ais523> and stores field elements as the coefficient of a polynomial in α
01:32:33 <ais523> is that the usual one? I have a list somewhere
01:32:37 <b_jonas> no idea
01:32:45 <b_jonas> I don't even know if it's the IOCCC one
01:33:02 <ais523> the problem is I can't remember where
01:33:07 <b_jonas> well, it's in an intel instruction so it can't be a terribly unusual representation
01:33:21 <b_jonas> presumably they wouldn't add something that nobody would use
01:33:39 <b_jonas> CRC32 and AES certainly use existing ones
01:34:07 <ais523> found it
01:34:10 <b_jonas> I mean those instructions implement crypto primitives that were used already before they got x86 instructions
01:34:24 <ais523> [2,8,[1,0,1,1,1,0,0,0,1]],
01:34:42 <ais523> unfortunately I also can't remember what format this file is in, but that doesn't look like α⁸+α⁴+α³+α+1=0
01:36:09 <b_jonas> if there is such a list, it might be somewhere in https://www.jjj.de/fxt/
01:36:15 <ais523> looks like that's ordered with the α⁰ coefficient at the start, and α⁸ a the end, so it's α⁸+α⁴+α³+α²+1=0, not quite the same
01:36:31 <ais523> http://www.math.rwth-aachen.de/~Frank.Luebeck/data/ConwayPol/index.html
01:36:44 <ais523> (luckily I'd recorded the place I got the file from next to the file itself)
01:39:22 <ais523> wow the definition of "smallest polynomial" here is weird, it looks for the highest coefficient that differs, then decides which is larger or smaller based on the value of that coefficient xor whether the difference between its exponent and the polynomial's degree is odd or even
01:39:40 <ais523> I assume there's a reason for that, because I can't imagine this would be a standard definition for no reason
01:40:59 <b_jonas> https://www.jjj.de/mathdata/all-primpoly.txt lists all polynomials used to compute GF(2**n) for n<=11
01:41:53 <b_jonas> the one you mention α⁸+α⁴+α³+α²+1 is apparently the first in the order used in that list
01:42:23 <ais523> and α⁸+α⁴+α³+α+1=0, mentioned on the website you linked, doesn't give a finite field
01:42:23 <b_jonas> that page is linked from https://www.jjj.de/mathdata/
01:42:34 <ais523> so probably there's a typo on either the website, or in the intel documentation it draws its information form
01:42:43 <b_jonas> huh...
01:43:00 <b_jonas> ais523: no, it's 8,4,3,2,0
01:43:31 <b_jonas> α⁸+α⁴+α³+α+1=0 is only in the intel manual
01:44:13 <ais523> b_jonas: sorry, by "the website you linked" I meant the older link
01:44:30 <b_jonas> what odler link?
01:44:31 <ais523> to the Intel instruction, not to the finite field polynomials
01:44:41 <ais523> you didn't
01:44:42 <b_jonas> I linked to a website with the intel instruction?
01:44:44 <b_jonas> ah ok
01:44:49 <ais523> I found it by a web search and assumed you'd linked it to me
01:45:13 <ais523> https://www.felixcloutier.com/x86/gf2p8mulb
01:45:19 <b_jonas> oh...
01:45:29 <b_jonas> I assumed you'd just download a later intel or amd manual for it
01:45:32 <ais523> it could possibly be a PDF extraction error?
01:45:43 <ais523> I don't want to have to keep downloading manuals for this
01:45:46 <ais523> I have two of them already
01:45:55 <b_jonas> no, it's the intel manual that says x**8+x**4+x**3+x+1
01:45:55 <ais523> admittedly the bandwidth doesn't cost much nowadays
01:46:02 <b_jonas> um...
01:46:08 <b_jonas> "I have two of them already" ... but
01:46:13 <b_jonas> if they're obsolete
01:47:26 <ais523> I'm assuming the old instructions don't change very much
01:47:43 <ais523> so an old manual will still be good for anything other than newly invented instructions
01:48:02 <b_jonas> https://xkcd.com/345/ "Hush, I'm coding. You ate yesterday."
01:48:14 <b_jonas> I don't need to buy food, I already bought food twice
01:48:25 <b_jonas> ais523: yes, the old instructions rarely change,
01:48:46 <b_jonas> but if the newly invented one for the GF(2**8) interests you
01:49:12 <ais523> I guess
01:49:13 <b_jonas> anyway, the intel manual says the polynomial is "x**8 + x**4 + x**3 + x + 1" (the powers set with superscripts)
01:49:29 <ais523> it's wrong, surely, that wasn't on the list of valid polynomials you linked
01:50:19 <b_jonas> yeah, that's odd
01:50:59 <nakilon> speaking about figuring out which dictionaries to look up, I guess [tags] here do the job https://i.imgur.com/FfAxjZC.png
01:51:14 <b_jonas> I don't have a recent AMD manual
01:51:44 <nakilon> but hm, only 12 results and tags don't intersect much so it would need to prebuild some tag topic clouds
01:51:47 <ais523> ooh, Intel now has a combined PDF that does all the instructions in one PDF, that's a good enough reason to download a new one
01:52:26 <nakilon> three results for G... https://stackexchange.com/search?q=GF2P8AFFINEINVQB
01:52:50 <b_jonas> ais523: yes, it has all in one PDF. it still has the separate volumes for printing, but who prints a full Intel manual?
01:53:03 <nakilon> that's weird that not all search results display tqgs
01:53:13 <ais523> b_jonas: it was split last time I looked
01:53:16 <ais523> I guess it's been five years
01:53:46 <b_jonas> ais523: it exists as split pdfs too. and you still need to download the optimization manual in two separate pdfs (one general and one specific for your microarchitecture) besides the combined volume, and sometimes there's a supplement for planned future instructions
01:53:55 <ais523> oddly, it still has separate chapters for A-L, M-U, V-Z
01:54:11 <b_jonas> ais523: yes, it's literally "combined volumes" as in all "printed" volumes in one PDF
01:54:20 <b_jonas> with the covers changed, but not much else
01:54:29 <ais523> for optimization, I normally look at Agner Fog's manuals rather than the official ones, they're generally more accurate and also make it easier to work out what would run well on multiple architectures
01:54:43 <b_jonas> ais523: sure, but I want to have both
01:55:06 <b_jonas> I mean ideally I should have up to date AMD manuals too, but I don't
01:55:18 <b_jonas> (I have rather old ones)
01:56:20 <ais523> I tend to treat AMD's as the "official" ones as they invented x86_64
01:56:40 <ais523> although, in practice, whatever Intel does tends to become standard because they have such market dominance
01:57:32 <nakilon> so two of 3 search results have the tag "assembly" and the top google result is the page with a nice list of them https://www.felixcloutier.com/x86/
01:58:03 <b_jonas> ais523: I think they're both official only for the CPUs that they each sell, but in practice those are very close and have almost no incompatibilities so you can use the other manual
01:58:30 <Melvar> <ais523> there are two things you can do with a pointer: a) pointer arithmetic operations like offset, compare, etc.; and b) dereferencing it to get at the value you're pointing to – Of course, the latter is very much not specific to pointers.
01:59:25 <ais523> Melvar: definitely; the problem is that many systems programming languages don't have anything efficient that does just b), if you want b) from a primitive then you get a) too
01:59:33 <ais523> which rather hinders optimisation opportunities
02:00:58 <Melvar> Also the support for “peek but no poke” is limited apparently?
02:02:25 <ais523> truly read-only pointers are rare, although most languages have something comparable but with weird edge cases
02:02:35 <ais523> at the language level, that is
02:02:46 <ais523> it's quite easy to get modern CPUs to not let a program write to particular areas of memory at all
02:05:02 <nakilon> wow rubygems have webhooks https://guides.rubygems.org/rubygems-org-api/#webhook-methods so I can make a \rasel remote executor to redeploy the function if I update the gem; that's not something to do often (or even ever) but it also makes me thinj of using github webhooks in a similar way to automatically update the IRC bot handlers
02:05:59 <nakilon> of course it can also pull the master HEAD every time but it would make the command work one second longer and the handler will break if something happens to the repo
02:06:04 <Melvar> . o O (Haskell has three different representations that correspond to pointers)
02:06:40 <nakilon> though the "something happends to the repo" isn't much more possible thing to happen than to "happen with the GCP Functions" since the github repo isn't billed
02:07:16 <Melvar> (Well, GHC.)
02:21:37 -!- oerjan has joined.
02:37:59 <esolangs> [[Talk:OISC]] M https://esolangs.org/w/index.php?diff=87921&oldid=86793 * VitalMixofNutrients * (+2804) I want to dispute the claim that FlipJump is the simplest OISC, by proving that Bit-Bit-Jump is actually the simplest and can evaluate conditional statements unlike FlipJump.
02:46:45 <b_jonas> a few days ago I dreamed that I was joined on an IRC channel, and since waking, I'm wondering if that was trying to reference a specific real channel that I once joined, presumably on freenode, or if it was completely invented
02:47:56 <nakilon> what was the Nitter analogue for Instagram?
02:50:34 <ais523> "simplest OISC" seems like an interesting argument to get into
02:52:01 <ais523> although, the argument on that page doesn't seem to help much
02:54:05 <esolangs> [[ID machine]] N https://esolangs.org/w/index.php?oldid=87922 * B jonas * (+25) redirect because that's where I looked and the search results didn't help
02:54:06 <Corbin> Yeah. Turing-completeness is like an overly-full grilled sandwich; it doesn't matter whether it's panini or cubano, it is going to leak.
02:54:46 <Corbin> OISC systems have to have some essential complexity somewhere. If it's squeezed out of the instruction count, then it'll show up again in the instruction definition.
02:57:30 <ais523> the discussion didn't mention TCness, so I guess an OISC with a nop instruction is the simplest
02:57:35 <b_jonas> does 1.1 count as a OISC?
02:58:06 <ais523> pretty much anything can be interpreted as an OISC if you try hard enough
02:58:22 <ais523> I'm not sure it's something that can be objectively defined
02:58:32 <b_jonas> heck, does slashes or Thue count as an OISC?
02:59:03 <ais523> The Waterfall Model is arguably a ZISC (I actually found the ZISC formulation first, and it wasn't until I discovered the language a second time that I realised how easy it was to implement)
02:59:07 <Corbin> I think that OISC and ZISC are perspectives.
02:59:19 <ais523> yes, that's a good way to put it
02:59:39 <nakilon> now I want sandwich (
02:59:40 <ais523> although, I do have the (possibly incorrect) view that an OISC/ZISC has to be imperative
03:00:24 <ais523> the nondeterministic-as-in-declarative version of Thue, therefore, probably isn't (I still think this is the intended definition, as opposed to "replace a random substring")
03:00:30 <Corbin> It's fine for a ZISC machine to have computable (say, poly-time) small-step behavior, but be Turing-complete under iteration. That's how I think of The Waterfall Model, at least.
03:00:47 <ais523> yes
03:00:47 <b_jonas> there are languages where I don't even know how to count how many instructions they have
03:00:59 <ais523> actually it's very common for TC languages to have simple small-step behaviour
03:01:45 <nakilon> are there languages without instructions?
03:01:51 <ais523> oh, any 2-instruction no-argument language (e.g. Brainpocalypse or the I/D machine) can be made into an OISC by run-length encoding it
03:02:02 <ais523> nakilon: that depends on your point of view
03:02:09 <b_jonas> ais523: would you count a one-combinator basis of combinatorial calculus an OISC? and is it imperative?
03:02:45 <ais523> b_jonas: only if it somehow worked without a precedence override, which is probably impossible (if you want to stay TC)
03:02:54 <b_jonas> ais523: isn't that only if at most one of the two instructions have operand fields?
03:03:13 <ais523> b_jonas: I guess, if you want to let the combined instruction take multiple arguments
03:03:31 <nakilon> ais523 people build everything with blocks, write music with notes, even that esolang where you put things on the table has things as instructions
03:03:47 <nakilon> I wonder if there is anything that can't be broken into discrete parts
03:04:05 <ais523> nakilon: I have been looking for a language like that but failed to find one
03:04:18 <b_jonas> I'm not sure what counts as instructions in Consumer society, even though it is imperative and programs have a source code
03:04:26 <ais523> But Is It Art? is a good counterexample to a lot of statements about languages, it arguably doesn't have instructions
03:04:55 <ais523> or the Post correspondence problem, that's like a 1D version of BIIA?
03:05:06 <nakilon> [wiki But Is It Art?] [wiki Consumer society]
03:05:07 <ais523> but, they both still have composability in a sense
03:05:12 <velik> thread error
03:05:17 <ais523> https://esolangs.org/wiki/But_Is_It_Art?
03:05:25 <ais523> I'm not sure if Consumer Society has one
03:05:26 <b_jonas> does Conway's Game of Life have instructions?
03:05:31 <ais523> https://esolangs.org/wiki/But_Is_It_ArtF
03:05:34 <ais523> https://esolangs.org/wiki/But_Is_It_Art%F
03:05:49 <ais523> gah, what is up with the escaping here
03:05:51 <ais523> https://esolangs.org/wiki/But_Is_It_Art%%F
03:05:54 <b_jonas> Consumer Society doesn't have a wiki page because I haven't published its definition yet and I didn't want to create a completely useless stub
03:05:56 <ais523> https://esolangs.org/wiki/But_Is_It_Art%3F
03:06:00 <nakilon> [wiki But Is It Art?]
03:06:01 <velik> https://esolangs.org/wiki/But%20Is%20It%20Art%3F
03:06:08 <ais523> there we go
03:06:21 <nakilon> idk why it timed out on the first try
03:06:21 <ais523> I needed to type two percent signs and two 3s for some reason
03:06:30 <nakilon> either google or wiki were cold I guess
03:06:30 <oerjan> `addquote <Corbin> Yeah. Turing-completeness is like an overly-full grilled sandwich; it doesn't matter whether it's panini or cubano, it is going to leak.
03:06:34 <HackEso> 1334) <Corbin> Yeah. Turing-completeness is like an overly-full grilled sandwich; it doesn't matter whether it's panini or cubano, it is going to leak.
03:07:49 <b_jonas> does C have instructions?
03:08:11 <ais523> it has statements, those are a decent analogue for instructions
03:08:17 <b_jonas> or Algol might be a better question
03:08:40 <b_jonas> ais523: ok, if statements matter then how about just lambda calculus?
03:08:40 <ais523> something like Diophantine equations are a good example of something that doesn't clearly have separate statements
03:09:10 <ais523> b_jonas: I think the best way to think about lambda calculus imperatively is that apply is the statement
03:09:16 <ais523> or the instruction
03:09:28 <b_jonas> might be
03:09:36 <nakilon> heh https://esolangs.org/wiki/Matrioshka_language -- the "matrIOshka" is a word with Ё
03:09:46 <ais523> this is very clear in unlambda, the only thing that actually does anything is the backquote
03:10:21 <ais523> nakilon: I think "matrioshka" is an English word which was borrowed from Russian, but often those words change in the borrowing
03:10:56 <nakilon> I had matrioshka
03:11:06 <nakilon> when I was like 5
03:11:33 <ais523> e.g. "babushka" is an English word by now but the vowels are all different compared to the Russian original
03:11:44 <b_jonas> I have a small matrioshka
03:11:56 <b_jonas> I certainly didn't have one when I was 5
03:12:13 <ais523> (the English version of the pronunciation is inherently funny to say which is why it caught on, but would be annoying to use on a regular basis)
03:13:42 <ais523> Wiktionary says it's pronounced bəˈbuːʃ.kə in English, the Russian version is ˈbabʊʂkə which is quite different
03:14:18 <ais523> English is really weird sometimes
03:14:21 <nakilon> yeah, I heard that the accent is in different place
03:15:13 <Corbin> My favorite example of English inability to pronounce things right is French "marche" vs. English "mush".
03:15:25 <shachaf> By the way, the Russian system of indicating the stressed syllable with a mark *over* the vowel rather than next to it is so much better.
03:15:25 <zzo38> Words often change in borrowing between different language
03:16:53 <shachaf> Sometimes even in borrowing within the same language.
03:17:55 <zzo38> Yes, even same language too sometimes
03:20:21 <ais523> IIRC there are some cases where English borrowed the same word twice, with two different meanings, but can't think of any offhand
03:21:36 <nakilon> in modern Russian the lack of a culture of education (in Soviet time it was cool to know things, read a lot, etc.) and internet with all its memes and hypes makes young people often learn anglicisms instead of using the Russian word that always existed but teachers didn't bother to teach kid it
03:22:05 <b_jonas> ais523: I'm not sure if "proof" vs "probe" counts
03:22:14 <b_jonas> for what you're looking for
03:22:51 <ais523> huh, that's interesting, "prove" once used to mean "test" (i.e. an effective synonym of "probe") but the meaning changed over time
03:23:10 <oerjan> shachaf: that's also the Greek and Spanish system, but unlike the russians those actually use it
03:23:10 <ais523> so maybe we borrowed it twice, with the same meaning, but the meaning diverged in between?
03:23:34 <b_jonas> ais523: I think it's actually borrowed as "proof" and "probe", and "prove" was derived from "proof" in English, but I'm not sure
03:24:12 <b_jonas> as for meaning change, that's why "proof of the pudding" makes no sense
03:24:36 <ais523> looks like "prove" in French was the borrowed word
03:25:03 <ais523> for "prove"/"proof"
03:25:08 <nakilon> for example, people installing and using software with a messaging functionality and lacking the Russian localisation learn the word "message" and don't use the word "сообщение"
03:25:13 <ais523> whereas "probe" was the same word but borrowed from Latin
03:25:22 <nakilon> they say месседж or мэсседж
03:26:43 <ais523> in 5 or 6 years time, probably the loanword will be a real word with the meaning of "a message sent over the Internet in particular", the way these things normally go
03:27:17 <Corbin> ais523: "governor" and "cybernetics" are two borrowings of https://en.wiktionary.org/wiki/%CE%BA%CF%85%CE%B2%CE%B5%CF%81%CE%BD%CE%AE%CF%84%CE%B7%CF%82#Ancient_Greek
03:27:18 <b_jonas> ais523: isn't that "email"?
03:27:26 <Corbin> You may recognize a third recent borrowing, "kubernetes"
03:27:34 <zzo38> Email is not the only message send over internet
03:27:39 <ais523> b_jonas: "email" is more specific
03:29:07 <oerjan> nakilon: i suspect internet slang is a mess of borrowings in all languages other than english, not just russian.
03:29:08 <ais523> Corbin: that's amazing, that there's such a difference in meaning
03:29:25 <oerjan> (and english is a mess too)
03:29:26 <ais523> oerjan: in English, too
03:29:44 <ais523> e.g. "kek" is a borrowing from an invented language made for World of Warcraft…
03:29:53 <b_jonas> what? are you sure?
03:30:25 <ais523> b_jonas: is that directed at me? yes, this one's pretty well documented
03:30:26 <b_jonas> I thought "kek" was an alternate spelling for an onomatopoeia that may or may not have been borrowed form jaapenese
03:30:33 <b_jonas> ais523: yes, about "kek"
03:30:52 <ais523> it's "lol" passed through a character filter designed to prevent the players of the two opposing factions understanding each other
03:31:01 <b_jonas> no, apparently from korean
03:31:11 <ais523> this makes just as much sense as most Internet slang…
03:31:29 <ais523> although, this is disputed, the Korean borrowing is also mentioned
03:32:07 <b_jonas> I mean it's an obvious onomatopoeia, it can appear in multiple languages and be impossible to figure out where it's copied from
03:32:13 <nakilon> oerjan I won't mind it if internet messaging was something very new thing but those were "сообщения" for many years, until the internet got to the youngest people who lack the vocabulary
03:32:45 <ais523> Wiktionary (which is not a reliable source for this sort of dispute) says that the World of Warcraft thing was *intentionally* added by Blizzard to perpetuate a Korean Starcraft meme, which i think is more or less impossible
03:32:55 <b_jonas> heck, in general I don't understand how linguists can so often give such certain statements about etimology when there's more than one possibility.
03:33:41 <zzo38> Sometimes the statements aren't so certain
03:33:42 <ais523> fwiw, this may be a weird case in which the supposed etymology is the reason the word is used, even if it isn't correct…
03:34:27 <nakilon> ahah, it says in French it's Французский Кек — Queque
03:34:32 <ais523> "quiz" is a good one; there's a widespread belief that the word was invented for a bet, but apparently there's no evidence about this
03:35:06 <Corbin> b_jonas: Until relatively recently, words had to arise in geographic locations. We know e.g. where "marche" became "mush" because we know where French and English occupied territory during the start of dog-sledding in North America. (And TBH I think that "like, Alaska" is the best answer we currently have?)
03:35:23 <ais523> heh, Russian for France is almost identical to the English (and of course to the French), but the spelling is so different it's hard to recognise
03:38:04 <ais523> looking up "the proof of the pudding", apparently it's mutated into "the proof is in the pudding" in some areas
03:38:12 <ais523> which makes even less sense
03:38:18 <nakilon> russian article http://wikireality.ru/wiki/%D0%9A%D0%B5%D0%BA says kekeke originated in starcraft as an automated transliteration from horean hehehe but I agree it's not clear that kek is the same as kekeke
03:38:56 <nakilon> *korean
03:38:58 <nakilon> _<>
03:39:32 <ais523> so the debate is primarily about which Blizzard-created automatic character filter is responsible?
03:39:51 <b_jonas> lol
03:41:31 <ais523> hmm, "pwn" is another good one, especially as it likely had no defined pronunciation for a while
03:44:28 <shachaf> oerjan: Does Russian not use it?
03:44:36 <b_jonas> yeah, that's one that appeared in written chat like "glod" and "teh urn"
03:44:48 <b_jonas> but those have obvious pronunciations
03:44:49 <shachaf> Or do you mean that Greek or Spanish use it all the time, and not just when indicating how to pronounce a word? I haven't seen that.
03:44:52 <oerjan> shachaf: only in dictionaries and language textbooks for learners afaiu
03:44:59 <oerjan> yes
03:45:05 <nakilon> use what?
03:45:20 <oerjan> nakilon: ´ above a vowel to indicate stress
03:45:25 <nakilon> ah
03:45:26 <shachaf> Is there any language where the spelling indicates where the stress goes all the time, and not just in special cases?
03:45:29 <shachaf> Finnish, I suppose.
03:45:36 <shachaf> Sort of.
03:46:07 <nakilon> actually in books the thing is printed right above the letter
03:46:14 <ais523> huh, neither Wiktionary nor Urban Dictionary has "teh urn", but it was definitely widespread in the speedrunning community for a while
03:46:16 <oerjan> greek uses it in all multisyllable words, while spanish has a default stress rule that allows leaving it out in many words, but it's mandatory for all others
03:46:16 <shachaf> Most languages already use very redundant spelling compared to e.g. Hebrew.
03:46:23 <ais523> I think it might be more of a meme than an actual word, though
03:46:24 <nakilon> I guess it's just an internet thing that people have to put the ' somewhere
03:46:37 <b_jonas> ais523: do they have "urn" and "teh" separately?
03:46:41 <nakilon> we don't have a functionality to put the thing directly above an arbitrary letter at least in russian layout
03:46:54 <nakilon> oh wait
03:47:05 <ais523> b_jonas: well, "urn" is a real but unrelated word, and I'd expect "teh" to be there because it's older
03:47:12 <b_jonas> I know unicode doesn't have precomposed characters for russian vowels with an acute accent,
03:47:13 <nakilon> if you mean the rules of transcription in nelgih dictionaries -- yet, it's older than internet
03:47:18 -!- earendel has joined.
03:47:27 <nakilon> *english
03:47:28 <nakilon> _OO
03:47:44 <nakilon> the September is cold, my fingers to typos
03:47:49 <nakilon> *do
03:47:57 <b_jonas> while it does have precomposed characters for vowels with acute or grave (both acute and grave are used to mark stress, but in different European languages, by the way), because all of them clearly exist in at least some language like Welsh
03:48:48 <b_jonas> huh, urban dictionary has "urn" in an entirely different sense
03:48:58 <b_jonas> a sense I never heard of
03:49:07 <ais523> knowyourmeme doesn't have "teh urn" either (although it appears in one of the references)
03:49:16 <ais523> b_jonas: that doesn't surprise me, lots of slang is regional
03:49:16 <b_jonas> fun
03:49:36 <b_jonas> ais523: sure, not the part where I don't know the slang
03:49:46 <b_jonas> I don't know most of the entires in urbandictionary
03:50:05 <b_jonas> just that there is a third sense that happens to collide with that existing word
03:50:15 <b_jonas> with apparently three different etimologies
03:50:35 <nakilon> "Язы́к программи́рования" -- here is copypasta from wikipedia; in the article the tick is right above the letter but while I'm typing this message I see it's after the letter
03:50:36 <ais523> I think "teh urn" is probably best considered to be a Twitch meme, which was fairly long-running for Twitch memes but short-lived in terms of the language generally
03:50:50 <nakilon> heh, when I've pressed Enter it's now rendering above the letter again
03:50:56 <oerjan> nakilon: the russian and greek ´ are unicode modifier characters (not sure if they're the same character), so you _can_ put it anywhere in unicode as long as you have a way of typing it
03:51:30 <ais523> text entry boxes often treat combining characters in dubious ways
03:51:35 -!- Sgeo_ has joined.
03:51:45 <ais523> I'm not sure if there is a non-dubious way to treat them for editing purposes (as opposed to display purposes)
03:51:54 <nakilon> when I'm editing this copypasta in the text input I can't select it and move elsewhere, it's like bound to the vowel already
03:52:10 <zzo38> As far as I know, mostly it is the Romantic languages that have acute and grave accents, and other languages work differently. Is that right?
03:54:04 -!- Sgeo has quit (Ping timeout: 252 seconds).
03:54:48 <ais523> zzo38: I think that mostly depends on where the language got its alphabet from
03:54:52 <oerjan> b_jonas: btw italian uses _both_ acute and grave to mark stress on the last syllable (and in some dictionaries, elsewhere) with a close/open distinction of pronunciation when the vowel is e (or o, except then it's always ò at the end), but only there unless it's in a dictionary.
03:55:37 <ais523> in theory, a language could have multiple different writing systems, but that doesn't seem to happen that often in practice
03:56:47 <shachaf> Man, consensus is just the best. How come hardly anyone's into it?
03:57:08 <b_jonas> ais523: it does happen, just usually not simultaneously. serbian might be the only one that can keep two for decades.
03:57:17 <b_jonas> ah no
03:57:24 <b_jonas> obviously Norwegian will keep them longer
03:57:26 <zzo38> Well, other languages even with Latin alphabets work differently as far as I know, at least Germanic languages that use Latin alphabets, as far as I have seen they are differently, but I don't really know all of these thing if it is. I know that English writing does not normally use the accent marks, at least.
03:57:59 <b_jonas> there are much more that had different writing systems with different scripts at different times
03:58:00 <ais523> technology seems to drive elimination of letters from English
03:58:09 <ais523> þ started dying out when printing came about
03:58:30 <ais523> and it was typewriters and then computers that have mostly driven out the diaresis
03:58:52 <b_jonas> oh, as for the diarrhea, I wanted to ask
03:59:04 <nakilon> what
03:59:07 <b_jonas> how do you spell Bo-otes the constellation in English ais523
03:59:12 <ais523> (I'm just about old enough to remember the time when diareses were seen frequently enough to not look odd)
03:59:28 <ais523> b_jonas: I don't know the constellation in question
03:59:39 <b_jonas> ``` \? diarrhea # nakilon
03:59:40 <HackEso> Diarrhea is the most sickening accent, although some others are more grave.
03:59:50 <Corbin> I know that one; it's spelled "bootes" and you're just supposed to know that it's boötes.
04:00:21 <ais523> Wikipedia suggests https://en.wikipedia.org/wiki/Bo%C3%B6tes
04:00:35 <ais523> so it's using the diaresis for its intended purpose
04:01:04 <b_jonas> ais523: yes, so I was wondering if you use the diar... trema there
04:01:31 <ais523> I use the diaresis everywhere I can get away with it, which is very few places
04:01:40 <ais523> nowadays, few people know it exists
04:01:54 <ais523> a lot can change in a few decades
04:02:07 <b_jonas> the context is https://logs.esolangs.org/freenode-esoteric/2021-05.html#lqp
04:02:37 <b_jonas> ais523: yes, but isn't it one of those things that you can still use if most people don't know it because they can pick it up by example?
04:02:52 <zzo38> Yes, I have heard that a thorn is not used in English due to printing, but I think some languages still use
04:03:00 <ais523> there's a difference between what's understandable and what's socially acceptable
04:03:24 <ais523> people will laugh at you for writing "coöperative", even though it's normal-ish in old books
04:03:56 <oerjan> b_jonas: nynorsk vs. bokmål aren't just about spelling, there are also different word choices at least traditionally. and even phrasing: nynorsk frowns more upon using convoluted syntax with verbs being nouned (but _both_ frown upon it compared to german or even english)
04:04:00 <ais523> Wiktionary calls it a "rare spelling"
04:04:50 <nakilon> lol HTML https://web.archive.org/web/20120204065251/http://people.ku.edu/~nkinners/LangList/Extras/famous.htm
04:04:58 <b_jonas> oerjan: ok. and it's not clear if serbian is a good example, or if in the future we'll just see it as a short period when two systems coexisted
04:05:28 <b_jonas> (I do hope it's the serbian latin that dies out by the way)
04:05:48 <b_jonas> (but one of them will die out for sure)
04:06:45 <ais523> b_jonas: apparently they've survived in parallel since 1830
04:06:54 <b_jonas> what? really that old?
04:06:58 <b_jonas> I thought it was much newer
04:06:58 <ais523> which is longer than I expected
04:07:32 <ais523> this may end up in a situation like Japanese, where hiragana and katakana are used for different purposes (katakana's almost like italics)
04:07:51 <ais523> but have a 1-to-1 correspondence
04:09:03 <b_jonas> I don't really see how it could end up that way
04:09:30 <b_jonas> well maybe
04:10:00 <b_jonas> I can more easily imagine them being used in different kinds of text, but not generally mixed in one book
04:10:29 <b_jonas> but the problem is
04:11:01 <b_jonas> both latin and cyrillic already has lower case, upper case, and italic forms, so you don't need an extra doubling to use different letters for different occasions
04:13:59 <b_jonas> you can have three cases, but six is entirely too many
04:15:42 <oerjan> s/cases/genders/ * runs hastily away from both woke and bantu people
04:17:04 <nakilon> https://en.wikipedia.org/wiki/Plankalk%C3%BCl
04:17:11 <b_jonas> so didn't serbian cyrillic only get popular in the 1980s or 1990s, even if it was invented earlier?
04:17:14 <nakilon> > While working on his doctoral dissertation, Zuse developed the first known formal system of algorithm notation[7] capable of handling branches and loops.[8][9] In 1942 he began writing a chess program in Plankalkül
04:17:21 <b_jonas> sorry sorry
04:17:23 <b_jonas> I mean
04:17:26 <b_jonas> so didn't serbian latin only get popular in the 1980s or 1990s, even if it was invented earlier?
04:17:47 <b_jonas> serbian cyrillic was popular before that obviously
04:18:08 <nakilon> dude didn't even yet have a programming language but started coding chess -- how monay today's "programmers" would try to code chess at least once in their life?
04:18:19 <nakilon> *how many
04:18:57 <oerjan> b_jonas: for a time until about 1990 a lot of people tried hard to claim serbian and croatian were the same language hth
04:20:49 <oerjan> (based on politics and the silly argument that there was hardly any difference to speak of)
04:21:19 <oerjan> (then the politics changed and they quickly started making sure there _was_ a difference)
04:21:54 <oerjan> (but i think they're still closer than say bokmål and nynorsk?)
04:22:12 <b_jonas> oerjan: yep
04:22:38 <b_jonas> so maybe serbian latin was popular before the 50s, that's just too old for me to have noticed?
04:22:52 <b_jonas> I don't see books that old often
04:23:09 <b_jonas> or, you know, posts on the internet that old
04:23:18 <keegan> zzo38: Icelandic still has thorn
04:23:27 <oerjan> shocking
04:24:09 <ais523> I think Icelandic's use of þ is the reason it has a default keybinding on this layout
04:24:17 <keegan> and eth (ð) which is like the voiced version i think
04:25:38 <ais523> voiced th bothers me so much, because my brain tries hard to refuse to hear it as distinct from the unvoiced version
04:25:42 <oerjan> nakilon: istr ada lovelace similarly coded tic-tac-toe
04:26:06 <oerjan> which is a bit easier
04:26:11 <ais523> it took me a while to figure out whether the "th" in "thorn" is voiced or unvoiced, I had to say it over and over again and compare with reference words
04:26:16 <ais523> and the sounds aren't even that close
04:26:54 <b_jonas> ah, so IOCCC had a chess engine before 2005/toledo: 1992/vern. I thought it only had toledo's chess engine, his X11 chess program, and suicide chess.
04:27:02 <ais523> I've been wondering if there's a way to spell either of the sounds to make their pronuncuation unambiguous to a typical English speaker
04:27:12 <nakilon> oerjan funny but it's just exactly 1-2 days ago that I during having fun on lichess started thinking about making chess and then switched to idea to start with tic-tac-toe to avoid spending time on coding the rules -- this is why yesterday I threw some links about Gomoku
04:27:31 <ais523> I guess "vh" for voiced "th" isn't massively far off
04:27:41 <nakilon> (because the tic-tac-toe would be too fast to calculate fully)
04:27:41 <ais523> and "fh" for unvoiced?
04:28:09 <ais523> it helps that "v" is the voiced version of "f"
04:28:35 <ais523> (oerjan-style thought bubble: does that mean that the opposite of "voiced" should be "foiced"?)
04:28:51 <b_jonas> ais523: oh, so that's how you're supposed to pronounce fhtagn?
04:29:04 <ais523> or even "foist", I guess
04:29:16 <oerjan> <ais523> voiced th bothers me so much, because my brain tries hard to refuse to hear it as distinct from the unvoiced version <-- huh are there no minimal pairs in english? i don't know a rule to know which one is correct where
04:29:22 <nakilon> and also I wanted to ask you guys if there is something between Tic-tac-toe and Nim that would be easy to implement the rules machine and yet hard to calculate, but then I discovered the https://en.wikipedia.org/wiki/M,n,k-game that allows me to just take different n,m,k
04:29:40 <ais523> oerjan: "the"/"this" is not a pair but make for good reference words
04:29:52 <b_jonas> now you just have to explain all the other consonant combinations that appear at the start of a word only in incantations to summon Cthulhu
04:30:07 <ais523> I guess "this" (voiced) / "thistle" (unvoiced) have a paired syllable
04:30:31 <oerjan> ais523: on the other hand as a norwegian i have similar problems with voiced and unvoiced s (the latter doesn't exist in norwegian, which has no voiced sibilants)
04:30:32 <ais523> (the second "t" in "thistle" is silent, fortunately, or it wouldn't work)
04:31:34 <ais523> I don't know a rule for which th to use either, but I assume one exists, because I've never had trouble pronouncing an unknown English word with a th in it
04:32:00 <oerjan> ais523: it seems to me that dh would be a reasonable spelling of the voiced version
04:32:15 <nakilon> actually I've implemented the Gomoku in around 2007 in C++Builder -- it was thinking for few seconds and wasn't easy to beat, at least for me; the whole 3 (or 4?) deep loop was hardcoded with no recursion
04:32:23 <b_jonas> ais523: what? there's no way the "t" is always silent. isn't it's just one of those "t"s that are sometimes silent, like the one in "often"?
04:32:24 <ais523> the problem is that dh is a real digraph which has its own pronunciation
04:32:51 <ais523> Wiktionary says always silent
04:33:00 <nakilon> or maybe earlier than 2007 because it feels like I didn't have internet yet to know for sure how ti should be done
04:33:07 <ais523> and pronouncing it would be really weird, it'd end up rhyming with "pistol"
04:33:38 <b_jonas> so does my Longman. funny.
04:33:45 <ais523> in "often" the 't' is sometimes pronounced but it's rare
04:33:56 <oerjan> . o O ( it's not oerjan-style without the prefix hth )
04:34:38 <ais523> https://en.wikipedia.org/wiki/Pronunciation_of_English_%E2%9F%A8th%E2%9F%A9 seems useful
04:35:10 <nakilon> lol I remember how in school every teacher of English was reteaching us the pronounciation
04:35:16 <oerjan> ais523: um "the"/"this" are both voiced unless i am far more gravely mistaken about them than i thought
04:35:16 <nakilon> they all said "your previous teacher is dumb"
04:35:50 <ais523> oerjan: I was about to say that
04:35:57 <ais523> I /just/ realised that "the" is voiced
04:36:05 <ais523> even though I was sure it was unvoiced earlier
04:36:14 <ais523> I came here to say that, and then noticed your ping
04:36:26 <ais523> this is how hard it is for an English speaker to tell them apart
04:36:37 <ais523> "this"/"thistle" helped, though
04:36:51 <nakilon> we were officially taught british english and when there was a teacher of english literature that "lived in USA for several years" we could not understand her at all
04:37:48 <zzo38> (One thing that I do think can be good to continue using thorn letter in English is when you want to abbreviate "Thursday" as one letter, so that is difference from "Tuesday". And then, write "L" for "Lyeday" (as another name for Saturday); I have seen suggestion Lyeday for Saturday too (and it look like it is another name for that day in Proto-Germanic), and I like this because it is not "S" like "Sunday")
04:37:50 <b_jonas> huh
04:37:57 <ais523> American English and British English are mutually intelligible but the differences are actually quite large
04:38:27 <zzo38> I had also heard someone who speak English could understand well enough in most countries (even those who are not English) except in England
04:38:35 <ais523> and I could see how it would be difficult as a second language
04:39:34 <nakilon> I mean like those youtube videos of "speaking with scottish accent" or something -- the same much inunderstandable
04:39:48 <b_jonas> zzo38: shouldn't we just abbreviate them as the alchemical symbols for the Moon, Mars, Mercury, Jupiter, Venus, Saturn, Sun?
04:39:53 <b_jonas> the days of the week that is
04:39:55 <ais523> ah, here we go, the rules for telling the "th"s apart: https://en.wikipedia.org/wiki/Pronunciation_of_English_%E2%9F%A8th%E2%9F%A9#Phonology_and_distribution
04:40:08 <nakilon> she was dictating things and we were just pretending we understand, but mostly asked each other "what did she just say?" ..D
04:40:17 <b_jonas> or W-1, W-2, W-3, W-4, W-5, W-6, W-7 if you prefer
04:40:30 <ais523> nakilon: a sufficiently strong accent can be hard to understand even for native speakers
04:41:21 <zzo38> Yes, abbreviating them as the the symbols for the planets is another way, maybe is better
04:41:40 <ais523> heh, I love the way that Wikipedia points out that "lighthouse" is an exception, the t and h are in different syllables
04:42:14 <nakilon> I remember how I asked: "road or wrote?" and in Russian it actually sounds like "в рот" meaning "into a mouth" -- the class went laughing and she asked me to leave and after that or another lesson she just refused to do lessons with me, lol
04:42:36 <nakilon> I don't remember how I was rated in the end of the year
04:43:33 <nakilon> probably now I could understand from the context if it's road or wrote but not when you are 16 or so
04:45:41 <b_jonas> nakilon: write/right/rite/wright is one of the worse homophones in English
04:45:51 <ais523> "cloth"/"clothe" aren't a pair because the vowel is different, but I can pronounce "clothe" with either th easily
04:46:13 <b_jonas> ais523: can you pronounce it with either th as either a noun or verb?
04:46:15 <zzo38> (I think in alchemy they are just used as the sign for different metals and chemical elements; in astrology/astronomy they are used to represent the planets, Sun, and Moon.)
04:46:48 <ais523> b_jonas: the verb can only use the voiced version, if I pronounce it unvoiced it sounds like a nonexistent noun (an irregular singular of "clothes")
04:46:54 <b_jonas> zzo38: yeah, astrological symbols might make more sense
04:47:02 <ais523> which is weird because the th in "clothes" is voiced too
04:47:30 <b_jonas> how do you pronounce "clothing"?
04:47:53 <b_jonas> `? hth
04:47:55 <HackEso> hth ([ʰtʰh̩]) is help received from a hairy toe. It is not at all hambiguitous.
04:48:19 <ais523> b_jonas: voiced
04:48:34 <ais523> I'm getting better at telling them apart but it takes so much concentration
04:48:47 <nakilon> in the first class we were taught to spell "can't" with "a", and in the second class we've got another teacher and she said "omg, don't say like that", you should use "e" sound otherwise it sounds bad -- only after school I've learned what word she meant
04:48:49 <b_jonas> huh... now I'll have to look that up in the Longman too
04:48:57 <ais523> I guess that's another pair – the second syllable of "clothing", against "thing"
04:49:16 <nakilon> but then in movies I hear "can't" exactly like we were taught in the first class so we were not fully wrong, it was just an accent
04:49:43 <b_jonas> longman says "clothing" is voiced too
04:50:10 <ais523> apparently "th" in the middle of a word is nearly always voiced, and "th" at the start of a word is nearly always unvoiced – Wikipedia claims that there are exactly 14 base words whose derivatives start with voiced "th", and all other words are unvoiced
04:50:25 <ais523> that would explain why I rarely have much trouble getting it correct
04:50:48 <ais523> "th" at the end of the word varies by both the word and by the accent of the speaker, according to Wikipedia, and when I think about it I think that's right
04:50:58 <nakilon> heh, TIL this longman thing https://www.ldoceonline.com/dictionary/can-t what does red and blue mean? they are exactly what you meant
04:51:01 <nakilon> *what I
04:51:15 <ais523> basically, the less voiced your final ths are, the further north you live
04:51:19 <ais523> if you're in the UK
04:51:35 -!- Everything has quit (Quit: leaving).
04:52:07 <b_jonas> nakilon: no
04:52:37 <b_jonas> my longman is a printed dictionary from the same publisher (Langenscheidt-Longman)
04:52:49 <b_jonas> called "Dictionary of Contemporary English"
04:53:08 <nakilon> though the definition in that page is confusing
04:53:23 <nakilon> " something is impossible or unlikely" is exactly the "Sorry, I can’t help you."
04:53:38 <ais523> huh, I missed definition 2 there
04:53:47 <b_jonas> a very good dictionary in the sense that its definitions are easier to understand than the ones in Oxfords, and much easier than the ones in Websters
04:53:51 <ais523> if you write it as "cannot" it sounds more like an order, rather than a state of fact
04:54:42 <ais523> I hadn't noticed that rule before, and was vaguely surprised that a dictionary picked up on it
04:55:01 <ais523> however, this seems to be a meaning that's missing from "cannot" rather than an extra meaning of "can't"
04:55:04 <nakilon> b_jonas <title>can’t | meaning of can’t in Longman Dictionary of Contemporary English | LDOCE</title>
04:55:04 <b_jonas> I highly recommend using Longmans as the first one-language English dictionary for foreign language learners
04:55:39 <b_jonas> nakilon: ok, but this one doesn't have red and blue stuff, except the blue L on the cover, and definitely doesn't have sound recordings
04:56:01 <nakilon> ..D
04:56:23 <b_jonas> so I don't know what red and blue means
04:56:28 <nakilon> yout typography had only black ink
04:57:17 <nakilon> oh when you hover the mouse it says red british blue american
04:57:50 <nakilon> haha, so the teacher from 2 to 9 classes was wrong
04:59:05 <ais523> now I'm trying to imagine what American English "can't" sounds like (without cheating by playing a recording)
04:59:44 <ais523> oh, Wiktionary says /kænt/, and æ is easy, that'd basically be British English "cant"
05:00:17 <nakilon> I guess the transcription on that page means the same: /kɑːnt $ kænt/
05:00:23 <nakilon> it's just not colored
05:00:36 <ais523> …it crosses my mind that I've partially learnt quite a few alphabets
05:01:15 <ais523> I know more than half of Cyrillic but not all of it, I struggle with many of the vowels, and also the consonants that are written as digraphs in English (I have trouble remembering which is which)
05:02:07 <ais523> and I know some of IPA but not all of it (that's especially hard for sounds that aren't in English, although I can normally get there by reading the Wikipedia article and following its instructions about where to put the various parts of my mouth to pronounce them)
05:04:25 <ais523> hmm, I wonder whether the "th" in words like "lighthouse" should be technically written as "tḧ"? although the diaresis is only supposed to be used on vowels, I guess now that it isn't used anywhere any more I can put it where I like
05:04:52 <oerjan> brilliant
05:04:54 <nakilon> b_jonas does your book longman have one or two transcriptions?
05:07:58 <ais523> oerjan: anyway, now that I've read the rules, I can understand why þ/ð pairs are so hard to find in English – the rules pretty much eliminate them
05:08:09 <nakilon> ahaha, another example https://www.ldoceonline.com/dictionary/homework
05:08:23 <ais523> you would probably need to find a loanword with a th in the middle, that happened to otherwise be the same as a native word
05:08:40 <nakilon> in 1st class we were taught to say hAm, and the next teacher said it's stupid, say hOm
05:08:47 <ais523> oʊ? wow
05:08:50 <nakilon> "because otherwise it sounds like harm work"
05:09:16 <ais523> American English sounds ridiculous to Brits sometimes
05:09:45 <nakilon> this is so weird to finally know why other teachers said we've got not the best teacher during 2-9
05:10:13 <ais523> I don't think I could teach American English
05:10:18 <nakilon> she was kind of right to say cEn't and hAm but not while saying that "we are learning british one" at the same time
05:10:26 <ais523> the vowels are so different
05:11:49 <nakilon> I think this was all wrong to decide that "we teach this one" because in the end today I have no idea which one is which
05:12:05 <nakilon> is it ...tize os ...tise, color or colour beughbor or neighbour, etc.
05:12:45 <nakilon> it would be nice if instead of "we learn british, that's it" we were "learning both, here remember the difference..."
05:12:51 <ais523> …ise vs. …ize, nobody has any idea any more
05:13:01 <nakilon> so we would pay attention
05:13:04 <ais523> both are used interchangeably in both Britain and the US any more, probably because they're pronounced the same way
05:13:12 <ais523> s/any more/nowadays/
05:13:22 <nakilon> "beughbor" oh god today's typos
05:13:24 <ais523> some people try to insist on a rule to distinguish them but nobody can remember which is which
05:13:44 <ais523> and I have spellcheckers on my computer with strong opinions about -ise versus -ize but they disagree with each other
05:13:58 <nakilon> ahah, I always ignore those red lines
05:14:03 <nakilon> *underlines
05:14:04 <ais523> however, in most of the cases where the words are a different length, the British spelling has more letters than the American
05:14:27 <ais523> so "neighbor", "color" are US, "neighbour", "colour" are UK
05:14:49 <nakilon> also I guess it was less practical to learn british one
05:14:52 <ais523> despite being British, I will often use the American spellings in technical contexts, sometimes intentionally, sometimes not
05:15:02 <nakilon> they could not predict that though, we are the Europe
05:15:03 <ais523> American is more widely used, I think, because they outnumber us
05:23:07 <imode> do we?
05:24:36 <ais523> by a factor of about 5, it seems
05:25:28 <imode> damn, sorry.
05:25:30 <imode> we'll try harder.
05:28:40 <ais523> I guess I look down on anyone teaching English as a second language who doesn't realise that British and American English both exist, though (and it's confusing to change from one to the other mid-course)
05:33:06 <ais523> oerjan: OK, I finally found a þ|ð pair: "loath" / "loathe"
05:33:33 <ais523> although it's not great because "loath" is pretty obscure as words go
05:34:23 <ais523> oddly, Google Ngrams has "loath" as more common than "loathe", but derived forms of "loathe" (such as "loathing") beat both
05:34:39 * ais523 quickly looks up how to pronouce "Lothian"
05:34:53 <ais523> ð it seems
05:36:11 <ais523> the pair only works because the "e" is supposed to lengthen the preceding vowel but it's long anyway, so it has no effect other than moving the "th" away from the end of the word
05:36:28 <ais523> the funny thing is, to an English speaker's ear, "loathe" sounds like it has a longer vowel than "loath"!
05:37:36 <ais523> (it doesn't, it's just perceived like it does)
05:38:46 -!- delta23 has quit (Ping timeout: 256 seconds).
05:41:24 <ais523> …it strikes me that English is arguably an esolang
05:41:52 <ais523> maybe that's why we discuss it so much here
05:42:16 <nakilon> ais523 we were taught that there are two englishes but we didn't bother to learn both
05:42:32 <nakilon> I guess the books were specializing on one of them
05:42:54 <nakilon> and teachers could believe or speculate which pronounciation is correct
05:43:27 <ais523> there's more than two, but, e.g., Indian and Australian English aren't heard much outside their native countries
05:44:11 <nakilon> we had only one tape recorder in school to bring fro class to class to play some english recordings on rare occasions, usually a special kind of exams -- "an audition"
05:44:15 <zzo38> There are more than two kind of English; there is also Canadian English too. One thing on the CBC they said, should you use American or British spelling in Canada? I say, you use Canadian spellings in Canada (except computer commands, which will be American).
05:44:32 <nakilon> yeah I know australian english from youtube
05:45:11 <ais523> zzo38: I think Canadian English is a good compromise between British and American
05:45:21 <nakilon> most of people at least in my age didn't even have the full school course of english, usually only 6 years, not 10, or even german instead
05:45:53 <nakilon> so people just didn't give a damn, and again there was no internet, only tape recordings
05:47:59 <ais523> I guess the Internet would be one of the main reasons to learn English
05:48:40 <ais523> it's the main use I've made of my foreign language knowledge – I rarely have a reason to use languages other than English when communicating with other UK residents, and rarely go abroad, but the Internet makes it easy to communicate with people all over the world
05:48:49 <zzo38> Yes, I also think the Canadian English is good compromise between British and American, too.
05:48:55 <nakilon> "reasons to learn English" -- meh, most of people won't believe in that even today
05:50:01 <nakilon> there is a huge imaginary world in which Russians are living where "we don't need anything from outside, it's enough in here" while english memes are leaking but learning things from the source is considered a wrong and shameful
05:50:30 <imode> a lot of americans have that view too.
05:51:19 <ais523> lots of Brits as well
05:51:20 <nakilon> I worked in many companies and in none of them had even one coworker who would speak with anyone abroad at all; people have learned English only to understand posts on stackoverflow
05:52:38 <ais523> I'm considerably better at understanding foreign languages than typing/speaking them; I wonder if the easiest way to speak with people when there's no fluent common language is for everyone to speak their own language
05:52:47 <zzo38> I think that there are reasonable reasons today to learn English writing even if not English speech
05:53:00 <ais523> that said, I hardly know any Russian, apart from the occasional loanword
05:53:59 <ais523> French and German come up much more often, probably just based on geographical proximity
05:54:19 <ais523> and Dutch for some reason, but if you know both English and German, you can often guess at what a Dutch sentence means
05:54:55 <ais523> the funny thing is, at school, I chose Latin as my foreign language primarily because it was taught a lot better than French and German were
05:55:29 <nakilon> maybe that's a good reason
05:56:13 <nakilon> we had a lecturer of programming who was showing slides with just pseudolanguage that maybe even was his own one
05:56:54 <nakilon> but at least he taught us programming and then we could learn the lagnauges specifically
05:57:11 <ais523> pseudocode doesn't normally follow actual rules
05:57:18 <ais523> it's just "whatever I expect the audience to understand"
05:58:13 <ais523> I guess it's the natural-language version of programming, you can be a lot more flexible because you don't need to let a computer understand what you're saying, just a human, and humans can fill in missing parts more easily
06:27:58 <nakilon> I don't want to change rasel specification, I don't want to bloat it, and I don't want to make too many derivatives of the same thing; but I still keep thinking about threading and other 2d-related additions, can't decide where to put them; maybe later
06:29:52 <nakilon> maybe I need a language with support of adding powerful extensions
06:30:27 <nakilon> not that I saw anything like that
06:31:04 <nakilon> to be able to have such extensions that would change the runtime so much like adding the subroutines I imagines few hours ago
06:31:50 <nakilon> *imagined
06:37:29 <ais523> Funge-98 has some pretty powerful extensions
06:37:53 <ais523> I think that's the only example of something like that I've seen in an esolang (not counting esolangs where the entire language can be redefined at runtime, as that isn't really the same thing)
06:40:10 -!- src has quit (Ping timeout: 240 seconds).
07:36:05 -!- earendel has quit.
07:36:20 -!- earendel has joined.
07:56:40 -!- ais523 has quit (Quit: quit).
08:06:36 -!- hendursa1 has joined.
08:10:21 -!- hendursaga has quit (Ping timeout: 276 seconds).
08:22:17 -!- earendel has quit.
08:22:38 -!- earendel has joined.
08:49:12 -!- Sgeo_ has quit (Read error: Connection reset by peer).
09:22:58 -!- Koen_ has joined.
09:25:07 -!- Lord_of_Life has quit (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine).
09:51:34 -!- oerjan has quit (Quit: Later).
10:17:31 -!- Robdgreat_ has joined.
10:18:26 -!- Robdgreat has quit (Remote host closed the connection).
10:19:32 -!- Robdgreat_ has changed hostmask to ~rob@user/robdgreat.
10:19:38 -!- Robdgreat_ has changed nick to Robdgreat.
10:53:52 -!- arseniiv has joined.
11:03:02 -!- imode has quit (Ping timeout: 245 seconds).
11:12:06 <b_jonas> ais523: yes, American "can't" is pronounced as /kænt/ which means that before a verb that starts with a "t" or "d" it sounds exactly the same as "can". some say the American solution to this is that "can" is always pronounce weak with a schwa, but I find that sort of hard to believe.
11:13:49 <b_jonas> ais523: re `whether […] "lighthouse" should be technically written as "tḧ"?' => no, just use a hyphen, as in "light-house" if you think without it it's hard to read
11:13:59 <b_jonas> though I think in the case of lighthouse there's not much need for it
11:14:14 <b_jonas> maybe for hot-headed or pot-hole
11:15:58 <b_jonas> "…ise vs. …ize, nobody has any idea any more" I always try to use ize.
11:16:37 <b_jonas> "I have spellcheckers on my computer with strong opinions" => many spellcheckers have strong opinions about words where there are two variant spellings/pronunciations used.
11:18:51 <b_jonas> like try to look at any Hungarian spellchecker, if you take any word where different people use different form of the conjugation or declination for the same thing, it's very likely that the spellchecker only accepts one of them, except when the alternative coincides with what it thinks is either a different form of the word (can happen for a few verb forms) or used with a different meaning of the same
11:18:57 <b_jonas> root word in the same form (usually for nouns)
11:20:19 <b_jonas> as for color, neighbor, and all the other -ours that don't come up in mathematics that much (honor, flavor, odor, favor, valor, candor etc), I now try to consistently use the -or spelling, but sometimes I still typo into the -our version that I used to be using
11:21:30 <b_jonas> `ais523: oerjan: OK, I finally found a þ|ð pair: "loath" / "loathe"' => wait, what was the problem with cloth/clothe and bath/bathe?
11:21:32 <HackEso> ais523:? No such file or directory
11:22:02 <b_jonas> (the latter possibly only in some dialects)
11:22:28 -!- Koen_ has quit (Remote host closed the connection).
11:23:04 <b_jonas> `<nakilon> b_jonas does your book longman have one or two transcriptions?' => usually one; two if the most common American pronunciation can't be derived from the british pronunciation that they list
11:23:05 <HackEso> ​<nakilon>? No such file or directory
11:24:44 <nakilon> really
11:24:54 <nakilon> no such file or directory
11:25:18 <nakilon> I had to name my language nakilon
11:25:30 <b_jonas> `<ais523> I wonder if the easiest way to speak with people when there's no fluent common language is for everyone to speak their own language' => it can occasionally happen, but rare, mostly because switching languages quickly can be mentally taxing too
11:25:31 <HackEso> ​<ais523>? No such file or directory
12:25:04 -!- Koen_ has joined.
12:26:11 -!- earendel has quit (Quit: Connection closed for inactivity).
12:42:46 -!- Lord_of_Life has joined.
12:57:02 -!- hanif has joined.
12:58:18 -!- hendursa1 has quit (Quit: hendursa1).
12:58:46 -!- hendursaga has joined.
13:01:30 -!- src has joined.
13:45:58 -!- mla has joined.
13:49:09 <tromp> please upvote https://news.ycombinator.com/item?id=28423029 if you like chess and Haskell :-)
13:59:20 -!- riv has quit (Quit: Leaving).
14:03:24 -!- ais523 has joined.
14:04:23 <ais523> b_jonas: "cloth/clothe" and "bath/bathe" have different vowels, so they aren't exact matches
14:04:37 <ais523> the reason "loath/loathe" works is that the vowel is long already, so the e doesn't lengthen it
14:05:27 <ais523> meanwhile, multiple sources I've checked suggest that α⁸+α⁴+α³+α+1=0 produces the finite field that's used in AES encryption, which confuses me because multiple *other* sources say it doesn't produce a finite field at all
14:13:34 <b_jonas> do bath/bathe have different vowels in all dialects?
14:14:11 <b_jonas> cloth/clothe ... I never understand how "o" vowels work in English. let me look these up in a dictionary
14:14:16 <ais523> I think so, at least in British English; the "a" of "bath" varies but it never matches the "a…e" of "bathe", which doen't
14:15:06 <b_jonas> yeah, you're right, "bathe" has a long vowel
14:15:16 <int-e> ...dearest creature in creation...
14:16:28 <b_jonas> and yes, dictionary agrees you for "cloth/clothe"
14:16:51 <int-e> . o O ( Any clothing thoughts? )
14:16:57 <ais523> something I've been trying to do in my head is to work out, for each phoneme used by English, a way to unambiguously represent it so that it can't be misread as being some other phoneme (potentially context-dependent)
14:17:45 <ais523> I'm not sure it's possible; I haven't found any letter sequence that unambiguously encodes the vowel in bye, pie, sigh, etc., when it appears at the end of a word
14:18:08 <ais523> ("i…e" encodes it unambiguously when separated by a consonant other than "g")
14:18:16 <int-e> phoneme != phone me
14:19:23 <b_jonas> hmm... if there's not enough good pairs, then we should invent a sci-fi word "theron", with fake greek etymology, that is pronounced like "thereon" but with an unvoiced "th"
14:19:38 <Corbin> English orthography reforms are usually doomed. I think both Jan Misali and Conlang Critic have videos about this.
14:20:11 <ais523> Corbin: this isn't intended as an orthography reform, so much as a way to unambiguously communciate pronunciation of a word to someone who speaks the same dialect of English as you
14:20:45 <b_jonas> ais523: as for unambiguously representing each phoneme, usually you just give an example word that is common enough and has that vowel unambiguously enough. there are even lists of such example words for each phonemes, usually to explan what phonemes they're talking about or a specific phonetic notation.
14:21:08 <ais523> b_jonas: yes, but they struggle sometimes
14:21:08 <b_jonas> and I think there was something more like you want, but not that unambiguous
14:21:55 <b_jonas> both my Longman and my Oxfor has such example words
14:22:38 <b_jonas> https://en.wikipedia.org/wiki/SAMPA_chart_for_English has a list too but possibly not as good
14:22:46 <ais523> /ɨ/ is a good example of a phoneme it's hard to find good example words for
14:23:08 <Corbin> ais523: Many English words have multiple legal pronounciations depending on position and emphasis. First one that comes to mind is "the", which can start either voiced or unvoiced and use either a stressed vowel or schwa.
14:23:21 <b_jonas> ais523: is that a phoneme that appears in an English dialect?
14:23:31 <b_jonas> as opposed to non-English languages
14:23:43 <ais523> because some people pronounce it identically to ɪ and others don't use it at all
14:24:00 <Corbin> If we ignore that topological obstacle, then maybe examine Lojban's inventory of vowels; it has nearly everything an English-speaker could want. (Many other folks are grumpy about the lack of -eu-; nothing's perfect.)
14:24:01 <ais523> b_jonas: I think the standard example is the second vowel in "minute" (= 60 seconds), when it isn't a schwa
14:24:49 <ais523> but I pronounce that in a way that I perceive as identical to ɪ
14:25:10 <b_jonas> Alan's pronunciation dictionary defines more phonetic symbols than there are phonemes in any dialect, because each symbol can represent a combinations of possibly phonemes depending on the speaker
14:25:53 <b_jonas> https://en.wikipedia.org/wiki/SAMPA_chart_for_English has a list of that kind of set of combo-phonemes, sourced from the Wells books
14:26:18 <ais523> apparently some dictionaries have taken to using ᵻ as something that's somewhere along the ə-ɪ scale
14:28:41 <ais523> fwiw, I can get a phoneme that I don't normally use by putting my mouth into the position for /i/ ("ee") and then trying to say /ʊ/ (short "oo") without moving it; based on the definitions of Wikipedia that *should* be /ɨ/ but I'm not sure i believe it, as it seems inconsistent with definitions elsewhere
14:31:48 <b_jonas> Alan's pron has such a specific combo symbol ê for the second wowel of "minute" the noun in the American pronunciation, and explains that this is sometimes pronounced as the "ship" vowel and sometimes as a schwa
14:32:00 <b_jonas> (and possibly sometimes as some other vowel)
14:32:20 <b_jonas> though apparently that other vowel is supposed to be /ɨ/
14:33:51 <ais523> this finite field thing is bothering me, though
14:34:23 <b_jonas> I can understand. I decided to stop trying to figure it out yesterday, but should continue at some point
14:34:24 <ais523> I think most consistent with the sources is that α⁸+α⁴+α³+α+1=0 *does* produce a valid finite field, but it isn't the one that most people use for GF(2⁸)
14:35:30 <b_jonas> it should be possible to figure that out by making a multiplication table and checking if you can find no zero divsors and an order 128 element
14:38:35 <b_jonas> that or ask Sage
14:38:56 <ais523> I'm trying to ask Sage but I can't figure out how to formulate the question, I'm not even sure which field to ask in
14:39:48 <b_jonas> the polynomial ring GF(2)[x] factored by that specific polynomial x**8+...+1 (not typing here because I'd typo it)
14:40:44 <b_jonas> did you try to check a recent AMD manual?
14:41:25 <b_jonas> if all else fails, we can ask on Cryptography SE, but I should make an effort trying to figure this out first
14:41:32 <ais523> OK, both the standard version (with α²) and the AES version (with α) are irreducible according to Sage
14:42:13 <ais523> I guess the next interesting question is what value each ring's α has in the other ring
14:42:18 <ais523> err, each field's
14:42:28 <b_jonas> ais523: but does irreducible mean the factor gives the finite field?
14:42:59 <b_jonas> because that's what wasn't clear to me, that's why I didn't know which of the fxt tables to look at
14:43:15 <ais523> yes, if you have any irreducible polynomial, its root gives a valid α to generate a finite field
14:43:29 <ais523> (whose elements are 0 and the powers of α)
14:43:56 <b_jonas> ok
14:44:00 <ais523> err, assuming that the original polynomial was over a finite field
14:45:30 <b_jonas> but in that case, https://www.jjj.de/mathdata/all-irredpoly.txt shoudl be the table to look at, and that table doesn't list 8,4,3,1,0
14:46:11 <ais523> b_jonas: it does
14:46:19 <ais523> beneath the "non-primitive" comment
14:46:24 <ais523> so now all the sources are in agreement
14:46:27 <b_jonas> oh
14:46:30 <b_jonas> indeed
14:46:42 <ais523> OK, mystery solved
14:47:29 <ais523> aha, I see
14:47:46 <ais523> it seems that a primitive polynomial gives you a root α that generates the entire field
14:48:04 <b_jonas> and that's the representation that the x86 GF2P8MULB and other GF2P8* instructions use
14:48:10 <ais523> and for a non-primtiive polynomial, its root is not a valid α because it only generates a subset of the field, but you can take a polynomial in its root to get the whole field
14:49:17 <b_jonas> ok
14:49:29 <ais523> for the AES field, you have to add 1 to the root of its polynomial to get the typical α (thus α is 3 in the usual encoding, rather than 2 like it is for most binary finite fields)
14:50:32 <b_jonas> so is either x or x+1 an order 128 element in all the representations that you get from irreducible polynomials?
14:50:42 <ais523> sage: y.<x> = GF(256)
14:50:44 <ais523> sage: a = x+1
14:50:45 <ais523> sage: a**8 + a**4 + a**3 + a**1 + 1
14:50:47 <ais523> 0
14:50:57 <ais523> err, I named a and x the wrong way round, but you get the idea
14:51:14 <ais523> b_jonas: I'm not sure, my guess is no but it's just a guess, not even an educated guess
14:53:57 <b_jonas> ok
14:54:14 <b_jonas> but what does this have to do with AES?
14:55:11 <ais523> so the reason Intel picked that particular finite field representation is that AES
14:55:20 <ais523> 's S-box is based on it
14:55:20 <b_jonas> hmm, apparently AES includes calculations in GF(2) in that representation
14:55:52 <b_jonas> ais523: but the AESNI extension with the AES* instructions is older than the GF2P8* instructions
14:56:12 <ais523> b_jonas: the common theory is that because the AES instructions existed already, the processor had circuitry for handling one specific finite field already
14:56:20 <ais523> so it was easy to expose it in a way that wasn't tied to AES
14:56:40 <b_jonas> or perhaps it's used in other crypto primitives too, and the AESNI instructions can't help with those
14:57:15 <ais523> and one of the GF2P8 instructions can apparently be used to convert between finite field representations, so you can have any GF(256) representation you like (as long as it's polynomial-based rather than logarithm-based)
15:00:04 -!- APic has quit (Read error: Connection reset by peer).
15:00:39 -!- APic has joined.
15:01:16 <b_jonas> while PCLMULQDQ multiplies two GF(2) polynomials, from two 64 bit long polynomials to a 128 bit long result, and doesn't try to do the reduction
15:02:03 <ais523> right
15:02:15 <b_jonas> let me check the CRC32 instruction too
15:04:06 <b_jonas> I think that one does a GF(2)[x] multiplication by x**32 then a reduction using a specific 32-bit polynomial
15:04:16 <b_jonas> for computing CRC32 checksum
15:04:49 <ais523> it's just so weird seeing a finite field representation where the generating element and the root of the polynomial are different, it becomes non-obvious which one gets to be called α
15:04:50 <b_jonas> but I'm not sure
15:05:06 <ais523> no wonder the AES field isn't the one that all the finite field software standardised on for GF(256)
15:05:39 <b_jonas> or maybe not, I'm not sure
15:06:21 <b_jonas> ais523: is the representation that they standardized the same as the representation in the IOCCC entry?
15:06:32 <ais523> which IOCCC entry?
15:06:53 <ais523> the answer may well be "I can't tell" unless the hint file is good, though, given that the question may require me to understand obfuscated C
15:07:42 <b_jonas> http://www.madore.org/~david/weblog/d.2012-10-14.2083.html#d.2012-10-14.2083
15:08:01 <b_jonas> the description of how it works is in a comment of David's non-obfuscated program
15:08:16 <b_jonas> that program is at ftp://ftp.madore.org/pub/madore/misc/shsecret.c
15:12:21 <ais523> this multiplication table has 2×2=3 (where the numbers refer to the internal representations of the finite field elements, not the regular 2 or 3)
15:12:31 <b_jonas> I also don't remember what representation my https://www.perlmonks.com/?node_id=863110 or the inspiration https://www.perlmonks.com/?node_id=862789 uses, I'll have to re-read those
15:12:41 <ais523> so I think it's using a very unusual representation of GF(256)
15:12:55 <ais523> (there's only one GF(256), the interesting part is how you order the elements)
15:12:56 <Corbin> Hm. I wonder if this is an NSA/CIA situation, where the AES field's primitive operations can be used for something other than typical encryption or decryption of AES.
15:13:41 <Corbin> Somebody must have had a use for these instructions. It's curious that Intel doesn't explain how to use them for arbitrary work.
15:13:50 <b_jonas> oh, those both represent GF(2**7), not GF(2**8)
15:14:35 <ais523> even so, every binary field larger than GF(4) (which doesn't have an element numbered "4") has 2×2=4 in the most common representation, also the second-most common representation
15:14:36 <b_jonas> Corbin: it's not the Intel manual's goal to explain math or cryptography
15:15:19 <Corbin> Fair.
15:15:23 <b_jonas> Corbin: they also don't teach you all about how to multiply matrices or complex numbers or quaternions with their mul-add and add-subtract instructions
15:15:43 <b_jonas> and especially not teach how to use matrix multiplication or complex numbers for anything useful
15:15:59 <ais523> Corbin: all representations of GF(256) are equivalent and fairly easy to interconvert (you just need to know which element in one field is the α of the other), so circuitry implementing AES isn't going to be inherently AES-specific, you could use it for anything based on GF(256)
15:16:15 <ais523> and that's the functionality that Intel's exposing now
15:17:19 <Corbin> ais523: That makes sense, I guess. What are you stuck on?
15:17:28 <ais523> we aren't any more
15:17:42 <ais523> we were stuck on some apparent inconsistencies between sources but they've all been resolved now
15:17:45 <b_jonas> ok, now I'm trying to imagine the Intel manuals with three extra volumes for numerical methods of partial differencial equations in the middle
15:18:15 <ais523> the representation AES uses for GF(256) is mildly weird, but not ridiculously so
15:18:20 <b_jonas> ais523: I don't think that's necessarily right, doesn't AES mix those field operations with other things, or at least map the input to it somehow?
15:19:19 <ais523> b_jonas: yes, but the circuits for the field operations apparently existed already, there was just no way to use them in isolation
15:19:38 <b_jonas> I remember that https://www.perlmonks.com/?node_id=862789 switches between two representations of GF(128): a sane linear one, and a logarithmic one where you add the representatives mod 127 to do a multiplications
15:20:04 <b_jonas> and I think it computes the logarithm table for that by repeatedly multiplying with a specific field element, because that's easier to code than a general multiplication
15:20:09 <ais523> those are both sane, and fairly natural
15:20:16 <ais523> the polynomial representation is more commonly used though
15:20:32 <b_jonas> just like multiplying fixed integers by a constant integer is easier than multiplying two arbitrary integers
15:21:11 <b_jonas> ais523: possible, the logarithmic one certainly wasn't natural, I remember the idea was new and very odd to me when I decoded how that obfuscation works
15:21:31 <b_jonas> I do admit that it's a good representation in the sense that it did allow martin to golf their code
15:21:42 <ais523> b_jonas: it's something I thought up independently after learning about finite fields (although I thought of the polynomial representation first)
15:21:46 <ais523> so it was natural to me
15:21:49 <b_jonas> ok
15:21:57 <b_jonas> my program, which I wrote later, only uses a linear representation
15:22:29 <b_jonas> but I don't know how it works
15:22:51 <b_jonas> now I have to try to understand my own obfuscated code\
15:23:21 -!- riv has joined.
15:25:01 -!- APic has quit (Read error: Connection reset by peer).
15:25:40 <b_jonas> but... that code makes no sense! why does it shift one bit left then extract the high bit?
15:25:50 -!- APic has joined.
15:25:54 <b_jonas> why doesn't it just extract the sixth bit instead of shifting and extracting the seventh?
15:27:22 <ais523> is it an in-place shift, that leaves its input shifted?
15:27:49 <b_jonas> oh yes, it shifts the input in place, and also outputs its high bit
15:27:51 <b_jonas> that makes more sense
15:30:10 <b_jonas> $v must be the value substituted in the polynomial
15:32:25 <ais523> my interest in finite fields is mostly related to error-correction algorithms
15:33:10 <b_jonas> so h($r) shifts $r in place, returns the carry, and so $r ^= h($r) & "\x217" multiplies the polynomial by x then propagates the carry back so that, I think, x**8 = x**7+x**3+x**2+x+1
15:34:32 <ais523> «& "\x217"» looks wrong, you'd want the \x217 to be a single character but I think it parses as \x21 followed by 7, and even if it doesn't, the value is too large
15:34:51 <b_jonas> yes, sorry, it's "\217"
15:35:01 <b_jonas> I just typed it to IRC wrong
15:40:01 -!- APic has quit (Read error: Connection reset by peer).
15:45:26 -!- APic has joined.
15:50:04 -!- tech_exorcist has joined.
15:51:51 -!- hanif has quit (Ping timeout: 276 seconds).
15:54:28 <Koen_> hi
15:54:49 <Koen_> does someone has some good argument to defend the choice of calling python's functools.reduce reduce and not fold?
15:54:57 <Koen_> does someone have*
15:55:45 <Koen_> as far as I understand, functools.reduce really behaves like haskell's foldl or ocaml's fold_left, and really doesn't behave like pyspark.reduce
16:00:53 <Corbin> I don't have a good argument. I wonder why MLs used "fold" and not "kata", though? Since foldl really behaves like a katamorphism.
16:01:33 <Corbin> I figure that Python and PySpark both use "reduce" for the same reason as MapReduce.
16:02:02 <Koen_> yes, but that's my point
16:02:08 <Koen_> pyspark's reduce is exactly mapreduce's reduce
16:02:17 <Koen_> but python's reduce is not
16:03:01 <Koen_> if python was statically typed, it'd be obvious from the type signature - python's functools.reduce would have the same signature as a fold_left
16:03:49 <Koen_> whereas pyspark.reduce is much more constraining - the function must be (a, a) -> a, where a is the type of the elements in the list
16:04:30 <Koen_> pyspark.reduce is basically "pop two elements at random; apply the function to those two elements; push the two elements back into the list; repeat until the list has only one element"
16:04:32 <Corbin> Python also has sum(), which can be made to behave like a fold on lists.
16:05:21 <Corbin> Hm. So, on one hand, yes, it looks like one of those is a commutative operation and the other is not.
16:05:28 <b_jonas> Koen: I think the name "reduce" comes from smalltalk
16:05:38 <b_jonas> no wait
16:05:43 <b_jonas> in smalltalk it's called inject?
16:05:45 <b_jonas> I don't know
16:06:08 <b_jonas> fold, reduce, inject, any of those is fine. insert is a bit too much.
16:06:15 <Corbin> But OTOH we could find the data structure at fault; if we take a fold on a list, but change the list to a set, then the fold automatically has to commute, or else definitionally it's not folding a set.
16:06:59 <b_jonas> Corbin: don't you mean associate instead of commute?
16:08:15 <keegan> i think reduce is perhaps a more intuitive name to someone who isn't steeped in fp
16:09:17 <ais523> fwiw, I use the term "associative fold" for (a, a) → a style folds where the order of folding doesn't matter
16:09:46 <Corbin> b_jonas: I think that a fold on lists has to already be associative? I mean that the order of values within the container has been forgotten.
16:09:47 <ais523> does Perl have a fold as a builtin? I know it has a map and a filter
16:10:16 <b_jonas> ais523: no, not as a builtin. I think there's one in a module packed with it.
16:10:16 <ais523> Corbin: it doesn't, left-fold and right-fold exist as defined evaluation orders for folding and many practical folds care about the difference
16:10:27 <Koen_> Corbin: if it was associative, we wouldn't distinguish between fold_left and fold_right except for performance issues
16:10:33 <b_jonas> but it has a for loop and mutable lexical variables as builtins
16:10:44 <b_jonas> List::Util::reduce is the one from a module
16:11:00 <shachaf> Perl 6 has a strange fold builtin.
16:11:18 <shachaf> It takes an operator and uses the associativity of the operator (left or right) to decide the associativity of the fold.
16:11:26 <shachaf> I guess it's not called Perl 6 anymore.
16:11:29 <Corbin> ais523: Yes, but I'm talking about the underlying recursion scheme. Like, a list is a free monoid, which means that list concatenation is associative. Similarly, there's free rules for list folds when we are folding over a concatenation.
16:11:38 <b_jonas> I'm an imperative person, I just use for loops
16:12:08 <Corbin> Koen_: We *do* only care for performance reasons! Any "right" fold can be turned into a "left" fold by composing with a list reversal.
16:12:22 <Koen_> fair enough
16:12:43 <shachaf> Hmm, in Haskell list is not a free monoid.
16:13:01 -!- imode has joined.
16:13:02 <b_jonas> Corbin: I don't think folds on a list have to use an associative operator. we do fold lists with subtraction to get an alternating sum.
16:13:25 <ais523> Corbin: even if the list itself is associative, the operation you're folding over it might not be
16:13:26 <riv> why not ? :(
16:13:26 <b_jonas> but sure, most of the operators you fold with will be associative
16:14:01 <ais523> b_jonas: in my experience, the operators I fold with are often *not* associative
16:14:07 <b_jonas> oh, and we fold with floating point addition too
16:14:10 <ais523> in particular, the type of the left argument and right argument often differs
16:14:11 <shachaf> I think the thing Corbin is getting at is that a set isn't supposed to expose the order it stores elements in.
16:14:20 <b_jonas> ais523: aren't those reduces instead of folds?
16:14:22 <shachaf> An unordered pair is similar.
16:14:25 <ais523> so, if you fold with the wrong associativity you get type errors
16:14:27 <b_jonas> you could call them folds of course
16:14:36 <ais523> b_jonas: it's basically an iteration that gets to modify a mutable variable as it goes
16:14:44 <b_jonas> ais523: yep, a for loop
16:14:48 <ais523> except functional
16:14:52 <shachaf> If you have a canonical order on a type, you can just expose the elements in that order, but if you don't, you still want fold {a,b} = fold {b,a}
16:15:10 <Corbin> ais523, b_jonas: This is a good point. I'm curious whether those are genuine katamorphisms. This is a good example of when engineering and theory are using the same jargon for different purposes.
16:16:03 <shachaf> Sure.
16:16:09 <b_jonas> I guess evaluating a polynomial, with its coeffs in a list, is also a non-associative fold
16:16:16 <shachaf> Well, presumably you want "katamorphism" to mean an initial F-algebra's unique thingy.
16:16:32 <Corbin> Yeah. To distinguish from paramorphisms, at a minimum.
16:16:36 <b_jonas> `? catamorphism
16:16:38 <HackEso> A catamorphism is when you recurse too greedily and too deep.
16:16:45 <shachaf> Those names are all silly in my opinion.
16:16:53 <b_jonas> no, a catamorphism is when a cat becomes amorphous to flow throuhg a small gap
16:16:58 <ais523> shachaf: hmm… suppose you have a set of strings representing integers, and you want to calculate their sum
16:17:11 <ais523> you can map a parseInt function over the set, then associative-fold over it with addition
16:17:23 <ais523> or, you can left-fold a "parseInt then add" function over the set, starting at 0
16:18:00 <ais523> this produces the same result regardless of the order the set is read in, *but* the fold operation isn't associative, which is why you have to left-fold (you would get a type error instead with any other ordering)
16:18:18 <b_jonas> nah, the sum is already printed at the bottom of the recipt, you don't have to add themup
16:18:53 <shachaf> Hmm, there are multiple things people mean by "fold", even in a concrete setting like Haskell.
16:19:23 <ais523> b_jonas: not even if you're implementing the receipt printer?
16:19:24 <shachaf> In Haskell it either means the structural thing for a type, like foldr for a list, or the thing from Data.Foldable, which is always about "sequence"-style folding.
16:19:48 <b_jonas> shachaf: yes, there's the non-associative folds for lists, and there's a typeclass for trees that you can fold over in a way that had better been associative
16:19:56 <b_jonas> yes, those
16:20:02 <b_jonas> ais523: then you don't have strings
16:20:12 <ais523> <b_jonas> no, a catamorphism is when a cat becomes amorphous to flow throuhg a small gap ← https://nhqdb.alt.org/?1404
16:20:37 <shachaf> I like kittens.
16:20:38 <b_jonas> ais523: besides, the sum is more authoritive then the details above, because the total is required to be printed there for tax purposes, the itemized bill is an optional bonus
16:20:55 <ais523> b_jonas: I don't think you can necessarily assume that the receipt printer isn't storing the prices as strings
16:21:02 <b_jonas> lol
16:21:14 <ais523> this sort of software is famous for being badly programmed
16:21:27 <shachaf> Most software is famous for being badly programmed these days.
16:21:29 <b_jonas> ais523: strings? those recipt printers existed way before strings
16:21:52 <ais523> that said, in one supermarket near me, the software automatically regroups the items you've purchased in order to take the least possible advantage from special offers
16:22:00 <ais523> (which is the reverse of what the customer would want, but useful for the store)
16:22:27 -!- oerjan has joined.
16:22:27 <keegan> damn
16:22:40 <b_jonas> the first ones I saw could only print numerals and a few symbols from their type loop, and then for the header you'd insert a separate stamp template that it stamps on
16:22:55 <b_jonas> ais523: hehe, that's odd
16:23:01 -!- Trieste has joined.
16:23:20 <b_jonas> the ones I see here usually preserve the order that the items were entered
16:23:23 <ais523> this means that sometimes I would put a purchase through as two separate transactions
16:23:35 <b_jonas> even the all-digital ones that print a whole page together at the end of the transaction
16:23:36 <ais523> in order to get a lower price
16:24:09 <shachaf> ais523: This reminds me of banks reordering transactions from largest to smallest to maximize overdraft fees.
16:24:12 <ais523> (I explained to the cashier that the tills were adding up the bills incorrectly unless I did that)
16:24:15 <shachaf> Which I think US banks sometimes do, at least.
16:24:30 <b_jonas> shachaf: wow
16:24:53 <ais523> shachaf: I've been told (but don't know from personal experience) that some credit cards charge interest based on the maximum amount of debt you've been in since the last time you weren't in debt
16:25:00 -!- APic has quit (Read error: Connection reset by peer).
16:25:04 <ais523> so that partially paying off a debt does nothing and you have to clear it to avoid paying interest
16:25:09 <Corbin> Big USA banks are terrible; use credit unions when possible.
16:25:11 <ais523> I'm not sure whether to believe this or not
16:25:31 -!- APic has joined.
16:25:59 <b_jonas> ais523: yes, I think mine does that, but not quite phrased that way: it collects all the payments for a month, and you can only clear the debt off after the month ends, even if you actually transfer the money in advance
16:26:25 <b_jonas> (the offset of when each month ends depends on the type of the card)
16:26:31 <ais523> at least in the UK, I think credit card companies aren't allowed to charge you interest if you clear the debt immediately
16:26:52 <b_jonas> ais523: yes, they don't charge me interest if I pay within a given period after the month ends
16:27:15 <shachaf> Hmm, I think the methods US credit cards can use to calculate interest are very regulated now.
16:27:21 <b_jonas> they do still charge a fixed yearly fee for having a card
16:28:02 <ais523> oh, here they mostly don't charge fees for having a card, basically because their competitors don't
16:28:25 <ais523> and they can't do it stealthily because one of them got sued really hard for not making the existence of a charge clear
16:28:30 <b_jonas> ais523: I think there exist credit cards here that don't charge a fixed fee
16:29:07 <shachaf> One thing that I think is true is, if you have no credit card balance, you get about a month of no interest to pay a balance before it starts accruing interest. But once you're in the interest state, new purchases start accruing interest immediately, until you back down to $0 for a while.
16:29:12 <shachaf> I don't know the details.
16:30:12 <shachaf> In the US credit card companies compete for customers by paying them all sorts of money in various forms. I think that's much less true elsewhere.
16:30:37 <shachaf> It must be a very profitable business, presumably partly at the cost of merchant fees and partly at the cost of people paying a lot of interest.
16:31:36 <b_jonas> shachaf: they advertise that they pay you money, but in many of the cases there's small print that means they pay very little money or only in very specific conditions
16:32:22 <b_jonas> or they're credit cards rebranded by a particular airline or supermarket chain, in which case they pay you money if you buy in their brand of supermarket
16:32:39 <b_jonas> or something like this, I haven't delved much in the details
16:33:05 <b_jonas> they also spend a lot on marketing, they send agents everywhere who try to sign you up for free credit cards
16:33:55 <b_jonas> the ones that ask "excuse me Sir, do you work in Hungary?" in supermarket are generally trying to sell one of those, but there are also other opening lines
16:35:35 <b_jonas> I admit it's a good opening question, it distinguishes students with no income from people who probably qualify for a credit card
16:37:03 <ais523> b_jonas: is the "in Hungary" to make the question less rude by making it ostensibly about something else?
16:38:39 <b_jonas> ais523: I'm not sure. I thought it's because it's more complicated for people to apply for those credit cards if they have an income abroad. Yes, I know there are supposed to be EU laws about this sort of thing, but EU principles and practice often doesn't seem to match
16:39:04 <b_jonas> but yes, it might also be because it sounds less rude
16:39:35 <b_jonas> or more easy to understand that they're not trying to hire you for a seasonal job or something
16:40:20 <ais523> I assume that there are few people shopping in Hungary who actually work outside Hungary, so it probably wouldn't be worth asking about unless you want to reassure people about the intentions behind your question
16:40:43 <b_jonas> probably not many who live in Budapest, yes
16:41:08 <b_jonas> (there would be more close to the Austrian border)
16:43:20 -!- tech_exorcist_ has joined.
16:43:24 <shachaf> When people ask me questions about being local, it's usually related to voting for things.
16:43:44 -!- tech_exorcist has quit (Quit: Goodbye).
16:43:49 -!- tech_exorcist_ has quit (Remote host closed the connection).
16:43:55 <b_jonas> hmm, I don't remember what opening questions those people have, they usually have party color decorations
16:43:57 <ais523> I'm not sure I've ever been asked a question about being local, in contexts where people knew my physical location
16:44:05 -!- tech_exorcist has joined.
16:44:14 <b_jonas> oh, I have been asked if I'm local
16:44:19 <b_jonas> people ask that when they try to ask for directions
16:44:33 <ais523> such questions are sometimes perceived as racist, because they tend to be disproportionately asked to ethnic minorities (for an ethnic majority people just assume they're local, generally)
16:45:09 -!- chiselfuse has quit (Ping timeout: 276 seconds).
16:45:43 <b_jonas> no, backwards because they don't even ask people who they don't think are local, because there's usually a choice of other people to try to ask directions from
16:46:01 <b_jonas> mind you, you can still count that as racist if you want
16:46:22 <b_jonas> but they don't need to ask that question for that
16:46:29 -!- chiselfuse has joined.
16:46:54 <shachaf> They often ask "are you a California voter?". I think the goal is to get signatures from voters in order to get things like ballot proposals, which require some number of signatures.
16:47:06 <shachaf> I mean propositions.
16:47:15 <b_jonas> possible
16:47:50 -!- immibis has quit (Remote host closed the connection).
16:48:02 <b_jonas> the questions I remember having been asked are "have you voted yet?" (on the day of the election), and "have you heard of <such and such> yet?"
16:49:21 -!- immibis has joined.
16:49:48 <ais523> the UK has really strict rules about campaigning
16:50:38 <ais523> in the run-up to the election you have to give a platform to every party if you give a platform to one (with various rules about weighting major versus minor parties), and as voting opens you can't publicly do anything related to campaigning at all
16:51:01 <ais523> (you can still talk to friends privately about the election, but can't, e.g., talk to random people on the street about your party preferences)
16:51:30 <ais523> news reports on the day of an election, while voting is open, can be pretty funny because it's obviously a major story that they need to cover, and yet they aren't allowed to say anything substantive at all
16:51:37 <keegan> lol
16:51:50 <ais523> so the stories are along the lines of "here's the most interesting dog we saw outside a polling station"
16:52:02 <ais523> even from normally serious news organisations
16:52:26 <keegan> we're having a recall election for governor
16:52:35 <keegan> it's structured in a strange way
16:53:10 <b_jonas> ais523: I think when voting starts (and shortly before) they are no longer allowed to solicit strangers to vote on a specific party, but they can still solicit people to go voting if they don't specify who for
16:53:11 <fizzie> ais523: At least the HMRC self assessment system optimizes the foreign tax credit relief deduction order in the way that maximizes the benefit from it. (Then it allows you to reorder if you wish.)
16:53:34 <keegan> question 1 is whether to get rid of the current governor (yes/no); question 2 is who the replacement should be (from a list of 46 candidates, not including the current governor)
16:53:41 <fizzie> They also round to integer £s always in the direction that's more advantageous to the taxpayer.
16:53:57 <keegan> so it's quite possible that the current governor will be replaced by someone who got far fewer votes than he did
16:54:34 <keegan> and the governor says we should leave question 2 blank
16:54:41 <b_jonas> as for news stories, they usually say things like "in <this small village>, an old <lady/man> got sick in the voting room so voting was suspended for 5 minutes. in <this small village> the seal of the voting box got damaged, so voting got suspended for 20 minutes until they bought a new certified sealed box."
16:54:53 <keegan> even though you are allowed to vote "no" and still vote question 2
16:54:59 <ais523> keegan: that is a bad idea if you like the current governor, it'll just guarantee that you'll get someone who his supporters dislike
16:55:30 <b_jonas> also news about how big queues are in certain polling stations, usually the stations where people who vote from a town far from their home (but still within Hungary) are sent to vote
16:56:23 <keegan> the last time we had one of these, the lieutenant governor ran as a replacement and got second place, and i guess they think that having him on the ballot boosted support for "yes"
16:56:47 <keegan> so this time there are no credible replacements from the governor's own party and they are not endorsing anyone for question 2
16:56:55 <ais523> keegan: it may be a good idea for the governor himself, but not for the voters
16:57:22 <keegan> also there's an interpretation of the state constitution where we shouldn't even have question 2 and the lt gov should automatically become governor if the governor is recalled
16:57:47 <keegan> (since that's what happens if the governor dies or resigns, and the constitution says that a recall should include an election for a replacement only "if appropriate")
16:57:59 <keegan> so maybe if he loses they'll challenge the vote
16:58:03 <keegan> it's all very strange and californian
16:58:09 <keegan> this state really suffers from an excess of democracy
17:00:05 <oerjan> <b_jonas> people ask that when they try to ask for directions <-- hm, in norwegian there's a different idiom for pre-asking that, "er du kjent her", which means more or less "to you know this place" with no necessary implication of whether you live there
17:00:26 <b_jonas> ais523: re "sometimes I would put a purchase through as two separate transactions" => are the rules such that you have to solve hard computational problems to optimize it?
17:00:53 <ais523> b_jonas: fortunately no, I think this is O(n log n) with the sort of special offers that were available
17:01:33 <keegan> also if replaced the replacement will serve for only one year because we are due for a normal gubernatorial election next year
17:02:35 <keegan> and the likely replacement is a far right talk radio guy who has no chance in a normal election
17:04:35 <keegan> since it is a very left leaning state
17:06:31 <b_jonas> hmm, I could try to make a third dairy-themed programming task from that. you want to follow your grandmother's recipe to the letter, and it calls for $n grams of kefir. the supermarket sells cups of kefir in several different sizes, with weights @a gram each. how much of each type do you buy?
17:07:04 -!- hanif has joined.
17:14:59 <oerjan> keegan: i saw scott alexander write about that mess, supposedly all the democratic candidates were quite terrible because of that strategy of no one important running. this sounds to me like it would really have benefitted from transferrable votes
17:15:31 <oerjan> at least they could then maybe get one of the less horrible republicans
17:16:46 <int-e> like biden? oh wait, he's horrible
17:16:57 <oerjan> int-e: he's not republican hth
17:17:02 <int-e> ...
17:19:44 <oerjan> also according to scott aaronson, he's better than a rutabaga, so still beats trump
17:20:34 <oerjan> but that was a different election and you'll just have to watch the mess
17:20:54 <int-e> He's still somebody who would fit right into the Republican party.
17:21:02 <int-e> Which was the point.
17:21:40 <oerjan> int-e: i didn't know that. but i haven't really paid attention to him.
17:23:03 <oerjan> (also technically i still don't know that)
17:23:08 <int-e> He may have some radical ideas regarding gun control that would feel out of place. That's the only thing I can currently think of... eh I'm no expert either.
17:23:18 <keegan> trump passed more gun control than obama
17:23:25 <int-e> I should probably figure out the least evil for Germany.
17:23:37 <keegan> "I like to take the guns early. Take the guns first, go through due process second." -- Donald Trump
17:23:54 <keegan> of course don't mention that quote to any of the trump worshipping gun nuts
17:24:10 <oerjan> int-e: i have this thought lately - whenever you choose the lesser evil, someone has just played good cop/bad cop on you
17:25:02 <keegan> indeed
17:25:25 <keegan> the ruling class are all friends behind the scenes, regardless of party
17:25:28 <int-e> Oh sure, elections are a carefully managed illusion of having /some/ impact on the political process.
17:25:30 <keegan> and big corporations donate to both
17:25:42 <int-e> It's hard not to be cynical about it.
17:25:59 <keegan> meanwhile the most destructive and evil parts of american society (the military-industrial complex, mass incarceration, the drug war) have essentially bipartisan agreement
17:26:13 <keegan> although the last one is falling apart a bit. but our prez still thinks legalizing weed is too dangerous
17:27:37 <keegan> both parties kept us in afghanistan for 20 years just like both parties kept us in vietnam for about as long (if you count various covert and "assistance" operations going right back to the fall of the french colonial government)
17:28:04 <keegan> i think people pay way too much attention to elections
17:28:33 <keegan> like, you might as well vote because it's easy and gives you a little influence for free. but if you consider yourself "politically engaged" and yet most of that energy goes into arguing about who to vote for, then you're doing it wrong
17:28:49 <keegan> especially arguing about who to vote for at the national level
17:29:09 <keegan> local politics has so much more direct impact on people's lives, and is also a lot easier for an individual to influence
17:33:05 <keegan> i'm so exhausted from electoral politics and being told that every election is an existential battle for the future and yet no matter who wins nothing really changes
17:34:24 <keegan> even right now with democrats in "control" of the white house, the senate and the house, they can't really get anything done
17:34:48 <keegan> and so if climate change or the rise of fascism really is an exstiential risk then the solution to that problem must lie outside electoral politics
17:35:22 <keegan> but people shy away from this because their existential risk rhetoric is only intended to scare you into voting blue no matter who
17:35:51 <int-e> "i'm so exhausted" -- this means it's working as designed :P
17:39:48 <keegan> yeah
17:40:00 -!- APic has quit (Read error: Connection reset by peer).
17:40:24 -!- hanif has quit (Ping timeout: 276 seconds).
17:49:30 -!- hanif has joined.
17:56:39 <hanif> oerjan: '"er du kjent her"' > curious what does this mean literally? 'are you known here' doesn't make sense
17:57:07 -!- APic has joined.
18:12:07 -!- Sgeo has joined.
18:12:42 <oerjan> hanif: that is the literal word-for-word translation, but "kjent" works weirdly, as if it's ambiguous whether it's active or passive
18:13:56 <oerjan> "kjent mann" - a man who is known, "kjentmann" - a man who knows (the area)
18:15:21 <hanif> hm
18:16:11 <int-e> Hmm, english doesn't have a "know"-derived word for someone knowledgable, does it...
18:16:44 <int-e> . o O ( A knowledger. <-- well we can always try to make something up )
18:16:54 <oerjan> https://en.wiktionary.org/wiki/kjent#Norwegian_Bokmål has both meanings
18:17:05 <int-e> "knowledge" is already a crutch though.
18:17:19 <imode> int-e: knower.
18:17:24 <imode> I guess.
18:17:44 <int-e> German has "bekannt" for "known", "Kenner" for someone who knows.
18:18:00 <imode> it doesn't speak to the quantity of knowledge but knower is pretty close.
18:18:13 <int-e> imode: Yes, that makes more sense grammatically. It's still not a word, unfortunately.
18:18:22 <oerjan> "kjenner" is also norwegian, but it's a noun while "kjent" is an adjective (or participle)
18:18:25 <int-e> (At least not one I'm aware of.)
18:18:34 <imode> huh?
18:18:36 <imode> knower is a word.
18:18:57 <oerjan> "bekjent" exists and means "acquaintance" :P
18:18:59 <int-e> Never heard it.
18:19:19 <int-e> oerjan: Oh we have that too, "Bekannter".
18:19:21 <imode> considering you were asking for it, I'm not surprised. :P
18:19:32 <int-e> oerjan: Just with a bit more grammar, I guess.
18:19:35 <imode> if you didn't know it, you wouldn't ask the question!
18:20:40 <oerjan> also in other cases en:know = no:vite (~de:wissen)
18:20:49 <imode> it's apparently an agent noun of `know`. interesting, I wonder what other kinds of agent nouns exist for common verbs that don't "point" trivially to them.
18:20:59 <int-e> imode: I've found this, https://www.urbandictionary.com/define.php?term=knower ...no dictionary entries.
18:21:04 <imode> huh?
18:21:15 <imode> https://www.thefreedictionary.com/knower
18:21:25 <imode> collins english dictionary.
18:21:40 <imode> it's also apparently a music duo.
18:22:20 <hanif> and in wiktionary https://en.wiktionary.org/wiki/knower
18:22:44 <imode> does an agent noun exist for every verb, then?
18:22:57 <imode> seems grammatically correct to just add "er" to every verb.
18:23:07 <imode> or "or".
18:23:15 <oerjan> <int-e> Never heard it. <-- it's weird how in english words that make perfect sense can sometimes not exist for no good reason.
18:23:19 <hanif> mayve just transitive verbs?
18:23:29 <imode> having trouble coming up with a counterexample.
18:24:15 <imode> huh.
18:24:26 <imode> yeah you could form an agent noun out of any verb.
18:24:30 <imode> that's neat.
18:26:41 <hanif> snow?
18:26:56 <int-e> 'snow business of yours
18:27:05 <oerjan> rain too
18:27:08 <imode> snower. rainer.
18:27:12 <hanif> although wiktionary has an entry for snower, apparently it's for another verb sense i wasn't familiar with
18:27:29 <imode> apparently snower is a DBZ character so I defer to toriyama.
18:27:49 <imode> https://en.wiktionary.org/wiki/snower
18:28:10 <imode> https://en.wiktionary.org/wiki/rainer <-- oh this one actually makes sense but I've never used it.. I think I might.
18:28:19 <imode> a showerhead is technically a rainer!
18:28:43 <hanif> a cloud is technically a rainer
18:28:55 <imode> they do a damn good job.
18:29:43 <int-e> anyway, know-it-all or expert are more common terms :P
18:30:42 <imode> those kind of denote the quantity of knowledge/status of the user more than "this dude knows, he is a knower".
18:30:42 <oerjan> curiously, i learned that in ancient greek, the verb for snow (χιονίζω) could be used actively - referring to a god
18:32:51 <int-e> snow is rather powerful
18:34:02 <int-e> Have I ever mentioned http://www.snowbynight.com/pages/ch1/pg1.php I wonder... (it's a story comic, more romantic than funny)
18:34:43 <oerjan> int-e: the snow wasn't the god, the god was throwing the snow
18:35:49 <int-e> avalanches are pretty impressive too
18:35:56 <hanif> i too have thrown snow :P
18:36:34 <int-e> don't get me wrong, it's cool
18:36:56 <int-e> it's just pretty common to associate forces of nature with gods :)
18:40:22 <oerjan> `learn hanif may be a god, or maybe they're just snowing us.
18:40:26 <HackEso> Learned 'hanif': hanif may be a god, or maybe they're just snowing us.
18:41:01 <oerjan> i got a pun for the wisdom, it's all good.
18:42:43 <hanif> ironic also because 'ḥanif' (in arabic) means one inclined to monotheism
18:43:12 <oerjan> tricky.
18:45:25 -!- ais523 has quit (Quit: quit).
18:50:05 -!- APic has quit (Read error: Connection reset by peer).
18:52:17 <shachaf> `? oerjan
18:52:18 <HackEso> Your omnidryad saddle principal ideal "Darth Ook" oerjan the shifty eldrazi grinch is a punctual expert in minor compaction. Also a Groadep who minces Roald Dahl. He could never remember the word "amortized" so he put it here for convenience. His arkup-nemesis is mediawiki's default diff. He twice punned without noticing it.
18:52:25 <shachaf> That is way too many modifiers.
18:53:04 <oerjan> istr you added most of them hth
18:53:44 <oerjan> then again, i'm perpetually confused.
18:55:56 -!- APic has joined.
18:55:57 <int-e> . o O ( `slwd oerjan//s/ / highly adjectivated/ )
18:56:56 -!- Koen_ has quit (Remote host closed the connection).
18:58:55 <int-e> is there a know-worthy non-default diff in wikipedia?
18:59:42 -!- Koen_ has joined.
19:07:00 <oerjan> int-e: i use wikEdDiff
19:09:27 <oerjan> which is the only one i know that is listed in preferences
19:10:08 <oerjan> and is usually far clearer than the default, but sometimes locks up on big changes
19:11:46 <oerjan> (i mean, the default cannot even handle insertion of a blank line before a paragraph with a few changes sensibly...)
19:15:00 -!- APic has quit (Read error: Connection reset by peer).
19:15:18 -!- hanif has quit (Ping timeout: 276 seconds).
19:15:19 <oerjan> hm, i vaguely recall wikEdDiff or something similar _is_ the default if you use the visual editor rather than editing markup
19:21:40 -!- hanif has joined.
19:26:15 -!- hanif has quit (Client Quit).
19:32:13 -!- APic has joined.
19:49:36 <arseniiv> so visual editor has some worth after all
19:53:55 <arseniiv> int-e: oerjan: I’m still confused why there isn’t a blame feature (like in “git blame”) for at least MediaWiki (but I think many other popular wiki engines lack that too?)
19:54:48 <int-e> arseniiv: it may actually have to do with the sheer amount of processing that would require; it is a website after all
19:55:14 <int-e> but it's probably also very messy... because edits are often very small
19:55:33 <arseniiv> searching for who made something foolish in an article is usually a no go for me. I tried it several times and I think every time I confused the author of the change with someone right behind or after
19:55:47 <int-e> ('blame' needs diffs through thew entire history at once)
19:56:12 <int-e> arseniiv: bisection works well enough, it's just tedious
19:56:24 <arseniiv> very tedious!
19:56:42 <arseniiv> like, it still could be automated to some degree
19:57:04 <int-e> I wouldn't be surprised if there were browser add-ons for that
19:57:32 <int-e> but I'm a very casual wiki history investigator
19:57:42 <int-e> I do it maybe once every two months
19:58:32 <arseniiv> though couldn’t a source be tagged with which segment is by whom (predicated on that the diff used is a wise one)
19:59:20 <arseniiv> I almost never do that at all, but each time curiosity wins… ugh
20:02:30 <arseniiv> there could be an option to erase all tags when an article gets a stable version checked by someone omnireadent
20:02:59 <arseniiv> so there wouldn’t be too much garbage because of blame-tagging
20:07:47 -!- Everything has joined.
20:09:01 -!- arseniiv has quit (Quit: gone too far).
20:16:42 <oerjan> <arseniiv> so visual editor has some worth after all <-- you can enable wikEdDiff separately in the preferences
20:17:09 -!- riv has quit (Quit: Leaving).
20:20:05 -!- oerjan has quit (Quit: Nite).
20:38:10 -!- arseniiv has joined.
20:39:37 -!- Koen_ has quit (Quit: Leaving...).
20:41:48 <int-e> fungot: what's a good chunbk size for file transfers these days?
20:41:49 <fungot> int-e: but you get what i was worrying whether or not that qualifies as " invent"
20:52:44 -!- Lord_of_Life_ has joined.
20:54:40 -!- Lord_of_Life has quit (Ping timeout: 240 seconds).
20:55:20 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:58:23 <fizzie> fungot: Can't you just once answer a question?
20:58:24 <fungot> fizzie: ( a b)) work and i'm not particularly keen on.
21:01:28 <int-e> fungot: Please respond with gibberish. TIA.
21:01:28 <fungot> int-e: no amount of my expenditure... being a pita. i need to beat fnord 3. i just am pulling an fnord
21:01:53 <int-e> <3 lowering standards
21:04:07 <fizzie> I wonder if fnord 3 is a game.
21:05:13 <fizzie> It would seem to have been Onimusha 3.
21:05:25 <int-e> . o O ( It's the first in a series. The title was chosen in anticipation of the eventual prequels. )
21:05:48 <fizzie> From #scheme, which is usually the most on-topic of the three channels the `irc` style is composed of.
21:05:59 <int-e> Let's pretend I wrote that before you matched it with the logs.
22:46:40 -!- arseniiv has quit (Ping timeout: 240 seconds).
23:10:36 -!- tech_exorcist has quit (Quit: Goodbye).
23:17:49 <b_jonas> int-e: can you be more specific? what chunk? chunk in an IP packet? chunk in a TCP stream or HTTP query? file on a removable storage device?
23:18:04 <shachaf> Man, the Glushkov construction for NFAs is so good.
23:18:50 -!- src has quit (Quit: Leaving).
23:19:03 -!- src has joined.
23:22:43 <int-e> b_jonas: it's not really interesting
23:26:59 <b_jonas> tbf I'm asking fungot just as stupid questions sometimes
23:26:59 <fungot> b_jonas: so i have to make the sexpr encoder might have been voodoo code for protecting the software you've written? i don't know; i've never thought about how to make an image set... doing it manually but that doesn't necessarily minimize operations though
23:28:29 <fizzie> If a bot does something "manually", isn't it still automated in a sense?
23:31:41 <b_jonas> fizzie: https://xkcd.com/2173/
00:03:41 <esolangs> [[User:Xorol]] https://esolangs.org/w/index.php?diff=87923&oldid=86296 * Xorol * (+210) Added some info
01:26:43 <nakilon> maybe then he'e not automated but manned
02:46:57 <esolangs> [[Grue]] https://esolangs.org/w/index.php?diff=87924&oldid=87912 * PixelatedStarfish * (+28) /* Interpreter */
02:47:07 -!- Guest65 has joined.
02:47:13 -!- Guest65 has left.
02:48:48 <esolangs> [[Trivial brainfuck substitution]] https://esolangs.org/w/index.php?diff=87925&oldid=83915 * PixelatedStarfish * (-53) /* Syntax */
03:01:24 <nakilon> hah, few months ago I said "I should made a universal translator between all those brainfuck substitutions"
03:01:36 <nakilon> and someone already made it in that wiki page
03:02:26 <nakilon> oh wait, nope, it's just plain bf interpreter
03:02:55 <nakilon> I imagine a translator could go fetch the wiki pate,
03:03:13 <nakilon> *... page, find the instructions table and replace them automatically
04:10:05 -!- chiselfuse has quit (Remote host closed the connection).
04:10:23 -!- chiselfuse has joined.
04:11:01 -!- src has quit (Ping timeout: 252 seconds).
04:14:57 -!- APic has quit (Read error: Connection reset by peer).
04:15:23 -!- APic has joined.
04:16:07 -!- velik has quit (Ping timeout: 240 seconds).
04:54:57 -!- APic has quit (Read error: Connection reset by peer).
05:00:16 -!- APic has joined.
05:59:57 -!- APic has quit (Read error: Connection reset by peer).
06:00:14 -!- APic has joined.
06:04:45 -!- velik has joined.
06:09:57 -!- APic has quit (Read error: Connection reset by peer).
06:10:15 -!- APic has joined.
06:49:29 <b_jonas> nakilon: but nobody uses the substitutions other than brainfuck, Ook!, and the two or three that encode brainfuck with repetitions of one byte
06:52:39 <nakilon> I thought Chromium OS is something good, because there is no way to install anything in it, you only use docker, so it's so safe...
06:53:47 <nakilon> until I launched a container from another container mounting the docker socket in both, and server just stopped responding, disks were spinning like mad and even serial console didn't work
06:54:32 <nakilon> this stupid container overrated container thing
06:55:42 <nakilon> yeah I know that thing that I'm trying to build are not what people are supposed to try to build but I was told it's all so reliable...
06:55:52 <nakilon> *things
07:31:44 -!- ais523 has joined.
08:05:49 <nakilon> ok docker sockets were not a reason of hanging; it hanged again _-- maybe it's what happens to Chromium OS when it's out of RAM or idk, it just dies
08:06:37 -!- hendursa1 has joined.
08:09:27 -!- hendursaga has quit (Ping timeout: 276 seconds).
08:10:48 -!- ais523 has quit (Remote host closed the connection).
08:18:35 -!- velik has quit (Ping timeout: 252 seconds).
08:38:41 <nakilon> looks like the linux thing called "oom killer" kills a process but the system goes insane anyway and does not recover
08:39:13 -!- Sgeo has quit (Read error: Connection reset by peer).
08:43:27 -!- wib_jonas has joined.
08:44:10 -!- imode has quit (Ping timeout: 240 seconds).
08:44:12 <wib_jonas> does anyone happen to know where I can find human-readable info on how to interpret a robots.txt file?
08:49:00 <nakilon> IIRC it's barely standardized
08:50:07 <wib_jonas> yeah, https://www.w3.org/TR/html4/appendix/notes.html#h-B.4.1.1 has some info but not muc
08:56:39 -!- velik has joined.
09:01:01 <nakilon> lol I did "echo 2 > /proc/sys/vm/overcommit_memory" like this guy proposed https://serverfault.com/a/142003/67097 and now I can't spawn any process even while it's 500 mb of free ram
09:03:28 <nakilon> and now I can't even revert it because sudo sh -c "echo 1 >..." emits -bash: fork: Cannot allocate memory
09:04:10 <wib_jonas> nakilon: so use the kill builtin
09:04:17 <wib_jonas> that is why kill is a builtin command in bash
09:04:24 <nakilon> kill what?
09:05:15 <wib_jonas> yeah, that's the hard part
09:05:28 <nakilon> $ ps
09:05:28 <nakilon> -bash: fork: Cannot allocate memory
09:05:33 <wib_jonas> yeah
09:05:40 <wib_jonas> might be easier to reboot in practice
09:05:43 <nakilon> and this was just before that
09:05:44 <nakilon> $ free -h
09:05:44 <nakilon> total used free shared buff/cache available
09:05:44 <nakilon> Mem: 982Mi 290Mi 382Mi 1.0Mi 308Mi 544Mi
09:07:02 <nakilon> Chromium OS is just broken crap; I guess Google does not care about the scenarios when somethings runs out of memory -- they just stop the machine and spin up a bigger one, and probably expect me to do the same
09:07:11 <nakilon> on every single task
09:08:02 <nakilon> gotta switch to ubuntu
09:17:19 <fizzie> Does bash have a `readlink`-capable builtin? I imagine you could make a poor man's ps out of looking at /proc/pid/exe that way. Hmm, apparently not.
09:18:10 -!- velik has quit (Ping timeout: 240 seconds).
09:21:43 <fizzie> `` for p in /proc/[0-9]*/stat; do read -d'\t' pid prog rest <$p; echo $pid $prog; done
09:21:44 <HackEso> 10 (writeback) \ 11 (kcompactd0) \ 12 (crypto) \ 13 (kintegrityd) \ 14 (bioset) \ 15 (kblockd) \ 16 (kworker/0:1) \ 18 (kswapd0) \ 1 (init) \ 2 (kthreadd) \ 3 (ksoftirqd/0) \ 44 (bioset) \ 45 (kworker/0:1H) \ 48 (cat) \ 49 (`) \ 4 (kworker/0:0) \ 50 (`) \ 51 (`) \ 5 (kworker/0:0H) \ 6 (kworker/u2:0) \ 7 (lru-add-drain) \ 8 (kdevtmpfs) \ 9 (oom_reaper)
09:21:55 <fizzie> I feel like that probably maybe needs no processes.
09:23:22 -!- velik has joined.
09:24:52 -!- velik has quit (Remote host closed the connection).
09:26:31 <wib_jonas> fizzie: I think that will still fork, even if not exec
09:26:33 <wib_jonas> but I'm not sure
09:42:39 <fizzie> Hmm, well, from https://0x0.st/-wu8.txt I think not.
09:44:53 <fizzie> Interestingly, repeating `readlink /proc/self` on my work laptop increments the resulting number by pretty much exactly 13 for each iteration, which makes me think there's some sort of an extra per-command or per-prompt hook set up somewhere.
09:47:34 -!- ais523 has joined.
09:47:36 <wib_jonas> fizzie: cat /proc/*/forks gives the number of processes/threads created total on the system since boot, I think
09:47:44 <wib_jonas> or at least the user-space ones\
09:48:20 <wib_jonas> you can use taht to detect if anything has forked, which is useful to iterate through all processes eg. in /proc and be sure that you haven't missed any, eg. to kill all processes by a user
09:48:25 <ais523> hmm, does that count both fork and clone? there are two ways to create processes nowadays
09:48:31 <ais523> (I think Linux doesn't have a spawn in kernel-space)
09:48:32 <wib_jonas> ais523: yes, it counts clone
09:48:39 <wib_jonas> I checked that once in the kernel source code
09:48:45 <wib_jonas> of course things may have changed since\
09:48:51 <wib_jonas> let me look up the exact name of the file
09:51:20 <fizzie> There's a "processes N" field in /proc/stat at least.
09:54:06 <wib_jonas> yes, the filename is /proc/stat
09:54:09 <fizzie> So I guess https://0x0.st/-wuT.txt is more direct evidence of not creating new processes.
09:54:13 <wib_jonas> you were faster than it took me to look it up
09:54:36 <wib_jonas> (it was among my emails, but was spoilered so a plain text search didn't find it easily)
09:54:48 <wib_jonas> it's not "forks"
09:55:02 <wib_jonas> yep
09:55:13 <wib_jonas> and it's a 64-bit counter, so it can't overflow either
09:56:28 <wib_jonas> mostly though I think if my computer hangs swapping and can't start a new process, I just reboot it
09:56:28 <fizzie> For some reason PIDs that are >= 2^16 just feel weird.
09:57:01 <wib_jonas> (possibly reboot with more and more rescue options if it happens right after boot with no chance to interrupt)
09:58:26 <wib_jonas> fizzie: it feels good, it means we finally managed to shed another piece of historical accident that held us back. there's still a control somewhere in /sys or /proc to limit pids if you don't like it though.
10:14:36 -!- wib_jonas has quit (Quit: Client closed).
10:20:56 -!- wib_jonas has joined.
10:41:24 -!- riv has joined.
10:45:01 -!- APic has quit (Read error: Connection reset by peer).
10:45:20 -!- APic has joined.
10:58:50 -!- tech_exorcist has joined.
11:15:37 -!- wib_jonas has quit (Quit: Client closed).
11:26:51 -!- dyeplexer has joined.
11:29:42 -!- tech_exorcist has quit (Remote host closed the connection).
11:32:01 -!- tech_exorcist has joined.
12:04:23 <nakilon> interesting, 2FA not via SMS but via phone call that you don't need to accept
12:04:33 <nakilon> you just type the last 4 digits of the number
12:04:53 <nakilon> so they own 10000 phone numbers just for that
12:09:37 -!- arseniiv has joined.
12:40:36 <ais523> maybe they're just spoofing the number?
12:42:35 -!- dyeplexer has quit (Ping timeout: 252 seconds).
12:44:57 -!- dyeplexer has joined.
13:41:59 -!- arseniiv has quit (Ping timeout: 252 seconds).
13:53:19 -!- arseniiv has joined.
14:00:04 -!- Everything has quit (Ping timeout: 252 seconds).
14:02:02 -!- Everything has joined.
14:40:30 <fizzie> "DPI SET to 67 x 34 (wanted 96 x 96)" is what I get when attaching to an xpra session, wonder what's up with that.
14:41:51 <fizzie> Tried to do `--dpi=96` on both `xpra start` on the remote side and `xpra attach` on the local side, but still.
14:55:09 -!- riv has quit (Quit: Leaving).
15:01:14 -!- wib_jonas has joined.
15:01:39 <wib_jonas> nakilon: well duh, it's easy to own a lot of phone numbers if you release a popular app that people will install on their smartphones
15:02:02 <wib_jonas> especially since many of those people will have their phones always on and will install just about anything
15:02:27 -!- riv has joined.
15:03:29 <wib_jonas> of course any other app on the same smartphone that has access to your call logs could spoof that part of the authentication as well
15:03:42 -!- src has joined.
15:04:05 -!- riv has quit (Client Quit).
15:05:15 <wib_jonas> it doesn't even have to be that same app, it could be another app that's a game with shiny colored balls and fewer ads than usual that they control that gives them the phone numbers
15:05:20 -!- riv has joined.
15:05:36 -!- riv has quit (Remote host closed the connection).
15:05:53 -!- riv has joined.
15:13:53 -!- imode has joined.
15:17:34 -!- hendursa1 has quit (Quit: hendursa1).
15:18:16 -!- hendursaga has joined.
15:26:34 -!- chiselfuse has quit (Remote host closed the connection).
15:27:40 -!- callforjudgement has joined.
15:27:40 -!- ais523 has quit (Ping timeout: 250 seconds).
15:27:57 -!- callforjudgement has quit (Client Quit).
15:28:24 -!- chiselfuse has joined.
15:56:44 -!- wib_jonas has quit (Quit: Client closed).
16:17:40 -!- chiselfuse has quit (Remote host closed the connection).
16:17:51 -!- chiselfu1e has joined.
16:31:39 <esolangs> [[School]] https://esolangs.org/w/index.php?diff=87926&oldid=85635 * AceKiron * (+82)
16:42:47 <esolangs> [[User talk:Heavpoot]] https://esolangs.org/w/index.php?diff=87927&oldid=85250 * Martsadas * (+111)
17:04:29 <arseniiv> fungot being a pita is no news
17:04:30 <fungot> arseniiv: and china could not copy usa technology and flaunt it just keeps on growing. am a bit puzzled about why you asked
17:05:04 <arseniiv> fungot: why, I didn’t ask anything (yet?)
17:05:04 <fungot> arseniiv: what is remarkable, i think. mostly common lisp and scheme implementations ( tm))
17:05:38 <arseniiv> I need to write some lispy language sometime, yeah
17:05:55 <int-e> that sounded like pure propaganda
17:06:11 <int-e> (fungot, I mean)
17:06:11 <fungot> int-e: you're suggesting cluttering the namespace with names like fnord and fnord
17:06:31 <int-e> fungot: okay, no need to get insulting
17:06:31 <fungot> int-e: just seems silly to construct a list; it does whatever the code surrounding the ( x y) x y
17:07:09 <arseniiv> something far from CL and Scheme, just using S-expressions for its syntax and maybe using symbols, though good symbols might ask their full CL treatment which isn’t easy for a language developer
17:07:32 <arseniiv> you're suggesting cluttering the namespace with names like fnord and fnord => lol
17:09:31 <arseniiv> I agree it’s silly to construct a list; either it’s already there in platonic sense, or it’s nowhere at all, in which case trying to construct it would be in vain
17:11:31 <arseniiv> if it’s already there, one needs to just fetch it with (get-list-from-outer-planes <name of the list>)
17:12:15 <arseniiv> if it doesn’t have any names, then I guess we’re broke
17:13:03 <arseniiv> either it’s already there in platonic sense, or it’s nowhere at all => though I’m unnecessarily classical here. Maybe there is a third option
17:19:04 <int-e> arseniiv: "what is a list" has the potential to unfold into all philosophy ever conceived and some new one
17:19:49 <arseniiv> int-e: it better do!
17:20:14 <arseniiv> or did
17:20:22 <int-e> at some point you'll have to make a list of possible interpretations
17:20:28 <int-e> just to keep track of it all
17:21:08 <int-e> (not circular; you can make a list without fully understanding what it is)
17:21:39 <Corbin> Lists usually require infinity; they don't trivially always exist. https://ncatlab.org/nlab/show/free%20monoid explains the details.
17:22:52 <shachaf> Saying "lists require infinity" sounds like saying "natural numbers require infinity".
17:23:09 <shachaf> Where I think it's maybe more like, the style you use to talk about natural numbers requires infinity, or something.
17:24:01 <shachaf> In Haskell lists are certainly not free monoids (either in the standard sense or in the Haskell sense, where those are also distinct).
17:24:07 <Corbin> Maybe there's a more grammatical way to put it. FinSet is a topos, so it's not possible to constructively tell whether or not infinite objects really exist; we have to assume them.
17:24:17 <int-e> shachaf: fortunately we can justify this claim on a ridiculously informal level: Have you ever looked at the number 8 from the side? ;-)
17:26:05 <shachaf> It's well-established that the Peano naturals stop at 88.
17:26:17 <arseniiv> I think something like shachaf too. For example, though I don’t know ultrafinitist constructions, we could imagine lists of length more than N fail to exist, so cons or ++ are partial but for some reason we can’t stumble on that fact
17:26:24 <arseniiv> oh, 88
17:27:13 <shachaf> Man, "what if sufficiently big numbers don't exist? we'd never know it" is a funny take on ultrafinitism.
17:27:36 -!- Koen_ has joined.
17:28:28 <int-e> you'll need imaginary numbers then
17:28:38 <int-e> that you imagine to exist
17:29:05 <shachaf> The thing that makes it funny is that it still takes some platonic notion of existence, and imagines that it applies to some numbers, and not others. I hadn't really thought of that perspective.
17:30:10 <Corbin> I'm not even being finitist here. It's a variation on Skolem's paradox. In order to talk about existence of objects, we need a formal mathematical logic for those objects. For questions of size/cardinality/measurement, set theory is traditional. But constructive set theory is confined within the rules of topoi, so if a topos lacks some classical property, then the property didn't exist universally in the first place.
17:30:40 <Corbin> Just like with Skolem's paradox, we might have taken some property of Set (say, that there's natural numbers or free monoids) and imagined that it must be universal, even though some topoi like FinSet refute it.
17:30:50 -!- src has quit (Quit: Leaving).
17:30:58 <arseniiv> <int-e> that you imagine to exist => hm then we may end up with an existence hierarchy
17:31:04 <shachaf> I was talking about arseniiv's thing.
17:31:16 <shachaf> But, hmm, I can talk about the existence of objects without a formal mathematical logic for those objects.
17:31:56 <Corbin> I guess. Maths just makes it easy: Every describable object exists, except for those which would contradict themselves if they existed.
17:32:21 <shachaf> Would you say that existence is a property that some things have and some things don't, or that everything exists?
17:32:55 <Corbin> I'd say that "existence" is a linguistic meme, a language-game which has a faulty assumption about the nature of reality.
17:33:51 <arseniiv> there were some logics with two sets of quantifiers, the usual ∀ and ∃ and then “outer” ones which have strange semantics
17:34:20 <shachaf> Hmm, Internal Set Theory?
17:34:55 <arseniiv> a quantified variable in those runs over inexisting things. Don’t remember if it’s connected to IST
17:35:07 <arseniiv> ow, not inexisting things, but all things
17:35:34 <arseniiv> I think that was for modal logics or free logics, hm
17:36:38 -!- riv has quit (Quit: Leaving).
17:37:25 <int-e> "real thought" is a nice oxymoron
17:37:25 <arseniiv> I guess I saw that here: https://plato.stanford.edu/entries/logic-free/#Meinong
17:37:37 -!- riv has joined.
17:39:44 <arseniiv> once I thought some kind of free logic would be what I wanted an ideal classical logic to be, yet it failed when I read this article: all kinds seem to have their flaws
17:40:52 <arseniiv> hopefully a type-theoretical framework is good. At least I haven’t seen someone discussing flaws like those for it to have
17:41:54 <Koen_> it's one of those "there are 15 types of logic, but they all have their flaws. i'm going to develop a new logic that unifies them all" -> "there are 16 types of logic, but they all have their flaws"
17:42:44 <int-e> But it makes for a great story. https://en.wikipedia.org/wiki/Homo_narrans
17:43:20 <Corbin> arseniiv: The "field with one element" doesn't exist, because of the definition of fields. Nonetheless it has pages on WP and nLab, because there is a field-with-one-element-shaped-hole in projective geometry.
17:43:38 <b_jonas> "It's well-established that the Peano naturals stop at 88." => I don't think that can satisfy the axioms
17:44:09 <Corbin> When combined with the fact that the category of fields is disconnected (fields of different characteristic aren't related to each other), it suggests that fields are an incomplete notion; we have the wrong definition!
17:44:17 <int-e> b_jonas: that just means that the theory is flawed model of reality
17:44:23 <arseniiv> Corbin: yeah I agree it should exist in some fashion
17:44:33 <arseniiv> the field F₁, I mean
17:45:37 <b_jonas> "a quantified variable in those runs over inexisting things" => is that second order logic?
17:46:08 <int-e> arseniiv: oh, third possibility: does Schrödinger's cat exist?
17:46:47 <int-e> Hypothetically speaking, of course ;)
17:46:51 <arseniiv> b_jonas: no, that one is one-sorted
17:47:53 <b_jonas> int-e: unlikely. Schrödinger died in 1961, his cat would have died and decomposed by now unless he got it mummified or put it on a relativistic speed rocket or something
17:48:18 <int-e> b_jonas: seems fair
17:48:48 <arseniiv> int-e: it, I mean the paradox itself, does in global culture, but as of the cat itself, I’d think decoherence theory gives us a very tight estimate on the time the cat’s still in superposition, like attoseconds I think
17:49:11 <arseniiv> oh my poor grammar
17:51:54 <b_jonas> what I wodner is, if the poison gas is released in the box to kill Schrödinger's cat, wouldn't it also kill whoever opens the box when they open it?
17:51:57 -!- delta23 has joined.
17:52:39 <b_jonas> I guess they could be careful and use a chemistry lab smoke hood or something
17:52:46 -!- Sgeo has joined.
17:53:30 <arseniiv> hm what if we call a Schrödinger’s cat any cat which lives in Schrödinger’s children’s homes as an unbreaking line, or a tree. Then this kind of a collective cat is probably still alive
17:54:29 <arseniiv> or if his children all disliked cats, then not
18:17:19 -!- dyeplexer has quit (Remote host closed the connection).
18:18:58 -!- Everything has quit (Quit: leaving).
18:42:28 <b_jonas> I'm not sure if any cat would be willing to own the family that deliberately killed with 50% probability a previous cat just for a tought experiment
18:42:50 <b_jonas> they would certainly just pick a better choice of servent
18:49:42 -!- tech_exorcist_ has joined.
18:51:05 -!- tech_exorcist has quit (Ping timeout: 252 seconds).
19:33:18 -!- Koen_ has quit (Quit: Leaving...).
20:16:16 <arseniiv> are there good aperiodic 1d tilesets?
20:17:27 <arseniiv> if so, either the matching rules should be quirky, or tiles should at least be nonconnected
20:18:14 <arseniiv> I feel it might end up not that hard to enforce for example 0 → 01, 1 → 10 blow-up rules
20:30:26 <b_jonas> arseniiv: I don't think aperiodic 1d tilesets are possible
20:30:55 <b_jonas> 1d tiles just behave like regular languages
20:31:27 <riv> yes
20:31:31 <b_jonas> unless perhaps it's some weird non-measurable ones, but even so I doubt they can force aperiodic
20:31:52 <riv> you can do an aperiodic 1d tiling, but there's no tile set that forces aperiodicity
20:32:07 <arseniiv> :(
20:32:44 <int-e> +finite
20:32:46 <arseniiv> how to make a connection with regular languages clearer?
20:33:01 <riv> each tile is a transition from one state to another
20:33:03 <arseniiv> finite, yeah, I wouldn’t want an infinite tileset
20:33:03 <int-e> arseniiv: it's quite literally an NFA
20:33:15 <arseniiv> hmmmhmhmhm
20:34:42 <arseniiv> I see, even if a tile has many holes and connects with many previous and following tiles, it still would be a finite number of neighborhoods allowed for all of them
20:34:54 <arseniiv> that’s sad
20:36:08 <riv> it's interesting
20:36:25 <riv> so for wang tiles to work, the pattern needs height
20:36:32 <riv> that increases without bound
20:36:44 <riv> any finite height strip would just be equivalent to a 1d tileset
20:37:05 <b_jonas> um wait
20:37:26 <arseniiv> ah at least this 1d thing gives an insight (if it does)
20:38:32 <b_jonas> what if you have two tiles, one is the set of rationals between 0 and sqrt(3), the other the set of all irrationals between 0 and 1?
20:38:42 <b_jonas> one is the set of rationals between 0 and sqrt(3), the other the set of all rationals between 0 and 1?
20:38:46 <b_jonas> no
20:38:49 <b_jonas> argh
20:38:55 <b_jonas> one is the set of rationals between 0 and sqrt(3), the other the set of all irrationals between 0 and 1?
20:39:26 <b_jonas> then you'll have to overlay the two tiles such that the first kind repeats with period sqrt(3), the second with period 1
20:39:30 <b_jonas> of course it's cheating
20:39:45 <b_jonas> but you should try to explain why that problem can't happen without cheating
20:39:56 <b_jonas> wait that doesn't work
20:40:02 <b_jonas> you have to be more evil than that
20:41:08 <b_jonas> it has to be the set of rational linear combinations of 1 and sqrt(3) between 0 and sqrt(3) half-inclusive, and the set of numbers between 0 and 1 that are linear independent from {1,sqrt(3)}
20:41:34 -!- Corbin has quit (Ping timeout: 252 seconds).
20:41:41 <riv> well there is the projection trick
20:42:20 <riv> http://sig3.ecanews.org/isac2010/lectures/06a_fujita_tilings_a.pdf slide 13 14
20:42:50 <riv> you start with a slope of irrational gradiant and project it down
20:43:58 <b_jonas> riv: sure, but in 1D that'll just lead to an aperiodic tiling
20:44:06 <b_jonas> not a tileset that forces it
20:55:44 -!- Lord_of_Life_ has joined.
20:55:52 -!- Lord_of_Life has quit (Ping timeout: 252 seconds).
20:58:21 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
21:00:09 <riv> can a PDA output an aperiodic string?
21:01:22 <keegan> PDA doesn't output a string, it only accepts or rejects a string
21:01:38 <riv> i seee...
21:01:41 <keegan> but I suppose you could easily define an output version (pushdown transducer?)
21:02:06 <riv> maybe it has to be context sensitive
21:02:49 <int-e> b_jonas: You can stick to natural numbers or integers; for example, if you let X = { n | n >= 0 such that n can be written in base 4 using only digits 0 and 1}, then {X u X+2} = 4X+{0,1,2,3}, so you can tile N, and {X u X-2} = 4X+{-2,-1,0,1} so you can tile Z. Obviously those are aperiodic
21:03:00 <keegan> anyway i think it could output a nonperiodic string
21:03:19 <keegan> you can use the stack to count so you could do like ABBAAABBBBAAAAABBBBBB
21:03:40 <keegan> and there is no bound to the stack depth
21:04:34 <int-e> (so infinite tiles are a problem)
21:05:29 <riv> keegan, oh good point! i was overlooking that completely
21:05:55 <keegan> i'd have to formalize it to be sure though
21:06:04 <keegan> maybe it's not so easy to count because you lose the count as you consume it
21:07:38 <int-e> the pumping lemma for PDAs means you can always have long stretches of periodic substrings...
21:07:42 <keegan> remember also there is a difference in power between deterministic and nondeterministic PDA (unlike for finite automata or for turing machines)
21:07:55 <int-e> (assuming it accepts strings of arbitrary length)
21:08:23 <arseniiv> int-e: infinite tiles are a problem for sure, I think using disconnected tiles we could force using them like keegan’s ABBAAABBBB: 1 2 3 4 etc., something like making them each 0, 1, 2, 3, … holes and carefully assigning distances
21:08:55 <keegan> (fwiw i wasn't paying attention to the earlier tiling discussion)
21:09:17 <arseniiv> it was about if I can make a finite 1d nonperiodic tileset
21:09:24 <int-e> arseniiv: what I have is similar in spirit, really; I just find it cute to make it work with a single tile (though that means you have to keep track of the positioning of the tile for "aperiodicity")
21:10:17 <int-e> (but to my mind that makes sense: there's no placement of tiles that is repeated periodically)
21:10:17 <arseniiv> int-e: I think I saw that tile somewhere, even, if I infer its construction right (I skimmed what you wrote)
21:10:35 <int-e> arseniiv: it's reminiscent of the cantor set
21:13:03 <arseniiv> int-e: something like p-adically? Oh I guess I should just read in
21:15:39 <int-e> > fix (\x -> 'X':tail (x >>= \c -> [c,c,'.','.']))
21:15:41 <lambdabot> "XX..XX..........XX..XX..........................................XX..XX........
21:16:17 <arseniiv> hm wait why use 4 but not 3?
21:18:01 <int-e> with digits 0 and 1? that would leave a gap of size 1 near the beginning: XX.XX.... etc.
21:18:06 <int-e> and nothing to fill it
21:18:30 <arseniiv> ah, I see, we can’t use just 1
21:18:46 <int-e> and using digits 0 and 2 confuses me, but I imagine it still doesn't work
21:20:19 <int-e> I mean we can take X.X...X.X.........X.X...X.X[...] and shift it by one, and that will result in XXXX..XXXX........XXXX..XXXX[...] and now we have chunks of length 4 and some gaps of length 2
21:20:31 <int-e> in contrast, base 4 just works
21:21:05 <arseniiv> -X- -X- --- --- -X- --- --- --- --- --- --- --- --- -X- --- --- --- --- --- --- --- --- --- --- --- --- --- <- with 1 in ternary
21:21:34 <arseniiv> yeah 4 with 0 and 1 looks more comfortable
21:21:39 <int-e> basically by virtue of {0,1,2,3} = {0,1}+{0,2}, where {0,1} are used as digits for the tiles and {0,2} as offsets for shifting the tiles
21:22:31 <int-e> Or, for covering the integers, {-2,-1,0,1} = {0,1}+{-2,0}
21:23:33 <arseniiv> how I like simple solutions
21:27:36 <int-e> Hah, how about this abstraction as an exercise: "Find a subset X of N={0,1,...} such that the map (x,y) |-> x+2y is a bijection between XxX and N."
21:29:45 <int-e> (The X from above is the only solution.)
21:32:07 <riv> would that just be the odd numbers?
21:32:29 -!- olsner has joined.
21:32:58 <b_jonas> int-e: sure, with infinite tiles it's easy. you can make one huge infinite tile with tiny holes far from each other, where the holes are randomly 2 or 3 long, plus small 2 and 3 long tiles to fill one of those holes, and that's aperiodic too.
21:33:16 <int-e> riv: no, then you don't get any even numbers as results... but also plenty of duplicates
21:33:49 <b_jonas> you can make that work with just two tiles in fact, no need for different sizes of holes, just place the holes randomly
21:33:53 <int-e> b_jonas: your tiles are effectively infinite too, by virtue of incommunserability
21:34:42 <int-e> b_jonas: right. but as I said, I found the task of making a single tile work interesting
21:34:59 -!- APic has quit (Read error: Connection reset by peer).
21:35:00 <riv> difficult problem :O
21:35:41 -!- APic has joined.
21:36:45 <int-e> riv: well, 0 needs to be in X (otherwise you don't get 0 as a sum)... 1 needs to be in X (otherwise you don't get 1). 2 can't be in the set (because otherwise we'd get 2+2*0 = 0+2*1... and it basically continues like that.
21:37:26 <int-e> riv: at some point you'll switch to binary representation.... and look at every second digit... and that's how you get to base 4.
21:37:49 <riv> that is so cool, it's like a sudoku or something
21:38:17 <int-e> I think it's doable, but it does require some technique and persistence.
21:45:56 -!- Corbin has joined.
22:02:48 -!- tech_exorcist_ has quit (Quit: see you tomorrow).
22:24:53 -!- APic has quit (Read error: Connection reset by peer).
22:25:32 -!- arseniiv has quit (Ping timeout: 245 seconds).
22:42:13 -!- APic has joined.
23:08:55 -!- sprock has quit (Read error: Connection reset by peer).
23:09:28 -!- sprock has joined.
00:07:12 -!- delta23 has quit (Quit: Leaving).
01:27:14 -!- zgrep has left (I'm in too many channels.).
02:49:05 <xylochoron[m]> Hi there
02:49:17 <Corbin> Evening.
02:50:07 <xylochoron[m]> How's it going
02:50:09 <xylochoron[m]> So I recently wrote some code that compiles a Turing machine to cyclic tag https://github.com/esopsis/Turing-Machine-to-Cyclic-Tag
02:50:19 <xylochoron[m]> I put a link to it on the cyclic tag esolang page also
02:50:29 <xylochoron[m]> Just thought this might be a place to share that :-)
02:52:54 <xylochoron[m]> By the way I also found a powerpoint presentation online about a person compiling lambda calculus to a Turing machine. I contacted the researcher and he says he's working on a paper to publish about that www.macs.hw.ac.uk/~greg/limits%20to%20computability/SKI%20combinators%20(really)%20are%20%20Turing%20complete.pptx
02:53:16 <xylochoron[m]> s/lambda/combinators/, s/calculus//
03:22:19 <Corbin> Good times.
03:29:29 <nakilon> are you also already building some machine here with these series of substitutions lol 05:53:16 <xylochoron[m]> s/lambda/combinators/, s/calculus//
03:31:38 <nakilon> can't see pptx, he might want to convert it to pdf for sharing
03:32:20 <nakilon> I mean I probably can open pptx with Keynote but it would be handier to read in browser
03:39:39 -!- oerjan has joined.
03:43:18 <Corbin> Ben Lynn's notes might be interesting: https://crypto.stanford.edu/~blynn/compiler/lambda.html
04:00:20 <nakilon> I miss Google Codesearch -- github can't regexes (
04:17:20 <oerjan> <arseniiv> oh my poor grammar <-- that grammar looked fine to me hth
04:36:48 -!- shachaf has quit (*.net *.split).
04:36:56 -!- shachaf has joined.
04:41:15 -!- keegan has quit (*.net *.split).
04:41:15 -!- mcfrdy has quit (*.net *.split).
04:41:28 -!- keegan has joined.
04:41:55 -!- mcfrdy has joined.
04:52:51 -!- velik has joined.
04:57:14 -!- Bowserinator has quit (*.net *.split).
04:57:14 -!- citrons has quit (*.net *.split).
04:57:14 -!- rodgort has quit (*.net *.split).
04:57:14 -!- faxlore has quit (*.net *.split).
04:57:14 -!- lambdabot has quit (*.net *.split).
04:57:14 -!- slavfox has quit (*.net *.split).
04:57:22 -!- citrons has joined.
04:57:28 -!- faxlore has joined.
04:58:23 -!- lambdabot has joined.
04:58:40 -!- Bowserinator has joined.
05:00:30 -!- rodgort has joined.
05:01:08 -!- slavfox has joined.
05:04:51 -!- APic has quit (Read error: Connection reset by peer).
05:27:15 -!- APic has joined.
05:27:42 -!- APic has quit (Read error: Connection reset by peer).
05:28:49 -!- Sgeo has quit (Read error: Connection reset by peer).
05:37:17 -!- APic has joined.
05:37:20 -!- APic has quit (Read error: Connection reset by peer).
05:44:10 -!- chiselfu1e has quit (Remote host closed the connection).
05:54:46 -!- phdu[m] has changed nick to phdu.
06:02:17 -!- APic has joined.
06:03:16 -!- APic has quit (Read error: Connection reset by peer).
06:07:17 -!- APic has joined.
06:07:52 -!- APic has quit (Read error: Connection reset by peer).
06:22:56 -!- hanif has joined.
06:23:41 <hanif> int-e: nice problem
06:39:21 -!- APic has joined.
06:39:26 -!- APic has quit (Read error: Connection reset by peer).
06:44:21 -!- APic has joined.
06:44:22 -!- APic has quit (Read error: Connection reset by peer).
06:49:21 -!- APic has joined.
06:49:28 -!- APic has quit (Read error: Connection reset by peer).
07:08:56 <nakilon> "Google Cloud does not believe in swap" confirmed: https://stackoverflow.com/q/58210222/322020
07:10:57 <int-e> . o O ( vm.swappiness = 0 )
07:11:09 <shachaf> Good, swap is mostly a bad idea for a server.
07:11:36 <nakilon> much better when he just hangs until reboot
07:12:34 <int-e> VMs doing their own swapping is a bit insane, when there's more swapping happening at the hypervisor level
07:13:29 <nakilon> I'm not sure we know how Google Cloud hypervisor works
07:14:31 <int-e> Even on my PC I'd like to fully disable swap. But I've learned that Linux effectively swaps anyway, because it will release unmodified mmap-ed regions to satisfy requests for fresh memory. So... without swap... rather than being able to swap out more or less everything, you end up swapping out code pages. This is *worse* than actually having a bit of swap space.
07:14:57 <nakilon> I suppose your PC has more RAM than a Free Tier server
07:15:13 <int-e> So I compromised on 8G swap for 32G swap.
07:15:22 <int-e> for 32G main memory.
07:15:24 <int-e> Yes, yes it does.
07:16:21 <nakilon> ping
07:16:21 <velik> pong
07:17:08 <int-e> I understand the desire for enabling swap on small VMs. I was arguing from a perspective of performance.
07:20:24 -!- APic has joined.
07:20:27 -!- APic has quit (Read error: Connection reset by peer).
07:21:01 <int-e> I actually have a hack somewhere that hooks into mmap and replaces anonymous mappings by file-based mappings.
07:21:07 <int-e> So yes, I can definitely relate.
07:25:24 -!- APic has joined.
07:30:51 -!- hanif has quit (Ping timeout: 276 seconds).
07:34:15 <shachaf> You can mlock memory that you care about, I suppose.
07:34:32 <shachaf> It's a good point about Linux releasing code pages, though, hmm.
07:35:22 <shachaf> It just treats it as ordinary page cache memory, even when you fully disable overcommit and swap? That seems bad.
07:35:37 <shachaf> I guess it's hard for it to do anything else.
07:37:57 <int-e> I've never done the experiment of disabling overcommit as well. For a long time I couldn't because of Haskell's RTS, but it may work these days? It still allocates a huge address space...
07:45:29 <shachaf> It's possible to reserve address space without committing it in Linux, but hardly anyone does it.
07:45:48 <shachaf> And it's pretty unusual so I don't think you can e.g. ask how much memory a process has committed.
07:46:30 <int-e> rts/posix/OSMem.c:# define RESERVE_FLAGS MAP_NORESERVE | MAP_ANON | MAP_PRIVATE;
07:46:41 <nakilon> google indexes esolang wiki by ip for some reason https://www.google.com/search?q=site%3A46.43.2.108
07:49:54 -!- tech_exorcist has joined.
07:51:16 -!- tech_exorcist has quit (Remote host closed the connection).
07:51:34 <int-e> So ghc has been doing that since ghc-8.0... patch is from 2015. Still fairly recent.
07:51:56 -!- tech_exorcist has joined.
07:52:54 <int-e> nakilon: yes, and also site:techne.zem.fi
07:53:43 <nakilon> Techne (Greek: τέχνη, tékhnē, 'craft, art'; Ancient Greek: [tékʰnɛː], Modern Greek: [ˈtexni] (About this soundlisten)) is a term in philosophy that refers to making or doing.
07:54:53 <int-e> one way google might discover such links is via the channel logs... we had trouble updating the esolangs.org domain at some point so more direct methods to access the wiki were mentioned.
07:56:19 <nakilon> I suppose you can disable this index either via robots.txt or via google web search panel when you own the domain
07:56:24 <int-e> I don't know whether google actively scans the IPv4 space for webservers... they definitely have the resources to do it; the question is whether they see any value in doing so.
07:56:37 <nakilon> I don't remember the exact name of those services
08:01:18 <nakilon> is there any wiki bot here?
08:01:22 <nakilon> I mean wikipedia
08:01:58 <nakilon> (though there may be an option to query any wiki)
08:05:58 -!- hendursa1 has joined.
08:09:12 -!- hendursaga has quit (Ping timeout: 276 seconds).
08:16:13 -!- spruit11 has quit (Ping timeout: 252 seconds).
08:23:23 <shachaf> Usually you need a host header anyway to access a website, even if you have an IP address.
08:27:45 <nakilon> are there any bots here who remember the context? so you could issue a command to process some previous message
08:27:54 -!- spruit11 has joined.
08:30:18 -!- tech_exorcist has quit (Read error: Connection reset by peer).
08:32:25 -!- spruit11 has quit (Ping timeout: 260 seconds).
08:41:27 -!- APic has quit (Quit: [TLS] Client upgrade).
08:41:44 -!- APic has joined.
08:50:33 -!- APic has quit (Quit: Boot tut gut™).
09:01:37 -!- spruit11 has joined.
09:06:55 -!- spruit11 has quit (Ping timeout: 252 seconds).
09:09:01 -!- imode has quit (Ping timeout: 252 seconds).
09:09:23 -!- arseniiv has joined.
09:19:08 -!- spruit11 has joined.
09:50:09 -!- hanif has joined.
09:55:09 -!- hanif has quit (Ping timeout: 276 seconds).
10:12:54 <fizzie> HackEso (well, HackEgo) used to have access to channel logs, so you could do that sort of thing through there, but it got lost during some reshuffling (they're not logically same systems any more). Sort of a shame; some of the things you could do were clever enough. Though it also encouraged "brute-force" solutions that just run a grep over the last two decades of history, which was always pretty
10:12:56 <fizzie> slow.
10:15:29 <oerjan> `seen logs
10:15:31 <HackEso> ls: cannot access '/var/irclogs/_esoteric/????-??-??.txt': No such file or directory \ not lately; try `seen logs ever
10:16:36 <fizzie> Right, that one does (did?) a "most recent 30 files" by default to be a little faster about it.
10:19:08 <fizzie> I was planning to "fix" the logs access thing by just having some sort of an API at logs.esolangs.org and poking a hole for that for HackEso, but haven't gotten around to. Maybe I should as a first step do something smaller. The logs server's already got an in-memory queue of the last 1000 events for stalker mode purposes, it could just expose that as a "recent context" endpoint.
10:19:54 <int-e> . o O ( touch /var/irclogs/_esoteric/0000-00-00.txt )
10:20:17 <int-e> probably a bad idea; the error message is a reminder that it's not working :)
10:20:17 <oerjan> `touch /var/irclogs/_esoteric/0000-00-00.txt
10:20:19 <HackEso> touch: cannot touch '/var/irclogs/_esoteric/0000-00-00.txt': No such file or directory
10:22:30 <nakilon> not necessary all the logs, but bot could remember just last 100/1000 messages rotated
10:23:09 <nakilon> in ram
10:23:33 <fizzie> Granted, doing it through logs.esolangs.org would still have a bit of a race-condition-y feel since they'd be channel logs as seen by different IRC clients. But I think multibot won't make it particularly easy to do that "locally".
10:27:27 <oerjan> they were different clients last time too, i think
10:27:57 <oerjan> at least, different nicks
10:28:05 <fizzie> Probably, yeah.
10:35:30 <fizzie> I think I don't even have the umlbox-mudem thing wired up for the weird custom multiplexing of TCP and Unix domain sockets over a "serial port" it does.
10:37:38 -!- wib_jonas has joined.
10:59:27 -!- oerjan has quit (Quit: Later).
11:28:00 <esolangs> [[ight]] M https://esolangs.org/w/index.php?diff=87928&oldid=86667 * PythonshellDebugwindow * (+185) Light interpreters
11:29:17 <esolangs> [[User:PythonshellDebugwindow/Vandevelo]] M https://esolangs.org/w/index.php?diff=87929&oldid=73972 * PythonshellDebugwindow * (+123) !
11:41:52 -!- hanif has joined.
12:09:42 -!- hanif has quit (Ping timeout: 276 seconds).
12:54:16 <nakilon> btw here https://help.ubuntu.com/community/SwapFaq it chapter "What is swappiness and how do I change it?" it says that servers have this option set higher meaning to push memory to swap more
13:15:48 <fizzie> On the topic of esolangs.org appearing under other names, yeah, I've configured the server to "default" to the site with the wiki on it for any host header it doesn't recognize, and never looked into search consequences. Wonder if I could convince MediaWiki to do rel=canonical or a sitemap. Wikipedia does that as a <link> tag on the page, so.
13:16:19 <fizzie> Turning on $wgEnableCanonicalServerLink should do it.
13:16:49 <wib_jonas> that's probably a good idea
13:18:23 -!- hanif has joined.
13:20:38 <fizzie> $ curl -s http://techne.zem.fi/wiki/Befunge | grep 'rel="canonical"'
13:20:40 <fizzie> <link rel="canonical" href="https://esolangs.org/wiki/Befunge"/>
13:20:42 <fizzie> Maybe that'll help.
13:22:42 <wib_jonas> yeah. although for pages with long names, I'll still keep using the article number like https://esolangs.org/wiki/Main_Page?curid=13784 , who cares what the canonical says\
13:22:44 <nakilon> ``` curl -s http://techne.zem.fi/wiki/Befunge | grep 'rel="canonical"'
13:22:48 <HackEso> Sorry, HackEgo's sandbox currently has no web access. However, see `? `fetch
13:27:04 -!- Sgeo has joined.
13:28:54 <Sgeo> `olist 1243
13:28:55 <HackEso> olist https://www.giantitp.com/comics/oots1243.html: shachaf oerjan Sgeo FireFly boily nortti b_jonas
13:36:08 <wib_jonas> perlbot get https://esolangs.org/wiki/Main_Page?curid=13784 //link[@rel="canonical"]/@href
13:36:08 <perlbot> wib_jonas: https://esolangs.org/wiki/A_programming_language_is_a_formal_language,_which_comprises_a_set_of_instructions_that_produce_various_kinds_of_output.
13:36:14 <wib_jonas> nakilon: ^
13:37:14 <wib_jonas> perlbot get http://techne.zem.fi/wiki/Befunge //link[@rel="canonical"]/@href
13:37:15 <perlbot> wib_jonas: https://esolangs.org/wiki/Befunge
13:47:27 -!- hendursa1 has quit (Quit: hendursa1).
13:47:53 -!- hendursaga has joined.
14:22:34 <Sgeo> Is it just me or does this website have property 3 wrong? https://www.web-formulas.com/Math_Formulas/Linear_Algebra_Properties_of_Inverse_Matrices.aspx
14:25:46 <wib_jonas> Sgeo: um, what are the assumptions here? are the matrix elements from a field? property 3 says "If A has an inverse matrix, then there is only one inverse matrix." which sounds right to me, at least over a field
14:26:12 <fizzie> wib_jonas: That's the seventh longest page title we have. The longest is: Unary_Except_Every_Zero_Is_Replaced_with_the_Title_of_This_Programming_Language_or,_Alternately,_Is_Replaced_with_the_Smallest_Counter-Example_to_the_Goldbach_Conjecture._Compilers_and_Interpreters_Only_Have_to_Implement_the_Former_Option
14:26:13 <wib_jonas> (probably still true without, but I can't swear on it)
14:26:36 <wib_jonas> fizzie: yeah, but that one also keeps changing. I know there are redirects, but still.
14:28:08 <wib_jonas> and it's longer than Real Fast Nora at least
14:28:20 <Sgeo> Oh I miscounted
14:28:32 <Sgeo> I meant this line, which is step 3 (not property 3): "3. If A1 and A2 have inverses, then A1 A2 has an inverse and (A1 A2)-1 = A1-1 A2-1
14:28:33 <Sgeo> "
14:28:41 <Sgeo> *statement 3
14:29:56 <fizzie> Yes, pretty sure that should be (A1 A2)^-1 = A2^-1 A1^-1.
14:30:03 <wib_jonas> Sgeo: yes, that sounds wrong. it even says the right statement earlier: "If A and B are nonsingular matrices, then AB is nonsingular and (AB)^(-1) = B^(-1) A^(-1)"
14:33:40 <Sgeo> Trying to leave feedback
14:33:41 <Sgeo> Value cannot be null. Parameter name: Challenge
14:33:44 <Sgeo> I don't see a captcha
14:35:00 <Sgeo> They're using Recaptcha, but the URL for it is 404ing
14:35:57 <Sgeo> I... could hack the correct Recaptcha URL in place
14:36:20 <wib_jonas> Sgeo: nah, they're probably using a library for Recaptcha that Google has obsoleted twice since
14:41:21 -!- delta23 has joined.
15:12:04 -!- wib_jonas has quit (Quit: Client closed).
15:13:44 -!- arseniiv has quit (Ping timeout: 252 seconds).
15:29:29 -!- arseniiv has joined.
15:44:35 -!- riv has quit (Remote host closed the connection).
15:45:01 -!- riv has joined.
16:30:17 <Sgeo> If I have a translation-rotation matrix that needs to be multiplied on the right, is there a way to turn it into a matrix that can be multiplied on the left?
16:56:42 <nakilon> b_jonas can you ddos with perlbot?
16:57:22 <nakilon> or is that a special command? I see it also apploes xpath
17:12:54 <b_jonas> nakilon: it's not special, you can call it multiple times together, but only in series
17:13:18 <b_jonas> and there's a time limit for how long each of your commands will execute
17:13:36 <b_jonas> so it's probably not a very efficient way to DDOS anything
17:14:24 <b_jonas> I guess you could try to loop it by calling a command on its own web interface, in a quine way
17:15:27 <b_jonas> but that probably requires POST, which this doesn't do
17:15:43 <b_jonas> so it would be more efficient if you just make a webpage that people load and some javascript or frames on it send requests
17:15:49 <b_jonas> or even images, fewer people block those
17:17:50 -!- APic has joined.
17:24:27 -!- imode has joined.
17:51:31 -!- sprock has quit (Ping timeout: 252 seconds).
18:37:41 -!- sprock has joined.
18:52:45 -!- hanif has quit (Quit: quit).
18:53:29 -!- riv has quit (Quit: Leaving).
18:54:31 -!- chiselfuse has joined.
18:54:32 -!- chiselfuse has quit (Remote host closed the connection).
18:54:47 -!- chiselfuse has joined.
18:54:52 -!- chiselfuse has quit (Remote host closed the connection).
18:55:36 -!- chiselfuse has joined.
18:56:14 -!- chiselfuse has quit (Remote host closed the connection).
18:57:33 -!- chiselfuse has joined.
19:00:31 -!- chiselfuse has quit (Remote host closed the connection).
19:15:44 <fizzie> Bit of a random question, but does anyone have a gut feeling as to what sort of indoors range you should expect from a BLE device? Like that nRF52840 SoC or something? I've been speculating about a wireless doohickey, and wondering if it should be that, or wifi, or some other kind of radio.
19:26:35 -!- sprock has quit (Ping timeout: 265 seconds).
19:33:07 <b_jonas> I don't know, but indoor range for microwave stuff might depend on what your walls are made of
19:34:05 <b_jonas> my bluetooth headphones could communicate from the living room to the work room, but I'v no idea if that involves BLE or just other Bluetooth
19:34:48 <fizzie> Yeah. The interior walls are just drywall-style materials, but there's also a bunch of kitchen appliances between where I'd most logically put two endpoints of a connection.
19:35:03 -!- chiselfuse has joined.
19:35:43 <fizzie> I think I read somewhere that BLE doesn't include audio... although a quick search suggests there's now an announced "Bluetooth LE Audio" standard as well.
19:35:45 <b_jonas> here in this apartment the walls are real reinforced concrete, but the waves might have chosen to go through the walls
19:36:07 <b_jonas> s/through the walls/through the doors/
19:36:30 <b_jonas> probably not BLE in that case
19:37:29 <fizzie> There's apparently some sort of a long-range mode in Bluetooth 5 that does forward error correction and trades some power use (in the sense of lower data rate -> longer transmissions) to better range.
19:38:32 <b_jonas> what does forward error connection mean? don't all these wireless protocols use some error connection? but I don't know what "forward" means here
19:40:38 <fizzie> If I got it right, all flavours of Bluetooth except this new-in-5 "LE Coded" encoding only do error *detection* (and retransmissions), not error *correction*.
19:40:50 <fizzie> https://www.bluetooth.com/blog/exploring-bluetooth-5-going-the-distance/ "Bluetooth low energy at version 4 does not perform error correction, only error detection. Bluetooth 5 introduces an error correction capability."
19:48:08 -!- sprock has joined.
19:51:38 <keegan> apparently "forward" error correction refers to the fact that it only uses the forward channel and not a reverse channel (requesting resends)
20:00:17 -!- sprock has quit (Ping timeout: 252 seconds).
20:05:07 -!- b_jonas has quit (Ping timeout: 252 seconds).
20:06:47 -!- sprock has joined.
20:11:43 -!- riv has joined.
20:11:50 -!- sprock has quit (Ping timeout: 252 seconds).
20:21:44 -!- b_jonas has joined.
20:25:02 -!- sprock has joined.
20:54:09 -!- Lord_of_Life_ has joined.
20:56:10 -!- Lord_of_Life has quit (Ping timeout: 240 seconds).
20:56:10 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
21:16:47 -!- sprock has quit (Ping timeout: 265 seconds).
21:31:38 -!- sprock has joined.
21:38:01 -!- riv has quit (Quit: Leaving).
21:57:13 -!- hendursaga has quit (Ping timeout: 276 seconds).
21:57:13 -!- chiselfuse has quit (Ping timeout: 276 seconds).
21:57:13 -!- hendursaga has joined.
21:57:20 -!- chiselfuse has joined.
22:13:10 -!- sprock has quit (Ping timeout: 260 seconds).
22:37:59 -!- arseniiv has quit (Ping timeout: 265 seconds).
23:05:57 -!- ais523 has joined.
23:13:00 -!- ais523 has quit (Remote host closed the connection).
23:19:51 -!- chiselfuse has quit (Ping timeout: 276 seconds).
23:20:53 -!- chiselfuse has joined.
23:26:03 -!- ais523 has joined.
23:40:37 -!- ais523 has quit (Quit: sorry about my connection).
23:40:52 -!- ais523 has joined.
23:42:17 -!- ais523 has quit (Client Quit).
23:42:32 -!- ais523 has joined.
00:03:06 -!- delta23 has quit (Quit: Leaving).
00:05:04 <esolangs> [[Mogus]] M https://esolangs.org/w/index.php?diff=87930&oldid=87578 * Oshaboy * (+27) Added Unimplemented Tag
00:39:28 -!- sprock has joined.
01:02:09 <nakilon> this 2015 article https://esolangs.org/wiki/Fungeoid says that it's kind of fungeoid's goal to have side-effects
01:05:04 <nakilon> isn't funge-98 stack of stacks going the opposite direction?
01:05:42 <nakilon> also threading with a separate stack
01:06:25 <nakilon> and my idea of having nested isolated funge spaces
01:07:17 <nakilon> also I don't agree with the "Goal" section
01:07:25 <nakilon> unless I'm missing something
01:14:08 <ais523> one (maybe the only/) motivating idea of the original Befunge was to be as difficult as possible to compile
01:14:44 <nakilon> with having a runtime allowing to split code into isolated toroids and giving them own stack (for example, it pops the N number of items to take from the top of the stack into a new zeroed one and then returns M from the new one to the parent)
01:14:52 <ais523> things like the stack stack (which was added later) seem like they would make the code easier to analyse, and thus maybe to compile, but you can use it for obfuscation in addition to using it for purity
01:15:31 <nakilon> it would be possible to build a repository of common functions that won't have stack collisions with each other and would be used as building blocks easily
01:15:58 <ais523> I guess there's two points of view, the point of view of a programmer who is trying to make their code easy to understand and is using the language features for that purpose
01:16:25 <ais523> and the point of view of a compiler, or a programmer who is intentionally making their code hard to compile, where the features might be used in unusual ways to make the code hard to understand
01:16:45 <nakilon> to necessary easy to understand but easy to build
01:17:06 <nakilon> I'm ok with write-only code as long as it does what it have to
01:17:45 <ais523> I think write-only code only really works in environments where you know you'll never have to read it again
01:18:22 <ais523> one-off scripts, for example (and even then I try to do things like use meaningful variable names, just in case they somehow end up not being one-off after all)
01:26:56 <nakilon> "I disagreed, saying that there are some languages out there where and interpreter is easier to write than a compiler."
01:27:04 <nakilon> https://github.com/catseye/Befunge-93/blob/master/historic/bef-1.0rc1/bef.doc
01:28:37 <nakilon> I guess it was a random fact about befunge -- that it had features hard to compile, but it wasn't the goal; the goal was: "It may go forward, or backward, or even LEFT OR RIGHT. : for fun
01:29:25 <ais523> hmm, so it looks like the motivating feature was to be harder to compile than interpret, not necessarily to be impossible to compile
01:29:32 <nakilon> also this https://github.com/catseye/Befunge-93/blob/8fe4065c0415b6f6fa6f699798fa9b64737aadc1/historic/bef-1.0rc1/bef.doc#L27 tells that the self-modification was much earlier than the debate about compilers with his friend
01:29:44 <ais523> there are some programming languages which fulfil this requirement by being trivially easy to interpret
01:30:06 <ais523> but there were other motivations too
01:31:55 <nakilon> I would call the complexity to compile befunge a goal if there was that debate and then he comes up with things made on purpose to prove his debate point; but it was the opposite -- he already had an idea of self-modification and then the debate just motivated him to release something
01:34:24 <Corbin> Interestingly, Futamura conclusively showed that compilers arise from specialized interpreters, and their work implies that an interpreter is always easier than a compiler.
01:34:58 <ais523> I do think that interpreters are generally easier, except in the case where a naive transpilation works
01:35:21 <ais523> (e.g. compiling BF by string replacement of "+" into "(*ptr)++", ">" into "++ptr", etc.)
01:35:45 <ais523> err, I'm using my post- and pre-increments inconsistently, I guess it doesn't matter in this situation but it still looks bad
01:35:46 <nakilon> btw I don't see a problem compiling befunge if you create a 80x25 of pointers to void functions that would occasionally overwrite other pointers to point at the "library of function" that is a list of possible instructions
01:36:44 <ais523> this depends on what you consider a compiler to be
01:36:55 <ais523> you can compile any code by hardcoding the program into an interpreter
01:37:04 <Corbin> ais523: But note that, in that case, we can kind of reverse-engineer ourselves a corresponding interpreter which is even "easier" in the sense that it can delegate even more work to the C compiler.
01:37:06 <ais523> but some people consider that cheating and not really a compiler
01:37:48 <ais523> Corbin: well, running gcc is probably harder than writing the code you want it to compile into a file
01:37:52 <ais523> but, both are pretty easy
01:38:26 <Corbin> ais523: I'm thinking specifically of what's delegated to the toolchain, because Futamura's point was that a good specializer can turn any interpreter into a good compiler.
01:38:46 <Corbin> Hm, not the best way to put it. The specializer and interpreter both contribute to the quality of the compiler?
01:38:57 <ais523> the specializer would have to be /incredibly/ good
01:39:21 <ais523> given that there are optimizations that interpreters can't really do without getting halfway to being a compiler anyway, so given a naive interpreter, those optimizations would have to be done in the specializer
01:39:33 <ais523> and, I know that's the point of specializers, but it's hard to imagine one that's *that* good
01:39:51 <Corbin> Yeah. I use RPython, for example, and there's a lot of work put into making those interpreters "easy" to write.
01:41:33 <ais523> I guess you can apply the same argument to a specializer-virtual machine combination
01:41:39 <ais523> which should in theory give you an optimizing VM
01:41:44 <Corbin> (RPython automatically generates a JIT compiler for a given interpreter. Backend configuration, instruction selection, memory management, etc. are all done with automatic codegen. It takes like 20min to generate a JIT but it's worth the wait.)
01:42:35 <Corbin> Yeah. I think that this is an interesting antipattern in language design: We often pair a low-level intermediate language with a high-level user-friendly language, and require interpreters to compile from the latter to the former.
01:42:37 <ais523> that's interesting
01:42:44 <ais523> how are the interpreters specified?
01:43:29 <ais523> also, I'm not sure that's an antipattern, unless you're suggesting that the interpreters should work with high-level code more directly
01:43:40 <Corbin> RPython interpreters are given in plain Python 2.7, using their support library for libc calls and FFI. The translator interprets the Python and then disassembles it in-memory, so codegen can be done in Python.
01:44:07 <ais523> I was wondering about that (although being locked to Python 2 is something of a problem nowadays)
01:44:40 <Corbin> I just think that it's signing folks up for extra work. Extra context, usually. Desugaring is simpler than an intermediate language.
01:44:48 <nakilon> I think the measure of cheating can be calculated; my compiler idea above results in that the compiled programs would be different only in a place where the starting befunge code was injected as a 80x25 table, and the rest would be the same "interpreter"; while the "true compiler" that you might want to imagine is something that produces absolutely
01:44:48 <nakilon> different program for every different input source code; so the amount of "variation" can be benchmarked on compiling different inputs and measuring the diff
01:46:09 <ais523> Corbin: I agree with making the low-level intermediate language a subset of the high-level language, rather than necessarily a separate language
01:46:32 <ais523> but there are some cases where you want to relax restrictions in the downcompile
01:47:03 <nakilon> but then, there are compilers that produce 1mb binary even for hello world -- all the hello worlds will have the same 99% of "interpreter" that is some static library
01:47:07 <ais523> a common example is when the IR has goto statements, but the high-level language you're compiling from doesn't
01:47:34 <Corbin> ais523: Sure. I guess I'm saying that, in those situations, the IR should be explicit and narrow-waisted, rather than a required glue language. Like, Smalltalks put a tiny but real burden on implementations when they require bytecode compilers, e.g. in Python.
01:47:39 <ais523> nakilon: right
01:47:55 <ais523> in fact, ld-linux.so is even described as an "interpreter" in its documentation, and that of the Linux executable format
01:48:11 <Corbin> LLVM IR, GCC's GIMPLE, QBE, and libfirm's IR; they should all really commit to text formats and narrow-waist tools. This is one area where WebAssembly has done well.
01:48:33 <ais523> so pretty much all binaries on Linux are being run through an interpreter (although what it actually does is just interpret the code for loading, load the code, then jump to it and run it directly)
01:50:47 <keegan> what is a "narrow-waist tool"
01:52:04 <keegan> (I spent so many years being confused about what "waist" means before I realized the garment waist and the anatomical waist can be totally different!)
01:52:12 <zzo38> I want to ask the same question, too
01:52:19 -!- ais523 has quit (Quit: sorry about my connection).
01:52:27 <Corbin> keegan: A narrow-waisted design is a pattern which is meant to counter the Expression Problem by requiring either the input or output of every tool in a toolchain to be a single unified format.
01:52:34 -!- ais523 has joined.
01:52:52 <ais523> one thing that I do think is an antipattern is where important metadata, that the compiler knows, gets removed when going down to lower levels of abstraction
01:53:20 <keegan> Corbin: oh, like netpnm?
01:53:27 <ais523> one example is that it would be very useful to have a way to say "the value in this register isn't needed any more" right down to at least the asm level
01:53:27 <Corbin> e.g. pandoc can handle many different documentation formats. Normally this would evoke the Expression Problem and require a quadratic amount of code, but instead it's a linear amount of code because pandoc's IR acts as a narrow waist.
01:53:35 * keegan nods
01:53:46 <keegan> where you convert anything-to-pnm or pnm-to-anything or manipulate pnm's
01:53:51 <ais523> it even sometimes helps performance at the *machine code* level, despite taking up bytes, because this is information that the processor cares about too
01:53:59 <Corbin> keegan: Yeah. Uncompressed containers are good candidates for narrow waists.
01:54:12 <keegan> or how many programming languages adopt UTF-8 as the one true internal string representation
01:54:18 <keegan> with other encodings handled at the edges
01:54:24 <Corbin> ais523: Yes. I'm sure you've heard me rant about The Mill before; their "belt" concept would be great for that.
01:54:35 <keegan> (Unicode was designed with this use case in mind, and would be substantially simpler without it)
01:54:50 <ais523> which is why we have assembly language commands like VZEROUPPER, and certain special cases of XOR
01:55:17 <ais523> Corbin: I do like The Mill's approach, although it got me thinking about how I would do things and I came to different conclusions on some things
01:55:30 <Corbin> (The Mill's belt is just the most recent eight results from the ALU. By default, values are usable for a few operations and then disappear forever.)
01:55:34 <ais523> e.g. I think it would be more useful to flip the belt the other way round: commands say when their output is going to be used, not when it was generated
01:55:52 <ais523> also I didn't realise it was as short as 8, I was assuming it would be much longer
01:56:27 <zzo38> I think farbfeld is better than pnm, although it is the same kind of idea it is a good one. Fortunately, ImageMagick now supports both formats (and my own Farbfeld Utilities also has encoders/decoders for netpnm formats, too).
01:57:31 <ais523> Corbin: widely-applicable intermediate representations are something we could do with having in a range of fields (and if they're easily interconvertible it probably also doesn't matter if we have too many)
01:57:40 <Corbin> Oh, I think it's eight minimum? ISTR Ivan saying that belt space is very expensive because it's interconnected to so many functional units, so maybe sixteen-ish on high-end chips.
01:58:36 <ais523> Corbin: so the great thing about a "when it's going to be used"-style belt is that the interconnect isn't too bad, because you can safely use a slow path if the value you see there is some high number of instructions
01:58:38 <Corbin> ais523: Yes, although there's still a linear cost to maintaining each representation. I know that I will have to compile a few simple languages into Cammy for demonstration purposes, but I won't maintain optimizing compilers because there's usually no interesting source programs to optimize.
01:58:50 <ais523> and only need to fast-path the low-numbered choices
01:59:00 <ais523> it's information you get to know whether you need a fast algorithm or can do with a slow one
01:59:16 <ais523> what is Cammy?
01:59:22 <zzo38> I dislike UTF-8 (or any Unicode format, or any other encoding) as the one true internal string representation. I think having byte strings is better, and you can still have functions that treat them as UTF-8 if wanted, as well as ones dealing with byte strings. (Converting between text encodings perfectly isn't possible, even though they try to say otherwise.) I dislike many modern programming languages that use Unicode.
01:59:38 <Corbin> Aha, that's clever. Makes sense. Strange how time reversal sometimes dramatically changes what needs to be tracked.
02:00:17 <Corbin> ais523: Oh, [[Cammy]] on the wiki, just my current pet project. It's not yet Turing-complete, because I'm lazy and also Turing categories are hard.
02:00:27 <ais523> zzo38: I believe that it's normally correct to have "bytestring" and "character string" as the two main string types internally
02:00:49 <ais523> and that with a character string, it's generally preferable for the internal encoding to not be user-visible, although UTF-8 makes for a good choice
02:01:07 <nakilon> zzo38 I'll take you to my team of creators of a "cleaner unicode"
02:01:53 <ais523> one thing I dislike about UTF-8 is that it spends a lot of encoding space to get some fairly minor advantages
02:01:54 <zzo38> ais523: Having separate types is better, yes, although there are often the deficiencies that many things will not work properly with byte strings, I find
02:02:07 <ais523> IIRC there are six byte values that can't legally appear in UTF-8 at all
02:03:02 <ais523> actually, I think even better would be to have typed byte streams that were parameterised by encoding, and probably the ability to parameterise character strings by encoding too
02:03:33 <ais523> (where "encoding" here would handle things like the form of escaping that had been used, what metadata beyond normal characters it could contain, etc.)
02:03:57 <zzo38> Actually, yes, I suppose that can be helpful.
02:05:15 <zzo38> (Although, it will not always be relevant, sometimes it is helpful to be able to use such a feature (as an option, perhaps).)
02:05:23 <ais523> one thing I would like to see more languages provide is a standardised type for formatted text
02:05:26 <nakilon> $ irb
02:05:26 <nakilon> irb(main):001:0> "лол".encoding
02:05:26 <nakilon> => #<Encoding:UTF-8>
02:05:26 <nakilon> irb(main):002:0> "лол".b.encoding
02:05:26 <nakilon> => #<Encoding:ASCII-8BIT>
02:05:46 <ais523> that seems wrong?
02:06:35 <ais523> I would say that the /first/ one is a character string, and the /second/ one is the UTF-8 encoding of a character string
02:06:47 <nakilon> String instances in Ruby are a struct of byte sequence on an encoding info to help other functions preprocess the sequence when needed
02:07:10 <nakilon> *and an
02:07:31 <ais523> or if it genuinely is an 8-bit extended ASCII, perhaps ISO 8859-5, but that seems unlikely
02:07:49 <zzo38> Even when it is UTF-8, there are considerations what will be wanted. Sometimes you will want to store unpaired surrogates (which is WTF-8), sometimes you might want characters beyond Unicode range (UTF-8-E, etc), sometimes you might want null characters, and sometimes you might not want these things, depending on the application.
02:07:53 <ais523> nakilon: in that case I think it's wrong
02:08:10 <ais523> if you hand a function a string, it shouldn't have to decode it itself whenever it wants to do anything with it
02:08:50 <nakilon> > "лол".b
02:08:50 <nakilon> => "\xD0\xBB\xD0\xBE\xD0\xBB"
02:08:52 <lambdabot> error:
02:08:52 <lambdabot> • Couldn't match expected type ‘b0 -> c’ with actual type ‘[Char]’
02:08:52 <lambdabot> • In the first argument of ‘(.)’, namely ‘"лол"’
02:08:53 <ais523> zzo38: it'd be nice to have a standardised name for "UTF-8 except NUL is encoded as C0 A0"
02:09:22 <nakilon> String#b here is a method that just changes the encoding attribute, it does not change the data
02:09:33 <zzo38> ais523: Yes, I agree
02:09:52 <nakilon> so this string for example becomes printed in wrong way because ascii can't do that
02:10:24 <ais523> I guess what Ruby's doing is a leaky abstraction
02:10:46 <nakilon> what's wrong with it?
02:11:15 <nakilon> those japanese folks defeated unicode problems 15 years before python
02:11:50 <zzo38> Another encoding is TRON, although it is uncommon and has a different set of problems
02:12:25 <zzo38> What I think is that no character encoding will be good for all purposes, although they can be good for some things (although still, improvements can be possible, sometimes)
02:12:27 <ais523> I guess the problem is that it's using the same type for bytestring and character string, *and* has a way to look at the internal representation of a character string when that shouldn't matter
02:12:48 <ais523> and it wouldn't surprise me if it doesn't enforce that the bytes stored in a string actually match the given encoding
02:13:11 <nakilon> all data are 0 and 1
02:13:12 <ais523> Perl also solved this problem substantially before Python did, and I don't think its solution is perfect, but I prefer it to Ruby's
02:13:21 <nakilon> it does not matter how many types you declare
02:13:26 <ais523> yes, but that doesn't mean you have to present it to the user as 0 and 1
02:13:59 <ais523> and sometimes, semantically there will be a requirement not to have 0s and 1s in particular places, and it's an advantage if the language can enforce that rather than making the user do it
02:14:21 <nakilon> Ruby has only a String and you are free to change the encoding at any moment, just know what you are doing or you'll get an exception unless you pass the flags of ignore/replace explicitely
02:14:49 <ais523> fwiw, Perl's solution is that a string is conceptually an array of numbers, which could represent either codepoints or raw bytes, and for string-related functions you can specify what interpretation to use
02:15:06 <nakilon> when you get the data from network for example it's ASCII by default and the internet really has no idea what encoding is -- it's your application job to say "here we expect this encoding" so you apply it
02:15:22 <ais523> internally, strings that contain values above 255 are stored in a slightly extended UTF-8, and strings that don't are sometimes stored just as raw bytes, but you're not supposed to know or care about that detail
02:15:45 <ais523> nakilon: and if the string isn't valid for its claimed encoding?
02:16:50 <ais523> in Rust, there's &[u8] (byte slice) and &str (string slice – internally UTF-8 encoded); there's a fast-path function to reinterpret a &[u8] as a &str, but it still checks to make sure that the string is valid UTF-8 and refuses to produce output if it isn't (producing an error you have to handle, instead)
02:17:21 <ais523> and of course, if the byte slice isn't supposed to be UTF-8 you can still translate it to a string but there isn't a fast-path for that, as it'd need to be re-encoded into the internal UTF-8 representaiton
02:18:03 <ais523> &str does leak its UTF-8-ness in a few other ways, though, such as measuring length in bytes of UTF-8 for the purpose of taking substrings (I think this is a concession to performance)
02:18:14 <nakilon> ais523 the invalidity is a thing that exists only when you are doing some final rendering, like printing or converting between the passed enc_a and enc_b; in those cases you use flags to ignore the encodnig and there are also some methods to clean up the mess prematurely like https://ruby-doc.org/core-2.4.0/String.html#method-i-scrub
02:19:38 <nakilon> there are separate methods .size and .bytesize
02:19:47 <zzo38> Does Rust have all of the string dealing functions can work with byte strings too, in case you do not want to use Unicode strings (either sometimes or all the time, depending on the program)? Not all text is Unicode text (and not all can be converted to/from Unicode properly either; sometimes it is useful to try anyways, but sometimes it is better not to)
02:20:07 <nakilon> and the fixing flags are here: https://ruby-doc.org/core-2.4.0/String.html#method-i-encode
02:20:08 <ais523> zzo38: sort-of; they aren't polymorphic but they're duplicated between the string and bytestring cases
02:20:15 <ais523> except in cases which don't make sense
02:20:25 <zzo38> One thing I like about C and PostScript is that it doesn't use Unicode.
02:21:12 <ais523> e.g. strings have both to_uppercase and to_ascii_uppercase, wheres bytestrings only have the ASCII version
02:21:22 <zzo38> Yes, sometimes some functions won't make sense for both, is reasonable. That is one example, yes
02:22:35 <ais523> it's surprising how useful the ASCII-specific functions are, actually, they're good for things like handling programming languages with case-insensitive keywords (because the keywords are generally recognised only if written with ASCII characters)
02:22:48 <zzo38> (Although if they are stored internally as UTF-8 and known to be valid UTF-8, then it seems that some of them could be polymorphic, including to_ascii_uppercase since it is doing the same thing whether it is UTF-8 or ASCII presumably)
02:23:04 <ais523> hmm… now I'm wondering if there's a programming language with case-insensitive keywords and one of them contains the substring "ss"
02:23:21 <ais523> it'd be interesting to throw a ß at them to see if it would be recognised, I bet it wouldn't be
02:25:07 <ais523> zzo38: it'd be hard to make to_ascii_uppercase polymorphic in Rust without a special safety override – the compiler would see bytes internally within a string being mutated directly by to_ascii_uppercase, which isn't allowed by default in case you change the internal representation in a way that makes it invalid UTF-8
02:25:16 <ais523> so it's easier to just duplicate the code rather than using unsafe code
02:25:47 <ais523> you definitely *could* write a function to handle both but I don't think the compiler developers would want to
02:25:59 <zzo38> Maybe some might do that with "ss" depending on the implementation, in which case some implementations might be incorrect.
02:26:36 <nakilon> > "лол".b.reverse.force_encoding("utf-8")
02:26:36 <nakilon> => "\xBBол\xD0"
02:26:37 <lambdabot> error:
02:26:37 <lambdabot> Variable not in scope: force_encoding :: [Char] -> a -> [a0]
02:26:47 <nakilon> reversing the bytes broke it )
02:27:17 <ais523> hmm, at least that function has a sufficiently scary name
02:27:36 <ais523> Haskell would probably call it UnsafeForceEncoding or something like that
02:27:38 <zzo38> (Also, maybe the language might need to be specified for Unicode case functions, since e.g. some languages will have dot and dotless "I"/"i" being separately, etc)
02:28:24 <ais523> Rust's super-scary functions generally have very normal/unassuming-looking names, but you need to use a special keyword for calling them to say that you're recognising the danger
02:29:01 <ais523> zzo38: I actually think Turkic case-folding might be the *only* case in which you can't infer the case-folding rules from the codepoints being used, but I'm not sure
02:29:14 <keegan> only for a particular definition of super-scary (might cause undefined behavior)
02:29:27 <nakilon> I suppose there is a segfault thing in rust
02:29:32 <keegan> using 'unsafe' to encode other properties of reasonable API usage is frowned upon
02:29:37 <ais523> it would have simplified things if "Turkic dotless ı" and "Turkic dotted i" were different codepoints from "non-Turkic lowercase i"
02:30:18 <ais523> keegan: I guess, although undefined behaviour is by definition worse than anything else that might go wrong with a program
02:30:22 <keegan> but constructing a &str that points to invalid UTF8 can cause undefined behavior
02:30:36 <keegan> because other 'safe' &str APIs are free to assume that it is valid UTF-8
02:31:11 <keegan> so any function which converts &[u8] to &str (or Vec<u8> to String, etc.) needs to either check that it's valid UTF-8, or be 'unsafe' to leave that up to the programmer
02:31:13 <ais523> yes, e.g. seeing an FD byte means it's safe to read three more bytes
02:31:58 <ais523> which it might not be, if the internal format isn't being statically analysed to be correct
02:32:38 <ais523> something that many UB models do, but Rust doesn't, is distinguish between values that are UB to use and values that are UB to even construct
02:33:07 <ais523> Rust currently has a misencoded &str as something that's UB to even construct, like it does with its other UB values, although It seems unlikely that it would be a problem in practice (still, there's no reason to actually do that)
02:33:54 <ais523> I guess the advantage for the "UB to even construct" model is that it makes it easier to reason about things like signal handlers causing unwinds at unexpected points in the code
02:34:26 <ais523> (although, I believe Rust's model for panics is that it's safe to create regions of code in which a panic would be undefined behaviour as long as you can prove that there can't actually be a panic there)
02:34:35 <zzo38> One thing that Unicode is especially bad for, I think, is arranging text on a grid-based text display. (This doesn't mean it is bad for everything. For some things, Unicode is OK, but could be better for those things.)
02:35:22 <ais523> zzo38: I was writing a program to do that, but didn't get very far
02:35:39 <ais523> the furthest I got was working out how wide each character should be, and even then it isn't really specified in detail in Unicode
02:35:58 <nakilon> in Ruby raw socket data encoding is ASCII while the built-in http retrievers are utf-8 by default; let me check... open("https://www.google.com/", &:read).encoding => #<Encoding:ISO-8859-1> -- oh I'm not sure what it is
02:36:18 <zzo38> Yes, that is the greatest (but not only) problem with using Unicode for arranging text on a grid-based text display. Other encodings will be better.
02:36:33 <ais523> in HTTP, also in HTML, the convention is that the producer of the data (typically the server) states what encoding it is in
02:36:50 <ais523> although the recommendation is always to send UTF-8 with a label stating that it's UTF-8
02:37:17 <nakilon> hm, Chrome says www.google.com responds with content-type: text/html; charset=UTF-8 actually
02:37:25 <ais523> both HTTP and HTML provide separate mechanisms for stating what the encoding is; I think HTML's wins if there's a contradiction
02:37:30 <zzo38> If I was designing to include the encoding with the string, I might use the 16-bit code page numbers, such as: 0 means no encoding, 367 means ASCII only, 1209 means UTF-8, etc. I also made a list of some of things that as far as I know don't have existing code page numbers, so I made up my own for them, e.g. TRON, CLC-INTERCAL EBCDIC, Powerline UTF-8, etc.
02:37:59 <ais523> nakilon: they may both be right, nothing forces Google to respond in the same encoding every time
02:38:25 <nakilon> yeah, ruby sens ruby's user-agent
02:38:28 <nakilon> so idk
02:38:31 <nakilon> *sends
02:38:46 <zzo38> (I might also, in a terminal emulator, use one escape code to select the code page. If Unicode is implemented at all, the standard sequence to select UTF-8 might select the "Powerline UTF-8" code page, although I would think it better to use an encoding that doesn't confuse character widths and that stuff like Unicode does, instead.)
02:39:30 <ais523> huh, I just accessed google.com manually via telnet, asking for its homepage
02:39:49 <ais523> <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="http://www.google.com/">here</A>. </BODY></HTML>
02:40:13 <ais523> I was shocked to see a "Google has moved" message, but I guess this what their webserver does for the human-readable part of a 301
02:40:21 <nakilon> it added www. to your request
02:40:31 <ais523> no, it told me to retry with a www.
02:40:32 <ais523> (I sent without)
02:40:53 <nakilon> yeah I mean that, just said it wrong
02:41:14 <ais523> this is some weird HTML, though
02:41:41 <ais523> upper-case tags, apart from one very old-fashioned character set tag (which duplicates an HTTP header)
02:41:48 <ais523> no doctype, so it's quirks mode
02:41:58 <nakilon> this reminds me the crazy guy back in 2006 who wanted to make his own instant messaging application that would send screenshots of text instead of the text
02:42:08 <nakilon> he would defeat the encoding problem
02:42:53 <ais523> either this is a page that hardly ever gets looked at (which wouldn't surprise me – it does its job and is rarely seen by a human), or there's some advantage to writing it in that style (which wouldn't surprise me)
02:43:32 <zzo38> It would, although that approach has different problems (such as taking up more space, and being unable to change the fonts). DVD subtitles work similarly; they store the text as pictures.
02:43:33 <ais523> It looks automatically generated, especially given that this is going to only be seen by the most primitive of Web user agents, and people who access websites without a browser for some reason
02:44:11 <ais523> nakilon: maybe an interesting middle-ground would be to have a library of images of characters, and then encode the image by referencing them
02:44:25 <ais523> this would also solve the encoding problem for human-readability purposes
02:44:36 <ais523> but would be very bad for software accessibility, you're basically sending a CAPTCHA
02:45:01 <ais523> people often want to copy-and-paste out of messages into text fields, for example (and blind people may rely on a screen reader)
02:45:53 <ais523> hmm, I don't think the user agent has the ability to tell the server what character encoding it wants the server to send
02:46:21 <nakilon> "a library of images of characters, and then encode the image by referencing them" -- isn't it a font file? ..D
02:46:23 <ais523> so you'd therefore expect Google to send the same character encoding to both Ruby and Chrome
02:46:50 <ais523> nakilon: almost – font files are supposed to specify which codepoint is used for which of the images they contain
02:46:55 <zzo38> Character names is another thing that may be useful for some purposes and worse for others, such as how PostScript does when rendering fonts.
02:47:04 <ais523> whereas this would just be specifying the image to use by index into the file, which might have nothing to do with codepoints
02:47:24 <nakilon> "people often want to copy-and-paste out of messages" -- now this is about my idea of the universally accepted "chat copypasta" format
02:47:40 <ais523> incidentally, some LaTeX renderers appear to render via using fonts that specify codepoints unrelated to the actual characters being used, which can create weird results if you copy-and-paste from the resulting PDF
02:48:16 <ais523> nakilon: or visit a link in a message, which might not always (or usually) be done by copy-and-pasting but it's essentially the same problem
02:48:38 <nakilon> https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
02:49:21 <fizzie> ais523: The user agent doesn't *directly* indicate which character encoding the client expects, but empirical tests show that copying my Chrome UA into curl -A (but changing nothing else) does make a difference in the encoding of the result.
02:49:21 <ais523> nakilon: that's the first one I tried
02:49:26 <ais523> but it's about gzip and the like
02:49:41 <esolangs> [[Cammy]] M https://esolangs.org/w/index.php?diff=87931&oldid=87614 * Corbin * (+53) The reference implementation now has its own typechecker, rather than calling OCaml and parsing the type.
02:49:50 <ais523> fizzie: that's interesting, I wonder what its criterion is
02:49:51 <zzo38> Even if it is just a index into the file, supporting code page conversion with it can still be helpful. (Also, some glyphs might correspond to a sequence of code points instead of a single one, depending on the font and on the encoding; this is even true of Unicode, and in the case of Unicode at least it can even be ambiguous. So, even then the index into the file is insufficient even if you do have conversion.)
02:50:05 <nakilon> wait I'm wrong that's wrong header
02:50:09 <nakilon> I think I saw one
02:50:57 <fizzie> Apparently there *was* an Accept-Charset, but it is no more.
02:51:22 <ais523> zzo38: what criteria do you think that programs should use to decide what encodings their inputs are in, and what encodings to produce outputs in?
02:52:06 <ais523> I think the main options are "look at the locale environment variables (or OS equivalent)", "always use/assume UTF-8", and intermediate combinations of those
02:52:08 <zzo38> ais523: Depends on the program. It may be one or more of: the file itself, the file format it deals with, command-line arguments, environment variables (such as LANG), etc.
02:52:15 <nakilon> "specifying the image to use by index" -- reminds me inserting icons via CSS by addressing a shift and crop on a single png asset
02:52:45 <nakilon> so the character addresses don't have to be a natural number but can be even an overlapping region
02:53:17 <ais523> <HTML standard> The Encoding standard requires use of the UTF-8 character encoding and requires use of the "utf-8" encoding label to identify it. Those requirements necessitate that the document's character encoding declaration, if it exists, specifies an encoding label using an ASCII case-insensitive match for "utf-8". Regardless of whether a character encoding declaration is present or not, the actual character encoding used to encode the document must
02:53:18 <ais523> be UTF-8.
02:54:12 <ais523> knowing HTML, it wouldn't surprise me if it discusses what to do if it isn't, regardless
02:55:05 <zzo38> For example, a program that deals with JSON can assume UTF-8 for input, and using a switch to switch the output between UTF-8 and ASCII. Programs that just write descriptive text (such as status messages, error messages) should either assume ASCII or use the environment variables (and should never just assume UTF-8). For other things, other encodings are useful, or sometimes just ignoring encodings entirely and copying text as-is.
02:55:06 <nakilon> "link in a message" -- maybe this is a thing to be changed in future; we are used to copypaste texts, then lazyness made us want to just click, maybe there are new ways to make a buddy visit your page, like forcing his software doing it without showing you the URL; also deeplinks
02:55:20 <ais523> interestingly, it also states that the encoding needs to be specified via one of a number of ways, but accepts BOM as one of those ways
02:55:41 <ais523> so it's standards-compliant to send an HTML page with just a UTF-8 BOM as the only thing saying it's UTF-8, but it wouldn't surprise me if browsers missed that case
02:56:24 <ais523> nakilon: I guess if you're sending images, you could send a QR code (although that just gets back into encoding issues again)
02:56:58 <fizzie> ais523: FWIW, supplying a Chrome-like user agent changes a lot of other things too. For example, using plain HTTP will serve a redirect to HTTPS to Chrome, but not to an arbitrary user agent. And of course the content of the page will be entirely different too. (All that from external observations. I don't think I can comment on the actual criteria.)
02:57:04 <ais523> zzo38: I was mostly thinking about text intended for humans; if the file format specifies an encoding, then obviously you need to use that one
02:58:21 <zzo38> ais523: For status messages, either assuming ASCII or using the environment variables is the way to do it, I think.
02:58:30 <ais523> yes
02:58:40 <ais523> I don't think I can assume ASCII because that makes my programs impossible to internationalize
02:58:58 <nakilon> qr code is like an analogue radio
02:59:16 <ais523> even in Canada, many users will want non-ASCII characters like œ and á in their output because many Canadians primarily speak French
02:59:19 <nakilon> you send the data all over the place via light rays depicting a black-white thingy
03:00:01 <ais523> that said, I think that if the environment variables ask for ISO-8859-1, the program should output that, at least for stderr output
03:00:51 <nakilon> hm, I now wonder if you can measure a "power of signal" of the qr code as the distance from which the image is readable
03:00:52 <ais523> I know I implemented locale-specific encoding code in ayacc, because I was trying to match the POSIX specification for yacc; although, I think most of the characters that yacc cares about are primarily stable between most commonly used encodings
03:00:58 <zzo38> If you want international status messages, the file with the international text can be for a specific encoding, and if the environment variable specifies that language but with a different encoding than any of the files, it can convert it, I suppose. However, I don't internationalize command-line status messages in my programs (although I will accept documentation and GUI in other languages)
03:01:03 <nakilon> so you could measure qr code in watts _<>
03:01:19 <zzo38> When just copying the input to output though, you could just pass the text "as-is" without worrying about the encoding.
03:01:33 <ais523> right
03:01:55 <ais523> my experience with programs like xterm (which originally used that method) is that it's probably better to have the program do encoding conversion on output, though
03:02:19 <ais523> you shouldn't need separate translation databases for FR_ca.UTF-8 and FR_ca.ISO-8859-1
03:03:20 <ais523> ugh, have my French locale files got uninstalled somehow? :-(
03:03:35 <ais523> apparently not
03:03:43 <zzo38> That helps when you don't have the data in the proper encoding, but when you do, you should just use them, to avoid problems with conversion.
03:04:13 <fizzie> I always generate the fi_FI locale on my systems, even though I never use it.
03:04:30 <ais523> I like to have a non-English locale around for testing locale issues, and partly just for fun
03:05:00 <ais523> zzo38: ah right, so the point is that you don't want to decode into codepoints and back into bytes if the data's in the correct encoding already
03:05:05 <nakilon> wikipedia: "ISO-8859-1 was (according to the standard, at least) the default encoding of documents delivered via HTTP with a MIME type beginning with "text/""
03:06:08 <ais523> aren't web browsers supposed to interpret "ISO-8859-1" as actually meaning Windows-1252, though?
03:06:41 <nakilon> it says websites then switched to 1252 slowly
03:06:46 <nakilon> as I understood
03:06:49 <ais523> ah, here we go: https://html.spec.whatwg.org/#determining-the-character-encoding
03:07:48 <ais523> the HTML spec actually says that the default encoding for unmarked webpages should be assumed based on the locale within which their web browser is running
03:09:01 <fizzie> MediaWiki has a special language code "qqx" that shows the message name as the translated message content, learned of that recently.
03:09:14 <nakilon> btw
03:09:37 <ais523> fizzie: oh wow, that would be so useful to have known about earlier (assuming it worked back then)
03:09:49 <nakilon> attaching encoding as an attribute to byte sequence is like a header in image formats -- it has orientation, alpha correction, etc.
03:09:55 <fizzie> From 1.18 onwards apparently.
03:10:06 <nakilon> and there are plenty of bugs when software fucks up those headers
03:10:17 <nakilon> *metadata
03:10:21 <ais523> for ages I resorted to (web-browser-equivalent-of) grepping Special:AllMessages, which became a lot more frustrating when it stopped fitting on a page, and would have false positives due to text duplicated between messages
03:10:55 <ais523> although, is "qqx" in the right namespace for private-use language codes?
03:12:26 <ais523> RFC 5646 implies the name should start "x-", but maybe MediaWiki doesn't like the hyphen
03:12:45 <ais523> (amazingly, I actually guessed that the private use prefix was "x-", but wanted to look it up to be sure)
03:35:25 -!- dbohdan has quit (Read error: Connection reset by peer).
03:36:12 -!- dbohdan has joined.
03:36:38 -!- ais523 has quit (Quit: quit).
03:43:33 -!- chiselfuse has quit (Remote host closed the connection).
03:58:13 <zzo38> Do you know which (if any) games other than Escape (by Tom7) can have bizarro world (like Escape does), and what its features are? I wanted to implement bizarro world in Free Hero Mesh, and should have the idea about its design.
04:38:10 -!- Everything has joined.
05:06:05 -!- oerjan has joined.
05:20:55 <shachaf> What is a bizarro world?
05:22:44 <zzo38> When using any cipher in CTR mode (including ChaCha20), does the nonce and counter have to be separate? If it is long enough, then you can do both?
05:24:30 <keegan> I think you can combine them
05:24:46 <keegan> that is, start the counter at a random value and include that with the message
05:25:10 <keegan> assuming that your block size is big enough that you are unlikely to ever use the same keystream block twice in two different messages
05:25:50 <zzo38> Yes, it is how I mean
05:42:23 <zzo38> Does any cipher use CFB or OFB with a counter added?
05:45:53 <keegan> how would you add it
05:47:07 <zzo38> Probably XOR or addition with the input of input of each step
05:59:24 <zzo38> I suppose there is three kind of functions that would be used: fixed->fixed (e.g. ChaCha20), (fixed,key)->fixed (e.g. most block ciphers), variable->fixed (e.g. most hash functions). There is also key whitening (XEX mode), and there is adding input to output like ChaCha20 does to make it difficult to reverse.
06:00:06 <zzo38> It is easy to see with ChaCha20 that if the input is zero, then the output will also be zero. But, even if only one bit is set of the input (I tried this), then the output will be all mixed up.
06:00:35 <nakilon> turns out it was GRPC compilation what was eating all the RAM
06:00:53 <nakilon> it takes like 5 minutes and almost 500mb
06:46:45 <nakilon> or rather 40 minutes already and does not finish, lol
06:49:27 <nakilon> oh specifically it's a Google's OpenSSL: https://github.com/google/boringssl
07:01:30 -!- Sgeo has quit (Read error: Connection reset by peer).
07:01:45 <b_jonas> "<ais523> one (maybe the only/) motivating idea of the original Befunge was to be as difficult as possible to compile" => I'd like to preemptively state that that wasn't my goal when designing Consumer Society, it's just a necessary side effect
07:16:50 <b_jonas> the interesting part is that it also seems hard to translate Consumer Society to the existing high-level non-eso programming languages, even though many of them seem to have all the features necessary. this part is more an accidental side effect than necessary.
07:17:05 <oerjan> ah, spam in finnish. (Although there seems to be an english version at the end.) it's been a while since the last one.
07:22:59 -!- riv has joined.
07:29:51 <nakilon> ok I think the compilation will just never end
07:30:19 <nakilon> because they assign this issue https://github.com/grpc/grpc/issues/26655 to pythonist who commit 3 days a week and already have 60 issues assigned
07:38:52 -!- Corbin has quit (Ping timeout: 245 seconds).
07:39:17 <nakilon> oh looks like he supports all the languages at the same time, and they've already increased CI build timeouts from 60 minutes to 90 https://github.com/grpc/grpc/pull/27230/files
07:58:57 <esolangs> [[Ppencode]] https://esolangs.org/w/index.php?diff=87932&oldid=86861 * YamTokTpaFa * (-2) /* Definition of Perl keywords */ '''I AM SORRY I FORGOT x'''
08:06:09 -!- hendursa1 has joined.
08:06:41 <esolangs> [[Ppencode]] https://esolangs.org/w/index.php?diff=87933&oldid=87932 * YamTokTpaFa * (+96)
08:09:36 -!- hendursaga has quit (Ping timeout: 276 seconds).
08:14:54 <esolangs> [[Ppencode]] https://esolangs.org/w/index.php?diff=87934&oldid=87933 * YamTokTpaFa * (+84) /* Definition of Perl keywords */
08:22:07 -!- Koen_ has joined.
08:24:04 <esolangs> [[Ppencode]] https://esolangs.org/w/index.php?diff=87935&oldid=87934 * YamTokTpaFa * (+222) /* Definition of Perl keywords */ WTF new news
08:38:10 -!- joast has quit (Ping timeout: 240 seconds).
08:44:05 -!- wib_jonas has joined.
08:45:27 -!- joast has joined.
08:51:24 <esolangs> [[Ppencode]] https://esolangs.org/w/index.php?diff=87936&oldid=87935 * YamTokTpaFa * (+118) /* Definition of Perl keywords */
08:55:14 <esolangs> [[Ppencode]] https://esolangs.org/w/index.php?diff=87937&oldid=87936 * YamTokTpaFa * (+132) /* Definition of Perl keywords */
08:56:20 -!- imode has quit (Ping timeout: 252 seconds).
08:56:36 <esolangs> [[Ppencode]] https://esolangs.org/w/index.php?diff=87938&oldid=87937 * YamTokTpaFa * (+20) /* Definition of Perl keywords */
09:00:08 -!- daggy1234[m] has quit (Quit: You have been kicked for being idle).
09:05:15 <wib_jonas> I mostly agree with ais523 here. Python 3 does the string stuff right for a high-level language: there are separate types for byte string and unicode string, and you generally don't need to know how the unicode strings are represented. It's not perfect, ideally you'd want unicode strings to have an internal form where they store utf-8 and decode
09:05:15 <wib_jonas> that only when necessary, since we do a lot of utf-8 IO, but it's still very good. Rust kind of has the approach right for a low-level language where you want to control the representation explicitly in the type system, but the standard library is somewhat lacking in string operations, so you might sometimes want to use extra libraries. But since
09:05:16 <wib_jonas> it's a low-level language, it does expose enough API that you can do this and can still convert to the standard library APIs and call the standard library functions when they make sense.
09:09:07 <wib_jonas> `<ais523> hmm… now I'm wondering if there's a programming language with case-insensitive keywords and one of them contains the substring "ss"' => is "keyword" relevant here? those languages usually also have c-i user-defined identifiers.
09:09:09 <HackEso> ​<ais523>? No such file or directory
09:10:54 <nakilon> there is no need in another class if all strings are just strings
09:12:51 <nakilon> you think about them like about a sequence of codepoints and you don't care about the internal presentation
09:13:07 <wib_jonas> ‘<ais523> zzo38: I actually think Turkic case-folding might be the *only* case in which you can't infer the case-folding rules from the codepoints being used, but I'm not sure’ => that is the only case I know of too, but we'll have to check the sources of libICU to be sure.
09:14:39 <wib_jonas> ‘<ais523> it would have simplified things if "Turkic dotless ı" and "Turkic dotted i" were different codepoints from "non-Turkic lowercase i"’ => I don't think so. The turkish i is one of those cases where there's no good solution, it's all tradeoffs. In particular if you did that, then you'd have problems when you copy a latin script proper
09:14:39 <wib_jonas> name into a turkish text and later try to uppercase it.
09:16:04 <wib_jonas> The only solution that might work is to go back in time and convince/bribe/force Kemal Atatürk to not start that convention, but this might be dangerous or impossible for time-travel-related reasons
09:20:36 <wib_jonas> ‘hmm, I don't think the user agent has the ability to tell the server what character encoding it wants the server to send’ => there's an Accept-Charset request header in HTTP/1.1, but I doubt it does much in practice
09:24:53 <wib_jonas> ‘I think the main options are "look at the locale environment variables (or OS equivalent)", "always use/assume UTF-8", and intermediate combinations of those’ => there's also automatically guessing from the (beginning of) input, and of course explicit command-line options or environment variables, with intermediate stuff between the four.
09:27:01 <wib_jonas> for example, I might write a script with a command-line option to set encoding of the input, a default that's either utf-8 or utf-16-le, and a warning if you keep the default utf-8 but the input is guessed to be utf-16 or vice versa, with the explicit input encoding command-line option silencing that warning.
09:32:06 <wib_jonas> ‘<ais523> I guess if you're sending images, you could send a QR code’ => I recently saw a large size ad poster where most of the poster was printed in high resolution, presmuably from a vector image, but it also contained a QR code that was blown up from a too small resolution bitmap that has antialiasing, and blowing it up to the huge size and
09:32:07 <wib_jonas> high resolution printing of the poster made those artifacts show up as various 0.005 m sized gray squares on most of the borders of a 0.03 m sized QR code grid
09:33:41 <wib_jonas> ‘<fizzie> ais523: FWIW, supplying a Chrome-like user agent changes a lot of other things too.’ => does that depend on just the user-agent, rather than other HTTP stuff such as other request headers?
09:33:53 <wib_jonas> and eg. whether you send a HTTP/2 request
09:37:18 <wib_jonas> "<ais523> the HTML spec actually says that the default encoding for unmarked webpages should be assumed based on the locale within which their web browser is running" => that was the state of art, yes, but with an encoding setting in the menu of the browser client
09:40:16 <wib_jonas> ‘<ais523> although, is "qqx" in the right namespace for private-use language codes?’ => yes, https://en.wikipedia.org/wiki/ISO_639-2#Reserved_for_local_use
09:43:52 <wib_jonas> oerjan: I regularly get a significant part of the spam in hungarian. Some of them in broken badly auto-translated hungarian, some in well-phrased hungarian. I don't find that too surprising.
09:44:18 <oerjan> wib_jonas: the surprise is that i'm not finnish or in finland hth
09:44:57 <wib_jonas> oerjan: yeah. I occasionally get spam in all sorts of random common languages. those are easier to discard because they're obviously spam.
09:45:53 <oerjan> also, that i used to receive finnish spam ridiculously often some years ago.
10:00:08 -!- oerjan has quit (Quit: Later).
11:01:03 -!- arseniiv has joined.
11:26:28 <nakilon> omg future is today
11:26:51 <nakilon> self-driving taxi in Moscow starts operating this autumn
11:27:38 <nakilon> (maybe correct idiom is "future is now")
11:33:07 <int-e> . o O ( yay, killer drones )
12:20:53 -!- Koen__ has joined.
12:23:40 -!- Koen_ has quit (Ping timeout: 260 seconds).
12:27:30 <nakilon> `prefix
12:27:31 <HackEso> prefix? No such file or directory
12:27:54 <nakilon> ?prefix
12:27:54 <lambdabot> Unknown command, try @list
12:36:46 <nakilon> `help
12:36:46 <HackEso> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch [<output-file>] <URL>" downloads files. Files saved to $HACKENV are persistent, and $HACKENV/bin is in $PATH. $HACKENV is a mercurial repository, "`revert <rev>" can be used to revert, https://hack.esolangs.org/repo/ to browse. $PWD ($HACKENV/tmp) is persistent but unversioned, /tmp is ephemeral.
12:37:24 <nakilon> is `run the same as ```?
12:37:37 <nakilon> ^help
12:37:37 <fungot> ^<lang> <code>; ^def <command> <lang> <code>; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool
12:38:58 <nakilon> ?wiki wiki
12:38:59 <lambdabot> https://wiki.haskell.org/wiki
12:39:03 <wib_jonas> nakilon: not quite. `run is a builtin that's hard or impossible to override by messing up commands in /hackenv/bin . it's probably redundant given that you can also do `/bin/bash -c but it can't hurt and will have to stay for compatibility.
12:39:03 <nakilon> ?gwiki wiki
12:39:04 <lambdabot> No Result Found.
12:39:35 <wib_jonas> nakilon: also ``` pipes the output through a stupid meme filter that we should somehow get rid of but I don't dare to just remove it from the command
12:39:49 <nakilon> meme filter?
12:40:02 <wib_jonas> nakilon: yes. it's called rnooodl or something.
12:40:11 <wib_jonas> check the source codes if you want to know
12:40:36 <wib_jonas> it annoys me because it means any lines that aren't terminated by a newline byte are eaten if the command times out:
12:40:40 <nakilon> `cbt ```
12:40:40 <HackEso> cat: '/hackenv/bin/```': No such file or directory
12:40:52 <wib_jonas> ``` echo foo; echo -n bar; sleep 9999
12:41:08 <wib_jonas> nakilon: try with one less backtick
12:41:15 <nakilon> `cbt ``
12:41:16 <HackEso> ​#!/bin/sh \ export LANG=C; exec bash -O extglob -c "$@" | rnooodl
12:41:21 <wib_jonas> the first one is just the invocation character for HackEso\
12:41:24 <nakilon> oh, sure
12:41:27 <nakilon> one is prepended
12:41:27 <HackEso> No output.
12:41:38 <wib_jonas> um
12:41:48 <wib_jonas> why doesn't that show foo?
12:41:56 <wib_jonas> maybe it's even more buffered than I thought?
12:41:58 <nakilon> `cbt rnooodl
12:42:00 <HackEso> perl -pe 's/([Nn])ooodl/"$1@{[o x(3+rand 7)]}dl"/ge'
12:42:09 <wib_jonas> `/bin/sh -cecho foo; echo -n bar; sleep 9999
12:42:10 <HackEso> ​/bin/sh: 0: Illegal option -h
12:42:22 <wib_jonas> oh yeah, that's why you can't do that
12:42:26 <wib_jonas> `run echo foo; echo -n bar; sleep 9999
12:43:02 <HackEso> foo \ bar
12:43:02 <wib_jonas> `perl -eprint("one\ntwo");sleep 9999
12:43:19 <nakilon> can't set no buffer for perl cmd?
12:43:33 <HackEso> No output.
12:43:52 <wib_jonas> nakilon: that wouldn't be enough. you'd have to implement it properly to only buffer one character, and even that only if it's the "d" at the right context
12:44:59 <wib_jonas> that would be possible but so far I was lazy to do it
12:45:08 <wib_jonas> mostly because I hate rnooodl even besides the buffering
12:46:33 <nakilon> compoundng commands here is a cool feature https://esolangs.org/wiki/Bfbot
12:47:28 <nakilon> not sure why this bot is in [People]
12:47:42 <nakilon> oh fungot too
12:47:42 <fungot> nakilon: also how can i know what you come up with to justify rolling my own... php witch i don't use it
12:48:19 <nakilon> fungot I thought you are b_jonas until I reached the php
12:48:19 <fungot> nakilon: is he a total fnord versions.
12:48:40 <wib_jonas> oh good
12:49:07 <wib_jonas> although "PHP! Witch! I don't use that" does sound kind of like me
12:51:29 <nakilon> why there is no php bot
12:52:31 <nakilon> I remember on Rusnet the main bot on #programming and all related channels was one written in Delphi
13:11:13 -!- oerjan has joined.
13:14:23 <oerjan> <nakilon> (maybe correct idiom is "future is now") <-- needs a "the" in front
13:16:43 <nakilon> thanks
13:17:31 <oerjan> `prefixes (i think you may have been looking for this)
13:17:33 <HackEso> Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ? or > , thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ , bfbot =, velik \.
13:17:50 <nakilon> exactly
13:17:55 <fizzie> There's also an implicit cat in all the commands, if memory serves as a way to ensure the standard output stream does not look like a terminal. (Some programs adapt their output format, and the argument was, output suitable for pipes is more likely to be output suitable for IRC.)
13:17:58 <nakilon> instead I went through wiki article
13:18:54 <nakilon> lambdabot is prefix squatter
13:19:47 <oerjan> technically it also squats :k and :t
13:20:27 <oerjan> as well as its own name in some cases
13:20:32 <oerjan> lambdabot, @run 2
13:20:33 <lambdabot> 2
13:21:05 <oerjan> but those are hard to do by accident and the list was getting too long
13:21:40 <oerjan> :k hm
13:21:41 <lambdabot> error: Not in scope: type variable ‘hm’
13:22:25 <oerjan> :k Monad
13:22:26 <lambdabot> (* -> *) -> Constraint
13:22:37 <fizzie> Full disclosure: I've not removed EgoBot's ! from that list as a sneaky plan to squat ! for "official" commands handled by the `esolangs` bot, in case such commands ever start to exist.
13:23:51 <oerjan> the bfjoust bots also use ! but only with specific commands following.
13:24:38 <oerjan> and it worked because all the bots using ! were silent if there's not a command match
13:24:45 <oerjan> oh and fungot too
13:24:46 <fungot> oerjan: i think that i aren t sarahbot are me? hm.
13:24:56 <oerjan> !bf ,[.,]!Hi
13:25:01 <oerjan> no wait
13:25:14 <oerjan> ^bf ,[.,]!Hi
13:25:15 <fungot> Hi
13:25:24 <oerjan> !logs
13:25:34 <oerjan> that one used to respond in private
13:25:40 <fizzie> fungot: Yeah, sarahbot isn't even a bot on this channel.
13:25:40 <fungot> fizzie: imagine this, means? completely just 1
13:25:42 <oerjan> by ... glogbot, i think
13:26:00 <fizzie> (I think sarahbot was from #scheme.)
13:26:42 <oerjan> well fungot is also silent on non-matching commands, that part was right
13:26:43 <fungot> oerjan: the chan serv answers to all comers at apple stores. :o fnord hours left before the next statement and write a bytechanger interpreter in asm, c, pascal, perl, pntr, refc, roma, and the
13:26:50 <oerjan> ^nosuchcommand
13:28:19 <nakilon> fungot how much is fnord hours?
13:28:20 <fungot> nakilon: anyone knows where i can find out what extras those contain.
13:29:39 <fizzie> Heh, I wasn't aware Apple stores have ChanServ in (on?) them.
13:36:25 -!- hendursa1 has quit (Quit: hendursa1).
13:38:29 -!- hendursaga has joined.
13:43:20 -!- wib_jonas has quit (Quit: Client closed).
13:52:12 -!- Koen__ has quit (Remote host closed the connection).
13:56:27 -!- Sgeo has joined.
13:58:57 -!- wib_jonas has joined.
13:59:24 <wib_jonas> perlbot prefixes
13:59:25 <perlbot> wib_jonas: Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ? or > , thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ , bfbot =, velik \.
14:34:01 <wib_jonas> `` TZ=Pacific/Auckland python3 -c '"Getting the current wallclock time in the local timezone and UTC."; import datetime as g; n = g.datetime.now; [print(t.strftime("%Y-%m-%dT%H:%M:%S%z %Z")) for t in [n().astimezone(), n(tz = g.timezone.utc)]];'
14:34:04 <HackEso> 2021-09-09T02:34:03+1200 NZST \ 2021-09-08T14:34:03+0000 UTC
14:34:19 <wib_jonas> ^ Python's datetime module is so nontrivial to use that I want to get these magic incantations to the channel log
14:35:04 <wib_jonas> the TZ override is there only to make this a better test, since otherwise HackEso default to UTC timezone
14:35:57 -!- sprock has quit (Ping timeout: 265 seconds).
14:41:59 <wib_jonas> by the way,
14:42:01 <wib_jonas> `` TZ=uWIw/Dtca/FlSM date +%Z # esoteric way to strip the part of a filename after the first slash
14:42:03 <HackEso> uWIw
14:43:00 <APic> Cool ☺
14:43:11 <wib_jonas> it doesn't quite work for all filenames
14:45:28 -!- dyeplexer has joined.
15:12:23 <nakilon> $ ruby -e '[Time.now, Time.now.getutc].each{ |n| puts n.strftime "%FT%T%z %Z" }'
15:12:23 <nakilon> 2021-09-08T18:11:32+0300 MSK / 2021-09-08T15:11:32+0000 UTC
15:13:06 <wib_jonas> `` ruby -e '[Time.now, Time.now.getutc].each{ |n| puts n.strftime "%FT%T%z %Z" }' # does that work in this version of ruby?
15:13:08 <HackEso> 2021-09-08T15:13:08+0000 UTC \ 2021-09-08T15:13:08+0000 UTC
15:13:20 <wib_jonas> `` TZ=Pacific/Auckland ruby -e '[Time.now, Time.now.getutc].each{ |n| puts n.strftime "%FT%T%z %Z" }' # does that work in this version of ruby?
15:13:21 <HackEso> 2021-09-09T03:13:21+1200 NZST \ 2021-09-08T15:13:21+0000 UTC
15:13:22 <nakilon> oh I forgot it's installed
15:14:31 <wib_jonas> `` TZ=Pacific/Auckland; for r in "" -u; do date $r +"%Y-%m-%dT%H:%M:%S%z %Z"; done
15:14:32 <HackEso> 2021-09-08T15:14:32+0000 UTC \ 2021-09-08T15:14:32+0000 UTC
15:14:42 <wib_jonas> `` export TZ=Pacific/Auckland; for r in "" -u; do date $r +"%Y-%m-%dT%H:%M:%S%z %Z"; done
15:14:43 <HackEso> 2021-09-09T03:14:42+1200 NZST \ 2021-09-08T15:14:43+0000 UTC
15:14:54 <wib_jonas> looks good
15:17:33 <nakilon> `` ruby -rtzinfo -e 't = TZInfo::Timezone.get("Pacific/Auckland").to_local Time.now; [t, t.getutc].each{ |n| puts n.strftime "%FT%T%z %Z" }'
15:17:34 <HackEso> ​/usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require': cannot load such file -- tzinfo (LoadError) \ from /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
15:18:07 <nakilon> this is the same just extracting timezone via standard gem tzinfo (that isn't installed))
15:18:47 <nakilon> so you could adjust timezone by a runtime var
15:30:01 <wib_jonas> `` TZ=Pacific/Auckland perl -e'use Date::Manip::Date; $b = Date::Manip::Date->new(); for $r ([],["setdate","now,UTC"]) { print $b->new("now",$r)->printf("%Y-%m-%dT%H:%M:%D%z %Z\n"); }'
15:30:08 <HackEso> 2021-09-09T03:30:09/09/21+1200 NZST \ 2021-09-09T03:30:09/09/21+0000 UTC
15:30:26 <wib_jonas> `` TZ=Pacific/Auckland perl -e'use Date::Manip::Date; $d = Date::Manip::Date->new("now"); for $_r (0,1) { print $d->printf("%Y-%m-%dT%H:%M:%D%z %Z\n"); $d->convert("UTC"); }'
15:30:28 <HackEso> 2021-09-09T03:30:09/09/21+1200 NZST \ 2021-09-08T15:30:09/08/21+0000 UTC