Home liberachat/#haskell: Logs Calendar

Logs on 2025-02-19 (liberachat/#haskell)

00:03:29 ec joins (~ec@gateway/tor-sasl/ec)
00:05:11 alfiee joins (~alfiee@user/alfiee)
00:07:24 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:09:32 ec_ joins (~ec@gateway/tor-sasl/ec)
00:10:10 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
00:12:04 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
00:12:12 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 264 seconds)
00:18:24 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 260 seconds)
00:19:24 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 264 seconds)
00:22:12 ec joins (~ec@gateway/tor-sasl/ec)
00:22:47 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:27:01 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
00:27:53 × forell quits (~forell@user/forell) (Ping timeout: 245 seconds)
00:29:00 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 264 seconds)
00:29:41 L29Ah joins (~L29Ah@wikipedia/L29Ah)
00:30:31 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
00:30:58 ec joins (~ec@gateway/tor-sasl/ec)
00:34:11 yegorc joins (~yegorc@user/yegorc)
00:38:09 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:38:47 × tremon quits (~tremon@83.80.159.219) (Quit: getting boxed in)
00:38:56 × sprotte24 quits (~sprotte24@p200300d16f0680009d71da3872d3d25e.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
00:41:21 × acidjnk quits (~acidjnk@p200300d6e7283f20718e6a656831e8a3.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
00:42:53 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
00:47:27 ec_ joins (~ec@gateway/tor-sasl/ec)
00:47:36 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 264 seconds)
00:52:36 alfiee joins (~alfiee@user/alfiee)
00:53:42 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:54:03 ec joins (~ec@gateway/tor-sasl/ec)
00:54:48 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 264 seconds)
00:56:56 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
00:58:56 × Eoco quits (~ian@128.101.131.218) (Ping timeout: 272 seconds)
01:00:36 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
01:02:35 j1n37- joins (~j1n37@user/j1n37)
01:02:54 Googulator13 joins (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu)
01:03:19 × xff0x quits (~xff0x@2405:6580:b080:900:4548:6ab4:269:a170) (Ping timeout: 260 seconds)
01:04:04 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 260 seconds)
01:06:40 × Googulator quits (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu) (Ping timeout: 240 seconds)
01:07:50 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
01:07:50 Eoco joins (~ian@128.101.131.218)
01:08:34 stiell joins (~stiell@gateway/tor-sasl/stiell)
01:11:45 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:13:22 × Eoco quits (~ian@128.101.131.218) (Ping timeout: 268 seconds)
01:16:40 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
01:19:41 × hattckory quits (~hattckory@67.71.152.102) (Read error: Connection reset by peer)
01:19:56 hattckory joins (~hattckory@149.102.242.103)
01:23:51 ezzieyguywuf joins (~Unknown@user/ezzieyguywuf)
01:27:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:27:36 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
01:31:30 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
01:32:13 × califax quits (~califax@user/califx) (Remote host closed the connection)
01:33:27 califax joins (~califax@user/califx)
01:34:08 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 245 seconds)
01:35:10 zungi joins (~tory@user/andrewchawk)
01:35:25 × bilegeek quits (~bilegeek@2600:1008:b0a4:c6d5:66f:6873:2abc:50c5) (Quit: Leaving)
01:38:46 bilegeek joins (~bilegeek@2600:1008:b0a4:c6d5:66f:6873:2abc:50c5)
01:41:36 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds)
01:42:28 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:45:00 alfiee joins (~alfiee@user/alfiee)
01:46:48 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
01:49:22 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
01:52:53 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
01:54:08 × Googulator13 quits (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu) (Quit: Client closed)
01:54:25 Googulator13 joins (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu)
01:55:34 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
01:57:52 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:59:58 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 245 seconds)
02:00:45 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds)
02:02:49 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
02:03:01 × Square quits (~Square@user/square) (Ping timeout: 248 seconds)
02:10:52 × Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
02:13:15 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:19:04 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
02:30:02 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:33:04 alfiee joins (~alfiee@user/alfiee)
02:34:34 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
02:36:41 weary-traveler joins (~user@user/user363627)
02:37:14 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
02:37:51 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 268 seconds)
02:48:04 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:52:56 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
02:57:39 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 260 seconds)
02:59:03 vanishingideal joins (~vanishing@user/vanishingideal)
03:03:28 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:03:47 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 244 seconds)
03:07:50 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
03:10:02 × byorgey quits (~byorgey@user/byorgey) (Ping timeout: 252 seconds)
03:10:20 byorgey joins (~byorgey@user/byorgey)
03:18:49 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:20:49 alfiee joins (~alfiee@user/alfiee)
03:23:58 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
03:25:20 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 268 seconds)
03:28:46 <simon1> I want to make a function that yields a deterministically shuffled list. So I'm trying to use this signature `RandomGen gen => [a] -> gen -> IO [a]`, but when try to use the function `next` I get the warning `Deprecated: "No longer used"`. What replaces `next` and `RandomGen` then?
03:28:51 simon1 is now known as sim590
03:32:34 <geekosaur> RandomGen is still used, but next has been deprecated since random-1.1. https://hackage.haskell.org/package/random-1.3.0/docs/System-Random.html#v:next explains and provides references and alternatives
03:32:35 <sim590> Ah. I guess I wanna use `random` instead.
03:32:43 <sim590> Right?
03:33:53 <geekosaur> you should use an operation specialized for your target type (next always converted to/from Integer)
03:34:12 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:34:19 <sim590> I mean the function `random` as in `random :: RandomGen gen => gen -> (a, gen)` ?
03:34:38 <sim590> Instead of using `next`.
03:34:45 <monochrom> For shuffling, use randomR for Int.
03:35:21 <monochrom> or even randomRs if your gen won't be used elsewhere.
03:35:47 <monochrom> On a different note, given gen, I don't see why you still need IO.
03:36:35 <sim590> monochrom: actually, I'm writing a network application. All nodes have the same seed and they have to generate a random state from that seed. So I need to initialize a generator with the same seed on all nodes.
03:37:18 <monochrom> Huh that comes across as https://xkcd.com/221/
03:39:08 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
03:42:42 <sim590> ? All my nodes are gonna have a list of elements and they need to generate the same shuffled list. This is because my application is a game where every node has been given the player list, but now we have to know which player starts first, so then I shuffle the list according to a hexdigit code. Yes, this is not "random", but that is not what I need. I need a deterministicly shuffled list.
03:44:13 <monochrom> Is there anything wrong with generating the list just once and passing it to all nodes?
03:44:51 <monochrom> But either version still doesn't need IO.
03:46:30 <sim590> No, I don't need IO, it's true. I actually just generalized my code to something that doesn't need IO, but my first iteration did need IO because the function I evolved from did actual randomness for shuffling. But, now I don't. It's becasue I'm evolving the code of the game from single player to multiplayer now.
03:48:45 <monochrom> Even for actual PRNG I would still go for either gen -> ([a], gen) or gen -> [a] or the new-fangled StatefulGen monads, and avoid committing to IO.
03:49:35 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:52:37 <monochrom> Actually I ended up using s/StatefulGen/RandomGenM/ because it has nicer functions eg randomRM.
03:52:49 <sim590> as for shuffling the list before sending it over, yes, it's true I could do that. But, since every node already have the seed from the start (the game code given by the user), I prefer just sorting the list first, then shuffling it according to the code because then other nodes don't rely on the host so much. They can generate this themselves. There is no server. It's all taking place ontop of a
03:52:51 <sim590> distributed hash table.
03:53:56 yegorc parts (~yegorc@user/yegorc) (Leaving)
03:54:02 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
03:57:11 <jackdk> What are your plans for when a new node comes online and needs to acquire the same random state, or if there is a bug in your code and nodes call a randomisation function a different number of times or use the results in a different order?
03:58:11 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
03:59:15 <monochrom> I don't normally worry about a bug that affects one node but not others. All nodes run the same code because programmers are too lazy to write two versions. Therefore all nodes run the same bug anyway.
04:00:49 <monochrom> BTW it's also why our university discourages anyone except the top authority from talking about exam timetables and venues. Because if there is to be a mistake, it is better for everyone to make the same mistake (sourced from one single source) than inconsistency hell.
04:01:18 <jackdk> How do you update things to a new version without downtime?
04:01:45 <monochrom> Perhaps don't make new versions? >:)
04:01:56 tavare joins (~tavare@user/tavare)
04:02:00 <jackdk> Perfect.
04:02:28 <monochrom> The serious and honest answer is I don't know.
04:02:29 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 248 seconds)
04:04:18 <monochrom> The aternative is to accept that you now have the Byzantine Generals problem and you still taking distributed algorithms seriously, i.e., there is a voting system, there is cryptographical hashes, there is a Lamport partially-ordered clock system, ...
04:04:35 <monochrom> s/still/start/
04:04:57 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:06:09 <monochrom> or in other words, if there is going to be a non-shared bug, then both "send a seed" and "send a list" are vulnerable to their respective non-shared bugs, e.g., "what if one node has a bug that uses the list wrongly?"
04:06:12 <sim590> jackdk: there's a connection stage where we wait for everyone before the game starts. The list is not gonna be shuffled before we end that stage and everybody is connected (i.e. the "host" knows about them).
04:07:00 <sim590> Yeah, and for now I assume that every nodes run the same code of course.
04:07:03 <jackdk> And then you're doing synchronous lockstep simulation across nodes?
04:07:41 <jackdk> s/across nodes/across all nodes at once/
04:07:54 alfiee joins (~alfiee@user/alfiee)
04:09:47 <sim590> The game code is going to be the initial seed for everything. Everyone is gonna have that seed. The game is a turn base game so every player will just be able to repeat the exact same operations by listening to packets containing the player's turn info. It will be some data that modifies the state. They use that packet to update they're state. Every player turn is going to also change the current
04:09:49 <sim590> "seed" identifying where players are in the chain of turns.
04:10:06 <monochrom> I'm OK with "the list is 5GB so sending a 32-bit seed over the network is better".
04:10:45 <monochrom> But if it is "this is a legacy system, that's why" then it's just sad.
04:12:02 <monochrom> Well, I still find joy in it with https://www.vex.net/~trebla/humour/pessimisms.html #2. Gotta make the best of what you have.
04:12:12 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
04:12:22 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
04:13:22 <sim590> Regarding the byzantine general problem, I don't think that this applies for me because this game is turn based, so there's no concurrency issues.
04:13:40 <sim590> Everybody is going to evolve at the same rate waiting for the player to make his turn.
04:13:51 <sim590> current* player
04:18:23 <jackdk> I am curious as to why you need a DHT - this sounds like a small enough network where DHTs would mostly be useful as an exercise.
04:18:56 <monochrom> Speaking of which, the distributed algorithm course I took was taught by two profs together, one from Greece, another of Egyptian ethnicity (like, he is a French citizen but his parent came from Egypt).
04:18:57 <sim590> I don't "need" a DHT. I just wanna make a multiplayer code without making server code.
04:19:14 <sim590> multiplayer game*
04:19:22 <monochrom> It took 5 years to dawn on me "wait, Byzantine generals you say? and two of them?"
04:20:04 <sim590> hmmmm :)
04:20:09 <jackdk> sim590: Yeah that's fair. I'd just look at making the gamestate a left fold of events, some of which are generated by other players. And then you can hold the same state at each node
04:22:10 sim590 parts (~simon@209-15-185-101.resi.cgocable.ca) (WeeChat 4.5.1)
04:22:22 sim590 joins (~simon@209-15-185-101.resi.cgocable.ca)
04:23:00 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:24:34 <sim590> jackdk: also I did help develop the DHT over here: https://github.com/savoirfairelinux/opendht/ during 2015-2017. So I've become quite familiar with Kademlia and quite found of it also. When I decided to make a game and also think about making it multiplayer, that is the first thing I thought about doing. But I like Haskell and OpenDHT is in C++, so I had to write the bindings!
04:24:36 <sim590> https://github.com/sim590/opendht-hs/. All of that was a fun experience, so that's pretty much because of all these reasons.
04:24:54 <jackdk> Having fun is a pretty good reason
04:24:58 <sim590> Yup
04:25:08 <jackdk> sim590: https://github.com/ESWAT/john-carmack-plan-archive/blob/master/by_day/johnc_plan_19981014.txt Carmack doesn't use these words, but it really sounds like he made the state a strict left fold over an event stream.
04:26:08 <sim590> I've made this nice project also in the past: https://github.com/sim590/dpaste/. A pastebin running on the DHT (IRC folks should like that). I still have to work on it because I need to expand the file limit size by spreading the values in multiple packets. I'll do that after I finish my game I guess or when I feel like id... :-)
04:27:30 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
04:29:08 <sim590> jackdk: Hmmmmm.... Who's Carmack ??
04:30:27 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
04:30:46 aforemny_ joins (~aforemny@2001:9e8:6ce5:a900:aaac:d53d:16e5:71d8)
04:31:13 <jackdk> wrote Commander Keen, Wolf3D, Doom, Quake, etc.
04:31:41 <sim590> Oh. I see. A big name in gaming.
04:32:18 <sim590> Oh I think I just got what you hinted at with the folding thing. Was that a joke about the lines not being folded in his file? lol
04:32:22 × aforemny quits (~aforemny@i59F4C483.versanet.de) (Ping timeout: 272 seconds)
04:33:22 <monochrom> Oh haha the irony.
04:34:33 <jackdk> No, as in it sounds like he got a lot of portability and other architectural benefits from building Q3 around (morally) a function `State -> Event -> State` and having all the event sources produce onto a queue that is consumed by the game engine, a lot like the `Data.List.foldl'` function.
04:34:54 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 272 seconds)
04:36:14 forell joins (~forell@user/forell)
04:38:21 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:42:48 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
04:43:49 michalz joins (~michalz@185.246.207.203)
04:44:22 <haskellbridge> <Liamzee> are there any suggestions on improving this code? It feels hacky, and there's probably too much IO coupling
04:44:26 <haskellbridge> <Liamzee> https://paste.tomsmeding.com/gTV1Ck0j
04:44:30 <sim590> jackdk:sounds like a logical approach.
04:45:56 Inst joins (~Inst@user/Inst)
04:46:05 <haskellbridge> <Liamzee> hmmm
04:46:49 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
04:50:59 <sim590> Liamzee: that is actually funny that you send that piece of code because I'm trying to teach Haskell to someone. And that someone asked me if it would be easy to make the snake game in Haskell... :)
04:52:32 × Inst quits (~Inst@user/Inst) (Remote host closed the connection)
04:53:43 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:54:19 <sim590> Liamzee: by the way, if you're looking to experiment around with this, you might be interested in Brick https://github.com/jtdaugherty/brick. It is a library that helps making TUIs and it seems like your game is text based. It actually takes care of alot of stuff for you like key press and stuff.
04:56:18 alfiee joins (~alfiee@user/alfiee)
04:57:28 <sim590> Liamzee, I don't see how you could not use IO wherever you do use it. It seems like everywhere you use it is where you need to handle the screen or user input. That seems fine to me. But, I'm far from being a Haskell guru :)
04:58:12 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
05:00:33 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
05:04:17 × rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer)
05:04:48 rvalue joins (~rvalue@user/rvalue)
05:08:52 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
05:09:07 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:13:32 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 272 seconds)
05:13:44 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
05:14:05 ephilalethes joins (~noumenon@2001:d08:1a00:bc0:aa7e:eaff:fede:ff94)
05:17:59 × alp quits (~alp@2001:861:8ca0:4940:e4d1:8a6d:1936:4535) (Ping timeout: 252 seconds)
05:24:31 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:28:50 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
05:39:19 × ZLima12 quits (~zlima12@user/meow/ZLima12) (Remote host closed the connection)
05:40:28 ZLima12 joins (~zlima12@user/meow/ZLima12)
05:40:37 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:41:50 <haskellbridge> <Liamzee> sim590: Claude, DeepSeek R1 can all produce fairly decent Haskell code that mainly needs stylistic correction for these types of micro-programs. Also, if you're focusing on IO, you need to prioritize concurrency, which is why I'm wondering if the usage of MVar is correct here (IORef would actually provide better functionality for what I'm trying to do).
05:43:10 <haskellbridge> <Liamzee> I was originally planning to upgrade to Brick, but I spent two days pushing this out (mainly hamstrung by lack of confidence in concurrency features), so I'm more likely to move to my primary project, which would be a Rust-based API caller for claim verification in social media.
05:44:02 alfiee joins (~alfiee@user/alfiee)
05:45:56 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
05:48:34 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
05:49:28 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
05:51:25 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
05:54:09 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
05:54:24 chexum joins (~quassel@gateway/tor-sasl/chexum)
05:56:11 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:00:47 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
06:01:43 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
06:01:55 Guest52 joins (~Guest52@host-64-178-152-151.public.eastlink.ca)
06:02:06 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
06:08:12 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:12:34 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
06:17:50 takuan joins (~takuan@d8D86B601.access.telenet.be)
06:19:28 CiaoSen joins (~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de)
06:21:12 × monochrom quits (trebla@216.138.220.146) (Quit: ZNC 1.9.1+deb1 - https://znc.in)
06:21:53 akegalj joins (~akegalj@89-172-194-52.adsl.net.t-com.hr)
06:23:36 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:24:58 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 245 seconds)
06:27:03 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
06:29:16 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
06:31:07 alfiee joins (~alfiee@user/alfiee)
06:35:33 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 265 seconds)
06:38:25 monochrom joins (trebla@216.138.220.146)
06:39:39 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:40:52 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 265 seconds)
06:44:09 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
06:49:37 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
06:55:02 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:59:02 × ft quits (~ft@p4fc2a610.dip0.t-ipconnect.de) (Quit: leaving)
07:01:45 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
07:09:15 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:13:52 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
07:17:13 tccq joins (~user@user/tccq)
07:18:31 alfiee joins (~alfiee@user/alfiee)
07:23:01 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 248 seconds)
07:24:37 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:29:17 internatetional joins (~nate@2001:448a:20a3:c2e5:9ba2:a48e:b934:7d97)
07:32:52 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
07:41:59 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
07:43:36 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:45:36 JuanDaugherty joins (~juan@user/JuanDaugherty)
07:46:17 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Client Quit)
07:46:52 JuanDaugherty joins (~juan@user/JuanDaugherty)
07:47:57 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
07:50:25 alp joins (~alp@2001:861:8ca0:4940:d9b9:1143:525c:6490)
07:55:19 × alp quits (~alp@2001:861:8ca0:4940:d9b9:1143:525c:6490) (Ping timeout: 260 seconds)
07:57:01 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
07:57:26 ec joins (~ec@gateway/tor-sasl/ec)
07:57:27 alp joins (~alp@2001:861:8ca0:4940:8f29:5e1f:1daa:6400)
07:58:10 × internatetional quits (~nate@2001:448a:20a3:c2e5:9ba2:a48e:b934:7d97) (Quit: WeeChat 4.5.1)
07:58:57 × Guest52 quits (~Guest52@host-64-178-152-151.public.eastlink.ca) (Quit: Client closed)
08:00:00 × caconym quits (~caconym@user/caconym) (Quit: bye)
08:00:12 tromp joins (~textual@2a02:a210:cba:8500:593d:9801:ba8:3982)
08:01:00 caconym joins (~caconym@user/caconym)
08:06:35 alfiee joins (~alfiee@user/alfiee)
08:11:30 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
08:12:02 × ephilalethes quits (~noumenon@2001:d08:1a00:bc0:aa7e:eaff:fede:ff94) (Quit: Leaving)
08:16:05 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 265 seconds)
08:27:07 acidjnk joins (~acidjnk@p200300d6e7283f64718e6a656831e8a3.dip0.t-ipconnect.de)
08:33:59 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:36:03 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
08:36:13 × forell quits (~forell@user/forell) (Ping timeout: 245 seconds)
08:36:33 forell joins (~forell@user/forell)
08:36:53 sord937 joins (~sord937@gateway/tor-sasl/sord937)
08:37:26 <Athas> Is 'ad' the best AD package for Haskell these days?
08:37:47 <Athas> (For relatively simple uses.)
08:41:13 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 245 seconds)
08:41:20 misterfish joins (~misterfis@84.53.85.146)
08:46:25 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
08:50:30 merijn joins (~merijn@77.242.116.146)
08:51:49 tnt1 joins (~Thunderbi@user/tnt1)
08:53:17 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 265 seconds)
08:54:19 alfiee joins (~alfiee@user/alfiee)
08:55:40 ljdarj joins (~Thunderbi@user/ljdarj)
08:55:56 × remedan quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Ping timeout: 244 seconds)
08:56:04 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
08:57:22 rubin55 joins (uid666177@id-666177.lymington.irccloud.com)
08:58:37 × rubin55 quits (uid666177@id-666177.lymington.irccloud.com) (Client Quit)
08:58:44 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
09:05:21 × alp quits (~alp@2001:861:8ca0:4940:8f29:5e1f:1daa:6400) (Ping timeout: 248 seconds)
09:06:58 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 268 seconds)
09:07:54 remedan joins (~remedan@ip-62-245-108-153.bb.vodafone.cz)
09:10:00 AlexNoo_ joins (~AlexNoo@178.34.161.111)
09:10:21 <tomsmeding> Athas: if you find any better ones, please enlighten me :p
09:10:36 <tomsmeding> monochrom: thanks!
09:11:12 <tomsmeding> oh you have already sent me this once
09:12:09 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
09:12:18 × AlexZenon quits (~alzenon@178.34.150.53) (Ping timeout: 252 seconds)
09:13:21 × AlexNoo quits (~AlexNoo@178.34.150.53) (Ping timeout: 248 seconds)
09:13:46 Digitteknohippie joins (~user@user/digit)
09:14:52 × Digit quits (~user@user/digit) (Ping timeout: 252 seconds)
09:16:37 AlexZenon joins (~alzenon@178.34.161.111)
09:16:42 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 252 seconds)
09:22:44 × j1n37- quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
09:23:27 <tomsmeding> Athas: if you're okay with writing your code in a TH quote, and various related crappiness-of-API issues, ad-dualrev-th is approximately 2x as fast
09:23:42 <tomsmeding> but really, just use Futhark? ;)
09:25:21 <Athas> I don't need the objective performance. I just want to contribute a Haskell implementation to gradbench.
09:25:30 × pikajude quits (~jude@149.28.207.64) (Ping timeout: 252 seconds)
09:25:43 <Athas> 'ad' looks pretty simple.
09:25:50 pikajude joins (~jude@149.28.207.64)
09:26:04 <tomsmeding> it's certainly simple to use and well-established
09:26:20 <Athas> What do people use it for in practice?
09:26:26 <tomsmeding> not performance
09:26:35 tremon joins (~tremon@83.80.159.219)
09:26:42 <Athas> But what kinds of Haskell applications need AD?
09:27:20 × igemnace quits (~igemnace@user/igemnace) (Ping timeout: 252 seconds)
09:27:23 igemnace_ joins (~igemnace@user/igemnace)
09:27:41 <tomsmeding> I honestly don't know. I think there's a chicken-egg problem here: there are no good & fast AD tools in Haskell, so if you want to write something that needs such things, you use a different language
09:28:34 j1n37 joins (~j1n37@user/j1n37)
09:28:58 igemnace_ is now known as igemnace
09:29:22 alp joins (~alp@2001:861:8ca0:4940:bb72:dec1:2682:160e)
09:31:08 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
09:32:06 <Athas> 'ad' seems pretty comprehensive, so it must be useful to someone.
09:33:04 <tomsmeding> I heard from someone recently that they used it as a placeholder implementation of AD for a probabilistic programming language they were working on, where they cared more about the clever PPL things than actual performance just yet
09:33:21 × eL_Bart0 quits (eL_Bart0@dietunichtguten.org) (Ping timeout: 244 seconds)
09:35:11 j1n37 joins (~j1n37@user/j1n37)
09:35:41 lxsameer joins (~lxsameer@Serene/lxsameer)
09:35:54 __monty__ joins (~toonn@user/toonn)
09:36:02 <tomsmeding> Athas: why do the eval Dockerfiles install torch?
09:36:02 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
09:36:57 <Athas> Ugh. Because pytorch was until a few hours ago the reference implementation used for validation.
09:37:03 <Athas> And I forgot to cleanse the Dockerfiles.
09:37:10 <tomsmeding> I suspected so :)
09:37:14 <tomsmeding> or something like it
09:39:35 <tomsmeding> Athas: this looks cute. If you do add 'ad', a suggestion: get a diff of precisely what was necessary to implement, say, two of the evals with this new tool. (2 instead of 1 to capture what's necessary for a new tool, as well as what's necessary for just a new tool-eval combination.) That will be nice for someone else who wants to contribute a new tool :)
09:40:14 j1n37 joins (~j1n37@user/j1n37)
09:40:18 <Athas> A 'diff' in what sense? Each eval will be a single Haskell module.
09:40:35 <tomsmeding> there's currently no haskell tools in there yet, right?
09:40:37 <Athas> It's actually not so difficult; I'm working on it now. I spend more time figuring out how to get Haskell in a Dockerfile than I do actually writing Haskell code.
09:40:53 <tomsmeding> it's precisely the Dockerfile stuff that I'm most interested in ;)
09:40:56 <tomsmeding> I know how to write haskell too.
09:41:34 <tomsmeding> "I want to contribute a Tool to gradbench written in my spiffy language CoolLang; what do I do?"
09:41:43 alfiee joins (~alfiee@user/alfiee)
09:42:36 <Athas> I'm afraid the difficult part is the ad-hoc trouble of setting up Docker for CoolLang.
09:42:54 <tomsmeding> assume I can handle that part :)
09:43:00 <tomsmeding> I see that I should probably just read CONTRIBUTING.md
09:43:25 <tomsmeding> still, having a single commit that adds a tool is nice as a reference, perhaps
09:43:34 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 265 seconds)
09:43:34 <Athas> You also have to implement the (JSON-based) protocol for every language. It's really surprisingly easy.
09:43:38 <Athas> A lot easier than ADBench.
09:43:43 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
09:43:57 <tomsmeding> yeah I think I like the JSON protocol
09:44:18 <tomsmeding> from the benchmark names it looks rather like this is intended to be a successor to ADBench, too :)
09:45:13 <Athas> Yes. I'm not the one who came up with GradBench, but I have contributed some things. It was a loss when ADBench died.
09:45:13 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
09:46:02 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
09:46:59 <Athas> Oh lovely, there are official Haskell Docker images.
09:47:13 <Athas> The cabal-install in the Debian and Ubuntu images was too old.
09:48:30 <tomsmeding> to say nothing of the GHC in those images, probably
09:49:12 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
09:50:50 <Athas> I must admit that I find Haskell very enjoyable when you're just putting around reading and writing JSON formats, and doing other simple computer things.
09:51:00 <Athas> I spend too much time solving complicated problems with Haskell.
09:53:41 merijn joins (~merijn@77.242.116.146)
09:53:48 chele joins (~chele@user/chele)
09:54:26 <kuribas> I find haskell very enjoyable when I am doing simple things in clojure.
09:54:27 × CiaoSen quits (~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de) (Ping timeout: 268 seconds)
09:54:32 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
09:56:40 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 252 seconds)
10:04:50 Inst joins (~Inst@user/Inst)
10:06:09 × tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Remote host closed the connection)
10:06:26 tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
10:06:55 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 252 seconds)
10:07:05 <Athas> tomsmeding: since you expressed interest: https://github.com/gradbench/gradbench/pull/272
10:07:12 × bilegeek quits (~bilegeek@2600:1008:b0a4:c6d5:66f:6873:2abc:50c5) (Quit: Leaving)
10:07:41 <Athas> I'm wondering if I can adapt your Accelerate implementations into pure Haskell.
10:08:34 j1n37 joins (~j1n37@user/j1n37)
10:09:14 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
10:10:17 <Inst> TINO warp/wai, right?
10:11:24 <Inst> erm, there's no alternative to wai, specifically?
10:12:32 j1n37 joins (~j1n37@user/j1n37)
10:13:34 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
10:14:14 <Inst> snap runs on neither warp nor wai
10:17:08 j1n37 joins (~j1n37@user/j1n37)
10:17:58 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
10:19:54 <tomsmeding> Athas: that shouldn't be too difficult, actually
10:20:05 <tomsmeding> also, thanks!
10:20:25 tnt2 joins (~Thunderbi@user/tnt1)
10:21:06 j1n37 joins (~j1n37@user/j1n37)
10:21:09 <tomsmeding> Athas: you forgot to update the [futhark] link in the readme
10:21:48 <Athas> So I did. Thanks for noticing.
10:23:47 × tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 252 seconds)
10:23:47 tnt2 is now known as tnt1
10:26:27 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
10:29:27 alfiee joins (~alfiee@user/alfiee)
10:31:27 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 268 seconds)
10:32:16 × drdo quits (~drdo@bl9-110-63.dsl.telepac.pt) (Quit: Ping timeout (120 seconds))
10:32:53 drdo joins (~drdo@bl9-110-63.dsl.telepac.pt)
10:33:53 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 248 seconds)
10:34:17 × Inst quits (~Inst@user/Inst) (Remote host closed the connection)
10:35:28 × Googulator13 quits (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu) (Quit: Client closed)
10:35:52 Googulator13 joins (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu)
10:38:06 Inst joins (~Inst@user/Inst)
10:38:45 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds)
10:42:32 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 265 seconds)
10:42:55 j1n37 joins (~j1n37@user/j1n37)
10:43:16 × Googulator13 quits (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu) (Quit: Client closed)
10:43:30 Googulator13 joins (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu)
10:49:57 merijn joins (~merijn@77.242.116.146)
10:52:09 × tessier quits (~tessier@ec2-184-72-149-67.compute-1.amazonaws.com) (Ping timeout: 246 seconds)
10:52:30 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
10:52:36 × Inst quits (~Inst@user/Inst) (Remote host closed the connection)
10:56:38 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 245 seconds)
10:56:58 Square2 joins (~Square4@user/square)
11:02:38 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
11:04:06 tessier joins (~tessier@ec2-184-72-149-67.compute-1.amazonaws.com)
11:06:44 xff0x joins (~xff0x@2405:6580:b080:900:4e6:728d:8693:dc86)
11:07:34 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 272 seconds)
11:08:39 lol_ joins (~lol@2603:3016:1e01:b9c0:f149:9d53:5672:9d16)
11:08:40 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
11:09:29 tnt2 joins (~Thunderbi@user/tnt1)
11:09:58 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 245 seconds)
11:09:59 × tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 252 seconds)
11:09:59 tnt2 is now known as tnt1
11:11:52 j1n37 joins (~j1n37@user/j1n37)
11:13:30 × jcarpenter2 quits (~lol@2603:3016:1e01:b9c0:dd5c:182b:d497:5a90) (Ping timeout: 276 seconds)
11:17:31 alfiee joins (~alfiee@user/alfiee)
11:20:09 tnt2 joins (~Thunderbi@user/tnt1)
11:22:08 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
11:22:08 × tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 272 seconds)
11:22:48 ljdarj joins (~Thunderbi@user/ljdarj)
11:23:47 merijn joins (~merijn@77.242.116.146)
11:24:55 tnt1 joins (~Thunderbi@user/tnt1)
11:25:18 × tnt2 quits (~Thunderbi@user/tnt1) (Ping timeout: 272 seconds)
11:30:34 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 260 seconds)
11:33:03 merijn joins (~merijn@77.242.116.146)
11:37:20 tnt2 joins (~Thunderbi@user/tnt1)
11:37:20 × tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 272 seconds)
11:37:20 × xff0x quits (~xff0x@2405:6580:b080:900:4e6:728d:8693:dc86) (Ping timeout: 272 seconds)
11:37:21 tnt2 is now known as tnt1
11:38:18 Inst joins (~Inst@user/Inst)
11:40:15 × Googulator13 quits (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu) (Quit: Client closed)
11:40:46 Googulator13 joins (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu)
11:41:18 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
11:42:50 tnt2 joins (~Thunderbi@user/tnt1)
11:44:06 × tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 252 seconds)
11:44:11 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
11:44:52 × Inst quits (~Inst@user/Inst) (Remote host closed the connection)
11:46:11 j1n37 joins (~j1n37@user/j1n37)
11:46:37 tnt1 joins (~Thunderbi@user/tnt1)
11:47:28 × tnt2 quits (~Thunderbi@user/tnt1) (Ping timeout: 272 seconds)
11:50:33 tnt2 joins (~Thunderbi@user/tnt1)
11:51:12 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org))
11:51:24 × tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 260 seconds)
11:51:36 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 244 seconds)
11:52:39 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
11:53:29 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit)
11:53:30 tnt1 joins (~Thunderbi@user/tnt1)
11:54:33 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
11:55:24 Inst joins (~Inst@user/Inst)
11:55:29 × tnt2 quits (~Thunderbi@user/tnt1) (Ping timeout: 260 seconds)
11:57:23 tnt2 joins (~Thunderbi@user/tnt1)
11:58:24 × tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 260 seconds)
11:58:24 tnt2 is now known as tnt1
11:59:05 CiaoSen joins (~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de)
11:59:17 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 248 seconds)
12:00:27 cheater_ joins (~Username@user/cheater)
12:01:53 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
12:02:50 Digitteknohippie is now known as Digit
12:02:54 × cheater quits (~Username@user/cheater) (Ping timeout: 276 seconds)
12:03:03 cheater_ is now known as cheater
12:05:16 alfiee joins (~alfiee@user/alfiee)
12:05:40 × tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 265 seconds)
12:05:44 comerijn joins (~merijn@77.242.116.146)
12:06:08 ubert joins (~Thunderbi@2a02:8109:ab8a:5a00:fee4:2960:1510:cb37)
12:06:52 tnt1 joins (~Thunderbi@user/tnt1)
12:07:28 × Inst quits (~Inst@user/Inst) (Remote host closed the connection)
12:08:17 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds)
12:09:02 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
12:09:33 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
12:12:20 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 252 seconds)
12:12:40 tnt2 joins (~Thunderbi@user/tnt1)
12:13:06 <ski> tomsmeding,dminuoso : "it's rather that let evaluates them concurrently" -- not concurrently, but collaterally (it's the same in Scheme, Common Lisp). e.g. `(let ((a b) (b (+ a b))) ..a..b..)' amounts basically to `do (a,b) <- pure (b,a + b); ..a..b..', or `(\(a,b) -> ..a..b..) (b,a + b)' if you prefer
12:13:22 <ski> while `(let* ((a b) (b (+ a b))) ..a..b..)' would amount to `do a <- pure b; b <- pure (a + b); ..a..b..' or `(\a -> (\b -> ..a..b..) (a + b)) b', sequential binding
12:13:26 × tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 252 seconds)
12:13:26 tnt2 is now known as tnt1
12:13:38 <ski> iirc, Scheme has unspecified evaluation order of the operator and operands in a combination ("function call"), even allowing concurrent evaluation, as long as it is serializable
12:13:49 <ski> (see e.g. "Concurrent and serializable computations - and the evaluation order for function's arguments and the body" by Oleg at <https://okmij.org/ftp/Computation/serialization.html>,"4.1.3 Procedure Calls" in the R⁵RS at <https://conservatory.scheme.org/schemers/Documents/Standards/R5RS/HTML/r5rs-Z-H-7.html#%_sec_4.1.3>)
12:13:55 <ski> so .. the collateral (vs. sequential) here refers to scoping, not to concurrency
12:14:08 <ski> "lisp is way more symbolic in the sense that `x` is not a reference to a particular thing","It's more like in lambda calculus where `x` is just `x`." -- no, not really. quoting, for staged programming, meta-programming, macros, is a different thing. obviously you can implement "symbolic evaluators" (partial evaluators, program specializers), just like you can, in Haskell
12:14:15 <ski> oh, and dynamic scoping vs. static/lexical scoping is yet another thing entirely
12:14:20 <ski> "What Im saying is, is there a big meaningful difference between (+ 5 x) and '(+ 5 x) ?" -- the latter is just a data structure, involving a symbol (not any variable at all)
12:14:40 jespada joins (~jespada@2800:a4:22b9:6800:90a2:b8c6:2c24:d97d)
12:15:10 <tomsmeding> ski: that makes sense!
12:15:43 <tomsmeding> so let vs let* is about scoping, not about evaluation? And any differences in evaluation are just corollary effects from evaluation order of unsequenced things being unspecified in general anyway?
12:16:25 tnt2 joins (~Thunderbi@user/tnt1)
12:17:02 <ski> well, `let*' also specifies sequential evaluation
12:17:18 <ski> (because of expanding into nested lambda applications)
12:17:38 <tomsmeding> as in, it would not be allowed to postpone evaluation until the variable `a' is used in the right-hand side of `b', for example?
12:17:47 <ski> but otherwise, yes
12:17:53 × tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 245 seconds)
12:17:55 <tomsmeding> because of the scoping, I don't see what other way you could _not_ have sequential evaluation there
12:18:10 <ski> not in Scheme, Common Lisp, no
12:18:20 <tomsmeding> they are all strict languages, right?
12:18:34 <ski> for a non-standard non-strict Scheme variant, yes
12:18:41 <ski> yes
12:18:46 <tomsmeding> right
12:19:10 <tomsmeding> yeah you can always interpret existing syntax differently if you want, but then you get a different programming languaeg
12:19:28 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
12:19:40 <ski> (some texts that play around with implementing Scheme or Lisp interpreters, meta-circularly, does have a non-strict version as a variant)
12:20:42 <ski> Lazy ML was a lazy version of the usual strict ML. iirc, HBC (first Haskell compiler) was implemented in it
12:20:48 <tomsmeding> but even in a non-strict variant, you can still separate that from the scoping difference of let vs let*, and the evaluation strategy + the scoping is together sufficient to determine what happens, I think
12:20:58 <ski> (where is augustss/lennart when you need him !?)
12:21:19 × tnt2 quits (~Thunderbi@user/tnt1) (Ping timeout: 260 seconds)
12:22:02 <tomsmeding> i.e. "well, `let*' also specifies sequential evaluation" is redundant if you have the scoping property together with the overall strict evaluation strategy
12:22:47 <ski> yes. i meant that that "specified sequential evaluation" is a derived consequence of the latter
12:22:54 <tomsmeding> right
12:23:10 <tomsmeding> cool, the magic level decreased even further
12:25:35 <ski> `let' and `let*' (and a bunch of other special forms) are specified as "derived forms" (macros), in the R⁵RS, <https://conservatory.scheme.org/schemers/Documents/Standards/R5RS/HTML/r5rs-Z-H-7.html#%_sec_4.2>,<https://conservatory.scheme.org/schemers/Documents/Standards/R5RS/HTML/r5rs-Z-H-10.html#%_sec_7.3>
12:28:19 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 260 seconds)
12:31:30 <ski> HBC : <https://wiki.haskell.org/Implementations#HBI_and_HBC.2C_Chalmers.27_Haskell_Interpreter_and_Compiler>,<http://web.archive.org/web/20090815181116/http://www.cs.chalmers.se/~augustss/hbc/hbc.html>,<https://web.archive.org/web/20100526120524/http://www.cs.chalmers.se/pub/users/hallgren/Alfa/Haskell/>,<https://archive.org/details/haskell-b-compiler>
12:32:00 <ski> `hbc-library' <https://www.altocumulus.org/~hallgren/untested/Source_code/old/>,`hbcmake' <https://cth.altocumulus.org/~hallgren/software.html>
12:33:44 __monty__ joins (~toonn@user/toonn)
12:34:33 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
12:34:38 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:87ef:122c:2b31:8cb8)
12:34:39 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:87ef:122c:2b31:8cb8) (Read error: Connection reset by peer)
12:34:58 Inst joins (~Inst@user/Inst)
12:36:10 <Inst> also, the reason we use monads instead of monadoids is because pure / return is still a useful end to a monad block, no? left identity might have niche uses, but right identity remains eminently useful
12:37:10 × __monty__ quits (~toonn@user/toonn) (Client Quit)
12:39:00 __monty__ joins (~toonn@user/toonn)
12:39:08 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 244 seconds)
12:39:12 <Inst> there probably is a case wherein left identity is highly useful, though; ugh
12:41:32 xff0x joins (~xff0x@2405:6580:b080:900:a030:6365:43f5:43dc)
12:42:34 random-jellyfish joins (~developer@user/random-jellyfish)
12:42:54 <ski> left identity is used when refactoring
12:45:41 <Inst> are there cases where foo <- pure bar is better than let foo = bar?
12:45:44 <ski> you have `foo x y z = do ...; return (...)', and you want to inline that into `do ...; t <- foo a b c; ...'. to do that, in the obvious way, you need the associative law, and the left identify law, getting `do ...; let {x = a,; y = b; z = c}; ...; let {t = ...}; ...; ' (assuming any variable clashes have been dealt with, by renaming beforehand)
12:46:30 <ski> when `foo' is a refutable pattern, and you want to implicitly invoke `fail' in `MonadFail'
12:46:40 <Inst> yeah, that was brought up last time
12:46:43 <ski> or when `foo' shadows some variables in `bar'
12:47:03 × comerijn quits (~merijn@77.242.116.146) (Ping timeout: 245 seconds)
12:47:10 <ski> the former also forces `foo' to be monomorphic
12:47:11 <haskellbridge> <Morj> Re foo <- pure bar: this way you can actually shadow variables instead of creating recursive bindings. Similar to ocaml/rust style of doing "let a = expr b in let a = other a in ..."
12:47:25 <Inst> you can do that with let as well
12:47:30 <ski> no
12:47:36 <ski> `let' creates recursive bindings
12:47:49 <Inst> ah, yes, you'd need an intermediary
12:47:50 <ski> > let x = 1 in let x = x + 1 in x
12:47:52 <lambdabot> *Exception: <<loop>>
12:48:11 <ski> > do x <- pure 1; x <- pure (x + 1); [x]
12:48:12 <lambdabot> [2]
12:48:23 merijn joins (~merijn@77.242.116.146)
12:48:54 <ski> > [x | x <- [1],x <- [x + 1]]
12:48:55 <Inst> > let foo = 1 in let bar = foo in let foo = bar + 1 in foo
12:48:55 <lambdabot> [2]
12:48:56 <lambdabot> 2
12:49:04 <ski> yes
12:49:10 <Inst> that works, but is way, way uglier
12:49:17 <haskellbridge> <Morj> Holy hell, I didn't know you can do it in list comprehensions
12:49:38 <Inst> but iirc shadowing is idiomatic in rust, not in haskell
12:49:43 <ski> it's rather obvious, from the list comprehension expansion transformations
12:49:46 <Inst> Morj: also implies -XMonadComprehensions ;)
12:50:17 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:87ef:122c:2b31:8cb8)
12:50:21 <haskellbridge> <Morj> Sometimes I wish it were idiomatic here. I have a lot of code like "let a = ...; a' = ... a; a'' = ... a' etc"
12:52:12 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:87ef:122c:2b31:8cb8) (Read error: Connection reset by peer)
12:53:41 alfiee joins (~alfiee@user/alfiee)
12:54:45 <Inst> thanks re ski
12:54:52 <Inst> and Morj
12:55:42 <ski> in SML, `let val a = b and b = a + b in ..a..b.. end' is collateral binding (cf. `let' vs. `let*' above), while `let val a = b; val b = a + b in ..a..b.. end' is sequential binding. recursive binding (corresponding to `letrec' in Lisps) is `let val rec f = ... and g = ... in ..f..g.. end'
12:56:45 <ski> (the bodies of `f' and `g' here must be syntactically values, lambda abstractions basically)
12:57:02 <tomsmeding> for the `let rec' case?
12:57:08 <ski> yes
12:57:54 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 248 seconds)
12:58:35 <ski> some Scheme systems also have a `letrec*' that guarantees sequential order of evaluation (but recursive scoping) of the definientia
12:59:27 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
13:01:18 × akegalj quits (~akegalj@89-172-194-52.adsl.net.t-com.hr) (Ping timeout: 268 seconds)
13:01:47 <ski> Mercury has a "State variable" notation, where you can type `foo(...,!X),bar(!X,...),baz(...,!X...)', meaning `foo(...,!.X,!:X),bar(!.X,!:X,...),baz(...,!.X,!:X,...)', which basically amounts to `foo(...,X0,X1),bar(X1,X2,...),baz(...,X2,X3,...)', where `X0' is the initial value of `!X', and `X3' is the final value of `!X'. see
13:01:52 <ski> <https://www.mercurylang.org/information/doc-latest/mercury_ref/Clauses.html#State-variables>
13:02:24 <ski> (so it generates a sequence of variables for you, basically)
13:03:06 <haskellbridge> <Morj> That's a cool feature
13:04:19 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 260 seconds)
13:05:06 × Inst quits (~Inst@user/Inst) (Remote host closed the connection)
13:05:32 AlexNoo_ is now known as AlexNoo
13:06:17 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
13:09:18 ski idly wonders what could be a reasonable concrete syntax for sequential vs. collateral binding, in Haskell
13:11:12 <ski> there already is `do rec {x <- ..y..; y <- ..x..}; ..x..y..'
13:14:14 Inst joins (~Inst@user/Inst)
13:15:01 ski notes that `rec' doesn't work in list comprehensions, even with `MonadComprehensions' enabled
13:16:32 <ski> .. i guess one could imagine `seq {...}' and `par {...}', although that'd snarf the names of those standard functions
13:16:45 <Inst> is this explanation of why monads instead of monadoids in the moggi papers?
13:17:09 <ski> `let par {a = b; b = a + b} in ..a..b..' vs. `let seq {a = b; b = a + b} in ..a..b..'
13:17:11 <haskellbridge> <Morj> Does using var` lead to any ambiguities? To get "let a` = foo; a` = bar a`; a` = qux a` in ..." - mercury-style state variables
13:17:30 <ski> which, Inst ?
13:17:38 <haskellbridge> <Morj> I like that it's similar to using a front-tick which is already idiomatic
13:18:12 <Inst> the one for left identity, at least, and implicitly the right identity to permit a return through a neutral element
13:18:43 sawilagar joins (~sawilagar@user/sawilagar)
13:18:45 ski 's forgotten what "monadoids" refer to
13:18:55 cstslrdg^ joins (~cstslrdg@108.192.66.114)
13:19:15 <Inst> i've forgotten if i used the term correctly
13:19:24 <ski> right identity is for getting "monadic tail invokation"
13:20:52 <Inst> i mean associative law of functor join without identity laws of pure/eta
13:22:27 × mange quits (~user@user/mange) (Quit: Zzz...)
13:22:32 <Inst> although tbh you CAN avoid right identity to some extent, simply by using the last monadic element, then <$ the returned element into it
13:22:45 <Inst> *returned value
13:24:56 × Inst quits (~Inst@user/Inst) (Remote host closed the connection)
13:25:34 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
13:27:48 akegalj joins (~akegalj@141-136-246-173.dsl.iskon.hr)
13:33:43 × acidjnk quits (~acidjnk@p200300d6e7283f64718e6a656831e8a3.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
13:34:35 tomsmeding wonders what interesting structures would become available if you drop the identity laws
13:34:55 Googulator13 is now known as Googulator
13:39:31 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
13:39:49 <haskellbridge> <alexfmpe> Map I guess? it already has an Apply instance and I just join would be double lookup like "(->) e"
13:40:00 <haskellbridge> <alexfmpe> * guess
13:40:17 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
13:41:03 Inst joins (~Inst@user/Inst)
13:41:13 <Inst> how embarrassing, i've forgotten
13:41:20 <Inst> it should be semimonad, not monadoid :(
13:41:24 <Inst> https://topos.institute/blog/2022-12-20-lenses-semi-monads/
13:41:46 alfiee joins (~alfiee@user/alfiee)
13:42:32 × CiaoSen quits (~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de) (Ping timeout: 252 seconds)
13:43:07 gmg joins (~user@user/gehmehgeh)
13:45:48 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
13:46:45 fp1 joins (~Thunderbi@87-94-148-3.rev.dnainternet.fi)
13:47:10 × Inst quits (~Inst@user/Inst) (Remote host closed the connection)
13:55:16 Inst joins (~Inst@user/Inst)
13:58:07 <Inst> re: ski, btw, (\u -> u + 1 & () 3
13:58:10 <Inst> whoops
13:58:31 <Inst> (\u -> u + 1 & (\u -> u + 2) ) 3
13:58:48 <Inst> something like that, as a surrogate for left identity recursive bindings via lambda abuse
13:59:49 <Inst> so at least in theory, you can just have return be syntactical sugar for ` $> foo ` and then, no need for identity
14:02:05 <Inst> you still have cases where you'd want to play with conditionals, i.e, one branch might loop, the other branch pures something to exit the loop
14:08:04 × sawilagar quits (~sawilagar@user/sawilagar) (Ping timeout: 272 seconds)
14:08:17 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds)
14:10:07 <ncf> i've been calling those semigroupads
14:10:26 <ncf> (a monad is to a monoid what a semigroupad is to a semigroup)
14:12:35 × jespada quits (~jespada@2800:a4:22b9:6800:90a2:b8c6:2c24:d97d) (Ping timeout: 252 seconds)
14:15:57 jespada joins (~jespada@2800:a4:2242:3400:88a3:e3e2:fe88:541b)
14:17:49 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
14:17:49 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
14:17:49 × califax quits (~califax@user/califx) (Read error: Connection reset by peer)
14:17:49 × chiselfuse quits (~chiselfus@user/chiselfuse) (Write error: Connection reset by peer)
14:17:49 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
14:17:52 Chai-T-Rex joins (~ChaiTRex@user/chaitrex)
14:18:02 califax_ joins (~califax@user/califx)
14:18:13 stiell joins (~stiell@gateway/tor-sasl/stiell)
14:18:37 gmg joins (~user@user/gehmehgeh)
14:19:15 califax_ is now known as califax
14:20:06 merijn joins (~merijn@77.242.116.146)
14:20:14 chiselfuse joins (~chiselfus@user/chiselfuse)
14:20:21 <haskellbridge> <Morj> From the name is looks related to semigroupoid
14:21:33 × Inst quits (~Inst@user/Inst) (Remote host closed the connection)
14:22:11 <haskellbridge> <Morj> Actually when the hell did they rename groupoid to a magma, and what do you call semigroupoid now? Semimagma?
14:23:36 × pabs3 quits (~pabs3@user/pabs3) (Ping timeout: 252 seconds)
14:24:24 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 260 seconds)
14:29:04 merijn joins (~merijn@77.242.116.146)
14:31:31 alfiee joins (~alfiee@user/alfiee)
14:33:32 × tavare quits (~tavare@user/tavare) (Remote host closed the connection)
14:36:05 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 248 seconds)
14:37:15 <Athas> What is the best library for arrays with polymorphic (boxed) elements?
14:37:30 <Athas> I find the Data.Array API annoying, but is there anything that is faster for boxed elements?
14:38:16 <Athas> I guess I also want a strict array.
14:39:40 euandreh joins (~Thunderbi@2804:d59:8929:cc00:d891:8eae:ea90:438e)
14:42:13 <enikar> Athas: maybe Vectors fit your need.
14:43:53 <Athas> Perhaps. I'm a frequent user of unboxed vectors, for sure.
14:44:09 <Athas> But now I am reminded that even boxed vectors support efficient slicing, and Data.Array does not. Vectors it is.
14:45:50 acidjnk joins (~acidjnk@p200300d6e7283f6479fd67032cffedd5.dip0.t-ipconnect.de)
14:50:12 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
14:58:48 × Digit quits (~user@user/digit) (Ping timeout: 252 seconds)
14:59:39 × fp1 quits (~Thunderbi@87-94-148-3.rev.dnainternet.fi) (Ping timeout: 265 seconds)
15:00:12 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
15:04:30 <ski> "you can just have return be syntactical sugar for ` $> foo ` and then, no need for identity" -- only when it's at the end of a `do' (consisting of at least two parts), no ?
15:05:02 <enikar> Athas: yes, and there are also member of the Foldable and the Traversable classes unlike Vector.Unboxed
15:05:10 zungi joins (~tory@user/andrewchawk)
15:05:21 <ski> Morj : i thought a groupoid was a category with every morphism invertible. while magma is a binary operation, and semigroup is an associative magma
15:13:07 pabs3 joins (~pabs3@user/pabs3)
15:18:48 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 264 seconds)
15:19:15 alfiee joins (~alfiee@user/alfiee)
15:19:21 ec joins (~ec@gateway/tor-sasl/ec)
15:24:04 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
15:25:31 euandreh1 joins (~Thunderbi@189.6.105.228)
15:27:11 <haskellbridge> <Bowuigi> Morj Wikipedia mentions that groupoid usually doesn't mean magma. The most widely accepted definition of groupoid is the one ski gave. This actually makes the semigroupoid definition have more sense, because a groupoid is a semigroupoid with identities, just like a monoid is a semigroup with identities
15:27:42 <haskellbridge> <Bowuigi> I guess the name groupoid was chosen because monoidoid didn't sound nice
15:27:49 × euandreh quits (~Thunderbi@2804:d59:8929:cc00:d891:8eae:ea90:438e) (Ping timeout: 260 seconds)
15:27:49 euandreh1 is now known as euandreh
15:29:09 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 260 seconds)
15:31:11 <haskellbridge> <Bowuigi> Oh sorry, a groupoid is an invertible semigroupoid with identities, just like a group is an invertible semigroup with identities
15:31:21 <haskellbridge> <Bowuigi> The name makes sense then
15:31:36 <haskellbridge> <Bowuigi> A monoidoid is a category lol
15:32:49 YaShhhh joins (~YaShhhh@202.148.58.43)
15:36:12 × remexre quits (~remexre@user/remexre) (Ping timeout: 252 seconds)
15:38:26 <haskellbridge> <maralorn> Morj: My experience with mathematics is that they very rarely rename anything.
15:40:33 merijn joins (~merijn@77.242.116.146)
15:41:05 × YaShhhh quits (~YaShhhh@202.148.58.43) (Quit: Client closed)
15:43:36 <Athas> tomsmeding: do you know which part of 'ad' corresponds to jvp/vjp?
15:44:53 remexre joins (~remexre@user/remexre)
15:47:12 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds)
15:49:47 <tomsmeding> Athas: jvp is Numeric.AD.diff, I think
15:49:48 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
15:51:18 <tomsmeding> I'm not sure!
15:51:54 <tomsmeding> oh, jvp is Numeric.AD.du
15:52:22 <Athas> Ah yes, that type looks sensible. Thanks.
15:52:53 <tomsmeding> I also can't seem to find a vjp, somehow
15:53:07 × ubert quits (~Thunderbi@2a02:8109:ab8a:5a00:fee4:2960:1510:cb37) (Quit: ubert)
15:54:03 <Athas> Strange names. I wonder which tradition they come out of.
15:55:38 merijn joins (~merijn@77.242.116.146)
15:55:50 <tomsmeding> Athas: I think I found the 1.0: in the definition of Numeric.AD.Internal.Reverse(partials)
15:55:54 <tomsmeding> (writeArray ss k 1)
15:56:11 <Athas> Wow, it works! The code looks mysterious though.
15:56:30 <tomsmeding> this function looks rather low-level on the representation, though, so that makes me more confident that there's not some more generic function around that takes that 1 as a parameter
15:56:41 <tomsmeding> Athas: what looks mysterious?
15:56:44 <tomsmeding> the 'du'?
15:57:32 <Athas> No, the code in my Emacs. But I think it does make sense. It's just weird to lift constants through multiple levels of differentiation.
15:57:37 <Athas> This cannot possibly be fast...
15:57:47 <tomsmeding> multiple levels?
15:58:01 <Athas> Yes, I need to compute a higher order derivative.
15:58:06 <tomsmeding> I see!
15:58:29 <tomsmeding> regarding performance: the whole thing is scalar-based, it has no concept of arrays as far as I know. So you're going to get interpretation overhead _per scalar_.
15:58:50 <Athas> Sure sure.
15:59:20 <tomsmeding> it does optimise constants everywhere, so I wouldn't be surprised that whatever you do with constants is not really an issue
15:59:23 <Athas> This really is the best Haskell can do in terms of AD, except for Accelerate, right?
15:59:34 <tomsmeding> the Accelerate work is not even merged :p
15:59:40 <tomsmeding> there are bindings to libtorch
15:59:49 × random-jellyfish quits (~developer@user/random-jellyfish) (Ping timeout: 244 seconds)
15:59:50 <tomsmeding> I'm not sure if those do AD
15:59:58 <tomsmeding> and there are bindings to tensorflow, etc.
16:00:03 <Athas> That's boring, though.
16:00:06 <tomsmeding> it is.
16:00:16 <tomsmeding> and also quite unergonomic
16:00:18 <Athas> Anyway, performance isn't necessarily the goal.
16:00:30 <Athas> 'ad' is fairly ergonomic once you get used to the types and names, I think.
16:00:42 <tomsmeding> yes, 'ad' does a pretty good job of being a nice Haskell citizen
16:01:35 <Athas> It validates!
16:01:41 <tomsmeding> yay!
16:01:46 <tomsmeding> which benchmark is this?
16:02:03 <Athas> kmeans, because it's not so difficult to implement from scratch.
16:02:08 <Athas> I sort of dread doing the ADBench ones.
16:02:22 <tomsmeding> GMM and BA are kind of doable
16:02:40 <tomsmeding> I recommend you start from appendix B.1 and B.2 here :3 https://tomsmeding.com/f/master.pdf
16:02:56 <Athas> Yes, I was looking at that earlier today.
16:03:09 <tomsmeding> but it's messy either way
16:04:01 <Athas> A fellow also implemented an AD library in OCaml, using their new algebraic effects. I suspect it is still very slow (and scalar), however.
16:04:33 <tomsmeding> naive scalar-level AD is one of the upstream examples, actually
16:04:38 <Athas> But Haskell with 'ad' is a lot more fun than porting all those bloody C++ tools.
16:04:46 <tomsmeding> https://github.com/ocaml-multicore/effects-examples/blob/master/algorithmic_differentiation.ml
16:05:04 <tomsmeding> these things are not very fast, but they're cute and small
16:05:14 <Athas> tomsmeding: uh, doesn't that call the continuation in a non-tail position?
16:05:19 <tomsmeding> yes
16:05:34 <tomsmeding> the call stack is your tape
16:05:46 <tomsmeding> not unlike https://www.cs.purdue.edu/homes/rompf/papers/wang-icfp19.pdf
16:06:19 alfiee joins (~alfiee@user/alfiee)
16:06:29 <Athas> That is possibly the least efficient way of handling the tape I have ever heard of.
16:07:06 <tomsmeding> :D
16:07:35 <Athas> I vaguely recall that this new OCaml library uses tail calls.
16:07:41 <tomsmeding> it took me a while to find the link again, but at some point I found this https://andriusstank.github.io/downhill/ ; I've never actually tried to use it
16:07:56 <tomsmeding> or, in fact, if anybody else has
16:08:00 <tomsmeding> but it apparently exists
16:08:43 comerijn joins (~merijn@77.242.116.146)
16:09:25 <Athas> What is "heterogeneous reverse mode"?
16:09:38 <tomsmeding> it's been, what, 2 years since I looked at this; I have no clue
16:10:25 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 248 seconds)
16:10:58 <Athas> So why wasn't the Accelerate AD implementation merged? And why haven't anyone done AD in, say, Repa or one of the other libraries where Haskell works as the metalanguage?
16:11:12 <Athas> That clearly seems to be the most viable path to using Haskell for numerical algorithms.
16:11:34 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 260 seconds)
16:11:44 <tomsmeding> the Accelerate stuff wasn't merged because 1. it supported only part of the language, 2. it was okay-ish but really didn't generate very good code, 3. only I had any hope of maintaining it, it was rather complex
16:11:48 × Googulator quits (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu) (Quit: Client closed)
16:11:58 Googulator joins (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu)
16:12:37 <tomsmeding> I agree though that the most viable way to get proper efficient numerical algorithms in haskell is to do it with an array DSL, perhaps even a deeply embedded one so that you can do some optimisations on the derivative code before you run it
16:13:14 <Athas> Dammit, I have a space leak.
16:13:34 <tomsmeding> hah, welcome to haskell?
16:13:54 <Athas> Yeah, I feel like an undergrad again. These days this usually only happens when I do numerical Haskell.
16:14:19 <tomsmeding> :D
16:15:32 <Athas> It's probably because Data.Vector.sum is non-strict or something.
16:15:38 <Athas> Or maybe it's actually inside the guts of 'ad'.
16:17:48 <Athas> At least it scales reasonably: https://sigkill.dk/junk/kmeans-primal.pdf
16:17:59 <Athas> But the AD overhead is intolerable: https://sigkill.dk/junk/kmeans-ratio.pdf
16:18:49 <tomsmeding> Athas: how do those graphs change if you change the size of the GC nursery?
16:19:04 <tomsmeding> say, +RTS -A500m
16:19:07 <Athas> I haven't fiddled with any of yet. Do you think it will have a meaningful impact?
16:19:10 <tomsmeding> yes.
16:19:25 <tomsmeding> the tape is a long chain of data constructors, which the GC will have to sequentially traverse
16:19:54 <tomsmeding> at least, that's my best understanding -- I haven't actually played with 'ad' much, but I understand the general algorithm well enough
16:20:14 <Athas> Well, let's see.
16:20:16 <tomsmeding> in fact I'm surprised that first graph is nice and linear; I would've expected it to be quadratic to some extent because of GC
16:20:30 <Athas> The first graph is the primal runtime. No AD.
16:20:34 <tomsmeding> ah
16:21:26 <Athas> It hasn't finished yet, but eyeballing, with those RTS opts it's maybe 20% faster.
16:21:53 <tomsmeding> I would expect that 20% to not be constant, but to increase if the tape length increases
16:21:59 <tomsmeding> but maybe I'm wrong!
16:22:28 <tomsmeding> perhaps until the size of the tape on the heap exceeds 500 MB. :)
16:22:30 <Athas> Oh no, it is eating my memory again.
16:22:46 <Athas> But I think it may not be a space leak, but just a big tape.
16:23:01 <tomsmeding> remember, this is a haskell heap node per computed scalar
16:23:32 <tomsmeding> more than 1 heap node, actually
16:24:29 zmt00 joins (~zmt00@user/zmt00)
16:24:54 <Athas> Also, there's actually a trick to kmeans, which I suppose 'ad' cannot do. There's some sparsity in the intermediate calculations that you must exploit or you get an asymptotic overhead.
16:25:30 <tomsmeding> given that this is all scalars: isn't any sparsity already taken advantage of by construction?
16:25:51 <Athas> Possibly.
16:26:03 <tomsmeding> if you don't compute a scalar, there just isn't anything it does
16:26:49 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
16:27:01 <tomsmeding> Athas: it creates one of these, at the core https://hackage.haskell.org/package/ad-4.5.6/docs/src/Numeric.AD.Internal.Reverse.html#Cells
16:27:35 <Athas> It is just the largest dataset it runs out of memory on! I really wish it could have done that one as well.
16:27:48 <Athas> Now I have to do some more work to handle errors gracefully.
16:36:24 euphores joins (~SASL_euph@user/euphores)
16:36:52 lol_ is now known as jcarpenter2
16:37:20 × akegalj quits (~akegalj@141-136-246-173.dsl.iskon.hr) (Quit: leaving)
16:37:48 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:38:45 <Athas> Is it not possible to catch heap overflow exceptions? The RTS help text implies that it is.
16:47:28 × aforemny_ quits (~aforemny@2001:9e8:6ce5:a900:aaac:d53d:16e5:71d8) (Ping timeout: 245 seconds)
16:47:38 aforemny joins (~aforemny@2001:9e8:6ced:2b00:6085:15c7:5969:9b60)
16:49:03 × chele quits (~chele@user/chele) (Remote host closed the connection)
16:49:21 × comerijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds)
16:53:44 alfiee joins (~alfiee@user/alfiee)
16:58:05 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 265 seconds)
17:03:46 × iteratee quits (~kyle@162.218.222.207) (Ping timeout: 248 seconds)
17:03:49 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 248 seconds)
17:04:54 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
17:05:50 iteratee joins (~kyle@162.218.222.207)
17:05:56 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
17:09:41 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 265 seconds)
17:14:18 rvalue- joins (~rvalue@user/rvalue)
17:14:53 × dolio quits (~dolio@130.44.140.168) (Quit: ZNC 1.9.1 - https://znc.in)
17:15:02 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 244 seconds)
17:15:19 × rvalue quits (~rvalue@user/rvalue) (Ping timeout: 260 seconds)
17:20:25 dolio joins (~dolio@130.44.140.168)
17:20:27 × dolio quits (~dolio@130.44.140.168) (Remote host closed the connection)
17:20:57 rvalue- is now known as rvalue
17:21:41 dolio joins (~dolio@130.44.140.168)
17:23:13 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
17:33:06 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
17:34:31 × Googulator quits (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu) (Quit: Client closed)
17:34:48 Googulator joins (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu)
17:39:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
17:40:34 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Ping timeout: 244 seconds)
17:43:28 alfiee joins (~alfiee@user/alfiee)
17:47:49 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
17:47:50 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
17:55:59 × Googulator quits (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu) (Quit: Client closed)
17:56:19 Googulator joins (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu)
17:56:23 random-jellyfish joins (~developer@bl11-91-28.dsl.telepac.pt)
17:56:23 × random-jellyfish quits (~developer@bl11-91-28.dsl.telepac.pt) (Changing host)
17:56:23 random-jellyfish joins (~developer@user/random-jellyfish)
17:59:45 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:02:05 Guest8 joins (~Guest27@89-97-88-223.ip16.fastwebnet.it)
18:02:25 × Guest8 quits (~Guest27@89-97-88-223.ip16.fastwebnet.it) (Client Quit)
18:07:10 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
18:09:24 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
18:14:26 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 272 seconds)
18:17:48 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:18:36 × smalltalkman quits (uid545680@id-545680.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
18:19:45 Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
18:21:56 × sabathan quits (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) (Read error: Connection reset by peer)
18:22:40 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
18:23:34 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
18:24:38 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
18:25:13 sabathan joins (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr)
18:26:07 j1n37- joins (~j1n37@user/j1n37)
18:27:01 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 248 seconds)
18:28:14 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 260 seconds)
18:28:30 econo_ joins (uid147250@id-147250.tinside.irccloud.com)
18:30:31 alfiee joins (~alfiee@user/alfiee)
18:31:06 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
18:33:10 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:35:14 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
18:35:52 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 252 seconds)
18:37:42 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
18:42:25 × fun-safe-math quits (~fun-safe-@2601:1c2:1b7f:801f:c74b:f0dc:f04d:3261) (Quit: No Ping reply in 180 seconds.)
18:43:40 fun-safe-math joins (~fun-safe-@2601:1c2:1b7f:801f:6422:3799:4fbd:4a99)
18:45:08 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
18:45:24 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds)
18:46:30 Lord_of_Life_ is now known as Lord_of_Life
18:47:15 × hattckory quits (~hattckory@149.102.242.103) (Remote host closed the connection)
18:47:26 hattckory joins (~hattckory@149.102.242.103)
18:48:33 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:52:53 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
18:54:56 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 252 seconds)
18:55:17 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
19:02:40 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 268 seconds)
19:03:55 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:04:26 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
19:05:48 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
19:07:05 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
19:08:52 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
19:10:42 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
19:12:06 Digit joins (~user@user/digit)
19:15:19 × Digit quits (~user@user/digit) (Remote host closed the connection)
19:16:27 Digitteknohippie joins (~user@user/digit)
19:18:05 Noir joins (~Noir@pal-210-106-84.itap.purdue.edu)
19:18:36 alfiee joins (~alfiee@user/alfiee)
19:20:17 Digitteknohippie is now known as Digit
19:21:14 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Remote host closed the connection)
19:21:33 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:21:45 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
19:23:05 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 265 seconds)
19:23:51 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
19:23:56 × Googulator quits (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu) (Quit: Client closed)
19:24:13 Googulator joins (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu)
19:24:13 × Noir quits (~Noir@pal-210-106-84.itap.purdue.edu) (Remote host closed the connection)
19:24:28 Eoco joins (~ian@128.101.131.218)
19:26:05 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 252 seconds)
19:26:34 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
19:35:21 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
19:36:56 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:38:02 × tccq quits (~user@user/tccq) (Read error: Connection reset by peer)
19:39:41 target_i joins (~target_i@user/target-i/x-6023099)
19:40:01 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 248 seconds)
19:40:51 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
19:43:15 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
19:43:54 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
19:50:20 yegorc joins (~yegorc@user/yegorc)
19:59:36 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
20:00:05 × caconym quits (~caconym@user/caconym) (Quit: bye)
20:00:47 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:00:47 caconym joins (~caconym@user/caconym)
20:04:45 ft joins (~ft@p4fc2a610.dip0.t-ipconnect.de)
20:05:01 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
20:06:21 alfiee joins (~alfiee@user/alfiee)
20:10:13 ljdarj1 joins (~Thunderbi@user/ljdarj)
20:10:23 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
20:11:04 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:12:22 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds)
20:12:23 ljdarj1 is now known as ljdarj
20:14:20 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
20:15:52 pavonia joins (~user@user/siracusa)
20:18:14 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
20:24:17 × Googulator quits (~Googulato@2a01-036d-0106-4074-e4c1-4d2b-93a1-bece.pool6.digikabel.hu) (Quit: Client closed)
20:30:55 × sim590 quits (~simon@209-15-185-101.resi.cgocable.ca) (Quit: WeeChat 4.5.1)
20:33:39 × yegorc quits (~yegorc@user/yegorc) (Ping timeout: 244 seconds)
20:34:29 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 248 seconds)
20:34:45 sim590 joins (~simon@209-15-185-101.resi.cgocable.ca)
20:42:28 sprotte24 joins (~sprotte24@p200300d16f0d4a00681b32e76f69c495.dip0.t-ipconnect.de)
20:48:51 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
20:49:16 × target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving)
20:53:45 alfiee joins (~alfiee@user/alfiee)
20:54:13 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 248 seconds)
20:55:13 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
20:58:08 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
21:01:41 × prasad quits (~Thunderbi@c-73-246-138-70.hsd1.in.comcast.net) (Remote host closed the connection)
21:01:48 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 252 seconds)
21:01:56 yegorc joins (~yegorc@user/yegorc)
21:08:54 × sprotte24 quits (~sprotte24@p200300d16f0d4a00681b32e76f69c495.dip0.t-ipconnect.de) (Quit: Leaving)
21:10:58 tccq joins (~user@user/tccq)
21:11:24 zungi joins (~tory@user/andrewchawk)
21:14:02 × michalz quits (~michalz@185.246.207.203) (Remote host closed the connection)
21:14:25 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
21:23:26 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 252 seconds)
21:24:48 justsomeguy joins (~justsomeg@user/justsomeguy)
21:25:48 × jespada quits (~jespada@2800:a4:2242:3400:88a3:e3e2:fe88:541b) (Quit: My Mac has gone to sleep. ZZZzzz…)
21:26:18 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
21:28:24 sprotte24 joins (~sprotte24@p200300d16f0d4a00681b32e76f69c495.dip0.t-ipconnect.de)
21:28:29 ozymandi1s joins (~rox@216.147.127.166)
21:36:09 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
21:38:41 × Patternmaster quits (~georg@user/Patternmaster) (Quit: leaving)
21:38:57 Patternmaster joins (~georg@user/Patternmaster)
21:40:37 × Natch quits (~natch@c-92-34-7-158.bbcust.telenor.se) (Ping timeout: 248 seconds)
21:41:09 alfiee joins (~alfiee@user/alfiee)
21:41:23 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 252 seconds)
21:42:48 Natch joins (~natch@c-92-34-7-158.bbcust.telenor.se)
21:45:25 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
21:49:09 Googulator joins (~Googulato@2a01-036d-0106-4074-d03d-62dd-ebb0-8d32.pool6.digikabel.hu)
21:54:54 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
22:03:24 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 252 seconds)
22:12:29 × malte quits (~malte@mal.tc) (Remote host closed the connection)
22:14:10 malte joins (~malte@mal.tc)
22:17:42 × edwtjo quits (~edwtjo@fsf/member/edwtjo) (Ping timeout: 252 seconds)
22:18:48 × takuan quits (~takuan@d8D86B601.access.telenet.be) (Remote host closed the connection)
22:21:25 × Natch quits (~natch@c-92-34-7-158.bbcust.telenor.se) (Ping timeout: 244 seconds)
22:22:04 visilii joins (~visilii@213.24.126.217)
22:22:08 mervil joins (~mervil@105.101.197.156)
22:22:23 × mervil quits (~mervil@105.101.197.156) (Remote host closed the connection)
22:22:50 ponurv32 joins (~ponurv32@105.101.197.156)
22:24:16 × ponurv32 quits (~ponurv32@105.101.197.156) (Remote host closed the connection)
22:24:54 × visilii_ quits (~visilii@92.50.200.124) (Ping timeout: 260 seconds)
22:25:26 × malte quits (~malte@mal.tc) (Remote host closed the connection)
22:26:10 Natch joins (~natch@c-92-34-7-158.bbcust.telenor.se)
22:27:17 × hgolden quits (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) (Remote host closed the connection)
22:28:12 alfiee joins (~alfiee@user/alfiee)
22:28:26 malte joins (~malte@mal.tc)
22:28:48 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
22:32:39 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
22:35:12 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.6)
22:36:49 × malte quits (~malte@mal.tc) (Remote host closed the connection)
22:36:54 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 265 seconds)
22:38:17 malte joins (~malte@mal.tc)
22:48:58 ljdarj1 joins (~Thunderbi@user/ljdarj)
22:49:23 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
22:52:28 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 245 seconds)
22:52:29 ljdarj1 is now known as ljdarj
22:52:50 eL_Bart0 joins (eL_Bart0@dietunichtguten.org)
22:54:22 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 272 seconds)
22:56:43 × malte quits (~malte@mal.tc) (Remote host closed the connection)
22:58:15 malte joins (~malte@mal.tc)
22:59:07 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
23:01:21 × talisman` quits (~user@2601:644:937c:ed10::ae5) (Quit: ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.4))
23:01:47 talismanick joins (~user@2601:644:937c:ed10::ae5)
23:01:49 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
23:02:00 weary-traveler joins (~user@user/user363627)
23:02:13 user363627 joins (~user@user/user363627)
23:04:01 × _xor quits (~xor@ip-66-42-132-175.dynamic.fuse.net) (Quit: Ping timeout (120 seconds))
23:04:39 _xor joins (~xor@ip-66-42-132-175.dynamic.fuse.net)
23:05:54 × DragonMaus quits (~dragonmau@user/dragonmaus) (Ping timeout: 260 seconds)
23:05:56 DrachenMaus joins (~dragonmau@user/dragonmaus)
23:06:04 × ljdarj quits (~Thunderbi@user/ljdarj) (Quit: ljdarj)
23:06:04 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 244 seconds)
23:06:23 ljdarj joins (~Thunderbi@user/ljdarj)
23:06:29 × weary-traveler quits (~user@user/user363627) (Ping timeout: 248 seconds)
23:15:37 alfiee joins (~alfiee@user/alfiee)
23:17:04 × malte quits (~malte@mal.tc) (Remote host closed the connection)
23:19:48 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
23:21:12 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
23:21:55 malte joins (~malte@mal.tc)
23:22:55 × ljdarj quits (~Thunderbi@user/ljdarj) (Quit: ljdarj)
23:23:14 ljdarj joins (~Thunderbi@user/ljdarj)
23:26:02 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 272 seconds)
23:30:57 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
23:33:58 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
23:34:18 mange joins (~user@user/mange)
23:37:53 × ft quits (~ft@p4fc2a610.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
23:38:06 × sand-witch quits (~m-mzmz6l@vmi833741.contaboserver.net) (Ping timeout: 244 seconds)
23:38:24 sand-witch joins (~m-mzmz6l@vmi833741.contaboserver.net)
23:39:54 ft joins (~ft@p4fc2a610.dip0.t-ipconnect.de)
23:42:47 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:44:28 × Taneb quits (~Taneb@2001:41c8:51:10d:aaaa:0:aaaa:0) (Read error: Connection reset by peer)
23:44:35 Taneb0 joins (~Taneb@2001:41c8:51:10d:aaaa:0:aaaa:0)
23:46:45 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:48:44 atwm joins (~andrew@19-193-28-81.ftth.cust.kwaoo.net)
23:48:56 × ozymandi1s quits (~rox@216.147.127.166) (Remote host closed the connection)
23:49:29 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
23:50:47 × hattckory quits (~hattckory@149.102.242.103) (Remote host closed the connection)
23:50:58 hattckory joins (~hattckory@149.102.242.103)
23:53:44 × atwm quits (~andrew@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 260 seconds)

All times are in UTC on 2025-02-19.