| 2026-06-28 00:00:17 +0000 | tv | (~tv@user/tv) tv |
| 2026-06-28 00:01:46 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-06-28 00:01:53 +0000 | vanishingideal | (~vanishing@user/vanishingideal) (Ping timeout: 271 seconds) |
| 2026-06-28 00:06:43 +0000 | <jreicher> | schuelermine: my preferred alternative to any given terminal emulator is to not use a terminal emulator at all. |
| 2026-06-28 00:12:20 +0000 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 2026-06-28 00:12:22 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 00:17:07 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-06-28 00:24:20 +0000 | fgarcia | (~lei@user/fgarcia) (Ping timeout: 245 seconds) |
| 2026-06-28 00:24:52 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2026-06-28 00:24:52 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 2026-06-28 00:25:17 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2026-06-28 00:26:25 +0000 | fgarcia | (~lei@user/fgarcia) fgarcia |
| 2026-06-28 00:26:51 +0000 | fgarcia | (~lei@user/fgarcia) (Max SendQ exceeded) |
| 2026-06-28 00:27:43 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 00:32:59 +0000 | fgarcia | (~lei@user/fgarcia) fgarcia |
| 2026-06-28 00:33:19 +0000 | fgarcia | (~lei@user/fgarcia) (Max SendQ exceeded) |
| 2026-06-28 00:34:36 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-06-28 00:39:23 +0000 | fgarcia | (~lei@user/fgarcia) fgarcia |
| 2026-06-28 00:45:45 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 00:50:17 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-06-28 01:01:07 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 01:03:27 +0000 | nattkyrro | (~serenity@user/nattkyrro) (Ping timeout: 258 seconds) |
| 2026-06-28 01:05:24 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-06-28 01:05:33 +0000 | nattkyrro | (~serenity@user/nattkyrro) nattkyrro |
| 2026-06-28 01:09:50 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 2026-06-28 01:14:00 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2026-06-28 01:16:30 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 01:18:33 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 248 seconds) |
| 2026-06-28 01:21:09 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 266 seconds) |
| 2026-06-28 01:21:36 +0000 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-06-28 01:26:11 +0000 | <schuelermine> | jreicher: by that, do you mean a linux VT console? |
| 2026-06-28 01:28:48 +0000 | <monochrom> | I'm "progressive" and I say that if you don't use terminal emulators then you use pure GUI. >:) |
| 2026-06-28 01:29:21 +0000 | <monochrom> | Even "I use smart phones, what is terminal emulator? what even is computer?" >:) |
| 2026-06-28 01:31:05 +0000 | <geekosaur> | apple beat you to that one |
| 2026-06-28 01:31:41 +0000 | <monochrom> | Yeah I am plagiarizing from that Apple ad! |
| 2026-06-28 01:31:52 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 01:33:55 +0000 | acidjnk_new | (~acidjnk@p200300d6e74def0343353b3983e3e743.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 2026-06-28 01:34:33 +0000 | acidjnk | (~acidjnk@p200300d6e74def0343353b3983e3e743.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 2026-06-28 01:36:25 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-06-28 01:39:10 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2026-06-28 01:44:09 +0000 | <fgarcia> | i've met windows and macos users who think linux is terminal only ._. |
| 2026-06-28 01:44:49 +0000 | DetourNetworkUK | (DetourNetw@user/DetourNetworkUK) (Read error: Connection reset by peer) |
| 2026-06-28 01:46:31 +0000 | DetourNetworkUK | (DetourNetw@user/DetourNetworkUK) DetourNetworkUK |
| 2026-06-28 01:47:08 +0000 | <monochrom> | Not surprised. Extremists are the most vocal and representative, as always. |
| 2026-06-28 01:47:14 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 01:47:40 +0000 | <monochrom> | Conversely linux users think windows and mac users are fisher toy players. |
| 2026-06-28 01:48:17 +0000 | <monochrom> | There was a time I thought that GUI users were illiterate. >:) |
| 2026-06-28 01:51:42 +0000 | ft | (~ft@p3e9bc08f.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
| 2026-06-28 01:51:55 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-06-28 01:53:32 +0000 | ft | (~ft@p4fc2a1a4.dip0.t-ipconnect.de) ft |
| 2026-06-28 02:02:37 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 02:05:04 +0000 | op_4 | (~tslil@user/op-4/x-9116473) (Remote host closed the connection) |
| 2026-06-28 02:05:42 +0000 | op_4 | (~tslil@user/op-4/x-9116473) op_4 |
| 2026-06-28 02:08:44 +0000 | <jreicher> | schuelermine: No, I use an Emacs buffer |
| 2026-06-28 02:09:20 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-06-28 02:09:54 +0000 | <jreicher> | Basically it becomes just plain text there and back. No fancy display instructions. |
| 2026-06-28 02:14:25 +0000 | <EvanR> | I knew people who think linux is terminal only and thus "DOS" |
| 2026-06-28 02:14:31 +0000 | ft | (~ft@p4fc2a1a4.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
| 2026-06-28 02:18:02 +0000 | <fgarcia> | though if i do start carrying a laptop around, i kind of want to install Q4OS on it. i think that's the one that has the windows theme haha |
| 2026-06-28 02:19:33 +0000 | <EvanR> | I vaguely recall a win95 theme for icewm |
| 2026-06-28 02:19:56 +0000 | <EvanR> | a minor riot |
| 2026-06-28 02:20:39 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 02:21:11 +0000 | <monochrom> | icewm and a couple of others IIRC |
| 2026-06-28 02:25:25 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-06-28 02:25:31 +0000 | ft | (~ft@p3e9bcc41.dip0.t-ipconnect.de) ft |
| 2026-06-28 02:26:15 +0000 | schuelermine | (~Thunderbi@user/schuelermine) (Remote host closed the connection) |
| 2026-06-28 02:29:29 +0000 | td_ | (~td@2001:9e8:19c4:7400:bf7f:cb56:94b:5d2b) (Ping timeout: 244 seconds) |
| 2026-06-28 02:30:19 +0000 | ft | (~ft@p3e9bcc41.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 2026-06-28 02:31:13 +0000 | td_ | (~td@i53870910.versanet.de) |
| 2026-06-28 02:31:20 +0000 | <monochrom> | But no DeriveBiFunctor :( |
| 2026-06-28 02:33:16 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 02:33:16 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...) |
| 2026-06-28 02:36:02 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 02:37:24 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 245 seconds) |
| 2026-06-28 02:40:41 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-06-28 02:42:06 +0000 | <EvanR> | DeriveEveryImaginableFunctorVariant |
| 2026-06-28 02:45:51 +0000 | m | (~travltux@user/travltux) (Ping timeout: 246 seconds) |
| 2026-06-28 02:51:25 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 02:56:06 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-06-28 03:06:13 +0000 | ft | (~ft@p3e9bc5a3.dip0.t-ipconnect.de) ft |
| 2026-06-28 03:06:48 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 03:07:00 +0000 | tusko | (~uwu@user/tusko) (Remote host closed the connection) |
| 2026-06-28 03:07:17 +0000 | tusko | (~uwu@user/tusko) tusko |
| 2026-06-28 03:07:29 +0000 | yanmaani | (~yanmaani@gateway/tor-sasl/yanmaani) (Remote host closed the connection) |
| 2026-06-28 03:07:40 +0000 | yanmaani | (~yanmaani@gateway/tor-sasl/yanmaani) yanmaani |
| 2026-06-28 03:07:51 +0000 | yanmaani | (~yanmaani@gateway/tor-sasl/yanmaani) (Remote host closed the connection) |
| 2026-06-28 03:08:01 +0000 | yanmaani | (~yanmaani@gateway/tor-sasl/yanmaani) yanmaani |
| 2026-06-28 03:09:14 +0000 | ttybitnik | (~ttybitnik@user/wolper) (Quit: Fading out...) |
| 2026-06-28 03:11:43 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-06-28 03:12:53 +0000 | ft | (~ft@p3e9bc5a3.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
| 2026-06-28 03:15:04 +0000 | ft | (~ft@p3e9bcc2e.dip0.t-ipconnect.de) ft |
| 2026-06-28 03:21:28 +0000 | ft | (~ft@p3e9bcc2e.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
| 2026-06-28 03:21:48 +0000 | ft | (~ft@p3e9bc453.dip0.t-ipconnect.de) ft |
| 2026-06-28 03:22:09 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 03:26:27 +0000 | ft | (~ft@p3e9bc453.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 2026-06-28 03:26:31 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 03:26:54 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-06-28 03:27:34 +0000 | ft | (~ft@p3e9bcc51.dip0.t-ipconnect.de) ft |
| 2026-06-28 03:33:27 +0000 | ft | (~ft@p3e9bcc51.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 2026-06-28 03:35:19 +0000 | ft | (~ft@p3e9bc90f.dip0.t-ipconnect.de) ft |
| 2026-06-28 03:37:32 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 03:38:49 +0000 | m | (~travltux@user/travltux) travltux |
| 2026-06-28 03:40:06 +0000 | ft | (~ft@p3e9bc90f.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 2026-06-28 03:40:52 +0000 | ft | (~ft@p4fc2a1bf.dip0.t-ipconnect.de) ft |
| 2026-06-28 03:44:20 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-06-28 03:53:39 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 03:56:35 +0000 | <janus> | how many haskell compilers are currently under development besides ghc? |
| 2026-06-28 03:57:21 +0000 | <janus> | i can think of superstar64/Hazy, microHS, secret fork of jhc, bhc (the ai slop one) |
| 2026-06-28 03:57:56 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 247 seconds) |
| 2026-06-28 03:58:35 +0000 | <janus> | the prorprietary bank one doesn't count because it is strict :P |
| 2026-06-28 04:01:33 +0000 | <janus> | oh and then there is Ben Lynn's, and orionsj's fork of it |
| 2026-06-28 04:01:42 +0000 | <janus> | and roconnor also is working on something similar |
| 2026-06-28 04:09:03 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 04:11:51 +0000 | Guest29 | (~Guest29@8.130.95.189) |
| 2026-06-28 04:13:03 +0000 | Guest91 | (~Guest91@8.130.84.107) |
| 2026-06-28 04:13:14 +0000 | Guest57 | (~Guest57@8.130.95.189) |
| 2026-06-28 04:13:39 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 245 seconds) |
| 2026-06-28 04:13:39 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-06-28 04:15:18 +0000 | Guest57 | (~Guest57@8.130.95.189) (Client Quit) |
| 2026-06-28 04:15:29 +0000 | Guest29 | (~Guest29@8.130.95.189) (Client Quit) |
| 2026-06-28 04:15:30 +0000 | Guest91 | (~Guest91@8.130.84.107) (Client Quit) |
| 2026-06-28 04:16:38 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 04:16:39 +0000 | spew | (~spew@user/spew) (Quit: nyaa~) |
| 2026-06-28 04:24:26 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 04:29:07 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-06-28 04:34:35 +0000 | [dpk] | (~dpk@jains.nonceword.org) |
| 2026-06-28 04:34:38 +0000 | mstruebing_ | (~mstruebin@ns343649.ip-188-165-193.eu) |
| 2026-06-28 04:35:38 +0000 | noctux1 | (~noctux@user/noctux) noctux |
| 2026-06-28 04:35:39 +0000 | Arsen | (16abab341f@gentoo/developer/managarm.dev.Arsen) (Ping timeout: 265 seconds) |
| 2026-06-28 04:35:39 +0000 | lxsameer | (~lxsameer@Serene/lxsameer) (Ping timeout: 265 seconds) |
| 2026-06-28 04:35:39 +0000 | ent | (entgod@kapsi.fi) (Ping timeout: 265 seconds) |
| 2026-06-28 04:35:40 +0000 | noctuks | (IbgdqiR86O@user/noctux) (Ping timeout: 265 seconds) |
| 2026-06-28 04:35:40 +0000 | mstruebing | (~mstruebin@ns343649.ip-188-165-193.eu) (Ping timeout: 265 seconds) |
| 2026-06-28 04:35:40 +0000 | dpk | (~dpk@jains.nonceword.org) (Ping timeout: 265 seconds) |
| 2026-06-28 04:36:17 +0000 | lxsameer | (~lxsameer@Serene/lxsameer) lxsameer |
| 2026-06-28 04:39:26 +0000 | ent | (entgod@kapsi.fi) ent |
| 2026-06-28 04:39:48 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 04:42:26 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 248 seconds) |
| 2026-06-28 04:44:29 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-06-28 04:48:55 +0000 | dolio | (~dolio@130.44.140.168) (Ping timeout: 245 seconds) |
| 2026-06-28 04:49:58 +0000 | dolio | (~dolio@130.44.140.168) dolio |
| 2026-06-28 04:50:29 +0000 | Arsen | (16abab341f@gentoo/developer/managarm.dev.Arsen) Arsen |
| 2026-06-28 04:52:43 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 04:55:11 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 04:59:23 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 243 seconds) |
| 2026-06-28 05:02:52 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 276 seconds) |
| 2026-06-28 05:10:35 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 05:17:49 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 2026-06-28 05:27:28 +0000 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 2026-06-28 05:27:53 +0000 | Sgeo | (~Sgeo@user/sgeo) Sgeo |
| 2026-06-28 05:28:45 +0000 | merijn | (~merijn@62.45.136.136) merijn |
| 2026-06-28 05:33:18 +0000 | merijn | (~merijn@62.45.136.136) (Ping timeout: 265 seconds) |
| 2026-06-28 05:38:00 +0000 | karenw | (~karenw@user/karenw) (Remote host closed the connection) |
| 2026-06-28 05:39:56 +0000 | karenw | (~karenw@user/karenw) karenw |
| 2026-06-28 05:44:04 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 05:48:48 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-06-28 05:52:46 +0000 | pyooque | (~puke@user/puke) puke |
| 2026-06-28 05:52:46 +0000 | puke | Guest7225 |
| 2026-06-28 05:52:46 +0000 | pyooque | puke |
| 2026-06-28 05:53:34 +0000 | Guest7225 | (~puke@user/puke) (Read error: Connection reset by peer) |
| 2026-06-28 05:54:40 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 05:57:28 +0000 | <jaror> | janus: Helium still got some commits two years ago. |
| 2026-06-28 05:59:02 +0000 | tromp | (~textual@2001:1c00:340e:2700:dd19:dfa1:d2a9:f5b7) |
| 2026-06-28 05:59:35 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 275 seconds) |
| 2026-06-28 06:10:03 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 06:14:52 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-06-28 06:17:33 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 06:18:37 +0000 | haritz | (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in) |
| 2026-06-28 06:25:25 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 06:26:17 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 248 seconds) |
| 2026-06-28 06:29:14 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 06:29:56 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-06-28 06:33:54 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 256 seconds) |
| 2026-06-28 06:36:22 +0000 | tusko | (~uwu@user/tusko) (Remote host closed the connection) |
| 2026-06-28 06:40:46 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 06:41:37 +0000 | tusko | (~uwu@user/tusko) tusko |
| 2026-06-28 06:45:18 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 243 seconds) |
| 2026-06-28 06:47:05 +0000 | machinedgod | (~machinedg@d108-173-95-19.abhsia.telus.net) (Ping timeout: 248 seconds) |
| 2026-06-28 06:47:56 +0000 | tromp | (~textual@2001:1c00:340e:2700:dd19:dfa1:d2a9:f5b7) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2026-06-28 06:50:41 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) (Remote host closed the connection) |
| 2026-06-28 06:50:57 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-06-28 06:51:55 +0000 | traxex | (traxex@user/traxex) traxex |
| 2026-06-28 06:55:40 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 07:01:01 +0000 | tt12316070197800 | (~tt1231@2603:6010:8700:4a81:a4f6:acff:fe95:3803) (Quit: The Lounge - https://thelounge.chat) |
| 2026-06-28 07:02:15 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-06-28 07:03:03 +0000 | tt12316070197800 | (~tt1231@2603:6010:8700:4a81:a4f6:acff:fe95:3803) tt1231 |
| 2026-06-28 07:09:09 +0000 | wootehfoot | (~wootehfoo@user/wootehfoot) wootehfoot |
| 2026-06-28 07:11:15 +0000 | berke93_ | (~default@193.108.195.249) |
| 2026-06-28 07:14:11 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 07:15:00 +0000 | tromp | (~textual@2001:1c00:340e:2700:dd19:dfa1:d2a9:f5b7) |
| 2026-06-28 07:15:49 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 07:16:46 +0000 | takuan | (~takuan@d8D86B9E9.access.telenet.be) |
| 2026-06-28 07:18:05 +0000 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 245 seconds) |
| 2026-06-28 07:21:34 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-06-28 07:24:37 +0000 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 2026-06-28 07:32:13 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 07:32:43 +0000 | ski | (~ski@31-208-30-55.cust.bredband2.com) (Ping timeout: 264 seconds) |
| 2026-06-28 07:33:35 +0000 | ski | (~ski@31-208-30-55.cust.bredband2.com) |
| 2026-06-28 07:36:10 +0000 | [dpk] | dpk |
| 2026-06-28 07:36:41 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-06-28 07:47:35 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 07:49:42 +0000 | ss4 | (~wootehfoo@user/wootehfoot) wootehfoot |
| 2026-06-28 07:51:59 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-06-28 07:52:48 +0000 | ss4 | (~wootehfoo@user/wootehfoot) (Client Quit) |
| 2026-06-28 07:53:30 +0000 | wootehfoot | (~wootehfoo@user/wootehfoot) (Ping timeout: 245 seconds) |
| 2026-06-28 07:56:42 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 08:02:39 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-06-28 08:04:08 +0000 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
| 2026-06-28 08:07:18 +0000 | wootehfoot | (~wootehfoo@user/wootehfoot) wootehfoot |
| 2026-06-28 08:11:23 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 252 seconds) |
| 2026-06-28 08:13:17 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 08:14:46 +0000 | divlamir | (~divlamir@user/divlamir) (Read error: Connection reset by peer) |
| 2026-06-28 08:14:52 +0000 | divlamir_ | (~divlamir@user/divlamir) divlamir |
| 2026-06-28 08:15:32 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 08:15:43 +0000 | divlamir_ | divlamir |
| 2026-06-28 08:17:42 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-06-28 08:28:40 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 08:30:33 +0000 | Digit | (~user@user/digit) (Read error: Connection reset by peer) |
| 2026-06-28 08:33:15 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-06-28 08:38:12 +0000 | karenw | (~karenw@user/karenw) (Ping timeout: 252 seconds) |
| 2026-06-28 08:43:57 +0000 | hayhaystack | (~husshpupp@user/husshpuppy) husshpuppy |
| 2026-06-28 08:44:02 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 08:48:34 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-06-28 08:51:02 +0000 | acidjnk_new | (~acidjnk@p200300d6e74def039d5a069af2df0e93.dip0.t-ipconnect.de) |
| 2026-06-28 08:51:12 +0000 | acidjnk | (~acidjnk@p200300d6e74def039d5a069af2df0e93.dip0.t-ipconnect.de) acidjnk |
| 2026-06-28 08:51:35 +0000 | Googulator52 | (~Googulato@80-95-87-76.pool.digikabel.hu) (Quit: Client closed) |
| 2026-06-28 08:51:37 +0000 | rubin55 | (sid666180@id-666180.ilkley.irccloud.com) rubin55 |
| 2026-06-28 08:52:00 +0000 | Googulator52 | (~Googulato@80-95-87-76.pool.digikabel.hu) |
| 2026-06-28 08:54:55 +0000 | Digit | (~user@user/digit) Digit |
| 2026-06-28 08:55:16 +0000 | lynxx_ | (~lynxx_@2001:9e8:3bf4:6d00:7c69:8855:c9f5:ce3b) |
| 2026-06-28 08:55:46 +0000 | lynxx_ | (~lynxx_@2001:9e8:3bf4:6d00:7c69:8855:c9f5:ce3b) (Client Quit) |
| 2026-06-28 08:56:52 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 276 seconds) |
| 2026-06-28 08:57:43 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-28 08:58:17 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 09:03:15 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 272 seconds) |
| 2026-06-28 09:04:41 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-06-28 09:28:33 +0000 | Digit | (~user@user/digit) (Read error: Connection reset by peer) |
| 2026-06-28 09:29:21 +0000 | Digit` | (~user@195.144.208.46.dyn.plus.net) |
| 2026-06-28 09:33:55 +0000 | poscat | (~poscat@user/poscat) (Remote host closed the connection) |
| 2026-06-28 09:34:34 +0000 | ski | (~ski@31-208-30-55.cust.bredband2.com) (Ping timeout: 276 seconds) |
| 2026-06-28 09:34:58 +0000 | traxex | (traxex@user/traxex) (Ping timeout: 265 seconds) |
| 2026-06-28 09:36:58 +0000 | poscat | (~poscat@user/poscat) poscat |
| 2026-06-28 09:37:54 +0000 | berke93_ | (~default@193.108.195.249) (Remote host closed the connection) |
| 2026-06-28 09:38:19 +0000 | berke93_ | (~default@193.108.195.249) |
| 2026-06-28 09:40:41 +0000 | ski | (~ski@31-208-30-55.cust.bredband2.com) |
| 2026-06-28 09:41:15 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 265 seconds) |
| 2026-06-28 09:45:23 +0000 | __monty__ | (~toonn@user/toonn) toonn |
| 2026-06-28 09:45:26 +0000 | ski | (~ski@31-208-30-55.cust.bredband2.com) (Ping timeout: 256 seconds) |
| 2026-06-28 09:46:43 +0000 | <unworriedsafari> | is it me or is hackage.haskell.org slow at the moment? |
| 2026-06-28 09:47:32 +0000 | <jaror> | It's fine for me now (just browsing the packages) |
| 2026-06-28 09:48:00 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 09:48:09 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-06-28 09:50:17 +0000 | <unworriedsafari> | ok it's alright again here as well |
| 2026-06-28 10:09:30 +0000 | tcard__ | (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving) |
| 2026-06-28 10:21:24 +0000 | ski | (~ski@31-208-30-244.cust.bredband2.com) |
| 2026-06-28 10:30:59 +0000 | wootehfoot | (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 2026-06-28 10:32:04 +0000 | karenw | (~karenw@user/karenw) karenw |
| 2026-06-28 10:34:23 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 252 seconds) |
| 2026-06-28 10:34:27 +0000 | berke93__ | (~default@82.166.36.177) |
| 2026-06-28 10:36:37 +0000 | berke93_ | (~default@193.108.195.249) (Read error: Connection reset by peer) |
| 2026-06-28 10:37:38 +0000 | berke93___ | (~default@193.108.195.249) |
| 2026-06-28 10:39:20 +0000 | ft | (~ft@p4fc2a1bf.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 2026-06-28 10:41:18 +0000 | berke93__ | (~default@82.166.36.177) (Ping timeout: 244 seconds) |
| 2026-06-28 10:41:48 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 10:51:12 +0000 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 2026-06-28 10:51:27 +0000 | ft | (~ft@p508db997.dip0.t-ipconnect.de) ft |
| 2026-06-28 10:56:39 +0000 | ft | (~ft@p508db997.dip0.t-ipconnect.de) (Ping timeout: 265 seconds) |
| 2026-06-28 10:57:20 +0000 | ft | (~ft@p3e9bc25c.dip0.t-ipconnect.de) ft |
| 2026-06-28 11:02:51 +0000 | ft | (~ft@p3e9bc25c.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 2026-06-28 11:08:52 +0000 | ft | (~ft@p3e9bccce.dip0.t-ipconnect.de) ft |
| 2026-06-28 11:09:04 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 245 seconds) |
| 2026-06-28 11:10:45 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 11:11:05 +0000 | puke | (~puke@user/puke) (Read error: Connection reset by peer) |
| 2026-06-28 11:11:22 +0000 | puke | (~puke@user/puke) puke |
| 2026-06-28 11:26:00 +0000 | skum | (~skum@user/skum) skum |
| 2026-06-28 11:31:14 +0000 | Lord_of_Life_ | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-06-28 11:32:07 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 264 seconds) |
| 2026-06-28 11:33:13 +0000 | vanishingideal | (~vanishing@user/vanishingideal) (Ping timeout: 252 seconds) |
| 2026-06-28 11:34:06 +0000 | Lord_of_Life_ | Lord_of_Life |
| 2026-06-28 11:35:01 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Excess Flood) |
| 2026-06-28 11:35:56 +0000 | Digit` | (~user@195.144.208.46.dyn.plus.net) (Ping timeout: 256 seconds) |
| 2026-06-28 11:43:55 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 276 seconds) |
| 2026-06-28 11:44:45 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 11:50:15 +0000 | Digit | (~user@user/digit) Digit |
| 2026-06-28 11:58:08 +0000 | tremon | (~tremon@83-80-159-219.cable.dynamic.v4.ziggo.nl) tremon |
| 2026-06-28 12:11:53 +0000 | weary-traveler | (~user@user/user363627) user363627 |
| 2026-06-28 12:14:54 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-06-28 12:16:23 +0000 | fp | (~Thunderbi@178-133-117-157.mobile.vf-ua.net) fp |
| 2026-06-28 12:18:58 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer) |
| 2026-06-28 12:20:28 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-06-28 12:21:26 +0000 | <fp> | So I've been trying to get my head around how =IO= works, so I decided that I would try making a basic implementation of it with Rust. How far, at the high level, is what I'm doing from what Haskell does? https://paste.rs/SIL3v.rs |
| 2026-06-28 12:22:31 +0000 | <fp> | Of course, mine uses Rust std to do I/O instead of syscalls, but I'm interested in if the interface I've made is basically similar |
| 2026-06-28 12:23:12 +0000 | <mauke> | can't be right |
| 2026-06-28 12:23:51 +0000 | <mauke> | IO::ret(s).bind(|s| { ... }) is pointless; could just { ... } directly |
| 2026-06-28 12:24:15 +0000 | <mauke> | (because 'return x >>= f' is 'f x') |
| 2026-06-28 12:25:37 +0000 | <fp> | Sure, but I have to fake it a bit since I'm not interested in implementing the low level IO |
| 2026-06-28 12:25:49 +0000 | <mauke> | fp: main = let { x :: IO (); x = putStrLn "hi" } in print (length [x, x, x, x, x]) >> x >> x |
| 2026-06-28 12:26:08 +0000 | <mauke> | if you do the equivalent thing in rust, what does it output? |
| 2026-06-28 12:26:38 +0000 | <mauke> | let me guess at the syntax |
| 2026-06-28 12:28:06 +0000 | <mauke> | fn main() { let x = put_str_ln("hi"); print(???).bind(|_| { x.bind(|_| { x }) }); } |
| 2026-06-28 12:28:10 +0000 | <mauke> | not sure about lists |
| 2026-06-28 12:28:48 +0000 | <mauke> | actually, we can do better |
| 2026-06-28 12:29:22 +0000 | <mauke> | main = let { x :: IO (); x = putStrLn "hi" } in print (length [putStrLn "a", putStrLn "b", putStrLn "c"]) >> x >> x |
| 2026-06-28 12:30:02 +0000 | <mauke> | the correct output is "3\nhi\nhi\n" |
| 2026-06-28 12:30:23 +0000 | <fp> | For the first one, it's "hi\n5hi\nhi" |
| 2026-06-28 12:30:24 +0000 | <mauke> | I suspect yours would give "hi\na\nb\nc\n" |
| 2026-06-28 12:31:33 +0000 | <fp> | But actually I had to cheat with the first one. I couldn't reuse the x variable for the two >>s, so I rewrote put_str_ln("hi") |
| 2026-06-28 12:32:31 +0000 | rensenwxre | (~fwam@user/fwam) fwam |
| 2026-06-28 12:33:03 +0000 | <fp> | So without the cheat, it would've said "hi\n5\n" |
| 2026-06-28 12:35:12 +0000 | weary-traveler | (~user@user/user363627) (Quit: Konversation terminated!) |
| 2026-06-28 12:35:48 +0000 | weary-traveler | (~user@user/user363627) user363627 |
| 2026-06-28 12:39:34 +0000 | <fp> | > I suspect yours would give "hi\na\nb\nc\n" |
| 2026-06-28 12:39:34 +0000 | <fp> | Yeah, or "hi\na\nb\nc3", but close enough |
| 2026-06-28 12:39:35 +0000 | <lambdabot> | Data constructor not in scope: |
| 2026-06-28 12:39:35 +0000 | <lambdabot> | I :: t0 -> t1 -> t2 -> t3 -> String -> tVariable not in scope: suspectVari... |
| 2026-06-28 12:43:30 +0000 | <fp> | So I guess I need to make a structure of closures and run it with an explicit command, like Io::ret(...).bind(...).run(). But Rust doesn't make that easy... |
| 2026-06-28 12:45:32 +0000 | <mauke> | I don't know rust, but I just prototyped it in perl: https://pt.gayr.at/p/akEXWseeFyQMI20qKUFlL479SHI |
| 2026-06-28 12:46:08 +0000 | <mauke> | (no 'print' because we're taking advantage of perl's implicit 'show') |
| 2026-06-28 12:47:36 +0000 | Pozyomka | (~pyon@user/pyon) (Quit: test) |
| 2026-06-28 12:51:16 +0000 | Pozyomka | (~pyon@user/pyon) pyon |
| 2026-06-28 12:52:59 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) bitdex |
| 2026-06-28 12:53:05 +0000 | fp | (~Thunderbi@178-133-117-157.mobile.vf-ua.net) (Ping timeout: 256 seconds) |
| 2026-06-28 12:54:47 +0000 | traxex | (traxex@user/traxex) traxex |
| 2026-06-28 12:58:26 +0000 | fp | (~Thunderbi@46-133-26-225.mobile.vf-ua.net) fp |
| 2026-06-28 13:00:03 +0000 | <fp> | mauke: Ok yeah that's basically what I tried at first. Unfortunately, Rust makes extending the lifetime of a capturing closure a major PITA |
| 2026-06-28 13:00:57 +0000 | <fp> | Maybe if I bring in a garbage collector it'll be easier, but I'm not sure it's possible to implement this otherwise |
| 2026-06-28 13:01:15 +0000 | <tomsmeding> | fp: wrap everything everywhere in Rc<>? |
| 2026-06-28 13:01:33 +0000 | <tomsmeding> | then as long as you don't create cycles, you get a "GC" like Haskell has |
| 2026-06-28 13:03:25 +0000 | <fp> | I guess if I force users to put everything they want returned into an Rc first, that could work |
| 2026-06-28 13:04:26 +0000 | <tomsmeding> | you're trying to simulate a language that's maximally-YOLO with memory management (pure Haskell) in one that's unusually precise about memory management |
| 2026-06-28 13:06:59 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 245 seconds) |
| 2026-06-28 13:07:19 +0000 | <tomsmeding> | fp: "struct Io<T>(T);" "/// A computation that, when performed, does some I/O before returning a value of type `T`." |
| 2026-06-28 13:07:23 +0000 | <tomsmeding> | where's the computation? This is just a T |
| 2026-06-28 13:08:10 +0000 | <tomsmeding> | try `struct Io<T>(Fn() -> T);` |
| 2026-06-28 13:08:25 +0000 | <fp> | Yes and that is the root of all evil |
| 2026-06-28 13:08:41 +0000 | <tomsmeding> | because of lifetimes? |
| 2026-06-28 13:08:51 +0000 | <tomsmeding> | add .clone() and Rc<> until it works |
| 2026-06-28 13:09:09 +0000 | <tomsmeding> | lifetimes are 100% distracting from the mechanics of IO :p |
| 2026-06-28 13:10:34 +0000 | <fp> | That actually doesn't work because Fn() -> T is a DST, so you need to Box (or just &, but I won't) it and use dyn, or use a function pointer (but that means capturing closures aren't allowed). And even with Rc and clone, you still run into lifetime issues |
| 2026-06-28 13:11:45 +0000 | <fp> | like in `fn ret(t: Rc<T>) -> Io<T> { Io(Rc::new(|| t.clone())) }`, t doesn't have a long enough lifetime |
| 2026-06-28 13:12:51 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 13:13:54 +0000 | <tomsmeding> | also not if you `move || t`? |
| 2026-06-28 13:14:23 +0000 | <tomsmeding> | and yes my rust is rusty, add Box<> as necessary |
| 2026-06-28 13:14:42 +0000 | <fp> | No, move doesn't work |
| 2026-06-28 13:15:28 +0000 | <tomsmeding> | what precisely is the error? ret() owns t, right, so it should be able to move it into the closure |
| 2026-06-28 13:16:23 +0000 | <fp> | Ultimately, my goal isn't to emulate Haskell per se, but to have a composable Io interface in Rust. For context, I'm testing this out to see if I could make an API for an industrial fieldbus this way |
| 2026-06-28 13:16:34 +0000 | <fp> | "T may not live long enough" |
| 2026-06-28 13:17:27 +0000 | <tomsmeding> | I think this experience is enough to show that Haskell's way of representing an IO computation -- using closures -- is not usable in Rust :p |
| 2026-06-28 13:17:38 +0000 | <fp> | Yeah I'm seeing that |
| 2026-06-28 13:17:46 +0000 | <tomsmeding> | you might have more luck with the free monad encoding |
| 2026-06-28 13:18:06 +0000 | <tomsmeding> | hm, no that still has closures everywhere |
| 2026-06-28 13:18:34 +0000 | <fp> | I guess building a stack machine might be more reasonable |
| 2026-06-28 13:18:54 +0000 | <tomsmeding> | what Haskell's "IO" gives you is a data type for describing arbitrary side-effectful computations in a non-side-effectful language |
| 2026-06-28 13:18:56 +0000 | <tomsmeding> | is that what you need? |
| 2026-06-28 13:18:57 +0000 | <fp> | Or generally like an interpreter |
| 2026-06-28 13:23:33 +0000 | <fp> | What I'm imagining is that a user can describe a complex IO action and that can be dispatched to the IO device or to a server that does the IO and they get back either the expected data or a rich error |
| 2026-06-28 13:24:42 +0000 | <tomsmeding> | if you want to dispatch the IO computation to a device, and you describe IO like Haskell does, you'll need to also run arbitrary Rust code on the device |
| 2026-06-28 13:24:52 +0000 | <tomsmeding> | and serialise, transfer and deserialise the closures |
| 2026-06-28 13:25:23 +0000 | <fp> | Sure |
| 2026-06-28 13:25:26 +0000 | <tomsmeding> | because an arbitrary IO action contains calls to primitive IO operations as well as "pure" glue code that decides what next action to take |
| 2026-06-28 13:25:44 +0000 | <hc> | Hmm, not having read the backlog thoroughly, but isn't that pretty much what rust's async/"Futures" do? Wrap IO in closures? |
| 2026-06-28 13:26:00 +0000 | <hc> | (Not that I'm saying I particularly like async rust) |
| 2026-06-28 13:26:16 +0000 | <tomsmeding> | I feel like this is wrapping closures in IO instead of IO in closures |
| 2026-06-28 13:26:50 +0000 | <tomsmeding> | fp: can you just dispatch a single primitive IO action to the device, or do you really need to dispatch a larger program? |
| 2026-06-28 13:27:18 +0000 | <tomsmeding> | because then the first thing I'd think about is "what kind of computation, aside from the precise representation of the IO operations, can I run on this device" |
| 2026-06-28 13:27:45 +0000 | <tomsmeding> | and what kind of computation do you actually want to run |
| 2026-06-28 13:27:55 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 276 seconds) |
| 2026-06-28 13:27:57 +0000 | <fp> | That is a good question to ask, one that I should really consider |
| 2026-06-28 13:28:10 +0000 | <tomsmeding> | an intermediate version that is much more feasible is defining a little language that you have an interpreter for on the device |
| 2026-06-28 13:28:21 +0000 | <tomsmeding> | (I think you already suggested this) |
| 2026-06-28 13:28:42 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-06-28 13:28:55 +0000 | <tomsmeding> | that means you have to also write the stuff in the .bind() closures in your little language, but the payoff is that the thing you send to the device, and what you execute there, is just a regular old data type |
| 2026-06-28 13:29:05 +0000 | <tomsmeding> | which you can serde etc |
| 2026-06-28 13:29:39 +0000 | <tomsmeding> | (I'm assuming "device" here is a separate piece of hardware that doesn't necessarily share a CPU architecture with the "main" computer) |
| 2026-06-28 13:30:01 +0000 | berke93___ | (~default@193.108.195.249) (Ping timeout: 266 seconds) |
| 2026-06-28 13:30:58 +0000 | <fp> | Yeah like I have some programs that are running with this fieldbus IO, but it's very timing sensitive, so I really need to move it to a different process (though same machine is probably fine). But then of course I have to develop a way to command IO actions of the other process, which is how I got here |
| 2026-06-28 13:31:34 +0000 | <fp> | And also IO feels like magic sometimes and I wanted to understand it better |
| 2026-06-28 13:31:53 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer) |
| 2026-06-28 13:33:09 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-06-28 13:33:10 +0000 | <tomsmeding> | if it's a different process on the same machine, I'd seriously consider if there is way to group your computations into "pre-made programs" that can be triggered by the commanding process as a whole |
| 2026-06-28 13:33:22 +0000 | <fp> | The magic is less now, though lazy evaluation still feels crazy to me. That you can make a repl with =getContents >>= \contents -> putStrLn $ (unlines . map show . map eval . lines) contents= is bonkers |
| 2026-06-28 13:33:48 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 256 seconds) |
| 2026-06-28 13:34:19 +0000 | <tomsmeding> | as in, instead of constructing an IO computation in the commanding process and sending it over to the fieldbus process, look at your application and write a normal `fn` that does the whole thing, put it in a list of functions (with a name for each), and have the commanding process tell the fieldbus process to "now execute function abc" |
| 2026-06-28 13:34:30 +0000 | <tomsmeding> | possibly with some serialised arguments |
| 2026-06-28 13:34:54 +0000 | <fp> | Maybe yeah |
| 2026-06-28 13:34:55 +0000 | <tomsmeding> | heh, yes that's fun |
| 2026-06-28 13:35:25 +0000 | <fp> | Like there's no loop! my repl is a rep but it still works! |
| 2026-06-28 13:35:33 +0000 | <tomsmeding> | lol |
| 2026-06-28 13:36:05 +0000 | <tomsmeding> | that's lazy IO, though, not just lazy evaluation |
| 2026-06-28 13:36:08 +0000 | <mauke> | map is a loop |
| 2026-06-28 13:36:25 +0000 | <tomsmeding> | yeah but there's only one R and only one P, and the L is inside the E |
| 2026-06-28 13:36:29 +0000 | <tomsmeding> | RE(L)P |
| 2026-06-28 13:37:09 +0000 | <fp> | I guess I could simplify with map (show . eval) |
| 2026-06-28 13:37:25 +0000 | <tomsmeding> | fp: that example relies on 'contents' being a pure value that, when you look at it, does some IO to give you the thing you're trying to read |
| 2026-06-28 13:37:37 +0000 | <tomsmeding> | """pure""" |
| 2026-06-28 13:37:53 +0000 | <tomsmeding> | that requires some unsafeInterleaveIO in getContents |
| 2026-06-28 13:38:36 +0000 | <fp> | Yeah I tried digging into getContents to see what it does. Suffice to say I didn't understand what was going on |
| 2026-06-28 13:39:00 +0000 | <tomsmeding> | if you have a simple implementation of getContents that just reads its input in IO as "normal", your REPL would be "read all input lines, then execute all of them" |
| 2026-06-28 13:39:06 +0000 | <tomsmeding> | which is not a REPL and not nearly as magic |
| 2026-06-28 13:39:28 +0000 | <fp> | That said, I did see RealWorld, which is cool. |
| 2026-06-28 13:39:54 +0000 | <tomsmeding> | lazy evaluation means that a part of a value may not actually be computed yet; it's a thunk, i.e. a closure, that gets evaluated whenever you try to look at it |
| 2026-06-28 13:39:56 +0000 | <fp> | Ok so getContents is magic in particular |
| 2026-06-28 13:40:16 +0000 | <tomsmeding> | but that closure is a pure function, so you don't see it in the output (apart from being faster/slower/terminating) |
| 2026-06-28 13:41:04 +0000 | <tomsmeding> | now if you do tricks to put a side effect inside a thunk, now suddenly you have pure code (that looks at the thunk and thus triggers its evaluation) that triggers IO |
| 2026-06-28 13:41:09 +0000 | <fp> | So in another language, lazy evaluation might look like `var foo = { get() { compute_foo() } }` |
| 2026-06-28 13:41:30 +0000 | <fp> | perhaps with memoization as well |
| 2026-06-28 13:41:32 +0000 | <tomsmeding> | this means that what IO gets executed when depends on the evaluation order of your pure code, which normally is not allowed to happen in Haskell (because it makes reasoning extremely difficult) |
| 2026-06-28 13:41:41 +0000 | <tomsmeding> | fp: yes, with memoisation, that's the point |
| 2026-06-28 13:42:04 +0000 | <tomsmeding> | getContents returns a thunk that does IO when you look at it |
| 2026-06-28 13:42:10 +0000 | <tomsmeding> | and it uses unsafeInterleaveIO to achieve that |
| 2026-06-28 13:42:18 +0000 | <fp> | Wild |
| 2026-06-28 13:42:34 +0000 | <tomsmeding> | this is called "lazy IO" and there is a decent fraction of Haskellers (though certainly not 100%) that believe lazy IO in Prelude was a bad idea |
| 2026-06-28 13:42:58 +0000 | <int-e> | tbh "it's magic" is a good working theory |
| 2026-06-28 13:43:03 +0000 | <tomsmeding> | because of its unexpected and unintuitive behaviour if you don't carefully track what's going on, or if you program doesn't look like the schoolbook examples that inspired lazy IO |
| 2026-06-28 13:44:04 +0000 | <jaror> | lazy IO is especially bad if handles are involved, but otherwise I think it isn't much harder than normal file IO (which is already hard) |
| 2026-06-28 13:44:25 +0000 | rainbyte | (~rainbyte@181.47.219.31) (Read error: Connection reset by peer) |
| 2026-06-28 13:44:32 +0000 | <int-e> | eh, it's convenient for programs of no importance (or programs that run in environments that don't fail ;-) ) |
| 2026-06-28 13:45:24 +0000 | <int-e> | if you actually care about when IO happens and you want to handle errors it turns very bad very quickly... well, or slowly, depending on the pace at which you consume the input |
| 2026-06-28 13:45:30 +0000 | rainbyte | (~rainbyte@181.47.219.31) rainbyte |
| 2026-06-28 13:45:39 +0000 | <tomsmeding> | % System.Process.system "ls" |
| 2026-06-28 13:45:39 +0000 | <yahb2> | entry.sh ; initdefs.hs ; Yahb2Defs.hs ; ExitSuccess |
| 2026-06-28 13:45:43 +0000 | <tomsmeding> | % do { h <- openFile "initdefs.hs" ReadMode; s <- hGetContents h; hClose h; return s } |
| 2026-06-28 13:45:44 +0000 | <yahb2> | *** Exception: initdefs.hs: hGetContents: illegal operation (delayed read on closed handle) ; ; HasCallStack backtrace: ; ioException, called at libraries/ghc-internal/src/GHC/Internal/IO/Handle... |
| 2026-06-28 13:45:52 +0000 | <fp> | Oh I didn't think about IO errors with it |
| 2026-06-28 13:46:02 +0000 | <fp> | that's gotta be funky |
| 2026-06-28 13:46:08 +0000 | <tomsmeding> | why did that fail? Because the hGetContents did lazy IO and nothing actually happened until ghci tried to print s at the end, after hClose already happened |
| 2026-06-28 13:46:34 +0000 | <fp> | Oh dear |
| 2026-06-28 13:46:56 +0000 | <c_wraith> | I've got very mixed feelings, because I do like the convenience of lazy IO for one-off programs. But for anything complex, it makes things worse rather than helping. |
| 2026-06-28 13:47:07 +0000 | <tomsmeding> | same as c_wraith here |
| 2026-06-28 13:47:13 +0000 | <int-e> | hGetContents changes the handle into a weird "semi-closed" state that indicates that you don't know anymore whether it's open or closed |
| 2026-06-28 13:47:21 +0000 | <tomsmeding> | it's great as a poor-man's streaming framework that is in Prelude |
| 2026-06-28 13:47:33 +0000 | <int-e> | and prevents you from interfering with the ongoing lazy reads |
| 2026-06-28 13:47:34 +0000 | <tomsmeding> | but then you actually try to do something non-trivial with it and it explodes in your face |
| 2026-06-28 13:47:54 +0000 | <fp> | It's awfully neat that it makes repls a one-liner. Although I guess lisp has (loop (print (eval (read)))), so that's nothing new |
| 2026-06-28 13:48:12 +0000 | <int-e> | Does this get more funky on Windows and mandatory file locking? |
| 2026-06-28 13:48:22 +0000 | <int-e> | :t interact |
| 2026-06-28 13:48:23 +0000 | <lambdabot> | (String -> String) -> IO () |
| 2026-06-28 13:48:30 +0000 | <int-e> | yeah |
| 2026-06-28 13:48:40 +0000 | <tomsmeding> | forever (readLine >>= print . eval . read) |
| 2026-06-28 13:49:10 +0000 | <tomsmeding> | forever (read <$> getLine >>= print . eval) |
| 2026-06-28 13:49:17 +0000 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
| 2026-06-28 13:49:26 +0000 | <tomsmeding> | LRPE, Haskell's REPL |
| 2026-06-28 13:49:46 +0000 | <fp> | Fair enough |
| 2026-06-28 13:50:06 +0000 | <tomsmeding> | I guess EPRL since REPL was also in reverse |
| 2026-06-28 13:50:20 +0000 | <c_wraith> | :t readLn |
| 2026-06-28 13:50:21 +0000 | <lambdabot> | Read a => IO a |
| 2026-06-28 13:50:31 +0000 | <tomsmeding> | yeah sure |
| 2026-06-28 13:50:41 +0000 | <tomsmeding> | forever (print . eval =<< readLn) |
| 2026-06-28 13:50:46 +0000 | <tomsmeding> | here we go, a REPL |
| 2026-06-28 13:50:53 +0000 | <c_wraith> | I don't like using Read as a command interface, though |
| 2026-06-28 13:51:10 +0000 | <tomsmeding> | don't you like writing `Cmd "ls" []`? |
| 2026-06-28 13:52:19 +0000 | <c_wraith> | it's not my favorite |
| 2026-06-28 13:52:27 +0000 | <int-e> | . o O ( main = readLn >>= pure . eval >>= print >>= loop where loop = main ) |
| 2026-06-28 13:53:06 +0000 | <int-e> | or (<$>) eval so it's all punctuation? |
| 2026-06-28 13:53:45 +0000 | <int-e> | . o O ( OoO = order of operations ) |
| 2026-06-28 13:53:57 +0000 | <tomsmeding> | readLn <&> eval >>= print >>= loop |
| 2026-06-28 13:54:15 +0000 | <tomsmeding> | uh, >>loop |
| 2026-06-28 14:08:11 +0000 | yanmaani | (~yanmaani@gateway/tor-sasl/yanmaani) (Ping timeout: 245 seconds) |
| 2026-06-28 14:08:41 +0000 | yanmaani | (~yanmaani@gateway/tor-sasl/yanmaani) yanmaani |
| 2026-06-28 14:10:06 +0000 | <jaror> | Does anyone have a strong opinion on software forges? |
| 2026-06-28 14:10:31 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 14:10:41 +0000 | <jaror> | It seems like github is the only place left that can provide some resistance to the ai scraper ddos |
| 2026-06-28 14:11:46 +0000 | <jaror> | I guess that's a new advantage of Darcs: the bots don't know how to clone your repo :) |
| 2026-06-28 14:17:00 +0000 | <mauke> | github is an ai scraper |
| 2026-06-28 14:17:02 +0000 | <tomsmeding> | jaror: my cgit instance is doing fine, although that of course is _just_ git, no issues, PRs, etc. |
| 2026-06-28 14:17:24 +0000 | <mauke> | quite happy with codeberg so far |
| 2026-06-28 14:17:36 +0000 | vanishingideal | (~vanishing@user/vanishingideal) (Ping timeout: 246 seconds) |
| 2026-06-28 14:18:41 +0000 | <jaror> | mauks: yes, I agree, but the 93% uptime makes it hard to convince others. |
| 2026-06-28 14:19:43 +0000 | haritz | (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) |
| 2026-06-28 14:19:43 +0000 | haritz | (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) (Changing host) |
| 2026-06-28 14:19:43 +0000 | haritz | (~hrtz@user/haritz) haritz |
| 2026-06-28 14:20:16 +0000 | <jaror> | mauke* |
| 2026-06-28 14:21:06 +0000 | gmg | (~user@user/gehmehgeh) (Ping timeout: 245 seconds) |
| 2026-06-28 14:21:27 +0000 | <jaror> | tomsmeding: have you taken special precautions against scrapers? |
| 2026-06-28 14:22:06 +0000 | <jaror> | I'm mainly asking because the situation with the GHC GitLab is getting critical. |
| 2026-06-28 14:22:16 +0000 | gmg | (~user@user/gehmehgeh) gehmehgeh |
| 2026-06-28 14:22:38 +0000 | <tomsmeding> | zero |
| 2026-06-28 14:22:48 +0000 | <tomsmeding> | Though maybe there just isn't enough on there! |
| 2026-06-28 14:23:37 +0000 | <tomsmeding> | I don't know if they're spamming it, because I as a user of that VPS (also for other things) don't notice it :p |
| 2026-06-28 14:27:21 +0000 | <tomsmeding> | jaror: are they getting through anubis? |
| 2026-06-28 14:27:22 +0000 | <fgarcia> | i think something else people could try are hosting git and also using cloudflare or anubis |
| 2026-06-28 14:28:16 +0000 | <tomsmeding> | and if so, do we have any idea if they just have a generic browser emulator or if they have special-cased code for anubis |
| 2026-06-28 14:28:46 +0000 | <tomsmeding> | (in the latter case, hand-rolling a portal and changing it once in a while might help, but not in the former case) |
| 2026-06-28 14:30:20 +0000 | <jaror> | It seems Anubis might be causing some of the issues, but yeah even with anubis the GitLab is slow sometimes. |
| 2026-06-28 14:31:43 +0000 | <tomsmeding> | I think to diagnose this you'd need info from the server admins about what's going on in the server logs |
| 2026-06-28 14:31:49 +0000 | <jaror> | Where "slow" means >10s response times |
| 2026-06-28 14:32:02 +0000 | <tomsmeding> | what exactly is being spammed when the site is slow |
| 2026-06-28 14:32:10 +0000 | <tomsmeding> | and by whom |
| 2026-06-28 14:33:14 +0000 | <jaror> | The admins (mainly mangoiv) is aware and has tried a lot, but nothing seems to work very well. |
| 2026-06-28 14:33:19 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 264 seconds) |
| 2026-06-28 14:33:29 +0000 | <tomsmeding> | right |
| 2026-06-28 14:33:37 +0000 | <tomsmeding> | are we sure that the problem is that gitlab is slow? |
| 2026-06-28 14:34:03 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-06-28 14:34:08 +0000 | <tomsmeding> | I wouldn't be surprised if the GHC gitlab is just spammed much more than git.tomsmeding.com, if only because there's more stuff on there to spam in the first place |
| 2026-06-28 14:35:17 +0000 | <tomsmeding> | at some point, if there are enough requests, there's not much to do except blocking based on the sender of the request, which, with the botnets, is infeasible except for big centralised companies |
| 2026-06-28 14:35:43 +0000 | <jaror> | That might be the case, but in the end it is unacceptably slow. GitHub and Codeberg do seem to manage better. |
| 2026-06-28 14:36:18 +0000 | <tomsmeding> | it _is_ true that my experience with gitlab so far, also outside GHC's instance, has been "it's kinda slow" |
| 2026-06-28 14:36:42 +0000 | <tomsmeding> | but that holds for github too, perhaps even more, though github probably has micro$oft resources for blocking bad actors |
| 2026-06-28 14:37:12 +0000 | <tomsmeding> | the problem with the GHC gitlab is that you genuinely use a bunch of the features of gitlab, including and not limited to the wiki |
| 2026-06-28 14:37:13 +0000 | <jaror> | For me it is ~10s per request but some other regularly have to wait minutes or even get errors. |
| 2026-06-28 14:41:26 +0000 | fp | (~Thunderbi@46-133-26-225.mobile.vf-ua.net) (Quit: fp) |
| 2026-06-28 14:41:45 +0000 | fp | (~Thunderbi@46-133-26-225.mobile.vf-ua.net) fp |
| 2026-06-28 14:42:29 +0000 | <tomsmeding> | jaror: it's possible that forgejo is faster than gitlab, which would alleviate some of the pressure, but if it's just 2x as fast, that just postpones the problems until scraper volume doubles |
| 2026-06-28 14:43:43 +0000 | <tomsmeding> | so if that's the case and codeberg is still much better off than the GHC gitlab, they must be doing some clever blocking |
| 2026-06-28 14:45:45 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer) |
| 2026-06-28 14:46:00 +0000 | fp | (~Thunderbi@46-133-26-225.mobile.vf-ua.net) (Ping timeout: 245 seconds) |
| 2026-06-28 14:46:10 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-06-28 14:47:55 +0000 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
| 2026-06-28 14:53:00 +0000 | spew | (~spew@user/spew) spew |
| 2026-06-28 14:54:34 +0000 | <jaror> | Yeah, so the choices seem to be either Codeberg or GitHub. The latter seems more likely to survive better in the current landscape, but I'd hope codeberg can survive too. |
| 2026-06-28 14:59:19 +0000 | <spew> | I use source hut |
| 2026-06-28 15:00:40 +0000 | <tomsmeding> | even loading the banner photo on the anubis check page takes a long time |
| 2026-06-28 15:00:46 +0000 | <tomsmeding> | is the server bandwidth-saturated or something |
| 2026-06-28 15:04:40 +0000 | <geekosaur> | forgejo has a different version of the problem: I'm regularly hearing about it being down at times |
| 2026-06-28 15:05:10 +0000 | <tomsmeding> | codeberg's forgejo instance, you mean? Or something else? |
| 2026-06-28 15:09:31 +0000 | tromp | (~textual@2001:1c00:340e:2700:dd19:dfa1:d2a9:f5b7) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2026-06-28 15:11:22 +0000 | <geekosaur> | codeberg, yeh. dunno about others, but I get the impression it works until it overloads completely |
| 2026-06-28 15:19:30 +0000 | <tomsmeding> | did mangoiv write up anything about the observed issues, and what the bottlenecks / most painful routes seem to be? |
| 2026-06-28 15:38:17 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 248 seconds) |
| 2026-06-28 15:38:36 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 15:39:13 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Excess Flood) |
| 2026-06-28 15:40:22 +0000 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
| 2026-06-28 15:41:49 +0000 | emilym | (~Thunderbi@user/emilym) (Remote host closed the connection) |
| 2026-06-28 15:42:02 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 15:42:02 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-06-28 15:43:10 +0000 | machinedgod | (~machinedg@d108-173-95-19.abhsia.telus.net) machinedgod |
| 2026-06-28 15:46:12 +0000 | vanishingideal | (~vanishing@user/vanishingideal) (Ping timeout: 273 seconds) |
| 2026-06-28 15:47:31 +0000 | rscastilho2024_ | (rscastilho@user/rscastilho2024-:23901) rscastilho2024_ |
| 2026-06-28 15:49:39 +0000 | szkl | (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 2026-06-28 16:01:43 +0000 | <jaror> | tomsmeding: I don't think so. Maybe it would indeed be good to first see if rhe issue is really unfixable. |
| 2026-06-28 16:13:31 +0000 | ystael | (~ystael@user/ystael) (Ping timeout: 264 seconds) |
| 2026-06-28 16:20:57 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:21:23 +0000 | <tomsmeding> | my alternative irc log viewer now has a view that compresses joins/parts (click "Compressed"): https://tirclogv.tomsmeding.com/log/haskell |
| 2026-06-28 16:21:49 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:23:05 +0000 | Alex_delenda_est | (~al_test@85.174.180.46) (Ping timeout: 245 seconds) |
| 2026-06-28 16:23:30 +0000 | AlexZenon | (~alzenon@85.174.180.46) (Ping timeout: 245 seconds) |
| 2026-06-28 16:23:38 +0000 | <monochrom> | nice |
| 2026-06-28 16:24:43 +0000 | AlexNoo | (~AlexNoo@85.174.180.46) (Ping timeout: 276 seconds) |
| 2026-06-28 16:25:22 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:25:46 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:25:58 +0000 | <tomsmeding> | I'm kinda planning to nuke https://ircbrowse.tomsmeding.com out of orbit and put this new thing in place. I don't think too much is lost. Does anyone disagree? |
| 2026-06-28 16:26:26 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:26:46 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:27:29 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:28:02 +0000 | AlexZenon | (~alzenon@178.34.151.183) |
| 2026-06-28 16:28:15 +0000 | Ikosit8 | (~Ikosit@user/ikosit) (Quit: The Lounge - https://thelounge.chat) |
| 2026-06-28 16:30:02 +0000 | <EvanR> | looks pretty good |
| 2026-06-28 16:30:10 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:30:13 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 252 seconds) |
| 2026-06-28 16:31:06 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:31:14 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:31:39 +0000 | Ikosit8 | (~Ikosit@user/ikosit) Ikosit |
| 2026-06-28 16:31:46 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:31:48 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:32:21 +0000 | gmg | (~user@user/gehmehgeh) (Ping timeout: 245 seconds) |
| 2026-06-28 16:32:21 +0000 | tusko | (~uwu@user/tusko) (Ping timeout: 245 seconds) |
| 2026-06-28 16:32:47 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:33:29 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-28 16:34:22 +0000 | tusko | (~uwu@user/tusko) tusko |
| 2026-06-28 16:34:31 +0000 | <tomsmeding> | (it even has old freenode logs back to the mists of time!) |
| 2026-06-28 16:34:58 +0000 | gmg | (~user@user/gehmehgeh) gehmehgeh |
| 2026-06-28 16:35:25 +0000 | <tomsmeding> | > Right now I'm using mostly Windows with Hugs 98 on my laptop. |
| 2026-06-28 16:35:27 +0000 | <tomsmeding> | beautiful |
| 2026-06-28 16:35:30 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:36:02 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:36:26 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:37:06 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:37:08 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:37:39 +0000 | <EvanR> | it's like piecing together ancient egyptian scrolls |
| 2026-06-28 16:37:52 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:38:01 +0000 | <EvanR> | and it's an excel spreadsheet |
| 2026-06-28 16:38:14 +0000 | <monochrom> | Highly red-shifted past records >:) |
| 2026-06-28 16:38:37 +0000 | <tomsmeding> | well fixing up the tunes.org logs to actually be valid irc logs took a bit of massaging yes |
| 2026-06-28 16:39:22 +0000 | <tomsmeding> | "I'm kind of excited about haskell because it's small" |
| 2026-06-28 16:39:46 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 248 seconds) |
| 2026-06-28 16:40:12 +0000 | weary-traveler | (~user@user/user363627) (Quit: Konversation terminated!) |
| 2026-06-28 16:40:28 +0000 | weary-traveler | (~user@user/user363627) user363627 |
| 2026-06-28 16:40:50 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:41:10 +0000 | [_________] | (~oos95GWG@user/oos95GWG) (Quit: [_________]) |
| 2026-06-28 16:41:22 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:41:46 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:42:26 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:42:28 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:43:04 +0000 | [_________] | (~oos95GWG@user/oos95GWG) oos95GWG |
| 2026-06-28 16:43:12 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:44:42 +0000 | califax | (~califax@user/califx) (Remote host closed the connection) |
| 2026-06-28 16:46:10 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:46:42 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:46:44 +0000 | <EvanR> | small user base? small language? small compiler? |
| 2026-06-28 16:46:48 +0000 | <EvanR> | small stdlib? |
| 2026-06-28 16:46:59 +0000 | <tomsmeding> | well "small stdlib" is relative |
| 2026-06-28 16:47:08 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:47:36 +0000 | <tomsmeding> | EvanR: https://tirclogv.tomsmeding.com/log/fn-haskell-old?eid=a4fictRBH#ev-a4fictRBH |
| 2026-06-28 16:47:46 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:47:51 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:48:31 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Excess Flood) |
| 2026-06-28 16:48:34 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:49:30 +0000 | <EvanR> | this guy sounds like a plan9 disciple who got split off from the group |
| 2026-06-28 16:50:27 +0000 | <EvanR> | I see the premonition of 2000s era obsession with replacing file trees with a search database |
| 2026-06-28 16:50:43 +0000 | <EvanR> | before it all went to the cloud and isn't on your machine anyway |
| 2026-06-28 16:50:52 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-06-28 16:51:30 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:52:02 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:52:25 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:53:06 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:53:08 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:53:52 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:54:01 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Excess Flood) |
| 2026-06-28 16:55:46 +0000 | califax | (~califax@user/califx) califx |
| 2026-06-28 16:56:44 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-06-28 16:56:50 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:57:22 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:57:46 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:58:26 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 16:58:28 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 16:59:12 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 17:02:10 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 17:02:42 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 17:03:06 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) |
| 2026-06-28 17:03:46 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 17:03:49 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 17:04:33 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 17:05:07 +0000 | tusko | (~uwu@user/tusko) (Remote host closed the connection) |
| 2026-06-28 17:05:21 +0000 | tusko | (~uwu@user/tusko) tusko |
| 2026-06-28 17:07:30 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 17:08:02 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 17:08:25 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) |
| 2026-06-28 17:08:43 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Excess Flood) |
| 2026-06-28 17:08:49 +0000 | nek0 | (~nek0@user/nek0) (Quit: The Lounge - https://thelounge.chat) |
| 2026-06-28 17:09:06 +0000 | AlexNoo__ | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 17:09:08 +0000 | skylord5816 | (~skylord58@user/skylord5816) (Ping timeout: 256 seconds) |
| 2026-06-28 17:09:29 +0000 | AlexNoo_ | (~AlexNoo@178.34.151.183) |
| 2026-06-28 17:11:07 +0000 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-06-28 17:12:50 +0000 | AlexNoo | (~AlexNoo@178.34.151.183) (Ping timeout: 248 seconds) |
| 2026-06-28 17:12:51 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-06-28 17:14:04 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Excess Flood) |
| 2026-06-28 17:16:46 +0000 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
| 2026-06-28 17:18:42 +0000 | nek0 | (~nek0@user/nek0) nek0 |
| 2026-06-28 17:18:56 +0000 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
| 2026-06-28 17:24:10 +0000 | <monochrom> | Haskell was small back then in 2001. They were not wrong. :) |
| 2026-06-28 17:26:19 +0000 | <monochrom> | I am still a bit annoyed by directory trees because, for my past and present course material, both "cscc24/2025" and "2025/cscc24" are wrong. |
| 2026-06-28 17:27:35 +0000 | <dcb> | in a different timeline, instead of `grep` you `sql` |
| 2026-06-28 17:27:50 +0000 | <monochrom> | The only up side is that I get an assignment question out of it. :) https://www.cs.utoronto.ca/~trebla/CSCB09-2026-Summer/a1/cscb09-2026-5-a1.pdf |
| 2026-06-28 17:27:58 +0000 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 2026-06-28 17:28:55 +0000 | <monochrom> | I'm already using sqlite3 in shell scripts! I store student {name, number, email, login} in sqlite. Then a shell script to look up by name etc. |
| 2026-06-28 17:30:16 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 245 seconds) |
| 2026-06-28 17:32:40 +0000 | AlexNoo_ | AlexNoo |
| 2026-06-28 17:33:11 +0000 | Alex_delenda_est | (~al_test@178.34.151.183) |
| 2026-06-28 17:35:10 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-06-28 17:35:36 +0000 | <dcb> | even for indexing arbitrarily large text files, say, for a plaintext personal knowledge management system? |
| 2026-06-28 17:37:12 +0000 | <monochrom> | I haven't done that. Probably will never do. I just have a hundred small files, one per topic, and hoping that looking at the filenames reminds me where to find something. |
| 2026-06-28 17:38:01 +0000 | <monochrom> | But I have been known to use my brain to index 200 books so it's fine. |
| 2026-06-28 17:38:37 +0000 | ttybitnik | (~ttybitnik@user/wolper) ttybitnik |
| 2026-06-28 17:38:49 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Excess Flood) |
| 2026-06-28 17:40:17 +0000 | fp | (~Thunderbi@89-27-10-140.bb.dnainternet.fi) fp |
| 2026-06-28 17:40:35 +0000 | skylord5816 | (~skylord58@user/skylord5816) skylord5816 |
| 2026-06-28 17:41:09 +0000 | <monochrom> | I don't even mind sqlite3 performing linear-time exhaustive search. (I didn't tell it to index any column.) I have only 200 students at most, computers are fast. |
| 2026-06-28 17:41:27 +0000 | <monochrom> | The reason I use it though is because nothing else has join. |
| 2026-06-28 17:41:47 +0000 | <monochrom> | (I mean generally "it" = relational.) |
| 2026-06-28 17:42:54 +0000 | <monochrom> | I said {name, number, email, login} but annoyingly the university gave me two files: {name, number, email} and {name, number, login}. I needed a join. |
| 2026-06-28 17:44:16 +0000 | <monochrom> | And down the road there will be {login, a1 marks, a2 marks} that eventually need to be merged back to student records. |
| 2026-06-28 17:45:32 +0000 | tromp | (~textual@2001:1c00:340e:2700:dd19:dfa1:d2a9:f5b7) |
| 2026-06-28 17:45:45 +0000 | <tomsmeding> | monochrom: using sqlite for that is actually a pretty neat idea. I've been doing this stuff using csv files and some shell wrangling and some hand-written tooling, which has the definite upside that my text editor is just as capable at inspecting and editing stuff as the command line is |
| 2026-06-28 17:45:56 +0000 | <tomsmeding> | that kind of breaks when everything is in a database file |
| 2026-06-28 17:46:57 +0000 | <monochrom> | We can have the best of both worlds. It is not wrong to: 1. sqlite -> csv; 2. edit; 3. csv -> sqlite. :) |
| 2026-06-28 17:47:06 +0000 | <tomsmeding> | I've been mulling on a more general tool to do join-like stuff (but tailored to dumb university stuff where e.g. every student has 2 student IDs and sometimes you need the one and sometimes the other, and very occasionally neither are valid) on csv files but I stopped needing it before it got built |
| 2026-06-28 17:47:17 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-06-28 17:47:28 +0000 | <monochrom> | or even 1. csv -> sqlite; 2. join; 3. sqlite -> csv. |
| 2026-06-28 17:47:40 +0000 | <tomsmeding> | Right. But also being able to recursively grep for a student ID in a directory tree gives me their CSV entries as well as their submitted assignment files. :) |
| 2026-06-28 17:47:58 +0000 | <tomsmeding> | yeah, that second pathway may be the one, but then that also feels weird |
| 2026-06-28 17:48:02 +0000 | piranezi | (~piranezi@user/maxnetyaga) (Ping timeout: 248 seconds) |
| 2026-06-28 17:48:10 +0000 | <monochrom> | I wrote my own haskell program for "read 2 csv's, join, output csv" but it is clunky to use. |
| 2026-06-28 17:48:11 +0000 | piranezi2 | (~piranezi@user/maxnetyaga) maxnetyaga |
| 2026-06-28 17:48:30 +0000 | fgarcia | (~lei@user/fgarcia) (Ping timeout: 245 seconds) |
| 2026-06-28 17:49:22 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Excess Flood) |
| 2026-06-28 17:49:45 +0000 | <darkling> | There's already: join (1) - join lines of two files on a common field |
| 2026-06-28 17:50:03 +0000 | <geekosaur> | sadly csv in the wild is often too complex for it |
| 2026-06-28 17:50:04 +0000 | <darkling> | Although I have done the sqlite trick a few times for more complicated pipelines. |
| 2026-06-28 17:50:13 +0000 | <monochrom> | Fragile in the face of real csv. |
| 2026-06-28 17:50:47 +0000 | <monochrom> | "The Great, Monochrom",10011101,monochrom |
| 2026-06-28 17:51:02 +0000 | <tomsmeding> | darkling: where is the option to consider ',' the field delimiter? |
| 2026-06-28 17:51:04 +0000 | <darkling> | There's a set of csv tools too that mirror grep/cut/sort/join and a few others but handle CSVs properly. |
| 2026-06-28 17:51:08 +0000 | <geekosaur> | you forgot embedding quotes in the first field |
| 2026-06-28 17:51:08 +0000 | <tomsmeding> | oh, -t |
| 2026-06-28 17:51:29 +0000 | <tomsmeding> | fortunately my CSVs didn't have quotes |
| 2026-06-28 17:51:32 +0000 | fgarcia | (~lei@user/fgarcia) fgarcia |
| 2026-06-28 17:52:27 +0000 | <darkling> | Ah, yes, csvkit |
| 2026-06-28 17:56:39 +0000 | <monochrom> | Nice csvsql |
| 2026-06-28 17:58:14 +0000 | <monochrom> | The quotes in my example is really CSV quotes. My first column is the strong: The Great, Monochrom |
| 2026-06-28 17:58:23 +0000 | <monochrom> | s/strong/string/ |
| 2026-06-28 18:05:12 +0000 | <monochrom> | "I was writing sensible CSV tools in Haskell. Then I downloaded csvkit and switched to Python." >:) |
| 2026-06-28 18:11:32 +0000 | <EvanR> | tomsmeding, though if you're just reading using shell scripts and hacks, sqlite dumps to text pretty easily |
| 2026-06-28 18:11:44 +0000 | <EvanR> | modifying the database is another story |
| 2026-06-28 18:11:50 +0000 | <tomsmeding> | yeah you're right |
| 2026-06-28 18:12:20 +0000 | <EvanR> | it also dumps to google sheets pretty easily, by setting the field separator to tab |
| 2026-06-28 18:12:29 +0000 | <EvanR> | instead of | |
| 2026-06-28 18:13:27 +0000 | <EvanR> | LIFE HAXX |
| 2026-06-28 18:14:14 +0000 | <monochrom> | I didn't know of csvkit so I adopted sqlite3. If you start now, you may as well go for csvkit, especially since it can still bridge to sql if one day you need it. |
| 2026-06-28 18:16:15 +0000 | <EvanR> | "csv" is a lie. A,B,"C,D",E four values not 5! |
| 2026-06-28 18:17:14 +0000 | <monochrom> | Ah you're picking on the name? |
| 2026-06-28 18:17:31 +0000 | <monochrom> | All "meaningful" names from programmers are lies. |
| 2026-06-28 18:17:45 +0000 | <monochrom> | In Unix, listen(2) does not listen. |
| 2026-06-28 18:20:43 +0000 | <tomsmeding> | there has also been a suggestion to separate fields using unicode characters instead. After all, those don't appear in data, do they? https://github.com/sixarm/usv |
| 2026-06-28 18:21:49 +0000 | <darkling> | We should never have stopped using FS, GS, RS and US ASCII codes. :) |
| 2026-06-28 18:22:08 +0000 | <darkling> | 28-31 https://en.wikipedia.org/wiki/C0_and_C1_control_codes |
| 2026-06-28 18:23:12 +0000 | <EvanR> | those ascii controls are what's not used in data xD |
| 2026-06-28 18:23:13 +0000 | <EvanR> | use those |
| 2026-06-28 18:23:28 +0000 | <EvanR> | FS literally field separator |
| 2026-06-28 18:23:44 +0000 | <dolio> | My meaningful names are accurate. |
| 2026-06-28 18:23:58 +0000 | <dolio> | Go look in the ermine codebase and tell me the `unfurl` function doesn't unfurl. |
| 2026-06-28 18:24:17 +0000 | <monochrom> | Yeah sqlite offers to use FS etc. |
| 2026-06-28 18:37:30 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-06-28 18:40:52 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Excess Flood) |
| 2026-06-28 18:45:20 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-06-28 18:46:51 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Excess Flood) |
| 2026-06-28 18:51:27 +0000 | vanishingideal | (~vanishing@user/vanishingideal) (Ping timeout: 252 seconds) |
| 2026-06-28 18:56:47 +0000 | Everything | (~Everythin@static.208.206.21.65.clients.your-server.de) Everything |
| 2026-06-28 18:59:01 +0000 | ski | (~ski@31-208-30-244.cust.bredband2.com) (Ping timeout: 265 seconds) |
| 2026-06-28 19:00:24 +0000 | ski | (~ski@31-208-30-29.cust.bredband2.com) |
| 2026-06-28 19:06:48 +0000 | ski | (~ski@31-208-30-29.cust.bredband2.com) (Ping timeout: 270 seconds) |
| 2026-06-28 19:08:31 +0000 | ski | (~ski@31-208-30-244.cust.bredband2.com) |
| 2026-06-28 19:14:08 +0000 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
| 2026-06-28 19:15:35 +0000 | Sgeo | (~Sgeo@user/sgeo) Sgeo |
| 2026-06-28 19:15:51 +0000 | CiaoSen | (~Jura@2a02:3100:5d91:a300:4e50:ddff:fe9b:8922) CiaoSen |
| 2026-06-28 19:25:16 +0000 | gmg | (~user@user/gehmehgeh) (Ping timeout: 245 seconds) |
| 2026-06-28 19:27:32 +0000 | gmg | (~user@user/gehmehgeh) gehmehgeh |