2026/05/30

Newest at the top

2026-05-30 19:06:00 +0000poscat(~poscat@user/poscat) (Remote host closed the connection)
2026-05-30 19:04:28 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 18:58:17 +0000Sgeo(~Sgeo@user/sgeo) Sgeo
2026-05-30 18:57:17 +0000Guest53(~Guest43@p200300dcb74099005424e44ccbbb78bd.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2026-05-30 18:53:44 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 253 seconds)
2026-05-30 18:48:57 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 18:38:14 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-30 18:33:13 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 18:31:28 +0000 <mauke> :-)
2026-05-30 18:31:01 +0000 <monochrom> That's a Haskell solution. >:)
2026-05-30 18:30:51 +0000tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net)
2026-05-30 18:30:01 +0000 <mauke> and two subprocesses
2026-05-30 18:29:52 +0000 <mauke> 4. pipe
2026-05-30 18:29:23 +0000 <monochrom> Right, but my sentence is after students have seen both blocking and unblocked read, but not select() or async I/O yet. It's to motivate either.
2026-05-30 18:27:48 +0000 <mauke> monochrom: 3. O_ASYNC
2026-05-30 18:27:05 +0000driib3180(~driib@vmi931078.contaboserver.net) driib
2026-05-30 18:21:54 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-30 18:19:38 +0000driib3180(~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat)
2026-05-30 18:19:26 +0000 <monochrom> "You have two FDs you are waiting data from. What can you do? 1. Blocking read --- you're missing out on the other one. 2. Busying polling --- are you coding or are you frying eggs?!"
2026-05-30 18:17:54 +0000 <mauke> tcsetattr
2026-05-30 18:17:39 +0000 <monochrom> Oh by the time I teach select(), I'll bring up cooking literally. :)
2026-05-30 18:17:10 +0000 <monochrom> heh
2026-05-30 18:17:10 +0000gmg(~user@user/gehmehgeh) (Quit: Leaving)
2026-05-30 18:17:01 +0000 <int-e> monochrom: if you're not inspecting the kernel command line (or UEFI variables?), are you even cooking?
2026-05-30 18:16:35 +0000 <mauke> W=all o=prog O=2 gcc prog.c
2026-05-30 18:15:57 +0000 <monochrom> Another way to say it is if you are dead set to over-engineer anyway, go big or go home. Don't even just do env vars.
2026-05-30 18:15:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 18:13:19 +0000 <monochrom> At which point you realize that you don't want a dedicated envvar library. What you want is take one of those cmdline parsers and extend it to cover envvars. To a large extent cmdline parsers have already 99% of the code you need. They're just missing one single line of code that calls lookupEnv.
2026-05-30 18:12:07 +0000 <int-e> monochrom: so of course you told them that there's no place like $HOME
2026-05-30 18:11:59 +0000 <monochrom> I answered that if you're writing a program you would like to let user override defaults and/or enable extra features. There are 3 ways you can support this, and if you want to be nice you support all 3. Config file, cmdline options, envvars.
2026-05-30 18:11:38 +0000 <mauke> there are only command-line arguments (and the other command-line arguments)
2026-05-30 18:11:17 +0000 <mauke> environment variables are a conspiracy
2026-05-30 18:10:28 +0000 <monochrom> Just yesterday a student asked what are the use cases of environment variables. (I'm teaching a Unix course.)
2026-05-30 18:10:01 +0000olivial(~benjaminl@user/benjaminl) benjaminl
2026-05-30 18:09:44 +0000olivial(~benjaminl@user/benjaminl) (Read error: Connection reset by peer)
2026-05-30 18:06:10 +0000 <monochrom> But then my own library would be like 5 lines. This is because IO is an Applicative so there is very little I have to add.
2026-05-30 18:06:10 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-30 18:05:17 +0000 <monochrom> I could agree if we s/those libraries/my own library/ .
2026-05-30 18:03:25 +0000vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2026-05-30 18:03:22 +0000bggd(~bgg@user/bggd) (Remote host closed the connection)
2026-05-30 18:01:53 +0000 <geekosaur> if they're sensitive they don't belong in the environment: ps can dump envars
2026-05-30 18:01:42 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 18:01:06 +0000 <mauke> at that point I'd question the use of the environment
2026-05-30 17:59:36 +0000 <Guest53> I'm not convinced. Manually parsing everything might be okay for two variables but not for 20 (at least in my opinion). If you add default values, redacting sensitive variables etc. you will just reimplement those libraries.
2026-05-30 17:51:21 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2026-05-30 17:46:39 +0000peterbecich(~Thunderbi@71.84.33.135) peterbecich
2026-05-30 17:45:53 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-30 17:42:08 +0000 <monochrom> This is why I began with recommending using no library. This domain is exactly where the risk of over-engineering larger-infrastructure-than-content is high. And you have just found a data point that proves it.
2026-05-30 17:42:08 +0000vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 251 seconds)
2026-05-30 17:40:36 +0000 <monochrom> even readIO while we're scaremongering against Maybe.