00:02:58 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds). 01:33:34 -!- FreeFull has quit. 02:35:16 -!- oerjan has joined. 03:06:18 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64500&oldid=64476 * A * (+1446) /* Talk page */ 03:08:42 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64501&oldid=64500 * A * (+282) 03:10:32 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64502&oldid=64501 * A * (+156) /* Computational class */ 03:14:31 [[Varnand]] N https://esolangs.org/w/index.php?oldid=64503 * DoggyDogWhirl * (+2387) 03:14:34 [[Varnand/Python Implementation]] N https://esolangs.org/w/index.php?oldid=64504 * DoggyDogWhirl * (+1583) 03:19:26 [[User:DoggyDogWhirl]] M https://esolangs.org/w/index.php?diff=64505&oldid=64272 * DoggyDogWhirl * (+15) 03:22:12 [[Language list]] M https://esolangs.org/w/index.php?diff=64506&oldid=64498 * DoggyDogWhirl * (+14) 03:27:45 [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=64507&oldid=64382 * FlyHamsterPaul * (+229) 03:28:05 [[BWTFN]] N https://esolangs.org/w/index.php?oldid=64508 * FlyHamsterPaul * (+1473) Created page with "'''BWTFN''', or '''Because Why The Fuck Not''', is an esolang inspired off of the [[CopyPasta_Language|CopyPasta]] language created in 2019. BWTFN is only used for printing te..." 03:31:58 [[User talk:A]] https://esolangs.org/w/index.php?diff=64509&oldid=64502 * Areallycoolusername * (+205) 03:36:49 [[Esoteric algorithm]] https://esolangs.org/w/index.php?diff=64510&oldid=64482 * Areallycoolusername * (+4) /* Example */ 03:40:43 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64511&oldid=64509 * A * (+322) /* Char language */ I have changed my signature. 04:01:42 -!- adu has left. 04:16:29 where's the repository? <-- fizzie might want to change the link at the end of `help 04:16:35 `help 04:16:36 Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch [] " downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert " can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/ 04:16:48 `url 04:16:49 https://hack.esolangs.org/repo/ 04:23:54 `! brachylog "test"w⊥82{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥} 04:26:12 test 04:32:39 -!- mniip has quit (Quit: This page is intentionally left blank.). 04:33:14 `` interp 'brachylog "test"w⊥82{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' ​% halt \ test 04:33:22 thought so 04:33:40 although where is that % from 04:33:46 % halt 04:34:04 `` interp 'brachylog "test"w⊥82{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' 04:35:03 @tell ais523 your slow brachylog program was simply hitting the HackEso "feature" where it waits for a timeout if you attempt to read from its stdin 04:35:03 Consider it noted. 04:36:12 No output. 04:59:57 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64512&oldid=64511 * A * (-1083) /* Talk page */ 07:07:05 -!- user24 has joined. 07:17:13 -!- Lord_of_Life has quit (Ping timeout: 246 seconds). 07:20:11 -!- Lord_of_Life has joined. 07:26:55 -!- AnotherTest has joined. 07:36:16 -!- user24 has quit (Quit: Leaving). 07:45:35 -!- Sgeo_ has joined. 07:48:37 -!- Sgeo__ has quit (Ping timeout: 258 seconds). 07:55:28 -!- Phantom_Hoover has joined. 07:56:01 -!- Phantom_Hoover has quit (Client Quit). 09:01:53 -!- atslash has joined. 09:02:20 -!- sftp has quit (Ping timeout: 272 seconds). 09:37:49 -!- wob_jonas has joined. 09:38:40 oerjan: interesting. though I don't know why it would read stdin when it doesn't in the simple case of the program that just prints a constant string. is it waiting for a more prompt? 09:52:24 wob_jonas: since ais523 said brachylog is supposedly interactive, i suspect it is, and that's what gives the % halt when it gets /dev/null instead. 09:53:15 not that i know brachylog 09:59:32 How do I make an URL that refers to a PDF with a fragment part pointing to a specific page? I thought I just had to add a hash mark and the page number in decimal, but that doesn't seem to work. 09:59:44 I want to give a link to page 17 of an article for convenience 10:09:09 -!- oerjan has quit (Quit: Later). 10:37:50 wob_jonas: does #page=17 work? 10:38:18 let me see 10:38:33 Works for me in Firefox and Chrome 10:39:05 Taneb: yes, that does work\ 10:39:08 thanks 10:39:25 hmm, should I add that to a wisdom? I won't remember that syntax otherwise 10:39:37 `? pdf 10:39:38 PDF stands for Pretty Depressing Format. 10:39:39 `? pdf 10:39:40 PDF stands for Pretty Depressing Format. 10:39:42 `? wisdom.pdf 10:39:43 Nicely formatted classical wisdoms and quotes book at https://www.dropbox.com/s/fyhqyvy3i8oh25m/wisdom.pdf 10:40:04 ^ nah, that's not actually a pdf 10:40:08 it's a fancy HTML page 10:40:25 ``` grep -ERi pdf wisdom 10:40:27 wisdom/pdf:PDF stands for Pretty Depressing Format. \ wisdom/wisdomme:wisdomme is a PDF that may be in the topic. boily is the one who compiles it. See `? wisdom.pdf \ wisdom/wisdom.pdf:Nicely formatted classical wisdoms and quotes book at https://www.dropbox.com/s/fyhqyvy3i8oh25m/wisdom.pdf 11:04:00 [[Blue Tomato]] N https://esolangs.org/w/index.php?oldid=64513 * Jabutosama * (+3519) Created page with "Blue tomato (BT) is an art programming language concepted by [[user:Jabutosama]]. The language is based around around giving more or less surreal art to very specifically teac..." 11:22:01 Ah ah ah is one of the rare customary american units of measurement that happens to fit SI units exactly. One ah ah ah is equal to 1. 11:43:52 -!- shotover has quit (Remote host closed the connection). 11:48:32 -!- howlands has joined. 12:04:32 -!- mniip has joined. 12:17:56 -!- arseniiv has joined. 12:24:35 [[Arch]] https://esolangs.org/w/index.php?diff=64514&oldid=64493 * Areallycoolusername * (+178) /* Cells & Split */ 12:29:59 [[User talk:A]] https://esolangs.org/w/index.php?diff=64515&oldid=64512 * Areallycoolusername * (+786) /* Char language */ 12:30:26 [[User talk:A]] https://esolangs.org/w/index.php?diff=64516&oldid=64515 * Areallycoolusername * (+9) /* Char language */ 12:30:54 [[User talk:A]] https://esolangs.org/w/index.php?diff=64517&oldid=64516 * Areallycoolusername * (-2) /* Char language */ 12:31:10 [[User talk:A]] https://esolangs.org/w/index.php?diff=64518&oldid=64517 * Areallycoolusername * (+3) /* Char language */ 12:32:11 [[User talk:A]] https://esolangs.org/w/index.php?diff=64519&oldid=64518 * Areallycoolusername * (-8) /* Char language */ 12:32:39 [[User talk:A]] https://esolangs.org/w/index.php?diff=64520&oldid=64519 * Areallycoolusername * (+118) /* Char language */ 12:44:56 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64521&oldid=64520 * A * (+34) /* Char language */ Thank you, and a memory fix first 12:47:39 -!- sftp has joined. 12:48:46 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64522&oldid=64521 * A * (+387) /* Char language */ 12:54:23 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64523&oldid=64522 * A * (+640) /* Char language */ 12:56:55 -!- howlands has quit (Quit: sort of). 12:58:24 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64524&oldid=64523 * A * (+190) /* Commands */ 13:00:45 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64525&oldid=64524 * A * (+75) /* Commands */ 13:08:08 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64526&oldid=64525 * A * (+132) /* Char language */ More verbose! MWHAHAHA 13:13:57 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64527&oldid=64526 * A * (+15) /* Char language */ not TC of course 13:18:37 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64528&oldid=64527 * A * (+232) /* Char language */ 13:24:19 -!- wob_jonas has quit (Remote host closed the connection). 13:24:25 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64529&oldid=64528 * A * (+217) /* Char language */ 13:39:00 -!- xkapastel has joined. 14:02:09 [[User talk:A]] M https://esolangs.org/w/index.php?diff=64530&oldid=64529 * A * (-145) 14:30:03 [[Char]] N https://esolangs.org/w/index.php?oldid=64531 * Areallycoolusername * (+4040) Created page with "'''Char''' is an [[esoteric programming language]] made by [[User: A]]. It's made to be the first [[Arch]]-based programming language. == Specifics == Char utilizes an arch t..." 14:31:37 [[Char]] https://esolangs.org/w/index.php?diff=64532&oldid=64531 * Areallycoolusername * (+47) 14:31:52 -!- wob_jonas has joined. 14:32:31 -!- wob_jonas has set topic: IOCCC winners are announced; source code release planned in the past | Welcome to the international center for esoteric programming language design, development, and deployment! | https://esolangs.org | logs: https://esolangs.org/logs/ http://codu.org/logs/_esoteric/ http://tunes.org/~nef/logs/esoteric/?C=M;O=D. 14:32:47 hmm no, that's not the right way to phrase it 14:34:22 [[Arch]] https://esolangs.org/w/index.php?diff=64533&oldid=64514 * Areallycoolusername * (-19) /* Languages */ 14:35:05 [[Arch]] https://esolangs.org/w/index.php?diff=64534&oldid=64533 * Areallycoolusername * (+74) /* Languages */ 14:35:51 [[Language list]] https://esolangs.org/w/index.php?diff=64535&oldid=64506 * Areallycoolusername * (+11) /* C */ 14:36:23 -!- wob_jonas has set topic: IOCCC winners are announced; source code release planned by now | Welcome to the international center for esoteric programming language design, development, and deployment! | https://esolangs.org | logs: https://esolangs.org/logs/ http://codu.org/logs/_esoteric/ http://tunes.org/~nef/logs/esoteric/?C=M;O=D. 14:39:38 -!- Sgeo__ has joined. 14:43:04 -!- Sgeo_ has quit (Ping timeout: 272 seconds). 14:51:12 [[Varnand]] M https://esolangs.org/w/index.php?diff=64536&oldid=64503 * DoggyDogWhirl * (+19) 15:07:14 -!- heroux has quit (Read error: Connection reset by peer). 15:07:24 -!- heroux has joined. 15:13:10 -!- atslash has quit (Read error: Connection reset by peer). 15:14:03 -!- atslash has joined. 15:14:42 [[Special:Log/newusers]] create * Sec-iiiso * New user account 15:26:28 -!- wob_jonas has quit (Remote host closed the connection). 15:55:08 -!- Sgeo__ has quit (Read error: Connection reset by peer). 15:55:34 -!- Sgeo__ has joined. 16:05:04 -!- Sgeo_ has joined. 16:08:10 -!- Sgeo__ has quit (Ping timeout: 246 seconds). 16:47:24 -!- b_jonas has joined. 17:07:07 -!- heroux has quit (Read error: Connection reset by peer). 17:07:41 -!- heroux has joined. 17:18:34 -!- Sgeo__ has joined. 17:20:59 -!- heroux has quit (Read error: Connection reset by peer). 17:21:28 -!- Sgeo_ has quit (Ping timeout: 244 seconds). 17:26:03 -!- heroux has joined. 17:32:07 -!- mniip has quit (Quit: This page is intentionally left blank.). 17:34:55 -!- heroux has quit (Read error: Connection reset by peer). 17:39:57 -!- heroux has joined. 17:40:37 -!- Phantom_Hoover has joined. 18:29:28 "early July 2019" has definitely ended, right? 18:29:46 I think it only ends in mid-August. 18:31:20 shachaf: which USB-C laptop charger do you use? 18:31:22 hmm 18:31:32 b_jonas: I would not say "definitely". 18:31:38 I'm considering getting a single charger for my backpack for both laptop and phone, but I want one that's compact 18:32:14 laptop refuses to charge on 50W 18:32:19 I think I want 65 18:32:50 USB-C laptop charger? what the... don't we still live in a world where laptop charger plugs are coaxial, with incompatible random geometries, voltages, polarities, and voltage tolerances, so you can never be sure that an off-brand charger won't fry your laptop motherboard and lose the warranty, even if it mechanically fits in the socket? 18:33:10 effectively random that is. there are standards, but there are too many of them. 18:33:43 b_jonas: But I would usually understand it to mean the first 10 days of a month; after that point, the notion becomes increasingly less applicable. 18:34:34 int-e: I assumed it would mean the first half of July, but gave them a day of doubt just in case they're on the -1200 timezone pacific islands 18:34:57 b_jonas: mostly yes :( 18:35:03 b_jonas: but some laptops can charge from USB-C 18:35:18 my X270 can do either USB-C or the usual square thinkpad charger port 18:35:24 (But of course it's July 4th today. ;-) ) 18:35:27 and July has 31 days, so the first half can be about 16 days long 18:35:42 but it's picky about USB-C, you can't just plug it into any random wall charger 18:35:43 https://www.timeanddate.com/calendar/?country=23 <-- lovely. 18:35:45 it may require the 20V mode 18:36:32 not sure if you know how USB-PD works 18:37:31 int-e: no way. they're the IO*C*CC, they insist on accepting only C programs, not programs in other languages, and the C standard library has only the localtime/timelocal functions which work only with the gregorian calendar 18:37:44 although... 18:37:53 yeah, we can take that as an excuse: 18:38:13 kmc: I first bought a cheap USB-PD charger and it was bad. 18:38:19 Then I bought the one from Apple and it was fine. 18:38:21 the localtime function allows you to carry stuff from out of range lower fields to higher fields, to make it easy to do date arithmetic with, 18:38:29 and the IOCCC rules have in fact used that in the past: 18:38:38 Some time later I bought anther cheap one and it was also fine. 18:38:55 `? Gregor 18:38:56 Gregor took forty cakes. He took 40 cakes. That's as many as four tens. And that's terrible. 18:39:06 No mention of a calendar. 18:39:32 kmc: Apparently this is the one I'm using that works OK: https://www.amazon.com/Genius-Charger-Extension-Overheating-Warranty/dp/B07KCTKKFR 18:39:45 thanks 18:39:53 or haven't they? I seem to remember they have, but now I can't find the reference 18:39:56 kmc: Keep in mind there are several hundred kinds of type-C cables and only one of them is compatible with your charger and laptop. 18:40:01 is that so 18:40:13 If you're lucky. 18:40:18 it is scow 18:41:03 So Elon Musk has a new company, "Neuralink", for brain implants. Too bad "The Boring Company" was already taken... 18:41:12 b_jonas: the charger and device negotiate a voltage up to 20V and a current up to 5A 18:41:18 I think they also sense what the cable is capable of 18:41:19 not sure 18:41:44 but yeah the brick I have right now only goes up to 9V which is probably why the laptop won't charge 18:42:06 one scow fact is that my laptop refuses to bios-update on usb power 18:42:14 :( 18:42:15 because it's not 130W or whatever 18:43:15 shachaf: I do have a brick that can charge my laptop from 12V power 18:43:17 it's exciting 18:43:21 maybe I'm just bad at datetime calculations and assumed that some date I read somewhere had an out of range field without checking it 18:43:24 anyway the point is that cables make a difference with type-c, and also they all look identical, so you gotta look it up or something 18:43:45 kmc: bricks are also good for charging cats 18:43:50 they are solar-powered 18:43:57 What kind of voltage do flash roms need to be programmed? 5V? More? 18:44:29 lol 18:44:31 int-e: modern ones don't require more than the operating Vcc, I think 18:45:45 Obviously the answer to that question is irrelevant. 18:45:55 It's just Dell being scow for Dell reasons. 18:46:22 shachaf: I think USB-D should be hermaphroditic, like Powerpole 18:49:18 shachaf: Dell in the infamous sense where if you order replacement screws from them, they send you six tiny screws each individually packaged in six huge boxes respectively? 18:49:38 I don't know? 19:04:16 -!- MDead_ has quit (Quit: Going offline, see ya! (www.adiirc.com)). 19:19:22 -!- Lord_of_Life_ has joined. 19:19:47 -!- Lord_of_Life has quit (Ping timeout: 244 seconds). 19:20:35 -!- Lord_of_Life_ has changed nick to Lord_of_Life. 19:22:07 I was trying to think of a certain sci-fi astronomical arrangement between a planet and a double sun moving in a strange pattern, but it seems it's gravitationally impossible. 19:22:57 What I wanted is a double sun orbiting each other very quickly, and a planet that orbits the two of them slowly, but at the same the planet isn't much father away from them than the two suns from each other. 19:23:39 If the arrangement exists, it needs a more magical reason, such as for Discworld. 19:23:54 what is the computational complexity of orbital mechanics 19:24:10 or not complexity, but rather computability class 19:24:14 meaning, what kinds of algorithms can you implement as a n-body gravitational system 19:24:31 the fact that it's continuous will place limits 19:25:06 kmc: I won't try to answer that. I just totally confused myself with a different computational complexity question. 19:32:08 kmc; my MacBook Pro will happily charge (v slowly) from 5v 19:34:10 the X270 won't 19:34:12 because it's a butt 19:34:22 I also bought a USB-C power anal-yzer 19:34:28 so I can see what my devices are actually using 20:00:58 kmc: is that a passive thing that only measures power, or an active thing that interacts with the USB negotiation to tell you the voltage used too? 20:01:17 I don't think the cables contain any electronics; I think it probably senses the voltage drop of the cable 20:01:21 but also I'm not sure that's a thing at all 20:02:05 oh, that could work 20:02:08 er 20:02:11 wait, sorry 20:02:20 I thought you were back to talking about the cable quality 20:02:25 the meter is a man in the middle 20:02:31 I think it does not interfere with the negotiation 20:02:35 it probably just measuers the voltage 20:02:50 but I'm sure you can buy more advanced (read: expensive) devices that also allow you to mess with the negotiation 20:02:50 meter? i just met 'er! 20:03:04 and also programmable loads and power supplies that you can configure for any set of capabilities 20:03:07 it might be fun to own such things 20:03:37 and then there are those "USB condoms" 20:03:40 which disconnect the data lines 20:03:46 I'm not sure if that interferes with USB-PD negotiation 20:04:41 I think there are power only cables you can get 20:04:42 idk 20:05:42 I guess it could be passive and yet measure everything. It just needs to put an ideal infinite resistance voltage meter between the wires of the cable, and an ideal zero impedance current meter interrupting the wires, and some magical zero resistance gold coated sockets with superconducting wires. 20:06:42 It just needs a separate power source so it doesn't leach the USB itself for power. 20:08:17 -!- FreeFull has joined. 20:08:22 yes but of course it has none of those things 20:08:29 and is Good Enough ™ 20:08:40 it's probably like a standard multimeter 20:09:11 voltmeter 10 Mohm resistance in parallel to the load, ammeter ~1 mohm resistance in series to the load 20:09:22 I do have some Powerpole voltage-current meters that can use an external supply 20:09:32 in addition to being more accurate, this allows them to measure a wider range of voltages 20:09:38 those things are very useful 20:10:10 1 milliohm? that's nice 20:10:36 I'm not sure, but probably on that order 20:12:23 I just measured the shunt resistor inside one of my meters as 0.1 ohms 20:12:27 but that's the lowest the other meter can read 20:12:30 and it's probably lower than that 20:12:56 for high current shunts a common size is to drop 75 mV at full current 20:13:05 kmc: sure, but isn't that only the ohmic resistance? can the capacitance bother the autodetection mechanism or signaling between the laptop and charger? 20:13:08 so a 100A max shunt would have a resistance of 0.75 mohm 20:13:32 I don't really know, I don't understand electric engineering 20:13:39 we have other people at this company who understand it though 20:13:52 they talk in crazy jargon 20:13:57 b_jonas: if it violates the USB spec for the data lines then yes 20:13:59 otherwise no 20:14:03 because the negotiation is digital 20:14:20 if the meter is poorly made it may prevent USB 3 speeds from working 20:14:26 I don't know if the port will automatically downgrade to 2 20:14:37 I don't mean the signals for negotiation, but for autodetecting the cable quality 20:15:21 oh, USB3 is a good point, does its extra wires help transmit more current? 20:16:13 I don't know how USB works, it's magic 20:16:25 I am not certain that autodetecting cable quality is even a thing 20:16:29 I'm not sure where I got that idea 20:16:43 ok 20:16:56 I don't think USB-C has any additional power wires 20:17:09 but a cable designed for 5A had better have some reasonably thick wires 20:17:28 as for capacitance, USB3 is so fast that it's essentially a microwave-frequency transmission line 20:17:33 better wires in general, they're not restricted to power. 20:17:33 so it does need precisely controlled impedance 20:17:38 mhm 20:18:00 similarly, the twist in ethernet cables matters more at higher speeds 20:18:19 and yes, USB3 is so fast you can basically transmit digital video signals to your monitor through it 20:18:21 Cat7 has very tight tolerances on the twist geometry 20:19:00 b_jonas: yeah 20:19:06 b_jonas: you can have an external video card connected by USB3 20:19:07 and also 20:19:09 there are laptop dockers that use just two USB connectors plus two thick power connectors, and you can transmit data to two external monitors plus high speed network plus external solid state disks through them 20:19:13 it seems impossible 20:19:34 you can configure a USB-C port to carry HDMI or DisplayPort signals from an internal graphics card 20:19:37 https://en.wikipedia.org/wiki/USB-C#Alternate_Mode_partner_specifications 20:19:41 it is pretty fancy 20:20:06 fun fact: USB3 cables have a tight enough tolerance that you can run PCIe signals through them, at least on short distances 20:20:22 this is not in any way supported by the spec, it is just a repurposing of the cables 20:20:33 the laptop I use at work is like that, although I only transmit laptop power plus data for one monitor plus not too fast network through it, no disk 20:20:35 but it's popular with crypto miners 20:20:48 as a way to get lots of video cards plugged into one motherbord 20:21:29 at fry's I saw a mobo with 19 PCIe x1 slots on it 20:21:37 yes, 19 20:21:51 obviously you cannot physically fit that many cards on the board without risers 20:22:18 huh? why do you need a fast connection for that? don't they put separate built-in RAM onto each video card, so for crypto mining (as opposed to, say, gaming) you don't need much data throughput or latency between the motherboard and video card? 20:22:26 and it has *three* ATX motherboard connectors 20:22:32 https://www.asus.com/us/Motherboards/B250-MINING-EXPERT/ 20:22:53 also can't you put all that stuff into a single big video card that fits into two adjacent pcie sockets? 20:22:56 and the best part? this thing was on blowout sale for $35. 20:23:12 shovels and pickaxes 90% off! 20:23:22 b_jonas: we are takling 19 big video cards 20:23:36 have you ever seen a GPU mining rig 20:23:48 here's a small one https://cryptosrus.com/wp-content/uploads/2017/06/mining-rig-1280x640.jpg 20:23:53 hey 20:24:15 those little boards plugged into the mobo with USB cables coming out vertically are the PCIe risers 20:24:46 mining does not require much bandwidth, so PCIe x1 is fine 20:24:58 the big card can have separate power cables, going to it directly without the motherboard involved, and as much cooling as you can physically manage 20:25:05 I don't see why it needs much motherboard connection 20:25:11 I've heard of people cutting a notch out of the back of an x1 slot so they can fit an x16 card in it 20:25:20 or cutting off most of the GPU's PCIe connector 20:25:21 and this works, apparently 20:25:27 do you need low latency connection to the motherboard? 20:25:35 b_jonas: I think it is still allowed to draw a fair amount of current from the PCIe slot itself 20:25:38 b_jonas: no 20:25:58 the cards basically operate on their own until they discover a solution for a particular block 20:26:13 which does not happen very often 20:26:32 kmc: looks nice, it's sort of like those servers with lots of high capacity hard disks connected to them, only you need more air gaps for heating 20:26:35 um 20:26:37 cooling 20:26:37 I mean cooling 20:26:41 the heating comes from the power cables 20:26:48 for heating the environment 20:26:53 yeah 20:27:17 and you need a powerful air conditioner to get the heat out of the room itself 20:27:23 my friend has a painting at her apartment, not sure who made it, of a melting glacier with a huge (skyscraper-size) mining rig in front of it 20:28:11 I mean, I'm paranoid and put air gaps between my disk drives, but I only have three in my computer right now, plus a dvd drive 20:28:34 if you have good case airflow then you shouldn't need big gaps 20:28:38 I use one of these little metal extenders to be able to put a HDD to a 5 inch wide space 20:28:42 mm 20:28:43 those are good 20:28:49 I don't need big gaps, but there's enough space in the box to have it, so why not 20:28:53 I don't lose anything by it 20:28:58 yeah 20:29:08 it's not like I have a big video card taking up the space 20:29:22 also, this box is ancient and I should buy lots of new hardware 20:29:57 and start looking for a new camera too, because the warranty of the current one expires in a week and I'm getting more and more certain that it *knows* and deliberately times its death to right after that 20:30:26 so that if I took it to repairs within the warranty, I couldn't prove that there's anything wrong, but the motor for the lens will give up right after 20:30:59 but this compact camera has served me really well for three years, I enjoy it, so I might stick to the Panasonic brand 20:39:31 Also I have to process and upload some photos that I made with it. 20:41:23 Lots of pictures in fact. 20:59:48 has oren disappeared? it seems like he hasn't been in the channel (under this name or the backslash one) for a while 21:02:31 I need to get a bunch of stuff fixed on my laptop before the warranty runs out 21:02:37 I have on site accidental damage coverage 21:02:46 I am not that happy with the build quality on this ThinkPad X270 21:03:13 it's disappointing even by the standard of the post-IBM standards 21:03:21 I broke the keyboard twice with tiny amounts of water, broke the screen once 21:03:29 broke the internal speaker *and* the headphone jack, separately 21:04:06 I broke my non-laptop keyboard with colored water too. I bought a new identical one. I'm more careful about letting drinks close to it now. 21:04:22 this was like residual water on my hands after washing them 21:04:33 every other thinkpad i've owned, it would not be a problem to get a few drops othe keyobard 21:04:50 with this one it messed things up even after letting it dry 21:04:52 :( 21:04:57 Mind wasn't, I actually spilled a significant amount in it, like perhaps 50 grams or something. 21:05:08 Yeah at the very least it should recover after drying out :/ 21:05:18 cathy spilled a whole cup of tea into her X201i 21:05:22 and it was fine in the end 21:05:25 let it dry for like a week 21:05:43 I use a cheaper keyboard at work. That one claims to be waterproof. 21:05:44 The best keyboard killer I know is Coca Cola (ideally with sugar). 21:05:52 I haven't tested yet. 21:05:54 I don't think I've ever had that misfortune 21:06:10 the speakers are sort of my fault 21:06:27 i dropped the laptop off the side of the bed in a fit of passion 21:06:29 I've destroyed 2 keyboards that way. But that was ages ago. 21:06:49 I got coffee in one of my external keyboards and fucked it up 21:06:58 but I was able to open it up, clean the board with isopropyl alcohol 21:07:01 and now it works again \o/ 21:08:31 int-e: I see. I haven't tried spilling that into keyboard yet. 21:09:15 I won't try either 21:10:22 kmc: what additives did the coffee have? 21:10:29 none 21:10:35 as in, sugar, cream, etc 21:10:51 I'm asking because int-e says the sugar might matter 21:11:00 I like coffee as black as my existential despair 21:11:08 it might, yeah 21:11:10 ouch, that's heavy 21:11:16 ithink it was espresso actually 21:12:30 I don't drink coffee. In the office, lots of people drink coffee of course. The entire IT industry can grind into a halt when the coffee machine doesn't work or when we run out of sugar or milk. 21:12:40 yep 21:12:48 I think maybe I should try quitting caffeine just to see what it's like 21:12:54 cause I've consumed a lot of caffeine for a very long time 21:13:16 oh, I don't say that I don't drink caffeine. I drink coke actually. 21:13:24 With sweeteners rather than sugar these days. 21:13:37 yeah 21:13:50 I drink coffee and diet soda and energy drinks 21:13:58 I have a sort of compulsion to eat/drink things 21:14:01 these things have no calories 21:14:11 yeah, I know 21:14:13 chewing gum too 21:14:45 water's pretyt good too 21:14:52 I have also been drinking diluted orange juice 21:14:56 it's tastier than it sounds 21:14:59 and pretty low calorie 21:16:30 b_jonas: sugar matters because in addition to the electrical problem (cola has acid, plenty of electrolytes there...) you get a mechanical one (stickiness). 21:16:58 int-e: yep, the plain water evaporates completely, but the sugar doesn't, and it keeps the water there more 21:17:25 but coke with sweeteners is still somewhat sticky, even if not as much as the one with sugar 21:18:34 I haven't tried that yet :) 21:19:19 I haven't spilled it to a computer either 21:19:30 I destroyed my phone with plain water too 21:29:55 :( 21:31:01 kmc: https://www.perlmonks.com/?node_id=1225327 has the story of my phone 21:31:28 oh, I should edit that to add that the bluetooth of the Cat is broken too 21:36:00 -!- AnotherTest has quit (Ping timeout: 272 seconds). 21:37:03 done 22:03:05 -!- ais523 has joined. 22:04:08 hi ais523. oerjan figured out what took time. 22:04:10 ooh, I guess what was happening is that the Brachylog compiler was falling through into the interactive swipl interpreter after running the code 22:04:17 `cat ibin/brachylog 22:04:17 ​#!/bin/sh \ echo "$1" > tmp/input.brachylog \ (cd interps/brachylog/brachylog/Brachylog-master/src; swipl -g 'run_from_file("../../../../../tmp/input.brachylog", _, _), halt' brachylog.pl) 22:04:34 but I don't understand why that happens for your triangular number program but not for the hello world program 22:04:37 …but only if it returns false, rather than returning true 22:04:50 the hello world program where I "commented out" the rest of the code with a return false returns false :-) 22:05:09 ah 22:05:16 but it's not just that 22:06:10 `! brachylog "QUeRHCOQ9j7V"w 22:06:12 QUeRHCOQ9j7V 22:06:17 ^ doesn't that return true? 22:06:25 yes, and it ran quickly 22:06:31 oh 22:06:37 so it's slow if it returns false? 22:06:43 yes 22:06:44 ok 22:06:57 so in that case, do you have a good way to fix this in your wrapper script? 22:07:09 `` sed -i 's/halt/write("\ntrue."), !, halt; write("\nfalse."), !, halt' -e ibin/brachylog 22:07:10 ​/bin/sed: can't read s/halt/write("\ntrue."), !, halt; write("\nfalse."), !, halt: No such file or directory 22:07:20 `` sed -i -e 's/halt/write("\ntrue."), !, halt; write("\nfalse."), !, halt' ibin/brachylog 22:07:20 ​/bin/sed: -e expression #1, char 60: unterminated `s' command 22:07:25 `` sed -i -e 's/halt/write("\ntrue."), !, halt; write("\nfalse."), !, halt/' ibin/brachylog 22:07:27 No output. 22:07:40 `! brachylog [2,2]= 22:07:41 ​ \ true. 22:07:48 `! brachylog [2,3]= 22:07:49 ​ \ false. 22:08:06 I made it print the program's return boolean, too 22:08:17 err, exit code boolean 22:08:33 brachylog doesn't have any way to write programs, only functions 22:08:46 so you need a wrapper to make a brachylog function into an entire program and there's more than one way to do it 22:09:22 the wrapper on TIO prints exit code as true/false by default, but has an option to print return value or even input instead (input is useful if you didn't specify it) 22:09:41 does halt quit the interpreter? 22:09:50 yes 22:09:55 `! brachylog 63{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w⊥} 22:09:56 ​[3,15,45][3,45,15][6,21,36][6,36,21][15,3,45][15,45,3][21,6,36][21,21,21][21,36,6][36,6,21][36,21,6][45,3,15][45,15,3] \ false. 22:10:12 the "false" here is because there are no more solutions 22:10:36 `! brachylog 81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w⊥} 22:10:47 ​[0,0,0][0,0,1][0,1,0][1,0,0][0,1,1][1,0,1][1,1,0][0,0,3][0,3,0][1,1,1][3,0,0][0,1,3][0,3,1][1,0,3][1,3,0][3,0,1][3,1,0][1,1,3][1,3,1][3,1,1][0,0,6][0,3,3][0,6,0][3,0,3][3,3,0][6,0,0][0,1,6][0,6,1][1,0,6][1,3,3][1,6,0][3,1,3][3,3,1][6,0,1][6,1,0][1,1,6][1,6,1][6,1,1][0,3,6][0,6,3][3,0,6][3,3,3][3,6,0][6,0,3][6,3,0][0,0,10][0,10,0][1,3,6][1,6,3][3,1,6][3,6,1][6,1,3][6,3,1][10,0,0][0,1,10][0,10,1][1,0,10][1,10,0][10,0,1][10,1,0][0,6,6][1,1,10][1,10,1][3,3, 22:11:17 add the cut to make it print just one solution per sum? 22:11:36 oh right 22:11:48 `! brachylog 81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}!w⊥} 22:11:58 I think you can cut after the w too, to the same effect 22:11:58 ​[0,0,0][0,0,1][0,1,0][1,0,0][0,1,1][1,0,1][1,1,0][0,0,3][0,3,0][1,1,1][3,0,0][0,1,3][0,3,1][1,0,3][1,3,0][3,0,1][3,1,0][1,1,3][1,3,1][3,1,1][0,0,6][0,3,3][0,6,0][3,0,3][3,3,0][6,0,0][0,1,6][0,6,1][1,0,6][1,3,3][1,6,0][3,1,3][3,3,1][6,0,1][6,1,0][1,1,6][1,6,1][6,1,1][0,3,6][0,6,3][3,0,6][3,3,3][3,6,0][6,0,3][6,3,0][0,0,10][0,10,0][1,3,6][1,6,3][3,1,6][3,6,1][6,1,3][6,3,1][10,0,0][0,1,10][0,10,1][1,0,10][1,10,0][10,0,1][10,1,0][0,6,6][1,1,10][1,10,1][3,3, 22:12:14 nope, /have/ to cut after, that position is before the labelise :-) 22:12:15 nope, didn't work 22:12:17 `! brachylog 81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥} 22:12:19 ​[0,0,0][0,0,1][0,1,1][0,0,3][0,1,3][1,1,3][0,0,6][0,1,6][1,1,6][0,3,6][0,0,10][0,1,10][0,6,6][0,3,10][1,3,10][0,0,15][0,1,15][1,1,15][0,3,15][1,3,15][0,10,10][0,0,21][0,1,21][1,1,21][0,3,21][0,10,15][1,10,15][0,6,21][0,0,28][0,1,28][0,15,15][0,3,28][1,3,28][3,15,15][0,6,28][1,6,28][0,0,36][0,1,36][0,10,28][0,3,36][1,3,36][3,10,28][0,6,36][0,15,28][1,15,28][0,0,45][0,1,45][1,1,45][0,3,45][0,21,28][1,21,28][0,6,45][1,6,45][10,15,28][3,6,45][0,0,55][0,1,55 22:12:23 better 22:12:24 labelise rules are the worst thing about Brachylog 22:12:53 because you need to know way too much about how the "derive an algorithm to meet the spec you give" works internally to be able to labelise correctly 22:13:49 ``` \! brachylog '81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' | perl -e "local $/; print substr ,200" 22:13:50 ERROR: Prolog initialisation failed: \ ERROR: brachylog_main/4: Undefined procedure: default/0 22:14:12 ``` \! brachylog '81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' | perl -e 'local $/; print substr ,200' 22:14:14 ERROR: Prolog initialisation failed: \ ERROR: brachylog_main/4: Undefined procedure: default/0 22:14:35 ``` perl -e 'print "foo!bar"' 22:14:35 foo!bar 22:14:46 hmm 22:14:54 ``` \! brachylog '81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' 22:14:55 ERROR: Prolog initialisation failed: \ ERROR: brachylog_main/4: Undefined procedure: default/0 22:15:05 ``` \! 'brachylog 81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' 22:15:06 Warning: '../../../../../tmp/input.brachylog':1:4: Illegal multibyte Sequence \ Warning: '../../../../../tmp/input.brachylog':1:5: Illegal multibyte Sequence \ Warning: '../../../../../tmp/input.brachylog':1:6: Illegal multibyte Sequence \ Warning: '../../../../../tmp/input.brachylog':1:7: Illegal multibyte Sequence \ Warning: '../../../../../tmp/input.brachylog':1:8: Illegal multibyte Sequence \ Warning: '../../../../../tmp/input.brachylog':1:9: Illegal m 22:15:21 what the heck does ! do? 22:15:33 I want to see the entries past the line cutoff 22:15:40 `` \! 'brachylog 81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' 22:15:42 ​[0,0,0][0,0,1][0,1,1][0,0,3][0,1,3][1,1,3][0,0,6][0,1,6][1,1,6][0,3,6][0,0,10][0,1,10][0,6,6][0,3,10][1,3,10][0,0,15][0,1,15][1,1,15][0,3,15][1,3,15][0,10,10][0,0,21][0,1,21][1,1,21][0,3,21][0,10,15][1,10,15][0,6,21][0,0,28][0,1,28][0,15,15][0,3,28][1,3,28][3,15,15][0,6,28][1,6,28][0,0,36][0,1,36][0,10,28][0,3,36][1,3,36][3,10,28][0,6,36][0,15,28][1,15,28][0,0,45][0,1,45][1,1,45][0,3,45][0,21,28][1,21,28][0,6,45][1,6,45][10,15,28][3,6,45][0,0,55][0,1,55 22:15:51 what 22:15:54 try using a prefix that doesn't randomly turn UTF-8 mode off? 22:15:59 ah 22:16:07 well that's backwards, but ok 22:16:08 I still don't see the point in ``` :-D 22:16:59 ``` LC_CTYPE=en_NZ.utf8 \! brachylog '81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' | perl -e 'local $/; print substr ,200' 22:17:00 ERROR: Prolog initialisation failed: \ ERROR: brachylog_main/4: Undefined procedure: default/0 22:17:06 ``` LANG=en_NZ.utf8 \! brachylog '81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' | perl -e 'local $/; print substr ,200' 22:17:08 ERROR: Prolog initialisation failed: \ ERROR: brachylog_main/4: Undefined procedure: default/0 22:17:11 `` locale 22:17:11 LANG=en_NZ.UTF-8 \ LANGUAGE= \ LC_CTYPE="en_NZ.UTF-8" \ LC_NUMERIC="en_NZ.UTF-8" \ LC_TIME="en_NZ.UTF-8" \ LC_COLLATE="en_NZ.UTF-8" \ LC_MONETARY="en_NZ.UTF-8" \ LC_MESSAGES="en_NZ.UTF-8" \ LC_PAPER="en_NZ.UTF-8" \ LC_NAME="en_NZ.UTF-8" \ LC_ADDRESS="en_NZ.UTF-8" \ LC_TELEPHONE="en_NZ.UTF-8" \ LC_MEASUREMENT="en_NZ.UTF-8" \ LC_IDENTIFICATION="en_NZ.UTF-8" \ LC_ALL= 22:17:19 you forgot the hyphen 22:17:20 ``` LANG=en_NZ.UTF-8 \! brachylog '81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' | perl -e 'local $/; print substr ,200' 22:17:22 ERROR: Prolog initialisation failed: \ ERROR: brachylog_main/4: Undefined procedure: default/0 22:17:39 `` \! brachylog '81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' | perl -e 'local $/; print substr ,200' 22:17:41 ``` LANG=en_NZ.UTF-8 locale 22:17:41 ERROR: Prolog initialisation failed: \ ERROR: brachylog_main/4: Undefined procedure: default/0 22:17:41 LANG=en_NZ.UTF-8 \ LANGUAGE= \ LC_CTYPE="en_NZ.UTF-8" \ LC_NUMERIC="en_NZ.UTF-8" \ LC_TIME="en_NZ.UTF-8" \ LC_COLLATE="en_NZ.UTF-8" \ LC_MONETARY="en_NZ.UTF-8" \ LC_MESSAGES="en_NZ.UTF-8" \ LC_PAPER="en_NZ.UTF-8" \ LC_NAME="en_NZ.UTF-8" \ LC_ADDRESS="en_NZ.UTF-8" \ LC_TELEPHONE="en_NZ.UTF-8" \ LC_MEASUREMENT="en_NZ.UTF-8" \ LC_IDENTIFICATION="en_NZ.UTF-8" \ LC_ALL= 22:18:10 `` \! brachylog '81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' | cat 22:18:12 it should be using LC_CTYPE to determine the program encoding, I think? 22:18:13 ERROR: Prolog initialisation failed: \ ERROR: brachylog_main/4: Undefined procedure: default/0 22:18:24 misplaced quote 22:18:31 `` \! 'brachylog 81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' | cat 22:18:34 ​[0,0,0][0,0,1][0,1,1][0,0,3][0,1,3][1,1,3][0,0,6][0,1,6][1,1,6][0,3,6][0,0,10][0,1,10][0,6,6][0,3,10][1,3,10][0,0,15][0,1,15][1,1,15][0,3,15][1,3,15][0,10,10][0,0,21][0,1,21][1,1,21][0,3,21][0,10,15][1,10,15][0,6,21][0,0,28][0,1,28][0,15,15][0,3,28][1,3,28][3,15,15][0,6,28][1,6,28][0,0,36][0,1,36][0,10,28][0,3,36][1,3,36][3,10,28][0,6,36][0,15,28][1,15,28][0,0,45][0,1,45][1,1,45][0,3,45][0,21,28][1,21,28][0,6,45][1,6,45][10,15,28][3,6,45][0,0,55][0,1,55 22:18:41 ``` LANG=en_NZ.UTF-8 \! 'brachylog 81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' | perl -e 'local $/; print substr ,200' 22:18:43 1,10,15][0,6,21][0,0,28][0,1,28][0,15,15][0,3,28][1,3,28][3,15,15][0,6,28][1,6,28][0,0,36][0,1,36][0,10,28][0,3,36][1,3,36][3,10,28][0,6,36][0,15,28][1,15,28][0,0,45][0,1,45][1,1,45][0,3,45][0,21,28][1,21,28][0,6,45][1,6,45][10,15,28][3,6,45][0,0,55][0,1,55][0,21,36][0,3,55][1,3,55][0,15,45][0,6,55][1,6,55][3,15,45][0,28,36][0,10,55][0,0,66][0,1,66][1,1,66][0,3,66][0,15,55][1,15,55][0,6,66][0,28,45][1,28,45][3,6,66][0,10,66][1,10,66][0,0,78][0,1,78][1,1,78 22:18:47 ! is confusing 22:19:07 it's because `! gets the language name and program as a single argument because that's how single ` works 22:19:09 so it splits them 22:19:13 yeah, I know 22:19:34 though we could make it also work with two arguments 22:20:30 `cat bin/! 22:20:31 ​#!/bin/bash \ CMD=`echo "$1" | cut -d' ' -f1` \ ARG="$(echo "$1" | cut -d' ' -f2-)" \ exec ibin/$CMD "$ARG" 22:20:42 ``` LANG=en_NZ.UTF-8 \! 'brachylog 81>ℕ≜{~{Ṫ{.∧ℕA+₁×↙A~×₂}ᵐ+}w!⊥}' | perl -e 'local $/; print substr ,400' 22:20:45 1,21,28][0,6,45][1,6,45][10,15,28][3,6,45][0,0,55][0,1,55][0,21,36][0,3,55][1,3,55][0,15,45][0,6,55][1,6,55][3,15,45][0,28,36][0,10,55][0,0,66][0,1,66][1,1,66][0,3,66][0,15,55][1,15,55][0,6,66][0,28,45][1,28,45][3,6,66][0,10,66][1,10,66][0,0,78][0,1,78][1,1,78] \ false. 22:20:53 seems to work correctly 22:21:03 nice 22:21:20 `` sed -i -e 's/ARG"$/ARG$2"' 'bin/!' 22:21:21 ​/bin/sed: -e expression #1, char 14: unterminated `s' command 22:21:24 `` sed -i -e 's/ARG"$/ARG$2"/' 'bin/!' 22:21:25 No output. 22:21:28 `cat bin/! 22:21:28 ​#!/bin/bash \ CMD=`echo "$1" | cut -d' ' -f1` \ ARG="$(echo "$1" | cut -d' ' -f2-)" \ exec ibin/$CMD "$ARG$2" 22:21:46 `! brachylog 2+₂! 22:21:47 ​ \ true. 22:21:48 err 22:21:50 `! brachylog 2+₂w 22:21:50 be careful, sed is also overridden in /hackenv/bin 22:21:51 4 \ true. 22:22:06 `` ! brachylog '2+₂w' 22:22:08 ​/hackenv/bin/`: line 5: brachylog: command not found 22:22:14 and be careful with sed, if you want to allow two arguments, then you also want to allow two arguments when the second one can have newlines and carriage returns 22:22:15 `` '!' brachylog '2+₂w' 22:22:16 ERROR: Prolog initialisation failed: \ ERROR: brachylog_main/4: Undefined procedure: default/0 22:22:40 not for brachylog in particular, but in some languages, newlines in the source are useful 22:22:55 I was only using sed for editing bin/! 22:23:06 the edit worked, but the resulting code doesn't do what I wanted 22:23:23 -!- ais523 has quit (Quit: sorry for my connection). 22:23:36 -!- ais523 has joined. 22:24:05 hmm 22:24:10 `` echo '' | cut -d' ' -f2- | wc 22:24:13 ​ 1 0 1 22:24:31 `` echo '' | cut -d' ' -f2- | od -t x1z 22:24:32 0000000 0a >.< \ 0000001 22:24:51 ooh, cut is appending a newline? 22:25:11 `` echo -n '' | cut -d' ' -f2- | od -t x1z 22:25:11 0000000 22:25:30 oh right 22:25:35 echo is appending a newline 22:25:45 that said... 22:25:45 but bin/! isn't using echo -n 22:25:55 `` echo a `echo b` c 22:25:56 a b c 22:26:03 `` sed -i -e 's/echo/echo -n/' 'bin/!' 22:26:04 ...the shell should strip the newline 22:26:09 No output. 22:26:23 `! brachylog 2+₂w 22:26:24 4 \ true. 22:26:32 `` '!' brachylog '2+₂w' 22:26:34 ERROR: Prolog initialisation failed: \ ERROR: brachylog_main/4: Undefined procedure: default/0 22:26:41 b_jonas: why do you use ``` rather than ``? 22:27:06 Wasn't ``` the one with the C locale... 22:27:15 `cat bin/`` 22:27:15 ​#!/bin/sh \ export LANG=C; exec bash -O extglob -c "$@" | rnooodl 22:27:30 `cat bin/` 22:27:30 ​#!/bin/bash \ cmd="${1-quote}" \ TIMEFORMAT="real: %lR, user: %lU, sys: %lS" \ shopt -s extglob globstar \ eval -- "$cmd" | rnooodl 22:27:32 ais523: C locale is more practical for some things. especially bash itself: makes it sort the results of wildcard extension asciibetically rather than locale-wise, and more importantly, make bracket hyphen range wildcards like [a-k] match in a sane asciibetic way 22:28:35 generally I use `` like I would use an actual shell 22:28:39 and I don't set my actual shell to C locale 22:28:44 ais523: if the brachylog interpreter depends on the locale, like the java compiler, but most programs use fancy characters that you won't find in smaller charsets, then you should consider making the wrapper set the LC_CTYPE explicitly 22:29:42 b_jonas: the brachylog interpreter uses the locale in order to interpret what encoding the input is in, which is correct 22:29:59 ais523: I set LC_CTYPE to an utf-8 locale, but the other locale facets to C. that makes programs, including the builtin readline in bash, know that the terminal uses utf-8, but doesn't have the strange behavior for wildcard expansion because that's governed by LC_COLLATE 22:30:05 forcing it to something that the locale doesn't specify would be incorrect, because if, say, it's running in a UTF-16 environment, it should be interpreting the input as UTF-16 22:30:23 perhaps ``` should be using C.UTF-8? because IRC uses UTF-8 except when it doesn't 22:30:42 ais523: UTF-16 environments won't usually work in unix, definitely not when you pass the program in argv, because argv strings can't have nul bytes 22:31:21 that's a good point, main uses char** for argv not wchar_t** 22:31:25 you can read utf-16 files, but you can't have utf-16 argv or environment 22:31:30 or filenames for that matter 22:31:52 I believe there's some Linux-specific way to get at the command line arguments even if they have embedded NULs but I doubt anyone uses it because the portable way is more portable and more convenient 22:32:11 in C and unix, yes. in windows and NNIX, you can have the argument and environment contain utf-16 strings. 22:32:12 is it in the ELF startup vectors thing 22:32:20 there's that weird auxv thing that people don't use 22:32:23 that i forgot even the purpose of 22:32:41 that said, I'm not convinced you /can/ put embedded NULs into the argument list because I'm not sure there's any kernel-level API for doing that 22:32:42 oh right, it has certain useful runtime system info 22:32:52 kmc: ASLR is one good use of it, it contains a random number for ASLR purposes 22:32:54 that is used mainly by the dynamic loader and libc init code 22:32:54 ais523: I don't think there is, at least for actual execced programs (as opposed to shell builtins, which cheat), because the arguments are passed in by execve, and execve takes nul-terminated strings 22:32:55 right 22:33:09 -!- MDead_ has joined. 22:33:12 ais523: it's quite the opposite: there's a windows-specific way to get the original utf-16 arguments 22:33:47 kmc: I used it through that libc wrapper in one program 22:33:54 sysconf or something like that 22:33:58 procconf? 22:34:03 I dunno, some strange name like that 22:34:15 I needed one of the parameters 22:34:26 because of some linux-specific stuff 22:35:27 ais523: maybe you can do something crazy like that to put an empty string into the environment and read it 22:35:46 or maybe not 22:36:49 maybe you can do that even normally 22:38:14 b_jonas: putenv puts the provided string into the environment, not a copy of it 22:38:27 so you can just put an arbitrary string into the environment and then overwrite the first byte with NUL afterwards 22:38:47 this is probably an esoteric use of putenv? 22:39:11 Hmm, I don't know how environment variables work. 22:39:32 it's somewhat more insane than you'd expect 22:39:33 Is the running process's environment as modified by libc functions accessible in /proc, in Linux? 22:39:54 Or does putenv only affect getenv and exec functions? 22:39:55 basically, environment variables aren't tracked by the kernel at all except at the execve → main boundary 22:39:57 ais523: but does that survive an execve? 22:40:06 OK, that's what I would have guessed. 22:40:07 the environment doesn't survive an execve by definition 22:40:10 that's what the e stands for 22:40:12 or more like, survive an execv, or can you pass execve 22:40:12 yeah 22:40:14 "replace the environment" 22:40:28 execv is just a wrapper in libc that does an execve with your current environment 22:40:49 ais523: how does /proc/self/env work then? 22:41:00 I know Linux processes can modify their argv and that becomes visible in /proc/cmdline (and ps). 22:41:04 so the kernel providing only execve, not any of the other 7 exec* functions, means it doesn't need to track the environment for correctness 22:41:06 no, /proc/self/environ 22:41:12 But I don't know how they can modify their command line to make it longer, for example. 22:41:21 I think /proc/*/environ stores a copy for auditing reasons but the kernel doesn't need to remember it for semantic reasons 22:41:34 shachaf: argv[0] is a pointer to a string, you can just change the pointer rather than the string 22:41:46 ais523: so it's like the filenames you get if you readlink /proc/*/fd/* ? 22:41:48 ais523: And the kernel will pick up on that? 22:41:59 argv is double-mutable, you can mutate both the pointers and the things they point to 22:42:15 I'm not sure that the kernel picks up on argv[0] assignments in Linux 22:43:06 I though you could set the executable name using prctl, but maybe you can't 22:44:18 hmm, so prctl lets you set the kernel's idea of where the command line is stored in memory and where the environment is stored in memory 22:44:35 so maybe /proc/self/env just reads the environment variables directly out of the program's memory, assuming they're stored in the same place as before? 22:45:19 ok... I think I don't even want to know those details 22:45:27 aha: there's a PR_SET_MM_EXE_FILE 22:45:46 which lets you change which executable file the kernel thinks your program is currently running from 22:45:53 which is even more insane than changing argv[0] 22:45:57 ais523: But that's only the executable, not the command line. 22:46:06 "only" the executable 22:46:18 in order to be able to use it you first have to entirely unmap your existing executable, also you can only do it once per process 22:46:35 I once wrote a C program that ran without libc, let me look at what it did. 22:47:05 shachaf: did that program ran on linux as a user process? 22:47:18 At startup with the amd64 ABI, you get argc right at %rsp, and then argv, which is an array of argc many pointers, and then envp, and then auxv. 22:47:23 b_jonas: Yes. 22:47:53 shachaf: what type is auxv there? 22:48:01 Elf64_aux * 22:48:11 a pointer to an array? 22:48:13 ok 22:48:21 Oh, no, it's the actual array. 22:48:24 ah 22:48:39 You scan it until you find the sentinel with type AT_NULL 22:48:45 yeah, so that was the un-c-like part, not how argv and envp were passed 22:49:34 By the way, auxv contains the file name passed to execve, which can of course be distinct from argv[0] 22:50:02 shachaf: sure, ps can print both 22:50:36 Can it? 22:50:57 it can print two different executable-name-like-things at least 22:50:58 on linux 22:51:00 I know it can read the link proc/pid/exe, but that's an absolute path, which I think is a bit different. 22:51:42 let me see 22:52:11 I don't actually know. 22:54:14 Oh man, this is so confusing. 22:54:26 ``` ps axo pid,comm,args # this prints stuff like "Web Content" in the second column and command lines starting with "/usr/lib/firefox-esr/firefox-esr -contentproc" in the second column 22:54:26 ​ PID COMMAND COMMAND \ 1 init /init \ 2 kthreadd [kthreadd] \ 3 ksoftirqd/0 [ksoftirqd/0] \ 4 kworker/0:0 [kworker/0:0] \ 5 kworker/0:0H [kworker/0:0H] \ 6 kworker/u2:0 [kworker/u2:0] \ 7 lru-add-drain [lru-add-drain] \ 8 kdevtmpfs [kdevtmpfs] \ 9 oom_reaper [oom_reaper] \ 10 writeback [writeback] \ 11 kcompactd0 [kcompactd0] \ 12 crypto 22:54:30 In this program U8 means an 8-byte unsigned integer rather than an 8-bit unsigned integer. 22:54:33 no full pathnames 22:54:44 not always full pathnames that is 22:55:03 the second colume only has the basename of the executable, or what it lies about itself 22:55:17 the third column has what looks pretty much like the full argv joined 22:55:45 the argv sometimes has relative pathname, sometimes absolute pathname for the executable 22:55:57 and sometimes the argv itself lies 22:56:17 because you can pass basically anything, and only the shell and gzip and git and a few programs like that care 22:56:35 (the shell cares about whether it starts with a hyphen, gzip and git cares about names it's usually symlinked to) 22:57:08 I've seen the U1/2/4/8 nomenclature somewhere before, for 8/16/32/64-bit integers, respectively. 22:57:35 ais523: As far as I can tell setting argv[0] to point to a different string has no effect on ps. 22:57:56 that's what I'd expect too; it works on some systems but I don't think Linux is one of them 22:57:57 I have written C++ code where I defined typenames ending in 1, 2, 4, 8 for 1-byte, 2-byte, 4-byte, and 8-byte integers. not U8 or u8 or S8 or s8 or I8 or i8 though 22:58:01 fizzie: Yes, I thought it would be a better idea because they're all one-digit numbers. 22:58:20 ais523: Then maybe I misunderstood 15:41 shachaf: argv[0] is a pointer to a string, you can just change the pointer rather than the string 22:58:24 shachaf: exactly 22:58:48 I decided to go back to bit counts because that's what everyone else uses. 22:59:03 It wouldn't be confusing except that 8 bit and 8 bytes are both very common sizes. 22:59:15 shachaf: that was in reply to a question asking about how you could make the name longer 22:59:17 although there's also a third variant, where you use "3" for 1-byte, "4" for 2-byte, "5" for 4-byte, "6" for 8-byte, "7" for 16-byte, "8" for 32-byte, and "9" for 64-byte 22:59:32 ais523: Yes, for people viewing the name through ps. 22:59:38 anyway, it seems that on Linux, the "executable name" is the name of the executable's main thread, so you can rename the thread in question and that renames the view in ps 22:59:39 Why else would I want to make it longer? 22:59:47 that's limited to 15 bytes, apparently 23:00:08 and any of these is better than using ambiguous names like "long" and "int" and "word" or abbreviations for them 23:00:09 b_jonas: because 1 byte = 8 bits? 23:00:22 ais523: yes, you can also have "0" for booleans 23:00:24 I want to change the contents of /proc/pid/cmdline. 23:00:45 Oh, I think it was probably the JVM specification. 23:00:58 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html "The types u1, u2, and u4 represent an unsigned one-, two-, or four-byte quantity, respectively." 23:01:21 Oh no. 23:01:24 I'm not sure if it's possible to change arguments after the first in /proc/pid/cmdline; my guess is yes but if so my searches haven't discovered a method yet 23:01:38 Recently I've been reading decompiled Java code to understand a game better. 23:01:49 It's amazing how much information they put in there. Almost everything except comments. 23:01:51 Java doesn't /have/ unsigned 1-, 4-, or 8-byte types 23:02:06 (char is an unsigned 2-byte number with a misleading name) 23:02:18 ais523: JVM, not Java. 23:02:32 fizzie: yes, that's why the names can be weird 23:02:37 as they don't have Java names to use as a reference 23:02:42 and there's also one I considered using for the syntax of a certain sort-of esolang I've been considering: "1" for 1-byte, "2" for 2-byte, "4" for 4-byte, "8" for 8-byte, "3" for 4-byte float, "7" for 8-byte float, "6" for 8-byte pointer, "0" for boolean, because this way they're distinct and give the approximate size of the mantissa in bytes 23:02:50 ais523: Can't you just mutate argv[1][0] or whatever and put what you like in there? 23:03:25 shachaf: yes, but if mutating argv[0] doesn't affect ps output, I wouldn't expect mutating argv[1] to affect ps output either 23:03:26 but maybe it does 23:03:51 I think unixes where it does alter ps output look into the process memory 23:03:54 it's n a s t y 23:04:14 not sure about /proc/$PID/cmdline 23:04:25 ais523: Mutating argv[0][0] does change ps output. 23:04:35 ooh 23:04:36 But not the pointer argv[0], which I thought was the distinction you were making before. 23:04:51 shachaf: what if you unmap the initial stack? 23:05:02 so I guess that /proc/$PID/cmdline is looking at the memory backing the pointers that argv points into 23:05:04 that would make some sort of sense 23:05:09 One time I got very confused by a program that used strtok to parse command line arguments. 23:05:12 surely it won't segfault the kernel, linux is careful about that thing these days, but what does it show in cmdline? 23:05:22 ais523: Yes, that's what it does. I think the pointers aren't used for anything. 23:05:33 It's just nul-separated strings. 23:05:46 b_jonas: there's a prctl option to set where the memory backing *argv is; presumably, based on shachaf's results, that could be used to set the entire cmdlien 23:05:48 *cmdline 23:05:51 ah 23:05:52 I see 23:06:28 ais523: But argv isn't limited to 15 bytes. 23:07:06 shachaf: there are three separate program name things 23:07:15 I like how the POSIX-specified way of getting access to the environment (to pass to execve or whatever) is to write "extern char **environ;" in your program. 23:07:25 ais523: the third is the filename remembered for the mapping? 23:07:46 you have readlink(/proc/self/exe) (kernel's idea of executable image); orig_argv[0] (memory space in which the command line was passed); and the name of the program's main thread (settable via prctl) 23:08:06 the last is the one that's limited to 15 bytes when set via prctl; I'm not sure whether it can exceed 15 bytes if it's set by the kernel on program start 23:08:10 ais523: There's also the AT_EXECFN in auxv. 23:08:31 ah yes, although I'm not sure that the kernel can see that one if it's modified? 23:08:41 It would probably be hard for it to look at the pointers, since that vector is constructed by the libc; the initial process stack at _start is just the strings. 23:08:42 No, it's read-only I assume. 23:09:10 fizzie: is that only for auxv, or also for argv? 23:09:21 Also for (the contents of) argv. 23:09:26 ok 23:09:26 fizzie: No, the ABI gives programs an array of pointers at startup, I think. 23:09:35 shachaf: No, it doesn't. 23:09:39 I've heard contradictory statements about this, I give up now 23:09:47 At least the x86-64 ELF ABI. 23:09:48 I'll have libc or other libraries handle this 23:09:48 fizzie: How confident are you, on Linux amd64? 23:09:56 shachaf: Very, because I'm staring at the spec. 23:10:05 It's Figure 3.9: Initial process stack. 23:10:23 ... 23:10:26 No, I just can't read. 23:10:33 I can't eithert 23:10:38 Yes, there is an array of pointers there. 23:11:07 and it's terminated by a null pointer? 23:11:13 It's just that there's no pointer to the array of pointers, that's what I was misremembering. 23:11:38 they didn't want to get into three-star programming :-) 23:11:47 lol 23:12:02 so the libc startup routines create argc and argv, but not *argv or **argv? 23:12:11 I'm glad the spec agrees with my program. 23:12:21 that's one of my favourite articles on c2, it inspired the name of an esolang 23:12:22 shachaf: is your program x86_64? 23:12:27 Yes. 23:12:47 b_jonas: argc and argv are passed by the kernel at (%rsp) and 8(%rsp) 23:13:11 I guess I should say at %rsp and at %rsp + 8 23:13:11 hmm 23:13:13 I mean, not really? 23:13:29 At 8(%rsp) there is the first pointer, as in argv[0]. 23:14:01 wow, apparently the C2 wiki need to be able to make "cross-domain" (actually to a different subdomain of itself, but still) XHR requests to work correctly? 23:14:03 Yes, I meant that argv points to that address. 23:14:19 http://wiki.c2.com/?ThreeStarProgrammer for anyone interested, btw 23:16:34 yeah, I remember I looked at that because you link to it from the 3-star programmer description page on esowiki 23:16:49 I don't otherwise use the c2 wiki 23:16:51 https://zem.fi/tmp/f39.png is that table, just for the reference. 23:17:16 -!- Phantom_Hoover has quit (Quit: Leaving). 23:17:22 nowadays most people think only of Wikipedia when someone says "wiki" 23:17:28 but the older wikis are an important part of Internet history 23:18:03 ais523: I most certainly don't, but I mostly think on _newer_ wikis than wikipedia 23:18:20 s/on _/of _/ 23:18:30 // argc: 8 bytes 23:18:30 // argv: 8 bytes * (argc + 1), terminated with 0 pointer 23:18:30 // envv: 8 bytes * ?, terminated with 0 pointer 23:18:30 // auxv: 16 bytes * ?, terminated with AT_NULL (type 0) entry 23:18:42 one thing I dislike is when I'm in #esoteric or #nethack or the like and someone says "the wiki" to mean Wikipedia rather than Esolang or NetHackWiki respectively 23:19:20 shachaf: Arguably, auxv is (16*N + 8) bytes long, at least according to that table. 23:19:21 Only nonsense people say that, though. 23:19:31 on the subject of argv and friends being insane, I would like there to be a standard for command-line arguments and exit codes from programs, even if not everyone followed it 23:19:47 (The "Auxiliary vector entires..." are "2 eightbytes each", but the "Null auxiliary vector entry" is only "1 eightbyte".) 23:19:53 fizzie: Hmm, good point. 23:19:53 this would mean that programs could opt-in to declaring they followed the standard, making them easier to use in an automated way without needing to special-case your code for every program 23:20:11 But I think the next eight bytes are guaranteed to be mapped so you can treat it as a 16-byte entry. 23:20:16 BSD has a standard for return codes, that seems like a good starting point (and I typically try to follow it in my own code, but it's not very fine-grainedD) 23:20:25 But maybe not? 23:20:30 I'm not sure which BSD, probably all of them 23:20:41 It would be a funny joke to put that right on a page boundary. 23:20:43 It doesn't say in the table, but it might say it in the text. Certainly it's true in practice. 23:21:02 Is it always true in practice? 23:21:17 What if the environment and argv are empty? 23:21:32 ais523: perl uses the convention that if the program exist with an unhandled exception, the exit code is max(errno & 0xFF, 1) 23:21:38 Oh, there are always going to be other things in the information block. 23:21:52 b_jonas: ugh, I hate that convention 23:21:53 which is useful because the errno can give some useful information when the exception message is not too detailed 23:21:56 ais523: why? 23:22:14 because errno has more than 256 possible values and as such you're making every single element of the exit code space ambiguous (other than 0) 23:22:26 in particular, you have nowhere to return non-errno-based failures 23:22:27 for proper programs, I prefer if the errno is 1 for ordinary failure, 2 for wrong usage or exceptional failure 23:22:33 (I guess you could map them onto the closest errno value) 23:22:35 s/errno/exit code/ 23:23:03 in the BSD system, 64 is used for wrong usage, and is not used in any other circumstance 23:23:05 I like that sort of guarantee 23:23:11 ais523: no it doesn't. it's still under 256 on unix. 23:23:30 I mean, technically you can assign any int to errno, but the defined errno codes only go up to something between 125 and 256 23:23:38 I don't know the exact limit 23:23:40 hmm, it goes up to 133, but wraps at 127 I think 23:23:44 it's syscalls that go way past 256 23:23:54 ais523: hmm, does perl wrap it to 7 bits? let me test 23:24:16 no, wait (which is what returns the exit code) wraps it to 7 bits 23:24:25 ``` perl -e '$!=0x81;die'; echo $? 23:24:25 Died at -e line 1. \ 129 23:24:29 ^ doesn't wrap 23:24:32 ``` perl -e '$!=0x89;die'; echo $? 23:24:33 Died at -e line 1. \ 137 23:24:37 see, proper 8-bit clean 23:24:45 wow 23:24:47 I claim this for unix, I don't know what happens on windows 23:25:03 ``` perl -e 'kill $$, 9'; echo $? 23:25:04 0 23:25:09 ``` perl -e 'kill 9, $$'; echo $? 23:25:10 bash: line 1: 58 Killed perl -e 'kill 9, $$' \ 137 23:25:10 it's only the shell the maps signal k to 128+k in the shell parameter $? 23:25:13 sorry, PID 9 23:25:26 good thing HackEso protects me from that sort of error :-) 23:25:28 everything other than the shell support proper 8-bit exit codes, both on the exit side and the wait side 23:25:34 though sometimes the documentation claims otherwise 23:25:35 Man, I sure wish I could statically link all my Linux programs. 23:25:40 It would be way better. 23:26:00 even the ones that load dynamic libraries at runtime? 23:26:15 I mean, I wish the platform ABI didn't require you to load dynamic libraries at runtime. 23:26:16 I think there are some programs that even compile code from source while they're running, then dlopen the resulting executables 23:26:33 You could use dlopen and still statically link, probably. 23:26:36 ``` perl -e 'system "perl", "-e", "kill 9, $$"; printf "wait code %04X,\n", $?;' 23:26:37 Killed 23:26:39 If you had your own implementation of dlopen. 23:26:54 ``` perl -e 'system "perl", "-e", "kill 9, \$"; printf "wait code %04X,\n", $?;' 23:26:55 syntax error at -e line 1, at EOF \ Execution of -e aborted due to compilation errors. \ wait code FF00, 23:26:59 b_jonas: you need to escape the $$ 23:27:00 ``` perl -e 'system "perl", "-e", "kill 9, \$\$"; printf "wait code %04X,\n", $?;' 23:27:00 wait code 0009, 23:27:03 the inside perl killed the outside perl 23:27:18 ``` perl -e 'system "perl", "-e", "\$!=0x89; die"; printf "wait code %04X,\n", $?;' 23:27:19 Died at -e line 1. \ wait code 8900, 23:27:23 I think OpenGL is the biggest culprit? 23:27:33 -!- Sgeo_ has joined. 23:27:35 Unfortunately writing GPU code is just ridiculous on every platform. 23:27:37 upper byte of the wait code is the exit code, lower byte is the signal, and there are two or three other bits stowed in there 23:27:44 or maybe just one... uh 23:27:50 I think that if you're statically linking libc and friends, you probably want to use LTO to take advantage of that 23:28:08 the signal and the exit code are the ones you usually care about, unless you're ptracing something 23:28:22 anyway, we now have a problem, in that there are /two/ incompatible exit code standards now 23:28:24 which is worse than having one 23:28:27 or doing job control, which needs to care about stopped children 23:28:29 ais523: Do you like Penguins? 23:28:54 shachaf: penguins as in the animals, or is Penguins some piece of software or the like that I don't know about? 23:29:11 The chocolate biscuit. 23:29:34 ais523: there are also programs with custom exit codes defined. curl the command-line program actually documents what exit codes correspond to each kind of error. I even used that in a script that calls command-line curl and wants to retry for some errors but give up for others. 23:29:39 I don't eat chocolate nowadays, but back when I did I didn't /dislike/ Penguins but there were many sorts of chocolate I preferred, so I hardly ever ate them 23:29:51 Why don't you eat chocolate? 23:30:01 (don't eat = I avoid things that are primarily chocolate, I'm fine with chocolate traces) 23:30:09 Ah. 23:30:11 also I gave it up for a few months by accident/coincidence and just never started again 23:30:32 ais523: do you have an estoeric language, other than feather, that does something like time travel? 23:30:33 I don't think it's particularly good for my health and I was doing fine without it 23:30:39 Makes sense. 23:30:53 -!- Sgeo__ has quit (Ping timeout: 244 seconds). 23:31:17 b_jonas: I think the closest you get is nondeterminism in the NP sense 23:31:20 ais523: Anyway LTO seems like a different level of detail than what I was thinking about. 23:31:20 e.g. Nellephant, Precognition 23:31:28 ok 23:31:33 that might actually count 23:31:37 The point is that I want to make a Linux executable, in whatever language, which is self-contained. I might not use libc at all. 23:31:38 the word "precognition" refers to a time-travel effect even if the language Precognition can be implemented without it 23:31:45 So I just want to know what ABIs it needs to conform to. 23:32:16 shachaf: x86_64 (or whatever) kernel ABI would be the only relevant one if you have control over all the code in your executable 23:32:29 you can use whatever you want for an ABI internally, and with no libraries, the API isn't relevant 23:32:38 ais523: OpenGL or Vulkan is also relevant if you want to write code that uses the GPU. 23:32:39 shachaf: just because you don't use libc you can still use some other startup standard library that is distributed with the language. rust actually has one. C++ has one too but that one is pretty close to libc. 23:32:49 And that's a huge userspace mess. 23:32:58 shachaf: oh right, you also have the API for any userspace programs you want to communicate with 23:33:01 X, for example 23:33:13 from Web of Lies I learned that X mostly works over sockets 23:33:15 X is a protocol that you can implement yourself. 23:33:22 have fun with that 23:33:24 ...Except if you want accelerated rendering. 23:33:28 shachaf: which side? server or client? 23:33:39 kmc: I'd almost rather implement the X protocol myself than use Xlib. 23:33:45 But I can't! 23:33:52 I assume there's enough information to implement either yourself, but also strongly suspect that the client end of the connection is the easier to implement 23:33:54 You also can't really use xcb without Xlib. 23:34:05 b_jonas: The client, of course. 23:35:02 Now they're releasing Wayland which is in many ways even worse, and you're still limited to a single library. 23:35:03 sshd logically has to contain an implementation of the server end otherwise ssh -X wouldn't work (possibly unlike ssh -Y, -X needs some understanding of the commands passing overe it), but my guess is that it just delegates almost everything to the X server on the same machine 23:35:22 Except now the library is more complicated and tries to do more things for you that you don't want to do. 23:35:50 doesn't Wayland put much of the logic into the client exectuable? that would explain the need for a complex library 23:36:26 Well, for example the Wayland library requires you to do everything with a lot of callbacks instead of just giving you event data like Xlib. 23:36:31 Well, soon there won't be any X, right? 23:36:52 X will be supported pretty much forever for compatibility reasons 23:36:57 fizzie: dream on 23:36:59 ais523: "Once we [Fedora] are done with this [transitioning to Wayland] we expect X.org to go into hard maintenance mode fairly quickly. The reality is that X.org is basically maintained by us and thus once we stop paying attention to it there is unlikely to be any major new releases coming out --" 23:36:59 ais523: I'm not objecting to a complex library existing, but I do object to a complex library that you have to use. 23:37:10 there's likely already an X server written in Wayland to act as a compatibility buffer between the two 23:37:21 If you're going to be forced to use a library, there should be a minimal simple library that the optional complex library is built on top of. 23:37:27 They'll support XWayland "forever", sure. 23:38:01 I don't object to deprecating X but a bunch of things in Wayland seem either not ready or just bad. 23:38:29 one thing I discovered by accident is that SDL is capable of writing to framebuffers directly 23:38:43 and thus can run and display graphics without access to X, Wayland or friends 23:38:51 mplayer can do that too. 23:38:55 but this only works in fullscreen mode and there are a lot of graphicial artifacts 23:39:01 some of the things wayland does make sense, but it also runs on a lot of stupid marketing about things where it's not actually better than X, I think 23:39:03 It can also do accelerated video on MGA cards without X. 23:39:14 presumably SDL doesn't use the GPU at all in that configuration 23:39:26 (The G200/G400/G450/G550 ones.) 23:39:42 b_jonas: the main alleged argument for Wayland is that it doesn't try to serialise the drawing commands over a socket, allowing it to be simpler 23:39:58 I'm not sure I agree with this, but it's not an obviously ridiculous argument 23:40:20 ais523: yeah, but X doesn't do that either, at least with modern programs and local X server 23:40:20 ...well, if you can call it "accelerated video", AIUI the only accelerated bit is the colorspace conversion, the card provides a YUV overlay. 23:40:50 you can use X that way, but most programs these days don't, I believe 23:40:55 b_jonas: it uses a unix domain socket I think rather than a TCP socket 23:41:03 it's still /technically/ a socket but I doubt there's much loss at that point 23:41:13 yeah i saw someone who had a tiling WM esque setup using tmux windows and mplayer fbdev 23:41:14 ais523: not even that I think 23:41:23 now all you need is a web browser 23:41:32 well it uses a unix domain socket when running under web of lies, but maybe it detected that it couldn't talk to X the normal way? 23:41:41 I meean, there's still a socket connection for control info, but not for all the drawing command data 23:42:02 kmc: There was at least one browser that supported rendering mostly as text, then overdrawing bitmaps into the framebuffer at the right spots. 23:42:09 b_jonas: ah, how is that sent? shared memory? 23:42:10 links2? 23:43:19 Hmm, it at least has a framebuffer driver, but maybe that's in the more conventional style where it draws the text there as well. 23:43:23 ais523: I think X gives the programs some sort of access to the GPU, with GPU permissino control, maps some GPU memory thing into the visible window, and the programs use toolkit libraries that, below heavy levels of abstractions and in the common fast case, ask the GPU to render the actual graphics into that GPU memory 23:43:26 neat 23:43:45 b_jonas: oh, the Direct Rendering Manager 23:43:50 I have no idea how that thing works 23:44:04 (just that people keep getting annoyed at it because it has the same acronym as Digital Rights Management and both are tied up with graphics/video) 23:44:05 the X socket itself is still used to initiate everything, but I don't see a problem with at 23:44:42 I wrote my own UI library that renders directly with Xlib and OpenGL. 23:44:59 Well, it doesn't do very much UI right now. 23:45:31 is that the emscriptenized thing you were showing me? 23:45:41 It's related? 23:45:43 ais523: that's not an accident of course. if you want to allow the user to read e-books that they don't own but only have a license to read but don't want to allow them to copy their contents, then you can't just serialize the drawing commands for the e-book through a socket to X. 23:46:07 I have an SDL backend which more or less supports HTML, though it's not that great. 23:46:07 I would love it if there were a portable UI library where you gave it a description of what elements you wanted in your UI and it translated that to appropriate native (or native-looking/behaving) GUI/TUI for every platform 23:46:23 I'm surprised it hasn't been written yet, the main issue may be that a number of the backends would be moving targets 23:46:26 I might make a proper emscripten/web backend eventually rather than using SDL. 23:46:28 movies too, but for those you also need the efficiency. 23:46:28 -!- arseniiv has quit (Ping timeout: 272 seconds). 23:46:44 but more likely it hasn't been written because managers care about their program looking the same on every platform more than they care about their program fitting into the platform 23:46:45 ais523: there are such portable libraries, 23:47:03 but the problem is that what the graphics environments want to do are moving targets, so every such library gets obsolate 23:47:14 the closest I've seen is Java AWT, which has been deprecated for years and doesn't really work 23:47:23 ais523: I think Google' Flutter is a recent library with a goal like that. 23:47:30 and eventually they do get improved, but everyone keeps using the old version of gtk (2 rather than 3) just like how they're using the old version of python (2 rather than 3) so the new things can't be added 23:47:48 By the way, chet out https://makepad.github.io/makepad/ 23:47:57 That's written in Rust and renders all the text and everything with WebGL. 23:47:59 b_jonas: isn't that because Gnome 3 was a disaster? I really dislike the way its native programs behave 23:47:59 there are several such portable libraries, not only gtk, but also wx and tk which are both even more obsolate and, from a modern point of view, badly designed, than gtk 23:48:09 It looks surprisingly good for a web thing that does that. 23:48:11 no doubt it's possible to use GTK 3 without repeating the same bad decisions, but Gnome 3 will have rather tainted it 23:48:16 ais523: no, I think gnome 3 was a disaster for reasons other than that 23:48:31 I don't think that's connected to gnome 3 much 23:48:37 I have to use Gnome 3 at work, I hate it 23:48:43 Oh man, what's with the GTK3 native client-side decorations (ncsd) thing? 23:48:44 It's so bad. 23:48:58 Ubuntu disables it automatically if you're using a window manager other than GNOME. 23:49:12 it's bad enough that it forced me to Cinnamon on my laptop, because even though I dislike how bad Cinnamon's performance is it is at least possible to customize it into being usable 23:49:15 But the way they do it is with a .so that they add to LD_PRELOAD (!!!) 23:49:19 everything is bad 23:49:29 It breaks all the time. 23:49:36 $ echo $LD_PRELOAD 23:49:37 libgtk3-nocsd.so.0 23:49:39 oh wow 23:49:56 bad enough to be LD_PRELOADed out by the operating system :-D 23:49:56 `` echo $LD_PRELOAD 23:49:57 No output. 23:50:11 hmm, does this mean that you have terrible UI when you run programs with sudo? 23:50:18 ais523: They have access to the code! Don't they have patches for every package anyway? 23:50:41 shachaf: it could be meant for, e.g., locally compiled software, snaps, etc. 23:50:41 the hackenv environment is actually quite short 23:50:52 snapd is something that I would benefit from knowing how it works, I think 23:51:03 shachaf: I don't think Flutter is super-focused on making applications "look native" on the platforms it supports. Maybe for the sort of behavioral things, but I think you get the same widgets you pick on all platforms you target. 23:51:04 it may be an excellent idea or a terrible idea but I don't know enough about it to tell 23:51:14 I have the suspicion, though, that if I understood it I would have a strong opinion on it 23:51:24 fizzie: Oh, that was the impression I got but I never used it. 23:51:27 Since it does the rendering on its own, with Skia. 23:52:04 fizzie: I thought they rendered the widgets to look like each platform's widgets, though. 23:52:56 -!- ais523 has quit (Remote host closed the connection). 23:52:57 Hm, maybe. I know it's got two widget sets (Material Design, and iOS-y), so maybe the default could be to pick the "natural" one. 23:53:09 -!- ais523 has joined. 23:53:12 fizzie: Oh, maybe that's all I as thinking of. 23:53:41 fizzie: I remember reading something about how they have to chase a moving target to match iOS widget look. Maybe it's just that rather than a general cross-platform thing. 23:54:07 All I know about Flutter is what I've overheard, there's been a lot of talk about it lately. 23:54:34 (Where "lately" means "over the last year or so".) 23:54:35 I wish platforms weren't all about maximizing lock-in with their nonsense bad APIs. 23:54:43 This is what every single platform is about. 23:54:50 how does that even work these days, when modern programs don't even use any sort of standard widgets, not even from toolkits, but instead use their stupid custom reinvented checkboxes and calendar widgets where you can only enter a date by clicking on arrows with the mouse and text input boxes that try to interpret your raw keyboard presses directly? 23:58:44 shachaf: Text selected in makepad doesn't end up in the PRIMARY selection. :/ 23:59:24 in webpages, first the fashion was custom calendar widgets and custom dropdown boxes, then input boxes that's pre-filled with a description of what the input box should contain that it's supposed to delete when you start entering text but can't really do that because the javascript api doesn't do, 23:59:24 fizzie: Man, that's the one nitpick I pointed out to someone when I was telling them about this the other day. 23:59:36 fizzie: I wonder whether it's doable, by making a hidden buffer and selecting the text in it. 23:59:51 The rounded corners of the selection highlight are nice, though. 23:59:53 fizzie: Ctrl-C/Ctrl-V does work, which surprised me a bit.