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.