{"@russtopia:matrix.org":"russtopia","@thefox:noxiouslampshade.xyz":"thefox","@eris:chat.unix.lgbt":"eris","@chrispsn:matrix.org":"chrispsn","@a12l:matrix.org":"a12l","@joseph:intrigued.uk":"Joseph","@phantomics:matrix.org":"phantomics","@ltmxyzzy:matrix.org":"ltmxyzzy","@faunl:matrix.org":"Faun","@rajandatta:matrix.org":"Rajan","@mx:noxiouslampshade.xyz":"mx","@vylsaz:matrix.org":"vylsaz","@dcao:matrix.org":"dcao","@tankorsmash:matrix.org":"TankorSmash","@mondra:privacytools.io":"mondra","@razetime:matrix.org":"Razetime","@rubenverg:matrix.org":"Madeline Vergani","@fiuzeri:matrix.org":"fiuzeri","@mlochbaum:matrix.org":"Marshall","@fluentpwn:matrix.org":"fluentpwn","@elementary_watson:matrix.org":"elementary_watson","@semperos:matrix.org":"semperos","@erehtolleh:matrix.org":"erehtolleh","@kap:dhsdevelopments.com":"kap","@phf_:matrix.org":"phf","@loke:dhsdevelopments.com":"loke","@abhicherath:matrix.org":"abhicherath","@mondra:matrix.org":"mondra","@elcar0:matrix.org":"elcar0","@fokoepxg:matrix.org":"Pradeep Verghese","@eris:the-apothecary.club":"eris","@jlambda:matrix.org":"OneDeuxTriSeiGo","@coltim:matrix.org":"coltim","@rampoina:matrix.org":"Rampoina","@garklein:matrix.org":"garklein","@casenc:matrix.org":"casenc","@Kooda:elynx.fr":"Kooda","@wezl_:matrix.org":"Wezl","@sienet_ja_lsd:matrix.org":"laulurastas","@js4545:matrix.org":"js4545","@cruisearray:matrix.org":"cruisearray","@osmanfb4:matrix.org":"osmanfb1","@dzaima:matrix.org":"dzaima","@thinpott:matrix.org":"Tian Ying","@suhr:matrix.org":"suhr","@samireldean:matrix.org":"Samir","@hestheman101:matrix.org":"fritz kuechli","@ovs:matrix.org":"ovs","@mlliarm:matrix.org":"milia","@razetime:coven.palaiologos.rocks":"razetime","@rak1507:matrix.org":"rak1507","@tortus:matrix.org":"Tortus","@plumenator:matrix.org":"plumenator","@tosh22:matrix.org":"tosh","@penguinz_rule:noxiouslampshade.xyz":"penguinz_rule","@jfondren:matrix.org":"jfondren","@albs3001:matrix.org":"albs3001","@oantolin:matrix.org":"oantolin"} {"state_key":"","origin_server_ts":1625584358368,"event_id":"$ChIoiXMNYLUPmIO6EZapM1xHqjPH0Ay3WqF3BcKpdkg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.create","content":{"room_version":"6","creator":"@loke:dhsdevelopments.com"}} {"state_key":"@loke:dhsdevelopments.com","origin_server_ts":1625584358452,"event_id":"$pjrietPnmcsN5tNSvMbv1U8eodqnmw9mcNKuEhGSD8M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.member","content":{"displayname":"loke","membership":"join"}} {"state_key":"","origin_server_ts":1625584358550,"event_id":"$yzLgNpY1R6kMDQGZley7J2-p15mVssR1-zbKFY3xLyM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.power_levels","content":{"events_default":0,"kick":50,"users_default":0,"redact":50,"invite":50,"ban":50,"events":{"m.room.canonical_alias":50,"m.room.name":50,"m.room.server_acl":100,"m.room.tombstone":100,"m.room.avatar":50,"m.room.history_visibility":100,"m.room.power_levels":100,"m.room.encryption":100},"state_default":50,"users":{"@loke:dhsdevelopments.com":100}}} {"state_key":"","origin_server_ts":1625584358630,"event_id":"$_K2kKywm3mZIBREPe6wjl3BHb34T4Y1DyjCoXAEm2xs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.canonical_alias","content":{"alias":"#kap:dhsdevelopments.com"}} {"state_key":"","origin_server_ts":1625584358726,"event_id":"$ETPabD3_jjXvrIJeH5hfg80r9d_BnjBqPbyqo6byvEI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.join_rules","content":{"join_rule":"public"}} {"state_key":"","origin_server_ts":1625584358833,"event_id":"$dFgF5HkA4h5bgRUSmDJGrpvkcJSAgnRCEJPPq_A115A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.history_visibility","content":{"history_visibility":"shared"}} {"state_key":"","origin_server_ts":1625584358930,"event_id":"$RFQ8M5dCy04V9JA9SviuX8LPfSNH8SCnuBk4UVqDx5U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.name","content":{"name":"KAP"}} {"state_key":"","origin_server_ts":1625584359027,"event_id":"$owsXMUZ3fdGd3c76fat_N18aVMk12almVOdyIqEVdXs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.topic","content":{"topic":"KAP language"}} {"state_key":"@kap:dhsdevelopments.com","origin_server_ts":1625584685208,"event_id":"$PxVnBOqyyc9VdhrvIWjnbe5WXstndUbvqA7LN4Qngz0","sender":"@kap:dhsdevelopments.com","user_id":"@kap:dhsdevelopments.com","type":"m.room.member","content":{"displayname":"kap","membership":"join"}} {"origin_server_ts":1625584844012,"event_id":"$ICellT-9dK89iX5kuAk07RLFEpwQTCu4I7bO06pKEgQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Test message","msgtype":"m.text"}} {"origin_server_ts":1625584951898,"event_id":"$Dmhd_t_26AB-3OSiqc5Evz0HdSaJUmwK0D0VEfOZbN8","sender":"@kap:dhsdevelopments.com","user_id":"@kap:dhsdevelopments.com","type":"m.room.message","content":{"body":"Test","msgtype":"m.text"}} {"state_key":"","origin_server_ts":1625641570224,"event_id":"$CmSqab28i3t8HEsjw_G-gDVxc4DFKy4MUyolXNcpb4k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","prev_content":{"topic":"KAP language"},"type":"m.room.topic","content":{"topic":"KAP programming language. https://github.com/lokedhs/array"},"replaces_state":"$owsXMUZ3fdGd3c76fat_N18aVMk12almVOdyIqEVdXs"} {"state_key":"@razetime:matrix.org","origin_server_ts":1625643130340,"event_id":"$beMwPgRV43Yx3ISKjiAz2Eeqa3_N3SC8jK0vfckkLZE","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.member","content":{"avatar_url":null,"displayname":"Razetime","membership":"join"}} {"state_key":"@garrit:matrix.slashdev.space","origin_server_ts":1625643137780,"event_id":"$utVSH3IXEUjDIArOImz-asWV0V5c4S50yMlUptzcg08","sender":"@garrit:matrix.slashdev.space","user_id":"@garrit:matrix.slashdev.space","type":"m.room.member","content":{"avatar_url":"mxc://matrix.slashdev.space/BIJpfJnICdwEMqWNHvMjLguf","displayname":"Garrit","membership":"join"},"age_ts":1625643138197} {"origin_server_ts":1625643138286,"event_id":"$nBLmdCimW7y8cPK_h6NHRHLxZwquXjyWB8lqP1r9JGo","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"hello kap ones","msgtype":"m.text"}} {"origin_server_ts":1625643160514,"event_id":"$UAG2tWeY8-8JnVZSkNMNodq1x5mOS-bV9uZMZGtzEUU","sender":"@garrit:matrix.slashdev.space","user_id":"@garrit:matrix.slashdev.space","type":"m.room.message","content":{"body":"Hi!👋","msgtype":"m.text"}} {"origin_server_ts":1625643181405,"event_id":"$CNuk_hRfGAdEtBu_7Zxzro33DVOWhnkSsujvIBrmxhw","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"came from the array languages matrix group","msgtype":"m.text"}} {"origin_server_ts":1625643204906,"event_id":"$6kVw0ch5G8oagN_QKHXhdBrRyUE6__hjCoMiaXpAVaA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hello.","msgtype":"m.text"}} {"origin_server_ts":1625643232383,"event_id":"$Emv8qr1IU8vow9GV1Kghb_c0rRvfbaBT84WOL6xegc8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I guess this is a channel to join if someone is casually interested in what is being worked on. I'm not expecting much traffic.","msgtype":"m.text"}} {"origin_server_ts":1625643490250,"event_id":"$BuAGZbtAAfY-tL1v_wlWOjKy_HFey6RBMTXrPlyvK7k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I have found a bug in my implementation of dyadic `?`. Turns out that the algorithm I'm using is efficient, but has a biased distribution.","msgtype":"m.text","formatted_body":"I have found a bug in my implementation of dyadic ?<\/code>. Turns out that the algorithm I'm using is efficient, but has a biased distribution."}} {"origin_server_ts":1625643514465,"event_id":"$9NGjDSw5gb-PfFZ57BHDdvEejCzeT6EOggbDZEHcg64","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Razetime: do you have a good algorithm for this?","msgtype":"m.text","formatted_body":"Razetime<\/a>: do you have a good algorithm for this?"}} {"origin_server_ts":1625643530659,"event_id":"$dQ0QoWPCei5LFGqvEJG3hLGhayFDInNMHQVhz6DX6B4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Hello Garrit ","msgtype":"m.text","formatted_body":"Hello Garrit<\/a>"}} {"state_key":"@suhr:matrix.org","origin_server_ts":1625644868800,"event_id":"$eibXyNckVn8VJyma4xVKE2TYTCQ9NR0E1tKvl4Er-o0","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.member","content":{"displayname":"suhr","membership":"join"}} {"state_key":"@Kooda:elynx.fr","origin_server_ts":1625652433372,"event_id":"$CSNJ7cI9qQ1jJWOnhdthJb_JfT2706OSBZ0v4hEPoSk","sender":"@Kooda:elynx.fr","user_id":"@Kooda:elynx.fr","type":"m.room.member","content":{"avatar_url":"mxc://elynx.fr/XGWdKaNhOyzopcHpktBiLzvX","displayname":"Kooda","membership":"join"},"age_ts":1625652434190} {"state_key":"@mlochbaum:matrix.org","origin_server_ts":1625657174577,"event_id":"$HvvDY521Rc3oCC5UTXOB2tq1Istr1sjkO373ABVeUos","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.member","content":{"displayname":"Marshall","membership":"join"}} {"origin_server_ts":1625657619318,"event_id":"$4BrDnYShDA7n0VCylfcIKl2olPqd0YDmhoorAZCXlXs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"08a0804d-3f3b-4fbc-bdc1-2b4d5015d604","body":"For `?`, if `⍺` is a significant portion of `⍵`, you can do a Knuth shuffle, but stop when the first `⍺` swaps have been performed to return those elements. If it's not, then I don't know a particularly good strategy. I guess some form of [reservoir sampling](https://en.wikipedia.org/wiki/Reservoir_sampling) followed by a random shuffle.","msgtype":"m.text","formatted_body":"

For ?<\/code>, if ⍺<\/code> is a significant portion of ⍵<\/code>, you can do a Knuth shuffle, but stop when the first ⍺<\/code> swaps have been performed to return those elements. If it's not, then I don't know a particularly good strategy. I guess some form of reservoir sampling<\/a> followed by a random shuffle.<\/p>"}} {"state_key":"@dzaima:matrix.org","origin_server_ts":1625658122410,"event_id":"$i8aa0d2gzQM56eXXXfHpCc2lNu7E9MeBinLEjQhjvIc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/oNcqjrEhZTRyACebgawKCCKN","displayname":"dzaima","membership":"join"}} {"origin_server_ts":1625662640338,"event_id":"$X0Wn-fbiUjnmVVCxBR2PVaZ0phNYVHzTvLwK18U2MKU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"fun idea: do a knuth shuffle, but shuffle only the first `⍺` items, and keep items after position `⍺` (or just all of them, idk) in a hashmap, so that you don't need to store all of them, getting an `O(⍺×(whatever you believe is the speed of a hashmap))` solution","msgtype":"m.text","formatted_body":"fun idea: do a knuth shuffle, but shuffle only the first ⍺<\/code> items, and keep items after position ⍺<\/code> (or just all of them, idk) in a hashmap, so that you don't need to store all of them, getting an O(⍺×(whatever you believe is the speed of a hashmap))<\/code> solution"}} {"origin_server_ts":1625662814349,"event_id":"$G2YNr1oKexjRq_DWAQ775ItrwDS3j0JAe95YmOzSRls","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"418ba42a-0802-4b65-905d-c8a8cc34db6d","body":"Given `?⍵-⍳⍺`, you can construct `⍺?⍵` with an insertion sort thing. Maintain a separate sorted list (initially empty) and modify the random numbers in place to get the result. For each number, do a binary search to place it in the sorted list, after all equal elements. Add the index to that number in the result, and subtract one from elements in the sorted list that come after it. This keeps the sorted numbers relevant for later insertions, where already-chosen values are considered to not exist. The shift/subtract step is expected linear time, but it vectorizes so this method should be good up to fairly large values of `⍺`.","msgtype":"m.text","formatted_body":"

Given ?⍵-⍳⍺<\/code>, you can construct ⍺?⍵<\/code> with an insertion sort thing. Maintain a separate sorted list (initially empty) and modify the random numbers in place to get the result. For each number, do a binary search to place it in the sorted list, after all equal elements. Add the index to that number in the result, and subtract one from elements in the sorted list that come after it. This keeps the sorted numbers relevant for later insertions, where already-chosen values are considered to not exist. The shift/subtract step is expected linear time, but it vectorizes so this method should be good up to fairly large values of ⍺<\/code>.<\/p>"}} {"origin_server_ts":1625663062041,"event_id":"$lwhBbgWP8jmNBN9Hq_iAKHGngjIst-VyIu8KvFmag14","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"doesn't that require fast arbitrary insertion?","msgtype":"m.text"}} {"origin_server_ts":1625663099837,"event_id":"$CEj4eWsaI9HcyqJB0XWw2miFAzA2llB-ANKth0x0WiI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"689e5512-2039-4604-85db-f603115fa5d8","body":"That's the shift/subtract step.","msgtype":"m.text","formatted_body":"

That's the shift/subtract step.<\/p>"}} {"origin_server_ts":1625663166191,"event_id":"$lxXl9v1_068_MIWZRfp1LnwjSc5H-bM35BZz0Ek0amo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ah, so \"fairly large\" is somewhere around `⍺⍺<k×√⍵<\/code>"}} {"origin_server_ts":1625663367343,"event_id":"$4SkWv2XPVkmGrI0terTyIHhfhGhe8YTMTooiCH3sgy4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"2bc219ee-85ba-4368-8d53-bff33c2e6fc8","body":"The hashmap thing is mostly just better I think, assuming you're only storing elements whose values aren't equal to their index. The sorting strategy saves some memory which isn't worth much. Or you could use a hybrid and store index/value pairs in a structure sorted on indices.","msgtype":"m.text","formatted_body":"

The hashmap thing is mostly just better I think, assuming you're only storing elements whose values aren't equal to their index. The sorting strategy saves some memory which isn't worth much. Or you could use a hybrid and store index/value pairs in a structure sorted on indices.<\/p>"}} {"origin_server_ts":1625663543390,"event_id":"$LzU6bGNc0A8mWkp-eXimvJvtcDf7ick5NE1SRddAlz4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"75724c4d-37cd-40a5-bcb5-2c1eab7ba9aa","body":"So the generation step for output `i` is to make a random number `r` with `i≤rSo the generation step for output i<\/code> is to make a random number r<\/code> with i≤r<n<\/code>. Output hash[r]<\/code> if it exists and r<\/code> if it doesn't. Set hash[r]<\/code> to hash[i]<\/code>, and (optionally) clear hash[i]<\/code>.<\/p>"}} {"origin_server_ts":1625663646639,"event_id":"$wgVWvcEPpniGLaOHO0z_Rkcn57pQpPyXWJNfdC5Z0r8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"319899ca-11c9-4199-958a-63ee80d65db2","body":"Using `i` for `hash[i]` if it doesn't exist, as with `r`.","msgtype":"m.text","formatted_body":"

Using i<\/code> for hash[i]<\/code> if it doesn't exist, as with r<\/code>.<\/p>"}} {"origin_server_ts":1625663685301,"event_id":"$bKWMtVj45VLVAt6G0tnHGkHqRGNAVXH5CW4hlkjbW9k","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"also, if i'm not mistaken, the hashmap doesn't really need to hash, as the keys are already guaranteed random(ish, assuming `⍺` is plenty less than `⍵` to change the distribution)","msgtype":"m.text","formatted_body":"also, if i'm not mistaken, the hashmap doesn't really need to hash, as the keys are already guaranteed random(ish, assuming ⍺<\/code> is plenty less than ⍵<\/code> to change the distribution)"}} {"origin_server_ts":1625663703123,"event_id":"$WxLe-XO3o8QKDU5cZzXAeiK6VZPBEJ_avaXQKrROtQ8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: the problem with the hashmap is that computation time is unbounded.","msgtype":"m.text","formatted_body":"Marshall<\/a>: the problem with the hashmap is that computation time is unbounded."}} {"origin_server_ts":1625663730694,"event_id":"$hzNn_pIy5Z8tvFFZI2G_WQHsUnhrf9KJ-lNB8Y9_ai4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'd like to have a constant time algorithm for a given argument.","msgtype":"m.text"}} {"origin_server_ts":1625663813318,"event_id":"$cLA9xuiuJRKEVQZwwtlQ3zTJmLNbo0PO7XxeFvC62VI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"a hashmap with literally random keys performing badly is not a thing i'd worry about","msgtype":"m.text","formatted_body":"a hashmap with literally random keys performing badly is not a thing i'd worry about"}} {"origin_server_ts":1625663946601,"event_id":"$RpRctx_FHFe8lBKZyssUj0lR2DxN2awPIwQiFdhbHFg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"755cd2af-cb8a-46a4-8692-6ddfd6465b55","body":"Yes, identity hash works. So it's like wrapping the remaining shuffled elements around a list that you unwind.","msgtype":"m.text","formatted_body":"

Yes, identity hash works. So it's like wrapping the remaining shuffled elements around a list that you unwind.<\/p>"}} {"origin_server_ts":1625663966742,"event_id":"$UfJcurScBFFEDxSX2w8fgkvoHCMFA5c2PNMWOALnFo0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"4fa16a4b-abef-4a22-8857-aa08aff00deb","body":"Also easy to keep track of the smallest value in the hash so you know if `hash[i]` will exist without looking.","msgtype":"m.text","formatted_body":"

Also easy to keep track of the smallest value in the hash so you know if hash[i]<\/code> will exist without looking.<\/p>"}} {"origin_server_ts":1625663994347,"event_id":"$viQtcR6vBgfl0UjpEJ-87AonU8eTGcCffPgT2WcAJ_c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm not sure where I found this algorithm. I found it when I did some research and I blindly implemented it. Unfortunately, I noticed the distribution is wrong. The cause is actually quite obvious. https://github.com/lokedhs/array/blob/master/array/src/commonMain/kotlin/array/builtins/array_functions.kt#L761","msgtype":"m.text"}} {"origin_server_ts":1625664019023,"event_id":"$_zboRfw-gOX-RctnrkqBM8lPv-tgrxNxX7I1JSjkZ90","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think that it may be solved by shuffling the result afterwards, but I'm not sure, and I can't prove it.","msgtype":"m.text"}} {"origin_server_ts":1625664052020,"event_id":"$xw6tAO6nG5yHQpullIUI50mDhHYGNd4jOCk3SUNvCTM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: OK, I think I misunderstood what you meant by hashing.","msgtype":"m.text","formatted_body":"Marshall<\/a>: OK, I think I misunderstood what you meant by hashing."}} {"origin_server_ts":1625664072689,"event_id":"$UqLtc-6y2lUDDlde6yfmbRmKYAJFIdywSmlnPFmF3kM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: I thought you meant a hash that keeps the found values, and if it exists, you randomise again.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I thought you meant a hash that keeps the found values, and if it exists, you randomise again."}} {"origin_server_ts":1625664096308,"event_id":"$Ll09-fUTKXM1XGj1jy3UC6vRUeCj8wLROWOTMzs2ueI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"no, this is literally a knuth shuffle but using a map instead of an array","msgtype":"m.text"}} {"origin_server_ts":1625664114830,"event_id":"$YOcH2b8KQ2cVu1TnN8IXTVMJcZWnDKqOtDJbrgDWMOs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Got it. I'll look up that algorithm.","msgtype":"m.text"}} {"origin_server_ts":1625664136520,"event_id":"$1zbsIkAXAfyWVTsom0DLLoCgqA75M1rN_NuyvmZfaiw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"you'd still want a regular knuth shuffle if `⍺` is close to `⍵","msgtype":"m.text","formatted_body":"you'd still want a regular knuth shuffle if ⍺<\/code> is close to `⍵"}} {"origin_server_ts":1625664137683,"event_id":"$8h_31jLHw3OHLynxAii4UXUlokAxP1qeAJVa4nTByZ0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"you'd still want a regular knuth shuffle if `⍺` is close to `⍵`","msgtype":"m.text","formatted_body":"you'd still want a regular knuth shuffle if ⍺<\/code> is close to ⍵<\/code>"},"m.relates_to":{"event_id":"$1zbsIkAXAfyWVTsom0DLLoCgqA75M1rN_NuyvmZfaiw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * you'd still want a regular knuth shuffle if `⍺` is close to `⍵`","msgtype":"m.text","formatted_body":" * you'd still want a regular knuth shuffle if ⍺<\/code> is close to ⍵<\/code>"}} {"origin_server_ts":1625664290662,"event_id":"$A9hPbFuxx_ZRvp-XZc9ikIQllyiJB4YXwgsQUYbA7D0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"bcbc49f2-04d5-4ef3-97c1-8cf1a9dfe634","body":"Wait, you can't track the smallest value in the hash because when you remove it you don't know the next one. That was silly. I was also thinking about a division hash where you put `r` at `⌊r×h÷n` for a hash of size `h`, which does allow you to find the next one easily.","msgtype":"m.text","formatted_body":"

Wait, you can't track the smallest value in the hash because when you remove it you don't know the next one. That was silly. I was also thinking about a division hash where you put r<\/code> at ⌊r×h÷n<\/code> for a hash of size h<\/code>, which does allow you to find the next one easily.<\/p>"}} {"origin_server_ts":1625664494024,"event_id":"$vPijV-y7b1DbGfEeZgO0aCexAviUoLdjxo0qH-LRH8c","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"f8e62ed8-2e3a-4c71-9ff5-b9f655eae948","body":"But also just breaking ties in favor of the lowest value ensures you can find `i` without probing.","msgtype":"m.text","formatted_body":"

But also just breaking ties in favor of the lowest value ensures you can find i<\/code> without probing.<\/p>"}} {"origin_server_ts":1625664663203,"event_id":"$-PlSeKlq0V3-nC8HIiQ6c-Y0BGB37htsx7RstgEV6mk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"an alternative of whatever that is would be to store the first `⍺` items in a regular array out of the hashmap. They're guaranteed to be written, read, and would take up more RAM in the hashmap. Cost of course being some branchiness","msgtype":"m.text","formatted_body":"an alternative of whatever that is would be to store the first ⍺<\/code> items in a regular array out of the hashmap. They're guaranteed to be written, read, and would take up more RAM in the hashmap. Cost of course being some branchiness"}} {"origin_server_ts":1625664776764,"event_id":"$OreE-g01RMu2Y5VtQ_h_VDBT-cdOpSwaCHOYuMwFdx0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"hm, the extra branchiness would only be when `⍺>?⍵`, which should already be not too much","msgtype":"m.text","formatted_body":"hm, the extra branchiness would only be when ⍺>?⍵<\/code>, which should already be not too much"}} {"origin_server_ts":1625664791931,"event_id":"$mJ0wzqIhuugjlbw3h6Gpb4MjrYqIYHOlqDjMclAm_WM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"08fe73ae-e28e-4f03-87f7-f722d258ace2","body":"That's what I've been writing about I think. It's why you clear `hash[i]` after making output `i`.","msgtype":"m.text","formatted_body":"

That's what I've been writing about I think. It's why you clear hash[i]<\/code> after making output i<\/code>.<\/p>"}} {"origin_server_ts":1625664846395,"event_id":"$dn7xX4_tQDYDMw70puyit4hFWCH-WAb8kOFGEg7cO-k","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"oh, keeping in a separate array also means you just have the result right there","msgtype":"m.text"}} {"origin_server_ts":1625664850834,"event_id":"$Kurg2neMDdkAXj5Xe6Gxo0cCBlDiag92whT442LhGqE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"io.github.mirukana.mirage.transaction_id":"80449909-9398-484b-aca0-1055bf079960","body":"Oh, you mean store them that way even before getting to them.","msgtype":"m.text"}} {"origin_server_ts":1625664859625,"event_id":"$EMZsz2sCVfox9SP8UbAb6MXJbqiMPZucR8HTkSgK5EY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"yeah","msgtype":"m.text"}} {"origin_server_ts":1625665107343,"event_id":"$1EBAW3JX3NEev25LeNk0BzivxIY5asekFDLx7uHGGqY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"anything written to them is guaranteed to be read at least once, which would already be branchy on the read, so might as well just move the branchiness to the write instead. So the true cost is the same item `index<⍺` being written to twice, which is negligible","msgtype":"m.text","formatted_body":"anything written to them is guaranteed to be read at least once, which would already be branchy on the read, so might as well just move the branchiness to the write instead. So the true cost is the same item index<⍺<\/code> being written to twice, which is negligible"}} {"origin_server_ts":1625665224905,"event_id":"$YPkGDZfJlGSL0UcFvhljjRLq2CN6eKSEY4SSpDt7zjQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(this is probably too much thought about performance for a `?` implemented in Kotlin, but this is what you get when marshall and dzaima get in a room)","msgtype":"m.text","formatted_body":"(this is probably too much thought about performance for a ?<\/code> implemented in Kotlin, but this is what you get when marshall and dzaima get in a room)"}} {"origin_server_ts":1625665402590,"event_id":"$RGBss-v5tMqNfof30fIq3jvz5Ptm93pwKqNy1gyGNpg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"24de1c7c-abb5-4e36-81b4-49bb689b6556","body":"A detail that might be usable is that the hash has to map keys to values, but as long as every key corresponds to exactly one value the actual mapping doesn't matter. If you generate another random number you could even store keys as a set and values as a list with no connection between them.","msgtype":"m.text","formatted_body":"

A detail that might be usable is that the hash has to map keys to values, but as long as every key corresponds to exactly one value the actual mapping doesn't matter. If you generate another random number you could even store keys as a set and values as a list with no connection between them.<\/p>"}} {"origin_server_ts":1625665426237,"event_id":"$g1fnhojp9wfEuA1XzX4tDsfPTF9LBOSRcoNseyonueA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ouch. I just discovered that my current algorithm can get duplicates too. It's really bad. I need to replace it now :-)","msgtype":"m.text"}} {"origin_server_ts":1625665507737,"event_id":"$agjOAmmvx7aSo1RfLOrBGXsivr_t5kElIDUPk2EyWYY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"it felt like it could create duplicates, but given it's going to be replaced, didn't mention it","msgtype":"m.text"}} {"origin_server_ts":1625665542467,"event_id":"$rHv9ztg4pC2LhIm5v6M6l5HmWdzgNgmqV76INhagDJk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I felt it too, but I actually never saw any. Then I hard-coded the result of random() to 2, and I was able to force one :-)","msgtype":"m.text"}} {"origin_server_ts":1625665550039,"event_id":"$d1lBFIdsNpZpsX-cqvxLcQiRf4ZUmj47yED8fF28i_Q","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"fwiw, [dzaima/APL](https://github.com/dzaima/APL/blob/28b3667beb23c6472266bb2b6eb701708fa421c6/src/APL/types/functions/builtins/fns/RandBuiltin.java#L57-L68) - just shuffles `⍳⍵` and takes first `⍺` items","msgtype":"m.text","formatted_body":"fwiw, dzaima/APL<\/a> - just shuffles ⍳⍵<\/code> and takes first ⍺<\/code> items"}} {"origin_server_ts":1625665569340,"event_id":"$wBbw5vuxTUNJBgMJhTymQ3lHxSPJGmMVzYrSoKmM46A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"That's a problem with `⍵` is huge :-)","msgtype":"m.text","formatted_body":"That's a problem with ⍵<\/code> is huge :-)"}} {"origin_server_ts":1625665574537,"event_id":"$Bd9an9M4Cn7mJtt7_xZB8VnGt_5i--du-nedIBMnF4o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Like 2?1000000","msgtype":"m.text"}} {"origin_server_ts":1625665591973,"event_id":"$RW7EzE5nICG3gmKbOZlsgeZeGFlh0yLD48tlJv4IvWQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"right. it's of course bad for that, but that's what this discussion is about","msgtype":"m.text"}} {"origin_server_ts":1625665597025,"event_id":"$MVWBIiio1Kv2hsg9yEq7w0NiKRjNXezn6T37cY3JY0Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right.","msgtype":"m.text"}} {"origin_server_ts":1625665623964,"event_id":"$81DICSuRYEw6wY0cpl9kowGPfcG-5oKZdIeVl2cxsQs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"10e7f1c0-6f5c-462a-9694-e80715dfc5d1","body":"CBQN should have random ordered and unordered sampling (`rand.Deal` and `rand.Subset`?) so this is maybe not strictly KAP-related.","msgtype":"m.text","formatted_body":"

CBQN should have random ordered and unordered sampling (rand.Deal<\/code> and rand.Subset<\/code>?) so this is maybe not strictly KAP-related.<\/p>"}} {"origin_server_ts":1625665625786,"event_id":"$aIRajD1JU-Y25gtQ0g8n46C5fhq5FJQh92AZzewTFIg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I looked at GNU APL, and it simply stuffs the result in a hash and loops until it finds a value not already in the map.","msgtype":"m.text"}} {"origin_server_ts":1625665638092,"event_id":"$DRVwINOHZjPxAI0zXqjtbmywek1OqDSEd0CZIjq3llQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So something like 9999?10000 is quite inefficient.","msgtype":"m.text"}} {"origin_server_ts":1625665686260,"event_id":"$tMMDDPod-110WOfLETpv8Mn7YnxHj3mjLHA0PWwqGog","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's probably a reasonable impl for `⍺` much less than `⍵`, and with a plain regular knuth for `⍺≈⍵` it should be decent","msgtype":"m.text","formatted_body":"that's probably a reasonable impl for ⍺<\/code> much less than ⍵<\/code>, and with a plain regular knuth for ⍺≈⍵<\/code> it should be decent"}} {"origin_server_ts":1625665717140,"event_id":"$2amHGTS9M1hyqMRE5wzr45t896RGwKAgksG0BvWJrBU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"444646b7-475b-46be-baf4-75d61aa497a0","body":"Dyalog does that for small ratios, and switches to shuffling for large ones. Although I think for backwards compatibility there are some settings where it can't ever shuffle?","msgtype":"m.text","formatted_body":"

Dyalog does that for small ratios, and switches to shuffling for large ones. Although I think for backwards compatibility there are some settings where it can't ever shuffle?<\/p>"}} {"origin_server_ts":1625665726214,"event_id":"$S5p0WPd8_Xn3XihSRZcjncysgTXhhl9_ery0ZR76DE8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(of course, when you're using hashmaps, might as well go with what's discussed here for a guaranteed `O(n×hashmapSpeed)`)","msgtype":"m.text","formatted_body":"(of course, when you're using hashmaps, might as well go with what's discussed here for a guaranteed O(n×hashmapSpeed)<\/code>)"}} {"origin_server_ts":1625665785191,"event_id":"$Th9dGkm4Ex_4MN-KHPEGAYxqmsLj8rUs5Xx6p0N_04w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Sure, that's a reasonable approach. But where do you put the cutoff? Perhaps at the point where the expected number of collisions for the last comparison hits 2.","msgtype":"m.text"}} {"origin_server_ts":1625665817003,"event_id":"$6YJcwxC1AyLjo_ETDa-nBnrgqNmUtA1YS8wcMXZnnj4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"you make pretty graphs of length→performance for both and find the intersection","msgtype":"m.text","formatted_body":"you make pretty graphs of length→performance for both and find the intersection"}} {"origin_server_ts":1625665820427,"event_id":"$BRaIyNXgsBxSXyf4KrlP0JJ3yfgU-_ih1zMPovfrRYE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"da0bcf00-0658-4ad3-a0cc-dfecb871e7df","body":"Depends on how good your hash table is. I'd just measure it.","msgtype":"m.text","formatted_body":"

Depends on how good your hash table is. I'd just measure it.<\/p>"}} {"origin_server_ts":1625665854697,"event_id":"$1Hf0AdvI32-xHR-Z-DiXuP6DA28fRHqh4lCq9PFML7E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: Yes I could.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Yes I could."}} {"origin_server_ts":1625665861719,"event_id":"$10rl3tV_x8N8gevA4qglD8cKUT5uR8JIHieWGe_z6ww","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I mean, I should :-)","msgtype":"m.text"}} {"origin_server_ts":1625666241270,"event_id":"$CK5albB0sAcWlSgs7BXcEhoc1gljsLHwN_x3ygVuu-M","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"i guess i could just go and try to implement this for CBQN. I definitely have better things to do (write the smart JIT compiler) but who wants to do that","msgtype":"m.text","formatted_body":"i guess i could just go and try to implement this for CBQN. I definitely have better things to do (write the smart JIT compiler) but who wants to do that"}} {"origin_server_ts":1625666757148,"event_id":"$NqA9WOyqJY9AbrRImLYU6Cp4U31JoYXhJtqatWv-EvQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, who wants to do useful things :-)","msgtype":"m.text"}} {"origin_server_ts":1625666772681,"event_id":"$48_iicbB5fbfPaD7YQLKKxmBvwi9puVI-duJSkBH9Qg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Please spend time on my issues instead :-)","msgtype":"m.text"}} {"origin_server_ts":1625669810063,"event_id":"$hqv6k0GSLN4Rg3HNzPSZ793fJBi-Fuf9LKvFmvbQ0Lk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[fun](https://dzaima.github.io/paste/#03ZA9SgRxDMX7OUVOMCT/fHf2so17AFnZgRVxFd3FQgQLsbGxEStZEAs9hzeZE3gEo4WdFmJlqpAX3nv8AOBkvL4dLx8ns4NhZ7acg8J4cwXnbw93T7WUMl0cnUFDOOmn673TYbW9XK8WQENclLi72j8c5lvduHkGC6UMN1AS1WYM6t7SlUCR2RolpJsQ109L4ZQwSApqVgu5qLgRBEkLxgYaHBhSkiibS4C4eGITUMVKcAZWp0oyr/QUhKYmUd7w0QADE4JTjRnBWMMrAsorI1vCuHnpsCfhuptHB7/AMZkd/ycYiFiNVL9nQUO@3hN@zheYn4EISu9B6vLHttwneYR37w#BQN) - the hashmap version produces the same exact result, just way faster","msgtype":"m.text","formatted_body":"fun<\/a> - the hashmap version produces the same exact result, just way faster"}} {"origin_server_ts":1625672125197,"event_id":"$_ot7t7bK46pxsGe-pc7Oujs9Wa4sUiG30TrDi_P30YE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"sped up the `20 Deal 1e8` to 250ns by actually using my hashmap correctly and making sure the initial size is a power of 2 (which, surprisingly, doesn't actually break it, but just makes it much much slower as the mask used for indices is just `size-1`)","msgtype":"m.text","formatted_body":"sped up the 20 Deal 1e8<\/code> to 250ns by actually using my hashmap correctly and making sure the initial size is a power of 2 (which, surprisingly, doesn't actually break it, but just makes it much much slower as the mask used for indices is just size-1<\/code>)"}} {"origin_server_ts":1625673004391,"event_id":"$IYsZU5XAT_KstFb19e-9E_vGI956SQSvbxLMIfwO6U0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[timings](https://dzaima.github.io/paste/#05Zg7jl3HEYZzruKAkZQ0urqrq6vWICiRFyCMoREoSKQFPgAChAAGgiDQBOyABBnYiSMrlyBFFGCG3MVdgZfgv6rP656xYQ5AMdEE5Jk7/61@VX3915mm6e7pu7@eHv/j44svLz@5uPPZ1KbTn7@dHuLTknOOX27@@@/P/3nz9PhXf/ghHu7devD5519dxvOti3u3bl98Hc93L@5/8aebp@9fTR9Qfv3i9N3zkj@cHp2ePjk9ffUBXdbTk19ev/hw8ohQvXn5MP6dHnnkeHz9879@fPPSf/3GRY/o0l6/oOw/41tPfsF/f8GUP73/xe3Lz6aH35ye/i300930hwd/vHd5/6M7D@7fwnSW3z@@@PrG6dnT07PH01v93Dg9/2le9TTWPE3rkqd1wdO8XHxhmjK@FztGlKyrh8FTyxRPKXM8QEh5FpbWUukVn5omoeJ/L6mpzsKyCqWl2s3jsCaTEhG7LhHrKuw5kbiwcE5a4yuJyiLkVag8z6iIpMoy5igyC9sirLkkUf@4tpxK9qERWXgWyiqkljr7xyycyDiEotMs7KuQfVe6CzFHsR7C3peIugmxPblNPhtLxkMofZmjrcIm2EdfTNOesukQZlk3PM/CLhjIP5aO2GYhbK0vQlqEiEPV19o7NjzXELKtwjILGdvDcTIqmhqPoVnqIqyLELkg5nPsWpPqWEwrbRHyIix9zgVlzFbHPra8bA@1RciYY/OIVvyMpzG0rhFlEZqlkY@GoUuROeKSZtQXofRUmn9MWaHwVSBi7EMIdRY2nHWtkTNUkB9sIWy2CG0RZk6RjtgxkmQ0hLQs5q1@Ts9euvQ35NS7BtV749QZqK5FqhVV3GlGFY86AAYy7SpnKZ2SNBK9F6Cj0kgiaiurFmWrBVnkf0cFNaS4xpnnDVaLUpqlwgEzrch651pOtelKq0WpmQBAV5bGQGSTUK6jt1VpBAIOXlWTlEvkcBFdebUoqWBJgZ1qzUtyxFxZ2TclKWrbZ8eWG/YplGPmg1irsqJ6s9dN446Yg5ab0jYlGJHMP5eK@tTeQll02/m5hkhAaG6I2bFDyWoPJe2gtSgN@I9dwoIQc1ZuHCyLslRSQLz5OFQB7ukwel2VBWNKCaU1wA7jnsXkLaZhb/xOInwdtENi@TxpA9eibM7K4Aw1cyTVGJ02ci1KU6zd7wCAhi1lDaW0DV2LUq0MJoFd4BgXDqVs7FrYnoH0UrBN2C5LbexS3fbTVmVceZ4hXYuzeNBr3aV3iK/fK7/@O8DenmBeHqhZProtJjsiDIfK7rOqnyceevNKqbg59cgwN1IFqTEgBtNQqHpU3J9HiHnmgR7mWlAM8KkxgbZehrxJURaWqmcvgGTwEzTsWTlizO0Uql4942pH/NyCjcr1yDFIC2rI3JnVZgxOskuN5Agyt1TMgyVcUddhrvJI7HOSQSq5px7uqwAWZpH8w8KcoczvBrCuOsykZJTzqCjJV1gGqWFfAWbMylFpbkFxjVQ5wswdk6/bfaQI@z0SUil8pJl7JiCUApHYjDRbyqZyxJm7JkRtflqaxa@fNiwgHXnmdghXjfi@qsKzxg6fWba2SbFxSfz@NBG/S2j4RTkSzd1Y5RTumDKDbh0iSPt0RJq7J9w7NaRUcbKgoUv5CtMgLZhhDfgW7jCGXANV0xFqfj8rTn6@nxVthPW4n9u1qPaWWPvdcu1/gO0aZBvujBe0cR1Pa/w92hwtcfmjLxPQQMJ5oNYlkuWMbXEDoneoaBlw93NS9zNu4yMrz@AWcWX0K6SFRp66k4/e6YxuziyoYQEEeDPvHzRmLlWOeHMt7CZa2YZeq2KAqMi53TvnW7AQHgWGyqGEXsb5An6vTVY/0yricmtYvX/JMYxy0CteLcAJ1wBaVNQESj26YFhG5iuIcy9AaBkNtSK9O9wwUdTx/izyFhdLDmB1J5e6WeKdB90g51q08TCKOol7YOOI2@0q5WIOBfCCw@sV@yt@GfCwXAfMubZyBQBoUmw7Lh3yu87Wq2bjnGs7jhY5MZkbt@zzrcP0HUDnWoW1bIhjJjQso8O/XyGda01bymi4fcUWhhNI37Dcd1q0mYp0J2hhcXHjtqkMW3xgXdxisO4NuU4VZIz3E25S9QrsXKu4Z6ogfzGC@1d/x8KVrke794O7d8y794m7A/D@D/GuIm/HvF4X5sl4ZxYtad8X2nq6Da1gODgl9JoUzY9bINks3U6t3W18Ry7ga2j@/E0bkmF94VbP1CheZKSzMUvxUcID6loWvFfDrcB5ZDAVFETRx3stWqzpgN9OXTBnVAZDDZyNps3VfcPfTs0Kg9Uh4gwGJAqwJqKyAXCnxm8AH@xfIzeR0au5H9QNgTu1GZgiqAcpbgln86Yr2GyvdpuBPYEZbdozro4eRket7E5nrb3GDWzzl0Mi3dtdCmeqZ63rppZu2AL4597C@o3mube2Q@GqFupgCxA0KWdQvA53NufODMNNXcT7BMDVMJG6tPDCe9u3qXE8mGYxt2gw9cgrb2VlddTUduqeO25cxfjoZhu5mx3qskPiFhtNdAe7uk9QsZm4TqbxnQ2KW@zSMjIPPTQWz2C@lYi9vaDRvZp9lRkbRgXD4OjVvWVbq4Fsr4ZTpXgXR1X8WP1diN/a10VjwPE/#BQN); it's only better for quite big differences between `⍺` (`𝕨` in BQN) and `⍵` (`𝕩`), though my hashmap isn't the best. It also relies on index 0 being in the array, to distinguish empty hashmap entries as 0, which is fun","msgtype":"m.text","formatted_body":"timings<\/a>; it's only better for quite big differences between ⍺<\/code> (𝕨<\/code> in BQN) and ⍵<\/code> (𝕩<\/code>), though my hashmap isn't the best. It also relies on index 0 being in the array, to distinguish empty hashmap entries as 0, which is fun"}} {"origin_server_ts":1625673207753,"event_id":"$b8OS7DzeQ2gicOQTIqvkEO6HpUHdK7qXBpY69tEpJYo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the only O(⍵) part of a regular knuth shuffle is just computing `⍳⍵`, which is doable quite quickly with vectorization. The rest is O(⍺), with a much smaller constant than the hashmap one","msgtype":"m.text","formatted_body":"the only O(⍵) part of a regular knuth shuffle is just computing ⍳⍵<\/code>, which is doable quite quickly with vectorization. The rest is O(⍺), with a much smaller constant than the hashmap one"}} {"origin_server_ts":1625675755407,"event_id":"$vguVPay8kp6C7av81U5QuwllCZznhWNg3T9PlVvRIAw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"632f3421-54aa-4cd1-8a16-af1a41bfa51b","body":"Using ~30x the memory of the final solution at the crossover isn't good though. I wonder if there's some compression method that bridges the gap.","msgtype":"m.text","formatted_body":"

Using ~30x the memory of the final solution at the crossover isn't good though. I wonder if there's some compression method that bridges the gap.<\/p>"}} {"origin_server_ts":1625682867228,"event_id":"$D6u3AZSTDSWMunx1QYt4n0S_Fx4tYtWA-x0On7ySv4o","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"decided to just push `rand.Deal` and `rand.Subset` to CBQN. `Subset` always uses the hashmap method, and dyadic `Deal` is truncated regular knuth shuffle","msgtype":"m.text","formatted_body":"decided to just push rand.Deal<\/code> and rand.Subset<\/code> to CBQN. Subset<\/code> always uses the hashmap method, and dyadic Deal<\/code> is truncated regular knuth shuffle"}} {"origin_server_ts":1625683928719,"event_id":"$GWmbFhh9SQbmV2c-M6W7-dv_q2-6LM-BX9ZVUv6dx6w","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"d7389eba-12c5-4f0e-8bd5-05c20b359db4","body":"The idea of the name `Subset` was that it would return sorted numbers, so that it doesn't have to create an ordering.","msgtype":"m.text","formatted_body":"

The idea of the name Subset<\/code> was that it would return sorted numbers, so that it doesn't have to create an ordering.<\/p>"}} {"origin_server_ts":1625684242945,"event_id":"$f5W1hZSloEdIBChFm2DmePa0OTvswaVMfQt_PXTHIQ4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"oh. without a whole algorithm change, you'd just sort afterwards, no? (you'd also gain the ability to do an inverted deal for `𝕨>𝕩÷2`, which is nice)","msgtype":"m.text","formatted_body":"oh. without a whole algorithm change, you'd just sort afterwards, no? (you'd also gain the ability to do an inverted deal for 𝕨>𝕩÷2<\/code>, which is nice)"}} {"origin_server_ts":1625684377922,"event_id":"$BFqsDWKhTtw1i8m2YQnhHKpnvy1bTR-q1cb1gGpUx7Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: What's the algorithm?","msgtype":"m.text","formatted_body":"dzaima<\/a>: What's the algorithm?"}} {"origin_server_ts":1625684383883,"event_id":"$_yd8lm_DL7FmtcmRAPJ6I9Nj5WZQFxAtrz4iwEFptIw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"io.github.mirukana.mirage.transaction_id":"fb53da79-5ef1-43d7-984e-7f9c3bb9f07f","body":"Yeah, generating and sorting works fine.","msgtype":"m.text"}} {"origin_server_ts":1625684469885,"event_id":"$GkMB9IORnv_zphC919KmyiiKNBnubXYtCSRG9nM9dpI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"loke: the ones discussed here (as two separate things for now) - a truncated knuth, and a hashmap version. Source [here](https://github.com/dzaima/CBQN/blob/cce52dd40e526ebe4f57b365b06680434e2f0cb2/src/builtins/sysfn.c#L256-L318) (if it's at all readable)","msgtype":"m.text","formatted_body":"loke<\/a>: the ones discussed here (as two separate things for now) - a truncated knuth, and a hashmap version. Source here<\/a> (if it's at all readable)"}} {"origin_server_ts":1625684530037,"event_id":"$dymXAdv19QfsraqzT-vz1ttRw9-yOBVKPNRiex222bk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"f57e6242-2f2c-4e02-89c7-4a18f116ab56","body":"I implemented/copied [Vitter's algorithm](https://github.com/mlochbaum/BQN/commit/ab42bf26eaa7cc9bb3a34aefdd09a42c33312114) for sorted generation, but having done that I decided that it's not actually very good at all.","msgtype":"m.text","formatted_body":"

I implemented/copied Vitter's algorithm<\/a> for sorted generation, but having done that I decided that it's not actually very good at all.<\/p>"}} {"origin_server_ts":1625685059482,"event_id":"$d1-7LdOfQ90gQP0BUcH_ga32KYntToIZgnZXLXIHM0s","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"df1e5b06-a06d-49ae-80d5-e3d32a63a3a7","body":"Oh, I was thinking you can probably use a merge sort rather than insertion sort variant to convert `?⍵-⍳⍺` into a random sample. The conversion needs to increase each value by the number of smaller values with a smaller index, then sort. In merge sort, for each merge you know that values on the left *all* have smaller indexes than values on the right, so you can just take index and value into account as you move across the left half of the merge.","msgtype":"m.text","formatted_body":"

Oh, I was thinking you can probably use a merge sort rather than insertion sort variant to convert ?⍵-⍳⍺<\/code> into a random sample. The conversion needs to increase each value by the number of smaller values with a smaller index, then sort. In merge sort, for each merge you know that values on the left all<\/i> have smaller indexes than values on the right, so you can just take index and value into account as you move across the left half of the merge.<\/p>"}} {"origin_server_ts":1625685919369,"event_id":"$hBSIx0qXHl66v9YUNrJFnwN-0kfFP_iwkGoSPfM7jks","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"be2e06af-0164-4220-a5b7-e7ea045a1483","body":"Decent [literature review](https://research.tableau.com/sites/default/files/OptimalSRS.pdf) on sampling (pdf). See section \"In order sampling\". Might be worth tracking down Rust's algorithm for this.","msgtype":"m.text","formatted_body":"

Decent literature review<\/a> on sampling (pdf). See section \"In order sampling\". Might be worth tracking down Rust's algorithm for this.<\/p>"}} {"origin_server_ts":1625688891341,"event_id":"$4NMKBp1xAJ6GRl64bHrhL6rpZaZ6lHCPI9aWDeou3Nk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"771b2651-a4fb-4394-af06-95c68de9037c","body":"[Floyd's algorithm](https://math.stackexchange.com/questions/178690/whats-the-proof-of-correctness-for-robert-floyds-algorithm-for-selecting-a-sin) is the best way to do in-order sampling with a hash set or bitset, looks like.","msgtype":"m.text","formatted_body":"

Floyd's algorithm<\/a> is the best way to do in-order sampling with a hash set or bitset, looks like.<\/p>"}} {"origin_server_ts":1625714701482,"event_id":"$_jnisRdM3TXm9t1iSQfB3t_Tr7qc0LeKagFJGKIixBk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: It's readable. Thanks a lot.","msgtype":"m.text","formatted_body":"dzaima<\/a>: It's readable. Thanks a lot."}} {"origin_server_ts":1625714716521,"event_id":"$nyEBMTq5OzkPPA7POyOrjGEnmO0I3mEKnr7Sut16C3M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: Do you mind if I steal your implementation outright?","msgtype":"m.text","formatted_body":"dzaima<\/a>: Do you mind if I steal your implementation outright?"}} {"origin_server_ts":1625714729966,"event_id":"$cTLqXenwM8h3_8Szuq5BK_LaW-sQH8GcePHsNj_aa-s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"dzaima: Do you mind if I steal your implementation completely?","msgtype":"m.text","formatted_body":"dzaima<\/a>: Do you mind if I steal your implementation completely?"},"m.relates_to":{"event_id":"$nyEBMTq5OzkPPA7POyOrjGEnmO0I3mEKnr7Sut16C3M","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * dzaima: Do you mind if I steal your implementation completely?","msgtype":"m.text","formatted_body":" * dzaima<\/a>: Do you mind if I steal your implementation completely?"}} {"origin_server_ts":1625715086784,"event_id":"$C7rAffAOlYBCS__MAmeYMXC3BAAsvwSTwAda1KVYGr0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"kinda surprised it's apparently readable, but yeah, go ahead (keeping in mind that the hashmap thing is beneficial in only the most extreme cases)","msgtype":"m.text"}} {"origin_server_ts":1625715182941,"event_id":"$E5x3BpmhdrIA25WD7mnmHZPyi6L-OvtwgWjfzKvbLfQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: Where is the choice made to call c1 or c2?","msgtype":"m.text","formatted_body":"dzaima<\/a>: Where is the choice made to call c1 or c2?"}} {"origin_server_ts":1625715338059,"event_id":"$-B2SJaiOau8zgy9g1Wr73UUoVeT3d4iPOpKnPKVV-iU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"c1 and c2 are just monadic and dyadic. But there are two separate dyadic functions defined there (the hashmap and array versions), and no automatic choosing between the two","msgtype":"m.text"}} {"origin_server_ts":1625715454300,"event_id":"$tsvyMv94829cijTMa4L9LAgQiAr0dUuT2IHUbgonc8s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"rand_deal_c2 is the O(𝕩) array version and rand_subset_c2 is the O(𝕨) one","msgtype":"m.text"}} {"origin_server_ts":1625715470298,"event_id":"$ixfbOFFQU23e4tTxiFL8eBt_wafsHp2CuCTxpoQFMUU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"body":"rand_deal_c2 is the O(𝕩) array version and rand_subset_c2 is the O(𝕨) hashmap one","msgtype":"m.text"},"m.relates_to":{"event_id":"$tsvyMv94829cijTMa4L9LAgQiAr0dUuT2IHUbgonc8s","rel_type":"m.replace"},"body":"* rand_deal_c2 is the O(𝕩) array version and rand_subset_c2 is the O(𝕨) hashmap one","msgtype":"m.text"}} {"origin_server_ts":1625715483920,"event_id":"$Foy6QvAHM-uKMDByEQO-PMsX1r70dlYcX_MMZf7rd1M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ah yes. I meant deal_c2 and subset_c2","msgtype":"m.text"}} {"origin_server_ts":1625715523394,"event_id":"$wFptNAU18PyhSoHoKH8ahxFNWfWWT-1uobOJnjE9-Qw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So these versions aren't actually used in BQN at this time?","msgtype":"m.text"}} {"origin_server_ts":1625715656184,"event_id":"$nNKk3asqmA6o5bvaD5p-h44bcK3XvhioNt-RWrQykxU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"they're both available, just the choice is on the user until i actually calculate at which 𝕨 the optimal option changes for all 𝕩","msgtype":"m.text"}} {"origin_server_ts":1625715687883,"event_id":"$Ss_4RAmqUlvDj1GrAE_oBDzXcq2xPSHN1BfcTe00N5A","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"body":"they're both available, just the choice is on the user, until i actually graph/calculate at which 𝕨 the optimal option changes for all 𝕩","msgtype":"m.text"},"m.relates_to":{"event_id":"$nNKk3asqmA6o5bvaD5p-h44bcK3XvhioNt-RWrQykxU","rel_type":"m.replace"},"body":"* they're both available, just the choice is on the user, until i actually graph/calculate at which 𝕨 the optimal option changes for all 𝕩","msgtype":"m.text"}} {"origin_server_ts":1625715773985,"event_id":"$x9zM0ASZOZz60XuqhA27idc21z_NxOyOa0IrBuJ-2-I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"(but that optimal point is gonna be maybe even an order of magnitude different for jvm, so it shouldn't really matter for KAP)","msgtype":"m.text"}} {"origin_server_ts":1625717033171,"event_id":"$5Qt76FV7gOW7nImRb_RiGiThbc_gkJlGPdTvqyf6lFs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Fair enough. I'll implement both and graph.","msgtype":"m.text"}} {"origin_server_ts":1625717317048,"event_id":"$rxouvfdfcq-cOIhCmM98rw6pYTrXOsUgBJ9TBp9b3hE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: I was wondering if the floyd algorithm, followed by a shuffle would be overall better? It has consistent performance regardless of sizes and is O(𝕨)","msgtype":"m.text","formatted_body":"dzaima<\/a>: I was wondering if the floyd algorithm, followed by a shuffle would be overall better? It has consistent performance regardless of sizes and is O(𝕨)"}} {"origin_server_ts":1625734506384,"event_id":"$k_7rLxh8-RiCHuWnenuqFalAvZJn_w5Fq4ILjbN5bZU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: How does `wy2u0k` work? I'm not sure I understand that one.","msgtype":"m.text","formatted_body":"dzaima<\/a>: How does wy2u0k<\/code> work? I'm not sure I understand that one."}} {"origin_server_ts":1625738734723,"event_id":"$E6NvIBK-fsJ3qdB7dsfy1Wo-_2VD79oT0uMl3qDzZBs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`wy2u0k(wyrand(...),n)` is just a random integer up to but not including `n`","msgtype":"m.text","formatted_body":"wy2u0k(wyrand(...),n)<\/code> is just a random integer up to but not including n<\/code>"}} {"origin_server_ts":1625741548260,"event_id":"$-OW5m63eN8dWhn6lGdfL19Np5y36pblu5fbvsooD8UU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Great thanks :-)","msgtype":"m.text"}} {"origin_server_ts":1625742358880,"event_id":"$_Nw5o1pBAnr-7cHl5NAw211Cf0HZOPetqEpXp1CNQSw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: In translating your code to Kotlin, I found a weirdness that's either me misunderstanding your code, or it's a bug.","msgtype":"m.text","formatted_body":"dzaima<\/a>: In translating your code to Kotlin, I found a weirdness that's either me misunderstanding your code, or it's a bug."}} {"origin_server_ts":1625742397921,"event_id":"$q3tA6RGRdyYXJQZ0A8FZPE2N8nKS764EmqlV04BaA3w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's in subset_c2","msgtype":"m.text"}} {"origin_server_ts":1625742409294,"event_id":"$aNFwtouH5_mH-B7eK0fAv73bqmvJ3seHZ2itbwHgAnA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"This line: `i32 j = wy2u0k(wyrand(&seed), xi-i) + i;`","msgtype":"m.text","formatted_body":"This line: i32 j = wy2u0k(wyrand(&seed), xi-i) + i;<\/code>"}} {"origin_server_ts":1625742429425,"event_id":"$vTd9S8d8_zubV-pMnoeYJfQaJfqeo2zwa2bL8XU2VN4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`xi` and `i` are 64-bit entities, and `j` is 32-bit. That could be an overflow","msgtype":"m.text","formatted_body":"xi<\/code> and i<\/code> are 64-bit entities, and j<\/code> is 32-bit. That could be an overflow"}} {"origin_server_ts":1625742431384,"event_id":"$4QxqkDgpmeBoD3Fi7vRAAkv7r0rpMDeMiIEz2jbaGyI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"`xi` and `i` are 64-bit entities, and `j` is 32-bit. That could be an overflow.","msgtype":"m.text","formatted_body":"xi<\/code> and i<\/code> are 64-bit entities, and j<\/code> is 32-bit. That could be an overflow."},"m.relates_to":{"event_id":"$vTd9S8d8_zubV-pMnoeYJfQaJfqeo2zwa2bL8XU2VN4","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * `xi` and `i` are 64-bit entities, and `j` is 32-bit. That could be an overflow.","msgtype":"m.text","formatted_body":" * xi<\/code> and i<\/code> are 64-bit entities, and j<\/code> is 32-bit. That could be an overflow."}} {"origin_server_ts":1625742462275,"event_id":"$0qpC_OP5pdtzvJifZXFYKHAPn84PhdjKowa8Z8z3tjQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In addition to this:","msgtype":"m.text"}} {"origin_server_ts":1625742501751,"event_id":"$UlOQvtjsVZez4ZH6acNKkLJaHz5zoKnkSJ_OEQxesC4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`xi` and `wi` are 32-bit. The loop counter is 64-bit just out of habit i guess","msgtype":"m.text","formatted_body":"xi<\/code> and wi<\/code> are 32-bit. The loop counter is 64-bit just out of habit i guess"}} {"origin_server_ts":1625742808226,"event_id":"$Fx63WrfEletcuP0ZfFXlm0MPNGGsn1346SjKdIIhRqY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: OK, thanks.","msgtype":"m.text","formatted_body":"dzaima<\/a>: OK, thanks."}} {"origin_server_ts":1625742832690,"event_id":"$tYVnHqg32OA5G_6gsNbjCZG68uK9E0UDsg-T6hQCa_o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"What is `swap_i2i`? I can't find a definition.","msgtype":"m.text","formatted_body":"What is swap_i2i<\/code>? I can't find a definition."}} {"origin_server_ts":1625742933051,"event_id":"$d4NZ5-W1mgCiG8td9n24DCj736nmPGAG23FKYH9ltNQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it's defined [here](https://github.com/dzaima/CBQN/blob/cce52dd40e526ebe4f57b365b06680434e2f0cb2/src/utils/hashmapTemplate.h#L140-L147). It's like `Integer r = map.put(k, v); if (r==null) r = def;`","msgtype":"m.text","formatted_body":"it's defined here<\/a>. It's like Integer r = map.put(k, v); if (r==null) r = def;<\/code>"}} {"origin_server_ts":1625743076919,"event_id":"$wqChstYkaG46w_usPFRCUlFbQ_mRplO7s6AluYjlsOk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"weird and unfindable because no generics in C","msgtype":"m.text"}} {"origin_server_ts":1625743080405,"event_id":"$aHHERgbquTZ0kjqwF1zGE47HyhFdgTA5ugksDxn9pao","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So in Kotlin that would be: `rp[i] = (map[j] ?: j).also { map[j] = rp[i] }`","msgtype":"m.text","formatted_body":"So in Kotlin that would be: rp[i] = (map[j] ?: j).also { map[j] = rp[i] }<\/code>"}} {"origin_server_ts":1625743108976,"event_id":"$QL3wNo9_altIV6QgmZ8u7zhNwzB-ayscnGJz6VfwJMI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"seems correct","msgtype":"m.text","formatted_body":"seems correct"}} {"origin_server_ts":1625743217098,"event_id":"$lvuCN3p2jJXOnjzzXiHj5YmSYaqNqYZUz-qJReQf7Bw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$d4NZ5-W1mgCiG8td9n24DCj736nmPGAG23FKYH9ltNQ"}},"format":"org.matrix.custom.html","body":"(fwiw, my local hacked-together `clangd` for CBQN actually follows to that definition location on ctrl+b on the `swap_i2i`, which makes me happy)","msgtype":"m.text","formatted_body":"(fwiw, my local hacked-together clangd<\/code> for CBQN actually follows to that definition location on ctrl+b on the swap_i2i<\/code>, which makes me happy)"}} {"origin_server_ts":1625743316182,"event_id":"$IuWAVyhaTwr-rx9ICXU2NzMoC03GpakokkoXr8S3Nq4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"What's the timing in CBQN?\n```\n time:measureTime { +/100000000?100000000 }\nTotal time: 3.646\n\n4999999950000000\n```","msgtype":"m.text","formatted_body":"

What's the timing in CBQN?<\/p>\n

    time:measureTime { +/100000000?100000000 }\nTotal time: 3.646\n\n4999999950000000\n<\/code><\/pre>\n"}}
{"origin_server_ts":1625743427358,"event_id":"$5UWYcrBfqSgcM0GmrVRY4UZ2OVjR3CTAw_U-srRvgGw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`r←\u2022MakeRand 0 ⋄ [number of times to repeat] {𝕤 ⋄ +´r.Deal 1ewhatever}\u2022_timed @`","msgtype":"m.text","formatted_body":"r←\u2022MakeRand 0 ⋄ [number of times to repeat] {𝕤 ⋄ +´r.Deal 1ewhatever}\u2022_timed @<\/code>"}}
{"origin_server_ts":1625743532639,"event_id":"$z-8z4O-CYfz_SxDbr4iHxPPXvEdqI0GCcl38pkGmP_k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So this?\n```\nr←\u2022MakeRand 0 ⋄ 1 {𝕤 ⋄ +´r.Deal 100000000}\u2022_timed @\n```","msgtype":"m.text","formatted_body":"

So this?<\/p>\n

r←\u2022MakeRand 0 ⋄ 1 {𝕤 ⋄ +´r.Deal 100000000}\u2022_timed @\n<\/code><\/pre>\n"}}
{"origin_server_ts":1625743553234,"event_id":"$ygQLrQNE9xHIFkskOzMAr-fr9V4zSNQiORLEyZE_vwA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah (the `1` can be omitted for one iteration fwiw)","msgtype":"m.text","formatted_body":"yeah (the 1<\/code> can be omitted for one iteration fwiw)"}}
{"origin_server_ts":1625743614496,"event_id":"$6rncXrtTso7E0uq8qJJcltW9KRjKdP-Nxtk7acy3yRo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"if you want the result printed, i guess you can add `\u2022Show` before `+´`","msgtype":"m.text","formatted_body":"if you want the result printed, i guess you can add \u2022Show<\/code> before +´<\/code>"}}
{"origin_server_ts":1625743662415,"event_id":"$tbZv4kohB7RtpJUKS_u1P0N-8Cgypas_Kl28_XXt_uo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Isn't backquote like APL `\\`?","msgtype":"m.text","formatted_body":"Isn't backquote like APL \\<\/code>?"}}
{"origin_server_ts":1625743685971,"event_id":"$aKNpGU9Yo0JA6JA3ZYBv0p4zX-41TA0Kl5fFwMYvQTw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's a forward-quote","msgtype":"m.text","formatted_body":"that's a forward-quote"}}
{"origin_server_ts":1625743689984,"event_id":"$HRaS6hfrfMqTujbKs9DMFcuHh6-GlflXte2FN3bP748","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ah yes. Sory.","msgtype":"m.text"}}
{"origin_server_ts":1625743699666,"event_id":"$Ljo5KowEEeiCnyS-uvC1TC7hGuhzn-SUZx62MBRdECE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`` `´`´`´`´`´ ``","msgtype":"m.text","formatted_body":"`´`´`´`´`´<\/code>"}}
{"origin_server_ts":1625743732370,"event_id":"$5FS4sZC8V4uRXTOXgd3TaiTJ4KUMpV6jBHXGFRv-R7Q","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"`` `´`´`´`´`´ `` (idk i just felt like posting this)","msgtype":"m.text","formatted_body":"`´`´`´`´`´<\/code> (idk i just felt like posting this)"},"m.relates_to":{"event_id":"$Ljo5KowEEeiCnyS-uvC1TC7hGuhzn-SUZx62MBRdECE","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* `` `´`´`´`´`´ `` (idk i just felt like posting this)","msgtype":"m.text","formatted_body":"* `´`´`´`´`´<\/code> (idk i just felt like posting this)"}}
{"origin_server_ts":1625743810745,"event_id":"$-3xp87CPWQ9jYDcdU2ndf47ahF3vCgOEZ19PZnpcAkE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Wait, there are no 64-bit integers in BQN?","msgtype":"m.text"}}
{"origin_server_ts":1625743815029,"event_id":"$_9LlZiuAi-zr6PnvBnCm44B-4skXAxu5amOn_PB7OAs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"nope","msgtype":"m.text","formatted_body":"nope"}}
{"origin_server_ts":1625743820417,"event_id":"$J3lzo_FuDUluf4rTJLyLxjMMVSs4q0nfehC31QpIN1Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I see.","msgtype":"m.text"}}
{"origin_server_ts":1625743843149,"event_id":"$9tGEpv-KCv8QIixgSqbZ3erV1qst1PcROhS04FxKkQs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"everything has to at least act precisely like 64-bit floats, which means that 64-bit ints just don't work","msgtype":"m.text","formatted_body":"everything has to at least act precisely like 64-bit floats, which means that 64-bit ints just don't work"}}
{"origin_server_ts":1625743871469,"event_id":"$nYnjL7G-vQWDE1J5jiQa1J36-L0VG1OPfMvuKCj3kiM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Anyway, the fastest run was 1.534956318 seconds.","msgtype":"m.text"}}
{"origin_server_ts":1625744104356,"event_id":"$7G5NCl8fMuhPfWIA_GJyEkUBAvZZN4A1-Wrb8FRBaAs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In BQN","msgtype":"m.text"}}
{"origin_server_ts":1625744135942,"event_id":"$kIenI1vUDQd_HboFTPjqKZtjKtgB0Gy4Qb-xGoDH-PE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So CBQN is more than twice as fast as KAP in this case.","msgtype":"m.text"}}
{"origin_server_ts":1625744232820,"event_id":"$fsjeWZus8of_Q-PzcoheDJqLjh-aGnSD9e-70fRZHeE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://github.com/lokedhs/array/commit/82224b02a4041eaaec1524d3c35d2233f5de246d","msgtype":"m.text"}}
{"origin_server_ts":1625744475634,"event_id":"$xfrF2niWjNJn8t8070DFbd_PxufH7eU5eEx_5y4thTw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"wait, you were timing `r.Deal` against your subset impl?","msgtype":"m.text","formatted_body":"wait, you were timing r.Deal<\/code> against your subset impl?"}}
{"origin_server_ts":1625744505626,"event_id":"$SQCk4M37yz7M7mmohxAEti9IfdO3YCLFNMEnXwCOEr8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"oh, you're not reserving `⍺` items in the map, so the two become pretty much just equal","msgtype":"m.text","formatted_body":"oh, you're not reserving ⍺<\/code> items in the map, so the two become pretty much just equal"}}
{"origin_server_ts":1625744548953,"event_id":"$0UV2g_A4fVtqoZY7DXUhhejsgb4g1tNj8BXUltY7HHs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"oh, you're not reserving `⍺` items in the map, so the two become pretty much just equal when `⍺=⍵`","msgtype":"m.text","formatted_body":"oh, you're not reserving ⍺<\/code> items in the map, so the two become pretty much just equal when ⍺=⍵<\/code>"},"m.relates_to":{"event_id":"$SQCk4M37yz7M7mmohxAEti9IfdO3YCLFNMEnXwCOEr8","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* oh, you're not reserving `⍺` items in the map, so the two become pretty much just equal when `⍺=⍵`","msgtype":"m.text","formatted_body":"* oh, you're not reserving ⍺<\/code> items in the map, so the two become pretty much just equal when ⍺=⍵<\/code>"}}
{"origin_server_ts":1625744558676,"event_id":"$HNxMlApzI7RM6ukf2ztodwGFdMYBx5jj66WuO_-0mpE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah.","msgtype":"m.text"}}
{"origin_server_ts":1625744572822,"event_id":"$kaUWIFFQGrSKWBrhwwchtYp_0z5yQwrd3DoYwRUXz10","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Is there a reason I should reserve items in the map?","msgtype":"m.text"}}
{"origin_server_ts":1625744611436,"event_id":"$dO-AQ8WLopf_6vITT0EO_i35TmqtI_WpKZ_Z2hVqPUc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"when `⍺<<⍵`, the map is gonna have pretty much precisely `⍺` items, so it'd save some moving","msgtype":"m.text","formatted_body":"when ⍺<<⍵<\/code>, the map is gonna have pretty much precisely ⍺<\/code> items, so it'd save some moving"}}
{"origin_server_ts":1625744627423,"event_id":"$5znJ5LbpOQ7Odk5Khwr8byyyCwakmuHc034pzxO2Fg8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think what happens here is that I'm effectively comparing the C implementation of the map vs the JVM version.","msgtype":"m.text"}}
{"origin_server_ts":1625744664437,"event_id":"$ghcK3np6xwIZGBxJeE1lH9Sq8EZYG9up88Vxa20ttH8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"5e9207ad-3f13-434c-8217-a3d570182cda","body":"`Deal` isn't using a map at all, it's just overallocating.","msgtype":"m.text","formatted_body":"

Deal<\/code> isn't using a map at all, it's just overallocating.<\/p>"}} {"origin_server_ts":1625744684306,"event_id":"$twhmWbKWPoTURqNVmX7Po8Or0CGnAdCZ78oeIt89ho8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"ca53cb77-3a16-43f6-badf-3e67adb512e6","body":"Currently the version with a map is called `Subset`.","msgtype":"m.text","formatted_body":"

Currently the version with a map is called Subset<\/code>.<\/p>"}} {"origin_server_ts":1625744720275,"event_id":"$wVQqcvRxllf1aChnB_a1S7GfexlWJVuWNfF8Kks178I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh, doesn't that create an enormous array if `𝕩` is huge?","msgtype":"m.text","formatted_body":"Oh, doesn't that create an enormous array if 𝕩<\/code> is huge?"}} {"origin_server_ts":1625744755189,"event_id":"$p8ytzV6BWr94MMykyc4QxUajmEZBmt2-WbWtzPeCqp0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`r.Deal` is the version that creates an `𝕩`-item array. `r.Subset` is the version that creates a `𝕨`-item hashmap","msgtype":"m.text","formatted_body":"r.Deal<\/code> is the version that creates an 𝕩<\/code>-item array. r.Subset<\/code> is the version that creates a 𝕨<\/code>-item hashmap"}} {"origin_server_ts":1625744755663,"event_id":"$D6o5C34-0PPf6Z300kdF8pg1yrba11l8WyUipyHg8QU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"io.github.mirukana.mirage.transaction_id":"70de8825-c890-4d9d-9803-1710a3679892","body":"Yes, I think it needs to switch over automatically.","msgtype":"m.text"}} {"origin_server_ts":1625744788906,"event_id":"$-rcf9w740FZAkv6xlZEnFBfg6pfzyIejNWeaY7_PhuQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"c7730721-39af-4ee5-9b0a-05d10d6ed0a5","body":"I get a crash when calling `Subset` with `1e8` for both arguments.","msgtype":"m.text","formatted_body":"

I get a crash when calling Subset<\/code> with 1e8<\/code> for both arguments.<\/p>"}} {"origin_server_ts":1625745034375,"event_id":"$claJJGqa4t5jpVyZs2AcolQDyyA63_3DitbOwxq-HrI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$-rcf9w740FZAkv6xlZEnFBfg6pfzyIejNWeaY7_PhuQ"}},"format":"org.matrix.custom.html","body":"it's trying to pre-allocate the 4GB hashmap while `4==sizeof(usz)`","msgtype":"m.text","formatted_body":"it's trying to pre-allocate the 4GB hashmap while 4==sizeof(usz)<\/code>"}} {"origin_server_ts":1625745074076,"event_id":"$AoJq8qUjIHhp4H8BbcfVPtoGz-XBbLvqD_BgLE74dd4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"41b63a44-f41e-454c-9042-c91fc0de3be3","body":"In general the expected size of the map should be `𝕨×1-𝕨÷𝕩`, `𝕨` is only an approximation.","msgtype":"m.text","formatted_body":"

In general the expected size of the map should be 𝕨×1-𝕨÷𝕩<\/code>, 𝕨<\/code> is only an approximation.<\/p>"}} {"origin_server_ts":1625745118126,"event_id":"$hUafDyfGpwkxaSiY331gFUNVjGbdo2ELk5Yi5YAjxw8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"well, the idea was that it'd only be called for `𝕨` decently less than `𝕩`. But for these kind of tests you would want the full expected size","msgtype":"m.text","formatted_body":"well, the idea was that it'd only be called for 𝕨<\/code> decently less than 𝕩<\/code>. But for these kind of tests you would want the full expected size"}} {"origin_server_ts":1625745270005,"event_id":"$5EX1IIv9wUdXYzRE92pom9ooG-WO7OjBqmZDbBkWg4Q","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(also there's a stray `sz*= 2;` left in `src/builtins/sysfn.c` line 303 from testing. it helped for 𝕨<512 or something, but was worse for 513\u2026600 from what i tested)","msgtype":"m.text","formatted_body":"(also there's a stray sz*= 2;<\/code> left in src/builtins/sysfn.c<\/code> line 303 from testing. it helped for 𝕨<512 or something, but was worse for 513\u2026600 from what i tested)"}} {"origin_server_ts":1625751182278,"event_id":"$3QykJDUHgGmn3uKosAZi_uPmNPwuQpAUDAVceNhj1hY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think the first while-loop is superfluous.","msgtype":"m.text"}} {"origin_server_ts":1625751194962,"event_id":"$HKnDIWJsysnlX3Fyr8LmkmzHWpG0XypMOqp_letWrNQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Why not compute the correct value outright?","msgtype":"m.text"}} {"origin_server_ts":1625751271887,"event_id":"$IxOaukmPLXnXHeHAAWoT5ClsrskLYtkWLYPdlMUf07k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"You want `sz` to be smallest power-of-2 that is larger or equal to `b*2`?","msgtype":"m.text","formatted_body":"You want sz<\/code> to be smallest power-of-2 that is larger or equal to b*2<\/code>?"}} {"origin_server_ts":1625751287109,"event_id":"$WMkASli-MEaOB5I0iwHfY-_32AqKoqQOHgSXSPkC5pM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah. I was too lazy to use `__builtin_clzl` ","msgtype":"m.text","formatted_body":"yeah. I was too lazy to use __builtin_clzl<\/code> "}} {"origin_server_ts":1625751302108,"event_id":"$USZ57JRp07oxkyRJfOruoN_a3m-YhFoXnQnwfS_n3CU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"cefbf0d2-9c2a-4792-8941-f4ebafe56429","body":"dzaima I poked at the subset hashing some. Got a small improvement by disabling the resizing check; otherwise nothing seemed to do much. Manually inlining everything to remove `&had` gets like 10%.","msgtype":"m.text","formatted_body":"

dzaima<\/a> I poked at the subset hashing some. Got a small improvement by disabling the resizing check; otherwise nothing seemed to do much. Manually inlining everything to remove &had<\/code> gets like 10%.<\/p>"}} {"origin_server_ts":1625751352744,"event_id":"$3c5OfKW4_rR-07Ldx_kCzJFVMa9VJ0XGR-F_ZO0v6U0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"In my case, I don't even need sz. I'm letting `HashMap` deal with expansion by itself.","msgtype":"m.text","formatted_body":"In my case, I don't even need sz. I'm letting HashMap<\/code> deal with expansion by itself."}} {"origin_server_ts":1625751355191,"event_id":"$hMwWA-LlNDkK1fQGWRDYQDEKZPjQCCsyY5F_z83pYg8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"huh. I had hoped that compiled would perfectly handle those temp references, since that's the only sane way to return multiple things. Had thought about removing doubling check too, but didn't bother","msgtype":"m.text","formatted_body":"huh. I had hoped that compiled would perfectly handle those temp references, since that's the only sane way to return multiple things. Had thought about removing doubling check too, but didn't bother"}} {"origin_server_ts":1625751386211,"event_id":"$dAv6G3JwcX5abGLqru3kvz2n-7OiLmNZY5PGWHPzMQI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$3c5OfKW4_rR-07Ldx_kCzJFVMa9VJ0XGR-F_ZO0v6U0"}},"format":"org.matrix.custom.html","body":"my hashmap expands automatically too, but it's still slower to let it expand","msgtype":"m.text","formatted_body":"my hashmap expands automatically too, but it's still slower to let it expand"}} {"origin_server_ts":1625751450823,"event_id":"$fPSCw_r-9ebo07bw9p-2mdijbI0xOC0MQo8s3d5LEfw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"dd46708f-cb19-4980-89dc-d3a5dbcf33f1","body":"I think instead of `if (RARE(p++==mask)) p = 0;` it's cleaner to apply `mask` at the beginning of every iteration so you can initialize with `u64 p = h1;` and increment `p++` normally. If there's a difference in performance it would hardly be measurable though.","msgtype":"m.text","formatted_body":"

I think instead of if (RARE(p++==mask)) p = 0;<\/code> it's cleaner to apply mask<\/code> at the beginning of every iteration so you can initialize with u64 p = h1;<\/code> and increment p++<\/code> normally. If there's a difference in performance it would hardly be measurable though.<\/p>"}} {"origin_server_ts":1625751481660,"event_id":"$7_1RIFW6QJuKRkQ6Q4QOJxijh649zMmFJogK6h-eTt8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"2bef27c0-3b28-480b-aa54-cf4823174748","body":"That's in `find`.","msgtype":"m.text","formatted_body":"

That's in find<\/code>.<\/p>"}} {"origin_server_ts":1625751521315,"event_id":"$e_XCzitbg3YQe2BWN7mMcNQZlZSRffKdm5eJaqtaLbI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"2c75832d-31a6-4281-b28a-b3750eecc4a0","body":"Also `qins`.","msgtype":"m.text","formatted_body":"

Also qins<\/code>.<\/p>"}} {"origin_server_ts":1625751551496,"event_id":"$zKM1oyehrV3Ne03sll8BxE014RZwhdnDnzTMHs6XKis","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah, i guess and `and` is cheaper than an unconditional branch","msgtype":"m.text","formatted_body":"yeah, i guess and and<\/code> is cheaper than an unconditional branch"}} {"origin_server_ts":1625751569318,"event_id":"$0Llb1VEpHJ250vdiWm_aGXUB5FI1wt0HtXCx-igmwWg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"yeah, i guess an `and` is cheaper than an unconditional branch","msgtype":"m.text","formatted_body":"yeah, i guess an and<\/code> is cheaper than an unconditional branch"},"m.relates_to":{"event_id":"$zKM1oyehrV3Ne03sll8BxE014RZwhdnDnzTMHs6XKis","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* yeah, i guess an `and` is cheaper than an unconditional branch","msgtype":"m.text","formatted_body":"* yeah, i guess an and<\/code> is cheaper than an unconditional branch"}} {"origin_server_ts":1625751613692,"event_id":"$bDA-miOzKOtcaSZ5HP2-hFiC_2yassXE8ZtleGhJngo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(note that i've done precisely zero performance testing for the hashmap thing)","msgtype":"m.text","formatted_body":"(note that i've done precisely zero performance testing for the hashmap thing)"}} {"origin_server_ts":1625751642018,"event_id":"$qbo0icP3860dVw1zEqKL8Mau_wV5NKue_1h1Mb5DHPM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: Oh no. I was so happy that KAP was within an order of magnitude of CBQN performance :-)","msgtype":"m.text","formatted_body":"dzaima<\/a>: Oh no. I was so happy that KAP was within an order of magnitude of CBQN performance :-)"}} {"origin_server_ts":1625751668633,"event_id":"$Sd9jSwqWQKLuZhMDmNYDN8SXjCVa_BrVMJEYmSEVYWo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":":D","msgtype":"m.text","formatted_body":":D"}} {"origin_server_ts":1625751728134,"event_id":"$fgTDdSP26XZTMKsc3LBwc_a4RIcrsXrSIKromD-z-6o","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(and also i for whatever reason went for optional key storing, instead of optional _hash_ storing. Doesn't really change much for existing stuff, but makes things more annoying to do)","msgtype":"m.text","formatted_body":"(and also i for whatever reason went for optional key storing, instead of optional hash<\/i> storing. Doesn't really change much for existing stuff, but makes things more annoying to do)"}} {"origin_server_ts":1625751745688,"event_id":"$mCOycLFPwFw3XsLwBBUDMcyD7Yp5jncx9UxP5HM-mOI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I wonder if a lot of the lost performance is due to the fact that the hashmap has to box both the key and the value.","msgtype":"m.text"}} {"origin_server_ts":1625751765126,"event_id":"$TLvs5_DdLsK0ZVNCKousrZAKb0wkdhZWObGRWzrz9vU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If I had a Long→Long map, that could be eliminated.","msgtype":"m.text"}} {"origin_server_ts":1625751831151,"event_id":"$7DGUH9QYwnuY7hZx6Svn7WdxWzaIVrUllJzMwsp1JB4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Java's regular `java.util.HashMap` probably takes something like ~96 bytes/entry. Mine takes 8.","msgtype":"m.text","formatted_body":"Java's regular java.util.HashMap<\/code> probably takes something like ~96 bytes/entry. Mine takes 8."}} {"origin_server_ts":1625751853259,"event_id":"$bCTGuDK-XjqrEbbPV5veqJoBELiQ6rUKh6OJzPzaP7s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(assuming `Integer`s over 256, or whatever is cached)","msgtype":"m.text","formatted_body":"(assuming Integer<\/code>s over 256, or whatever is cached)"}} {"origin_server_ts":1625751871621,"event_id":"$8VaMtrWdCJD3tfwlQQWd4MQvKXHMgFENHq0n2Ol2Jrk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right. That's a lot more data copying.","msgtype":"m.text"}} {"origin_server_ts":1625751953779,"event_id":"$HYy9DME7wImEnoWuUgm3yq2j6FIxpPnVXzkPTY0CBI8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and like 3 heap allocations for a new row. Did you compare some cases other than `?⍨`?","msgtype":"m.text","formatted_body":"and like 3 heap allocations for a new row. Did you compare some cases other than ?⍨<\/code>?"}} {"origin_server_ts":1625751999650,"event_id":"$WduD-ywH1ShpzuBjgKafX0mhOoDxfcB47aGKFRnVggo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: Well, heap allocations are incredibly efficient so I think that's a minor part (heap allocations with a compacting GC reduces to a single add instruction)","msgtype":"m.text","formatted_body":"dzaima<\/a>: Well, heap allocations are incredibly efficient so I think that's a minor part (heap allocations with a compacting GC reduces to a single add instruction)"}} {"origin_server_ts":1625752016204,"event_id":"$yRLG0JUubSr8Zv63i4KqfaKXfs3rFTL9fJ-vAITh3jM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But it's the management of that extra object that takes time.","msgtype":"m.text"}} {"origin_server_ts":1625752044636,"event_id":"$X55uI7Snwq_YYgnIzn21sbPR2gXHIvoF85NEKBEipNQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"right. Java is amazing at what it does (but the GC would still have to collect all those objects, and that's not completely free)","msgtype":"m.text","formatted_body":"right. Java is amazing at what it does (but the GC would still have to collect all those objects, and that's not completely free)"}} {"origin_server_ts":1625752102501,"event_id":"$Z-udOXpWYvM_gjU2tVeDAFe6wKm5UamfdjvuSOaBm_Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah. I'm assuming that they are dropped quickly because they have dynamic scope for that function. But if the map is too big the object may spill over into the long-lived heap, and that'll make it a lot slower.","msgtype":"m.text"}} {"origin_server_ts":1625752128887,"event_id":"$sg6iU9fsOj1xyQUG9q3ckdua41XUNWqwgmcFcwDvHGI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: Let me test some other cases.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Let me test some other cases."}} {"origin_server_ts":1625752218117,"event_id":"$c-uKyav0bv5sB3gi4KgdLsbm9IuKiLzv0ztKuqetFLI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"something like `10000 (? or r.Subset) 1e9` is probably reasonable. Small enough for cache to not penalize Java _too_ much","msgtype":"m.text","formatted_body":"something like 10000 (? or r.Subset) 1e9<\/code> is probably reasonable. Small enough for cache to not penalize Java too<\/i> much"}} {"origin_server_ts":1625752438261,"event_id":"$zvQAgii_c6Tq3Kcj7SAze85GrG4zT86DjwpF3L-xREs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Here is 10000:\n```\ntime:measureTime { t←n←0 ◊ while(n<1000) { n←n+1 ◊ t←t + +/ 10000 ? 10000000 } ◊ io:println t }\n49993331467344\nTotal time: 0.776\n\n49993331467344\n```","msgtype":"m.text","formatted_body":"

Here is 10000:<\/p>\n

time:measureTime { t←n←0 ◊ while(n<1000) { n←n+1 ◊ t←t + +/ 10000 ? 10000000 } ◊ io:println t }\n49993331467344\nTotal time: 0.776\n\n49993331467344\n<\/code><\/pre>\n"}}
{"origin_server_ts":1625752471630,"event_id":"$ARhdsuoZN_G5YaceZ1iNCQJpUWj5S6VovwFJy2zQNxk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"How would you write that as close to the Kap version as possible?","msgtype":"m.text"}}
{"origin_server_ts":1625752600928,"event_id":"$ixPd9NPYQhqS2Qz2Hl0_JwWV02Dz19zRxczpRA22dQA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'd just do `1000×1000 {𝕤 ⋄ +´10000 r.Subset 10000000}\u2022_timed @` - move the loop to `\u2022_timed`'s repeat (multiplying by 1000 since it gives average, not sum)","msgtype":"m.text","formatted_body":"I'd just do 1000×1000 {𝕤 ⋄ +´10000 r.Subset 10000000}\u2022_timed @<\/code> - move the loop to \u2022_timed<\/code>'s repeat (multiplying by 1000 since it gives average, not sum)"}}
{"origin_server_ts":1625752646024,"event_id":"$amSeSx13jAZ1R2qyXTMpntUrPwTmsUUDehbpbG7pvdg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So 10 times faster.","msgtype":"m.text"}}
{"origin_server_ts":1625752673156,"event_id":"$ZkBMec8mLprK3tn_HWzgdFfdm3BTABrxXNchQPTsFGc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"also, with lazy evaluation, `{\u2026}¨⍳1000` should be completely free for KAP","msgtype":"m.text","formatted_body":"also, with lazy evaluation, {\u2026}¨⍳1000<\/code> should be completely free for KAP"}}
{"origin_server_ts":1625752673547,"event_id":"$GpTCEFFIKYm55v0_bqGyeglULJZJGvpqVcTFK2oqbRU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Time to run Jprofiler.","msgtype":"m.text"}}
{"origin_server_ts":1625752804516,"event_id":"$mfWZuY8zPQ7C0a4LGq2TkDuiZ198FtKtgfC9H33JPPc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes.","msgtype":"m.text"}}
{"origin_server_ts":1625752820281,"event_id":"$dgwZ6ZPOGLTWZSMUXnuFc9QUSHnnbAq9a3vp5SVpJvs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It is completely free until you start reading the results.","msgtype":"m.text"}}
{"origin_server_ts":1625752840974,"event_id":"$Q0xSYKxPeYmneYux1IKazWJRnHwP4FsWMHS37iMeYu8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"oh right, the output still needs to be built","msgtype":"m.text","formatted_body":"oh right, the output still needs to be built"}}
{"origin_server_ts":1625752871061,"event_id":"$Y5obCtBplmd26VYep29W7g5h36J8aIAvH2Xjgz-aKzc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"88.4% of the time was spent in `HashMap.put`","msgtype":"m.text","formatted_body":"88.4% of the time was spent in HashMap.put<\/code>"}}
{"origin_server_ts":1625752888304,"event_id":"$cCCL9RV5_Xl6A0TqBSDUFWHSZL0k5UOXXg-PaOMgU8A","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"makes sense","msgtype":"m.text","formatted_body":"makes sense"}}
{"origin_server_ts":1625752916575,"event_id":"$Wh62c9BoPM2WJu2cO_dUw3wGF685w2vrobQgLZY33mM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, I think so. A better hashmap implementation would cut the spent time 2-5 times?","msgtype":"m.text"}}
{"origin_server_ts":1625752927148,"event_id":"$VyWkIbFas7yAApny-luu9EXk6EED_1f0npGcfPjQk0M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That'll bring it back into the same order of magnitude as CBQN","msgtype":"m.text"}}
{"origin_server_ts":1625753017811,"event_id":"$yqgxNBY_nq7tZwuKopkRsEzi1hn-cUFF5JbPoVphhgc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"uhh, of `+´10000 r.Subset 10000000`, 23.3% of time is spent in `+` from `+´` falling back to generic evaluation when the output didn't fit in an i32","msgtype":"m.text","formatted_body":"uhh, of +´10000 r.Subset 10000000<\/code>, 23.3% of time is spent in +<\/code> from +´<\/code> falling back to generic evaluation when the output didn't fit in an i32"}}
{"origin_server_ts":1625753031029,"event_id":"$Qa_Rrkl8xQIuEUkLOPSggJLWeReLoW-HiI1Lf1zp9Ps","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(and 10% of time is in the `´` itself then)","msgtype":"m.text","formatted_body":"(and 10% of time is in the ´<\/code> itself then)"}}
{"origin_server_ts":1625753845483,"event_id":"$HkRaAo40wTQUnXsUr8l8i-1JQ9QIXIGAJ2nTsXKQuyE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"7fb07311-10cd-4424-95c8-f83c872d6f1d","body":"[Fully specialized hash](https://dzaima.github.io/paste/#0jVLLbtswELz7KxY5GKSlFI5a9FBZBezGBQqkKaAYvQSGIStMRdmWBUoy5QT@jB57b/@un9Bdkn6kRZse9ODs7HA43BGopLibVc28EvUsDdgIah9GoOnVcnjsAMiXAWgJEawDyTQPHdTuodZC98DiYTxmWg76nEOdqY/sjJE8f3Fj9N/Az29fv0OaFMW6hrmAQnxJarkRZ08V2n8r/HheQcu3rfwfE6JNhbgzqkcJLaOoz0GJulEFiFVZbz98FikzhHh4fTm7mQzjiQuiB6oMMS2FcaxmCCRKbVhXlT6mZjVfv4LqAcsXtNKZXApgCAyQ0As41noRBFSbDK@uPr1jKOJDllSZD0GveuCh3WeTLFGEcM8o3a8VsAbF6Sb6SEJF4uOf53FDvJVTU9uz5VO2lo6rSsuUxCTJVVItcB300Oj5BX9WgAbFduZY1dug6S@Y3lLyrFthxtzHiTmXHDy7iY06H2BGrtmOVYrt6Cafhg40CwvKU9D4TS2wA7GsxEGHbJTGfR6eSJdKbBA9YO4matWIowfAzm5kzh8eIOrOXPa35fSkgGfIzLQ87otmB5grkSxC2P3OzInpjOB9ktif3BI8NxDmcO5r6X9LgjRdGB37TN7H4zEjV8fBHV9f0r8bbRV2dr8A%23C), getting rid of the templating. Difference isn't that big but it increases the break-even point by about a factor of two.","msgtype":"m.text","formatted_body":"

Fully specialized hash<\/a>, getting rid of the templating. Difference isn't that big but it increases the break-even point by about a factor of two.<\/p>"}} {"origin_server_ts":1625753948467,"event_id":"$rOmzvWeTQje88SX6m5ZN9gVMQMHuQzAjFioLw44dUC4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"io.github.mirukana.mirage.transaction_id":"5dc550f3-e678-4e3c-af41-710f2c6c805a","body":"Interleaving hashes and values is faster than separating them, but initializing only the hash to 0 is slightly slow, so I set both to 0 instead.","msgtype":"m.text"}} {"origin_server_ts":1625753954224,"event_id":"$mHXMhyxmAa-C8LePYGzul2DTOmebBq1kw4lKRRNYlB0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"How much faster is it?","msgtype":"m.text"}} {"origin_server_ts":1625753984727,"event_id":"$1RKtrX0aJgS26jzP4bYJ5Pgy9tR5Hky_HNWlG2Gk1dk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"io.github.mirukana.mirage.transaction_id":"51d7cea8-1968-46a3-8f5d-5b144ce8ae9e","body":"15-20%, eyeballing.","msgtype":"m.text"}} {"origin_server_ts":1625753999066,"event_id":"$jC9oVFKnqC0CJZDUjB5Xxlj1OuF3Qn8w5Rx9jSd6x5s","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"406cdb2b-0560-47c9-9935-6acd3880a2dd","body":"*Much* easier to translate to Kotlin though.","msgtype":"m.text","formatted_body":"

Much<\/i> easier to translate to Kotlin though.<\/p>"}} {"origin_server_ts":1625754071924,"event_id":"$GHXi_U4PnZ4noKHmYamzkRlf0mze4C6mTiQJkOaj_sY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"d5901aea-0d44-4993-8818-e3d86e3bcc64","body":"The doubled index `p = 2*j;` is part of the improvement.","msgtype":"m.text","formatted_body":"

The doubled index p = 2*j;<\/code> is part of the improvement.<\/p>"}} {"origin_server_ts":1625754284608,"event_id":"$TKyxl0C7-YY3jLyXXqalMnnOHG4liPT0Y9dw7DdeAIg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"83f0a06c-2713-42b4-99b4-36d603922444","body":"And [test script](https://dzaima.github.io/paste/#0dVDBSsNAEL3nK4acWiiyiXgQevTqxXqXTbshxTYVN8XDEuipaAjWS0kPStDT5l6wpxaSY/9ivsBPcHaDIIILs/Nm9s2bx4axBFy@QAcXH5f8VlzxeARn3ZMLwSe4OPxtD@aBFInjXI@nws4pTqyAYkjV19u6cgBcytqlngGVBTKah@FEWBxxGU35ncX3PBnPXHzcQwAK8wzzfccTp5jtmqILRofejhtub1BGz8Lms94eN6ZMDUl54rwphu1AtqO0IuM3CbkcAU8xf7VUCGPppOReyORf9/j0Xm@hVQyM4qrW0Ocp3b/Gacb@gaI9g2j2YIjPtbZrat0HLLXRKjWAzxjrAXisKXC59lnPY@ZgWbUM35a2@8Mw7JZB8Q0%23BQN) adapted from dzaima's benchmarks earlier. First output should be `⟨ 1 1 ⟩` to show that the hashing and non-hashing methods match, then a table of timings.","msgtype":"m.text","formatted_body":"

And test script<\/a> adapted from dzaima's benchmarks earlier. First output should be ⟨ 1 1 ⟩<\/code> to show that the hashing and non-hashing methods match, then a table of timings.<\/p>"}} {"origin_server_ts":1625754772118,"event_id":"$RtfYrX7zy05kqD8wDf5WCaCO_Q27aFJvdKB8A3yejtg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks","msgtype":"m.text"}} {"state_key":"@dcao:matrix.org","origin_server_ts":1625858204245,"event_id":"$eSBX12nN6SjtR_nF6y2Eqc0Nt_KSyrVe31cGBgp6DKo","sender":"@dcao:matrix.org","user_id":"@dcao:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/LEsCNIjsXMtFqKlCCdgEJqcj","displayname":"dcao","membership":"join"}} {"origin_server_ts":1625908905546,"event_id":"$SSSckTCUll14X8XCGVb-mfHlCgG6bp7AJA0Dm81fJi4","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"what are the cool goodies that KAP has","msgtype":"m.text"}} {"origin_server_ts":1625909462885,"event_id":"$K6c0WZn6TWrlN25O75g2eQUjBGaSFIVGhV3V9ndcgyA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Razetime: The language itself or its implementation?","msgtype":"m.text","formatted_body":"Razetime<\/a>: The language itself or its implementation?"}} {"origin_server_ts":1625909486420,"event_id":"$TKu9rNvIUHTnFgUVa6_J33GWYVBaD4w75RZqci5vkfQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There is a graphical UI that has some interesting features such as the ability to draw graphics and stuff.","msgtype":"m.text"}} {"origin_server_ts":1625909576088,"event_id":"$4nYf9jwP35LLn2k4lGb7u_27ECM9s2FUiZl0oQMUrNg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The language itself has some improvements to regular APL. Such as the ability to define custom syntax extensions. It also has first-class functions with closures. Evaluation is also lazy, such that something like `+/⍳N` is O(1) is space.","msgtype":"m.text","formatted_body":"The language itself has some improvements to regular APL. Such as the ability to define custom syntax extensions. It also has first-class functions with closures. Evaluation is also lazy, such that something like +/⍳N<\/code> is O(1) is space."}} {"origin_server_ts":1625909579190,"event_id":"$jN2xYpOoepZfO6EYQXJF1Q3KKS3Js80O_GbO5fcN-PA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"The language itself has some improvements to regular APL. Such as the ability to define custom syntax extensions. It also has first-class functions with closures. Evaluation is also lazy, such that something like `+/⍳N` is O(1) in space.","msgtype":"m.text","formatted_body":"The language itself has some improvements to regular APL. Such as the ability to define custom syntax extensions. It also has first-class functions with closures. Evaluation is also lazy, such that something like +/⍳N<\/code> is O(1) in space."},"m.relates_to":{"event_id":"$4nYf9jwP35LLn2k4lGb7u_27ECM9s2FUiZl0oQMUrNg","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * The language itself has some improvements to regular APL. Such as the ability to define custom syntax extensions. It also has first-class functions with closures. Evaluation is also lazy, such that something like `+/⍳N` is O(1) in space.","msgtype":"m.text","formatted_body":" * The language itself has some improvements to regular APL. Such as the ability to define custom syntax extensions. It also has first-class functions with closures. Evaluation is also lazy, such that something like +/⍳N<\/code> is O(1) in space."}} {"origin_server_ts":1625909595651,"event_id":"$820sUNwZBCMUAs7l9HHRFhSis-aKQcI0eZGzsv_tNwk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"The language itself has some improvements to regular APL. Such as the ability to define custom syntax extensions. It also has first-class functions with closures. Evaluation is also lazy, such that something like `+/X+⍳N` is O(1) in space.","msgtype":"m.text","formatted_body":"The language itself has some improvements to regular APL. Such as the ability to define custom syntax extensions. It also has first-class functions with closures. Evaluation is also lazy, such that something like +/X+⍳N<\/code> is O(1) in space."},"m.relates_to":{"event_id":"$4nYf9jwP35LLn2k4lGb7u_27ECM9s2FUiZl0oQMUrNg","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * The language itself has some improvements to regular APL. Such as the ability to define custom syntax extensions. It also has first-class functions with closures. Evaluation is also lazy, such that something like `+/X+⍳N` is O(1) in space.","msgtype":"m.text","formatted_body":" * The language itself has some improvements to regular APL. Such as the ability to define custom syntax extensions. It also has first-class functions with closures. Evaluation is also lazy, such that something like +/X+⍳N<\/code> is O(1) in space."}} {"origin_server_ts":1625909694755,"event_id":"$hhHWuQnaZSGt4_B6fwStSri9wyreplsdMr7SLtYEIBU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It also has support for axis headers similar to R.","msgtype":"m.text"}} {"origin_server_ts":1625909726154,"event_id":"$yUwr2YXKqZObYk1-UTAqR0VIr_gMXVACmpxqE8wt4MI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There is built-in support for MS Excel format :-)","msgtype":"m.text"}} {"origin_server_ts":1625909766860,"event_id":"$cRmlEtAKONiPtQGRxjW-XQ0dIz_eVrJhoQJ2oJ8ZdQE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's designed to be a more pragmatic language compared to most other APL's","msgtype":"m.text"}} {"origin_server_ts":1625909848334,"event_id":"$rP2PWA_l56jF4JVhJrqvEPP7qCpVVWiK5RPP3ShI5u0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's because I'm not actually an APL'er. I'm a Lisper that has some affection for APL, so one of the goals of the project was to create something that isn't a pure array language, but a language where imperative code can feel somewhat natural. I'm not sure I've succeeded in that though.","msgtype":"m.text"}} {"state_key":"@rak1507:matrix.org","origin_server_ts":1625925467879,"event_id":"$BVekAosOtcGQMbLSgsSNfEtPB2KDfm91rcMd1fYHi7o","sender":"@rak1507:matrix.org","user_id":"@rak1507:matrix.org","type":"m.room.member","content":{"displayname":"rak1507","membership":"join"}} {"state_key":"@erehtolleh:matrix.org","origin_server_ts":1625927644711,"event_id":"$-Qv9G6uMKhi_HIWGWypP2Ml_il60CmYgj4hBjtRa5MU","sender":"@erehtolleh:matrix.org","user_id":"@erehtolleh:matrix.org","type":"m.room.member","content":{"displayname":"erehtolleh","membership":"join"}} {"origin_server_ts":1626508172484,"event_id":"$cO5WKaYMLKkvL46pZcP2VCGjsACNWkZpocZ0VPoB1BE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Some advent of code solutions in KAP: https://github.com/lokedhs/array/blob/master/demo/advent-of-code.kap","msgtype":"m.text"}} {"state_key":"@joseph:intrigued.uk","origin_server_ts":1626899692895,"event_id":"$ugh7JDzSJqi3L3nrW8iRjcXcrGo1zL0fXIp2tB2gPUY","sender":"@joseph:intrigued.uk","user_id":"@joseph:intrigued.uk","type":"m.room.member","content":{"avatar_url":"mxc://intrigued.uk/vRJdFFhkywHgqKaWmChCZpVq","displayname":"Joseph","membership":"join"},"age_ts":1626899693663} {"origin_server_ts":1627053773817,"event_id":"$mehnbTUT0T_hNyoQuu5x5YkpT6lkCAxpzEeUuulFkaU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm trying to decide on a nice, consistent regexp API","msgtype":"m.text"}} {"state_key":"@eris:chat.unix.lgbt","origin_server_ts":1627727847241,"event_id":"$sf9poGLRP-S9XHOJWhDKj6dmVpjPj7ynJqdqgDPDECE","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.member","content":{"avatar_url":"mxc://chat.unix.lgbt/wkBwQHWFcTolDHIwyMbMjrCp","displayname":"eris","membership":"join"},"age_ts":1627727847757} {"origin_server_ts":1627727924914,"event_id":"$Tdz7smPn8kBO-lIJuTWdLK003laU5LE911gIVtZK_TU","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"yo!","msgtype":"m.text"}} {"origin_server_ts":1627733626535,"event_id":"$e0sF8tvhUaIuYl4WRfbIzb3AEAiqcB0OcxVXsae6gco","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hello. ","msgtype":"m.text"}} {"origin_server_ts":1627744311579,"event_id":"$4bMAdjpetNA5Y8yWlCyyo5t6vNh7L9BpCRuUE0HVXhs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"eris at made you join this channel? Did you see me talking about the project somewhere? ","msgtype":"m.text","formatted_body":"eris<\/a> at made you join this channel? Did you see me talking about the project somewhere? "}} {"origin_server_ts":1627744598627,"event_id":"$N3PP9DN5ZmptAM4OKab_TWVD22uwaOt-ySD4UxVNcUc","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"saw you talk about apl on the timeline, remember finding your project from exploration, so i decided to scroll thru ur profile","msgtype":"m.text"}} {"origin_server_ts":1627744606569,"event_id":"$wtcwD-zyqTsmatpt_xg9fOw5sv_h5BwHl0vEFBR_meg","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"lo and behold! matrix","msgtype":"m.text"}} {"origin_server_ts":1627744655867,"event_id":"$O0XajAcPGPdlPASLYOKQaTN69xUWitp0PdoQgJZsqYA","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"im not really an APL programmer, but i do get the appeal, and have an interest","msgtype":"m.text"}} {"origin_server_ts":1627744666826,"event_id":"$CrfwV_eJlemAzwFooVEAkeLpJ9JuC0IpsPuDDo2fDAo","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"plus, odd and quirky programming languages are my jam","msgtype":"m.text"}} {"origin_server_ts":1627744676322,"event_id":"$QVkersH4b4KNqD8zeYA3MHIkE3cFTNnqS_Cd5ca5-IE","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"big forth lover here :p ","msgtype":"m.text","formatted_body":"big forth lover here :p"}} {"origin_server_ts":1627751524239,"event_id":"$VVx27z5H62KCbZqdBQVTEthdd0su7xKbymIUioi4dCo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"eris nice. I'm not really expecting a lot if people to actually use the language at this time. Perhaps at some point it will find a niche, but I'm realistic. 😁","msgtype":"m.text","formatted_body":"eris<\/a> nice. I'm not really expecting a lot if people to actually use the language at this time. Perhaps at some point it will find a niche, but I'm realistic. 😁"}} {"origin_server_ts":1627751564730,"event_id":"$7EV1HnCLJ98nVVqLNRUWkGkJ1Bi0iwSkJbY7L-6_fe8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Your words give me a encouragement, and it's always nice to discuss language design ideas. ","msgtype":"m.text"}} {"origin_server_ts":1627751595530,"event_id":"$QjW-jk5SCSRtIirEg8TjhZSLkLuIaqjzX2woBV25lCA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I need to make another video or two to download demonstrate how it works. ","msgtype":"m.text"}} {"origin_server_ts":1627751602720,"event_id":"$N_ndsjdVL-mOOp-rklnPCpcm1fb4GUMe38DoXhM6d8g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I need to make another video or two to demonstrate how it works. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$QjW-jk5SCSRtIirEg8TjhZSLkLuIaqjzX2woBV25lCA","rel_type":"m.replace"},"body":"* I need to make another video or two to demonstrate how it works. ","msgtype":"m.text"}} {"origin_server_ts":1627752440280,"event_id":"$STehu3BBY5c2kPknYcU4-OkM4PjEJw95caDF-SjN5CE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Your words give me encouragement, and it's always nice to discuss language design ideas. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$7EV1HnCLJ98nVVqLNRUWkGkJ1Bi0iwSkJbY7L-6_fe8","rel_type":"m.replace"},"body":"* Your words give me encouragement, and it's always nice to discuss language design ideas. ","msgtype":"m.text"}} {"origin_server_ts":1627752790047,"event_id":"$wS0PCbLmgzH-FaYJGaIeSkaX6vW72o4jrUQWvZ_dqEM","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"mhm!","msgtype":"m.text"}} {"origin_server_ts":1628692176126,"event_id":"$3HlnExGTShdAAlagpy1ZbpTmv6Nw2MHN6JRPp7ENhjQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I implemented a new feature: https://peertube.functional.cafe/videos/watch/7d0d2ac6-15b5-4e56-a8b0-67665ea8cf62","msgtype":"m.text"}} {"origin_server_ts":1628693638365,"event_id":"$6VZ8odqfxIJymbE95qtV2MX8W21H8TUw8w18YHP7-O8","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"cool!","msgtype":"m.text"}} {"origin_server_ts":1628694154504,"event_id":"$zcjFv9SMtNXowIPx1wpt-ywVO5aJ1aICh1bq4348zzs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks :-)","msgtype":"m.text"}} {"origin_server_ts":1629478698084,"event_id":"$jD0h3AMWsvCYwC0z4-cZ7y9VZaXbcPf3tdaHemYiazg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Interesting experimentation. My straightforward solution to a prime checking routine in Kap is significantly faster than Dyalog and GNU APL, mainly because thanks to lazy evaluation, it computes a lot less.","msgtype":"m.text"}} {"origin_server_ts":1629478724675,"event_id":"$jRKRj-Ptf5L1kn_o6wPw2ygdlEBQyYCc4pDviknnSYI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"This is the function: `{~0∊⍵|⍨1↓1+⍳⍵⋆0.5}`","msgtype":"m.text","formatted_body":"This is the function: {~0∊⍵|⍨1↓1+⍳⍵⋆0.5}<\/code>"}} {"origin_server_ts":1629478733120,"event_id":"$6rgeTO9LNdO7YfFgpLUT06lYIRdi1MOJvbz52vFQ0pc","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"nice!","msgtype":"m.text"}} {"origin_server_ts":1629478744215,"event_id":"$pQgSOk2jLMRxrGE4xfMMcib55NWKjpFBKNy6T3E2uDM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's about 10 times faster than Dyalog. And ridiculously faster than GNU APL.","msgtype":"m.text"}} {"origin_server_ts":1629478765747,"event_id":"$7jnkQ_jvxKPK7COq-ny9k6fjqYF1OOkxnT4kqqCpiRU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's particularly visible for large numbers.","msgtype":"m.text"}} {"origin_server_ts":1629478813434,"event_id":"$oLHG6RUffC2djcYIy6lUGAUsMALLVNbL3-jeUM1OuA8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"To achieve the same in Dyalog, you have to go to imperative code, with `:while`, `:if`, and so on.","msgtype":"m.text","formatted_body":"To achieve the same in Dyalog, you have to go to imperative code, with :while<\/code>, :if<\/code>, and so on."}} {"origin_server_ts":1629478821421,"event_id":"$SBRdHLupUm-fFIUzerQNzYKY811GHJrscQJESN-HUoQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"To achieve the same in Dyalog, you have to go to imperative code, with `:while`.","msgtype":"m.text","formatted_body":"To achieve the same in Dyalog, you have to go to imperative code, with :while<\/code>."},"m.relates_to":{"event_id":"$oLHG6RUffC2djcYIy6lUGAUsMALLVNbL3-jeUM1OuA8","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * To achieve the same in Dyalog, you have to go to imperative code, with `:while`.","msgtype":"m.text","formatted_body":" * To achieve the same in Dyalog, you have to go to imperative code, with :while<\/code>."}} {"origin_server_ts":1629478862025,"event_id":"$Vea6f9QMXKIG2424Z2EG1cQRCrpvS-5ZuucgsCeUeGs","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"maybe rather than tradfn stuff for dyalog, lazyfn stuff ","msgtype":"m.text"}} {"origin_server_ts":1629478872392,"event_id":"$gRBh8UV_sBN6OHWIEpPA3aX9lJ4Ca2xnOoqvIT35gwo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Or write some monstrous code with ⍣. My experiment is here: ` ({1+⍵}⍣{(⍵=S)∨0=⍵|N} 2) = 1+S←⌈N*0.5`. It's a lot less clear.","msgtype":"m.text","formatted_body":"Or write some monstrous code with ⍣. My experiment is here: ({1+⍵}⍣{(⍵=S)∨0=⍵|N} 2) = 1+S←⌈N*0.5<\/code>. It's a lot less clear."}} {"origin_server_ts":1629479010846,"event_id":"$NEGNz2q659_fbZHuC7KJpTOzHTPwN5pbq1Fvhj1PPm0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"eris: Yeah, one is going to have to do that. When testing for prime numbers, most numbers are divisible by a very small number, so you want to stop checking early. Using lazy evaluation this becomes the natural solution, instead of having to go to imperative code. I think this is one particular case where my approach is actually successful.","msgtype":"m.text","formatted_body":"eris<\/a>: Yeah, one is going to have to do that. When testing for prime numbers, most numbers are divisible by a very small number, so you want to stop checking early. Using lazy evaluation this becomes the natural solution, instead of having to go to imperative code. I think this is one particular case where my approach is actually successful."}} {"origin_server_ts":1629479049502,"event_id":"$mYNehKr3vHuUsRvrwD5Pxn6UUg_rjaG8KABIZrOEC6U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Of course, in other cases it's a lot less efficient.","msgtype":"m.text"}} {"origin_server_ts":1629479050968,"event_id":"$An3RwSPI381VATRlZ8wJDJuJIKAqw1I6fa3xTSiYiX8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"9462d66f-e654-4cb0-8822-4199ec2c8c0f","body":"In theory Dyalog could implement `⌊.|` that stops when it hits a 0, but I don't think I'd expect that one to happen.","msgtype":"m.text","formatted_body":"

In theory Dyalog could implement ⌊.|<\/code> that stops when it hits a 0, but I don't think I'd expect that one to happen.<\/p>"}} {"origin_server_ts":1629479120248,"event_id":"$he3iPz_bBirCUFw4T84ocOq4oDxnWumXH0LvgbZgYk0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: oh yeah, of course.","msgtype":"m.text","formatted_body":"Marshall<\/a>: oh yeah, of course."}} {"origin_server_ts":1629479208786,"event_id":"$rv60EVDbvv9i1g4LF7jMtgSaaHZloWQa81WZc4JHqRg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: Do you know on what level Dyalog performs optimisations for known idioms? Does it parse into an AST first, and then doing matching?","msgtype":"m.text","formatted_body":"Marshall<\/a>: Do you know on what level Dyalog performs optimisations for known idioms? Does it parse into an AST first, and then doing matching?"}} {"origin_server_ts":1629479216288,"event_id":"$pOexxtwKiw0Ble9bxXDxvW-rOOZfLkwTaLwvMMh_X3E","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$jD0h3AMWsvCYwC0z4-cZ7y9VZaXbcPf3tdaHemYiazg"}},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Interesting experimentation. My straightforward solution to a prime checking routine in Kap is significantly faster than Dyalog and GNU APL, mainly because thanks to lazy evaluation, it computes a lot less.\n\nI assume that's for trivially not prime cases?","msgtype":"m.text","formatted_body":"

In reply to<\/a> @loke:dhsdevelopments.com<\/a>
Interesting experimentation. My straightforward solution to a prime checking routine in Kap is significantly faster than Dyalog and GNU APL, mainly because thanks to lazy evaluation, it computes a lot less.<\/blockquote><\/mx-reply>I assume that's for trivially not prime cases?"}} {"origin_server_ts":1629479235828,"event_id":"$3e-nlt9szlO_6wrDaQdQVcDIfPSuoF3DLHoI8-ZyJV4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. Of course. For prime cases, all comparisons have to be performed.","msgtype":"m.text"}} {"origin_server_ts":1629479262351,"event_id":"$7j5PovMzLpvKuCn3C9ZhvbUKubeMz-IFh7WlgmrGMgw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"at which point I assume KAP is a decent bit slower than Dyalog","msgtype":"m.text"}} {"origin_server_ts":1629479289307,"event_id":"$i4_BSHPhUJzFf3xCVPHh--GmPSx_ecty458Z6FAfGeg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"When I did my tests, I ran the above on ⍳1000000.","msgtype":"m.text"}} {"origin_server_ts":1629479309953,"event_id":"$hGpzxjY2Fa-kGpCZGMOC_seHHgle-h3LJfWEfX0s9wg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: Yes, when Dyalog follows the optimised path, it's usually quite a bit faster.","msgtype":"m.text","formatted_body":"
dzaima<\/a>: Yes, when Dyalog follows the optimised path, it's usually quite a bit faster."}} {"origin_server_ts":1629479330215,"event_id":"$Z3KYxA-XPm_IvkMyqVxgeHO4E1Q61HqtG1CG1hr-kJA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, I've been surprised. Let me test with some large prime to compare.","msgtype":"m.text"}} {"origin_server_ts":1629479341598,"event_id":"$t_Nh8Nk6QUuYH8xm71E0ysDy5s5LqG-OiHGtTG0d1V8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"6782ca65-4cb4-46ff-b9f5-2695829fbb11","body":"`⌊.|` is a derived function so it can be implemented as part of the inner product with no parsing needed. That's what it does for saner things like `+.×` and `∧.∨`. Actual idiom recognition is a pattern match on tokens. A `⊢` anywhere breaks it up.","msgtype":"m.text","formatted_body":"

⌊.|<\/code> is a derived function so it can be implemented as part of the inner product with no parsing needed. That's what it does for saner things like +.×<\/code> and ∧.∨<\/code>. Actual idiom recognition is a pattern match on tokens. A ⊢<\/code> anywhere breaks it up.<\/p>"}} {"origin_server_ts":1629479591827,"event_id":"$GvNBoWeUloE-DlIM1svSuO9ZBJ00EP5Bu6tod74fG64","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, tested. With when I run the test on just the prime 1000099, the times are reversed. Running 1 million iterations takes 7 seconds on Dyalog and 23 seconds on Kap","msgtype":"m.text"}} {"origin_server_ts":1629479667111,"event_id":"$St-HudJ7mZeeQnBWF2V6V-TsZNG17wt7T2uSkfgQp7g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There is a missing optimisation though, so it actually ends up boxing and unboxing every number at least once, I think. Fixing that should cut several seconds of the evaluation time.","msgtype":"m.text"}} {"origin_server_ts":1629479714639,"event_id":"$zUpB0LqpvCtTioJHmxLJOxvTkk8gfb9gfasCAe7768U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: Yeah, that's what I was wondering. I think Dyalog suffers from having to execute code while parsing it, which is why dfns are so slow.","msgtype":"m.text","formatted_body":"Marshall<\/a>: Yeah, that's what I was wondering. I think Dyalog suffers from having to execute code while parsing it, which is why dfns are so slow."}} {"origin_server_ts":1629479723318,"event_id":"$0uL6kVQICPxTnGEzy5mTL_Mieeli_XGZladiAg7hWec","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I don't think BQN suffers from that.","msgtype":"m.text"}} {"origin_server_ts":1629479738567,"event_id":"$zI7Wja0JEDRlMKTNkzCfOXvHw3SM1e0euabN9yJ9T24","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"yeah, you can definitely do more fancy static pattern matching in BQN","msgtype":"m.text"}} {"origin_server_ts":1629479752838,"event_id":"$inazIFEqt9etNc4MCTmPUnmqdUsA5wX2HEHVouQewSg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Does it do that yet?","msgtype":"m.text"}} {"origin_server_ts":1629479756507,"event_id":"$q_aQpyscEVjrOsKVWlX5wHO0kAM8SVQzvaqBwQykM80","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"nope","msgtype":"m.text"}} {"origin_server_ts":1629479795111,"event_id":"$WKL--bYbJwr6X9OXlxOp2fRSg20ZBoxLVIzHbHEPu9g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I really need to write some actual BQN code. I've only done some small experimentation.","msgtype":"m.text"}} {"origin_server_ts":1629479812056,"event_id":"$R5R7nxk32qoxFXP7zVGFzuOtqhzclxaoJWCq1iFXhvc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Is there an easy way to get large datasets into BQN? Is there a CSV reader or something like that?","msgtype":"m.text"}} {"origin_server_ts":1629479844573,"event_id":"$D5VzVemlHXt_drCKZ1IMIUmJDJJlDKh1MOiEpi8psB4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$zI7Wja0JEDRlMKTNkzCfOXvHw3SM1e0euabN9yJ9T24"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> yeah, you can definitely do more fancy static pattern matching in BQN\n\nyou could do fancy things like converting trains to regular invocations to reduce the amount of cases that need to be handled","msgtype":"m.text","formatted_body":"

In reply to<\/a> @dzaima:matrix.org<\/a>
yeah, you can definitely do more fancy static pattern matching in BQN<\/blockquote><\/mx-reply>you could do fancy things like converting trains to regular invocations to reduce the amount of cases that need to be handled"}} {"origin_server_ts":1629479933306,"event_id":"$hFvXSdAbM6QQJRQmllpU_qb-DUDy-7wjE40bZMNfZJM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$R5R7nxk32qoxFXP7zVGFzuOtqhzclxaoJWCq1iFXhvc"}},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Is there an easy way to get large datasets into BQN? Is there a CSV reader or something like that?\n\nnothing built in, and string parsing is one of the uglier things you can do in BQN","msgtype":"m.text","formatted_body":"
In reply to<\/a> @loke:dhsdevelopments.com<\/a>
Is there an easy way to get large datasets into BQN? Is there a CSV reader or something like that?<\/blockquote><\/mx-reply>nothing built in, and string parsing is one of the uglier things you can do in BQN"}} {"origin_server_ts":1629479954295,"event_id":"$058_kOr1JE0_g5HT3Kwu6Ws2TDcY2VWyxajNCbLc5tM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Regex :-)","msgtype":"m.text"}} {"origin_server_ts":1629479973226,"event_id":"$UTdvR50khb9gJG9m1rzbTG1Nt-DEsNBxbdX9J9Wz1o8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"no regex in CBQN/the JS impl :)","msgtype":"m.text"}} {"origin_server_ts":1629480012487,"event_id":"$9v5G3RyPdnF3aciGxPTX8SBiX7_ZhHFix1Sxx5YGYEA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, I know. I was asking about it when I implemented Regexp support. I wanted to steal an existing API. 🤓","msgtype":"m.text"}} {"state_key":"@garklein:matrix.org","origin_server_ts":1629898357972,"event_id":"$_Rv1J8vKniyXDyaz1oG4WkutN2YRZMsKK1DBMhIgzbo","sender":"@garklein:matrix.org","user_id":"@garklein:matrix.org","type":"m.room.member","content":{"displayname":"garklein","membership":"join"}} {"state_key":"@mondra:privacytools.io","origin_server_ts":1630915698686,"event_id":"$EeWhuFwArbH1Xqzjw4ald6XxIyerEazvcL8WPIleGIQ","sender":"@mondra:privacytools.io","user_id":"@mondra:privacytools.io","type":"m.room.member","content":{"avatar_url":"mxc://privacytools.io/pMajLTsOShVsbHoNbZJOwRIM","displayname":"mondra","membership":"join"},"age_ts":1630915699275} {"origin_server_ts":1631021343368,"event_id":"$ATPI2JxAAmIjSwccgGy0REwQKFehdVzq3bL8mEY2iVA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have come across an issue where the use of lazy evaluation causes some really confusing semantics unless one is aware of the behaviour. I have multiple ways to address it, but none of them are ideal.","msgtype":"m.text"}} {"origin_server_ts":1631021380046,"event_id":"$5liM8JDUTgubJgycGhaN_27lN_YpOIGVptsOX48g418","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Here's the example:\n```\n1 2 ∊ io:print¨ ⍳100\n```","msgtype":"m.text","formatted_body":"

Here's the example:<\/p>\n

1 2 ∊ io:print¨ ⍳100\n<\/code><\/pre>\n"}}
{"origin_server_ts":1631021404448,"event_id":"$XTy6Pb8nKkU07CfDHuohw0G69oA01kIEbqpXJrFuaMs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Now, the return value for this is of course `1 1`","msgtype":"m.text","formatted_body":"Now, the return value for this is of course 1 1<\/code>"}}
{"origin_server_ts":1631021420511,"event_id":"$OcszQOn3773QDxFBu1X6O_k5MrF5HmNkMMbz4b0CW98","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"However, the question is what is printed. Currently, it prints `001`.","msgtype":"m.text","formatted_body":"However, the question is what is printed. Currently, it prints 001<\/code>."}}
{"origin_server_ts":1631021449311,"event_id":"$U88vYqkx5_Wz71a1Go8B5gYnS0fcOQiwDs-0usZyvBM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What this shows is that the first element is evaluated twice, once for each argument (1 and 2)","msgtype":"m.text"}}
{"origin_server_ts":1631021509402,"event_id":"$JlcS-v7ZeMxFUsGfmKIQdO9tq8_kvjrVZrBqUgakF58","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I can make it print `01`. But to do that the object that holds the result of `io:print¨ ⍳100` but cache the results of previous computations.","msgtype":"m.text","formatted_body":"I can make it print 01<\/code>. But to do that the object that holds the result of io:print¨ ⍳100<\/code> but cache the results of previous computations."}}
{"origin_server_ts":1631021559055,"event_id":"$3DGN2vUao5GMPb78v5nM2HSaK34x6nMLrlIu0R00Mdo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's often good, but not always. You could end up storing a very large number of values, using a lot of memory. Consider the following:","msgtype":"m.text"}}
{"origin_server_ts":1631021593743,"event_id":"$iKUw1nCzERO5aJnXjh30ZdmpRcflejx0MSSVJgw4MOk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`1000000000 1 ∊ ⍳4000000000`","msgtype":"m.text","formatted_body":"1000000000 1 ∊ ⍳4000000000<\/code>"}}
{"origin_server_ts":1631021606161,"event_id":"$TlgoAvPiv2fUIGihJKvNO9RnoJci81q6WakVGDEfBW0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In the current implementation, this uses no memory.","msgtype":"m.text"}}
{"origin_server_ts":1631021667218,"event_id":"$66hzZC0EZHAUhpTuBaqRivRjglbz9wCJJTKyAcah3Eg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But with a cache, I'd allocate 32 GB RAM just for the cache, and another 8 GB of RAM for the values that ends up being cached. Not to mention the extra CPU needed to actually fill in the array.","msgtype":"m.text"}}
{"origin_server_ts":1631022935677,"event_id":"$wA_7dSrEm8XxCfaCCg5wskNCcQ_-gK06l7xBYlFMghA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"doesn't that mean that `(⍳n) ∊ ⍳n` runs in O(n^2) time?","msgtype":"m.text","formatted_body":"doesn't that mean that (⍳n) ∊ ⍳n<\/code> runs in O(n^2) time?"}}
{"origin_server_ts":1631023148487,"event_id":"$28ELJnEmBCs_mm1SijLTGbPU852B-Dy01skx8I_jDL4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima if you read all values, yes. ","msgtype":"m.text","formatted_body":"dzaima<\/a> if you read all values, yes. "}}
{"origin_server_ts":1631023174320,"event_id":"$CkjNWwX-69EtKbhoTpiDCcjmMpwD5fmC8lH5kjUBX_0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The entire expression doesn't compute anything until you read a value from the result. ","msgtype":"m.text"}}
{"origin_server_ts":1631023216215,"event_id":"$eXKvKKC-yaOJzCwLnuuWcuPst-zAunQY9AmAvwmdgGE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"of course","msgtype":"m.text","formatted_body":"of course"}}
{"origin_server_ts":1631023280801,"event_id":"$AYh11jX4uZGXTuT1ZOeVJcW6THb-iC3iXqtkuL0RChU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm assuming that either L or R is fine going to be large, but rarely both. ","msgtype":"m.text"}}
{"origin_server_ts":1631023321209,"event_id":"$1JRnK8dBt-NOuVPuPgVEe1ioOxurFb5YfoPwZ8JHxFo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I can also add specific optimisationa if, for example, either of the results are already collapsed. ","msgtype":"m.text"}}
{"origin_server_ts":1631023341735,"event_id":"$DXIFiR5zDbp4BpfIMKeoWUuiRnTyOax_3MbdGhz3Unc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Of if it's known that all the values of a result will be needed later. ","msgtype":"m.text"}}
{"origin_server_ts":1631023356696,"event_id":"$GrPQ1l3WvJyvDoGkH42M33M9-Bt9M16MIaqEHQjr7WE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I'm assuming that either L or R is going to be large, but rarely both. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$AYh11jX4uZGXTuT1ZOeVJcW6THb-iC3iXqtkuL0RChU","rel_type":"m.replace"},"body":"* I'm assuming that either L or R is going to be large, but rarely both. ","msgtype":"m.text"}}
{"origin_server_ts":1631023368367,"event_id":"$VdH20IaZVuLQ5u_gxETKpqwmQLgPmHJQ3OQCBS4ziPQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"If it's known that all the values of a result will be needed later. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$DXIFiR5zDbp4BpfIMKeoWUuiRnTyOax_3MbdGhz3Unc","rel_type":"m.replace"},"body":"* If it's known that all the values of a result will be needed later. ","msgtype":"m.text"}}
{"origin_server_ts":1631023825100,"event_id":"$yNK7UALimuSbwYhIIIRAuKmVjKC8JSlimxEey5zHKvU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I can also add specific optimisations if, for example, either of the results are already collapsed. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$1JRnK8dBt-NOuVPuPgVEe1ioOxurFb5YfoPwZ8JHxFo","rel_type":"m.replace"},"body":" * I can also add specific optimisations if, for example, either of the results are already collapsed. ","msgtype":"m.text"}}
{"origin_server_ts":1631023862392,"event_id":"$0p3gXksN8zcg9yoH0HerXS7W5xv4DaoEcSyJBHMiH7g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, all of this makes it complicated to predict the performance behaviour of a given piece of code.","msgtype":"m.text"}}
{"origin_server_ts":1631023873996,"event_id":"$yD9DGdI9nGyg-HsWXhkft5yjkr6jvO9EBJ9ucbLVvGM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"On the other hand, that's rarely a primary concern for APL users anyway.","msgtype":"m.text"}}
{"origin_server_ts":1631029772763,"event_id":"$9mXiSuN6fJUvy1i6SqLiw_ZE_dbrWnaRS9rNyJfh3vI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I wonder how the member function is usually called. ","msgtype":"m.text"}}
{"origin_server_ts":1631029798490,"event_id":"$g-e9r_R6-Ucn12y-pvyMdSFfBRwwd_uYeqd9lBCQmJM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"My guess have been that it's mostly with a small number of values on the left side. ","msgtype":"m.text"}}
{"origin_server_ts":1631029815840,"event_id":"$SD1vTVjMtBMq8xj1vIEP0-jeMidk2kevB1LZsiAX4gk","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$5liM8JDUTgubJgycGhaN_27lN_YpOIGVptsOX48g418"}},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Here's the example:\n> ```\n> 1 2 ∊ io:print¨ ⍳100\n> ```\n\nwhy is the each neccessary here?","msgtype":"m.text","formatted_body":"
In reply to<\/a> @loke:dhsdevelopments.com<\/a>

Here's the example:<\/p>\n

1 2 ∊ io:print¨ ⍳100\n<\/code><\/pre>\n<\/blockquote><\/mx-reply>why is the each neccessary here?"}}
{"origin_server_ts":1631031292413,"event_id":"$i-aMK3EI8e2nQWWSc3LHBHkc7E1MOSXGBjSQlnwpGoc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"eris well, without it the behaviour would be different. ","msgtype":"m.text","formatted_body":"eris<\/a> well, without it the behaviour would be different. "}}
{"origin_server_ts":1631031436916,"event_id":"$YmQNYCYlewH42PrTcHuaXNAAJ4Zi4pXOp3GV8MMhFQg","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"could you explain how? ^^ im not the best at APL","msgtype":"m.text"}}
{"origin_server_ts":1631036821616,"event_id":"$yin3cBvQzBggDnY8sWMOyABEN5e4nxZLlssY30PYgMs","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"also, could someone explain deep verbs? struggling with the concept","msgtype":"m.text"}}
{"origin_server_ts":1631036831474,"event_id":"$8P48fXVD6UYNRW3iR-zF3ehSWemWzHfSL03kVnUTIQA","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"idk if it exists in APL","msgtype":"m.text"}}
{"origin_server_ts":1631036840148,"event_id":"$quhnf-TcDs_Sr8mBjC6Arr967xS0pPcbasgiH4Kvz5g","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"but it does in K","msgtype":"m.text"}}
{"origin_server_ts":1631037128016,"event_id":"$9cLvV8JULLq0EKd7kWfaJIjSpKBqvndYrw7R5Fz-md4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"io.github.mirukana.mirage.transaction_id":"9c5be5ad-dd7a-4628-a452-de5efff19d8f","body":"Like the depth-dependent search functions?","msgtype":"m.text"}}
{"origin_server_ts":1631037231852,"event_id":"$QX5Ksk1R8Afqap8vQndVM2a1LuHqedF-QGNqfyBiygI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"io.github.mirukana.mirage.transaction_id":"ca4cc60b-8637-4f47-a65b-c3ff65947803","body":"These correspond to high-rank functions in APL. Since it can use multiple dimensions instead of nesting arrays, APL primitives rarely look more than one level deep in the arguments, except for arithmetic.","msgtype":"m.text"}}
{"origin_server_ts":1631039359175,"event_id":"$txvvYA3P6A6Z7PWiVRFp_duBqKJE60ijCAf8Xqw1ZV0","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"i mean stuff like odometer as 'deep iota', and dot as 'deep range'","msgtype":"m.text"}}
{"origin_server_ts":1631039796015,"event_id":"$v7G25HvGwuUBYlMp81snovMRkFq-Gd1Be6V_gadH6gI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"03ed1144-0419-4e1e-bdb7-85fcd16bea3d","body":"Right, these are also high-rank functions in APL (there *is* a deep selection primitive called Pick, but I've never seen anyone use it to go further than one level).","msgtype":"m.text","formatted_body":"

Right, these are also high-rank functions in APL (there is<\/i> a deep selection primitive called Pick, but I've never seen anyone use it to go further than one level).<\/p>"}} {"origin_server_ts":1631039855101,"event_id":"$Gw6lg24pJZzTUlqQLYZUWge_5k6KdCq-ARQsP71NpN8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"f07c02f9-a45f-46bc-b2b9-a09cbf69ecc9","body":"I don't think the \"deep\" framing helps at all. They should just be understood as functions that work with more than one dimension, and K encodes that as nesting.","msgtype":"m.text","formatted_body":"

I don't think the \"deep\" framing helps at all. They should just be understood as functions that work with more than one dimension, and K encodes that as nesting.<\/p>"}} {"origin_server_ts":1631039959409,"event_id":"$v1tjcdH1f7mfz7rQmZ4j3B9TqQio_XlFqTXLTALjxSg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"io.github.mirukana.mirage.transaction_id":"dd9d9981-cf07-47b3-9a06-25ef09510069","body":"Well, not entirely for odometer. It has two levels, but the lists in the result are like flattened multidimensional arrays.","msgtype":"m.text"}} {"origin_server_ts":1631040184811,"event_id":"$hq0oa3GUcAYh4v_CZQt-e-mErQ2-sdQf20GsOwSydjg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"e21fac21-644e-49d8-9521-75b2ba1b4088","body":"`ngnk) 3 4 # (!3 4)[0] / probably no bot here?`","msgtype":"m.text","formatted_body":"

ngnk) 3 4 # (!3 4)[0] / probably no bot here?<\/code><\/p>"}} {"origin_server_ts":1631040203040,"event_id":"$cAnhXN6XuF1m_eY3evPbXIKMsLrziKbS54fhTf1hDD8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"8165a488-5068-44dd-ac2d-cbc058cecc54","body":"```\n(0 0 0 0\n 1 1 1 1\n 2 2 2 2)\n```","msgtype":"m.text","formatted_body":"

(0 0 0 0\n 1 1 1 1\n 2 2 2 2)<\/code><\/pre>"}}
{"origin_server_ts":1631040264421,"event_id":"$eq2S2ggnmZB6dbLSwNaAPTSGdNSukPr78XoImYDzM3A","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"io.github.mirukana.mirage.transaction_id":"91c25091-d273-47a2-8a04-8fbcbed8cfd2","body":"So if you reshape one of the result entries you can get that structure back. Odometer is a tool to work efficiently with element indices in this sort of flattened array.","msgtype":"m.text"}}
{"origin_server_ts":1631040577937,"event_id":"$YlaS_oTpm1BVHxQu4pwlZIFgQ-QymX8PBOZSKAx-Y8s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$YmQNYCYlewH42PrTcHuaXNAAJ4Zi4pXOp3GV8MMhFQg"}},"format":"org.matrix.custom.html","body":"> <@eris:chat.unix.lgbt> could you explain how? ^^ im not the best at APL\n\nWell, the ¨ causes `io:print` to be applied to each element individually. If you were to just call `io:print ⍳100` then the function would just be applied once on the entire 100 element array.","msgtype":"m.text","formatted_body":"
In reply to<\/a> @eris:chat.unix.lgbt<\/a>
could you explain how? ^^ im not the best at APL<\/blockquote><\/mx-reply>Well, the ¨ causes io:print<\/code> to be applied to each element individually. If you were to just call io:print ⍳100<\/code> then the function would just be applied once on the entire 100 element array."}} {"origin_server_ts":1631040638204,"event_id":"$kXFpz6-powVj3nibEMD_-k9NUDZLomvsRkibnC_vXls","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"In KAP, simply executing `io:print¨ ⍳100` won't cause the function `io:print` to be called at all. It will simply return an object which represents 100 invocations of `io:print` on the numbers 0 to 99.","msgtype":"m.text","formatted_body":"In KAP, simply executing io:print¨ ⍳100<\/code> won't cause the function io:print<\/code> to be called at all. It will simply return an object which represents 100 invocations of io:print<\/code> on the numbers 0 to 99."}} {"origin_server_ts":1631040673849,"event_id":"$B4k2wnjL8kMi4OB_N6BjRPsovl-HaF0WsMOwi3bUig4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thus, if you don't actually do anything with the result of one of these cells, the function will never be called.","msgtype":"m.text"}} {"origin_server_ts":1631040701613,"event_id":"$RMpJln4CptFUN1J26mK-BDQHEIYi-15k8Qo7rT3gpls","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So, if you execute the following: `↑io:print¨⍳100` then this will return 0, and will print 0.","msgtype":"m.text","formatted_body":"So, if you execute the following: ↑io:print¨⍳100<\/code> then this will return 0, and will print 0."}} {"origin_server_ts":1631053238614,"event_id":"$8coMHNVw6zbO6Ky9PwH2HB0ss7aiXd7afWYghKO7lLQ","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"ahh","msgtype":"m.text"}} {"origin_server_ts":1631053314235,"event_id":"$cWDu8l5QfHJaXqUP-E3smnHZTmt26RH12KpXTC5rn88","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"does anyone here know why in K, `n#n f/y` is equivalent to `n f/y`? ","msgtype":"m.text","formatted_body":"does anyone here know why in K, n#n f/y<\/code> is equivalent to n f/y<\/code>?"}} {"origin_server_ts":1631053346235,"event_id":"$J2xfWIMlP-Pe5DcmgNJMsf9aJPOP6Yy08m-LNLT6nPI","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"im looking at two versions of the same fibonnaci sequence function and the only notable difference between the two is their use of n#n or n","msgtype":"m.text"}} {"origin_server_ts":1631053358184,"event_id":"$XVZPWu266m6ZLMyDD4TKqneGze_ucZsYhdHAu8RGJxk","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`{x{x,+/-2#x}/!2}` and `{x#x{x,+/-2#x}/0 1}`","msgtype":"m.text","formatted_body":"{x{x,+/-2#x}/!2}<\/code> and {x#x{x,+/-2#x}/0 1}<\/code>"}} {"origin_server_ts":1631053415884,"event_id":"$AzXlDmvKDdB7XfuMyod1NcacgXRBACf2oetmehQsBaI","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"i dont know any K rooms on matrix, so you'll have to forgive my posting here ^^ ","msgtype":"m.text"}} {"origin_server_ts":1631057613203,"event_id":"$zkMbicSXu43IQbFDNaYjiQYvGVNMBlsDAvdLSfZdPVI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"66ec0d5d-0f95-47dc-83d5-e43817c9b767","body":"It's #aplfarm-k:matrix.org, added to bridge to Discord just a week or so ago.","msgtype":"m.text","formatted_body":"

It's #aplfarm-k:matrix.org<\/a>, added to bridge to Discord just a week or so ago.<\/p>"}} {"origin_server_ts":1631057672316,"event_id":"$owRJIt8NjK8HFXU9Y5Jdjah_Ub6L3sVZewsFUAfMTfc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"f63e6d1a-7dbd-4c67-97b9-f08b30eed774","body":"The `x#` in the second fibonacci examples is just to shorten it to length `x` exactly. It starts with two elements and adds one on each iteration, so it's too long by two.","msgtype":"m.text","formatted_body":"

The x#<\/code> in the second fibonacci examples is just to shorten it to length x<\/code> exactly. It starts with two elements and adds one on each iteration, so it's too long by two.<\/p>"}} {"origin_server_ts":1631057685469,"event_id":"$lL_xb__FaFAO3SvuDaGLoAh1x7j56SKF7EcW-R6CH0o","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"OH","msgtype":"m.text"}} {"origin_server_ts":1631057694139,"event_id":"$WsZnSDh-fJwVt6IJ4R1zVXToPkOouunFVdiFEZzLPaI","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"Ohhhhhhhhhhhhhhhhh","msgtype":"m.text"}} {"origin_server_ts":1631057717824,"event_id":"$z_HUNZjmhUKMc1I-KkfTFTZPL4O8kXqm1PnT0VslThU","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"i was reading x#x as an expressiom rarher than x#(x","msgtype":"m.text"}} {"origin_server_ts":1631057722057,"event_id":"$DcqhtU_IP19jWpKo3UfnDM2IIG0kUmtOsNXkVyjkQE8","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"damn maths brain","msgtype":"m.text"}} {"origin_server_ts":1631057759198,"event_id":"$uJZCafcKkxIWwR_R1hqrBgI-DqwMWIXpnnhQDVjf3Xs","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"thank you :)","msgtype":"m.text"}} {"origin_server_ts":1631057776312,"event_id":"$oAgRNxs62ASvp2s1fWst-K9VqHCfTRC-zkRAFb3Xg-s","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"io.github.mirukana.mirage.transaction_id":"c5e11bd5-f5d4-4779-adfc-7fc0b6e3a858","body":"That question makes a lot more sense now!","msgtype":"m.text"}} {"origin_server_ts":1631057875563,"event_id":"$Tsw2ySoVvuKzuerDXvbV2ZLVibk0ktL-MH0CGuDvg54","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"e2b6119c-d92a-46fe-9f77-488ef32deef3","body":"Yeah the ordering's going to take anyone some time to get used to. I don't have any way other than practice to speed it up.","msgtype":"m.text","formatted_body":"

Yeah the ordering's going to take anyone some time to get used to. I don't have any way other than practice to speed it up.<\/p>"}} {"state_key":"@garrit:matrix.slashdev.space","origin_server_ts":1631177006248,"event_id":"$k3313u-CTsqFJuWfm3am1jm6l_lz-AzfgqVNWi-k2H4","sender":"@garrit:matrix.slashdev.space","user_id":"@garrit:matrix.slashdev.space","prev_content":{"avatar_url":"mxc://matrix.slashdev.space/BIJpfJnICdwEMqWNHvMjLguf","displayname":"Garrit","membership":"join"},"type":"m.room.member","content":{"membership":"leave"},"replaces_state":"$utVSH3IXEUjDIArOImz-asWV0V5c4S50yMlUptzcg08"} {"origin_server_ts":1631182221617,"event_id":"$NacSC1me02AzoaFWPZWdKcu9Ysvf6jhGgtLPf5j2DfE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://peertube.functional.cafe/videos/watch/ca261536-471b-4cfb-90a4-7759aa7cc91e","msgtype":"m.text"}} {"origin_server_ts":1631184882800,"event_id":"$ZvlRzaQAm8MzCvpKBkJxZ8Uc4hcVkJmV4qRlNL3qA7Q","sender":"@rak1507:matrix.org","user_id":"@rak1507:matrix.org","type":"m.room.message","content":{"body":"nice","msgtype":"m.text"}} {"origin_server_ts":1632824513276,"event_id":"$1uSdLqVoAxgV2vl4BsWOEsDPg-16sTfNyKN0f5ax0gc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I've made an interesting observation.","msgtype":"m.text"}} {"origin_server_ts":1632824566968,"event_id":"$W5yKBBsgtOMvlGvzcO3mDbIN4MZsNyn51w8MGrHHNkQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So the implementation of `⍴` at its core does a `.valueAt(position % innerArray.size)`.","msgtype":"m.text","formatted_body":"So the implementation of ⍴<\/code> at its core does a .valueAt(position % innerArray.size)<\/code>."}} {"origin_server_ts":1632824590299,"event_id":"$1jsJeU5tI7GFbNBWZ9w0HFClsprmaDaLIngxzEDAAcg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"This is to create the repeating effect: `4 ⍴ 1 2` → `1 2 1 2`","msgtype":"m.text","formatted_body":"This is to create the repeating effect: 4 ⍴ 1 2<\/code> → 1 2 1 2<\/code>"}} {"origin_server_ts":1632824681034,"event_id":"$lcYNJLsC66t7T_wfFg7fJgE75uRXb3su3CJ80rBtVa4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Turns out, the modulo operation is pretty slow, so if I replace that code with\n\n```\nnewPosition = if(position < innerArray.size) position else position % innerArray.size\nvalueAt(newPosition)\n```","msgtype":"m.text","formatted_body":"

Turns out, the modulo operation is pretty slow, so if I replace that code with<\/p>\n

newPosition = if(position < innerArray.size) position else position % innerArray.size\nvalueAt(newPosition)\n<\/code><\/pre>\n"}}
{"origin_server_ts":1632824789374,"event_id":"$mwrZ-Lak7YNwr7lQTY2zoaUIb0dXHsyK1x70I_E9RaM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Then the performance of lookups are improved by 34%, as long as the position doesn't overflow to force a wrap-around.","msgtype":"m.text"}}
{"origin_server_ts":1632824918482,"event_id":"$Rz0jmkeIZ0mKwn-snBCsD1FNbkCkZCJ9yg0IE0T-jBg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, there is an ever so slight increase in runtime for the overflowing case, something like 1% or so.","msgtype":"m.text"}}
{"origin_server_ts":1632824940412,"event_id":"$rGGppgo0OaqYoQXBkSc4jGXt3J8cSdR9bIHTMvwcp_I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"half-related: wouldn't `10000⍴smallVector` cause `smallVector` to be re-evaluated way too many times?","msgtype":"m.text","formatted_body":"half-related: wouldn't 10000⍴smallVector<\/code> cause smallVector<\/code> to be re-evaluated way too many times?"}}
{"origin_server_ts":1632824965056,"event_id":"$ElT9iv5WPgTwMjOacVQ7hZnEIjkPzKv7qDKh_YFZQ5g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm making the assumption that overflowing resized arrays are rare enough that I can ignore that.","msgtype":"m.text"}}
{"origin_server_ts":1632825041835,"event_id":"$6fOmwcn7RlCgeW23mTmatu9mXSKGd_WWW9Bj13PgXv4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: You mean something like `10 ⍴ {io:println 100+⍵}¨ 1 2`?","msgtype":"m.text","formatted_body":"dzaima<\/a>: You mean something like 10 ⍴ {io:println 100+⍵}¨ 1 2<\/code>?"}}
{"origin_server_ts":1632825080483,"event_id":"$G9D8Y8sWlz7GM3kqbAxSJOpJy9Rd_mZabRnoe6g8RSY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If so, then you are right and the output from that is 10 lines printed, 101, 102, 101 etc.","msgtype":"m.text"}}
{"origin_server_ts":1632825105143,"event_id":"$VJw7uAvYHmMj_3BUlKH7SOFfb6GZ6FjGp6VvBtNOrFY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah","msgtype":"m.text","formatted_body":"yeah"}}
{"origin_server_ts":1632825107526,"event_id":"$BYCEmoGo3W92f3bYIc9Tt20qZeGdMm795bY0b9VYD9w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"You can explicitly prevent that by writing: `10 ⍴ comp {io:println 100+⍵}¨ 1 2`","msgtype":"m.text","formatted_body":"You can explicitly prevent that by writing: 10 ⍴ comp {io:println 100+⍵}¨ 1 2<\/code>"}}
{"origin_server_ts":1632825151088,"event_id":"$aL1sb5Ep__ilYnA82aoV4BEYwfNQblQtT3TKPXjQxiE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now, is this ideal? No.","msgtype":"m.text"}}
{"origin_server_ts":1632825161267,"event_id":"$ScTNYhaNMnx5g8iyYd4ZxnAy7rhudAbAke6sorgA2pE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Do I have a great solution? Also no.","msgtype":"m.text"}}
{"origin_server_ts":1632825212932,"event_id":"$JhWw2Nozq1O_YeuM-0WtOYzCRdFlrBIA2Hqp_lsZEQA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"While KAP certainly has some interesting performance characteristics, it's must harder to analyse the performance behaviour of a program compared to the same thing in Dyalog or BQN.","msgtype":"m.text"}}
{"origin_server_ts":1632825223395,"event_id":"$qTk4AVp1gVE6VAFhwjFvfnSNlspBe1KF06Q5owo1ZkM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"While KAP certainly has some interesting performance characteristics, it's much harder to analyse the performance behaviour of a program compared to the same thing in Dyalog or BQN.","msgtype":"m.text"},"m.relates_to":{"event_id":"$JhWw2Nozq1O_YeuM-0WtOYzCRdFlrBIA2Hqp_lsZEQA","rel_type":"m.replace"},"body":" * While KAP certainly has some interesting performance characteristics, it's much harder to analyse the performance behaviour of a program compared to the same thing in Dyalog or BQN.","msgtype":"m.text"}}
{"origin_server_ts":1632825282510,"event_id":"$9Xlwveumz-aL0dEc_GfPojw7qcCDi9fBoYgaHUtFDZc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"One benefit, however, is that the natural way to get a range from A to B-1 is: `A↓⍳B`","msgtype":"m.text","formatted_body":"One benefit, however, is that the natural way to get a range from A to B-1 is: A↓⍳B<\/code>"}}
{"origin_server_ts":1632825286122,"event_id":"$WUKDu0_6CUaqL8oJ10zlTirLvPSJEJOh2Q89f_UGPC8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`n⍴⊂someExpression` is a thing I do frequently","msgtype":"m.text","formatted_body":"n⍴⊂someExpression<\/code> is a thing I do frequently"}}
{"origin_server_ts":1632825291943,"event_id":"$pbsQq0JU9Ti_CcpVrQKQWcgjAhq-ih2STZYgXLKtP24","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That must be worth something :-)","msgtype":"m.text"}}
{"origin_server_ts":1632825485854,"event_id":"$vHE8-sy7_f5CVGKAXLptmEWoyaTkpE-olypCBs9p6Bs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: I haven't spent much time thinking about that specific use case.","msgtype":"m.text","formatted_body":"dzaima<\/a>: I haven't spent much time thinking about that specific use case."}}
{"origin_server_ts":1632825508158,"event_id":"$u_Zr96gh_YoKmxx-VIu8xIyp-ZEpksGZ7osrsKAV8W8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I do it too, mind you, but I've never had `someExpression` being so heavy that I even noticed it.","msgtype":"m.text","formatted_body":"I do it too, mind you, but I've never had someExpression<\/code> being so heavy that I even noticed it."}}
{"origin_server_ts":1632825527455,"event_id":"$qIA7MLprJ2kY1HnZzwf5bVWJiVVJPVEh9r2q5Kn73b4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I mean, you can always `n ⍴ comp ⊂someExpression`","msgtype":"m.text","formatted_body":"I mean, you can always n ⍴ comp ⊂someExpression<\/code>"}}
{"origin_server_ts":1632825539626,"event_id":"$lTVHcOV5bmMRnsHsa7xipmAG6LTC35tgdAgyeCLcqx8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Which is probably why `comp` needs a symbol of its own.","msgtype":"m.text","formatted_body":"Which is probably why comp<\/code> needs a symbol of its own."}}
{"state_key":"@wezl_:matrix.org","origin_server_ts":1633612783201,"event_id":"$nCLWb_eHaUk5KpPkXyaX460RiTL9PPGeALryFo3AKmk","sender":"@wezl_:matrix.org","user_id":"@wezl_:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/pNRmjCOOuOxyaYpyijiGgGPZ","displayname":"Wezl","membership":"join"}}
{"state_key":"@wezl_:matrix.org","origin_server_ts":1634679456935,"event_id":"$xBz6yQu9xJfrnG--NkPCEIqcJMZ-KbKD33kfVP02heM","sender":"@wezl_:matrix.org","user_id":"@wezl_:matrix.org","prev_content":{"avatar_url":"mxc://matrix.org/pNRmjCOOuOxyaYpyijiGgGPZ","displayname":"Wezl","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/hpEMfTnJftqMLOogPPVlhbhi","displayname":"Wezl","membership":"join"},"replaces_state":"$nCLWb_eHaUk5KpPkXyaX460RiTL9PPGeALryFo3AKmk"}
{"state_key":"@abhicherath:matrix.org","origin_server_ts":1634965075053,"event_id":"$4jVUKUtrfglwAyzkwV-f2FFrirypdXUxOKwOSXt8HCo","sender":"@abhicherath:matrix.org","user_id":"@abhicherath:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/azWxJAqsaTzSvShzwVvnRCJe","displayname":"abhicherath","membership":"join"}}
{"origin_server_ts":1638110300665,"event_id":"$3kP8KiFp-RykKQzqtrECxxl3U_9q8lQtKwf2OZjF1TM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I was bored today, so I started writing a tutorial for KAP.","msgtype":"m.text"}}
{"origin_server_ts":1638110326999,"event_id":"$OIdMZV1IXd6U64duDi5lIZjWxrB2Sn46PR97nUEg3S4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I haven't gotten the point of actually teaching much of the language, but I'm already wondering whether I'm on the right track.","msgtype":"m.text"}}
{"origin_server_ts":1638110335799,"event_id":"$nLoCyXx0s7LTFjLaOUa7Uj2GmNcSy8Z3CNZ6AB5Z7aQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Here's my work in progress: https://kapdemo.dhsdevelopments.com/tutorial.html","msgtype":"m.text"}}
{"origin_server_ts":1638186296514,"event_id":"$r7MdEcXCSo1D-TFOeaRd-5X6Q_ZSsOOh9EcGYwXJUo4","sender":"@Kooda:elynx.fr","user_id":"@Kooda:elynx.fr","type":"m.room.message","content":{"body":"I\u2019ve never touched any APL-like language and I got it. ^^ I think you\u2019re on the right track","msgtype":"m.text"}}
{"origin_server_ts":1638205732416,"event_id":"$ziBSJVNQ8_4fIsx8OxQ7UI1shfFIKRSZzk5hpgqVGg0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Kooda: thanks. The sections going into the array nature hasn't been written yet. I'll share it when I haveri more information. ","msgtype":"m.text","formatted_body":"Kooda<\/a>: thanks. The sections going into the array nature hasn't been written yet. I'll share it when I haveri more information. "}}
{"origin_server_ts":1638205746125,"event_id":"$AXHsulHkTRiaH3s6GRhyIN6Tj7SwcBWmUx5L2hFA4LU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Kooda: thanks. The sections going into the array nature hasn't been written yet. I'll share it when I have written some more. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$ziBSJVNQ8_4fIsx8OxQ7UI1shfFIKRSZzk5hpgqVGg0","rel_type":"m.replace"},"body":"* Kooda: thanks. The sections going into the array nature hasn't been written yet. I'll share it when I have written some more. ","msgtype":"m.text"}}
{"state_key":"@Kooda:elynx.fr","origin_server_ts":1638233850868,"event_id":"$dKEsP6GNU16871duBb32e8ERoW6LkbiIQFCEtHKAIto","sender":"@Kooda:elynx.fr","user_id":"@Kooda:elynx.fr","prev_content":{"avatar_url":"mxc://elynx.fr/XGWdKaNhOyzopcHpktBiLzvX","displayname":"Kooda","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://elynx.fr/KwNpmVIMSVcyATiCHclcUwLb","displayname":"Kooda","membership":"join"},"replaces_state":"$CSNJ7cI9qQ1jJWOnhdthJb_JfT2706OSBZ0v4hEPoSk"}
{"origin_server_ts":1638603138625,"event_id":"$6inTMsc9xPXYhEvqe4MFdg4ipWGAQH3JOzDEoaFfeiY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Here's my solution for advent of code day 2: https://gist.github.com/lokedhs/9397938a128290d1a8e3641d86e09d0b","msgtype":"m.text"}}
{"state_key":"@mlliarm:matrix.org","origin_server_ts":1638607299101,"event_id":"$X_GYK4YNy6Z5nQlY0xlzMG6N4-wnKUHp4lTMrrq_czE","sender":"@mlliarm:matrix.org","user_id":"@mlliarm:matrix.org","type":"m.room.member","content":{"displayname":"Mi. Lia.","membership":"join"}}
{"state_key":"@mlliarm:matrix.org","origin_server_ts":1638607466316,"event_id":"$LV9q5QKs5Kfp2h4J14HJxydRHNJowBoG9w0iiZkeaE8","sender":"@mlliarm:matrix.org","user_id":"@mlliarm:matrix.org","prev_content":{"displayname":"Mi. Lia.","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/omPXkgzxCMHgjKyZfIelhYnH","displayname":"Mi. Lia.","membership":"join"},"replaces_state":"$X_GYK4YNy6Z5nQlY0xlzMG6N4-wnKUHp4lTMrrq_czE"}
{"state_key":"@mlliarm:matrix.org","origin_server_ts":1638609774260,"event_id":"$FIC5rCp0cXM4bGmFDwK__tj4fh3RwauUo6tgYEElKgs","sender":"@mlliarm:matrix.org","user_id":"@mlliarm:matrix.org","prev_content":{"avatar_url":"mxc://matrix.org/omPXkgzxCMHgjKyZfIelhYnH","displayname":"Mi. Lia.","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/omPXkgzxCMHgjKyZfIelhYnH","displayname":"milia","membership":"join"},"replaces_state":"$LV9q5QKs5Kfp2h4J14HJxydRHNJowBoG9w0iiZkeaE8"}
{"origin_server_ts":1638810724404,"event_id":"$cviwicO6woNzz08AplE1F_vsGYopx6kAgGsbEHcmUoo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And I've now created a solution for day 3: https://github.com/lokedhs/array/blob/master/demo/advent-of-code-2021/part03.kap","msgtype":"m.text"}}
{"origin_server_ts":1638814910467,"event_id":"$Dki5PczXWPMwNNszUgwaBW3tD86mHMmQbO1n04eVVjI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In working on some of the advent of code solutions, I decided to fix any UI issues I had while doing it. That forced me to fix a bunch of issues, and now there is even a break button. :-)","msgtype":"m.text"}}
{"state_key":"@wezl_:matrix.org","origin_server_ts":1640144551499,"event_id":"$yLpEWlfVBAZpyR7bozLZEeyTIgIMo0Hixa8j6n9NkeE","sender":"@wezl_:matrix.org","user_id":"@wezl_:matrix.org","prev_content":{"avatar_url":"mxc://matrix.org/hpEMfTnJftqMLOogPPVlhbhi","displayname":"Wezl","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/dyNrwZmeDGpZGcmyCIrRCNNO","displayname":"Wezl","membership":"join"},"replaces_state":"$xBz6yQu9xJfrnG--NkPCEIqcJMZ-KbKD33kfVP02heM"}
{"state_key":"@wezl_:matrix.org","origin_server_ts":1640203072324,"event_id":"$kjcQZGXn1VqAEswnEt-LZIYkhnmIBlNzU5SxD5ipgrY","sender":"@wezl_:matrix.org","user_id":"@wezl_:matrix.org","prev_content":{"avatar_url":"mxc://matrix.org/dyNrwZmeDGpZGcmyCIrRCNNO","displayname":"Wezl","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/WbOVUSDySxplCXwDDymDFbfA","displayname":"Wezl","membership":"join"},"replaces_state":"$yLpEWlfVBAZpyR7bozLZEeyTIgIMo0Hixa8j6n9NkeE"}
{"state_key":"@wezl_:matrix.org","origin_server_ts":1640203687667,"event_id":"$9f5FNiAYbhkGJ3ZZf64PgPSOcIjWSAePbL89MNnDhic","sender":"@wezl_:matrix.org","user_id":"@wezl_:matrix.org","prev_content":{"avatar_url":"mxc://matrix.org/WbOVUSDySxplCXwDDymDFbfA","displayname":"Wezl","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/lTayEfWpTmlptDdvHpxVHbmP","displayname":"Wezl","membership":"join"},"replaces_state":"$kjcQZGXn1VqAEswnEt-LZIYkhnmIBlNzU5SxD5ipgrY"}
{"state_key":"@russtopia:matrix.org","origin_server_ts":1640940571486,"event_id":"$OeuOl-MdsyvBoTkC7TWa3pgBvBVeGJl9qfTxYqoFBAY","sender":"@russtopia:matrix.org","user_id":"@russtopia:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/vQSDrneMoCtCxCTmjISBXXeZ","displayname":"russtopia","membership":"join"}}
{"origin_server_ts":1641115902200,"event_id":"$A-S2KHmVovOiZe_TtwYCkFvX7wxI86pDORWIaYllgFo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Some work on my \"KAP for APL programmers\" doc:","msgtype":"m.text"}}
{"origin_server_ts":1641115902819,"event_id":"$RGoT8Cl8CaJfKRaF2vodry3cnBLUuHILluQ4bjsBWI0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/kap-comparison.html","msgtype":"m.text"}}
{"origin_server_ts":1641317984042,"event_id":"$Kv0ItTPij1sdHUgrRrpATfKUz7mt6-ROFOxpz8Lnxug","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"After implementing all of the language, on multiple platforms, writing about 1200 tests, etc, etc. The one thing that has stumped me is how to properly control fonts in JavaFX.","msgtype":"m.text"}}
{"origin_server_ts":1641317996274,"event_id":"$K6yhwv-10RqkQwC6bMuwvIsRZF1n7gjcOHHHt9QBiKw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Beaten by UI programming. Of course.","msgtype":"m.text"}}
{"origin_server_ts":1641320421693,"event_id":"$vqkIJOUDbKPa_sSc02ztWSdINgKtEbVmKMb4ypKJgQA","sender":"@Kooda:elynx.fr","user_id":"@Kooda:elynx.fr","type":"m.room.message","content":{"body":"Heh, as usual ^^'","msgtype":"m.text"}}
{"origin_server_ts":1641320465997,"event_id":"$3Ba95bENlUP4ygfDehYPHqRJnk5vCGQ-_GoVZ6P7rpQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"managing fonts sucks","msgtype":"m.text","formatted_body":"managing fonts sucks"}}
{"origin_server_ts":1641320681641,"event_id":"$15i2rNTf_ue0L_A8dMq-9VycOE53qR7pZXUMJ556_w0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Processing doesn't have any font fallback (at least in some of its modes), so my APL & BQN apps, which use APL385/BQN386, just have ugly boxes when a character isn't in the hard-coded font","msgtype":"m.text","formatted_body":"Processing doesn't have any font fallback (at least in some of its modes), so my APL & BQN apps, which use APL385/BQN386, just have ugly boxes when a character isn't in the hard-coded font"}}
{"origin_server_ts":1641345403459,"event_id":"$YElf_Azg39HnTDyiwnZTEhxxuTuOSSlKzGl0qbVXrKs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: The KAP client ships the default fonts as part of the distribution. That helps things. My problem is changing the font in realtime.","msgtype":"m.text","formatted_body":"dzaima<\/a>: The KAP client ships the default fonts as part of the distribution. That helps things. My problem is changing the font in realtime."}}
{"origin_server_ts":1641345473148,"event_id":"$r4z5jPfGua0l8enn48zC5KRZ79yEniaHvGbYJbxQREU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I can kinda do it by messing with the JavaFX CSS, but I can only do so by adding a new  style entry, so every time I change font the style grows.","msgtype":"m.text"}}
{"origin_server_ts":1641345496695,"event_id":"$5fhsIlfbl6_6czrN0R0Vw0gZ5mu4dhy_EsH2kjMkE3c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"JavaFX uses CSS for styling, but it's not a web application.","msgtype":"m.text"}}
{"origin_server_ts":1641345506832,"event_id":"$iaIOB62eE3V8dWj5IdL3tqcHgfy6JyJTG7wFaZpnq6g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"JavaFX uses CSS for styling, but it's not a web application. It just uses the same method.","msgtype":"m.text"},"m.relates_to":{"event_id":"$5fhsIlfbl6_6czrN0R0Vw0gZ5mu4dhy_EsH2kjMkE3c","rel_type":"m.replace"},"body":" * JavaFX uses CSS for styling, but it's not a web application. It just uses the same method.","msgtype":"m.text"}}
{"origin_server_ts":1641388190446,"event_id":"$g2ATRL4hpPsDD_HMm5V0QYJkvhdH6F483CXnu5mSKRM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"oh god css","msgtype":"m.text","formatted_body":"oh god css"}}
{"origin_server_ts":1641634220257,"event_id":"$WLuP-cgm52amYPeywNpkTMOh69l8nfgs8NFqNFJg46Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Some more work on the GUU","msgtype":"m.text"}}
{"origin_server_ts":1641634222647,"event_id":"$Ntog_6qpVU_J8s_xWBook42GaBvbike0J_vyUIYg_T4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Some more work on the GUI","msgtype":"m.text"},"m.relates_to":{"event_id":"$WLuP-cgm52amYPeywNpkTMOh69l8nfgs8NFqNFJg46Q","rel_type":"m.replace"},"body":" * Some more work on the GUI","msgtype":"m.text"}}
{"origin_server_ts":1641634224713,"event_id":"$jxUMUZmf7XzdN7jg6dc9V-m9Lj_wDCJA766I7pLeQOw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"image.png","msgtype":"m.image","url":"mxc://dhsdevelopments.com/aqkZwlzIgCYGBFXGyeEadcRt","info":{"xyz.amorgan.blurhash":"L0SF;L0000?b000000IU00n4=|kC","size":111666,"thumbnail_info":{"size":53528,"w":724,"h":600,"mimetype":"image/png"},"w":1365,"h":1130,"mimetype":"image/png","thumbnail_url":"mxc://dhsdevelopments.com/OhmbKXlnfvZGgXSMpykugwAG"}}}
{"origin_server_ts":1641634416893,"event_id":"$Mj71eJiaDbAQV4grgeDAekx9PNoYJgLYi0B7HxzXPgE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"With filter editor.","msgtype":"m.text"}}
{"origin_server_ts":1641634418072,"event_id":"$hGW9xBjoAmkaa26a7-sPyQ_XrJTnlg5mlWbWJ2Zc2JM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"image.png","msgtype":"m.image","url":"mxc://dhsdevelopments.com/bkZIqnobSjOwFubNBlXnntwn","info":{"xyz.amorgan.blurhash":"T3R{#?00jF000L%M0JxGWB~A~VIU","size":84894,"w":677,"h":732,"mimetype":"image/png"}}}
{"origin_server_ts":1641657303160,"event_id":"$2d3und4DRnJmS_sPW0x0OfFfz-kk29G1uIRroiaOCss","sender":"@Kooda:elynx.fr","user_id":"@Kooda:elynx.fr","type":"m.room.message","content":{"body":"neat!","msgtype":"m.text"}}
{"origin_server_ts":1642930335928,"event_id":"$UBX04ytBy0P_8O_2Xd2OYHeQzQalNDETgrroW_sg2_A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"New website and a completely rewritten web client: https://kapdemo.dhsdevelopments.com/","msgtype":"m.text"}}
{"state_key":"@razetime:matrix.org","origin_server_ts":1643378230782,"event_id":"$mM52LMYrH1V1vQTpLY2w1jDbhglQcN9AyJX8u-8Zd6A","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","prev_content":{"avatar_url":null,"displayname":"Razetime","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/eghgQWtuJYjqvWFIcQQXQrwa","displayname":"Razetime","membership":"join"},"replaces_state":"$beMwPgRV43Yx3ISKjiAz2Eeqa3_N3SC8jK0vfckkLZE"}
{"origin_server_ts":1643378322162,"event_id":"$TBRsi6w-Qe5acGZOwHfttKAd6fI2Sdch3qRIzJPfddM","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"What is KAP good at","msgtype":"m.text"}}
{"origin_server_ts":1643378325959,"event_id":"$ujGmIFAJcMx5ApGIdOJSZ9i6-iXZguHUziJyNwkKQAA","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"as compared to other APLs","msgtype":"m.text"}}
{"origin_server_ts":1643393170494,"event_id":"$mkNg8z8oE-dXLbEX2eKvqpWeE0Y3BRLhg8gnTYWIH4g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Razetime: That depends. It's a loaded question. :-)","msgtype":"m.text","formatted_body":"Razetime<\/a>: That depends. It's a loaded question. :-)"}}
{"origin_server_ts":1643393295451,"event_id":"$bPvptuW7iOwkPGQhxmPloEv9CuN28Pxx-aSXDISppWE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The idea is to make it more practical for \"regular\" programmers. There are some tasks for which a classic APL approach is inconvenient. The idea is to not punish a programmer if they want to do things imperatively.","msgtype":"m.text"}}
{"origin_server_ts":1643393487451,"event_id":"$6aRIa15IpqgV_4fKqQI0KVyWyUbK-9M_fTIvzLgSqDo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So ideally, I will have a language that allows you to ease a new programmer into APL without throwing them in at the deep end. If you want to do loops and if statements, then one shouldn't be punished for it.","msgtype":"m.text"}}
{"origin_server_ts":1643393568226,"event_id":"$tbNpp8FojeHzgileeh1Nwf-isK2uT4tCV40iAKHOyqc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The other side is data exploration. I'm currently working on a part of the UI which is essentially a spreadsheet. It looks very much like one, and allows you to browse and edit your data (it can also import Excel and CSV files).","msgtype":"m.text"}}
{"origin_server_ts":1643393635599,"event_id":"$wjPbGV6oC3ret6nyM5kwdzgYZccjmsin3TwUqwYP3PM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And the idea is that you can write KAP expressions in cells to compute the values directly from the UI.","msgtype":"m.text"}}
{"origin_server_ts":1643393693163,"event_id":"$lAGatk96ckiM6x1729oCoJTODFppEQ0OQuMpjmArQ_0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have already added some basic graphing capability as well (although you need to do it from the REPL right now. You can't create the graphs by clicking yet :-) )","msgtype":"m.text"}}
{"origin_server_ts":1643421330731,"event_id":"$5MzRkEw0fyKF4jo4iPuHstJ_cyiXLEihBk158mLgRSc","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"I see.","msgtype":"m.text"}}
{"origin_server_ts":1643421337349,"event_id":"$mX8pXskObH1RxWnqfQ8rJewhA_Qotr77i9k0n0CATek","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"very cool","msgtype":"m.text"}}
{"origin_server_ts":1643481208667,"event_id":"$Y3d_BCfODGs4Ok6RvU0c7u5ruSG8wTqcQeNePobSvWU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I made two videos of what I'm working on:","msgtype":"m.text"}}
{"origin_server_ts":1643481213834,"event_id":"$iyMnGEHvpCF82Q7TeyW9HajNvv1782m9ZCrQdr4nuZo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://peertube.functional.cafe/w/fu8yk5LhC2FXCvgVVAbPbZ","msgtype":"m.text"}}
{"origin_server_ts":1643481219237,"event_id":"$2sUdulSpZVOsULRQQlSSKXExo3kDScP95v6I6AA_YxU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://peertube.functional.cafe/w/82Va6A4V3DnGfdAU2CQKyg","msgtype":"m.text"}}
{"origin_server_ts":1643509345962,"event_id":"$mn9Pep2YaB80kZEmI_MjScmTqlw3OytIFXW9cP8IQDE","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"this looks great","msgtype":"m.text"}}
{"origin_server_ts":1643512276191,"event_id":"$SYD3F5OdCLNXpgkZHQ76eXjG8yjNDYZlnX4IKkaqQ9M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks","msgtype":"m.text"}}
{"origin_server_ts":1643514002428,"event_id":"$7cbTUeaoP-FBrUy4wfQl5MaTD_hmWemyhyAlbEKHReY","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"I should try using this","msgtype":"m.text"}}
{"origin_server_ts":1643514014708,"event_id":"$06Vw3xoBjEIbJjDLmg29RSKooZmnRGPu7jfzJD517Aw","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"jvm *should* build anywhere","msgtype":"m.text","formatted_body":"jvm should<\/em> build anywhere"}}
{"origin_server_ts":1643516178325,"event_id":"$sdjHjnkUZyIDYVrDDGrJE-Hq7JZxAppVC3hJk7wKC10","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. I tried it on Windows. Worked fine there ","msgtype":"m.text"}}
{"origin_server_ts":1643516227406,"event_id":"$5J4DgbJcNnrAP7MzYNCCFb03ZZ3yMHUV5gVTA_UJFUA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm still actually working on foundations, but any impressions you might have just looking at it would be appreciated. ","msgtype":"m.text"}}
{"origin_server_ts":1643517033203,"event_id":"$GtQpMnaSS5EldiHUdnjO6HsL9ffQifsAAdn8i7dfVPc","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"i'm on linux but it should be fine, jvm after all","msgtype":"m.text"}}
{"origin_server_ts":1643517108346,"event_id":"$yuhASgbKAtD7HqGlsHye3KLDmH-4G8jhQ-OiApjb3hM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah. I only test on Linux. ","msgtype":"m.text"}}
{"origin_server_ts":1643517130251,"event_id":"$4dvosCSccrUeDdt1euepmurSBwSUrGosehyqTjAwrC0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But the JVM version only uses Java libraries (nothing native) so it should work. ","msgtype":"m.text"}}
{"origin_server_ts":1643517207690,"event_id":"$Um4SyggZUCZc3uLX0o1mMPFEkeZBPntLauV2Mt1abCE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh wait, it does link the SQLite library, which is native. But the test cases ran give on windows. I don't think it's ever been tested on OSX. ","msgtype":"m.text"}}
{"origin_server_ts":1643517563721,"event_id":"$9Ql4Km8hc-6FUql7cX-DwhWaNGFEpmIuVWHCi-81MjI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Anyway, if you you try it you'll find a bunch of bugs. Since I kinda instinctively navigate around there bugs, I don't really want notice them until I rewatched the video clip. ","msgtype":"m.text"}}
{"origin_server_ts":1643517576989,"event_id":"$RvjCA_UszsMAZ7e8JG-1jJNbFWsDHWfObcv2BPlMfaE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Som any reports on silly bugs would be appreciated. ","msgtype":"m.text"}}
{"origin_server_ts":1643517695816,"event_id":"$aMJ5rI1qL3vc3G26XxzIMXyCULxWujUvUlNFQM38JWg","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"surely","msgtype":"m.text"}}
{"origin_server_ts":1643517701153,"event_id":"$-ug4duVl1Ist-sUncxGqA-V59SiPvPTTtv9oqiRRkEM","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"umm let me get gradle","msgtype":"m.text"}}
{"origin_server_ts":1643518360239,"event_id":"$9_SIfLs-R7uduw4SRigc7YTqrQBzftkmIbBDBbnuaCo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There should be no need. ","msgtype":"m.text"}}
{"origin_server_ts":1643518380427,"event_id":"$twltkkZBHIJXy2ppf1uGago7XUii2FvAK-6P4z0cy9Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Just run gradlew in the root directory. It will download everything, including Gradle. ","msgtype":"m.text"}}
{"origin_server_ts":1643518577409,"event_id":"$FFKuUJSSmARSTsoQWc3MJy7qTz0JBf7h4MnjRUkKv-0","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"oh i see","msgtype":"m.text"}}
{"origin_server_ts":1643538712997,"event_id":"$21HNXScVPAX-lc5emvyRXq1CMqDQhYr6krHI_H4uJUg","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"in GUI it would be nice to have the array editor say the the variable as been assigned to successfully somewhere","msgtype":"m.text"}}
{"origin_server_ts":1643538734609,"event_id":"$NHzLRXn70SxFGJxz3rquslLul7KHT9UrarPuhwcgDkI","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"quite funny that I can reassign primitive symbols","msgtype":"m.text"}}
{"origin_server_ts":1643543643203,"event_id":"$qeMV-5FhTN__SjD2nuZ-9v9HceEAxUjFPBRNaYGdfC4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. You're right. ","msgtype":"m.text"}}
{"origin_server_ts":1643543665428,"event_id":"$HSyBeW7ILZaMt9BiGAtDlpDaILHTdVzb1b7tmnEPafc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It displays an error dialog if it fails, but there is no no indication of the success. ","msgtype":"m.text"}}
{"origin_server_ts":1643543679865,"event_id":"$gP6d43MC6aa1Q8ZFlv6VAoMbLjiajItDTWzESwMkFsQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You can make your own primitive symbols as well. ","msgtype":"m.text"}}
{"origin_server_ts":1643543689196,"event_id":"$RKBgHmmH72VTm5_L1IY9-wAzMpCOselIOSgMECPK2Ig","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You simply declare them as such. ","msgtype":"m.text"}}
{"origin_server_ts":1643543707003,"event_id":"$iy5GiFTawOC4jKx5hgD8wUiegrBr4dwr_BCWyy3Elzw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Check structure.kap to see how it's done. ","msgtype":"m.text"}}
{"origin_server_ts":1643543730512,"event_id":"$XB5IQKFPTZZG72PsLjD2xv_-xWdGiQ-5TVsKbWwCgDg","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"ah that is quite neat","msgtype":"m.text"}}
{"origin_server_ts":1643543765566,"event_id":"$n5x0l2taHvRgoXGTtiX6jcuq8Lu06DHAXHXkurd59AE","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"will check structure.kap wonder what metaprogramming capabilities there are","msgtype":"m.text"}}
{"origin_server_ts":1643544709818,"event_id":"$U1Bv1yMx0JWCM8aWTNPVv81hOuwUUDgYaEiYUk9mozQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's there, but not as expansive as Lisp ","msgtype":"m.text"}}
{"origin_server_ts":1643544722656,"event_id":"$wnoSu4VWDwfhk1AcGO_3_-u0_19hG-47yPTwm1FlS2I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Check the same file to see how if is implemented. ","msgtype":"m.text"}}
{"origin_server_ts":1643544776490,"event_id":"$YCKAQuIJrXPD5TbmldVMeC0noijyXV38GIDSu-yxcUg","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"kewl","msgtype":"m.text"}}
{"origin_server_ts":1643551183737,"event_id":"$BX3-jXYriQUtISez2dT9hf9Ti5y-SGFyGEPJOTSTiKE","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"kap.jpg","msgtype":"m.image","url":"mxc://matrix.org/JCayJGdNqsMwEcKLaFtiEzZs","info":{"xyz.amorgan.blurhash":"LTH{1k9Z00%M-qj[ofay00%M~qM{","size":231720,"thumbnail_info":{"size":94928,"w":800,"h":450,"mimetype":"image/jpeg"},"w":1920,"h":1080,"mimetype":"image/jpeg","thumbnail_url":"mxc://matrix.org/aKdARysnRbHWAngLIXPMXnUa"}}}
{"origin_server_ts":1643551236769,"event_id":"$9xCqWteohKr1yEi5612dQpkQD2hX_mytaolchlxevtI","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"is support for expressions a future thing in the editor","msgtype":"m.text"}}
{"origin_server_ts":1643555066034,"event_id":"$BDVITGxPT5onAoeDwqRbZ8_B4BeWJp0yP1YUgW64mWY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ove thought about it. ","msgtype":"m.text"}}
{"origin_server_ts":1643555072244,"event_id":"$hj5Mm1ppNd1JzSct45vrzhCicBhD3hsUPCsq2kGtaY0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It would be trivial to do ","msgtype":"m.text"}}
{"origin_server_ts":1643555303205,"event_id":"$jOA-VHWh8daoM1OVqGeXXlTVLlaIqCbh1X3rN-Dd2H8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, if its do that, I would be prefer it to be a separate command. ","msgtype":"m.text"}}
{"origin_server_ts":1643555633519,"event_id":"$CXNpMxdoFZc_PwPr6JOiQQocU9xfl3TdnE_F0YTk7Zw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"However, if I do that, I would be prefer it to be a separate command. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$jOA-VHWh8daoM1OVqGeXXlTVLlaIqCbh1X3rN-Dd2H8","rel_type":"m.replace"},"body":"* However, if I do that, I would be prefer it to be a separate command. ","msgtype":"m.text"}}
{"origin_server_ts":1643555710795,"event_id":"$1qsIFe4SgCz2iAQ74J_yghKf02iXKbwE-K_uWUZqHlM","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"ah figures","msgtype":"m.text"}}
{"origin_server_ts":1643557196211,"event_id":"$JGa0EtPUhRB0WpYRavYSfIEnrwVITzSxlcS9Erjh-KE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Perhaps just pressing control-e on a cell allows you to evaluate an expression to put in the cell. ","msgtype":"m.text"}}
{"origin_server_ts":1643559275938,"event_id":"$lkWB6LhmGRPb7k8VkVWBeFrht7cug4L8et9MB-NvxVE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have an idea: How to about this. Select a range of cells. Type control-e and type an expression. The result of the expression will be reshaped to the dimensions of the selection and inserted into the array editor. ","msgtype":"m.text"}}
{"origin_server_ts":1643562245644,"event_id":"$-utJIl28Xsb0L44DFAH2JCPGPZPH7OmHJGylAPgp2gA","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"interesting idea but in my head it looks a bit strange.","msgtype":"m.text"}}
{"origin_server_ts":1643562264506,"event_id":"$az17UOF0qllMZEfpU66JIKDnqpQOxaTu6vkXgbnGyQs","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"but it is quite cool. a sort of multidimensional amend.","msgtype":"m.text"}}
{"origin_server_ts":1643586824379,"event_id":"$vL6cCLILMuTsg6gRCokySWisEm4SpdAg59XNyhZ7290","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I probably explained it badly. I'll implement it today and show you. ","msgtype":"m.text"}}
{"origin_server_ts":1643801621465,"event_id":"$4JTJ9KmcNdTNrTjucfm3r-g21-u7bw5O1Ag-tjx45xg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Razetime: I finally implemented the feature I was talking about. This is how it looks: https://peertube.functional.cafe/w/toA5K72QvxQvxzQAY532d5","msgtype":"m.text","formatted_body":"Razetime<\/a>: I finally implemented the feature I was talking about. This is how it looks: https://peertube.functional.cafe/w/toA5K72QvxQvxzQAY532d5"}}
{"origin_server_ts":1643801631255,"event_id":"$2l4rfr8hKAeARKNIjJ01lzz24ZiACpK4XFwrCNWw2XQ","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"oh nice","msgtype":"m.text","org.matrix.msc1767.text":"oh nice"}}
{"origin_server_ts":1643801681125,"event_id":"$ETuVg7t7UtgnMSu0FDcipdWkCa7Tz4JUqy_swgcgpAw","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"it's so beautiful","msgtype":"m.text","org.matrix.msc1767.text":"it's so beautiful"}}
{"origin_server_ts":1643801942581,"event_id":"$JPmK-SCXhMlnm5J0-zUCRHlIXGETlIbiczAV2oBln2A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Look at this massive patch needed to implement this. I'm not proud.","msgtype":"m.text"}}
{"origin_server_ts":1643801943139,"event_id":"$WZnO3DDCXAlBHIomUUQ0CM2wmIR0ZvcE-x8WKdhMdPc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://github.com/lokedhs/array/commit/50a665fd8e1954a72c0522919bfdbbab38a62268","msgtype":"m.text"}}
{"origin_server_ts":1643802011856,"event_id":"$dfIxHRCfxsCjy41RxNIjSCq2GZXCBiwCE8UH-CUg9yE","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"to be fair it doesn't look easy..","msgtype":"m.text","org.matrix.msc1767.text":"to be fair it doesn't look easy.."}}
{"origin_server_ts":1643802030268,"event_id":"$6M_qclD5-7qmXPre1jShb4Xj4MBm7EQzJsXKR_XTEYA","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"did the one major user of KAP request it?","msgtype":"m.text","org.matrix.msc1767.text":"did the one major user of KAP request it?"}}
{"origin_server_ts":1643802050134,"event_id":"$3d-uDH-CMvrL9hyQCSu31jkLKaRPp-6pb2ZGl9vciIE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Well, it's more like the code is pretty ugly. I try to keep the code for the language engine clean, but in the GUI I'm much more lax.","msgtype":"m.text"}}
{"origin_server_ts":1643802060506,"event_id":"$haTwC-4SZE_YfbxyY4FfutIh5r0ZHm5Z79wEjWL0h1w","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"I see","msgtype":"m.text","org.matrix.msc1767.text":"I see"}}
{"origin_server_ts":1643802087756,"event_id":"$8Kv4eE-guc2hBPWv4ZPxaL3_J_gxK6Z9kWlGhlQVPCA","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"I'm walking through the \"Crafting interpreters\" book and it's quite difficult lol","msgtype":"m.text","org.matrix.msc1767.text":"I'm walking through the \"Crafting interpreters\" book and it's quite difficult lol"}}
{"origin_server_ts":1643802117347,"event_id":"$4b4ve9htbhdN2Uy_Q-oHbLdhE47TAFCACnqRctF2aDI","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"wonder how i'd change this format for an array language","msgtype":"m.text","org.matrix.msc1767.text":"wonder how i'd change this format for an array language"}}
{"origin_server_ts":1643803480519,"event_id":"$vYACXlPM67rBzgJSp51Tq2K0cC-_rFBFylQvA5JLw48","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Razetime: I see. I haven't read it. In fact, I've never read any material on how to build languages. I do have practical experience with it though, and I have been messing around in various implementations in the past.","msgtype":"m.text","formatted_body":"Razetime<\/a>: I see. I haven't read it. In fact, I've never read any material on how to build languages. I do have practical experience with it though, and I have been messing around in various implementations in the past."}}
{"origin_server_ts":1643803595735,"event_id":"$AwhkQF2v9XbwGzI4yjYusIYIA7isfXpyfA3IT2RbG70","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'd say the KAP parser has a few unusual implementation features. Especially the parser is doing things that some people would consider quite dirty in order to make sure that it can remain a left-to-right one token lookahead parser.","msgtype":"m.text"}}
{"origin_server_ts":1643803606861,"event_id":"$T2TZ4yOSzz0Dq6j0ZWllF2o3qsOheWzs1qJMmHXIOSI","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"interesting","msgtype":"m.text","org.matrix.msc1767.text":"interesting"}}
{"origin_server_ts":1643803670090,"event_id":"$8rr_7W6q8nWezhHrrGmLuPmYI8nhzwhZNMkodOqCsrM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Also, I have had to make some changes to APL syntax in order to make parsing clean as well. APL traditionalists will not agree, but the benefits are remarkable (as in, no performance impact of using dfns)","msgtype":"m.text"}}
{"origin_server_ts":1643803801751,"event_id":"$Qwbev5VeWsp5VZ_geQgknFcHg6f4Qawfa4Uyia6-GV8","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"oh wow","msgtype":"m.text","org.matrix.msc1767.text":"oh wow"}}
{"origin_server_ts":1643803902545,"event_id":"$zkDPL5hUF06GK-F9dAlqjYkYFPSOnbsccBmsPlBu-P8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Compare the performance of `+/X` vs. `{⍺+⍵}/X`","msgtype":"m.text","formatted_body":"Compare the performance of +/X<\/code> vs. {⍺+⍵}/X<\/code>"}}
{"origin_server_ts":1643803915680,"event_id":"$mvb1vjS8insqKlQaI_hVqVguu9W4aso6oflxvoZ_73E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In an APL such as Dyalog.","msgtype":"m.text"}}
{"origin_server_ts":1643804016695,"event_id":"$cUF0Bc3omZkhe-PQ2Orwh3GElloQ8C4lDxruKiSfX5M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(oops, that example is a bit broken in KAP right now)","msgtype":"m.text"}}
{"origin_server_ts":1643804093700,"event_id":"$NaDG-JGyXRDV8nkNKiMWl-0nUD7eQtUJ6G5mGxTzaiI","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"oh no lol","msgtype":"m.text","org.matrix.msc1767.text":"oh no lol"}}
{"origin_server_ts":1643804098010,"event_id":"$_tKmppqOCpe2N-cbUJh9htEWst6ICSIdBXwj_xMF9aY","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"let me pull KAP","msgtype":"m.text","org.matrix.msc1767.text":"let me pull KAP"}}
{"origin_server_ts":1643804181306,"event_id":"$akFQ5XnFwA7v09hKIGbiSX4Z3n7-ZOj2eQCEaHXIqI4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Not broken, as in crashes or bugs out","msgtype":"m.text"}}
{"origin_server_ts":1643804199033,"event_id":"$fMMmngl8jAd5iBeQ-oUi2fXSdPBd_-wgAEKAGaYN2ZE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It's just that the `{⍺+⍵}` case is slower than it should be at the moment.","msgtype":"m.text","formatted_body":"It's just that the {⍺+⍵}<\/code> case is slower than it should be at the moment."}}
{"origin_server_ts":1643804228784,"event_id":"$9CUbKO1gzDI1fC7nthXrQUm01dFaeOeFUG1WB4Cj97s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's because I changed the way stack frames are allocated, so each function call has more overhead now.","msgtype":"m.text"}}
{"origin_server_ts":1643804256447,"event_id":"$tILbsylrxcGQ1NVcWbsGNu2xQdAbWp1Vit6W-fd0O8k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's still not as bad as the case in APL where everything needs reparsing.","msgtype":"m.text"}}
{"origin_server_ts":1643804262142,"event_id":"$hs47A2IhGL_DccVAQ2vl4TNBK9pQmlHqJsC2dZBAao8","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"i see","msgtype":"m.text","org.matrix.msc1767.text":"i see"}}
{"origin_server_ts":1643804281478,"event_id":"$0qNk6yrmpDt1VnjEeqVDqIPDvu39Key_MliuvTezy74","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"so is it a possibility that the \"no overhead\"  part can be achieved again","msgtype":"m.text","org.matrix.msc1767.text":"so is it a possibility that the \"no overhead\"  part can be achieved again"}}
{"origin_server_ts":1643804293792,"event_id":"$MrBUjuTiHHFcdhov5FNO9ZCQZprP4YRZc4d-XUy2K-Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. Or at least minimal overhead.","msgtype":"m.text"}}
{"origin_server_ts":1643804367995,"event_id":"$DW-JUCGl-KKp477qcu8q7kQv2qiWjdztjpQMCx3JfWw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The problem is that the stack frames are recomputed on every call (finding all the references and copying them to the local frame), instead of resolving everything at compile time, and just reference the outer frames directly.","msgtype":"m.text"}}
{"origin_server_ts":1643804415323,"event_id":"$43dFc2GuCdPaxR44eOQB-rNQgUWKN-6oOvpTRdFDWsA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I did it this way now because it was the easiest way to get closures working. I simply assume that all code _could_ be part of a closure, so it can't rely on the outer stack frames being available when the function is called","msgtype":"m.text","formatted_body":"I did it this way now because it was the easiest way to get closures working. I simply assume that all code could<\/em> be part of a closure, so it can't rely on the outer stack frames being available when the function is called"}}
{"origin_server_ts":1643804438659,"event_id":"$Y60QSPZa2AbyywVwed6KXhUK84lzyw9W44OZQjaT8zc","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"btw i think putting `⍬` insert expression throws an error"},{"mimetype":"text/html","body":"btw i think putting ⍬<\/code> insert expression throws an error"}],"format":"org.matrix.custom.html","body":"btw i think putting `⍬` insert expression throws an error","msgtype":"m.text","formatted_body":"btw i think putting ⍬<\/code> insert expression throws an error"}}
{"origin_server_ts":1643804453304,"event_id":"$kdKmHLdK3VfznYbRSYa0UnnNltHLK2g-A8F6RFx4m8Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Not surprising :-)","msgtype":"m.text"}}
{"origin_server_ts":1643804509923,"event_id":"$JQ5FMY-HbtlgLNFnm0OTS4lYaodfBUiBy_RBXOUA4mo","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"oh there's no fills at all","msgtype":"m.text","org.matrix.msc1767.text":"oh there's no fills at all"}}
{"origin_server_ts":1643804517544,"event_id":"$87U8n05YH1zyRu05Ui4pMIwh98OyLspk4Gdx7m2_EKI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, it works if you edit a single cell.","msgtype":"m.text"}}
{"origin_server_ts":1643804534216,"event_id":"$wc-Ugp1iAAAutam3VKRDLJxxe8iKc8WaIWsziD-xctk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"KAP has fills (only 0 though). But the editor doesn't use them.","msgtype":"m.text"}}
{"origin_server_ts":1643804555707,"event_id":"$D0CtZtDab4A2e7Vv0QFOBwyzijue2PFxdxYq4DMUqQQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I probably should have, instead of simply iterating over all the elements.","msgtype":"m.text"}}
{"origin_server_ts":1643804557860,"event_id":"$akKb-m0mKNfIBXE-ZQb0EJHd9uY0F1fg8xn4dS6bkTc","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"i see","msgtype":"m.text","org.matrix.msc1767.text":"i see"}}
{"origin_server_ts":1643806083399,"event_id":"$3HcVUzPY1r6hK9R6wTQZeBkbDrZc4iSvP_xUQNKqMYQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$4JTJ9KmcNdTNrTjucfm3r-g21-u7bw5O1Ag-tjx45xg"}},"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"f3261170-cdc5-4813-8d4a-f1b488dbf951","body":"> <@loke:dhsdevelopments.com> Razetime: I finally implemented the feature I was talking about. This is how it looks: https://peertube.functional.cafe/w/toA5K72QvxQvxzQAY532d5\n\nWait, the value of `bar` at the end isn't what appeared in the array editor?","msgtype":"m.text","formatted_body":"
In reply to<\/a> @loke:dhsdevelopments.com<\/a>
Razetime<\/a>: I finally implemented the feature I was talking about. This is how it looks: https://peertube.functional.cafe/w/toA5K72QvxQvxzQAY532d5<\/a><\/blockquote><\/mx-reply>

Wait, the value of bar<\/code> at the end isn't what appeared in the array editor?<\/p>"}} {"origin_server_ts":1643806154175,"event_id":"$Y-S4CkdPePHr_mwCg6ZVIqEUk_VU0X6UJ_f2Ss_ByYY","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"hm yeah only the top right cell got modified","msgtype":"m.text","org.matrix.msc1767.text":"hm yeah only the top right cell got modified"}} {"origin_server_ts":1643806160211,"event_id":"$A9ZVk6mHfSw3Cz0MwkxZEzc1ahMKItAFPwUEycbd6To","sender":"@razetime:matrix.org","user_id":"@razetime:matrix.org","type":"m.room.message","content":{"body":"top left i mean","msgtype":"m.text","org.matrix.msc1767.text":"top left i mean"}} {"origin_server_ts":1643806199171,"event_id":"$1Lly_Y5MmfxyV7J97liUyvIiovF1zMV_8XLsar3EWY0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"cb7da5d3-fed9-42e4-abee-eb3247fbd8b7","body":"I'd definitely want a checkbox to enable/disable auto-reshaping, so I don't mess up my array if I type in the wrong length.","msgtype":"m.text","formatted_body":"

I'd definitely want a checkbox to enable/disable auto-reshaping, so I don't mess up my array if I type in the wrong length.<\/p>"}} {"origin_server_ts":1643806240154,"event_id":"$svfQlHWu7tzpopb4wiuhM2yaZ34zyT-RjNEPqYphsYw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"ff106851-807a-4c61-84ae-3702945533d9","body":"I mean of course you'll want some sort of undo buffer regardless, but that makes it a lot less likely to be needed.","msgtype":"m.text","formatted_body":"

I mean of course you'll want some sort of undo buffer regardless, but that makes it a lot less likely to be needed.<\/p>"}} {"origin_server_ts":1643806606794,"event_id":"$jP7gAJ6KPZ7IrxQyKCVLkY0x2N7WVKtwM9DkvSKqKm8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$3HcVUzPY1r6hK9R6wTQZeBkbDrZc4iSvP_xUQNKqMYQ"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Wait, the value of `bar` at the end isn't what appeared in the array editor?\n\nWhat? A bug? ","msgtype":"m.text","formatted_body":"

In reply to<\/a> @mlochbaum:matrix.org<\/a>

Wait, the value of bar<\/code> at the end isn't what appeared in the array editor?<\/p><\/blockquote><\/mx-reply>What? A bug?"}} {"origin_server_ts":1643806611936,"event_id":"$PaT3MnD0JzKluP82CTtsoB2bY_1kKr47srjgA_hR_QQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll take a look. ","msgtype":"m.text"}} {"origin_server_ts":1643806711596,"event_id":"$Nh94xs2hH5yQC8hKFGbSassBvdMUzEPBiJ4cqPkDWCY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: hmm, so you'd prefer that instead of doing a reshape, it should just cut the result to fit? ","msgtype":"m.text","formatted_body":"Marshall<\/a>: hmm, so you'd prefer that instead of doing a reshape, it should just cut the result to fit? "}} {"origin_server_ts":1643807083326,"event_id":"$uBhhPtATvGtJXwUJdzBCx_2G1eHWiOxslbbiBhZAkcc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"55f502be-1289-4b66-a847-1b3d11da980d","body":"No, it should give an error if the shape doesn't match up, ignoring extra length-1 axes in the target.","msgtype":"m.text","formatted_body":"

No, it should give an error if the shape doesn't match up, ignoring extra length-1 axes in the target.<\/p>"}} {"origin_server_ts":1643807299615,"event_id":"$I2GgFF429cVkS7AXKFogZCEd8vN6fddRHoGa3kJidjw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: Good point. It should be optional though. I'll add all those variations and include a selector for it.","msgtype":"m.text","formatted_body":"Marshall<\/a>: Good point. It should be optional though. I'll add all those variations and include a selector for it."}} {"origin_server_ts":1643810102718,"event_id":"$kVqthhf3y4-s1iA1g5L1ik7SsUNily955uCQz9vrYnE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, the bug is fixed now. Let me just add the new reshaping options.","msgtype":"m.text"}} {"origin_server_ts":1643813606604,"event_id":"$bJFn3GeArPcvz5scoqb7r_a9zg9cbKt8pCXIETT555I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: I think the behaviour you were looking for is the one that is chosen by \"match\".","msgtype":"m.text","formatted_body":"Marshall<\/a>: I think the behaviour you were looking for is the one that is chosen by "match"."}} {"origin_server_ts":1643813609566,"event_id":"$8nnaVSP_O8sSQ_Y6wbk7Pzh3Wt8lB08kLKSL4Q-nYwg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Here's an example:","msgtype":"m.text"}} {"origin_server_ts":1643813610011,"event_id":"$SPVBgOHtiblsJsiD8bAPBqnKp6c13Kq-0l67YDKljJk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://peertube.functional.cafe/w/qYxcS7PuXMgMASC8WgoJbb","msgtype":"m.text"}} {"origin_server_ts":1643813908596,"event_id":"$ehYMe6JHMYRGZxqnVxRu5TJT0Xhuv-w8ASq2hKHMC70","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"91018b4c-09cb-4c7d-b016-94420c206372","body":"Looks right! Thinking the error should leave you in the insert window, or better, be displayed as part of that window, but that's kind of a minor point.","msgtype":"m.text","formatted_body":"

Looks right! Thinking the error should leave you in the insert window, or better, be displayed as part of that window, but that's kind of a minor point.<\/p>"}} {"origin_server_ts":1643814172895,"event_id":"$XrTkpnFJgyVdVMlXsfXXnCsois_qa6IGnZGteny4evs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Good point.","msgtype":"m.text"}} {"origin_server_ts":1643814345615,"event_id":"$p_fD2IAQxjLWcDk7JaAoqXtQPPW28rMZ5Z7pvyOs3HM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm really not very good at GUI programming, so there is a lot that could be improved here.","msgtype":"m.text"}} {"origin_server_ts":1643820265676,"event_id":"$aAlmKx5bnLc9HScW_zfhiXmuzJsFKxUkVik74qiddqY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Anyway, I hope think the names of the four modes are not great. Especially replicate really doesn't represent the behaviour. ","msgtype":"m.text"}} {"origin_server_ts":1643820523103,"event_id":"$41-DZOyPG8Td00noPeIXf-zbMMexNhilV8jao3IcM78","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"io.github.mirukana.mirage.transaction_id":"a3e1a9b8-2b6b-4726-91f8-480f50ed1534","body":"Does replicate repeat along each dimension or something? Match → strict, maybe.","msgtype":"m.text"}} {"origin_server_ts":1643820621079,"event_id":"$2FjDNs8TzTj-mKsMgp33_P1WV1VTZyvCzzA8umnBzbg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What name do should I use instead. Perhaps overlay? ","msgtype":"m.text"}} {"origin_server_ts":1643820762996,"event_id":"$fafcacCX9MTiFjGuX61E-KtB1ClF2qFAiQJHNSnNyNI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"d35b2461-1a4c-492d-8c82-3828c3d383f7","body":"If you could use the shape in the expression (`shape` or something), then you could just call `↑` and not need any complicated options.","msgtype":"m.text","formatted_body":"

If you could use the shape in the expression (shape<\/code> or something), then you could just call ↑<\/code> and not need any complicated options.<\/p>"}} {"origin_server_ts":1643820874073,"event_id":"$3pR3MGPCIHjEToIm5DjmD2MO4bmTMSb7UDECdxnkcfQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"781e99b6-ec20-4922-a358-c2c166794d47","body":"I don't think it makes much sense to want to put an array into a specific location but then specify data with a different size. The only reason I can think of would be if you want to do something involving the shape, but don't know what that is.","msgtype":"m.text","formatted_body":"

I don't think it makes much sense to want to put an array into a specific location but then specify data with a different size. The only reason I can think of would be if you want to do something involving the shape, but don't know what that is.<\/p>"}} {"origin_server_ts":1643820984708,"event_id":"$De7NuMuO0oo1ypemtMlYjs-xwio6JSYHJv6NjzQfjAc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"8d278ae4-388d-4154-9fdb-7a411d5fced2","body":"Oh, there's `⍴⍵` already.","msgtype":"m.text","formatted_body":"

Oh, there's ⍴⍵<\/code> already.<\/p>"}} {"origin_server_ts":1643821422215,"event_id":"$S-Xgdt0LjYm2gDfPWXhz5VFcJll509kgTxYmgU0-BvU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think there are two different usecases that I'm trying to shoehorn into a single feature.","msgtype":"m.text"}} {"origin_server_ts":1643821484510,"event_id":"$GxgTErkVQ_LqNfiTh8G7TZdhKSmJ5LctkIaBWxgwmVU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"One is where you select a subarray (which is then available as `⍵` in the expression). The other is where you type an expression and you paste the result into the editor at a given point, and it will occupy that many cells, regardless of my selection.","msgtype":"m.text","formatted_body":"One is where you select a subarray (which is then available as ⍵<\/code> in the expression). The other is where you type an expression and you paste the result into the editor at a given point, and it will occupy that many cells, regardless of my selection."}} {"origin_server_ts":1643821494846,"event_id":"$Suuj0lRyKo8yKslsaBaU_cmiDvYeu2SR7NW-U6ZxICI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The latter would work similar to how paste works in Excel.","msgtype":"m.text"}} {"state_key":"@razetime:coven.palaiologos.rocks","origin_server_ts":1643995173208,"event_id":"$iPuVmZnSVz6S5GbYGCi34RKBOred7dUUfZFKCIupPRs","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.member","content":{"avatar_url":null,"displayname":"razetime","membership":"join"},"age_ts":1643995173758} {"state_key":"@razetime:coven.palaiologos.rocks","origin_server_ts":1644045540463,"event_id":"$7td-MFOfu83e0vhS9Jmknu6hLr8foeft3e_ypRqetog","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","prev_content":{"avatar_url":null,"displayname":"razetime","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://coven.palaiologos.rocks/filovLsqkboFYyYSXgIsyMcG","displayname":"razetime","membership":"join"},"replaces_state":"$iPuVmZnSVz6S5GbYGCi34RKBOred7dUUfZFKCIupPRs"} {"origin_server_ts":1644082982522,"event_id":"$mZr8b8GXL_zROcJBD13iTmE26d3qDC0TaSXQhrCEBpg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I went back to the structure viewer a bit. Complex trains becomes quite difficult to read. To the point where I wonder if this thing is even useful:","msgtype":"m.text"}} {"origin_server_ts":1644082984264,"event_id":"$cxtcMe525Ulvw6vF5eEQSK88nfBLQDkB5PT34vtfEOM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"image.png","msgtype":"m.image","url":"mxc://dhsdevelopments.com/gEBWMquyCUcRIurLAPBYjcEw","info":{"xyz.amorgan.blurhash":"L1S6St00_24n00%1aK^+00-:V?_3","size":85064,"thumbnail_info":{"size":59269,"w":660,"h":600,"mimetype":"image/png"},"w":943,"h":856,"mimetype":"image/png","thumbnail_url":"mxc://dhsdevelopments.com/AXVsoQNNEMwEocADOozFgEas"}}} {"origin_server_ts":1644085245775,"event_id":"$exfb-FAuO-EKiMvHsuSDKNPcrjLCSJoo9F7a3jt9akA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"75487d87-af56-42ca-a70c-273a481c1a98","body":"That graph's easier to read that the expression, I'd say.","msgtype":"m.text","formatted_body":"

That graph's easier to read that the expression, I'd say.<\/p>"}} {"origin_server_ts":1644130682471,"event_id":"$yJCwb9pyAI0U4SSkpm7bbVv6cqVZ-sHBICl9AHsC1eA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There discussion on the apl channel about object comparison made me think. In APL the proposed solution does ordering twice, which performs theatre comparison twice. KAP already has an internal function that does this, so the APL solution is wasteful.","msgtype":"m.text"}} {"origin_server_ts":1644130722141,"event_id":"$Kv8HqR4K-Mz2nVj87ghCWYR0Ltk_esHkiOlCbpwRwy8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have two options, either detect that specific pattern and map that to the comparison function, or introduce a new one. ","msgtype":"m.text"}} {"origin_server_ts":1644130763323,"event_id":"$Q1Dwtzyjy3UhcuznC7Dd1BSGwj722cwENws6ydKFPzg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I could call it cmp I guess. That'll still make it shorter than the APL version, which is enough I guess. ","msgtype":"m.text"}} {"origin_server_ts":1644153217195,"event_id":"$QPOSxix1BwRQu3fu2IlG0DIAqxE1MtPQEWitAdQaHVY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"OK, done. I now have the `cmp` function which implemented a total ordering of all types. This way you can compare integers to symbols, or arrays to characters.","msgtype":"m.text","formatted_body":"OK, done. I now have the cmp<\/code> function which implemented a total ordering of all types. This way you can compare integers to symbols, or arrays to characters."}} {"origin_server_ts":1644153231462,"event_id":"$cIevSfArzbvZk8gpZdtlmo3fOiSV-wc_cBM_Dxipc2w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Instead of raising errors when it happens.","msgtype":"m.text"}} {"origin_server_ts":1644153242875,"event_id":"$P_pmmgHF-7wgwAXJpf6fnyspKlrEjgo0ErEASL-Wgrk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"OK, done. I now have the `cmp` function which implements a total ordering of all types. This way you can compare integers to symbols, or arrays to characters.","msgtype":"m.text","formatted_body":"OK, done. I now have the cmp<\/code> function which implements a total ordering of all types. This way you can compare integers to symbols, or arrays to characters."},"m.relates_to":{"event_id":"$QPOSxix1BwRQu3fu2IlG0DIAqxE1MtPQEWitAdQaHVY","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * OK, done. I now have the `cmp` function which implements a total ordering of all types. This way you can compare integers to symbols, or arrays to characters.","msgtype":"m.text","formatted_body":" * OK, done. I now have the cmp<\/code> function which implements a total ordering of all types. This way you can compare integers to symbols, or arrays to characters."}} {"origin_server_ts":1644201679610,"event_id":"$_O_wXsVuBSWxioyY7jtqOlTxPzUlPW91weoBSxM4ewc","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"interesting","msgtype":"m.text","org.matrix.msc1767.text":"interesting"}} {"origin_server_ts":1644201706840,"event_id":"$HjtPSffWACHPeK1J2aLAQ4rboB0G4wzZHGdWUZH03As","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"so `cmp` is to be used instead of grade up for total ordering?"},{"mimetype":"text/html","body":"so cmp<\/code> is to be used instead of grade up for total ordering?"}],"format":"org.matrix.custom.html","body":"so `cmp` is to be used instead of grade up for total ordering?","msgtype":"m.text","formatted_body":"so cmp<\/code> is to be used instead of grade up for total ordering?"}} {"origin_server_ts":1644216120767,"event_id":"$A3wSSP-OYYsGuahtTbY1kga7FlYomNrycGgHN1kEsOM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Razetime @razetime:matrix.org: no. Cmp and grade uses the same underlying mechanism. ","msgtype":"m.text","formatted_body":"Razetime @razetime:matrix.org<\/a>: no. Cmp and grade uses the same underlying mechanism. "}} {"origin_server_ts":1644216131970,"event_id":"$3r6meUWeeuBS9HbsY6YjTIUOLxrbYxJwK-9aUz0KA9w","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"i see","msgtype":"m.text","org.matrix.msc1767.text":"i see"}} {"origin_server_ts":1644216177055,"event_id":"$Ex7sJvaYPso_2r5I9jmSqCjJSkzakKs2nRSwJeKu5VY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Cmp is a function that takes two objects and returns -1, 1 or 0 depending on the which of one comes first. ","msgtype":"m.text"}} {"origin_server_ts":1644216187054,"event_id":"$scNXkPqfHUS9-AbAErP18qd3zczuhm5YPsFpEA_HZ1w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you want to implement a binary tree for example, you need it. ","msgtype":"m.text"}} {"origin_server_ts":1644216241541,"event_id":"$UW39VcRUUmjnrN-O9KpZXH1vUQkKB6WnASE79SWG4JA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"\nYou can achieve the same by doing grade up and grade down, but that doubles the number of comparisons. ","msgtype":"m.text"}} {"origin_server_ts":1644216471564,"event_id":"$oGbzT5d5VF40xb-plhTOCKpHSGtKlM8kfRUYxEPXdSg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You can see how it works in the test cases. ","msgtype":"m.text"}} {"origin_server_ts":1644216476538,"event_id":"$NuC1B-ktdtkmFnW9rpIr1Ag4U2xuqlTOO8S-qMrIn48","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://github.com/lokedhs/array/blob/e9ccebe77d3b851694fae11633493e40917cfc23/array/src/commonTest/kotlin/array/CompareTest.kt#L112","msgtype":"m.text"}} {"origin_server_ts":1644216879901,"event_id":"$FPV96Ccn55o6vTzMWe2pY7xoeJEq0RNH7sQ7xxeY1wg","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"oh interesting","msgtype":"m.text","org.matrix.msc1767.text":"oh interesting"}} {"origin_server_ts":1644245543537,"event_id":"$tI89y5M1Z_0xIe-cK4slD_dHFXoHi529JIM7V7OkzW8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Does bqn have the same thing? ","msgtype":"m.text"}} {"origin_server_ts":1644245656149,"event_id":"$M3OYkjkrrSoWPEv4ONDkKjuQUgT9M_4jaPfBTLn-AnM","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"https://mlochbaum.github.io/BQN/doc/order.html","msgtype":"m.text","org.matrix.msc1767.text":"https://mlochbaum.github.io/BQN/doc/order.html"}} {"origin_server_ts":1644245657067,"event_id":"$o6yd6eCqgXIVLtsefZmXui3R4dcWdc4r3cD5X-Zs5To","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"nope","msgtype":"m.text","org.matrix.msc1767.text":"nope"}} {"origin_server_ts":1644245669172,"event_id":"$YE4jtguh6ZuC9sgMSfYHnKX-YjSgCBH5j8WeXA_KdkM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"as a builtin, no. CBQN and dzaima/BQN have `\u2022Cmp` though","msgtype":"m.text","formatted_body":"as a builtin, no. CBQN and dzaima/BQN have \u2022Cmp<\/code> though"}} {"origin_server_ts":1644245682124,"event_id":"$6emiUIwoLaXuBN49rkDCbaSk4Cl_vjWMfxrrNw3Jsf4","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"but i suppose a `cmp` like function may be a system value "},{"mimetype":"text/html","body":"but i suppose a cmp<\/code> like function may be a system value"}],"format":"org.matrix.custom.html","body":"but i suppose a `cmp` like function may be a system value ","msgtype":"m.text","formatted_body":"but i suppose a cmp<\/code> like function may be a system value"}} {"origin_server_ts":1644245691073,"event_id":"$bhomQH2VoGegXKOdbg_iPfmfjAVe_8Q0IjosBtqrn0E","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"ah lol","msgtype":"m.text","org.matrix.msc1767.text":"ah lol"}} {"origin_server_ts":1644246563577,"event_id":"$i8fsn79DGW3gNV8s8t8FCvbzILj9ABTuTSCRfX2A0qU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$YE4jtguh6ZuC9sgMSfYHnKX-YjSgCBH5j8WeXA_KdkM"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> as a builtin, no. CBQN and dzaima/BQN have `\u2022Cmp` though\n\nDoes it do the same as mine? ","msgtype":"m.text","formatted_body":"

In reply to<\/a> @dzaima:matrix.org<\/a>
as a builtin, no. CBQN and dzaima/BQN have \u2022Cmp<\/code> though<\/blockquote><\/mx-reply>Does it do the same as mine?"}} {"origin_server_ts":1644246616395,"event_id":"$Js-5GGuibD4WEt2_fxwSqdRHKX253DYTxJAkxrq6RY4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yep","msgtype":"m.text","formatted_body":"yep"}} {"origin_server_ts":1644246650186,"event_id":"$lUoXUJr8QZTJLPbEjNrjKJXGCbaTHyznGsmhs6NjaZw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Nice. Always happy to knowledge I'm on the right track. 😃","msgtype":"m.text"}} {"origin_server_ts":1644246673179,"event_id":"$EHpQdGsBszuORRCsOXgC6AA4z8zl7WXA-ik4UFyoxyg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I tend to be assume that that if BQN does something, that means it's not good thing. ","msgtype":"m.text"}} {"origin_server_ts":1644246679991,"event_id":"$HwV1Xr5B8Zii4kfj1Hba39I6DEe7FDCzsWSpHVBsicY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I tend to assume that that if BQN does something, that means it's not good thing. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$EHpQdGsBszuORRCsOXgC6AA4z8zl7WXA-ik4UFyoxyg","rel_type":"m.replace"},"body":"* I tend to assume that that if BQN does something, that means it's not good thing. ","msgtype":"m.text"}} {"origin_server_ts":1644246688071,"event_id":"$biFjkjQGSjoDNOxKpMYifnCe0ucHMNwaTUlWHDn2A9k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I tend to assume that that if BQN does something, that means it's noa good thing. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$EHpQdGsBszuORRCsOXgC6AA4z8zl7WXA-ik4UFyoxyg","rel_type":"m.replace"},"body":"* I tend to assume that that if BQN does something, that means it's noa good thing. ","msgtype":"m.text"}} {"origin_server_ts":1644246694805,"event_id":"$PuvORAfyq2kD8_qnLQHsx7lpui6rOmQ1mOF8wjjwyqA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I tend to assume that that if BQN does something, that means it's a good thing. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$EHpQdGsBszuORRCsOXgC6AA4z8zl7WXA-ik4UFyoxyg","rel_type":"m.replace"},"body":"* I tend to assume that that if BQN does something, that means it's a good thing. ","msgtype":"m.text"}} {"origin_server_ts":1644246713267,"event_id":"$ONfVwA9Uemb7uPkiG2jGdw6LPOWctWga5SjRKyxzXew","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"well, here it's my BQNs that do it","msgtype":"m.text","formatted_body":"well, here it's my BQNs that do it"}} {"origin_server_ts":1644246736244,"event_id":"$hmp0_3mHMIg6h0WOMIfF_yJ2uDIJZip_D1MtDoF2D90","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Well, close to enough. 😉","msgtype":"m.text"}} {"origin_server_ts":1644246742167,"event_id":"$oJKs6ge9xrj_nbzrtfl2TUdjHYR1ioYNkzzDd0A4diU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Well, close enough. 😉","msgtype":"m.text"},"m.relates_to":{"event_id":"$hmp0_3mHMIg6h0WOMIfF_yJ2uDIJZip_D1MtDoF2D90","rel_type":"m.replace"},"body":"* Well, close enough. 😉","msgtype":"m.text"}} {"origin_server_ts":1644247700281,"event_id":"$I4qrg_LbkMBpGWoF0s3JOVkHYtVzEsMtx7aT1A-3R5Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Wait a minute. I thought CBQN was the official one? Am I being an idiot? ","msgtype":"m.text"}} {"origin_server_ts":1644247769897,"event_id":"$ClUxxouUCIlnobjtclzjbmFaoIWdf_1lHPbO55LH1NI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"CBQN is the main offline implementation, but it's still made pretty much all by me","msgtype":"m.text","formatted_body":"CBQN is the main offline implementation, but it's still made pretty much all by me"}} {"origin_server_ts":1644247812546,"event_id":"$9z75fhJM24oE4LMoOXdwDdXMBUAmmg-Q4P2HjDygnl4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and `\u2022Cmp` was something i added half because it was useful for testing total array ordering","msgtype":"m.text","formatted_body":"and \u2022Cmp<\/code> was something i added half because it was useful for testing total array ordering"}} {"origin_server_ts":1644249214646,"event_id":"$1skIElT7Utc80Mb0c5XSPpEstJxfQ78pWnPZLLB2oYc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: I see. Thanks. ","msgtype":"m.text","formatted_body":"
dzaima<\/a>: I see. Thanks. "}} {"origin_server_ts":1644249331594,"event_id":"$sgYyXdYUuaQNEqrcx7_I7ckXqkw8M-Z2VlyY4bcvzWo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: by the way, is there any thought behind the ordering of different types? ","msgtype":"m.text","formatted_body":"dzaima<\/a>: by the way, is there any thought behind the ordering of different types? "}} {"origin_server_ts":1644249360289,"event_id":"$y3xn4IELC6MO4x-eHkTbrdGWpwu-F2FHVXtu1uhg7HA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I just picked an order that felt right, but there is u technical justification why numbers sort before characters. ","msgtype":"m.text"}} {"origin_server_ts":1644249367178,"event_id":"$tGOS2yLAuxhe2kx0XfSXyVkjuZ2BcaHZ1RYkUvj9zY0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I just picked an order that felt right, but there is no technical justification why numbers sort before characters. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$y3xn4IELC6MO4x-eHkTbrdGWpwu-F2FHVXtu1uhg7HA","rel_type":"m.replace"},"body":"* I just picked an order that felt right, but there is no technical justification why numbers sort before characters. ","msgtype":"m.text"}} {"origin_server_ts":1644249473553,"event_id":"$aMaXJ3ODwO1yZm7QkPF0aRxFWKNfdN0593GNCgJNHo8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[this](https://www.jsoftware.com/papers/TAOaxioms.htm) doesn't say much other than that Dyalog just picked one","msgtype":"m.text","formatted_body":"this<\/a> doesn't say much other than that Dyalog just picked one"}} {"origin_server_ts":1644249749348,"event_id":"$rHWsxF_c71lkt7VcbDIf6G1pp5Rlx-9PpW6seq6dXbQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"APL tends to order by shape first, and then content. I changed that for 1-dimensional arrays, for the main reason that I want strings to be lexicographically ordered. ","msgtype":"m.text"}} {"origin_server_ts":1644249863667,"event_id":"$wx7HKpl13O-ATfkKazFL6ex2bASjj0ILilCfP1pV8BA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[no?](https://tio.run/##SyzI0U2pTMzJT////1Hf1EdtE6of9W6NftTbDaRia9UTE9UVgESiOhc22SSY7P//AA)","msgtype":"m.text","formatted_body":"no?<\/a>"}} {"origin_server_ts":1644250069068,"event_id":"$Iah4Bmu5BS_mu2qovnAqI6bubeAi99w9kapJWuY8AO8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It I'd in GNU APL (and, I presume APL2) ","msgtype":"m.text"}} {"origin_server_ts":1644250075252,"event_id":"$1IZrxY-21YxO2XS2xy3OCPLRuBk0W23qrLci4xVpm1o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"It is in GNU APL (and, I presume APL2) ","msgtype":"m.text"},"m.relates_to":{"event_id":"$Iah4Bmu5BS_mu2qovnAqI6bubeAi99w9kapJWuY8AO8","rel_type":"m.replace"},"body":"* It is in GNU APL (and, I presume APL2) ","msgtype":"m.text"}} {"origin_server_ts":1644250135800,"event_id":"$Y_nEJyvEx3K0wj6lbhRFlOHk2JrPhbW-EC2QqFJr-Ps","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I never actually tested in Dyalog. I probably should have. ","msgtype":"m.text"}} {"origin_server_ts":1644250443817,"event_id":"$gAy-phxfSEvshgEiGhqoGmvp3Yr8IsOaK4MmIXzkTCw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"ca661c24-44ce-4521-99bf-9216195cc4a0","body":"I put characters after numbers on the basis that in character arithmetic numbers have 0 \"characterness\" and characters have 1, but that system would work the same with characters having -1 or any other number.","msgtype":"m.text","formatted_body":"

I put characters after numbers on the basis that in character arithmetic numbers have 0 \"characterness\" and characters have 1, but that system would work the same with characters having -1 or any other number.<\/p>"}} {"origin_server_ts":1644250671888,"event_id":"$x096qFk6P89aQOpFWzVtKxjz_0aySjfprG3G04uiT9I","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","io.github.mirukana.mirage.transaction_id":"3e3875ee-578c-4b7b-b6da-25a8f0022a70","body":"`\u2022Cmp` is equivalent to `(⍒-⍋)⌾⋈`. That version requires two comparisons, but most applications should only need `⍋⌾⋈` (like `≤`) I'd think. It's all you need for sorting or binary search.","msgtype":"m.text","formatted_body":"

\u2022Cmp<\/code> is equivalent to (⍒-⍋)⌾⋈<\/code>. That version requires two comparisons, but most applications should only need ⍋⌾⋈<\/code> (like ≤<\/code>) I'd think. It's all you need for sorting or binary search.<\/p>"}} {"state_key":"@razetime:coven.palaiologos.rocks","origin_server_ts":1644903412522,"event_id":"$pxlfmXcEvWxnVBRyMKyeixjR5ohRDBJRkMQ8chJfnXc","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","prev_content":{"avatar_url":"mxc://coven.palaiologos.rocks/filovLsqkboFYyYSXgIsyMcG","displayname":"razetime","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://coven.palaiologos.rocks/PVIuBLdwHsifFixPSBXUeTNH","displayname":"razetime","membership":"join"},"replaces_state":"$7td-MFOfu83e0vhS9Jmknu6hLr8foeft3e_ypRqetog"} {"origin_server_ts":1644945726531,"event_id":"$6DOLb0BbKqEm0GxN3E0IM-V7eVhWmXVUHOHiZiymzsI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Some improved error reporting: https://peertube.functional.cafe/w/e17axNmwgkFcMUGHVe1Hpr","msgtype":"m.text"}} {"origin_server_ts":1644987625065,"event_id":"$XQ0UyqxK-T8km9X4LwrhYA_TJg0XBgd6ZAZ_jqnJfYo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh, and check this out. It's a bit silly now, since it never clears the warnings, so it's never clear which command invocation caused the highlight, but it is interesting.","msgtype":"m.text"}} {"origin_server_ts":1644987625466,"event_id":"$Lse9wida2RIYXMggy04LDh8GoB52pjjrC8mEg5hTgVc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://peertube.functional.cafe/w/29JghXxGBQi6dhiZdWhqRR","msgtype":"m.text"}} {"origin_server_ts":1645542908070,"event_id":"$tPTLy1LNG8YTqHx09FE7fkcT8bGLOkOUZIzy74Ypk7Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"One thing I find quite neat is that the standard implementation of the function variant of Dyalog's @ in KAP looks like this. Assume calling % with two functions `x` and `y` with argument `a` like so: `(x@y) a`. Then the way to write that in KAP, without getting excessive calls to either function is simply: `(x¨a) % a (y¨a)`","msgtype":"m.text","formatted_body":"One thing I find quite neat is that the standard implementation of the function variant of Dyalog's @ in KAP looks like this. Assume calling % with two functions x<\/code> and y<\/code> with argument a<\/code> like so: (x@y) a<\/code>. Then the way to write that in KAP, without getting excessive calls to either function is simply: (x¨a) % a (y¨a)<\/code>"}} {"origin_server_ts":1645542969594,"event_id":"$cocY7ByLV6eOk7JW0NvKMR2QidMO5ySYoiLEGsH1S6I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This appears to be the most straightforward implementation, I think","msgtype":"m.text"}} {"origin_server_ts":1645543149756,"event_id":"$egxNfDKdNLmff3wW0vYfKTjlGQU-VivxRuegciW0E6Q","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So `v % a m` is like the functional version of `(m/a)←v`?","msgtype":"m.text","formatted_body":"So v % a m<\/code> is like the functional version of (m/a)←v<\/code>?"}} {"origin_server_ts":1645543242526,"event_id":"$q4n35pYvfHD1DTuIimX5zMrF9PNaalI7HM99F4HSt_w","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Would be more like `(x¨)@(y¨)`, since `@` applies the functions to all elements.","msgtype":"m.text","formatted_body":"Would be more like (x¨)@(y¨)<\/code>, since @<\/code> applies the functions to all elements."}} {"origin_server_ts":1645543493161,"event_id":"$09X1w_EbPSjDgluIpnQDsz3X-7V1DzwZ1Wy2aV0V6Is","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: % is just the same as in dzaima apl","msgtype":"m.text","formatted_body":"Marshall<\/a>: % is just the same as in dzaima apl"}} {"origin_server_ts":1645543527300,"event_id":"$e3tPfA5vVkOdIdeRCFFSaCF3FTIclSI7cxo5KuHwYwc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The reason it works is because of the lazy evaluation, so x will only be called for cells for which the mask is 1","msgtype":"m.text"}} {"origin_server_ts":1645543543023,"event_id":"$p-ylvFgI6icBLEEx7hclM1riprVmFi-tpPjCAdZ6m3w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Also, it won't even call y unless you actually want to read the value.","msgtype":"m.text"}} {"origin_server_ts":1645543639468,"event_id":"$bSCPdFESYGuFnhRD0E6bFKrtgoR7jBpLKSY4DpB9ReQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I implemented % after talking to Dzaima and he explained how he did the same thing. The function is called select.","msgtype":"m.text"}} {"origin_server_ts":1645543705057,"event_id":"$yRZl8i6MSsASdUoOhsNfW43ylIO2-dVKhiUkIuI7Qn4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Thus: `1 0 1 % (1 2 3) (10 11 12)` becomes `10 2 12`","msgtype":"m.text","formatted_body":"Thus: 1 0 1 % (1 2 3) (10 11 12)<\/code> becomes 10 2 12<\/code>"}} {"origin_server_ts":1645543777487,"event_id":"$PtNe8_1EC4IHRMrmEyrW--Y0e-7mZJmFVIdkv9l8Dm8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh, you have `x` and `y` swapped. It's `(y¨a) % a (x¨a)`.","msgtype":"m.text","formatted_body":"Oh, you have x<\/code> and y<\/code> swapped. It's (y¨a) % a (x¨a)<\/code>."}} {"origin_server_ts":1645543808673,"event_id":"$udwOVcGzj_Ejlz7wh6sROqlyrVF7dMgXfPa1CYMdcaM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh really? I've never actually used it in Dyalog.","msgtype":"m.text"}} {"origin_server_ts":1645543813485,"event_id":"$A_gZ-ZNe00tTPZodNkEyj08lirN6zyUovTumpkYi1RY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I thought it was that way.","msgtype":"m.text"}} {"origin_server_ts":1645543834535,"event_id":"$k1SY7C8zBYsvlpbu0j2EUWyHs7cZVQPlMcrB2_aV7BQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The idea of \"x at y\" is that you perform x at the locations given by y.","msgtype":"m.text","formatted_body":"The idea of \"x at y\" is that you perform x at the locations given by y."}} {"origin_server_ts":1645543912350,"event_id":"$RIy-elZh36Xjv9UBOgN-nDnjNPDpyHwMTsgD0B4Wmy8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Of course. Makes perfect sense when you say it :-)","msgtype":"m.text"}} {"origin_server_ts":1645543989275,"event_id":"$Uc4m7-SD0mndS3lntU6XUMPU56E71Nm7mMkdjR39_9I","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"J has something similar to `%`, [Composite Item](https://code.jsoftware.com/wiki/Vocabulary/curlyrt). It just takes a flat array on the right. Also the left thing is an operand because despite the digraphs they were still trying to jam operations together in weird ways.","msgtype":"m.text","formatted_body":"J has something similar to %<\/code>, Composite Item<\/a>. It just takes a flat array on the right. Also the left thing is an operand because despite the digraphs they were still trying to jam operations together in weird ways."}} {"origin_server_ts":1645544398315,"event_id":"$2srtJFaO09TZluGvg13haIAH3yqRv10mrhulqnx5N7Q","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Feels like there should be an easy way in K too, but the best I have is `{(+y)@'x}`.","msgtype":"m.text","formatted_body":"Feels like there should be an easy way in K too, but the best I have is {(+y)@'x}<\/code>."}} {"origin_server_ts":1645544479417,"event_id":"$mOAK_6p3f3j_Lu_QM7mNYL2zGgycniUp9yXHAkWaPOI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The `%` version seems the most useful, since it's rare to have the values together in a flat array like J, and if you do then transpose+select isn't bad.","msgtype":"m.text","formatted_body":"The %<\/code> version seems the most useful, since it's rare to have the values together in a flat array like J, and if you do then transpose+select isn't bad."}} {"origin_server_ts":1645544703427,"event_id":"$_sZA_IjqUZiurdy8wH--NUREoECMkPMHsDdLbJFTLjQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Lazy `%` is pretty useful. You can even do array-style conditionals that way: condition and implementations are each vectorized individually.","msgtype":"m.text","formatted_body":"Lazy %<\/code> is pretty useful. You can even do array-style conditionals that way: condition and implementations are each vectorized individually."}} {"origin_server_ts":1645544751890,"event_id":"$m83R7yxCm4SNIW2PxnutpVKUdMmSoKj6ASa4xQueBlc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Although then there's the question of when you'd want to branch (KAP) and when to actually compute everything with SIMD and then merge (normal APL).","msgtype":"m.text","formatted_body":"Although then there's the question of when you'd want to branch (KAP) and when to actually compute everything with SIMD and then merge (normal APL)."}} {"origin_server_ts":1645544878883,"event_id":"$I23jVX7Gb80GgeXkTRk6oVFjc2s0xYtW0an3fY89S4I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. A lot of the stuff I do is not conductive to simd optimisation. ","msgtype":"m.text"}} {"origin_server_ts":1645544931232,"event_id":"$6HWB_yQtt6DPQOuhdCB3P76IiyiNRg4t_bCniwzSY8U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It shines when it can completely skip certain computations. If it actually has to compute everything, it loses. ","msgtype":"m.text"}} {"origin_server_ts":1645544966252,"event_id":"$jImC8SYsP2hLMw3BmQXjmwm4kXTMeyzL1itznkvCUk8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's not overly terrible though, and usually stays within an order of magnitude compared to Dyalog. ","msgtype":"m.text"}} {"origin_server_ts":1645545471976,"event_id":"$C9mHR2fe4Dig8rykXNayrUZCnJA7dKLYS_6kE9oh624","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I was checking the documentation of the J function. It says it's not usually needed? ","msgtype":"m.text"}} {"origin_server_ts":1645545493159,"event_id":"$XHLd_clLxv9SRpbbcdvxWGsFh_s6ZDEViwGX-uDL7cw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But if it works the way I think it does, then I don't understand why they would say that. ","msgtype":"m.text"}} {"origin_server_ts":1645545787982,"event_id":"$B-aL86zfNKYKo-UWPeee1CqzCtmkExTTLXD9en5fQt8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Well it's basically the same as `{\"0 1&.|:`, which uses much more common primitives.","msgtype":"m.text","formatted_body":"Well it's basically the same as {\"0 1&.|:<\/code>, which uses much more common primitives."}} {"origin_server_ts":1645547737605,"event_id":"$FPfGm0zAzpe5dh4zzCYHgEB2kPtsLIsj1Y2D7pAXpaI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ok, I gave no idea what those do. I really need to learn a bit more J. I started reading the tutorial a few days ago, but it was slow going. ","msgtype":"m.text"}} {"origin_server_ts":1645547782757,"event_id":"$-Pg2Li3_xATUCvEp9qg5Mx2FIMkO3D-MXKLbkzUT0ks","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I much preferred the BQN tutorial, which I also haven't gotten very far into, but it's certainly more thought through than J, at least as a first impression. ","msgtype":"m.text"}} {"origin_server_ts":1645548560043,"event_id":"$eQFj30WrVONw3ktVtP4QNs-CENo0uf2awhNw8cndsuk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The BQN transliteration is `⊏⎉0\u203f1⌾⍉`, which works if the cells are lists. Needs `⍉\u207c⊏⎉0\u203f1⟜⍉` for higher-rank cells because you don't really want to transpose the indices but reversing axes kludges through it.","msgtype":"m.text","formatted_body":"The BQN transliteration is ⊏⎉0\u203f1⌾⍉<\/code>, which works if the cells are lists. Needs ⍉\u207c⊏⎉0\u203f1⟜⍉<\/code> for higher-rank cells because you don't really want to transpose the indices but reversing axes kludges through it."}} {"origin_server_ts":1645548647960,"event_id":"$il_AEXRq-XFGh5yRha3V5tM3dFx3p5GKXHaa2ruczF0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I see. I think I get it. I'm about to go to sleep now, but I will play with it tomorrow. ","msgtype":"m.text"}} {"origin_server_ts":1645548668118,"event_id":"$YZvhWvGsipboA1_-bQIuTYUj1ln3gTjKWYHMfEExJ6Q","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Idea is just that with `⊏⎉0\u203f1` you want to pair one element on the left with a list on the right, but since that only lets you select on a trailing axes you need to transpose.","msgtype":"m.text","formatted_body":"Idea is just that with ⊏⎉0\u203f1<\/code> you want to pair one element on the left with a list on the right, but since that only lets you select on a trailing axes you need to transpose."}} {"origin_server_ts":1645548761872,"event_id":"$eMO9xAV5_Gz7oN-reKLl48NF3Ytag2zzou9ncSDN7Pw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Actually it's just `⊏⎉0\u203f1⟜⍉`, with no transpose at the end. That APL transpose is really awful.","msgtype":"m.text","formatted_body":"Actually it's just ⊏⎉0\u203f1⟜⍉<\/code>, with no transpose at the end. That APL transpose is really awful."}} {"state_key":"@cruisearray:matrix.org","origin_server_ts":1645568628078,"event_id":"$GzOb8uU2xfQTjC-cPxlTgC8VIaqn0_UDnP9G1AknJoQ","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.member","content":{"displayname":"cruisearray","membership":"join"}} {"origin_server_ts":1645569184452,"event_id":"$kEAdR3SJsI_1TkQw2fdWL3JoygIH1hxPHYKVjfv_wWM","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"loke: razetime "},{"mimetype":"text/html","body":"loke<\/a>: razetime<\/a>"}],"format":"org.matrix.custom.html","body":"loke: razetime ","msgtype":"m.text","formatted_body":"loke<\/a>: razetime<\/a>"}} {"origin_server_ts":1645569464110,"event_id":"$oKFAiPT9GaRaGCU7KHa2je8KmedhTK144uZFy8xc9Ww","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"body":"How long until using any (except Dyalog) a server with HTMX https://htmx.org/- super easy AJAX like controls? HTMX is as revolutionary as the new array languages. Is there some way to connect Kap with Kotlin which allows Ktor for a framework?","msgtype":"m.text","org.matrix.msc1767.text":"How long until using any (except Dyalog) a server with HTMX https://htmx.org/- super easy AJAX like controls? HTMX is as revolutionary as the new array languages. Is there some way to connect Kap with Kotlin which allows Ktor for a framework?"}} {"origin_server_ts":1645570761063,"event_id":"$lwXiFEMyvRNX8gR-gIdMX0yUM42cGUyb49jIWr0s76s","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"uhm","msgtype":"m.text","org.matrix.msc1767.text":"uhm"}} {"origin_server_ts":1645570765255,"event_id":"$QqBFelHONE3AASVY2FPWIb5eHU6Mr3qtQCefGIZgCD0","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"what does that mean","msgtype":"m.text","org.matrix.msc1767.text":"what does that mean"}} {"origin_server_ts":1645571900888,"event_id":"$A5XZ-WT5yYKl9Rki5eOU5-5XbN_ldH0JGy3-Z3FBWxI","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$QqBFelHONE3AASVY2FPWIb5eHU6Mr3qtQCefGIZgCD0"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@eris:chat.unix.lgbt> what does that mean\n\nI was looking for a language with a reasonable 3000 LOC's for even a simple web. Mint.js made a demo at Codebase.show but its.... 3000 line of code and Mint is designing for optimized SPA's single page apps. My guess is an array language + Ktor (Kotlin framework) + HTMX (HTML side AJAX) = 750 LOC for that Mint demo. Its a bit early for these two array languages for real web development but its not too early. Kotlin does have a nice array library - https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/ - but its not as svelte as an array language."},{"mimetype":"text/html","body":"

In reply to<\/a> @eris:chat.unix.lgbt<\/a>
what does that mean<\/blockquote><\/mx-reply>I was looking for a language with a reasonable 3000 LOC's for even a simple web. Mint.js made a demo at Codebase.show but its.... 3000 line of code and Mint is designing for optimized SPA's single page apps. My guess is an array language + Ktor (Kotlin framework) + HTMX (HTML side AJAX) = 750 LOC for that Mint demo. Its a bit early for these two array languages for real web development but its not too early. Kotlin does have a nice array library - https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/ - but its not as svelte as an array language."}],"format":"org.matrix.custom.html","body":"> <@eris:chat.unix.lgbt> what does that mean\n\nI was looking for a language with a reasonable 3000 LOC's for even a simple web. Mint.js made a demo at Codebase.show but its.... 3000 line of code and Mint is designing for optimized SPA's single page apps. My guess is an array language + Ktor (Kotlin framework) + HTMX (HTML side AJAX) = 750 LOC for that Mint demo. Its a bit early for these two array languages for real web development but its not too early. Kotlin does have a nice array library - https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/ - but its not as svelte as an array language.","msgtype":"m.text","formatted_body":"
In reply to<\/a> @eris:chat.unix.lgbt<\/a>
what does that mean<\/blockquote><\/mx-reply>I was looking for a language with a reasonable 3000 LOC's for even a simple web. Mint.js made a demo at Codebase.show but its.... 3000 line of code and Mint is designing for optimized SPA's single page apps. My guess is an array language + Ktor (Kotlin framework) + HTMX (HTML side AJAX) = 750 LOC for that Mint demo. Its a bit early for these two array languages for real web development but its not too early. Kotlin does have a nice array library - https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/ - but its not as svelte as an array language."}} {"origin_server_ts":1645572556898,"event_id":"$Od30XICbfBZiQtLKOhFiltSOWEBXBIupzXEgCuVzY7Q","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"this is entirely newspeak to me ","msgtype":"m.text","org.matrix.msc1767.text":"this is entirely newspeak to me "}} {"origin_server_ts":1645572678944,"event_id":"$s2CUCheIjBLTLFFSA_5HiwJrVtT4YGMdZ1QIy9vrLX0","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> https://codebase.show/projects/realworld"},{"mimetype":"text/html","body":"
\n

https://codebase.show/projects/realworld<\/p>\n<\/blockquote>\n"}],"format":"org.matrix.custom.html","body":"> https://codebase.show/projects/realworld","msgtype":"m.text","formatted_body":"

\n

https://codebase.show/projects/realworld<\/p>\n<\/blockquote>\n"}} {"origin_server_ts":1645572684611,"event_id":"$ZSo_iMoKjBjIaUaK5ThlMjSza-Hw8lLZAzmhKe8gTlY","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"why does this need this","msgtype":"m.text","org.matrix.msc1767.text":"why does this need this"}} {"origin_server_ts":1645572687906,"event_id":"$MSA_M1vfr9w6MJwKeOC_Ata-c7E5nJii6ulFOHxwVsg","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"it's literally just html ","msgtype":"m.text","org.matrix.msc1767.text":"it's literally just html "}} {"origin_server_ts":1645572701360,"event_id":"$mk8ElXAL3-DliHyFiagy2la6dYIZhwXhsWyGGTibmKk","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"like medium is an overcomplicated solution ","msgtype":"m.text","org.matrix.msc1767.text":"like medium is an overcomplicated solution "}} {"origin_server_ts":1645572713362,"event_id":"$d-m4-BOiEuwr3SMCuvAdAbP2t4XeUs7n6tKdzNb4nT4","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"it's client side rendered & not static for no fucken reason ","msgtype":"m.text","org.matrix.msc1767.text":"it's client side rendered & not static for no fucken reason "}} {"origin_server_ts":1645572724977,"event_id":"$FXk-8Tp8sChYukTmhoWySmafdJchtaB0Vf-4ea7m1KU","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"what are all these words what ","msgtype":"m.text","org.matrix.msc1767.text":"what are all these words what "}} {"origin_server_ts":1645572738492,"event_id":"$JxnTN5JSAO7Np42bUNs3vszdIUMk_7dsG9G4QJcfbgI","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"solid? seed? stencil? odoo? blazor? ","msgtype":"m.text","org.matrix.msc1767.text":"solid? seed? stencil? odoo? blazor? "}} {"origin_server_ts":1645572814620,"event_id":"$dK4skixzDKg75HuRAJULsmg-fhsw_Qo-0eJollN0Mk4","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"just use html ffs ","msgtype":"m.text","org.matrix.msc1767.text":"just use html ffs "}} {"origin_server_ts":1645572828108,"event_id":"$URtylB7xySOZWynMypQiH34GkKba3qPf4gEZnbSCVaM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"welcome to the world that is webdev :)","msgtype":"m.text"}} {"origin_server_ts":1645572862134,"event_id":"$XXmwa_qswJ9JH6l6w2ERCKSLagnJpxvu5TLMaLOsj-c","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"you dont need an array language you dont need htmx it's called a document you write documents in the document language and you send them when you recieve a request ","msgtype":"m.text","org.matrix.msc1767.text":"you dont need an array language you dont need htmx it's called a document you write documents in the document language and you send them when you recieve a request "}} {"origin_server_ts":1645572950481,"event_id":"$UMkR7lwXE-7Uj3m72yCQ2iNoGtx6w0IEzAAQj-zTw_k","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"but i definitely don't see how an APL would do anything useful in relation to web","msgtype":"m.text"}} {"origin_server_ts":1645575734285,"event_id":"$2TMoheK1cTeuas2mwG-2c_1VPOZl0_Yj10nb9m4xpSs","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$UMkR7lwXE-7Uj3m72yCQ2iNoGtx6w0IEzAAQj-zTw_k"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> but i definitely don't see how an APL would do anything useful in relation to web\n\nHTMX is now a \"revolution\" for web and is starting with python. No need to say 95% for Javascript. Any language with a server now can create (https://htmx.org/examples/) these examples that before were JS domain. If there is a way to match an array language with a current framework and HTMX, then a sliver of that huge pie of python really should be an array web sliver. Dyalog has a server and framework but its not large commercial size and then there is a seat cost. Perhaps KAP (or BQN) + Ktor + HTMX might envelope that."},{"mimetype":"text/html","body":"

In reply to<\/a> @dzaima:matrix.org<\/a>
but i definitely don't see how an APL would do anything useful in relation to web<\/blockquote><\/mx-reply>HTMX is now a "revolution" for web and is starting with python. No need to say 95% for Javascript. Any language with a server now can create (https://htmx.org/examples/) these examples that before were JS domain. If there is a way to match an array language with a current framework and HTMX, then a sliver of that huge pie of python really should be an array web sliver. Dyalog has a server and framework but its not large commercial size and then there is a seat cost. Perhaps KAP (or BQN) + Ktor + HTMX might envelope that."}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> but i definitely don't see how an APL would do anything useful in relation to web\n\nHTMX is now a \"revolution\" for web and is starting with python. No need to say 95% for Javascript. Any language with a server now can create (https://htmx.org/examples/) these examples that before were JS domain. If there is a way to match an array language with a current framework and HTMX, then a sliver of that huge pie of python really should be an array web sliver. Dyalog has a server and framework but its not large commercial size and then there is a seat cost. Perhaps KAP (or BQN) + Ktor + HTMX might envelope that.","msgtype":"m.text","formatted_body":"
In reply to<\/a> @dzaima:matrix.org<\/a>
but i definitely don't see how an APL would do anything useful in relation to web<\/blockquote><\/mx-reply>HTMX is now a "revolution" for web and is starting with python. No need to say 95% for Javascript. Any language with a server now can create (https://htmx.org/examples/) these examples that before were JS domain. If there is a way to match an array language with a current framework and HTMX, then a sliver of that huge pie of python really should be an array web sliver. Dyalog has a server and framework but its not large commercial size and then there is a seat cost. Perhaps KAP (or BQN) + Ktor + HTMX might envelope that."}} {"origin_server_ts":1645575883110,"event_id":"$alk3SFpOAgrKxu5pHPHOxlL6OvlsPenAwhA824KWWjk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"still doesn't have anything to do with arrays though.","msgtype":"m.text"}} {"origin_server_ts":1645575951152,"event_id":"$VeDYfpqKzsJlUHf0uCGGSE4EXMdiGm1-cYjzfq6Ro0s","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"You could always do whatever you wanted server-side. That's how PHP got so popular.","msgtype":"m.text","formatted_body":"You could always do whatever you wanted server-side. That's how PHP got so popular."}} {"origin_server_ts":1645576064631,"event_id":"$EsrP2bYgazYrb1X_QlISJqvShrvP8at4AHuv7JeJonA","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$alk3SFpOAgrKxu5pHPHOxlL6OvlsPenAwhA824KWWjk"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> still doesn't have anything to do with arrays though.\n\nPython is an array language now which means any array language might be more efficient for web development. Client side work now can be done much via HTMX. HTMX will displace much of the JS work on the client... I just see some kind of real array language with a performant webframe and HTMX or perhaps also alpine.js."},{"mimetype":"text/html","body":"
In reply to<\/a> @dzaima:matrix.org<\/a>
still doesn't have anything to do with arrays though.<\/blockquote><\/mx-reply>Python is an array language now which means any array language might be more efficient for web development. Client side work now can be done much via HTMX. HTMX will displace much of the JS work on the client... I just see some kind of real array language with a performant webframe and HTMX or perhaps also alpine.js."}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> still doesn't have anything to do with arrays though.\n\nPython is an array language now which means any array language might be more efficient for web development. Client side work now can be done much via HTMX. HTMX will displace much of the JS work on the client... I just see some kind of real array language with a performant webframe and HTMX or perhaps also alpine.js.","msgtype":"m.text","formatted_body":"
In reply to<\/a> @dzaima:matrix.org<\/a>
still doesn't have anything to do with arrays though.<\/blockquote><\/mx-reply>Python is an array language now which means any array language might be more efficient for web development. Client side work now can be done much via HTMX. HTMX will displace much of the JS work on the client... I just see some kind of real array language with a performant webframe and HTMX or perhaps also alpine.js."}} {"origin_server_ts":1645576125402,"event_id":"$QBqQFDBqeBdEjkSj2EC_fq52fFHp7yBHHCKapLK-aIQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"what \"array language\" means around python and around APL vastly differs","msgtype":"m.text"}} {"origin_server_ts":1645576275230,"event_id":"$2Zi-NOr3s_vYeVbbXrHtRAEEOeheSLGvIiwzIRdU-Hg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"(also it takes like 5 lines of JS to be able to bind server requests to arbitrary html actions. in fact, i've had the (mis)fortune of working a tiny bit on a PHP codebase doing exactly that. All I remember is it was absolutely horrible to use because of the delay to the server)","msgtype":"m.text"}} {"origin_server_ts":1645576305377,"event_id":"$dKvu5zW1Tp63Z_GM6v4Dbxwx2sbxRyYrfd17KDVX6Ps","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"body":"This is our point. The more \"vastly\" plus a decent web framework and HTMX might also might actually like PHP developers. ","msgtype":"m.text","org.matrix.msc1767.text":"This is our point. The more \"vastly\" plus a decent web framework and HTMX might also might actually like PHP developers. "}} {"origin_server_ts":1645576394660,"event_id":"$2iQxc8BXyFgZ59Rj66toeDobWONP-KrmGbo4vzUigEQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"APLy array operations aren't the ones you really need for web though","msgtype":"m.text"}} {"origin_server_ts":1645576493317,"event_id":"$7WX39Dlt-M4BrdMVK3COJulf-qjqszflEh8SulIGxH4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"APLs focus on arrays also inherently makes it harder to effectively use for other things. e.g. maps/dictionaries in APLs (excluding k) either just don't exist, or are much worse to use","msgtype":"m.text"}} {"origin_server_ts":1645576639325,"event_id":"$HS1-biLk0HB6cWU05OyJn-CHLVvN9s1dYgRGiiKNiWY","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$2iQxc8BXyFgZ59Rj66toeDobWONP-KrmGbo4vzUigEQ"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> APLy array operations aren't the ones you really need for web though\n\nThere is already a Dyalog web hosting bureau but my guess is HTMX was too early for a huge amount of that code. "},{"mimetype":"text/html","body":"
In reply to<\/a> @dzaima:matrix.org<\/a>
APLy array operations aren't the ones you really need for web though<\/blockquote><\/mx-reply>There is already a Dyalog web hosting bureau but my guess is HTMX was too early for a huge amount of that code."}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> APLy array operations aren't the ones you really need for web though\n\nThere is already a Dyalog web hosting bureau but my guess is HTMX was too early for a huge amount of that code. ","msgtype":"m.text","formatted_body":"
In reply to<\/a> @dzaima:matrix.org<\/a>
APLy array operations aren't the ones you really need for web though<\/blockquote><\/mx-reply>There is already a Dyalog web hosting bureau but my guess is HTMX was too early for a huge amount of that code."}} {"origin_server_ts":1645576742127,"event_id":"$9xM59R8xwYrOFT-zVACcAnjg5oLox9YUjTB1ObIHRvw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"APL for a backend might make sense if you're doing array-y things. HTML or most things front-end are very not array-y.","msgtype":"m.text"}} {"origin_server_ts":1645576896901,"event_id":"$B8F73FatyY6FsqJ86JZGQRK2D25Kn5zKEODQpQyC6QU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"even with how much I enjoy array languages, I still think JS is much better fit for front-end than any current array language.","msgtype":"m.text"}} {"origin_server_ts":1645576945921,"event_id":"$-2JppRk8KIugn1nkZBUh8NZS8qdTJRZB1uAutyG_Pg0","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$9xM59R8xwYrOFT-zVACcAnjg5oLox9YUjTB1ObIHRvw"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> APL for a backend might make sense if you're doing array-y things. HTML or most things front-end are very not array-y.\n\nJS is just as 90% as array languages are performant. I suppose the other JS is now compiled by V8 or something similar. "},{"mimetype":"text/html","body":"
In reply to<\/a> @dzaima:matrix.org<\/a>
APL for a backend might make sense if you're doing array-y things. HTML or most things front-end are very not array-y.<\/blockquote><\/mx-reply>JS is just as 90% as array languages are performant. I suppose the other JS is now compiled by V8 or something similar."}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> APL for a backend might make sense if you're doing array-y things. HTML or most things front-end are very not array-y.\n\nJS is just as 90% as array languages are performant. I suppose the other JS is now compiled by V8 or something similar. ","msgtype":"m.text","formatted_body":"
In reply to<\/a> @dzaima:matrix.org<\/a>
APL for a backend might make sense if you're doing array-y things. HTML or most things front-end are very not array-y.<\/blockquote><\/mx-reply>JS is just as 90% as array languages are performant. I suppose the other JS is now compiled by V8 or something similar."}} {"origin_server_ts":1645577082396,"event_id":"$UKdk2qZeG-g1ZDzBlnX19a0tXd0uB_UmLnTQym4eClw","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"this isn't about performance,,,","msgtype":"m.text","org.matrix.msc1767.text":"this isn't about performance,,,"}} {"origin_server_ts":1645577085229,"event_id":"$J-w3JyOLc2DOHJFe1sFfFtHc1LiTSJ1gR6f-4j0sukQ","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"but programming style ","msgtype":"m.text","org.matrix.msc1767.text":"but programming style "}} {"origin_server_ts":1645577243439,"event_id":"$2r4dTzin0T3KoW0s0iSkwb9uES7d6m-3ytFugzTgUJU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"the front end doesn't have any situations where you have arrays with millions (or even just thousands) of homogenous primitive elements. That's like the entire space where APL can be beneficial.","msgtype":"m.text"}} {"origin_server_ts":1645577264222,"event_id":"$YCozl8ddJ4RNcg_erycB54NdbbYxnqbD_RY7EQavgv8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"body":"the front end doesn't have any situations where you have arrays with millions (or even just thousands) of homogenous primitive elements. That's like the entire space where APL can be beneficial in terms of performance.","msgtype":"m.text"},"m.relates_to":{"event_id":"$2r4dTzin0T3KoW0s0iSkwb9uES7d6m-3ytFugzTgUJU","rel_type":"m.replace"},"body":"* the front end doesn't have any situations where you have arrays with millions (or even just thousands) of homogenous primitive elements. That's like the entire space where APL can be beneficial in terms of performance.","msgtype":"m.text"}} {"origin_server_ts":1645577509695,"event_id":"$DjL4C05a2OJ2cP3sB7mytkMXauQnhfmyTpxDGm2RZns","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$J-w3JyOLc2DOHJFe1sFfFtHc1LiTSJ1gR6f-4j0sukQ"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@eris:chat.unix.lgbt> but programming style\n\nThere are billions of money lost (capitalists) over the next say 5 years due to slow code in phones. I recently read such an article."},{"mimetype":"text/html","body":"
In reply to<\/a> @eris:chat.unix.lgbt<\/a>
but programming style <\/blockquote><\/mx-reply>There are billions of money lost (capitalists) over the next say 5 years due to slow code in phones. I recently read such an article."}],"format":"org.matrix.custom.html","body":"> <@eris:chat.unix.lgbt> but programming style\n\nThere are billions of money lost (capitalists) over the next say 5 years due to slow code in phones. I recently read such an article.","msgtype":"m.text","formatted_body":"
In reply to<\/a> @eris:chat.unix.lgbt<\/a>
but programming style <\/blockquote><\/mx-reply>There are billions of money lost (capitalists) over the next say 5 years due to slow code in phones. I recently read such an article."}} {"origin_server_ts":1645577558119,"event_id":"$LWUa5kQE-oCtfLAs2nZ3ZJ69fpjjC3Ph1LuI6BxhseU","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"good","msgtype":"m.text"}} {"origin_server_ts":1645577569746,"event_id":"$oTLuxlnACiE08X8QAoAKhNZn1IuTtp_lCfumlVGK_-I","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"lets make them lose billions more ay?","msgtype":"m.text"}} {"origin_server_ts":1645577573176,"event_id":"$FaN4AvvKYxnV5JtfO4K-tt0PkjB91Jx6z6GgX18KfEE","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"body":"Added of course users don't like even 0.5 seconds delay - they will switch.","msgtype":"m.text","org.matrix.msc1767.text":"Added of course users don't like even 0.5 seconds delay - they will switch."}} {"origin_server_ts":1645577596202,"event_id":"$wFQA3YPQ0xsKz_pNADsAr2nWAzARwu15VTMDDTkyz84","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"i dont think you're getting it","msgtype":"m.text"}} {"origin_server_ts":1645577613515,"event_id":"$NDwiUjKtFMbhHxee8ogs4yXIg0gILqpzWowA8oyMV7E","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"the solution to unperformant software is not.... apl as a webserver backend","msgtype":"m.text"}} {"origin_server_ts":1645577664610,"event_id":"$LjNWuM3uUkmop9SIGKvEDEB2FJvR44vJdGauugiu9P0","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"generally, the more layers of onion you peel back, the more performance is accessible, no?","msgtype":"m.text"}} {"origin_server_ts":1645577698231,"event_id":"$hgerDvZycMK0XInzYyl7Y8Re8SAsrXpgyBp5l1t6sGU","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"writing consistently performant (i am careful about ny wording due to the existence of jit) code is easier in something like C than something like java","msgtype":"m.text"}} {"origin_server_ts":1645577736284,"event_id":"$FCaQEMZ473jVxOQwm2RRyLqMHWAe6Ng8OtkPAon8dSA","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"body":"I guess is the best can do is Kotlin and that huge code called \"Array\" in their library. Definitely is compiled but I think just say a very fast interpreter like Lua lang would be enough.","msgtype":"m.text","org.matrix.msc1767.text":"I guess is the best can do is Kotlin and that huge code called \"Array\" in their library. Definitely is compiled but I think just say a very fast interpreter like Lua lang would be enough."}} {"origin_server_ts":1645577742503,"event_id":"$XG7ORid_lKxds8fLWOjXsCfBcaOouyBvE9ojq3fRhxw","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"apl can reach easy big performance buckeroos in non scalar code","msgtype":"m.text"}} {"origin_server_ts":1645577753526,"event_id":"$WjliSycP0OBWjWcuS3aWxvtif3Y3LmwdZr2EWI27q_0","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"because someone's put all the thought in","msgtype":"m.text"}} {"origin_server_ts":1645577760512,"event_id":"$fTM_k0sbmRLp2wq-oydJjGz-UCQdSHixpd8blxiyb80","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"but honestly","msgtype":"m.text"}} {"origin_server_ts":1645577769641,"event_id":"$4_LodfVoLe1tBxZGo0fTtWR4uCszxDIbldDpMmTyydQ","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"i havent a clue what you're saying","msgtype":"m.text"}} {"origin_server_ts":1645577782988,"event_id":"$TWjpf8uCI4wk9xNsAexGSw2PdyaIzNKiV7iu2fD3Gik","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"Making a request to a server to execute any operation is definitely not the best option if what you want is low response time.","msgtype":"m.text"}} {"origin_server_ts":1645577811086,"event_id":"$0rw5xXn98iL2l4oD3da1SlYGkRdNtTSO5jblXhvaZ5E","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"what are you trying to do and why do you think apl is suited for it","msgtype":"m.text"}} {"origin_server_ts":1645578228070,"event_id":"$4xpdK9dW0ZpEOZjHDCjBrXbv4CqVNBXvL8STJoHCIa0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"cause if your intention doesn't revolve arrays with tens of thousands of items, all of which are numbers, APL is not gonna give you any performance benefits","msgtype":"m.text"}} {"origin_server_ts":1645578240605,"event_id":"$6v5KgqmOpCImuBF9p3DwXNydNhvBJHsKlLjA-QIDEW0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"body":"cause if your intention doesn't revolve around arrays with tens of thousands of items, all of which are numbers, APL is not gonna give you any performance benefits","msgtype":"m.text"},"m.relates_to":{"event_id":"$4xpdK9dW0ZpEOZjHDCjBrXbv4CqVNBXvL8STJoHCIa0","rel_type":"m.replace"},"body":"* cause if your intention doesn't revolve around arrays with tens of thousands of items, all of which are numbers, APL is not gonna give you any performance benefits","msgtype":"m.text"}} {"origin_server_ts":1645578345585,"event_id":"$80K4WxYhJgEE8CpK1W1py5qeztmkuYNQo-SuDOdRNkg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"and instead you'll just have a mediocre interpreted language with this bag of array operations that you won't use, and not much support for what you actually want to do","msgtype":"m.text"}} {"origin_server_ts":1645578471944,"event_id":"$MviyVLlKGM3bR5urCrfo16445bOrPCDciLsWv_kNZR0","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"body":"The entire client side world is pivoting with HTMX. This could be (with HTMX) Python, Lua or perhaps some other array language or just a really good array library with Kotlin. The problem is that compiled languages are like a hairy shirt when attired like people comfortable with interpreters. Python and PHP now like their arrays with new shiny constructs. Why not give them regaled arrays?","msgtype":"m.text","org.matrix.msc1767.text":"The entire client side world is pivoting with HTMX. This could be (with HTMX) Python, Lua or perhaps some other array language or just a really good array library with Kotlin. The problem is that compiled languages are like a hairy shirt when attired like people comfortable with interpreters. Python and PHP now like their arrays with new shiny constructs. Why not give them regaled arrays?"}} {"origin_server_ts":1645578799222,"event_id":"$8WIyMCVpwbWhr1gId6HDL0MVW1FrbAu51ZkV8oDVlPE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"arrays are _a part_ of python/JS/whatever. Those languages have lots of other features for doing many other things too. APL though focuses its entire syntax on just arrays. You may want better arrays, but, as-is, that'll come at a cost on everything else, and that's intentional.","msgtype":"m.text","formatted_body":"arrays are a part<\/em> of python/JS/whatever. Those languages have lots of other features for doing many other things too. APL though focuses its entire syntax on just arrays. You may want better arrays, but, as-is, that'll come at a cost on everything else, and that's intentional."}} {"origin_server_ts":1645579014210,"event_id":"$1M8QNGTQ-b6iJhJNE3wFeRq9YyOcENYl-xje_UcK0n4","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"neither python nor lua are array languages","msgtype":"m.text"}} {"origin_server_ts":1645579095296,"event_id":"$xETioycR0XVjvuQCWVtC8DW1gvKHGPpAViGVh-uBdGk","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"an 'array language' is a language that focuses on dealing with lots of things at once ","msgtype":"m.text","formatted_body":"an 'array language' is a language that focuses on dealing with lots of things at once"}} {"origin_server_ts":1645579113073,"event_id":"$8odK3gUT2CJPBFG-pMM_oKSvIMDLfoj1ckLgJeS1MTI","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ie, collections of things/arrays ","msgtype":"m.text","formatted_body":"ie, collections of things/arrays"}} {"origin_server_ts":1645579131386,"event_id":"$uqdsuL9xSCAYNFLmdkRT0GU_3PFubv377ImUXB25Gco","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"this is not a design consideration of any mainstream language beyond R or Fortran ","msgtype":"m.text","formatted_body":"this is not a design consideration of any mainstream language beyond R or Fortran"}} {"origin_server_ts":1645579190089,"event_id":"$rtptsNXw2iWfRFxnz2b7c9aAnXhEfKefu1339rqzIMM","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"'array language' is not hidden performance sauce or magic productivity juice","msgtype":"m.text"}} {"origin_server_ts":1645579200545,"event_id":"$ers80bNNxR9SXuEZja2eL_IXE3uYu9AF-r8U7m__gUU","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$8WIyMCVpwbWhr1gId6HDL0MVW1FrbAu51ZkV8oDVlPE"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> arrays are _a part_ of python/JS/whatever. Those languages have lots of other features for doing many other things too. APL though focuses its entire syntax on just arrays. You may want better arrays, but, as-is, that'll come at a cost on everything else, and that's intentional.\n\nHere is an example. The [Nim lang has a forum](https://forum.nim-lang.org/) intentionally made close to Discourse.org - huge making forums for other people. So Nim created perhaps 1/20th of the size of a usual discourse forum. The code was around 5000 lines and it was just a toy. The LOC in an array language would be around 1000 lines and not that dense. APL is quicker for coding."},{"mimetype":"text/html","body":"
In reply to<\/a> @dzaima:matrix.org<\/a>
arrays are a part<\/em> of python/JS/whatever. Those languages have lots of other features for doing many other things too. APL though focuses its entire syntax on just arrays. You may want better arrays, but, as-is, that'll come at a cost on everything else, and that's intentional.<\/blockquote><\/mx-reply>Here is an example. The
Nim lang has a forum<\/a> intentionally made close to Discourse.org - huge making forums for other people. So Nim created perhaps 1/20th of the size of a usual discourse forum. The code was around 5000 lines and it was just a toy. The LOC in an array language would be around 1000 lines and not that dense. APL is quicker for coding."}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> arrays are _a part_ of python/JS/whatever. Those languages have lots of other features for doing many other things too. APL though focuses its entire syntax on just arrays. You may want better arrays, but, as-is, that'll come at a cost on everything else, and that's intentional.\n\nHere is an example. The [Nim lang has a forum](https://forum.nim-lang.org/) intentionally made close to Discourse.org - huge making forums for other people. So Nim created perhaps 1/20th of the size of a usual discourse forum. The code was around 5000 lines and it was just a toy. The LOC in an array language would be around 1000 lines and not that dense. APL is quicker for coding.","msgtype":"m.text","formatted_body":"
In reply to<\/a> @dzaima:matrix.org<\/a>
arrays are a part<\/em> of python/JS/whatever. Those languages have lots of other features for doing many other things too. APL though focuses its entire syntax on just arrays. You may want better arrays, but, as-is, that'll come at a cost on everything else, and that's intentional.<\/blockquote><\/mx-reply>Here is an example. The
Nim lang has a forum<\/a> intentionally made close to Discourse.org - huge making forums for other people. So Nim created perhaps 1/20th of the size of a usual discourse forum. The code was around 5000 lines and it was just a toy. The LOC in an array language would be around 1000 lines and not that dense. APL is quicker for coding."}} {"origin_server_ts":1645579215439,"event_id":"$fUN939oVc8sC0sf7vJhQFNa12mDWNBt8NAGf7kDx-RU","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"ok","msgtype":"m.text"}} {"origin_server_ts":1645579220001,"event_id":"$RjOR5WLLO2bA-qWpzy5hkXMilpyt5r_X__N5N9YHAd8","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"use K4/q","msgtype":"m.text"}} {"origin_server_ts":1645579224998,"event_id":"$yRCuY-6ZCrumY26nkxGJ1NlkS-XzivOh41xpHryPqF4","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"problem solved","msgtype":"m.text"}} {"origin_server_ts":1645579259292,"event_id":"$sh6bl5FJ5gWpQOLPwJHpJNYysj0d7VaPbjqEpcz29d4","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"k4/q has a web framework thingy built in","msgtype":"m.text"}} {"origin_server_ts":1645579330236,"event_id":"$SfHpfLV2epTIUOrCATfCDqoA9mR8PLX04PMBI1zbWzA","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$ers80bNNxR9SXuEZja2eL_IXE3uYu9AF-r8U7m__gUU"}},"format":"org.matrix.custom.html","body":"> <@cruisearray:matrix.org> Here is an example. The [Nim lang has a forum](https://forum.nim-lang.org/) intentionally made close to Discourse.org - huge making forums for other people. So Nim created perhaps 1/20th of the size of a usual discourse forum. The code was around 5000 lines and it was just a toy. The LOC in an array language would be around 1000 lines and not that dense. APL is quicker for coding.\n\nyou could also get that 1000LOC with whitney-style coding :P ","msgtype":"m.text","formatted_body":"
In reply to<\/a> @cruisearray:matrix.org<\/a>
Here is an example. The
Nim lang has a forum<\/a> intentionally made close to Discourse.org - huge making forums for other people. So Nim created perhaps 1/20th of the size of a usual discourse forum. The code was around 5000 lines and it was just a toy. The LOC in an array language would be around 1000 lines and not that dense. APL is quicker for coding.<\/blockquote><\/mx-reply>you could also get that 1000LOC with whitney-style coding :P"}} {"origin_server_ts":1645579343139,"event_id":"$HpcdpGrz0KRCgJdR1WS7iRR28ilKkZshvwShAwfWOwQ","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"body":"Not commercial enough: https://www.paulchernoff.com/ramblings/2016/5/5/k4-web-server","msgtype":"m.text","org.matrix.msc1767.text":"Not commercial enough: https://www.paulchernoff.com/ramblings/2016/5/5/k4-web-server"}} {"origin_server_ts":1645579352033,"event_id":"$70VNVR-1B2wqCqdVnDmyU0mao2zQx9EpIusugPQ0Sd0","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"APL's relevance isnt only it's density","msgtype":"m.text"}} {"origin_server_ts":1645579364492,"event_id":"$-tGZD_tKC1pFat9PVqGTFS-qyC41apJnEdemBOssMKQ","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$HpcdpGrz0KRCgJdR1WS7iRR28ilKkZshvwShAwfWOwQ"}},"format":"org.matrix.custom.html","body":"> <@cruisearray:matrix.org> Not commercial enough: https://www.paulchernoff.com/ramblings/2016/5/5/k4-web-server\n\nsummarise that article pls","msgtype":"m.text","formatted_body":"
In reply to<\/a> @cruisearray:matrix.org<\/a>
Not commercial enough: https://www.paulchernoff.com/ramblings/2016/5/5/k4-web-server<\/blockquote><\/mx-reply>summarise that article pls"}} {"origin_server_ts":1645579434736,"event_id":"$IkxaaM0iIWlLZDq5JKY3D3EjlraVMsf0-X-1w-PZU0s","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$-tGZD_tKC1pFat9PVqGTFS-qyC41apJnEdemBOssMKQ"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@eris:chat.unix.lgbt> summarise that article pls\n\nThat was the K4 framework."},{"mimetype":"text/html","body":"
In reply to<\/a> @eris:chat.unix.lgbt<\/a>
summarise that article pls<\/blockquote><\/mx-reply>That was the K4 framework."}],"format":"org.matrix.custom.html","body":"> <@eris:chat.unix.lgbt> summarise that article pls\n\nThat was the K4 framework.","msgtype":"m.text","formatted_body":"
In reply to<\/a> @eris:chat.unix.lgbt<\/a>
summarise that article pls<\/blockquote><\/mx-reply>That was the K4 framework."}} {"origin_server_ts":1645579449549,"event_id":"$GV8UfbYk3JqTMjLarit4r8wsCYLVg3VTn1jTlrjbQsY","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"im on a phone and firefox is bleh as of latw so reading it would take less time tjan opening the article","msgtype":"m.text"}} {"origin_server_ts":1645579451658,"event_id":"$B4XAx9ZO246ETuonhrwRxIt54krZO_CgdQREolZ1XfA","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$IkxaaM0iIWlLZDq5JKY3D3EjlraVMsf0-X-1w-PZU0s"}},"format":"org.matrix.custom.html","body":"> <@cruisearray:matrix.org> That was the K4 framework.\n\n?","msgtype":"m.text","formatted_body":"
In reply to<\/a> @cruisearray:matrix.org<\/a>
That was the K4 framework.<\/blockquote><\/mx-reply>?"}} {"origin_server_ts":1645579464397,"event_id":"$VC9F5wAlNGA8dvzbfmQXNaz3moDrXix3zu7uC9P571s","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"what is 'not commercial enough' about it","msgtype":"m.text"}} {"origin_server_ts":1645579488336,"event_id":"$vZCarzwZWDKowogOdPw9QeUxIdwQbB8a-YVp1mMUfk0","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"just... make it more commercial?","msgtype":"m.text"}} {"origin_server_ts":1645579491548,"event_id":"$LSc9FfFeYBrsd3Ndsv2qKg5SMDz9pfjTF7hQtA9wN78","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"i guess????","msgtype":"m.text"}} {"origin_server_ts":1645579509699,"event_id":"$4gtBVv7zu-SxdhK5PRyDHvSxMd5puWrF_WmqW29OSwQ","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"what does it lack in your eyes for achieving the purpose of writing web apps in array languages","msgtype":"m.text"}} {"origin_server_ts":1645579530128,"event_id":"$YEiQyEc9bhVnUgo5HSOl31l4XtJR1aApGO7NiXosl7Q","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"and why not just write dense code in 'scalar' (non array) languages","msgtype":"m.text"}} {"origin_server_ts":1645579620177,"event_id":"$QEl5p3KEi-XEJ42gN50afxBZQejpSRQfKpG40QP25x0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$ers80bNNxR9SXuEZja2eL_IXE3uYu9AF-r8U7m__gUU"}},"format":"org.matrix.custom.html","body":"> <@cruisearray:matrix.org> Here is an example. The [Nim lang has a forum](https://forum.nim-lang.org/) intentionally made close to Discourse.org - huge making forums for other people. So Nim created perhaps 1/20th of the size of a usual discourse forum. The code was around 5000 lines and it was just a toy. The LOC in an array language would be around 1000 lines and not that dense. APL is quicker for coding.\n\nI'm pretty sure that if you're not doing whole array operations (which you pretty much won't be for rendering html), the ease of coding between APL and JS/Python/whatnot would be mostly comparable, if not disadvantageous to APL.\nSo, unless you write your whole database in APL, it won't help you. APL doesn't magically make any code shorter or quicker to code. It has to be well-suited for it. Front-end just isn't.","msgtype":"m.text","formatted_body":"
In reply to<\/a> @cruisearray:matrix.org<\/a>
Here is an example. The
Nim lang has a forum<\/a> intentionally made close to Discourse.org - huge making forums for other people. So Nim created perhaps 1/20th of the size of a usual discourse forum. The code was around 5000 lines and it was just a toy. The LOC in an array language would be around 1000 lines and not that dense. APL is quicker for coding.<\/blockquote><\/mx-reply>I'm pretty sure that if you're not doing whole array operations (which you pretty much won't be for rendering html), the ease of coding between APL and JS/Python/whatnot would be mostly comparable, if not disadvantageous to APL.
So, unless you write your whole database in APL, it won't help you. APL doesn't magically make any code shorter or quicker to code. It has to be well-suited for it. Front-end just isn't."}} {"origin_server_ts":1645579672845,"event_id":"$nSd1ODRaneJJLkaaQN3wQ1eYM0TuQiRqM7GW2WaZ_-Y","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"mhm","msgtype":"m.text"}} {"origin_server_ts":1645579895473,"event_id":"$OfdreULlJjMaTgSUEOvoVUtEM_LWO2_i0CuWvvuTA5M","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"body":"This is enterprise level: https://ktor.io/. There are many others in other languages. My use was IBM APL and J for a few commercial applications and later dabbling. My guess is there are many benefits for web development in array languages. A good example would be Kotlin and its array library. I should check it out more deeply.","msgtype":"m.text","org.matrix.msc1767.text":"This is enterprise level: https://ktor.io/. There are many others in other languages. My use was IBM APL and J for a few commercial applications and later dabbling. My guess is there are many benefits for web development in array languages. A good example would be Kotlin and its array library. I should check it out more deeply."}} {"origin_server_ts":1645579919907,"event_id":"$CDd_OJDohOv_pwOoiW4tlaaowrqY31rBRGVk-EHdIs0","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"????","msgtype":"m.text"}} {"origin_server_ts":1645579924376,"event_id":"$Ib5fkGC-WMoiXeDPyN4G3aU-yYnmjUJw02mJPyY2k5Q","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"we're telling you","msgtype":"m.text"}} {"origin_server_ts":1645579929655,"event_id":"$NtqWxjKeHrxUzBrfmp5nu1w2lyuYvQhR-7IXcjUfaEM","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"why there isn't a benefit","msgtype":"m.text"}} {"origin_server_ts":1645579945719,"event_id":"$d5fyJ1IJcjRTgWia62fPaiGwJgLcXJ7pEQAhoBZSUEU","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"what does 'enterprise level' *mean*","msgtype":"m.text","formatted_body":"what does 'enterprise level' mean<\/em>"}} {"origin_server_ts":1645579963758,"event_id":"$kIBg3MMIeEVusNcjiejFeGRCejLV_LIUZgsgLN-HsXs","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"why isnt k4 enterprise level? it is used by enterprises","msgtype":"m.text"}} {"origin_server_ts":1645579980424,"event_id":"$WUsa5NkrXecD_xx9bFDKaX-c2SxFAi05VaNI87g1Sko","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"> Create asynchronous client and server applications. Anything from microservices to multiplatform HTTP client apps in a simple way. ","msgtype":"m.text","formatted_body":"
\n

Create asynchronous client and server applications. Anything from microservices to multiplatform HTTP client apps in a simple way.<\/p>\n<\/blockquote>"}} {"origin_server_ts":1645579986673,"event_id":"$YClM0PvDvzOoJBgMPlVe7Q5hsVGpuPCEZUjsVCOXzCI","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":":mikuded: ","msgtype":"m.text","formatted_body":"\":mikuded:\""}} {"origin_server_ts":1645580045679,"event_id":"$8VTanLTQz19WHopFQxefTujbKpXAlOe2Y_AWfs2zyeQ","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"body":"But I already did that with two array languages - commercial. K4's web framework is nice but it not as developmed as Ktor","msgtype":"m.text","org.matrix.msc1767.text":"But I already did that with two array languages - commercial. K4's web framework is nice but it not as developmed as Ktor"}} {"origin_server_ts":1645580097587,"event_id":"$KzmJZFxX1hYVU3OK6jE4K0TwoejbmUH5ORy79cfgoh0","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"sure","msgtype":"m.text"}} {"origin_server_ts":1645580101802,"event_id":"$7NXZ_MTfcB0_7f8VyV5voFNo8UuddeM5ylwbTY-bfk4","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"but its an array language","msgtype":"m.text"}} {"origin_server_ts":1645580109408,"event_id":"$oi4wOrivyM0Tc9sfoQXJ54e83sz47SQp_SvX02LgFIY","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"and it does web stuff","msgtype":"m.text"}} {"origin_server_ts":1645580130451,"event_id":"$bqv3MuqWpRheg9rlKXbSmialVKjcuva5AFlULqkYSsQ","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"what are you trying to do ","msgtype":"m.text","formatted_body":"what are you trying to do"}} {"origin_server_ts":1645580187088,"event_id":"$UsgBcOuVIEnyNxr9RPbJll1qN96A8CbrNLjEjVD8cp4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$8VTanLTQz19WHopFQxefTujbKpXAlOe2Y_AWfs2zyeQ"}},"format":"org.matrix.custom.html","body":"> <@cruisearray:matrix.org> But I already did that with two array languages - commercial. K4's web framework is nice but it not as developmed as Ktor\n\nbut what about the actual langauge? If framework is all that matters, the language doesn't matter by dedinition","msgtype":"m.text","formatted_body":"

In reply to<\/a> @cruisearray:matrix.org<\/a>
But I already did that with two array languages - commercial. K4's web framework is nice but it not as developmed as Ktor<\/blockquote><\/mx-reply>but what about the actual langauge? If framework is all that matters, the language doesn't matter by dedinition"}} {"origin_server_ts":1645580199749,"event_id":"$wq98qrWlsiJIuTgF7hNB_nf_LGitK-Ci_VdFdheMapU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"> <@cruisearray:matrix.org> But I already did that with two array languages - commercial. K4's web framework is nice but it not as developmed as Ktor\n\nbut what about the actual langauge? If framework is all that matters, the language doesn't matter by definition","msgtype":"m.text","formatted_body":"
In reply to<\/a> cruisearray<\/a>
But I already did that with two array languages - commercial. K4's web framework is nice but it not as developmed as Ktor<\/blockquote><\/mx-reply>but what about the actual langauge? If framework is all that matters, the language doesn't matter by definition"},"m.relates_to":{"event_id":"$UsgBcOuVIEnyNxr9RPbJll1qN96A8CbrNLjEjVD8cp4","rel_type":"m.replace"},"body":"* but what about the actual langauge? If framework is all that matters, the language doesn't matter by definition","msgtype":"m.text"}} {"origin_server_ts":1645580218918,"event_id":"$MkTLGmw1pSw9YoUltYFwAkrALK2zWVXTnYF_WtzBRI8","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"exactamundo","msgtype":"m.text"}} {"origin_server_ts":1645580252215,"event_id":"$cgnrDmw_DzW1PZDBAfxv3YQlz-IQB3ZslenEfldUfcY","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"body":"My guess would be a Kotlin array language plus HTMX and Ktor. My languages were IBM APL2 and J.","msgtype":"m.text","org.matrix.msc1767.text":"My guess would be a Kotlin array language plus HTMX and Ktor. My languages were IBM APL2 and J."}} {"origin_server_ts":1645580264443,"event_id":"$7GKwXV4rkfG1MDcUudWoAJ0hGhXoojww6QGFs7UUHF8","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"are you looking for 'array language' with 'newspeak modern web frsmework'","msgtype":"m.text"}} {"origin_server_ts":1645580269239,"event_id":"$0KeW-pG5NLsbpBvVMx0VcADyUQsdNmlT2o26sRV4ICM","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$cgnrDmw_DzW1PZDBAfxv3YQlz-IQB3ZslenEfldUfcY"}},"format":"org.matrix.custom.html","body":"> <@cruisearray:matrix.org> My guess would be a Kotlin array language plus HTMX and Ktor. My languages were IBM APL2 and J.\n\nyour guess for what???:","msgtype":"m.text","formatted_body":"
In reply to<\/a> @cruisearray:matrix.org<\/a>
My guess would be a Kotlin array language plus HTMX and Ktor. My languages were IBM APL2 and J.<\/blockquote><\/mx-reply>your guess for what???:"}} {"origin_server_ts":1645580273386,"event_id":"$HGRcP2BcRWUcW0hAKaZgFbFzvWcgVRBXOpwpB6DzvNw","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"what are you saying","msgtype":"m.text"}} {"origin_server_ts":1645580292510,"event_id":"$knxuQ9EPhokqbiYfKFagUfaXIbknIqvhJTdXlqsnzYg","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"oh nevermind this is on me","msgtype":"m.text"}} {"origin_server_ts":1645580298588,"event_id":"$wW0mwOTvre2qPVsaD8teYOcMsa-mLjmKdchNpCoE3Dk","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"english grammar is fun ","msgtype":"m.text","formatted_body":"english grammar is fun"}} {"origin_server_ts":1645580308504,"event_id":"$V7vCks2xS0Dm8hJQJNjkB8RA3y-QXVNo76S4x7tnw3I","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"dzaima is not asking what the langusge would be","msgtype":"m.text"}} {"origin_server_ts":1645580315498,"event_id":"$VeR-EIVKZ_R2G1zHvZAYlKu91HHpgmqKytQwLjKdIfw","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"but why the languahe is of relevance","msgtype":"m.text"}} {"origin_server_ts":1645580323309,"event_id":"$4HVsMwfLZFLqWQvFwmlIByN5pI8KhUjFvi99Ak1mkW0","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"if all you care about is the framework","msgtype":"m.text"}} {"origin_server_ts":1645580434539,"event_id":"$uFUGGq_bjQ0yk2COo1JVaHTarokGF5U0U2N6Ct3KOYE","sender":"@cruisearray:matrix.org","user_id":"@cruisearray:matrix.org","type":"m.room.message","content":{"body":"I already know the relevance since I coded commercial use APL2 and J. My guess is there are web related uses. ","msgtype":"m.text","org.matrix.msc1767.text":"I already know the relevance since I coded commercial use APL2 and J. My guess is there are web related uses. "}} {"origin_server_ts":1645580455106,"event_id":"$MBLjxYZk26zlbjXY0pJ1ibeCqg3SCLvXRIJ4Y3Qva1Q","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":",what","msgtype":"m.text"}} {"origin_server_ts":1645580455532,"event_id":"$t05Di7i2rnkkMrWV-Y1-4EzDAHlhskSp7eWhtyaHLoE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"k/APL/J/BQN don't and won't provide anything useful for making better web frameworks. Their job is to provide array operations. Web frameworks don't need a lot of array operations. Certainly not ones on primitive homogenous flat ones consisting of only numbers.","msgtype":"m.text"}} {"origin_server_ts":1645580462593,"event_id":"$o3RMWiOr4Zjm72WNb9c4IVqXJUnN1pAEUWNCqu29Bv8","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"^^^^^^^","msgtype":"m.text"}} {"origin_server_ts":1645580464702,"event_id":"$TjNXKiQg9dbXytBrstp6tCvAvJqEhhYVmfP6JatJPjQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"anyway gtg sleep","msgtype":"m.text"}} {"origin_server_ts":1645680496025,"event_id":"$-f1iSnY8Myh-7C0H9Zabh-WUeIwbqlANmvIWawOWZd8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm writing a blog post talking about how programming language design is a rabbit hole. I'd appreciate some criticism before I post it.","msgtype":"m.text"}} {"origin_server_ts":1645680496964,"event_id":"$Ou-_Gj7hIPk0Le9KGn0RnpgPezSOC25VgrXr07pmRAo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://write.as/4vj8uom2xr4uhnds.md","msgtype":"m.text"}} {"origin_server_ts":1645682225663,"event_id":"$THp1a6YrCz3lKcRCUKPSlZXNGiC4g_IbPJbeIJ98uSo","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"`down a rabbit hold' should be hole i think","msgtype":"m.text"}} {"origin_server_ts":1645682753067,"event_id":"$9A_YipwWkDOPYSTXQEJww0ftSuSr2d8Fpi30eP-4WcU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks ","msgtype":"m.text"}} {"origin_server_ts":1645984435713,"event_id":"$nTMas2LFLNFEyyzB-4970cdP1vHB_-Ivm9BEI5iZgBQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It appears my programming language blog post got some attention. Over 20k views. I don't think anything I've written has been read that much.","msgtype":"m.text"}} {"origin_server_ts":1645984943084,"event_id":"$PSBzz39CsGrG42lOVtXMqeV2-mBchoch8HdT14kel9Q","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Funny that no one on [HN](https://news.ycombinator.com/item?id=30485604) has any clue that the language in question is an APL. Particularly funny:","msgtype":"m.text","formatted_body":"Funny that no one on
HN<\/a> has any clue that the language in question is an APL. Particularly funny:"}} {"origin_server_ts":1645984946882,"event_id":"$jlG7EP6b2ExbJIs4Ro9UKU6cayri5OI3vH-fjnJtzMA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"> your language needs an IDE, right?\nIf it does, it\u2019s a bad language.","msgtype":"m.text","formatted_body":"> your language needs an IDE, right?
If it does, it\u2019s a bad language."}} {"origin_server_ts":1645985063639,"event_id":"$__6ZzE60ZaQRPxHVJ6B6-HEPkK8RwyJG1EUOHRMINLE","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"agreed","msgtype":"m.text","org.matrix.msc1767.text":"agreed"}} {"origin_server_ts":1645985371464,"event_id":"$T7e79wwtaz4ormiwXZ9LwG3L3M0T-NghpvR03bJ0AZw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$PSBzz39CsGrG42lOVtXMqeV2-mBchoch8HdT14kel9Q"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Funny that no one on [HN](https://news.ycombinator.com/item?id=30485604) has any clue that the language in question is an APL. Particularly funny:\n\nYeah, I intentionally avoided mentioning any details about the language. If anyone wanted to find out, they could easily find mentions of it in other posts on the blog.","msgtype":"m.text","formatted_body":"
In reply to<\/a> @mlochbaum:matrix.org<\/a>
Funny that no one on
HN<\/a> has any clue that the language in question is an APL. Particularly funny:<\/blockquote><\/mx-reply>Yeah, I intentionally avoided mentioning any details about the language. If anyone wanted to find out, they could easily find mentions of it in other posts on the blog."}} {"origin_server_ts":1645985408978,"event_id":"$s-X4tzFPIGo58jRhePeljDXnmUa43Vn72w0m4fqxzVI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But we all know people barely read the article, so this turned out to be good actually. It led to people discussing language design and not the specific features of my language in particular.","msgtype":"m.text"}} {"origin_server_ts":1645985446194,"event_id":"$j62VAn_FxDepONTBAPWLxcVvD3MAyJo9g2J55MmzfEM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The main block link actually 404ed when I tried it before, but it's working now.","msgtype":"m.text","formatted_body":"The main block link actually 404ed when I tried it before, but it's working now."}} {"origin_server_ts":1645985469762,"event_id":"$iboFIrUNCInhSsn1oxJzBhDt1HGIE8fSh9lupfRVkeQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I mean, KAP can be run in pure text mode. But an IDE is needed to get people even barely interested in trying it.","msgtype":"m.text"}} {"origin_server_ts":1645985484092,"event_id":"$4Fw-iJJUXiOtfybUlzODlm-l_TwyVbr8VuoX81Gn00I","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.new_content":{"body":"The main blog link actually 404ed when I tried it before, but it's working now.","msgtype":"m.text","org.matrix.msc1767.text":"The main blog link actually 404ed when I tried it before, but it's working now."},"m.relates_to":{"event_id":"$j62VAn_FxDepONTBAPWLxcVvD3MAyJo9g2J55MmzfEM","rel_type":"m.replace"},"body":" * The main blog link actually 404ed when I tried it before, but it's working now.","msgtype":"m.text","org.matrix.msc1767.text":" * The main blog link actually 404ed when I tried it before, but it's working now."}} {"origin_server_ts":1645985493251,"event_id":"$421rakfUOC94WR2BEFxA7SraJst-o1XHBDo1-hB9bg8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: I'm on the free plan on write.as, so I'm sure they block on high draffic.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I'm on the free plan on write.as, so I'm sure they block on high draffic."}} {"origin_server_ts":1645985496537,"event_id":"$TEt3jJx_YEvMMb_NUCiaaVu81vEhtLcBSsyZM5xkaJc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Marshall: I'm on the free plan on write.as, so I'm sure they block on high traffic.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I'm on the free plan on write.as, so I'm sure they block on high traffic."},"m.relates_to":{"event_id":"$421rakfUOC94WR2BEFxA7SraJst-o1XHBDo1-hB9bg8","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Marshall: I'm on the free plan on write.as, so I'm sure they block on high traffic.","msgtype":"m.text","formatted_body":" * Marshall<\/a>: I'm on the free plan on write.as, so I'm sure they block on high traffic."}} {"origin_server_ts":1645985504652,"event_id":"$01-GZynYmcmcbynF2VCYN29O6xEivXKZcIrMABZmhvM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"write.as is really good, so I should really pay for it.","msgtype":"m.text"}} {"origin_server_ts":1645985562221,"event_id":"$d1Hdoi9kP0xKksMAi96h97rTwesOFWhpVfnufNujLKI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"As in, that post was fine but I couldn't see what else you'd written.","msgtype":"m.text","formatted_body":"As in, that post was fine but I couldn't see what else you'd written."}} {"origin_server_ts":1645985653730,"event_id":"$_lWj9EDitrngAvQudlAL6OjXXNggr8PHF4rrslXUGTw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://write.as/loke/","msgtype":"m.text"}} {"origin_server_ts":1645985683534,"event_id":"$HhMzXFmn8lPGlxPtHSI11i-dP2B2C3X8IgpMUYyWi18","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I haven't written that many posts.","msgtype":"m.text"}} {"origin_server_ts":1645985691424,"event_id":"$p8s2t_uZ9DWsjDJoDCn-ttpmU-val6lXjYk0ZVtStoY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I only do so when I have something to say :-)","msgtype":"m.text"}} {"origin_server_ts":1645985924541,"event_id":"$u54heXXAph2Es5hCJ-KQcXhYs94pdC6wjjXOYZ_0iZE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There. I'm subscribing now. I really recommend write.as.","msgtype":"m.text"}} {"origin_server_ts":1646013568275,"event_id":"$1sC4B6NtepOMERUZNvwUqKlHe3FIHozDoysmEVajm1E","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"good site","msgtype":"m.text"}} {"origin_server_ts":1646013594095,"event_id":"$Ncu7Zh4X5jGwPlAfu2OwpXs2CU72lS1BfdEAwWzeCYE","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"i still prefer putting any writing on my own website blog","msgtype":"m.text"}} {"origin_server_ts":1647090030728,"event_id":"$TZY0wNX-IdKEx_BtlEIlQiJVw_B6yh8vWfn0qc0zJNI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Commenting on https://write.as/qtraoybi76z96nh4.md . That \"three separate steps\" description doesn't make sense and is very different from the code below. Is the first step supposed to be \"lowest-indexed score\" or \"first occurring score\"? Second, \"all developers who has an application with 0 score\" should be \"all developers who have an application rated 5\" probably.","msgtype":"m.text","formatted_body":"Commenting on https://write.as/qtraoybi76z96nh4.md . That \"three separate steps\" description doesn't make sense and is very different from the code below. Is the first step supposed to be \"lowest-indexed score\" or \"first occurring score\"? Second, \"all developers who has an application with 0 score\" should be \"all developers who have an application rated 5\" probably."}} {"origin_server_ts":1647090769497,"event_id":"$O3PZBC2eB1kVCFHyTi47SpAsAP4KO0n01Z2mc1DtJi0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks. I didn't rewrite it properly. ","msgtype":"m.text"}} {"origin_server_ts":1647090789734,"event_id":"$1RWVOOR9LPgZ_2jUCgOUoKTv1CoKfWxdohftBGs8Wjg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I used to have a completely different example, but I changed it to to the make the code simpler. ","msgtype":"m.text"}} {"origin_server_ts":1647090954972,"event_id":"$VvV_MK1uX3Tl1U2mG9flz4nnNQIWesxyMBb5ngpzfok","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: I updated the text.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I updated the text."}} {"origin_server_ts":1647091027269,"event_id":"$gSwFupe-pmZ8b_isG2m12zijVEcGQ98OXPc8QTkjc_Q","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Still has the \"developers who has\" bad grammar.","msgtype":"m.text","formatted_body":"Still has the \"developers who has\" bad grammar."}} {"origin_server_ts":1647091050655,"event_id":"$nlpRY12Seq9k4NDwgfyDJIazJFdNBNVdeZeikQ7T5ks","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ever since I was a kid, I could never get \"have\" and \"has\" right.","msgtype":"m.text"}} {"origin_server_ts":1647091062216,"event_id":"$MrIhkzrj39BKFbGWC3Xha6w_9rZHsq5ahS491I2x06s","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"But \"any developer who has\" would be better phrasing probably.","msgtype":"m.text","formatted_body":"But \"any developer who has\" would be better phrasing probably."}} {"origin_server_ts":1647091069501,"event_id":"$x1xtwfTbehzZKAqUa4VYkrQe9sLGJiDXKSG7-mYksJs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I don't think I'm terrible in English, but that one is something I keep messing up.","msgtype":"m.text"}} {"origin_server_ts":1647091116267,"event_id":"$OxhNbvvn8Wogljsv65rNazuuJSyujeptfsHPehQjw3w","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No, your grammar's usually good.","msgtype":"m.text","formatted_body":"No, your grammar's usually good."}} {"origin_server_ts":1647091120656,"event_id":"$usekAAc0oyWVE71FvTRrnpSQ2QkT9qR_6d8mYTx2mgg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: Changed again. How about this?","msgtype":"m.text","formatted_body":"Marshall<\/a>: Changed again. How about this?"}} {"origin_server_ts":1647091150231,"event_id":"$ZeRO5ZOCy0OyUNIKLo8GAZ8o5oYLxxBXCnf-23s58gM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Sure, that works.","msgtype":"m.text","formatted_body":"Sure, that works."}} {"origin_server_ts":1647091193617,"event_id":"$i8eI8tRRIuIkETAhFQ0T7gxhdaSVbwZucAUF-R6M7-I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: Speaking of language, is English your native language?","msgtype":"m.text","formatted_body":"Marshall<\/a>: Speaking of language, is English your native language?"}} {"origin_server_ts":1647091201279,"event_id":"$nbQ4uYFazPmXF4zIro_FDvraJojH29ZvgFB_m7hSF1E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Marshall: Speaking of languages, is English your native language?","msgtype":"m.text","formatted_body":"Marshall<\/a>: Speaking of languages, is English your native language?"},"m.relates_to":{"event_id":"$i8eI8tRRIuIkETAhFQ0T7gxhdaSVbwZucAUF-R6M7-I","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Marshall: Speaking of languages, is English your native language?","msgtype":"m.text","formatted_body":" * Marshall<\/a>: Speaking of languages, is English your native language?"}} {"origin_server_ts":1647091327875,"event_id":"$u8STXLz4LdimnQUM3L4EXoYV96Jt-M5Y7zjiv9rBTPM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yes, other than that I only speak a bit of Spanish.","msgtype":"m.text","formatted_body":"Yes, other than that I only speak a bit of Spanish."}} {"origin_server_ts":1647091372511,"event_id":"$x-5_l04Q-jXfGPDjt7xOHuqT20rBewtyu3uArvqlJ1I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I see. I did study several languages, but I'm really only conversant in two.","msgtype":"m.text"}} {"origin_server_ts":1647091428919,"event_id":"$EOjaE11elbsDpa_ZlHTNKxH6TuFAm8bjoca9kHeed00","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I really, _really_ should learn Malay though. It's a shame that I don't speak the language that my kids grandmother speaks.","msgtype":"m.text","formatted_body":"I really, really<\/em> should learn Malay though. It's a shame that I don't speak the language that my kids grandmother speaks."}} {"origin_server_ts":1647091438848,"event_id":"$1SGxeMZQVA9BPRnLIn9Hv6XuYi-ED0UDI8WGA4EAIIk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I really, _really_ should learn Malay though. It's a shame that I don't speak the language that my kids grandparents speaks.","msgtype":"m.text","formatted_body":"I really, really<\/em> should learn Malay though. It's a shame that I don't speak the language that my kids grandparents speaks."},"m.relates_to":{"event_id":"$EOjaE11elbsDpa_ZlHTNKxH6TuFAm8bjoca9kHeed00","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * I really, _really_ should learn Malay though. It's a shame that I don't speak the language that my kids grandparents speaks.","msgtype":"m.text","formatted_body":" * I really, really<\/em> should learn Malay though. It's a shame that I don't speak the language that my kids grandparents speaks."}} {"origin_server_ts":1647091443968,"event_id":"$NC5LgnkvPWXIBYjYLDya3mlLGtorycn4zdj_72mLFUs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I really, _really_ should learn Malay though. It's a shame that I don't speak the language that my kids grandparents speak.","msgtype":"m.text","formatted_body":"I really, really<\/em> should learn Malay though. It's a shame that I don't speak the language that my kids grandparents speak."},"m.relates_to":{"event_id":"$EOjaE11elbsDpa_ZlHTNKxH6TuFAm8bjoca9kHeed00","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * I really, _really_ should learn Malay though. It's a shame that I don't speak the language that my kids grandparents speak.","msgtype":"m.text","formatted_body":" * I really, really<\/em> should learn Malay though. It's a shame that I don't speak the language that my kids grandparents speak."}} {"origin_server_ts":1647091480328,"event_id":"$AQcjntzrfY_GR6frdnzpAQdy7JvVZgVmWKubSrQGRtk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh, you married in Singapore I take it?","msgtype":"m.text","formatted_body":"Oh, you married in Singapore I take it?"}} {"origin_server_ts":1647091503386,"event_id":"$cS4WAfc8r7YmVBACkaD7Z13SGKYT23Nm0Y5xF9ybFSM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, since... hmm... oh wow. It's been a while :-)","msgtype":"m.text"}} {"origin_server_ts":1647091515613,"event_id":"$VWd6_9_hrk2hmYzDqIario4vP3QKv_kQ4ydtxjmOHVo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Since 2006.","msgtype":"m.text"}} {"origin_server_ts":1647091617906,"event_id":"$zvIt8j-hATt0z2gBvpAa6jcJ-38iQJSMTyuo44nbRRw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have planned to sign up for a language class ever since I came here permanently (2005), but I've been too lazy.","msgtype":"m.text"}} {"origin_server_ts":1647091705461,"event_id":"$XoFDZnCnzUAZ7aebOmqqeTL-2Slj4uwKinX_pI9sCqs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"16 years, not bad! Well, conversant in two languages is still grounds for bragging in America.","msgtype":"m.text","formatted_body":"16 years, not bad! Well, conversant in two languages is still grounds for bragging in America."}} {"origin_server_ts":1647091777684,"event_id":"$D8wEcA67Ou18aSgkUhsPWAaib8M_SQKY0g9sF_obOPU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's actually interesting. In Europe I'd say very few people speak only a single language. It used to be the case that the French only ever knew French but that's changed since around the turn of the century, or even earlier.","msgtype":"m.text"}} {"origin_server_ts":1647091801418,"event_id":"$qfQgd_8aFIPhDQHPDTIfNi27OvL4Du089mZ2gzWzzw8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"By now only quite old people only speak French.","msgtype":"m.text"}} {"origin_server_ts":1647091869084,"event_id":"$gelncT6OZPmY28ubrvl7pg9lloqK89zdNRn3nlVpOwQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Perhaps monoligualism is more common among the English. Perhaps that's why they left the EU :-)","msgtype":"m.text"}} {"origin_server_ts":1647091922294,"event_id":"$soiHBkty9rZKM_9n-E3JAmqX0GRCUE2Jwe3B3iJcnZs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Here in Singapore, speaking more than 2 is very common. Especially among the Indians who usually learned at least two local languages + Hindi + English.","msgtype":"m.text"}} {"origin_server_ts":1647091934889,"event_id":"$8y0rRgayArPyGNnbQgoBCYNwKoo6tsV9IlxqdGwIXeQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm jealous.","msgtype":"m.text"}} {"origin_server_ts":1647091945305,"event_id":"$sP4-I6KCgJucxWjECgcW-jIrV7cfSOA7x1rS3NEDq7c","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"French and Italians still seem to speak English less well than people from other countries. Of course, far better than most any English speaker would bother to learn French.","msgtype":"m.text","formatted_body":"French and Italians still seem to speak English less well than people from other countries. Of course, far better than most any English speaker would bother to learn French."}} {"origin_server_ts":1647091977622,"event_id":"$oeM6HYKz1g3tTno42Y32qfbLyI6iRuQbLPKOfUqVM4Y","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I get the impression that people in the UK spend even less effort to learn English than Americans do.","msgtype":"m.text","formatted_body":"I get the impression that people in the UK spend even less effort to learn English than Americans do."}} {"origin_server_ts":1647092011111,"event_id":"$m_sFdipZBWaG0v84hBMOBKgVANb7Ice8fSRyBxlQ_lY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It used to be that the French intentionally refused to speak anything but French even if they knew some English. These days it's more likely that they avoid it because they're embarrassed by their poor English. Young people seem to be quite comfortable with it.","msgtype":"m.text"}} {"origin_server_ts":1647092017986,"event_id":"$McgMy9chcVbFZnudFlmNzSBVGKl9V2C2D7QWnVJszNs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"And if you really want to feel bad about yourself, talk about languages with someone from the Netherlands...","msgtype":"m.text","formatted_body":"And if you really want to feel bad about yourself, talk about languages with someone from the Netherlands..."}} {"origin_server_ts":1647092073352,"event_id":"$iB3qnE4dNx9ofEYKTBG3AtQVGLzDwC6lB-Fz3HH_bGE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, the Dutch are good. I'd say that Swedes are on par with the Dutch when it comes to language knowledge, but the Dutch have a much cleaner accent than most Swedes.","msgtype":"m.text"}} {"origin_server_ts":1647092098324,"event_id":"$uwsyKyFHEM5QcmFy9uwuCSmswlm3EFkETAc47V91EJc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So their English just sounds a lot better.","msgtype":"m.text"}} {"origin_server_ts":1647092192552,"event_id":"$y-UqOJ7D-Ws0OdwoNhjzTrdhxhtAjYRlsAAVj8mRiDI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Could be, I never visited Sweden.","msgtype":"m.text","formatted_body":"Could be, I never visited Sweden."}} {"origin_server_ts":1647092251755,"event_id":"$h1eH3ONsFbivh6zEhRJ5lqIw4l6sfZ3uNPxMQ6KWYdE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.new_content":{"body":"I get the impression that people in the UK spend even less effort to learn other languages than Americans do.","msgtype":"m.text","org.matrix.msc1767.text":"I get the impression that people in the UK spend even less effort to learn other languages than Americans do."},"m.relates_to":{"event_id":"$oeM6HYKz1g3tTno42Y32qfbLyI6iRuQbLPKOfUqVM4Y","rel_type":"m.replace"},"body":" * I get the impression that people in the UK spend even less effort to learn other languages than Americans do.","msgtype":"m.text","org.matrix.msc1767.text":" * I get the impression that people in the UK spend even less effort to learn other languages than Americans do."}} {"origin_server_ts":1647092777252,"event_id":"$ePdw5W9TvK6TK605Zo3X8zh63gRBNyob5iw_TQ2gS0Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you you do, make sure you you do in summer. 😁","msgtype":"m.text"}} {"origin_server_ts":1647093099469,"event_id":"$HYJD5NzQmr4XkpONXBkzjLb3CfIYp_hL7W9wAr4Iha0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Anyway, I think it comes down to whether foreign media is dubbed or subtitled. ","msgtype":"m.text"}} {"origin_server_ts":1647093130267,"event_id":"$0mUKBXkITsHll9Mafg_vZOqNeZKHjiSZnYbJTaD-7kU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: did you find anything else that was wrong in the post? ","msgtype":"m.text","formatted_body":"Marshall<\/a>: did you find anything else that was wrong in the post? "}} {"origin_server_ts":1647093144212,"event_id":"$olvo-uiQotvLJgkWLNAjZVvO9QswL7iJ92xvIfpzlzE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No, everything else looks good!","msgtype":"m.text","formatted_body":"No, everything else looks good!"}} {"origin_server_ts":1647093574666,"event_id":"$X6wxj5Fl3DcRvKgHGnI-5UbNYSFOWn6mkm23pr1K1Fc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks! ","msgtype":"m.text"}} {"origin_server_ts":1647848626216,"event_id":"$2AldOJiZc2Vr9eA-5KEQb2n1P91dhoXppGA3Myz633I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"My golfed version of the fibonacci sequence function: https://kapdemo.dhsdevelopments.com/clientweb2/#%E2%86%91%C2%A8%7B(%2B%2F%2C%E2%86%91)%E2%8D%BA%7D%5C20%E2%8D%B4%E2%8A%821%200","msgtype":"m.text"}} {"origin_server_ts":1647848665067,"event_id":"$yM9EyWEFUaFaqq3ihEvOTpI-8duZMmVpcZs_lJA5BcE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Here's the code: ↑¨{(+/,↑)⍺}\\20⍴⊂1 0`","msgtype":"m.text","formatted_body":"Here's the code: ↑¨{(+/,↑)⍺}\\20⍴⊂1 0`"}} {"origin_server_ts":1647848669545,"event_id":"$be9P0xRPoq7GxmJF4HpcjlTRqy6GZJan6kFRNI4WdwI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Here's the code: `↑¨{(+/,↑)⍺}\\20⍴⊂1 0`","msgtype":"m.text","formatted_body":"Here's the code: ↑¨{(+/,↑)⍺}\\20⍴⊂1 0<\/code>"},"m.relates_to":{"event_id":"$yM9EyWEFUaFaqq3ihEvOTpI-8duZMmVpcZs_lJA5BcE","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Here's the code: `↑¨{(+/,↑)⍺}\\20⍴⊂1 0`","msgtype":"m.text","formatted_body":" * Here's the code: ↑¨{(+/,↑)⍺}\\20⍴⊂1 0<\/code>"}} {"state_key":"@wybpip:matrix.org","origin_server_ts":1650373386725,"event_id":"$IL5f0UA_-2DLI3D9wBvFZM_e_ak1SKS6akkDssGs3AI","sender":"@wybpip:matrix.org","user_id":"@wybpip:matrix.org","type":"m.room.member","content":{"displayname":"wybpip","membership":"join"}} {"state_key":"@wybpip:matrix.org","origin_server_ts":1650373387312,"event_id":"$UvXeaKUim3B9Qf2jAGyF2_TDvALvRfUzrIAkfR9yVf8","sender":"@wybpip:matrix.org","user_id":"@wybpip:matrix.org","prev_content":{"displayname":"wybpip","membership":"join"},"type":"m.room.member","content":{"membership":"leave"},"replaces_state":"$IL5f0UA_-2DLI3D9wBvFZM_e_ak1SKS6akkDssGs3AI"} {"state_key":"@wybpip:matrix.org","origin_server_ts":1651632833196,"event_id":"$xEIhxq0xHNc8I1BwuPqOvb-eowGX6pft1dRcjHWCQHI","sender":"@wybpip:matrix.org","user_id":"@wybpip:matrix.org","prev_content":{"membership":"leave"},"type":"m.room.member","content":{"displayname":"An exploring bot","membership":"join"},"replaces_state":"$UvXeaKUim3B9Qf2jAGyF2_TDvALvRfUzrIAkfR9yVf8"} {"state_key":"@wybpip:matrix.org","origin_server_ts":1651632833922,"event_id":"$Q1FGr6tKWCkzC1KtJx9Dt8u87Ny2DKXniqnniD6M1sk","sender":"@wybpip:matrix.org","user_id":"@wybpip:matrix.org","prev_content":{"displayname":"An exploring bot","membership":"join"},"type":"m.room.member","content":{"membership":"leave"},"replaces_state":"$xEIhxq0xHNc8I1BwuPqOvb-eowGX6pft1dRcjHWCQHI"} {"state_key":"@ltmxyzzy:matrix.org","origin_server_ts":1651931485830,"event_id":"$bJMdAJEG4SLcf5KJVea8-gUwrl_yFWwGa_8wYzS5_ag","sender":"@ltmxyzzy:matrix.org","user_id":"@ltmxyzzy:matrix.org","type":"m.room.member","content":{"displayname":"ltmxyzzy","membership":"join"}} {"origin_server_ts":1652955705692,"event_id":"$sQ94o1lSAbm0u3iw-3r0y-WglIc6IIWYAp1LrD02H64","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"does KAP have regex?","msgtype":"m.text","org.matrix.msc1767.text":"does KAP have regex?"}} {"origin_server_ts":1652955782876,"event_id":"$VKbh3c8QBwRAe-gRSa3-YT0vD5udsGognYtcnhghETs","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"I've been looking at the 'make a lisp' docs and KAP looks like a good candidate to write a lisp in: https://github.com/kanaka/mal/blob/master/process/guide.md#pick-a-language","msgtype":"m.text","org.matrix.msc1767.text":"I've been looking at the 'make a lisp' docs and KAP looks like a good candidate to write a lisp in: https://github.com/kanaka/mal/blob/master/process/guide.md#pick-a-language"}} {"origin_server_ts":1652959584157,"event_id":"$Qx3MLVoJfmngGV3Xom2y3gucM35RJKOORFWSMmCe_B4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, it has regexp.","msgtype":"m.text"}} {"origin_server_ts":1652959594137,"event_id":"$mit4g23XRlos9ngWYgv8us6RsrKigVSw0Te5UjaS-As","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I should document it.","msgtype":"m.text"}} {"origin_server_ts":1652959615087,"event_id":"$D5bF0tSsSBtpkFQZ0V-qUj6oaWUhSFezXEKy9vQkhLs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://github.com/lokedhs/array/blob/master/demo/advent-of-code-2021/part05.kap#L2","msgtype":"m.text"}} {"origin_server_ts":1652960009854,"event_id":"$0ViHRAsPAE-Op-lIT7eFafkeH29z7n0WTM8-VZSfE2Q","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"aha, neat.","msgtype":"m.text","org.matrix.msc1767.text":"aha, neat."}} {"origin_server_ts":1652960032918,"event_id":"$6Uco-iR6nAekhz9WU_pB7u3yni_1AGnusyR5oX-W18o","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"it seems like KAP does have all the features listed, then.","msgtype":"m.text","org.matrix.msc1767.text":"it seems like KAP does have all the features listed, then."}} {"origin_server_ts":1652960058428,"event_id":"$aYdXlGVp7ekVel_95Ipvh0SY6Kg5okS-M-oNdi6aSZI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll be happy to add whatever features are needed :-)","msgtype":"m.text"}} {"origin_server_ts":1652960070991,"event_id":"$-W01pDhUfL1RT28OiJbZUtgvOfY3aI7HY0X-qWvK7Z8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Things like regex, IO operations, etc, is trivial to implement.","msgtype":"m.text"}} {"origin_server_ts":1652960141884,"event_id":"$14s_Cn5xck8kxBrUiIg6U8FJygCl09Ony8tEl-cZ5mg","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"when i have the time to try something out I will definitely ask","msgtype":"m.text","org.matrix.msc1767.text":"when i have the time to try something out I will definitely ask"}} {"origin_server_ts":1652962851020,"event_id":"$PjBF8ekFy15M3XvfhF23Ii6sA9TJrErsQ_Cb7qQNNtQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It would be fun to see someone trying to use it, even if it doesn't actually lead anywhere. Since I'm the primary user I'm sure there are a lot of issues that I never came across because I simply never tried it. ","msgtype":"m.text"}} {"origin_server_ts":1653119982076,"event_id":"$NP8VENKnW9yy_WBVsrVsIjSW1AlTdeYBBWOp6e4F0zc","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"what is the full form of KAP","msgtype":"m.text","org.matrix.msc1767.text":"what is the full form of KAP"}} {"origin_server_ts":1653157664446,"event_id":"$wbiI75WSRvJbuvbntaMHKkBFFbEHyMsMY75O3BzlmAA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"razetime @razetime:coven.palaiologos.rocks: what do you mean by full form? ","msgtype":"m.text","formatted_body":"razetime @razetime:coven.palaiologos.rocks<\/a>: what do you mean by full form? "}} {"origin_server_ts":1653157763068,"event_id":"$vpx5THNGu_G5IrwMjZI81L2CQR61xT1hgN5PaHpZemQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh, and if you want me to reply quicker, just use the @ and I'll get a notification ","msgtype":"m.text"}} {"origin_server_ts":1653157769065,"event_id":"$XulTLoeXM3WhtocPmfYWzugppPbXy4DJ6E2FxOJ4IAE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Oh, and if you want me to reply quicker, just use the @ and I'll get a notification. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$vpx5THNGu_G5IrwMjZI81L2CQR61xT1hgN5PaHpZemQ","rel_type":"m.replace"},"body":"* Oh, and if you want me to reply quicker, just use the @ and I'll get a notification. ","msgtype":"m.text"}} {"origin_server_ts":1653179624055,"event_id":"$ffVGUgFjSD7pG3T1L9UuAbs6VP_8zZynGBNpTVGOMrI","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$wbiI75WSRvJbuvbntaMHKkBFFbEHyMsMY75O3BzlmAA"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@loke:dhsdevelopments.com> razetime @razetime:coven.palaiologos.rocks: what do you mean by full form?\n\nKAP is not an abbreviation?"},{"mimetype":"text/html","body":"
In reply to<\/a> @loke:dhsdevelopments.com<\/a>
razetime @razetime:coven.palaiologos.rocks<\/a>: what do you mean by full form? <\/blockquote><\/mx-reply>KAP is not an abbreviation?"}],"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> razetime @razetime:coven.palaiologos.rocks: what do you mean by full form?\n\nKAP is not an abbreviation?","msgtype":"m.text","formatted_body":"
In reply to<\/a> @loke:dhsdevelopments.com<\/a>
razetime @razetime:coven.palaiologos.rocks<\/a>: what do you mean by full form? <\/blockquote><\/mx-reply>KAP is not an abbreviation?"}} {"origin_server_ts":1653188748425,"event_id":"$iNWpzi3rGty8-4veHW4UxbEaGVNaMA4dC8hi0BatUbA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's not. 😁","msgtype":"m.text"}} {"origin_server_ts":1653188857551,"event_id":"$1lwJIyXA1bA1g4N047Ls-bgO992W9PIcN87wnQJ9TTc","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"is there any meaning to it?","msgtype":"m.text","org.matrix.msc1767.text":"is there any meaning to it?"}} {"origin_server_ts":1653189003646,"event_id":"$yVTGAZXA5BmMW_5NDsdhEcmMOPanJYJJ56sUae4LD-4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Not really. When I was thinking about it I figured it should start with a k because I implemented it in Kotlin. ","msgtype":"m.text"}} {"origin_server_ts":1653189440304,"event_id":"$hNm9M46mThS7rXl4VMLL0uPKWKhGqpoJNIo9HIz694A","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"i see","msgtype":"m.text","org.matrix.msc1767.text":"i see"}} {"origin_server_ts":1653189443782,"event_id":"$-FjiGtPwqdRIFhRXNaYdrfQ5PcRVfWEXe8Ze6ct_1QA","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"kotlin array programming","msgtype":"m.text","org.matrix.msc1767.text":"kotlin array programming"}} {"origin_server_ts":1653194324368,"event_id":"$CvbziN5I5G3BH4VMdK-El_95F-1DXc0-wCb7Z_5LBbc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Perhaps. ","msgtype":"m.text"}} {"origin_server_ts":1653194343065,"event_id":"$Ez4ycyOHkjdnT4gZokPAzcdEIKwLejBXtlshFb78E0k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The ap comes from the first two letters in apl","msgtype":"m.text"}} {"origin_server_ts":1653194368969,"event_id":"$q1PkRwoDAimFL6JUkB7x6WF3g3xzWqtwp4pvSbfH5ts","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"oh, kotlin APL","msgtype":"m.text","org.matrix.msc1767.text":"oh, kotlin APL"}} {"origin_server_ts":1653194371584,"event_id":"$YilMiLMqCaUfNMZml8g075Re11Hjv6gO3j3la-5AdE4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think I originally figured I just wanted to do an APL in kotlin, so kotlin apl, or kap ","msgtype":"m.text"}} {"origin_server_ts":1653194397080,"event_id":"$Z8haYyrPPar5Ij8yhOgF3aN2BkEe-v2NQU9oRsdNEHs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Because kapl sounds just weird ","msgtype":"m.text"}} {"origin_server_ts":1653194426486,"event_id":"$7684Gg6eK06aZxOoUMcA7Vt9-eVwu0yK3HEsxxEJHds","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And also incorrect, since it's not an APL. Perhaps two thirds towards apl. ","msgtype":"m.text"}} {"origin_server_ts":1653194452597,"event_id":"$J2mNs5KuUVDRuSDKk96fJTRleqIaArA2U-Y9iR_Gc9w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I guess the name should be Kap instead of KAP for that reason. ","msgtype":"m.text"}} {"origin_server_ts":1653194482187,"event_id":"$ZpKvtnh3mNQMr5b0ZU--dIROCavpJbIYhLO4_e5spgc","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"Kap","msgtype":"m.text","org.matrix.msc1767.text":"Kap"}} {"origin_server_ts":1653194488873,"event_id":"$U7rt3HFAbeRN8qNgqeJgLYN77OzvCN2JCLpYzlUk7Jk","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"Kapstone","msgtype":"m.text","org.matrix.msc1767.text":"Kapstone"}} {"origin_server_ts":1653194499754,"event_id":"$ZjFskBVzC40G6CD_6cEFWxuN3jHSIl3Vwm0MBrx9BvE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What is that? ","msgtype":"m.text"}} {"origin_server_ts":1653194528796,"event_id":"$aUuA2Rv-yHRG0cxFMWGtiQn1QBDmKzqYGE5Nytr6MZE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh it's a company. ","msgtype":"m.text"}} {"origin_server_ts":1653194548519,"event_id":"$fwkpyOszBzUqlN10ZSM19q4TJBHnCGo6SmvQ8GfBBmg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Paper company. ","msgtype":"m.text"}} {"origin_server_ts":1653195699268,"event_id":"$fhrvYMbF-LYUwWXCEpi6K5ip4PxLeC2BLeN4kbR0V70","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"i'd no clue that it was one","msgtype":"m.text","org.matrix.msc1767.text":"i'd no clue that it was one"}} {"origin_server_ts":1653377217656,"event_id":"$Tq2EUvdu0Uuv8L3GM3RuBrrIqc-2bp9d_d3RJClhoqw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Design question:","msgtype":"m.text"}} {"origin_server_ts":1653377261040,"event_id":"$VT-cvmhiEReyxz73jKS5W7_f-ucLkaE8gYrxIAuB6-8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you assign to a variable that is previously unbound, the variable will have a scope equal to the context in which it was defined. I.e:","msgtype":"m.text"}} {"origin_server_ts":1653377320431,"event_id":"$9EWt1xzouMuIu8eL8czRdKfxHFMjIv1Bu6X6TrscMcc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"This will raise an error due to `a` not being assigned: `{ a←⍵ } 1 ◊ a`","msgtype":"m.text","formatted_body":"This will raise an error due to a<\/code> not being assigned: { a←⍵ } 1 ◊ a<\/code>"}} {"origin_server_ts":1653377331068,"event_id":"$F_4mLhPTGYJ_7taH8QT8HINQ_QT5d7YA5cfqgPBksLY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"However, this will return `2`:","msgtype":"m.text","formatted_body":"However, this will return 2<\/code>:"}} {"origin_server_ts":1653377364463,"event_id":"$e-ulEKSW1Izf2DAY7Z5EfBT42dhXGZIvfm705JC-1gI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`a←1 ◊ {a←⍵} 2 ◊ a`","msgtype":"m.text","formatted_body":"a←1 ◊ {a←⍵} 2 ◊ a<\/code>"}} {"origin_server_ts":1653377426617,"event_id":"$kksBqM6emXktJ9in1Z2Eq-otGOMJhbBBu_AL4gKvf0w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Now, the question is: When I use the `use` keyword to load a separate source file, should the toplevel scope of that file be global, or should it be local to the file?","msgtype":"m.text","formatted_body":"Now, the question is: When I use the use<\/code> keyword to load a separate source file, should the toplevel scope of that file be global, or should it be local to the file?"}} {"origin_server_ts":1653377476580,"event_id":"$qy5vVHEQ8ZZ56Y31gK8d-pj3xEBi5LfO-w7a7axlA9w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"In other words, if I have a file called `foo.kap` that contains just `a←1`, and I then call `use(\"foo.kap\")`. Should `a` be declared in the scope where I called use?","msgtype":"m.text","formatted_body":"In other words, if I have a file called foo.kap<\/code> that contains just a←1<\/code>, and I then call use("foo.kap")<\/code>. Should a<\/code> be declared in the scope where I called use?"}} {"origin_server_ts":1653377498190,"event_id":"$Khsy_hfCNjOM7u3AJ4-h1KG5KjwDJHFWeTtmFUnLE9U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If it's local to the file, I will introduce a separate declaration to explicitly make a variable global.","msgtype":"m.text"}} {"origin_server_ts":1653377510229,"event_id":"$7QxeiN6xODvNv-9gK-upVLVVc5ZMYKRo3tAoHQm4tkE","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$e-ulEKSW1Izf2DAY7Z5EfBT42dhXGZIvfm705JC-1gI"}},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> `a←1 ◊ {a←⍵} 2 ◊ a`\n\nif i use a dfn which makes use of temporary assignment without my knowledge, how do i prevent clobbering? ","msgtype":"m.text","formatted_body":"
In reply to<\/a> @loke:dhsdevelopments.com<\/a>
a←1 ◊ {a←⍵} 2 ◊ a<\/code><\/blockquote><\/mx-reply>if i use a dfn which makes use of temporary assignment without my knowledge, how do i prevent clobbering?"}} {"origin_server_ts":1653377530549,"event_id":"$o6QuJrDqLKmuYZa9dt7M-iHFmqgGSPU8DmJTIqQuC1I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The binding is lexical, so that shouldn't be a problem.","msgtype":"m.text"}} {"origin_server_ts":1653377539531,"event_id":"$4gUkJj35BmQnxjuDVuXPpiYzZ4lXAhni0X96KJ0zavQ","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"ah, ok","msgtype":"m.text"}} {"origin_server_ts":1653377599073,"event_id":"$u3DCLRD8kh8a56MsuajKPC-SuF2d2MD5-y0z5dl02Ac","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think you helped me answer my question.","msgtype":"m.text"}} {"origin_server_ts":1653377623368,"event_id":"$z332wVieJAcbWhctdyQaYdiuqqZyIuJ154WhCMdDAr8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It makes sense to make the variables local to the file. Having variables lying around could be annoying.","msgtype":"m.text"}} {"origin_server_ts":1653377670910,"event_id":"$Dehnu0vGbtZcpjlGBw4QwQzmCaqCcyz-ZbhLOpDdsww","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In fact, I'm not sure I want to have global variables at all. Instead, I'm considering implementing variables that have a function associated with them (when the value is read, a function is called)","msgtype":"m.text"}} {"origin_server_ts":1653377707603,"event_id":"$snEzEc1T6B6NKMjcU2n-jFtAjgT78iYc9YCi4KSjQxk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"And they will all start with a special character (which is likely '`⎕`)","msgtype":"m.text","formatted_body":"And they will all start with a special character (which is likely '⎕<\/code>)"}} {"origin_server_ts":1653377711754,"event_id":"$EesiecH5Wsjmttxx9wMbwH9EsnjgY7z1xOyRJ2W0y50","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"And they will all start with a special character (which is probablyu '`⎕`)","msgtype":"m.text","formatted_body":"And they will all start with a special character (which is probablyu '⎕<\/code>)"},"m.relates_to":{"event_id":"$snEzEc1T6B6NKMjcU2n-jFtAjgT78iYc9YCi4KSjQxk","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * And they will all start with a special character (which is probablyu '`⎕`)","msgtype":"m.text","formatted_body":" * And they will all start with a special character (which is probablyu '⎕<\/code>)"}} {"origin_server_ts":1653377713744,"event_id":"$RpYcR_2IC7hcaUvlv8xUUozOIaHBADSuVJeDbfxfhjs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"And they will all start with a special character (which is probably '`⎕`)","msgtype":"m.text","formatted_body":"And they will all start with a special character (which is probably '⎕<\/code>)"},"m.relates_to":{"event_id":"$snEzEc1T6B6NKMjcU2n-jFtAjgT78iYc9YCi4KSjQxk","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * And they will all start with a special character (which is probably '`⎕`)","msgtype":"m.text","formatted_body":" * And they will all start with a special character (which is probably '⎕<\/code>)"}} {"origin_server_ts":1653377719533,"event_id":"$6congR0w92RkvlnX7htLvFCISWwBf2NzY90rW6Xnnpk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"And they will all start with a special character (which is probably `⎕`)","msgtype":"m.text","formatted_body":"And they will all start with a special character (which is probably ⎕<\/code>)"},"m.relates_to":{"event_id":"$snEzEc1T6B6NKMjcU2n-jFtAjgT78iYc9YCi4KSjQxk","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * And they will all start with a special character (which is probably `⎕`)","msgtype":"m.text","formatted_body":" * And they will all start with a special character (which is probably ⎕<\/code>)"}} {"origin_server_ts":1653377742874,"event_id":"$va_Q5xcyRpPgIaBkhbafPqDMz65cuGAV-Sh0KD_Muw0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$o6QuJrDqLKmuYZa9dt7M-iHFmqgGSPU8DmJTIqQuC1I"}},"format":"org.matrix.custom.html","body":"it still could be, if you've forgotten you have a variable named `a` a couple nesting levels up","msgtype":"m.text","formatted_body":"
↰ <\/a> loke<\/a> <\/mx-reply>it still could be, if you've forgotten you have a variable named a<\/code> a couple nesting levels up"}} {"origin_server_ts":1653377753744,"event_id":"$6A4neS98grbO5qCRV2gBRgXKHJ7Gaz30sNdgcIDZWw0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: Very true","msgtype":"m.text","formatted_body":"dzaima<\/a>: Very true"}} {"origin_server_ts":1653377796809,"event_id":"$MYzCCT_NRx7tGdAGAAu9qElr5W5fs89UwfU6R70W8PY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But the alternative is to have special syntax to separate declaration and assignment.","msgtype":"m.text"}} {"origin_server_ts":1653377815746,"event_id":"$gBiZH1fZvDw_LQ8NbYstj8AY0fnk0vGC6TbO84-UXyw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"well you have `⊢←`","msgtype":"m.text","formatted_body":"well you have ⊢←<\/code>"}} {"origin_server_ts":1653377841201,"event_id":"$-U7HGTcfyAoZBbp9-loqtiKhI0AMuNmOqJV-MXOsd1Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Maybe use `↞` for declarative assignment.","msgtype":"m.text","formatted_body":"Maybe use ↞<\/code> for declarative assignment."}} {"origin_server_ts":1653377862430,"event_id":"$icEFqxR_GuLgmRSsu4loj-C4WfvmGz18IO1pi3EGEzM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"What does `⊢←` do i Dyalog?","msgtype":"m.text","formatted_body":"What does ⊢←<\/code> do i Dyalog?"}} {"origin_server_ts":1653377865588,"event_id":"$OTxreO0KaSzMQHWeGiK1q1q8mM5KZAHSy7ghTqdBvs4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"What does `⊢←` do in Dyalog?","msgtype":"m.text","formatted_body":"What does ⊢←<\/code> do in Dyalog?"},"m.relates_to":{"event_id":"$icEFqxR_GuLgmRSsu4loj-C4WfvmGz18IO1pi3EGEzM","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * What does `⊢←` do in Dyalog?","msgtype":"m.text","formatted_body":" * What does ⊢←<\/code> do in Dyalog?"}} {"origin_server_ts":1653377874574,"event_id":"$1PR5jUuTyjiByRotELndPY7ICJvaA4Xner-eROmcQBM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it's modified assignment, which doesn't create a new variable","msgtype":"m.text","formatted_body":"it's modified assignment, which doesn't create a new variable"}} {"origin_server_ts":1653377900211,"event_id":"$h5cr-lizF7X6YXzM437ZuKxt0uoUxa6FP0fiJPvSj14","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"whereas `a←1` in dfns always creates a new `a` in the current scope","msgtype":"m.text","formatted_body":"whereas a←1<\/code> in dfns always creates a new a<\/code> in the current scope"}} {"origin_server_ts":1653377907976,"event_id":"$vAJi5k1uXzhzbsNf26vk2nM0KGVh6VdPL9XKcem_sow","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Interesting. In almost all cases you _do_ want a new variable, so this can be used in the case where you don't.","msgtype":"m.text","formatted_body":"Interesting. In almost all cases you do<\/em> want a new variable, so this can be used in the case where you don't."}} {"origin_server_ts":1653377913802,"event_id":"$Vrz0BaKrD2Yi2DFTA3p7Xmb3t06NqSUJ_hVlH7U_7Jo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yep","msgtype":"m.text","formatted_body":"yep"}} {"origin_server_ts":1653377937452,"event_id":"$46tKsVky6h0TUukpzYxkaaMcf1PkYpnBrEt7GfjuZA0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`⊢←` is horribly ugly though :-)","msgtype":"m.text","formatted_body":"⊢←<\/code> is horribly ugly though :-)"}} {"origin_server_ts":1653377957030,"event_id":"$QGmbK3_i1_Wc4RkqDlE6vIVUKbBgUaRfmvW4dWmdvig","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Maybe use `⟻`","msgtype":"m.text","formatted_body":"Maybe use ⟻<\/code>"}} {"origin_server_ts":1653377960013,"event_id":"$jvRH-rI8MNLD1mRAxm_OV5hkm9tYhlqDkQbZJIdcP60","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"BQN has `↩` for explicit modifying assignment (which has the benefit of working for assigning functions & operators too)","msgtype":"m.text","formatted_body":"BQN has ↩<\/code> for explicit modifying assignment (which has the benefit of working for assigning functions & operators too)"}} {"origin_server_ts":1653377983027,"event_id":"$qj55mEgha2PAe7w9xKDzNaiIsn-7Y6SRz_KZdvTh40A","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"BQN has `↩` for explicit modifying assignment (which has the benefit of working of being able re-assign functions & operators too)","msgtype":"m.text","formatted_body":"BQN has ↩<\/code> for explicit modifying assignment (which has the benefit of working of being able re-assign functions & operators too)"},"m.relates_to":{"event_id":"$jvRH-rI8MNLD1mRAxm_OV5hkm9tYhlqDkQbZJIdcP60","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* BQN has `↩` for explicit modifying assignment (which has the benefit of working of being able re-assign functions & operators too)","msgtype":"m.text","formatted_body":"* BQN has ↩<\/code> for explicit modifying assignment (which has the benefit of working of being able re-assign functions & operators too)"}} {"origin_server_ts":1653377986075,"event_id":"$lBYRxPC_AHnlBl4v_Gq_mq1lGj0hmMI3BQSSqlQAhXs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"BQN has `↩` for explicit modifying assignment (which has the benefit of working of being able re-assign functions & modifier too)","msgtype":"m.text","formatted_body":"BQN has ↩<\/code> for explicit modifying assignment (which has the benefit of working of being able re-assign functions & modifier too)"},"m.relates_to":{"event_id":"$jvRH-rI8MNLD1mRAxm_OV5hkm9tYhlqDkQbZJIdcP60","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* BQN has `↩` for explicit modifying assignment (which has the benefit of working of being able re-assign functions & modifier too)","msgtype":"m.text","formatted_body":"* BQN has ↩<\/code> for explicit modifying assignment (which has the benefit of working of being able re-assign functions & modifier too)"}} {"origin_server_ts":1653377987609,"event_id":"$Lo33Xe9GJNm94nxIfHL_oof_erX8APBwMRifbE372rU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"BQN has `↩` for explicit modifying assignment (which has the benefit of working of being able re-assign functions & modifiers too)","msgtype":"m.text","formatted_body":"BQN has ↩<\/code> for explicit modifying assignment (which has the benefit of working of being able re-assign functions & modifiers too)"},"m.relates_to":{"event_id":"$jvRH-rI8MNLD1mRAxm_OV5hkm9tYhlqDkQbZJIdcP60","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* BQN has `↩` for explicit modifying assignment (which has the benefit of working of being able re-assign functions & modifiers too)","msgtype":"m.text","formatted_body":"* BQN has ↩<\/code> for explicit modifying assignment (which has the benefit of working of being able re-assign functions & modifiers too)"}} {"origin_server_ts":1653378006819,"event_id":"$xK-wInS9goLyvFGYJv3Nt-N0pNGWBzUi1-vxtnca8ac","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"BQN does have lexical binding, right?","msgtype":"m.text"}} {"origin_server_ts":1653378010870,"event_id":"$RpaDR_7qyPxFg7i5Q0anoW9MUjkaafgtyvubCAHIZxM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah","msgtype":"m.text","formatted_body":"yeah"}} {"origin_server_ts":1653378013453,"event_id":"$aATNKWju-Hd0GMxEq-UQwBLj5jsjCmI8JVHlR48oTjk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I mean, only lexical binding.","msgtype":"m.text"}} {"origin_server_ts":1653378033220,"event_id":"$V4W3af5QnoBlz5Lpu1g3A3hgcMameOUDMbJhKx4IMhU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah","msgtype":"m.text","formatted_body":"yeah"}} {"origin_server_ts":1653378051512,"event_id":"$jbSx0NZp-KKkH3L5fHPz79YGMu2ncP0KC-tyR7_LJOc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I am always in favour of borroing symbols from BQN, but `↩` renders as an emoji in at meast my matrix client. :-(","msgtype":"m.text","formatted_body":"I am always in favour of borroing symbols from BQN, but ↩<\/code> renders as an emoji in at meast my matrix client. :-("}} {"origin_server_ts":1653378060847,"event_id":"$5oZhnKn1DjKBVrrzO0_44onkPSpPiza9CO5ieqphOgw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I am always in favour of borroing symbols from BQN, but `↩` renders as an emoji in at least my matrix client. :-(","msgtype":"m.text","formatted_body":"I am always in favour of borroing symbols from BQN, but ↩<\/code> renders as an emoji in at least my matrix client. :-("},"m.relates_to":{"event_id":"$jbSx0NZp-KKkH3L5fHPz79YGMu2ncP0KC-tyR7_LJOc","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * I am always in favour of borroing symbols from BQN, but `↩` renders as an emoji in at least my matrix client. :-(","msgtype":"m.text","formatted_body":" * I am always in favour of borroing symbols from BQN, but ↩<\/code> renders as an emoji in at least my matrix client. :-("}} {"origin_server_ts":1653378071768,"event_id":"$WQXM-StZJpbcBLUH_hgSj0D-b-wrqDCEaFoEnP3WYWs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah that's the main drawback of `↩`","msgtype":"m.text","formatted_body":"yeah that's the main drawback of ↩<\/code>"}} {"origin_server_ts":1653378072008,"event_id":"$kuByLOgqeRC7OZ6Q-imx-BDdMGn_K9h-f5g5HKRXdpU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I am always in favour of borrowing symbols from BQN, but `↩` renders as an emoji in at least my matrix client. :-(","msgtype":"m.text","formatted_body":"I am always in favour of borrowing symbols from BQN, but ↩<\/code> renders as an emoji in at least my matrix client. :-("},"m.relates_to":{"event_id":"$jbSx0NZp-KKkH3L5fHPz79YGMu2ncP0KC-tyR7_LJOc","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * I am always in favour of borrowing symbols from BQN, but `↩` renders as an emoji in at least my matrix client. :-(","msgtype":"m.text","formatted_body":" * I am always in favour of borrowing symbols from BQN, but ↩<\/code> renders as an emoji in at least my matrix client. :-("}} {"origin_server_ts":1653378074680,"event_id":"$pn7OBGNyFjQBBS2UT5kpab32uyHc0E52Ael0NB65Cd8","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"this is why dzaima matrix client","msgtype":"m.text","org.matrix.msc1767.text":"this is why dzaima matrix client"}} {"origin_server_ts":1653378100773,"event_id":"$yvT1QSoY1L8VKl7ZkpAjV6Bw3p0j0x-PaSnv7SNOqc8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, I want to use it, but it was a bit too buggy last I tried. I should try again.","msgtype":"m.text"}} {"origin_server_ts":1653378101824,"event_id":"$72Bi8l3oYt_k9dMehy6yPaQeTu0H699ToXdY2LYsGdo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(well i do also have a BQN386 override for matrix)","msgtype":"m.text","formatted_body":"(well i do also have a BQN386 override for matrix)"}} {"origin_server_ts":1653378109992,"event_id":"$gIlJDmR86zIdUBq9ZZWQojAzsP2WPeAsH3fSU_rmyFE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(well i do also have a BQN386 override for element)","msgtype":"m.text","formatted_body":"(well i do also have a BQN386 override for element)"},"m.relates_to":{"event_id":"$72Bi8l3oYt_k9dMehy6yPaQeTu0H699ToXdY2LYsGdo","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (well i do also have a BQN386 override for element)","msgtype":"m.text","formatted_body":"* (well i do also have a BQN386 override for element)"}} {"origin_server_ts":1653378180665,"event_id":"$2g_lvno0m_E-Pg6Tkqg13odKND7QTf533UzrviupI-Q","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$yvT1QSoY1L8VKl7ZkpAjV6Bw3p0j0x-PaSnv7SNOqc8"}},"format":"org.matrix.custom.html","body":"yeah. As it turns out, building a whole GUI platform isn't easy, especially with it relying on brand new not very complete libraries ¯\\\\\\_(ツ)\\_/¯","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>yeah. As it turns out, building a whole GUI platform isn't easy, especially with it relying on brand new not very complete libraries ¯\\_(ツ)_/¯"}} {"origin_server_ts":1653378214921,"event_id":"$ybHyfEHbpxGXel_kn2J9OXG9T5d849mgUBQ1koBuiCc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, I've been eying that low level library for a backend for McCLIM.","msgtype":"m.text"}} {"origin_server_ts":1653378286161,"event_id":"$vn1jAYWfjpv7ZiXqIWJVLJdeyxSPTK7h98-Os5IXaK0","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"wait what","msgtype":"m.text","org.matrix.msc1767.text":"wait what"}} {"origin_server_ts":1653378298883,"event_id":"$-4ZLdV1MSyGOfP9FyglL0i80_R0XBZiwW6aE2Qbqx9c","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"whaat was the motivation for writing a gui platform","msgtype":"m.text","org.matrix.msc1767.text":"whaat was the motivation for writing a gui platform"}} {"origin_server_ts":1653378304848,"event_id":"$qyweczd-JBrkom1FNQSOrrMaknDjxpTzvq5Mxb_OpMg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"wanted to","msgtype":"m.text","formatted_body":"wanted to"}} {"origin_server_ts":1653378317411,"event_id":"$3QG6R4GKgvmUVHTausliRO80Zx30vZ3wIdX7D6xhOBY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the reason i do literally anything","msgtype":"m.text","formatted_body":"the reason i do literally anything"}} {"origin_server_ts":1653378391892,"event_id":"$mc8QavBGVlb5Bevu-pKBemPuussKeQDN1Rb1nTG8CbU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"i have a severe case of chronic NIH syndrome","msgtype":"m.text","formatted_body":"i have a severe case of chronic NIH syndrome"}} {"origin_server_ts":1653378481139,"event_id":"$DS9puVh2iW1kfIoqGnmnCKQf7QebSURWtAZF35TwQ48","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"well that is very cool","msgtype":"m.text","org.matrix.msc1767.text":"well that is very cool"}} {"origin_server_ts":1653378676001,"event_id":"$3YSt6yLZsmuYRIhguYgbWO_pEx1s2odbsVs8SNNJX6A","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(another aspect is that I want it to be somewhat transpilable to another language if I ever make my own java-level language)","msgtype":"m.text","formatted_body":"(another aspect is that I want it to be somewhat transpilable to another language if I ever make my own java-level language)"}} {"origin_server_ts":1653379275523,"event_id":"$s3b6mizGAAIr7h1yj0Bfgf1xgvz6pRvlQyIFHwQEe8Q","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$yvT1QSoY1L8VKl7ZkpAjV6Bw3p0j0x-PaSnv7SNOqc8"}},"format":"org.matrix.custom.html","body":"hm i'll quickly make a light theme so at least that'd not be a problem","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>hm i'll quickly make a light theme so at least that'd not be a problem"}} {"origin_server_ts":1653379299905,"event_id":"$x8A5xZHIq0qFHhLEYlztkMqFmXfdtormZRsrr12Z33A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks :-)","msgtype":"m.text"}} {"origin_server_ts":1653379444947,"event_id":"$Wyz50yVajQ5M6azx1umQcqFkhDRT9ZpuorIfbdEv8Hk","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"loke, what light themes do you personally recommend? ","msgtype":"m.text","org.matrix.msc1767.text":"loke, what light themes do you personally recommend? "}} {"origin_server_ts":1653379648459,"event_id":"$KtE3cp0H_meFfnIU9uX2D8OtNnwid0zWpuHFf_vNimY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"White background, black text. 😀","msgtype":"m.text"}} {"origin_server_ts":1653380883341,"event_id":"$e7HFKyxGBrQCwaQn_I95YZ7NTRbzXM2Lnfys8YKBmsg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In terms of theming of other elements, I very rarely change anything. I usually just go with the default. I'm not the customising kinda person :-)","msgtype":"m.text"}} {"origin_server_ts":1653383432445,"event_id":"$-MMPDNNhnmLyobm5P88gO_N5EVjn5kU65AYeH66nskw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[current status](https://matrix.org/_matrix/media/r0/download/matrix.org/PONabaVdqBTBdHgBaegRjNcj)","msgtype":"m.text","formatted_body":"current status<\/a>"}} {"origin_server_ts":1653384308653,"event_id":"$3souPDRTPrWDtOJxZy44wfhn1xxOHj-BuhVnxdZZaYw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(as a bonus, all the colors have been moved out of the templates, so they can all be reloaded at runtime! (still have to click on a room to reload messages which cache colors, but that's easy enough to do automatically when there's a more proper theme switching thing than F5))","msgtype":"m.text","formatted_body":"(as a bonus, all the colors have been moved out of the templates, so they can all be reloaded at runtime! (still have to click on a room to reload messages which cache colors, but that's easy enough to do automatically when there's a more proper theme switching thing than F5))"}} {"origin_server_ts":1653384756779,"event_id":"$OevYYVMDaQnxe9YMHRqPxGytoV2a3woXf-jmGerG-JA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"pushed, but currently the only way to apply it is to copy `res/light.dzcfg` to `local.dzcfg` manually and i have no clue how to quickly make any better way","msgtype":"m.text","formatted_body":"pushed, but currently the only way to apply it is to copy res/light.dzcfg<\/code> to local.dzcfg<\/code> manually and i have no clue how to quickly make any better way"}} {"origin_server_ts":1653411427280,"event_id":"$qC1O7V7zHyiqnNGEZ2lEpE_Tt0Ra4VsmauGdKRyd82Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Nice. I'll test it. ","msgtype":"m.text"}} {"origin_server_ts":1653635789205,"event_id":"$0QCnVz2JLKT5QkYrAmQldqPA2swOouMpzhumZ1_OHCE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Dyalog has the `:` syntax to provide early exit if a condition is met. In Kap, one has to use `if` which works fine, but is unwieldy in short functions compared to Dyalog.","msgtype":"m.text","formatted_body":"Dyalog has the :<\/code> syntax to provide early exit if a condition is met. In Kap, one has to use if<\/code> which works fine, but is unwieldy in short functions compared to Dyalog."}} {"origin_server_ts":1653635833929,"event_id":"$-ZfBxMpyDUIKMh0ff_gN0r9CKs0uixWMZqkt7VYdj2U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Essentially, what one wants is a concise alternative to `if(X) { return Y }`","msgtype":"m.text","formatted_body":"Essentially, what one wants is a concise alternative to if(X) { return Y }<\/code>"}} {"origin_server_ts":1653635908281,"event_id":"$zRTQWAiUUSWraJzj_Pow9Ft1TlaZrSLf450XGNidLq0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The question is what syntax should be used. Also, the above is very specific. Perhaps there is a more general form of this.","msgtype":"m.text"}} {"origin_server_ts":1653641692350,"event_id":"$JJM-_9aQ9TZCj5yPQv0ZMggt-RRh6eD7lCWY4PpwXZc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"fwiw, dzaima/APL has `a:b` that executes `b` if `a`, but continues the dfn; and `a:←b` is early return","msgtype":"m.text","formatted_body":"fwiw, dzaima/APL has a:b<\/code> that executes b<\/code> if a<\/code>, but continues the dfn; and a:←b<\/code> is early return"}} {"origin_server_ts":1653644588865,"event_id":"$RIS8lZYulxRp-ODKR8vFXScPmIopyeiaC1rKvbyI4Mw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"What does `b:a` return if `b` is false?","msgtype":"m.text","formatted_body":"What does b:a<\/code> return if b<\/code> is false?"}} {"origin_server_ts":1653644874911,"event_id":"$1bKcZCuXhPTHs4Eh_ykHPoszKJDT-PM-P8jHcPhkCZw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it continues to the next statement","msgtype":"m.text","formatted_body":"it continues to the next statement"}} {"origin_server_ts":1653644917265,"event_id":"$RkUwd1v99TJlfH9ziGmj6ue1HhYZ0STnWF-pfTucfFY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`b:a` is literally `if (b) a;` while `b:←a` is `if (b) return a;`","msgtype":"m.text","formatted_body":"b:a<\/code> is literally if (b) a;<\/code> while b:←a<\/code> is if (b) return a;<\/code>"}} {"origin_server_ts":1653644956730,"event_id":"$xihm4EowgtIUEYbtKTuLRCBmriyzknPL6-CQL_k77Es","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"But what if you do `a ← b:c`?","msgtype":"m.text","formatted_body":"But what if you do a ← b:c<\/code>?"}} {"origin_server_ts":1653644982581,"event_id":"$MCdGiDpzGoDymcwGNBer68coSble2N76kEpdiH2ldpc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's `(a←b):c`","msgtype":"m.text","formatted_body":"that's (a←b):c<\/code>"}} {"origin_server_ts":1653645028856,"event_id":"$zQR9GDintkX0AsfQlfF_JcFO8Y8Y5OhaU-0O4Jhl_2o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"OK, but what about `a ← (b:c)`","msgtype":"m.text","formatted_body":"OK, but what about a ← (b:c)<\/code>"}} {"origin_server_ts":1653645040223,"event_id":"$Pn1i-Y1svvOKmmV1abDAOM3W5plL3P0qLfEPT5YBzWg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's a syntax error, in both Dyalog and dzaima/APL","msgtype":"m.text","formatted_body":"that's a syntax error, in both Dyalog and dzaima/APL"}} {"origin_server_ts":1653645115180,"event_id":"$s_yP1gnG7EPYmxsUH0lxKzPENRQGXrspfv5DyqJdR7M","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(well, in dzaima/APL `(b:c)` constructs a namespace with a key `b` having the value of the variable `c`)","msgtype":"m.text","formatted_body":"(well, in dzaima/APL (b:c)<\/code> constructs a namespace with a key b<\/code> having the value of the variable c<\/code>)"}} {"origin_server_ts":1653645174859,"event_id":"$IL5BhoPpuktcw6pmUlCzw_UeGB2zyw6Ay5uZnG6m9Lg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"In any case, that particular syntax doesn't work in kap, since `:` is used for namespaces.","msgtype":"m.text","formatted_body":"In any case, that particular syntax doesn't work in kap, since :<\/code> is used for namespaces."}} {"origin_server_ts":1653645526750,"event_id":"$tnZVUW34BD0h6_4bwun5C2433aj8rok7tqUkYKQwTkw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So what I want to come up with is some concise syntax that can fulfill the following usecases:","msgtype":"m.text"}} {"origin_server_ts":1653645538259,"event_id":"$N2wAhQ6kH_p0b4m_lPCBRvc1-EvlqJR3DfW-me3NlTQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Early exit: `if(x) { return y }`","msgtype":"m.text","formatted_body":"Early exit: if(x) { return y }<\/code>"}} {"origin_server_ts":1653645611021,"event_id":"$hLowxwvBXFzX_IrzBnpqAlocWwZahElQsfZX90EFBxQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Simple if: `if(x) { y }` or more explicitly: `if(x) {y} else {⍬}`","msgtype":"m.text","formatted_body":"Simple if: if(x) { y }<\/code> or more explicitly: if(x) {y} else {⍬}<\/code>"}} {"origin_server_ts":1653645626181,"event_id":"$USlKejN5H2SVvwxzkXmkTGxMPVpRP3eufxBkFB7W_k8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"If with else statement: `if(x) {y} else {z}`","msgtype":"m.text","formatted_body":"If with else statement: if(x) {y} else {z}<\/code>"}} {"origin_server_ts":1653645658493,"event_id":"$7jruPEzkZjlYwj56Ug0rr2Mdl_XukWRESrcVFqY_Ac4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Return if false `if(~x) { return ⍬ }`","msgtype":"m.text","formatted_body":"Return if false if(~x) { return ⍬ }<\/code>"}} {"origin_server_ts":1653645706000,"event_id":"$xxTD08RO_dQ7GwCAb_xXBIJYJzZcQXnwUsztXIuxNeY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Default result: `if(x) {x} else {y}`","msgtype":"m.text","formatted_body":"Default result: if(x) {x} else {y}<\/code>"}} {"origin_server_ts":1653645731000,"event_id":"$WixZ6xTltxeRGRTw6c0zD0PeSAH6z93pf8bm_8F6CXQ","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"K's if?","msgtype":"m.text","org.matrix.msc1767.text":"K's if?"}} {"origin_server_ts":1653645830615,"event_id":"$8d4EyYp9dnAqkmBRaZnfpF7Cw7IrXKpTpH6Z72sAfdA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What does it look like? The syntax I showed above is what Kap does today.","msgtype":"m.text"}} {"origin_server_ts":1653645852367,"event_id":"$MSGBv3PPj2GLqo_kKiAnQsE2Hx8pHXMOkTgNFax7PCU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(with the exception of `return` which isn't implemented yet)","msgtype":"m.text","formatted_body":"(with the exception of return<\/code> which isn't implemented yet)"}} {"origin_server_ts":1653645868570,"event_id":"$yyIww18FjMjgw6yDkKyIhAPXZhisCX9-y6J7-QrhoQo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`return` can be emulated using exceptions though.","msgtype":"m.text","formatted_body":"return<\/code> can be emulated using exceptions though."}} {"origin_server_ts":1653645980390,"event_id":"$VIh5bcfMbS6e2XbKAgWaIudYX0ppkcFw5mzfgwG7KE0","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Early exit: `$[x;:y;0]`\nSimple if: `$[x;y;()]`\nIf with else statement: `$[x;y;z]`\nReturn if false `$[~x;:();0]`\nDefault result: `$[x;x;y]`"},{"mimetype":"text/html","body":"Early exit: $[x;:y;0]<\/code>
Simple if: $[x;y;()]<\/code>
If with else statement: $[x;y;z]<\/code>
Return if false $[~x;:();0]<\/code>
Default result: $[x;x;y]<\/code>"}],"format":"org.matrix.custom.html","body":"Early exit: `$[x;:y;0]`\nSimple if: `$[x;y;()]`\nIf with else statement: `$[x;y;z]`\nReturn if false `$[~x;:();0]`\nDefault result: `$[x;x;y]`","msgtype":"m.text","formatted_body":"Early exit: $[x;:y;0]<\/code>
Simple if: $[x;y;()]<\/code>
If with else statement: $[x;y;z]<\/code>
Return if false $[~x;:();0]<\/code>
Default result: $[x;x;y]<\/code>"}} {"origin_server_ts":1653646043820,"event_id":"$oMJZQyl5X9Qoq87jhHtGWm2CqjrqZu5ctwDNTb6yPdk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Hmm, in K isn't `[ a ; b ; c ]` used for function arguments?","msgtype":"m.text","formatted_body":"Hmm, in K isn't [ a ; b ; c ]<\/code> used for function arguments?"}} {"origin_server_ts":1653646068730,"event_id":"$SKVfC6FsSqPcYd35FHy3jFUQUQeZRYyZ--prXQ9GU7k","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"yeah, `$` is special"},{"mimetype":"text/html","body":"yeah, $<\/code> is special"}],"format":"org.matrix.custom.html","body":"yeah, `$` is special","msgtype":"m.text","formatted_body":"yeah, $<\/code> is special"}} {"origin_server_ts":1653646070536,"event_id":"$wfHwkopqcC_eOu-WN7RHj7aGW4DD_YYcB5P7QuubHk0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So it's basically a function call to a function named `$`?","msgtype":"m.text","formatted_body":"So it's basically a function call to a function named $<\/code>?"}} {"origin_server_ts":1653646103119,"event_id":"$tqavk5WO7vGLrsukJSE2RvwGtSX500TieDBF5G6SzyU","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"no, not a function call. It does actual control flow","msgtype":"m.text","org.matrix.msc1767.text":"no, not a function call. It does actual control flow"}} {"origin_server_ts":1653646115663,"event_id":"$4B5R5z0ASifpM4FoGtN78Rokt9ItIMghvLZwkiIcXQU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Something like that would be possible, but I can't use precisely that syntax since `;` is used for creating tuples in kap.","msgtype":"m.text","formatted_body":"Something like that would be possible, but I can't use precisely that syntax since ;<\/code> is used for creating tuples in kap."}} {"origin_server_ts":1653646141777,"event_id":"$b6MSY2GZZcZd_rI8HkW1II8oSWyop_7P4Aq5LDyyL90","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Does K evaluate the unused arguments?","msgtype":"m.text"}} {"origin_server_ts":1653646180251,"event_id":"$2CtsTvW8Vw46bz91XkfT7XiMbhe-QciyJuyUzW64dzY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So in the default case, is `y` evaluated if `x` is true?","msgtype":"m.text","formatted_body":"So in the default case, is y<\/code> evaluated if x<\/code> is true?"}} {"origin_server_ts":1653646206366,"event_id":"$yucOYjmx8R6xZy7fmfe79dR4gLzqYKK9Y48c1O7VXts","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$b6MSY2GZZcZd_rI8HkW1II8oSWyop_7P4Aq5LDyyL90"}},"format":"org.matrix.custom.html","body":"no, it's special-cased to execute only the needed one","msgtype":"m.text","formatted_body":"
↰ <\/a> loke<\/a> <\/mx-reply>no, it's special-cased to execute only the needed one"}} {"origin_server_ts":1653646211889,"event_id":"$P7cWjvAleaEaZNfFcJt1luYlbZgZlVt2nETy1eqaW8o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I see.","msgtype":"m.text"}} {"origin_server_ts":1653646384423,"event_id":"$095kgHyGLLa-t1hSISz4_lH5Yu_2PowKBEnYWkk-iOA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Perhaps I could implement support in the custom syntax engine (used to implement `if`, etc as part of the library instead of being language constructs)","msgtype":"m.text","formatted_body":"Perhaps I could implement support in the custom syntax engine (used to implement if<\/code>, etc as part of the library instead of being language constructs)"}} {"origin_server_ts":1653646384566,"event_id":"$UMMRY77LRoaYhqRU9AbDJ2tKr-4WWmx5LAn7qRBSljI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I could definitely implement that specific syntax by special-casing `$`. I'm not sure I'm a fan of the syntax though.","msgtype":"m.text","formatted_body":"I could definitely implement that specific syntax by special-casing $<\/code>. I'm not sure I'm a fan of the syntax though."}} {"origin_server_ts":1653646384696,"event_id":"$l95nykHsDrZzr6rBCYfnLzIfs-uFN7eBOmO-ztZ1KiM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Then K-style `$` could be implemented in the library, allowing for some flexibility.","msgtype":"m.text","formatted_body":"Then K-style $<\/code> could be implemented in the library, allowing for some flexibility."}} {"origin_server_ts":1653646385187,"event_id":"$dUG_ollGMlFxg0xTDOyUcPKsn7F44POgknEqbujrsBM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I mean, `$` could enter into a special parsing mode.","msgtype":"m.text","formatted_body":"I mean, $<\/code> could enter into a special parsing mode."}} {"origin_server_ts":1653646528217,"event_id":"$8X97pJMzOazPqKipDtWNH42TlvWE5E7YJcIwPnaBXsk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have a brief network outage, and I notice my last messages were sent in the wrong order.","msgtype":"m.text"}} {"origin_server_ts":1653648622537,"event_id":"$4VYP_eDMYnRXYETdgwAoHMtpQMd3p2comvuQ4IDTo9I","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","type":"m.room.message","content":{"body":"what about something like C style ternary?","msgtype":"m.text"}} {"origin_server_ts":1653648656804,"event_id":"$mu0uBZImWNBUW2HVzNKtlyVRhIBRtEGkAratUYIpYpM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's pretty much what `$` is","msgtype":"m.text","formatted_body":"that's pretty much what $<\/code> is"}} {"origin_server_ts":1653648664378,"event_id":"$y-iZGl4ehtbIANQcQM_zcnzs1GLxHv8dsulegReF9Z4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"just one symbol instead of two","msgtype":"m.text","formatted_body":"just one symbol instead of two"}} {"origin_server_ts":1653648695080,"event_id":"$p4mp0IUymv5FA3O9XKueUFGnQd4KpdKIrDmagN_Qvq0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(well, and the brackets & semicolons i guess; at which point a `x?y:z` ternary uses less chars but ¯\\\\\\_(ツ)\\_/¯)","msgtype":"m.text","formatted_body":"(well, and the brackets & semicolons i guess; at which point a x?y:z<\/code> ternary uses less chars but ¯\\_(ツ)_/¯)"}} {"origin_server_ts":1653658315148,"event_id":"$705yniVuZSh-1RN3gswhw3NpJF9yoWoGuGti45h29gc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hmm...","msgtype":"m.text"}} {"origin_server_ts":1653658326235,"event_id":"$H-2uiPGOxl7PX3iVkm2FqFZmCxSbDIFhhQdPnLqfDsc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So maybe `${x;y;z}`","msgtype":"m.text","formatted_body":"So maybe ${x;y;z}<\/code>"}} {"origin_server_ts":1653658343373,"event_id":"$TxTIkkqm5zZIdUspOIZvX3AKfNJlC2TibWXw38Ue7ME","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Default value: `${x;;z}`","msgtype":"m.text","formatted_body":"Default value: ${x;;z}<\/code>"}} {"origin_server_ts":1653658369881,"event_id":"$LCK2QNC-Kv5ix5IMWoJ2l-nOuHBjoMV70WNK1B5dUI0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Or maybe `${x;z}`","msgtype":"m.text","formatted_body":"Or maybe ${x;z}<\/code>"}} {"origin_server_ts":1653658573311,"event_id":"$yKayw9W77QeJ5GR1YRcVAYSjTwYJKVYupUpvkQI9d_M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I have to say, I'm still not overly excited about that syntax. I wanted to avoid `[...]` because that looks like axis indicators. I was thinking about using `{...}` because it's already used for code, which the arguments here arguably is (because it's not evaluated)","msgtype":"m.text","formatted_body":"I have to say, I'm still not overly excited about that syntax. I wanted to avoid [...]<\/code> because that looks like axis indicators. I was thinking about using {...}<\/code> because it's already used for code, which the arguments here arguably is (because it's not evaluated)"}} {"origin_server_ts":1653658586890,"event_id":"$A8zukrNyPJZ0BJ-N8hTW7OAl21bcLdZQCLqn_CYtWJE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But it's still a huge amount of clutter.","msgtype":"m.text"}} {"origin_server_ts":1653658703950,"event_id":"$IHL1Hj8b_Mgt9Yek-243TpPolk57vKnbMSYFcC4Bzlc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, I wouldn't consider this a big improvement over `if(x) {y} else {z}`.","msgtype":"m.text","formatted_body":"Yeah, I wouldn't consider this a big improvement over if(x) {y} else {z}<\/code>."}} {"origin_server_ts":1653661318850,"event_id":"$C4KEDZmVJmNkOvXCzHlLLb0M3hzDyjsITqJnQ6HI-jo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So in Dyalog, the `:` binds looser than anything else?","msgtype":"m.text","formatted_body":"So in Dyalog, the :<\/code> binds looser than anything else?"}} {"origin_server_ts":1653661343095,"event_id":"$-j8UBJrWmV7ZGK_HneSXg9QNL7xgwQUWXOQpHOZjc14","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it's more just part of the syntax of dfns","msgtype":"m.text","formatted_body":"it's more just part of the syntax of dfns"}} {"origin_server_ts":1653661362667,"event_id":"$ZLHoQu2WXzh8YDPeBzaHPPpmRzZmaNgktqGFjFR5Mnc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"on the level of parsing that `⋄` is","msgtype":"m.text","formatted_body":"on the level of parsing that ⋄<\/code> is"}} {"origin_server_ts":1653667949769,"event_id":"$7f43amx3Od43snahpWdoqPpw43oXuetfTTRJtalmoug","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Fair enough, Dalog doesn't really have a grammar.","msgtype":"m.text"}} {"origin_server_ts":1653667980763,"event_id":"$Y4JW6RmJmpPOdWOfAjSorKmqXq3HVIvJxQFVMvRhEgY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But if it did, it'd bind tighter than ⋄ but looser than regular functions and operators.","msgtype":"m.text"}} {"origin_server_ts":1653880760044,"event_id":"$bO2FY_imWa8EYbHW54aQbEnMOErIueU4UxgWsJvdLB0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Fair enough, Dyalog doesn't really have a grammar.","msgtype":"m.text"},"m.relates_to":{"event_id":"$7f43amx3Od43snahpWdoqPpw43oXuetfTTRJtalmoug","rel_type":"m.replace"},"body":" * Fair enough, Dyalog doesn't really have a grammar.","msgtype":"m.text"}} {"origin_server_ts":1653880832038,"event_id":"$Q4MDLa-QA8tAqgd--uYG5TSUVV3q-QN5Tby3XRRBFEA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Perhaps I can use `⍠` instead of Dyalog's `:`.","msgtype":"m.text","formatted_body":"Perhaps I can use ⍠<\/code> instead of Dyalog's :<\/code>."}} {"origin_server_ts":1653880870235,"event_id":"$iXjrLh1itQ1tDe6kzTUWO3aCMJTHm97W7jg0kj-olvw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Maybe `a ⍠ b` could mean `if(a) {return b}`","msgtype":"m.text","formatted_body":"Maybe a ⍠ b<\/code> could mean if(a) {return b}<\/code>"}} {"origin_server_ts":1653889197875,"event_id":"$3XQkxdC11gBtW0XBXqjZ9V5XdzQi2nV6UkRF-5HXDXs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Question: Should I make it so that `2+` is a valid function expression being equal to `{2+⍵}`?","msgtype":"m.text","formatted_body":"Question: Should I make it so that 2+<\/code> is a valid function expression being equal to {2+⍵}<\/code>?"}} {"origin_server_ts":1653889248790,"event_id":"$trmLoYFNS_4Rkh6e8iyw5P4dXyVBOPuUPVqE5QfKQ50","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I've held back on it because of two reasons:\n1. I'm not a huge user of trains\n2. Dyalog doesn't support it, so I figured there may be a good reason it doesn't.","msgtype":"m.text","formatted_body":"

I've held back on it because of two reasons:<\/p>\n

    \n
  1. I'm not a huge user of trains<\/li>\n
  2. Dyalog doesn't support it, so I figured there may be a good reason it doesn't.<\/li>\n<\/ol>\n"}} {"origin_server_ts":1653896898185,"event_id":"$0ie45VNCRiLAUlHkJQhpHa0a78ckVLrlroPIuySWZBo","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"dzaima does, i think","msgtype":"m.text"}} {"origin_server_ts":1653897705356,"event_id":"$TszBucPjnTH2V7xKCYOj9YND19KKqyNRD8lKnjruEl4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"razetime: Yeah, I just decided to implement it. So I did.","msgtype":"m.text","formatted_body":"razetime<\/a>: Yeah, I just decided to implement it. So I did."}} {"origin_server_ts":1653897712266,"event_id":"$RZQQIaB9Ta5_1qqtDC-_apcunD_3Bg5yzidMM6XYIJ4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, that have left me with a dilemma.","msgtype":"m.text"}} {"origin_server_ts":1653897717177,"event_id":"$Iw-cKN3-4Uke3tlczS6ucKybtGCZInAJPnH98uFbz6Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Let's assume the following:","msgtype":"m.text"}} {"origin_server_ts":1653897783860,"event_id":"$XUX9B5AMuPuIE-KM-MU4RPUoaaYwzvyVIh0vBdUWFGc","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1653897796130,"event_id":"$L73Gd9L6kDxr-Z62lSvTIQLuVbsZ5qO8ir_1BiEH7BI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$XUX9B5AMuPuIE-KM-MU4RPUoaaYwzvyVIh0vBdUWFGc","type":"m.room.redaction","content":{"redacts":"$XUX9B5AMuPuIE-KM-MU4RPUoaaYwzvyVIh0vBdUWFGc"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1653897785934,"event_id":"$_dh9vDzbSJM5b3_BFMDl_p-EB1FmNMgpH3xaaRnLeFM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"```\nfoo ⇐ 1 {io:println ⍺+⍵}\n(bar 1) (bar 2)\n```","msgtype":"m.text","formatted_body":"
    foo ⇐ 1 {io:println ⍺+⍵}\n(bar 1) (bar 2)\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$XUX9B5AMuPuIE-KM-MU4RPUoaaYwzvyVIh0vBdUWFGc","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * ```\nfoo ⇐ 1 {io:println ⍺+⍵}\n(bar 1) (bar 2)\n```","msgtype":"m.text","formatted_body":" * 
    foo ⇐ 1 {io:println ⍺+⍵}\n(bar 1) (bar 2)\n<\/code><\/pre>\n"}}
    {"origin_server_ts":1653897796130,"event_id":"$L73Gd9L6kDxr-Z62lSvTIQLuVbsZ5qO8ir_1BiEH7BI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$XUX9B5AMuPuIE-KM-MU4RPUoaaYwzvyVIh0vBdUWFGc","type":"m.room.redaction","content":{"redacts":"$XUX9B5AMuPuIE-KM-MU4RPUoaaYwzvyVIh0vBdUWFGc"}}
    {"origin_server_ts":1653897843465,"event_id":"$mI81SfixAkg2bag5JQc0ZExdtkrShYk2eYHRfokOHzY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\nfoo ⇐ (io:println 1)+\nio:println \"abc\"\n(foo 1) (foo 2)\n```","msgtype":"m.text","formatted_body":"
    foo ⇐ (io:println 1)+\nio:println "abc"\n(foo 1) (foo 2)\n<\/code><\/pre>\n"}}
    {"origin_server_ts":1653897887461,"event_id":"$K1vojqXxBGP_4Cf5iUpft02kItSDJ8gFebPqDr74n-k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Note that `⇐` is a compile-time construct, so the call to `io:println 1` does not happen there.","msgtype":"m.text","formatted_body":"Note that ⇐<\/code> is a compile-time construct, so the call to io:println 1<\/code> does not happen there."}}
    {"origin_server_ts":1653897938229,"event_id":"$4bDcdUQ6hoEziuUUOJz1lj1Y4N-hZD2tWLp5gyJvpjw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Right now, the unevaluated call is store in `foo`, meaning that the above prints `abc foo foo`","msgtype":"m.text","formatted_body":"Right now, the unevaluated call is store in foo<\/code>, meaning that the above prints abc foo foo<\/code>"}}
    {"origin_server_ts":1653897945270,"event_id":"$TkDbF8QNod9UivPOD-HHBNhq-yUId7aElooDh_1Esx0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Right now, the unevaluated call is store in `foo`, meaning that the above prints `abc 1 1`","msgtype":"m.text","formatted_body":"Right now, the unevaluated call is store in foo<\/code>, meaning that the above prints abc 1 1<\/code>"},"m.relates_to":{"event_id":"$4bDcdUQ6hoEziuUUOJz1lj1Y4N-hZD2tWLp5gyJvpjw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Right now, the unevaluated call is store in `foo`, meaning that the above prints `abc 1 1`","msgtype":"m.text","formatted_body":" * Right now, the unevaluated call is store in foo<\/code>, meaning that the above prints abc 1 1<\/code>"}}
    {"origin_server_ts":1653898012402,"event_id":"$a-cV92Vmb7E0zxvwYUGSW54G2gC9mTpVCGeDK4j9n6o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Right now, the unevaluated call is stored in `foo`, meaning that the above prints `abc 1 1`","msgtype":"m.text","formatted_body":"Right now, the unevaluated call is stored in foo<\/code>, meaning that the above prints abc 1 1<\/code>"},"m.relates_to":{"event_id":"$4bDcdUQ6hoEziuUUOJz1lj1Y4N-hZD2tWLp5gyJvpjw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Right now, the unevaluated call is stored in `foo`, meaning that the above prints `abc 1 1`","msgtype":"m.text","formatted_body":" * Right now, the unevaluated call is stored in foo<\/code>, meaning that the above prints abc 1 1<\/code>"}}
    {"origin_server_ts":1653898080166,"event_id":"$FBlibzA9RJcSz3Tj-x-B8-RGlDFakXctaklgPkBdmiM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"A more practical effect is something like `foo ⇐ bar+` where `bar` is a number.","msgtype":"m.text","formatted_body":"A more practical effect is something like foo ⇐ bar+<\/code> where bar<\/code> is a number."}}
    {"origin_server_ts":1653898089857,"event_id":"$eb7idI2ln_FU6kzetdFCuRgqUjg5WdmghBeQ9IGTqJQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"If bar changes, should `foo` change?","msgtype":"m.text","formatted_body":"If bar changes, should foo<\/code> change?"}}
    {"origin_server_ts":1653898099039,"event_id":"$HwynP9OLcqV_yXfZKOUl95rA7eQ1p4Glq1P8QjDkAug","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's what it does today, and I'm not sure I like it.","msgtype":"m.text"}}
    {"origin_server_ts":1653900143891,"event_id":"$GXMg8qLn_PoO5VJjYA4x7FRo3JMKxFST2jkFiGBL4EY","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"wait KAP has compiletime","msgtype":"m.text","org.matrix.msc1767.text":"wait KAP has compiletime"}}
    {"origin_server_ts":1653900144661,"event_id":"$yIRnClUPNqhTZaF9FJcV0vgisS5DG3fabFyxQAA2q7I","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"wut","msgtype":"m.text","org.matrix.msc1767.text":"wut"}}
    {"origin_server_ts":1653902880277,"event_id":"$7QkALyF_5U7-UmabT7a4IPHFnG20PhKOEVXJiYenKlY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Well, kinda.","msgtype":"m.text"}}
    {"origin_server_ts":1653902918927,"event_id":"$PhqPpsV3ShMQJzkMH37OSf0ZEjjDzcy295JXAffMy_Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It has parse-time. It parses the code and creates a thing that can be executed.","msgtype":"m.text"}}
    {"origin_server_ts":1653902944218,"event_id":"$VA-4yD2xlthkMCP1-vw6dmrk1AxBQZoeyO83ydBGIr8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's represented internally as an object structure. You can think of it as a compiled representation.","msgtype":"m.text"}}
    {"origin_server_ts":1653903819751,"event_id":"$q5eH5F8uIhHrrgR6Sb5NkOctg7X8U7wxSeKT82gfD_8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the issue with `2+` is that it breaks the ability to know whether a train carriage is a fork center or side just from the index from the right","msgtype":"m.text","formatted_body":"the issue with 2+<\/code> is that it breaks the ability to know whether a train carriage is a fork center or side just from the index from the right"}}
    {"origin_server_ts":1653903934067,"event_id":"$qk9cbdLlcn4bCVjHRyQ-8q5aBjlBholuj-WGXh23b1Y","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(why doesn't [this](https://kapdemo.dhsdevelopments.com/clientweb2/#foo%20%E2%87%90%202%2B%E2%8A%A2%0AFoo%204) work?)","msgtype":"m.text","formatted_body":"(why doesn't this<\/a> work?)"}}
    {"origin_server_ts":1653903969468,"event_id":"$CsFqoousvuaAMU_tlDwXXsX7usillT_CFEHi-oVfiLk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(why doesn't [this](https://kapdemo.dhsdevelopments.com/clientweb2/#foo%20%E2%87%90%202%2B%E2%8A%A2%0AFoo%204) work? are trains not implemented for `⇐`?)","msgtype":"m.text","formatted_body":"(why doesn't this<\/a> work? are trains not implemented for ⇐<\/code>?)"},"m.relates_to":{"event_id":"$qk9cbdLlcn4bCVjHRyQ-8q5aBjlBholuj-WGXh23b1Y","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (why doesn't [this](https://kapdemo.dhsdevelopments.com/clientweb2/#foo%20%E2%87%90%202%2B%E2%8A%A2%0AFoo%204) work? are trains not implemented for `⇐`?)","msgtype":"m.text","formatted_body":"* (why doesn't this<\/a> work? are trains not implemented for ⇐<\/code>?)"}}
    {"origin_server_ts":1653904125083,"event_id":"$g47DlU9liXEyW16ZjVNOUGF75jijNOMVMcWCEHnCMZU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Before checking your question, allow me to show you the current behaviour:\n```\nx ← 10\na ⇐ x+\ny ← a 1\nx ← 20\nz ← a 6\ny z\n```\nThis returns the array 11 26.","msgtype":"m.text","formatted_body":"

    Before checking your question, allow me to show you the current behaviour:<\/p>\n

    x ← 10\na ⇐ x+\ny ← a 1\nx ← 20\nz ← a 6\ny z\n<\/code><\/pre>\n

    This returns the array 11 26.<\/p>\n"}} {"origin_server_ts":1653904183276,"event_id":"$2a3tOahcmXaBv1OHvR9ufP3Gs1aO6UrFozeZiFyQdio","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$qk9cbdLlcn4bCVjHRyQ-8q5aBjlBholuj-WGXh23b1Y"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> (why doesn't [this](https://kapdemo.dhsdevelopments.com/clientweb2/#foo%20%E2%87%90%202%2B%E2%8A%A2%0AFoo%204) work? are trains not implemented for `⇐`?)\n\nTwo reasons you're getting errors:","msgtype":"m.text","formatted_body":"

    In reply to<\/a> @dzaima:matrix.org<\/a>
    (why doesn't
    this<\/a> work? are trains not implemented for ⇐<\/code>?)<\/blockquote><\/mx-reply>Two reasons you're getting errors:"}} {"origin_server_ts":1653904195833,"event_id":"$g_Y9r85gx4DSzFh0b3QHdLKRVIuxIFM_Zvjpui8cURM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The first is that kap is case significant. `foo` is different from `Foo`.","msgtype":"m.text","formatted_body":"The first is that kap is case significant. foo<\/code> is different from Foo<\/code>."}} {"origin_server_ts":1653904212237,"event_id":"$FP-2JCGgHGCb14RX65U4KmgcSr9bF-yxw-NGOdrUdZE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Secondly, values don't bind in trains like in Dyalog.","msgtype":"m.text"}} {"origin_server_ts":1653904219060,"event_id":"$dHpinNIxJMa15T1KBrd1DYOyzho-kqi7xfqJbNd1-Eo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Secondly, values don't bind in trains unlike Dyalog.","msgtype":"m.text"},"m.relates_to":{"event_id":"$FP-2JCGgHGCb14RX65U4KmgcSr9bF-yxw-NGOdrUdZE","rel_type":"m.replace"},"body":" * Secondly, values don't bind in trains unlike Dyalog.","msgtype":"m.text"}} {"origin_server_ts":1653904245908,"event_id":"$ddKJgkeIR1zoV663o-33ClQLhturxD_MDhpu7DTxBss","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The `2+` syntax (which is not available on the web client yet because I just implemented it) is not a train.","msgtype":"m.text","formatted_body":"The 2+<\/code> syntax (which is not available on the web client yet because I just implemented it) is not a train."}} {"origin_server_ts":1653904256413,"event_id":"$Ue-EGEyAC6zgij31I1VMUl5KfySDEtoMt7VG6nPrY4c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's literally an incomplete function call.","msgtype":"m.text"}} {"origin_server_ts":1653904261305,"event_id":"$zz3K5J1m0_0Fz65n422ET816n3d_lJZAoJwbf6LLTIA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$g_Y9r85gx4DSzFh0b3QHdLKRVIuxIFM_Zvjpui8cURM"}},"format":"org.matrix.custom.html","body":"oh i can't read ಠ_ಠ","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>oh i can't read ಠ_ಠ"}} {"origin_server_ts":1653904346366,"event_id":"$l6hizSj57OHjDga1hIiX2d19XkMqycy9iigPoQ30AZU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$ddKJgkeIR1zoV663o-33ClQLhturxD_MDhpu7DTxBss"}},"format":"org.matrix.custom.html","body":"imo that'd cause a ton of confusion (right-most thing being a function indicating a train wouldn't be true anymore; you'd now have 3 evaluation modes - regular execution, trains, and this incomplete call thing)","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>imo that'd cause a ton of confusion (right-most thing being a function indicating a train wouldn't be true anymore; you'd now have 3 evaluation modes - regular execution, trains, and this incomplete call thing)"}} {"origin_server_ts":1653904352998,"event_id":"$daQZrp_yAQ3HaDAqv3Im-drVLhhcBojO97kXZxDHJn4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So what I've done now is that incomplete function calls (which currently gives the error message you saw) now parses as a function.","msgtype":"m.text"}} {"origin_server_ts":1653904382319,"event_id":"$P6LUmLJMt7XFr3bHzTOXTrd5QMCq85ySqmK1NxyZhgk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Specifically, as a monadic function (which calls the inner function dyadically)","msgtype":"m.text"}} {"origin_server_ts":1653904409196,"event_id":"$oiOpk8sSNlMRRNwF5inAvetYR2tnIw1a2owA3DgrTvU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"in dzaima/APL, `2+` is equivalent to `2+⊢` except it errors if dyadically invoked","msgtype":"m.text","formatted_body":"in dzaima/APL, 2+<\/code> is equivalent to 2+⊢<\/code> except it errors if dyadically invoked"}} {"origin_server_ts":1653904582918,"event_id":"$RJNy0iyKg9KlPSu-YIlkz7I_eVeAT271dRkYDwdIPII","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, the same is true in kap now. Except that it's technically not a train.","msgtype":"m.text"}} {"origin_server_ts":1653904615695,"event_id":"$6kmL_nBOGbcI2YczBwTJD7Ho6QpwlzzdjRdzsqN_hA0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This is important because your example is actually balid syntax right now, but returns 4.","msgtype":"m.text"}} {"origin_server_ts":1653904619936,"event_id":"$BA112CN9yE4vVMzw6ahVWG7wct3MnI4H22nSA1I7zng","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"This is important because your example is actually valid syntax right now, but returns 4.","msgtype":"m.text"},"m.relates_to":{"event_id":"$6kmL_nBOGbcI2YczBwTJD7Ho6QpwlzzdjRdzsqN_hA0","rel_type":"m.replace"},"body":" * This is important because your example is actually valid syntax right now, but returns 4.","msgtype":"m.text"}} {"origin_server_ts":1653904660224,"event_id":"$rj5Ah05vty99YzNDZKN-0IeMBTI_mALQ8DiBO3ZJvKw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The reason for _that_ is because of a bug in train parsing (it ignores left arguments)","msgtype":"m.text","formatted_body":"The reason for that<\/em> is because of a bug in train parsing (it ignores left arguments)"}} {"origin_server_ts":1653905424107,"event_id":"$yT2CBOh7_v6x4vj8XuATQTfXRIJ--S9slCJWEuIp7fI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you want to test it, you can check out this branch and run it: https://github.com/lokedhs/array/tree/assigned-left-arg","msgtype":"m.text"}} {"origin_server_ts":1653906708831,"event_id":"$xZv4z35YoIp3xY74-Glh-sckkBWaMqexLUzRKl54Jrg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n a←0 ⋄ ((a←a+1)+)¨ ⍳10 ⋄ a\n1\n```","msgtype":"m.text","formatted_body":"
       a←0 ⋄ ((a←a+1)+)¨ ⍳10 ⋄ a\n1<\/code><\/pre>"}}
    {"origin_server_ts":1653906712805,"event_id":"$jsaNdHx4LnsO5EFC7Z6WBX45_qrVstBvSuRYuo99Vxg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"```\n   a←0 ⋄ ((a←a+1)+)¨ ⍳10 ⋄ a\n10\n```","msgtype":"m.text","formatted_body":"
       a←0 ⋄ ((a←a+1)+)¨ ⍳10 ⋄ a\n10<\/code><\/pre>"},"m.relates_to":{"event_id":"$xZv4z35YoIp3xY74-Glh-sckkBWaMqexLUzRKl54Jrg","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* ```\n   a←0 ⋄ ((a←a+1)+)¨ ⍳10 ⋄ a\n10\n```","msgtype":"m.text","formatted_body":"* 
       a←0 ⋄ ((a←a+1)+)¨ ⍳10 ⋄ a\n10<\/code><\/pre>"}}
    {"origin_server_ts":1653907653324,"event_id":"$p9qWgul59mqaY--BckzKPuCmz5a55h_MJj5bPUMkys0","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"what lmao","msgtype":"m.text","org.matrix.msc1767.text":"what lmao"}}
    {"origin_server_ts":1653908846625,"event_id":"$6tnwYOp2zUcdfhZ0a1OfZ5fqY4CMJWBkLoVtd-ik3pI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Fun, right? ","msgtype":"m.text"}}
    {"origin_server_ts":1653909233908,"event_id":"$MbUQfzuG1g2p6eH0leiGKXNHPXVmyjWS9ce0a2vTkyE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now, there are of course other ways to implement it.","msgtype":"m.text"}}
    {"origin_server_ts":1653910686265,"event_id":"$i7b15_MVoyuVU_FuTnmqqaijVBGJQOlWWfPl7wGPgXM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: What you noted is precisely what I was talking about. During parsing, the left argument is in the form of an `Instruction` object. These can be evaluated to generate an actual value. The question is when to evaluate it.","msgtype":"m.text","formatted_body":"dzaima<\/a>: What you noted is precisely what I was talking about. During parsing, the left argument is in the form of an Instruction<\/code> object. These can be evaluated to generate an actual value. The question is when to evaluate it."}}
    {"origin_server_ts":1653910703877,"event_id":"$SBvYADzWIcWt__oB_ffaSFFa9bBOc3_6i3Mg-QmKfc0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Right now it's evaluated when the call to `+` is evaluated.","msgtype":"m.text","formatted_body":"Right now it's evaluated when the call to +<\/code> is evaluated."}}
    {"origin_server_ts":1653910771716,"event_id":"$yk2Yg5vokvRx2QvdzQzyKrzv5umsQ2_F9iOu9dCmoE0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"right; i'm saying that that's extremely confusing","msgtype":"m.text","formatted_body":"right; i'm saying that that's extremely confusing"}}
    {"origin_server_ts":1653910776851,"event_id":"$ekVTOV6xEcw4AYdg9_lXL0cpAAx4ifZz-ru0yIirzps","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes.","msgtype":"m.text"}}
    {"origin_server_ts":1653910829453,"event_id":"$PXWS2O3Gs6RTvsCOkfx7lNJGahePR6I8GC3MjwPook0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It could be argued it's in line with some aspects of the lazy evaluation. However, it's also extremely confusing and probably never useful.","msgtype":"m.text"}}
    {"origin_server_ts":1653930205469,"event_id":"$RQHHoeGuL2jfsZxK6ZcowAPrehk9zolrWrZEmCVRiKk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have an idea how to deal with this that is still semantically correct.","msgtype":"m.text"}}
    {"origin_server_ts":1653930211608,"event_id":"$mSZNrdPfbSFSOmWYxKDCeTyxnnNFM6vH3oksAABu46E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll experiment and update.","msgtype":"m.text"}}
    {"state_key":"@Kooda:elynx.fr","origin_server_ts":1653941615893,"event_id":"$WOjrs8Hhj2du1umaO-x1cFz4Ds3IneSiaRvBB1BXB7c","sender":"@Kooda:elynx.fr","user_id":"@Kooda:elynx.fr","prev_content":{"avatar_url":"mxc://elynx.fr/KwNpmVIMSVcyATiCHclcUwLb","displayname":"Kooda","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://elynx.fr/iNacefvfmiIziWHNECDQjhrJ","displayname":"Kooda","membership":"join"},"replaces_state":"$dKEsP6GNU16871duBb32e8ERoW6LkbiIQFCEtHKAIto"}
    {"origin_server_ts":1654019705840,"event_id":"$h2txQSVM3AAec2OlJ2cPwvBvoe6WNEA-7A7ub2wtRaM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Wow. Doing it right is actually hard. An interesting puzzle. ","msgtype":"m.text"}}
    {"origin_server_ts":1654019776943,"event_id":"$0q-6wfEHmhVvXopVDzNfqPQ9TuPl392BToL_kqqQm-Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Turns out that I need to generate code in addition to generating a function description. The code needs to to compute the value for the left argument, and the function description needs to close over that value. ","msgtype":"m.text"}}
    {"origin_server_ts":1654019801112,"event_id":"$wYK8Ps3q2cTZDL_ildB6xSRTnmD6NjzDOIQFOAkDje0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So (a+) is actually a closure. ","msgtype":"m.text"}}
    {"origin_server_ts":1654019887667,"event_id":"$vGORs3tB-Ay34T5o3bl0vmQUBiUeflwYEZ3IxJgGM9A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Of course it's even harder because right now the core parsing function can return either an instruction or a function reference, but here I need to do both ","msgtype":"m.text"}}
    {"origin_server_ts":1654019894150,"event_id":"$42geAtpj--2SNlCFZBFyMW48oQBugiafj4PxrGRbU3I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Of course it's even harder because right now the core parsing function can return either an instruction or a function reference, but here I need to do both. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$vGORs3tB-Ay34T5o3bl0vmQUBiUeflwYEZ3IxJgGM9A","rel_type":"m.replace"},"body":"* Of course it's even harder because right now the core parsing function can return either an instruction or a function reference, but here I need to do both. ","msgtype":"m.text"}}
    {"origin_server_ts":1654019982612,"event_id":"$0phKTKIwk943G-wAebG7bd0yK3f6e7YHAJ3JN60zv9Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So I'm considering adding some infrastructure to allow you to introspect a function description to ask our if there is any code that needs to be run alongside the declaration itself. ","msgtype":"m.text"}}
    {"origin_server_ts":1654020004472,"event_id":"$aV31UeVnCe1lA2_BkdrogzbpQ_4yc_i57FdE_5OkdsQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This can be useful in other cases as well, maybe. ","msgtype":"m.text"}}
    {"origin_server_ts":1654020035239,"event_id":"$TIqmqJD9hPZMysCEj866PW6KNVxMLDqpUv2aXBR_gYg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$wYK8Ps3q2cTZDL_ildB6xSRTnmD6NjzDOIQFOAkDje0"}},"format":"org.matrix.custom.html","body":"with your system it is, but in dzaima/APL (or the equivalent 3-train `(a+⊢)` in any APL impl that supports those) it's just a tuple of the value of `a` and `+`","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>with your system it is, but in dzaima/APL (or the equivalent 3-train (a+⊢)<\/code> in any APL impl that supports those) it's just a tuple of the value of a<\/code> and +<\/code>"}}
    {"origin_server_ts":1654020075703,"event_id":"$AGqkXRVPMSieVnaHj3dxtp-PnJWQ6PNJ_ONJhch099k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I did realise that the rank operator already suffered from the same issue, just that none of the test cases picked it up because I don't think I've ever used the rank operator with anything but constant integers. ","msgtype":"m.text"}}
    {"origin_server_ts":1654020142885,"event_id":"$HWRrvyIkrUEP1XcLZt7PMMU_GI77h8q76fcc6e4iZSE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: right. If you have an APL where functions are a kind of values instead of compile time constructs then it's easier. ","msgtype":"m.text","formatted_body":"dzaima<\/a>: right. If you have an APL where functions are a kind of values instead of compile time constructs then it's easier. "}}
    {"origin_server_ts":1654020184290,"event_id":"$00NimPmlQ0oJ5m3f4X2V_-9KjyhdpkZwNBhazf0lF6Q","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ah i guess you haven't had a need for runtime-generated functions yet","msgtype":"m.text","formatted_body":"ah i guess you haven't had a need for runtime-generated functions yet"}}
    {"origin_server_ts":1654020211154,"event_id":"$XRZyxVd8ho482RysMo-2N0qh5Tscr6d3QwHvQs1xOCY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(well, you have with `⍤` but you didn't know that)","msgtype":"m.text","formatted_body":"(well, you have with ⍤<\/code> but you didn't know that)"}}
    {"origin_server_ts":1654020237371,"event_id":"$PVPqmm6XwgUm9htxgYXv1KBUcfj1RdDbtw1P6oQarbM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Sorry if my description was incoherent. I was actually mostly trying to explain it to myself. Writing it down helps understanding the problem you're working on","msgtype":"m.text"}}
    {"origin_server_ts":1654020248412,"event_id":"$vFeXBwYDE9XzIyE5mThVOmuSnHlsvJFaHg4S4NIEWn0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Sorry if my description was incoherent. I was actually mostly trying to explain it to myself. Writing it down helps understanding the problem you're working on. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$PVPqmm6XwgUm9htxgYXv1KBUcfj1RdDbtw1P6oQarbM","rel_type":"m.replace"},"body":"* Sorry if my description was incoherent. I was actually mostly trying to explain it to myself. Writing it down helps understanding the problem you're working on. ","msgtype":"m.text"}}
    {"origin_server_ts":1654020276910,"event_id":"$RH__wuTBOOxUDgVAdXNmVtMb0wRf6TOVZpRKWJQ0bKM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have needed it before, but it's always been explicit using lambda and apply. ","msgtype":"m.text"}}
    {"origin_server_ts":1654020294946,"event_id":"$JsUCma5o7f2qIeI6oEkxjFwdK4HtrCtqWnjllNG6oLc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In this case it's an implicitly created closure. ","msgtype":"m.text"}}
    {"origin_server_ts":1654252161562,"event_id":"$zAVhXfVmZTJweKSUX4A9f6KH8YBB6P4E91CqHUF0c5E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"After thinking about this for way too long, I have now implemented a solution where the left argument is computed at the point of definition, and the actual evaluation is now referring to the previous value (using an anonymous environment binding). This makes things behave the way you'd expect.","msgtype":"m.text"}}
    {"origin_server_ts":1654252223798,"event_id":"$seGzo4SE6033EJhuDGiCrUgnxvvEMf1qtJ1ssWvBg_c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There is still one bug, which is illustrated in this failing test case: https://github.com/lokedhs/array/blob/assigned-left-arg/array/src/commonTest/kotlin/array/ComposeTest.kt#L430","msgtype":"m.text"}}
    {"origin_server_ts":1654328098815,"event_id":"$lL3RtjtJjRqEvJmgoOHeROPtGR9gZipik02BnnO9xUQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: I think I've fixed it: https://kapdemo.dhsdevelopments.com/clientweb2/#x%20%E2%86%90%201%20%E2%97%8A%20a%20%E2%87%90%20(x%E2%86%90x%2B1)%2B%20%E2%97%8A%20(a%2010)%20(a%20100)","msgtype":"m.text","formatted_body":"dzaima<\/a>: I think I've fixed it: https://kapdemo.dhsdevelopments.com/clientweb2/#x%20%E2%86%90%201%20%E2%97%8A%20a%20%E2%87%90%20(x%E2%86%90x%2B1)%2B%20%E2%97%8A%20(a%2010)%20(a%20100)"}}
    {"origin_server_ts":1654328138164,"event_id":"$_glhm-pAW4gGAsxBLQWDeIjCuZBvTEEYFb019Rw91S8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$xZv4z35YoIp3xY74-Glh-sckkBWaMqexLUzRKl54Jrg"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> ```\n>    a←0 ⋄ ((a←a+1)+)¨ ⍳10 ⋄ a\n> 10\n> ```\n\nThis example now returns 1 as expected.","msgtype":"m.text","formatted_body":"
    In reply to<\/a> @dzaima:matrix.org<\/a>
       a←0 ⋄ ((a←a+1)+)¨ ⍳10 ⋄ a\n10<\/code><\/pre><\/blockquote><\/mx-reply>This example now returns 1 as expected."}}
    {"origin_server_ts":1654328194233,"event_id":"$p-FwWcTpPaNkxgggUMM4OW2zCDvLYsEpcX-rPmuT_Pk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Making this work right in the face of closures was a bit annoying.","msgtype":"m.text"}}
    {"origin_server_ts":1654339513454,"event_id":"$Rdygihflpy0lNwuBPOY11f3MJVI_-XuM5F9s17cfNCU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"There is still one issue which doesn't affect behaviour: The value of the argument to the left is stored in in the local context with a binding (essentially an anonymous variable) so when you do `(1+) 2` on the REPL, the value `1` is stored in your session and you won't be able to clear it.","msgtype":"m.text","formatted_body":"There is still one issue which doesn't affect behaviour: The value of the argument to the left is stored in in the local context with a binding (essentially an anonymous variable) so when you do (1+) 2<\/code> on the REPL, the value 1<\/code> is stored in your session and you won't be able to clear it."}}
    {"origin_server_ts":1654353915385,"event_id":"$tZlph-5CPN-wsBuR30uyuY4_oemSs3A_bFV-QG9QSgs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If one tries to use the KAP version of left-binding arguments and compare to Dyalog, they will see differences when used in trains:","msgtype":"m.text"}}
    {"origin_server_ts":1654353926336,"event_id":"$Gyye6mH7_xUyOILM15zIEKOEYP2DrVQrKb6Gg5Y1hKs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"In KAP: `(2-÷) 10` gives -0.2","msgtype":"m.text","formatted_body":"In KAP: (2-÷) 10<\/code> gives -0.2"}}
    {"origin_server_ts":1654353938595,"event_id":"$19E2-197XP7g6-LKguNGR2s3Lw3caDiLzh_pwzx0xcU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In Dyalog it's 1.9.","msgtype":"m.text"}}
    {"origin_server_ts":1654354011792,"event_id":"$c57rlxU47latqENNxTps8BcneqB88FwCyyHFUcrQfqY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"This is of course because in KAP, it's a value bound to a 2-train, while in Dyalog, a value bound to an operator is equivalent to `{value}`. I.e. to get Dyalog's behaviour in KAP the solution is to write: `({2}-÷) 10`","msgtype":"m.text","formatted_body":"This is of course because in KAP, it's a value bound to a 2-train, while in Dyalog, a value bound to an operator is equivalent to {value}<\/code>. I.e. to get Dyalog's behaviour in KAP the solution is to write: ({2}-÷) 10<\/code>"}}
    {"origin_server_ts":1654354043496,"event_id":"$h11VC7qLXCFY9UoaNsSKJVe62pjLlrAHgzOoyMRo-m4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'd expect maybe `(2-÷)` to be `((2-)÷)`, but `(2(-÷))`\u203d","msgtype":"m.text","formatted_body":"I'd expect maybe (2-÷)<\/code> to be ((2-)÷)<\/code>, but (2(-÷))<\/code>\u203d"}}
    {"origin_server_ts":1654354115000,"event_id":"$IMllHH0s4flIx5VnLktwflvcRhdz5ulPpyfLEn5HCGM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: This is a direct effect of operators having strong right-affinity","msgtype":"m.text","formatted_body":"dzaima<\/a>: This is a direct effect of operators having strong right-affinity"}}
    {"origin_server_ts":1654354119399,"event_id":"$Hka3f0yofEx6B17I2UW4Ect1PfAlDc-wyrSDWbiJKtY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"dzaima: This is a direct effect of operators having strong right-preference","msgtype":"m.text","formatted_body":"dzaima<\/a>: This is a direct effect of operators having strong right-preference"},"m.relates_to":{"event_id":"$IMllHH0s4flIx5VnLktwflvcRhdz5ulPpyfLEn5HCGM","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * dzaima: This is a direct effect of operators having strong right-preference","msgtype":"m.text","formatted_body":" * dzaima<\/a>: This is a direct effect of operators having strong right-preference"}}
    {"origin_server_ts":1654354148937,"event_id":"$2--MSVyp81QWEzgN9LXA0tWaUs-uKyICLagYGZ1SnHA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"And it's intentional. Like, if you want to define a \"subtract by 2\" function, it's `(2-⍨)`","msgtype":"m.text","formatted_body":"And it's intentional. Like, if you want to define a "subtract by 2" function, it's (2-⍨)<\/code>"}}
    {"origin_server_ts":1654354266709,"event_id":"$2Jt6sRkVY9R9qmZBl3jIHDjb6diVAVm5P0izJQPkb28","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh, and I found a bug... `((2-)÷) 10` gives an error.","msgtype":"m.text","formatted_body":"Oh, and I found a bug... ((2-)÷) 10<\/code> gives an error."}}
    {"origin_server_ts":1654354278973,"event_id":"$mYzTwrS3ct7uvH0aigODbvLNqMVRO4y2RHnX9sXC6L0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Annoying.","msgtype":"m.text"}}
    {"origin_server_ts":1654354396120,"event_id":"$4ihhn7PijWxmNjqzTohrZu1vNq4YMrL6jWofyMoQMmw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$IMllHH0s4flIx5VnLktwflvcRhdz5ulPpyfLEn5HCGM"}},"format":"org.matrix.custom.html","body":"if there's anywhere I'd expect an imaginary operator to be in `(2-÷)`, it'd be between `2` and `-`; and KAP seems to parse `(f∘g h)` correctly as `((f∘g)h)`","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>if there's anywhere I'd expect an imaginary operator to be in (2-÷)<\/code>, it'd be between 2<\/code> and -<\/code>; and KAP seems to parse (f∘g h)<\/code> correctly as ((f∘g)h)<\/code>"}}
    {"origin_server_ts":1654354641277,"event_id":"$oeh2CI1FrzN11AhQEdQIPmOKE-t9GmPry_DEytpWFRU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"also, no `(A g h)` trains means that `(1+2×100÷)` won't do what you'd expect (while both `(1+)` and `(1+2×)` do the expected thing)","msgtype":"m.text","formatted_body":"also, no (A g h)<\/code> trains means that (1+2×100÷)<\/code> won't do what you'd expect (while both (1+)<\/code> and (1+2×)<\/code> do the expected thing)"}}
    {"origin_server_ts":1654356959380,"event_id":"$BCILbWjjgQf5q2WNVJktJkoqTtoUD8x_8mzBDUMOmMs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think if given the choice between support for `A g h` trains or `A g` only, most APLers would go with `A g h`. Adding `⊢` feels more obvious to me than adding `{}`.","msgtype":"m.text","formatted_body":"I think if given the choice between support for A g h<\/code> trains or A g<\/code> only, most APLers would go with A g h<\/code>. Adding ⊢<\/code> feels more obvious to me than adding {}<\/code>."}}
    {"origin_server_ts":1654358111191,"event_id":"$D7wUht_8uxUcqbB39-0tFUdBF4t4E1xTnqj-uBuLK1k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: Is it more obvious because you're used to it, or because it's more natural?","msgtype":"m.text","formatted_body":"Marshall<\/a>: Is it more obvious because you're used to it, or because it's more natural?"}}
    {"origin_server_ts":1654358120946,"event_id":"$kcxmDw3MpLcnSSJLYjAXPwYSNcntj2bj_ZJdkwI9qUk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(I have no idea if there is a \"correct\" answer)","msgtype":"m.text"}}
    {"origin_server_ts":1654358274300,"event_id":"$1JtVeRihTUUMHaFad6xYrSfB7MJwMryLB1NpFdANwjg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"BQN has the same `{}` syntax going in the other direction and I don't think anyone really comes up with it on their own.","msgtype":"m.text","formatted_body":"BQN has the same {}<\/code> syntax going in the other direction and I don't think anyone really comes up with it on their own."}}
    {"origin_server_ts":1654358409281,"event_id":"$b32_r3zss_furlYkJfRmslrGl4MAP7iW2EkcTE8FKwc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"This is also probably the most common confusion about trains, that whether the rightmost part is a function or array has a special meaning. So I think making that distinction in the context of higher-order functions is just not very natural.","msgtype":"m.text","formatted_body":"This is also probably the most common confusion about trains, that whether the rightmost part is a function or array has a special meaning. So I think making that distinction in the context of higher-order functions is just not very natural."}}
    {"origin_server_ts":1654358494224,"event_id":"$3iFlTynxc_6uD-MybbPwDhobiKnL107wDA2fD_LwfLY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No one has trouble with `a + b` versus `fn + b`, so I guess having an array result makes these things easier to reason about.","msgtype":"m.text","formatted_body":"No one has trouble with a + b<\/code> versus fn + b<\/code>, so I guess having an array result makes these things easier to reason about."}}
    {"origin_server_ts":1654358610791,"event_id":"$pWZHQmu4kZYoBPlLRT3NTgLMbFnjq8NXMvbG9I7sCRg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$oeh2CI1FrzN11AhQEdQIPmOKE-t9GmPry_DEytpWFRU"}},"format":"org.matrix.custom.html","body":"(actually I'm not sure if `(1+2×)` would work under KAP's system)","msgtype":"m.text","formatted_body":" ↰ <\/a> dzaima<\/a> <\/mx-reply>(actually I'm not sure if (1+2×)<\/code> would work under KAP's system)"}}
    {"origin_server_ts":1654359015800,"event_id":"$FcfIdEQ0zX8IVHNmw_BAQ0_kFofm5FH_9oKfwordi6M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It would not.","msgtype":"m.text"}}
    {"origin_server_ts":1654359172720,"event_id":"$PWGF_B7xzZ7bPmsyuutQuEMnpcgJQfhquU0_YxWrca0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'm of the opinion that trains shouldn't be overused, and if you want that, then `{1+2×100÷⍵}` is much more readable.","msgtype":"m.text","formatted_body":"I'm of the opinion that trains shouldn't be overused, and if you want that, then {1+2×100÷⍵}<\/code> is much more readable."}}
    {"origin_server_ts":1654359212117,"event_id":"$7zv9V3jb0MVOTSN3w4CeQioEaIWN6c18BLYG9dXLj4M","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"so KAP's syntax gives you `(A f g)` meaning `f A g ⍵`, which is just `(f A g)`, and `(A f g h)` which is `A∘(f g h)`, which isn't that common; certainly _way_ less common than `A f g ⍵`","msgtype":"m.text","formatted_body":"so KAP's syntax gives you (A f g)<\/code> meaning f A g ⍵<\/code>, which is just (f A g)<\/code>, and (A f g h)<\/code> which is A∘(f g h)<\/code>, which isn't that common; certainly way<\/em> less common than A f g ⍵<\/code>"}}
    {"origin_server_ts":1654359352212,"event_id":"$NrR4PB_x6qFLRF0MAkylM6FVDXlUPbeZu89muQkQk2s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'd say `1+2×100÷` is one of the most readable types of trains; certainly a ton more readable than general forks which you already have (and i'd guess it's more common than forks too)","msgtype":"m.text","formatted_body":"I'd say 1+2×100÷<\/code> is one of the most readable types of trains; certainly a ton more readable than general forks which you already have (and i'd guess it's more common than forks too)"}}
    {"origin_server_ts":1654359357275,"event_id":"$vEdlj9GdZmr_vI5l5s9ZJw0ABGa6Qf0ZhgUTBNX1cm8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`(A f g)` is `A` left-bound to the train `f g`. That means that `x (A f g) y` is `A f x g y`","msgtype":"m.text","formatted_body":"(A f g)<\/code> is A<\/code> left-bound to the train f g<\/code>. That means that x (A f g) y<\/code> is A f x g y<\/code>"}}
    {"origin_server_ts":1654359394964,"event_id":"$G9DyZvouBOV3IeFDjwTYUzDEUwrJtMMxV1PwyQcoiFs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that doesn't make any sense","msgtype":"m.text","formatted_body":"that doesn't make any sense"}}
    {"origin_server_ts":1654359407169,"event_id":"$suZnXljSsBFtHk4kW0AmGFpOVv1tTbs0SwHMnl_zkPY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Sorry","msgtype":"m.text"}}
    {"origin_server_ts":1654359418787,"event_id":"$whsMviAD_7YABgjI-5TA2zm95UefT2cCuv5cUdKFuJE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"you can't have two left arguments to `(f g)`","msgtype":"m.text","formatted_body":"you can't have two left arguments to (f g)<\/code>"}}
    {"origin_server_ts":1654359481132,"event_id":"$fZCJca3GkH521zOyTrmz1VpUwRDdI65cZIHpYcJNxew","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(or of course to any function)","msgtype":"m.text","formatted_body":"(or of course to any function)"}}
    {"origin_server_ts":1654359487126,"event_id":"$KNvAO5q0K4MhuQqcJG393IwHORJSPE8-G1ZkzyZPxbw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, I know. I meant:","msgtype":"m.text"}}
    {"origin_server_ts":1654359526475,"event_id":"$czwZmtfQo0DdaM5KOvDOlBdwXWPrG4C3S3XeMIMTKPs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`(A f g) x` is `f A g x`","msgtype":"m.text","formatted_body":"(A f g) x<\/code> is f A g x<\/code>"}}
    {"origin_server_ts":1654359539628,"event_id":"$MqE9Wp0imnhkU94VbSJC_XWcGASmurxZpX6OLz2GD8Q","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yes, my message says that","msgtype":"m.text","formatted_body":"yes, my message says that"}}
    {"origin_server_ts":1654359558261,"event_id":"$IJ9bYQ3kjBtqmOnZh4nxELRiX4tqcK0pJvvKUN4JPyc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Indeed you did. I misread.","msgtype":"m.text"}}
    {"origin_server_ts":1654359600076,"event_id":"$aUUtunCS87_mXCL1h_5M9y_9Egm3Akqm3yPGrDJPdI0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and it's equivalent to `(f A g) x`, making `(A f g)` completely useless syntax (and less readable than its `(f A g)` counterpart)","msgtype":"m.text","formatted_body":"and it's equivalent to (f A g) x<\/code>, making (A f g)<\/code> completely useless syntax (and less readable than its (f A g)<\/code> counterpart)"}}
    {"origin_server_ts":1654359824521,"event_id":"$yZUgIjpE8OQrvB4zOrjLVWS5kgqwIDmOEjDuF4CNjao","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"True, but it's consistent.","msgtype":"m.text"}}
    {"origin_server_ts":1654359859422,"event_id":"$_Etv7rjgKKoounoiN6wPNBJiCZSSQ_4BYpo82nDvokA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"well `(A f g)` meaning `A f ⍺g⍵` is also consistent, but more useful while at it","msgtype":"m.text","formatted_body":"well (A f g)<\/code> meaning A f ⍺g⍵<\/code> is also consistent, but more useful while at it"}}
    {"origin_server_ts":1654359896364,"event_id":"$Dm8B7NY4gHMjbRfYcC5FbYu2WG25tJD4ebnk4DrrfVI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I mean, you're not wrong :-)","msgtype":"m.text"}}
    {"origin_server_ts":1654360056522,"event_id":"$2PSC1nZ2ge1fZuPbNqNjXtWeOpaHMyr0oOuECbTPqrk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, I fixed the annoying bug with left bindings in trains","msgtype":"m.text"}}
    {"origin_server_ts":1654360064999,"event_id":"$nwxh3-FB2qihDY9e423yqM8wrKkyRBhSL6egnubP5jQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Uploading to the website now","msgtype":"m.text"}}
    {"origin_server_ts":1654360118201,"event_id":"$66wiRjORtk5yuPEYRluSSArH3AVCJshEa04QL5FN6l8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, works.","msgtype":"m.text"}}
    {"origin_server_ts":1654360123702,"event_id":"$5HJeDtXFnr4UPhO_ygBoMG8tvAKg2UhCaolSWLd7qRk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#((2-)%C3%B7)%2010","msgtype":"m.text"}}
    {"origin_server_ts":1654428853316,"event_id":"$A0h4_YxJJ5f5ThQsGGBMaj7sVu2lcPMys407k-yGfSg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So I have been thinking a bit about this, and here's how the parsing works:","msgtype":"m.text"}}
    {"origin_server_ts":1654428866742,"event_id":"$9RJV3y-BbKIkkK_tPr7jQ2gk0IgI0KY7tj2ZAfx-o1c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Assume the following expression: `1+2-`","msgtype":"m.text","formatted_body":"Assume the following expression: 1+2-<\/code>"}}
    {"origin_server_ts":1654428918447,"event_id":"$PZgJ7iISGpoSUiGXkHBwGfBnBVkk6NKVbyxCcaB3yxk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The reason this does not work at the moment is because the first thing that happens is that the parser sees the number `1`. It's a value, so it's moved into a variable holding the left arguments.","msgtype":"m.text","formatted_body":"The reason this does not work at the moment is because the first thing that happens is that the parser sees the number 1<\/code>. It's a value, so it's moved into a variable holding the left arguments."}}
    {"origin_server_ts":1654428944308,"event_id":"$AoZqQDiML0e23Zs5oD0MPCgIMhCmFTpsBtLnO4NocXQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Next it finds a `+` which is a function, so the parser recurses and parses everything to the right of the `+`","msgtype":"m.text","formatted_body":"Next it finds a +<\/code> which is a function, so the parser recurses and parses everything to the right of the +<\/code>"}}
    {"origin_server_ts":1654428963713,"event_id":"$yJL_psh4DmcH8nqxg8_wkSlY34ButGnP3m7YO_NMJ_Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"In the inner function is now finds the `2`, so it goes onto the left arguments list.","msgtype":"m.text","formatted_body":"In the inner function is now finds the 2<\/code>, so it goes onto the left arguments list."}}
    {"origin_server_ts":1654429028670,"event_id":"$ZiowK3eTHnSayiX9QpXuL0UtiVKAxcy2wQ8jv4FXSSo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It then finds the `-` which is a function so it recurses again, however this time there is no more input so it decides that this is a partial application and returns the monadic function that is represented by `2-`.","msgtype":"m.text","formatted_body":"It then finds the -<\/code> which is a function so it recurses again, however this time there is no more input so it decides that this is a partial application and returns the monadic function that is represented by 2-<\/code>."}}
    {"origin_server_ts":1654429224928,"event_id":"$UnUtAXlBLIthVDY-W4a4jQuVp3F2R1qzy7NX4ho6Kww","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The outer function receives this, and notices that it has the `+` followed by another function, thus this must be a 2-chain: `((+)(2-))`","msgtype":"m.text","formatted_body":"The outer function receives this, and notices that it has the +<\/code> followed by another function, thus this must be a 2-chain: ((+)(2-))<\/code>"}}
    {"origin_server_ts":1654429277721,"event_id":"$HLEc3xX0Gd7n2l9HyqPN3Zd58Lfn06Cdmf8bdnFhA8k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Finally, we're back at the beginning and the `1` is combined with the function above, resulting in a left bound function.","msgtype":"m.text","formatted_body":"Finally, we're back at the beginning and the 1<\/code> is combined with the function above, resulting in a left bound function."}}
    {"origin_server_ts":1654429320858,"event_id":"$ZPAiZEqJNnpV2tkQBSja0dCB3Cv4-SVqtf4wHPyFFZ4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So when that is called, the `2-` will end up being called with a left argument, which gives you an error.","msgtype":"m.text","formatted_body":"So when that is called, the 2-<\/code> will end up being called with a left argument, which gives you an error."}}
    {"origin_server_ts":1654429343471,"event_id":"$csaRbYSYkL5yR7JGiyHXNvN9OSGYtAxi6nrBfr_C_go","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it's effectively that any situation of `(\u2026 array \u2026)` in a train is parsed as `(\u2026 (array (\u2026))`, so `1+2-` → `(1(+(2-)))`","msgtype":"m.text","formatted_body":"it's effectively that any situation of (\u2026 array \u2026)<\/code> in a train is parsed as (\u2026 (array (\u2026))<\/code>, so 1+2-<\/code> → (1(+(2-)))<\/code>"}}
    {"origin_server_ts":1654429370224,"event_id":"$QWRE_TfccaM4_Hb-Lmo52tYS9Hg7dgdfrDy-J6D0pvg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, in a nutshell.","msgtype":"m.text"}}
    {"origin_server_ts":1654429439300,"event_id":"$vNwoazxsgvQekirNQvxgQERzVHUNFTW1t8e_s8lVsG8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now, there is a way around this. I can just make the parser aware of this, and basically check for the presence of a left-bound function in a train and return something else.","msgtype":"m.text"}}
    {"origin_server_ts":1654429499262,"event_id":"$-hLA0P3Gxf1BfJK39NMETR7BX5B_2wfvccCuYlPLC2A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, up until now there are essentially no special-casing. The only real special-case that exists is the thing that creates a 3-chain out of a 2-chain.","msgtype":"m.text"}}
    {"origin_server_ts":1654429539280,"event_id":"$aFmh8CLMWk3Mphs15ui1KlzHrul6WkAUWF9I8Gep8K4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In all other cases a function is always a function and always treated the same regardless of whether it's a train, a bare function, a function with operator, etc.","msgtype":"m.text"}}
    {"origin_server_ts":1654452341689,"event_id":"$CAJm42XGgmNxTArmsUpeSgV7-8kVomgaepYg4qTyZcc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Fixed a bug that prevented multiple left-bound functions to be used at the same time. Also fixed order of evaluation of the left-argument. https://github.com/lokedhs/array/commit/2ce99ec5fd9b98cdbee0605646776a327daa85b8","msgtype":"m.text"}}
    {"origin_server_ts":1654583689311,"event_id":"$mvLlKmdflEM1aZJQ9hmC8RmlWtMTjYxHkbuAyxzmgHU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: I've implemented support for chains such as `(1+2+) 3`.","msgtype":"m.text","formatted_body":"dzaima<\/a>: I've implemented support for chains such as (1+2+) 3<\/code>."}}
    {"origin_server_ts":1654583711526,"event_id":"$psQNdQkbK71lDXRD9Ikv3PcuRl0uR74kHNEbNWndyhk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This just made sense, since parsing of such expressions was broken and nonsensical anwyay.","msgtype":"m.text"}}
    {"origin_server_ts":1654583715606,"event_id":"$m7FKmgCzneq2llIbNuVStIgkS1jn6m61YtzFo5DS3r8","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1654583720584,"event_id":"$G_28quaC-lwieCvji6E8A2cYRtgArw2WsA4dx8NOv1I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$m7FKmgCzneq2llIbNuVStIgkS1jn6m61YtzFo5DS3r8","type":"m.room.redaction","content":{"redacts":"$m7FKmgCzneq2llIbNuVStIgkS1jn6m61YtzFo5DS3r8"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
    {"origin_server_ts":1654583720584,"event_id":"$G_28quaC-lwieCvji6E8A2cYRtgArw2WsA4dx8NOv1I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$m7FKmgCzneq2llIbNuVStIgkS1jn6m61YtzFo5DS3r8","type":"m.room.redaction","content":{"redacts":"$m7FKmgCzneq2llIbNuVStIgkS1jn6m61YtzFo5DS3r8"}}
    {"origin_server_ts":1654583744238,"event_id":"$k6oHzvP_xxB__8RDOELXaoidODxDVxIhzNMZgG54Jas","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's implemented here: https://github.com/lokedhs/array/commit/aad678c9fb0d4d36fccb5e43bccba5f08ed6b3ff","msgtype":"m.text"}}
    {"origin_server_ts":1654583757881,"event_id":"$saVEIk83s2tyN1TQy0mI8CzcbG91qaaQdRd3Jnls9W8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The web page hasn't been updated yet. I'll do that tonight.","msgtype":"m.text"}}
    {"origin_server_ts":1654691161056,"event_id":"$oSrhqXQGdsmIslTYRnAH0hurBLixws2wp1mckHPKTcA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It now works on the website: https://kapdemo.dhsdevelopments.com/clientweb2/#(1%2B2%2B3%2B100%2B)%2010","msgtype":"m.text"}}
    {"origin_server_ts":1654691413683,"event_id":"$Xs1ywFOnNMtkNcF2rMtyL4vE2H94T4oqO1bps-lB5fE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Except there are bugs... Need to investigate. This one fails: https://kapdemo.dhsdevelopments.com/clientweb2/#100%20(%2B%E2%88%98(9-))%205","msgtype":"m.text"}}
    {"origin_server_ts":1654691495272,"event_id":"$1ZAeJOKefMGjd1Z5EtvNpaixhMegC7WFBZGqCC-YLUo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I still think `(A f g)` → `(A (f g))` is horrible","msgtype":"m.text","formatted_body":"I still think (A f g)<\/code> → (A (f g))<\/code> is horrible"}}
    {"origin_server_ts":1654691916336,"event_id":"$r_GT9UbYTJmwZF50_eM3xfp8jZjgo-6rTChFrcG8an0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(here's a very funky idea - any array carriage being present in a train would convert it from a forky train to a k-train, i.e. `(A f g h B i j)⍵` → `A f g h B i j ⍵`; pretty inconsistent & not very nice, but I'm pretty sure I'd prefer it over `(A f g)`→`(A (f g))`)","msgtype":"m.text","formatted_body":"(here's a very funky idea - any array carriage being present in a train would convert it from a forky train to a k-train, i.e. (A f g h B i j)⍵<\/code> → A f g h B i j ⍵<\/code>; pretty inconsistent & not very nice, but I'm pretty sure I'd prefer it over (A f g)<\/code>→(A (f g))<\/code>)"}}
    {"origin_server_ts":1654692665375,"event_id":"$fUi8eihtPKEFXSBMZpfPvUcdBna5Dxf1z4sLtchRz9g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hmm","msgtype":"m.text"}}
    {"origin_server_ts":1654692711714,"event_id":"$77-DSe43oGwqcDOTVAK8j4ROtDFVdzVN68GPh3oQUtM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Let me think about that.","msgtype":"m.text"}}
    {"origin_server_ts":1654692947337,"event_id":"$jxZ5vYx6cy20L8m-L5ZGZALSQxjrO_zjZwI2PU4f9Tw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(that was not really an actual suggestion; it'd mean there'd be value in doing something like `(0⊢f g h j k)` to force a chain of monadic application, which is not a nice situation to have; my suggestion would be to implement proper `A g h` trains :) (or go all k-trains & no forks, but that comes at the cost of a less expressive tacit system))","msgtype":"m.text","formatted_body":"(that was not really an actual suggestion; it'd mean there'd be value in doing something like (0⊢f g h j k)<\/code> to force a chain of monadic application, which is not a nice situation to have; my suggestion would be to implement proper A g h<\/code> trains :) (or go all k-trains & no forks, but that comes at the cost of a less expressive tacit system))"}}
    {"origin_server_ts":1654692967539,"event_id":"$0wBYafVz6g0emzj1OU8Xk8ST20m89U61cE5JrX1zNgs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(that was not really an actual suggestion; it'd mean there'd be value in doing something like `(0⊢f g h j k)` to force a chain of monadic application, which is not a nice situation to have; my actual suggestion would be to implement proper `A g h` trains :) (or go all k-trains & no forks, but that comes at the cost of a less expressive tacit system))","msgtype":"m.text","formatted_body":"(that was not really an actual suggestion; it'd mean there'd be value in doing something like (0⊢f g h j k)<\/code> to force a chain of monadic application, which is not a nice situation to have; my actual suggestion would be to implement proper A g h<\/code> trains :) (or go all k-trains & no forks, but that comes at the cost of a less expressive tacit system))"},"m.relates_to":{"event_id":"$jxZ5vYx6cy20L8m-L5ZGZALSQxjrO_zjZwI2PU4f9Tw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (that was not really an actual suggestion; it'd mean there'd be value in doing something like `(0⊢f g h j k)` to force a chain of monadic application, which is not a nice situation to have; my actual suggestion would be to implement proper `A g h` trains :) (or go all k-trains & no forks, but that comes at the cost of a less expressive tacit system))","msgtype":"m.text","formatted_body":"* (that was not really an actual suggestion; it'd mean there'd be value in doing something like (0⊢f g h j k)<\/code> to force a chain of monadic application, which is not a nice situation to have; my actual suggestion would be to implement proper A g h<\/code> trains :) (or go all k-trains & no forks, but that comes at the cost of a less expressive tacit system))"}}
    {"origin_server_ts":1654693106136,"event_id":"$-_mlF4_8ECqIjKheCpReVCXL7TZobyFYCTmWe3Zv5pc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(then there's the option of leaving it up for choosing later, by disallowing any form of array-containing train other than alternating functions & arrays)","msgtype":"m.text","formatted_body":"(then there's the option of leaving it up for choosing later, by disallowing any form of array-containing train other than alternating functions & arrays)"}}
    {"origin_server_ts":1654705623246,"event_id":"$o61J79K1nNKyhx5H2jQPcncPbvN1IHnxRu4kxLNuXVY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, I'm not sure I know the best thing to do righ tnow.","msgtype":"m.text"}}
    {"origin_server_ts":1654705626229,"event_id":"$CdQPtXGeU5b5vmeBYEJ5hYynOha6Jr0ZpsRQdxxEh9A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Yeah, I'm not sure I know the best thing to do right now.","msgtype":"m.text"},"m.relates_to":{"event_id":"$o61J79K1nNKyhx5H2jQPcncPbvN1IHnxRu4kxLNuXVY","rel_type":"m.replace"},"body":" * Yeah, I'm not sure I know the best thing to do right now.","msgtype":"m.text"}}
    {"origin_server_ts":1654705636325,"event_id":"$p1Cx66V2bOiJST6IjnM9g4nKu1UnMAYqjCaOEhqxHmY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think I'll leave it like this for now.","msgtype":"m.text"}}
    {"origin_server_ts":1654705650368,"event_id":"$FOADAxZ22e0nfrotq-T97RoOZfl-9E1sBd13_jL9npM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If I think of something good, I will change it.","msgtype":"m.text"}}
    {"origin_server_ts":1655215348305,"event_id":"$22If_2IZFES0nFam2Rl70FmgBG8cYoy3rv1PZSCjZMk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I finally fixed that bug. I had a few false starts, and still the fix is ugly. I don't know how useful a diff will be to someone who doesn't know the code, but at least it should give an idea.","msgtype":"m.text"}}
    {"origin_server_ts":1655215348836,"event_id":"$gHSUEpjosqys9Gn3fjYGZh1eWDz6Y_4eDgz6odI7iNw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://github.com/lokedhs/array/commit/d8462cbe3d344dc009b57611b8d4a3b228b73df5","msgtype":"m.text"}}
    {"origin_server_ts":1655215442705,"event_id":"$gTKmOeQI7DD4xlxQ3bRhPHhRF1IzAYhST_F9p3PHbH4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"At least this works now: https://kapdemo.dhsdevelopments.com/clientweb2/#1%20(%2B%E2%88%98(3%C3%97))%206","msgtype":"m.text"}}
    {"origin_server_ts":1655215503898,"event_id":"$40keBOpDLz6mnBRTWMOzGIEAetv04IMJzVNq3WOGW-Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The limits of a one-token lookahead parser is starting to strain a bit.","msgtype":"m.text"}}
    {"origin_server_ts":1655313724876,"event_id":"$Wp3e1ljzz_X44W-iQ-7EEiWoKbfCaLApEOyPGIgz2l0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I want to write another blog post. Is there a topic that anyone would be interested in reading about? ","msgtype":"m.text"}}
    {"origin_server_ts":1655313785013,"event_id":"$y7DAp2e_KARXJj2z6wju0KFebI7uJwAJNeiOMwU3n3Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I was going to write about the parser, but it's so low level and utterly useless for everybody except myself so I shouldn't really do it, especially since it keeps changing. ","msgtype":"m.text"}}
    {"state_key":"@_discord_562517174997221378:t2bot.io","origin_server_ts":1655958049435,"event_id":"$0Zz7ck87VubvP2b9SI6P3-F2TRc2ktONC8sxGglxku4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.member","content":{"displayname":"Phantomics#2204","membership":"invite"}}
    {"state_key":"@phantomics:matrix.org","origin_server_ts":1655958106178,"event_id":"$abhvjJ3Oto-kczyJT5UztVHxnOR_GHi4ihkPDnQQ2jA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.member","content":{"displayname":"phantomics","membership":"invite"}}
    {"state_key":"@ovs:matrix.org","origin_server_ts":1656325705012,"event_id":"$IwU9O_SBRN7-4RAAo9U0Yyl8bJCiOZLtNaJbGmfOtok","sender":"@ovs:matrix.org","user_id":"@ovs:matrix.org","type":"m.room.member","content":{"displayname":"ovs","membership":"join"}}
    {"origin_server_ts":1656429424375,"event_id":"$K9qMB3_Eu8ZRwkhML-f_dHv5R7sqaARxj7s3epzvfy4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'm playing around with implementing function inverses. I think I can make it work such that something like `{1+⍵}` can be inverted.","msgtype":"m.text","formatted_body":"I'm playing around with implementing function inverses. I think I can make it work such that something like {1+⍵}<\/code> can be inverted."}}
    {"origin_server_ts":1656429458738,"event_id":"$QR-NRUWPeiUb6YjPhFrf9h0ORWynOEgo5ihuahaiqOM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"However, the syntax is cumbersome right now since the inverse is a regular operator (I call it `inverse` right now since I haven't decided on a symbol).","msgtype":"m.text","formatted_body":"However, the syntax is cumbersome right now since the inverse is a regular operator (I call it inverse<\/code> right now since I haven't decided on a symbol)."}}
    {"origin_server_ts":1656429467614,"event_id":"$7cl0oXCJeBU_TjM6GsQaw_3CYd3nzQUFNqkq1O9Afho","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So, here's the issue:","msgtype":"m.text"}}
    {"origin_server_ts":1656429539654,"event_id":"$797JkzYevhggqoL9XzdhBpcGBSj65bKA-0-vA63IXwA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Given the function `(1+)`, which is a partial application, this works: `a ⇐ 1+ ◊ a inverse 100`, and gives 99.","msgtype":"m.text","formatted_body":"Given the function (1+)<\/code>, which is a partial application, this works: a ⇐ 1+ ◊ a inverse 100<\/code>, and gives 99."}}
    {"origin_server_ts":1656429592597,"event_id":"$JC1VEUAOgJNUx2ZEu1ejDMGGZl8-vzDzGhWuZ0tweYU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"However, inline, this has to be written: `(1+)inverse 100`. If I write it without parens, it will be interpreted as `1 (+inverse) 100` which is an error since it attempts to call an inverse with two arguments.","msgtype":"m.text","formatted_body":"However, inline, this has to be written: (1+)inverse 100<\/code>. If I write it without parens, it will be interpreted as 1 (+inverse) 100<\/code> which is an error since it attempts to call an inverse with two arguments."}}
    {"origin_server_ts":1656429636918,"event_id":"$UvpOwKwIgmjmZPcti89YRKsQ135XRPu4msjVel2eOtc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm not sure that's a real problem though, since it's not clear when one would want to write that?","msgtype":"m.text"}}
    {"origin_server_ts":1656429692360,"event_id":"$6fPQlLhW1PH4SZAxYU9FYwq3_lq5uAgWIsQefes3tS4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now that I think about it, it's actually possible to make it work, by simply not making that call error out, and instead perform the same operation as in the partial application case. It'll make the implementation more complicated though.","msgtype":"m.text"}}
    {"origin_server_ts":1656429704024,"event_id":"$y0W9GU6O4683Wh76Rf43QsZ5MUK-7VmgGmjli51E670","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`1 (+inverse) 100` is what happens in APL & BQN (& presumably J) too","msgtype":"m.text","formatted_body":"1 (+inverse) 100<\/code> is what happens in APL & BQN (& presumably J) too"}}
    {"origin_server_ts":1656429724230,"event_id":"$yj6BprkGvHgluN1fuTIW5iodq8E55ly0R-11CrfGH_8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Is that valid?","msgtype":"m.text"}}
    {"origin_server_ts":1656429736463,"event_id":"$kmE5QEx-MQLISr3UiJKAHq9Fycvw1a-LaczHWytfbyc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The only time I want to use function inverses myself is for the \"under\" operation, so I wouldn't notice this issue.","msgtype":"m.text"}}
    {"origin_server_ts":1656429747106,"event_id":"$_oH1aeFUE8QLVaVdjtcUkZ8aagKVQ_EuCsqeTf_XQ2s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`a (f inverse) b` is defined to be `(a∘f) inverse b`","msgtype":"m.text","formatted_body":"a (f inverse) b<\/code> is defined to be (a∘f) inverse b<\/code>"}}
    {"origin_server_ts":1656429774310,"event_id":"$oneXy0WCNaDQPKAHTLONh0PAkuuPJ3auJxYsBQ7g8IM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, then I have to try to do it that way.","msgtype":"m.text"}}
    {"origin_server_ts":1656429837582,"event_id":"$yQQD6CP5RLXUNc1PbhzP4kJg7Bh9QDkPIvjHvXzsXu4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So BQN uses `\u207c` for inverse, no?","msgtype":"m.text","formatted_body":"So BQN uses \u207c<\/code> for inverse, no?"}}
    {"origin_server_ts":1656429843332,"event_id":"$gQKURRt83pETjMUG0htQIJJsWE842MAXuEd91heZtbA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah","msgtype":"m.text","formatted_body":"yeah"}}
    {"origin_server_ts":1656429867785,"event_id":"$kbqCKLyiX0ybEEe7WT7ObZ2zRnerPX2GM2WzQLGVprI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Not a bad choice.","msgtype":"m.text"}}
    {"origin_server_ts":1656429870052,"event_id":"$vGcKuG5dRvNp0JoeqiGXWQswA3-hJ-AZ64AouP-YS4E","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n   (10⊸+)\u207c 1\n¯9\n   10 (+\u207c) 1\n¯9\n```","msgtype":"m.text","formatted_body":"
       (10⊸+)\u207c 1\n¯9\n   10 (+\u207c) 1\n¯9<\/code><\/pre>"}}
    {"origin_server_ts":1656430093816,"event_id":"$2xitRb9j9YyBQzK73-hEzbzUqOjsX7jYQRbDo-Ck3GM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I guess it's a design decision that `√\u207c¯10` gives 100?","msgtype":"m.text","formatted_body":"I guess it's a design decision that √\u207c¯10<\/code> gives 100?"}}
    {"origin_server_ts":1656430524190,"event_id":"$r_uoQaH6EoV9eq0cWwwMgJo_JoM6hLS1azIfqd7uDOg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: Yeah, I think this can be done.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Yeah, I think this can be done."}}
    {"origin_server_ts":1656430534153,"event_id":"$BpSysjPN5HwHx9TQN8uwIp5viZWq-7a-iqI_MskoHL4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It needs to rework though.","msgtype":"m.text"}}
    {"origin_server_ts":1656430585758,"event_id":"$Rzb4iVcLgT3X6A8NlTB9bKxOAzqnvh8LXQpl6743mh8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"It needs to be reworked though.","msgtype":"m.text"},"m.relates_to":{"event_id":"$BpSysjPN5HwHx9TQN8uwIp5viZWq-7a-iqI_MskoHL4","rel_type":"m.replace"},"body":" * It needs to be reworked though.","msgtype":"m.text"}}
    {"origin_server_ts":1656430633726,"event_id":"$r9FZjPpQ_sO2l_Lh_z1ibWijhvMzuaxRQf_iUY4VYzg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I feel I'm taking on a bit too much though, since just implementing the framework isn't enough. I need to implement the actual inverses of all these functions as well, and test them.","msgtype":"m.text"}}
    {"origin_server_ts":1656430681293,"event_id":"$ktxl17n593ywN7Ki8_TOdVT9a0A0jsI2lUtAc1rZbis","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"All of this just to be able to take advantage of the \"under\" operator. And I started thinking about that because of the discussion in the previous arraycast.","msgtype":"m.text"}}
    {"origin_server_ts":1656430718451,"event_id":"$2LchoqRrNmQnBQ6O3Ln_kZTGPy3B8bGaer3810y6-cY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah, inverses aren't a trivial thing to implement","msgtype":"m.text","formatted_body":"yeah, inverses aren't a trivial thing to implement"}}
    {"origin_server_ts":1656430722180,"event_id":"$NYzJjmjMYOnYXGgQX3ZbiF3BNZfhGZ_rxnvDcWtgVW4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Like performing an operation on the minor axis by running a major axis function \"under\" transformation.","msgtype":"m.text"}}
    {"origin_server_ts":1656430743314,"event_id":"$N9m3XUQAQQNNwU3POHm1AnIZ-BX0tSqON6dc6uWN8b0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The list of inverses you need for inverse to be useful is surprisingly short though.","msgtype":"m.text","formatted_body":"The list of inverses you need for inverse to be useful is surprisingly short though."}}
    {"origin_server_ts":1656430780697,"event_id":"$ozkHLFaJ9bpyvl_iliGzSibd246p4NfLUe5_8nqmwGo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Looking at the BQN docs, it appears there are about 20 of them?","msgtype":"m.text"}}
    {"origin_server_ts":1656430790779,"event_id":"$z-mFXu8xkscHJjwjWLtEod-P2wTyambxXl1SnwQcKGw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"19 actually?","msgtype":"m.text"}}
    {"origin_server_ts":1656430807915,"event_id":"$CVzTGS0exjVmRfE9Ej9idr5RiqMMCTzQTlGl4l88188","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh wait... There are more.","msgtype":"m.text"}}
    {"origin_server_ts":1656430837463,"event_id":"$E16rEBYaxZLWUfmHpHTbgssrlI3fD39o5JEcV-Sufj0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Depends on how you count it, but something like that. But most inverses are pretty easy to write in terms of existing functions.","msgtype":"m.text","formatted_body":"Depends on how you count it, but something like that. But most inverses are pretty easy to write in terms of existing functions."}}
    {"origin_server_ts":1656430869309,"event_id":"$p0OTXtiCkNlV9m6AKv1RdHRz01Vho5cfGKKWkl_OYrE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"True. I'm trying to build the framework that supports this in a way that simple inverses is just one line of code in the function implementation.","msgtype":"m.text"}}
    {"origin_server_ts":1656430886161,"event_id":"$zoHYpQRFBTUUVozjn4ZyZzX4KspyIqZC0RpD-1EQcuA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And that's one line of kotlin code :-)","msgtype":"m.text"}}
    {"origin_server_ts":1656430917188,"event_id":"$_bStH_uhS4GMe3CjQ2QUIaYmGgu1P-f2yOxX2j9xUvA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima/APLs [monadic inverses](https://github.com/dzaima/APL/search?q=%22Value+callInv%22), and dyadic inverses [p1](https://github.com/dzaima/APL/search?q=%22Value+callInvW%22), [p2](https://github.com/dzaima/APL/search?q=%22Value+callInvA%22)","msgtype":"m.text","formatted_body":"dzaima/APLs monadic inverses<\/a>, and dyadic inverses p1<\/a>, p2<\/a>"}}
    {"origin_server_ts":1656430960325,"event_id":"$71RpQZb9W_K7lw2tIw9nAMr--eXA92sHPcTw7YIN3QI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"And [inverses](https://github.com/mlochbaum/BQN/blob/5df53ddd256ce99123a874a3fece3408638d9400/src/r1.bqn#L828-L884) in the runtime. There are a few `*Inv` functions implemented in other parts of the file.","msgtype":"m.text","formatted_body":"And inverses<\/a> in the runtime. There are a few *Inv<\/code> functions implemented in other parts of the file."}}
    {"origin_server_ts":1656431077063,"event_id":"$7YrVW1fzi6p-Pmmk_680Gzfxz3UhoCrypaWYSdwzhuw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Stuff like monadic `⊔\u207c` is basically never going to be used though. The most important functions mostly have the simplest inverses.","msgtype":"m.text","formatted_body":"Stuff like monadic ⊔\u207c<\/code> is basically never going to be used though. The most important functions mostly have the simplest inverses."}}
    {"origin_server_ts":1656431325777,"event_id":"$U4hurzKTYIhnb694_fC0VfqcpAqMLxGza1lMYjL_OXQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks this was useful. ","msgtype":"m.text"}}
    {"origin_server_ts":1656494097698,"event_id":"$4WKqhbFjDEvCHjgcQ6Yw0cV9vX79cbH7LjPp2LhPYts","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: how does this work in Dyalog? `(+⍨⍣¯1) 5`","msgtype":"m.text","formatted_body":"Marshall<\/a>: how does this work in Dyalog? (+⍨⍣¯1) 5<\/code>"}}
    {"origin_server_ts":1656494129608,"event_id":"$3ABKE-vj8LU0aMLgY2AINBC3N9uCpVUnV1lmltD5yAo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Is there dedicated code in Dyalog to handle the monadic `⍨` case?","msgtype":"m.text","formatted_body":"Is there dedicated code in Dyalog to handle the monadic ⍨<\/code> case?"}}
    {"origin_server_ts":1656494142704,"event_id":"$EAdkF5ijQ6pcz7IkyhiSiJrC0uK-vkh-B3qZyt-cuPg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Or is there some trick to make it work in the general case that I can't think of?","msgtype":"m.text"}}
    {"origin_server_ts":1656494150583,"event_id":"$QpPTx5ozsrqtfFN_N5BW4EorteHh2ILtFEvYfps6JY0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: how did you handle this?","msgtype":"m.text","formatted_body":"dzaima<\/a>: how did you handle this?"}}
    {"origin_server_ts":1656502347394,"event_id":"$kDOxUSc1ZuxcUaLgV-R8MIgzpXEELi86RZyVa5BreQc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$3ABKE-vj8LU0aMLgY2AINBC3N9uCpVUnV1lmltD5yAo"}},"format":"org.matrix.custom.html","body":"self-swap-inverse is kind of the 4th generic-ish inverse (so, `(f⍣¯1)A`, `(f∘B⍣¯1)A`, `(B∘f⍣¯1)A`, and now `(f⍨⍣¯1)A`) but there are so few cases of it you could just list them all out in the monadic inverse of `⍨` itself, instead of bothering with the generic version","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>self-swap-inverse is kind of the 4th generic-ish inverse (so, (f⍣¯1)A<\/code>, (f∘B⍣¯1)A<\/code>, (B∘f⍣¯1)A<\/code>, and now (f⍨⍣¯1)A<\/code>) but there are so few cases of it you could just list them all out in the monadic inverse of ⍨<\/code> itself, instead of bothering with the generic version"}}
    {"origin_server_ts":1656502375768,"event_id":"$0Gj5byD3ZxebBJzZEKWCzhHS4gDhafQJwt3O7ABUTvk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"as to how I do it - I don't. dzaima/APL has no `(f⍨⍣¯1) A` that doesn't error :)","msgtype":"m.text","formatted_body":"as to how I do it - I don't. dzaima/APL has no (f⍨⍣¯1) A<\/code> that doesn't error :)"}}
    {"origin_server_ts":1656503228624,"event_id":"$h2wMJvI5bwW7o4Iu6hc5_QwStjeOc8YvzM9tJ4h7JDQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, there has to be another lookup table for `f⍨`.","msgtype":"m.text","formatted_body":"Yeah, there has to be another lookup table for f⍨<\/code>."}}
    {"origin_server_ts":1656506532167,"event_id":"$XjfGONkOxHcd8JA6mSdnVB9FYjlDCihHSWg37EJmC14","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks.","msgtype":"m.text"}}
    {"origin_server_ts":1656506553295,"event_id":"$mFitF9dtVWtv7iuiSzFz7-JnozDsBzjtO2ixXTBoGPA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It seems like such an edge case.","msgtype":"m.text"}}
    {"origin_server_ts":1656506711622,"event_id":"$Nh0T4Dke9cAmqmxEhAS9ydKUPYqKNBlWL5D1b4Ggv0o","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`+.×⍨⍣¯1` :)","msgtype":"m.text","formatted_body":"+.×⍨⍣¯1<\/code> :)"}}
    {"origin_server_ts":1656506777393,"event_id":"$fL4dofDiNEPuyEoEzJ0JlH_JobuFFDZzePrd9TpLB7k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ok woah. That's pretty cool.","msgtype":"m.text"}}
    {"origin_server_ts":1656506805554,"event_id":"$losVgRzSlQbGAkuQ2ZgM5qbBYxgI-kv_K5STNH_A5eA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I mean, it's not that surprising it works, as long as replicate inverse is implemented, ut still.","msgtype":"m.text"}}
    {"origin_server_ts":1656506808043,"event_id":"$DLpb8ihfdhDHLf-B23XDv7288pTFZcR8g_UzgCoRogM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I mean, it's not that surprising it works, as long as replicate inverse is implemented, but still.","msgtype":"m.text"},"m.relates_to":{"event_id":"$losVgRzSlQbGAkuQ2ZgM5qbBYxgI-kv_K5STNH_A5eA","rel_type":"m.replace"},"body":" * I mean, it's not that surprising it works, as long as replicate inverse is implemented, but still.","msgtype":"m.text"}}
    {"origin_server_ts":1656506889378,"event_id":"$POfOVnWUL_eH1msxJYs1AZ_VDik9dD64t2JDinjhrnY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it's reduce here; and reduce inverse doesn't even work","msgtype":"m.text","formatted_body":"it's reduce here; and reduce inverse doesn't even work"}}
    {"origin_server_ts":1656506925409,"event_id":"$C3nJiVIXjQOH5GR4HLUq4F9wKwwvyeaNfL4DVozJFzk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Reduce inverse on a size-1 dimension should be reversible.","msgtype":"m.text"}}
    {"origin_server_ts":1656506971837,"event_id":"$xnHVoIx6Ix7aLaTAljaBU6Y26ZYYgmxnTnTuRU8aD8U","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"well there are infinitely many possible results","msgtype":"m.text","formatted_body":"well there are infinitely many possible results"}}
    {"origin_server_ts":1656507147342,"event_id":"$gjauFvQS0iBn0-_Fiq_QFeSGPyJWBKlmvFmfSoG_V9g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Wait what? I mean, isn't there just one way to invert +/2","msgtype":"m.text"}}
    {"origin_server_ts":1656507149618,"event_id":"$TH-1OlE0YOiyJy0D0k6389FifP2L9H4lMobf8dPVkok","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Wait what? I mean, isn't there just one way to invert `+/2`","msgtype":"m.text","formatted_body":"Wait what? I mean, isn't there just one way to invert +/2<\/code>"},"m.relates_to":{"event_id":"$gjauFvQS0iBn0-_Fiq_QFeSGPyJWBKlmvFmfSoG_V9g","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Wait what? I mean, isn't there just one way to invert `+/2`","msgtype":"m.text","formatted_body":" * Wait what? I mean, isn't there just one way to invert +/2<\/code>"}}
    {"origin_server_ts":1656507152703,"event_id":"$1d9aXe3k1OaD82X7_HMFW6KfgLd2GW75PD403Uq_W_M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Wait what? I mean, isn't there just one way to invert `+/,2`","msgtype":"m.text","formatted_body":"Wait what? I mean, isn't there just one way to invert +/,2<\/code>"},"m.relates_to":{"event_id":"$gjauFvQS0iBn0-_Fiq_QFeSGPyJWBKlmvFmfSoG_V9g","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Wait what? I mean, isn't there just one way to invert `+/,2`","msgtype":"m.text","formatted_body":" * Wait what? I mean, isn't there just one way to invert +/,2<\/code>"}}
    {"origin_server_ts":1656507177205,"event_id":"$DsK0RSLy_-SfF076fjz5vWPljXl-Nbkhsb6YRbrjNsQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it could be `0 0 0 0 0 0 0 1 0 0 0 1 0 0 50 ¯50`","msgtype":"m.text","formatted_body":"it could be 0 0 0 0 0 0 0 1 0 0 0 1 0 0 50 ¯50<\/code>"}}
    {"origin_server_ts":1656507314614,"event_id":"$RmooOL3UpPZH8BlamR3e_RVZsMAnP69I5LBNf3smUcg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"matrix square root definitely isn't something you can just automatically get out of inverse logic","msgtype":"m.text","formatted_body":"matrix square root definitely isn't something you can just automatically get out of inverse logic"}}
    {"origin_server_ts":1656508135619,"event_id":"$ALkjvcE9-KyK2X1b8a6LPkNbhc8YsK8a7MHNTK9Fo3A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, I've implemented some core functionality: https://kapdemo.dhsdevelopments.com/clientweb2/#a%20%E2%87%90%20(1%2B2%2B)%20%E2%97%8A%20a%CB%9D%20100","msgtype":"m.text"}}
    {"origin_server_ts":1656508203291,"event_id":"$lzgZEiqltWs9GNFH7Cz3wlARe9IoQ86WDyvzXXs6DtE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'm supporting... Hmm... `+`, `-`, `÷`, `⍨` and 2-trains.","msgtype":"m.text","formatted_body":"I'm supporting... Hmm... +<\/code>, -<\/code>, ÷<\/code>, ⍨<\/code> and 2-trains."}}
    {"origin_server_ts":1656508221388,"event_id":"$tAvdFMDaJ1UqJ0utksyfoOOT_5BxanQ2esA_k3Gxiyg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh, and `⍟` and `⋆` as well.","msgtype":"m.text","formatted_body":"Oh, and ⍟<\/code> and ⋆<\/code> as well."}}
    {"origin_server_ts":1656508241514,"event_id":"$CmGkvSeUuYcSA3ig80xj_YgzjEOvW_2nOD6jhQBlA5E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's just the ones I've bothered to implement. It should be enough to test at least.","msgtype":"m.text"}}
    {"origin_server_ts":1656508262767,"event_id":"$C9_SX5TB4PGmuhkFPrBoHteQkcFDPoeShJV_B_68SZ0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The keyword `inverse` or the symbol `˝` works.","msgtype":"m.text","formatted_body":"The keyword inverse<\/code> or the symbol ˝<\/code> works."}}
    {"origin_server_ts":1656508280224,"event_id":"$72tBSqLO38hutVp9umwmVtCho-JR1OzrKvXCZEhaUuM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"The name `inverse` or the symbol `˝` works.","msgtype":"m.text","formatted_body":"The name inverse<\/code> or the symbol ˝<\/code> works."},"m.relates_to":{"event_id":"$C9_SX5TB4PGmuhkFPrBoHteQkcFDPoeShJV_B_68SZ0","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * The name `inverse` or the symbol `˝` works.","msgtype":"m.text","formatted_body":" * The name inverse<\/code> or the symbol ˝<\/code> works."}}
    {"origin_server_ts":1656508391517,"event_id":"$X-EbZHIJnLuclf674BdV0ZyXkpX_tVfDaP8fAeV0nJk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The implementation of each function isn't overly complicated, although it's certainly more code than both dzaima and bqn.","msgtype":"m.text"}}
    {"origin_server_ts":1656521793124,"event_id":"$qaQw7srPD6Rqe7Vrjws_7koO8pQnFtBqDl_YlM1PLxQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Should I stick with that symbol? And if I do, what key should I map it to? If not, which one should I use? ","msgtype":"m.text"}}
    {"origin_server_ts":1656571402214,"event_id":"$OInuKmXprdOvRphX3gh9uH6ZIk9MdCGErpe620fOacE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: I was looking at implementing support for inverse of dyadic 3-trains. Unless I'm missing something, it appears to not be possible to do this for the general case. Is this correct?","msgtype":"m.text","formatted_body":"dzaima<\/a>: I was looking at implementing support for inverse of dyadic 3-trains. Unless I'm missing something, it appears to not be possible to do this for the general case. Is this correct?"}}
    {"origin_server_ts":1656571531969,"event_id":"$CDU20z8Casu5frWzqh-yY8gljEFkvI2C7RGZN7E10NQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Given functions A, C and B, then you'd want to invert `x (A C B) y`.  Which is equivalent to `z = (x A y) C (x B y)`. Now, solving the inversion problem here involves computing `y`, given `A˝`, `C˝` and `B˝`.","msgtype":"m.text","formatted_body":"Given functions A, C and B, then you'd want to invert x (A C B) y<\/code>.  Which is equivalent to z = (x A y) C (x B y)<\/code>. Now, solving the inversion problem here involves computing y<\/code>, given A˝<\/code>, C˝<\/code> and B˝<\/code>."}}
    {"origin_server_ts":1656571631784,"event_id":"$8-jLz67f2gUSHv8bM2p90tKSBSqUX6DWCvloErpVJJI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"To me, this suggests that it cannot be done unless I can rely on known properties of the inverse functions, specifically associativity.","msgtype":"m.text"}}
    {"origin_server_ts":1656571649749,"event_id":"$HDConzeTFf6lM1CVE1oUvRuuVEqXSSbF7Ul-y4WVDQ4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Given functions A, C and B, then you'd want to invert `x (A C B) y`.  Which is equivalent to `z = (x A y) C (x B y)`. Now, solving the inversion problem here involves computing `y`, given `x`, `A˝`, `C˝` and `B˝`.","msgtype":"m.text","formatted_body":"Given functions A, C and B, then you'd want to invert x (A C B) y<\/code>.  Which is equivalent to z = (x A y) C (x B y)<\/code>. Now, solving the inversion problem here involves computing y<\/code>, given x<\/code>, A˝<\/code>, C˝<\/code> and B˝<\/code>."},"m.relates_to":{"event_id":"$CDU20z8Casu5frWzqh-yY8gljEFkvI2C7RGZN7E10NQ","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Given functions A, C and B, then you'd want to invert `x (A C B) y`.  Which is equivalent to `z = (x A y) C (x B y)`. Now, solving the inversion problem here involves computing `y`, given `x`, `A˝`, `C˝` and `B˝`.","msgtype":"m.text","formatted_body":" * Given functions A, C and B, then you'd want to invert x (A C B) y<\/code>.  Which is equivalent to z = (x A y) C (x B y)<\/code>. Now, solving the inversion problem here involves computing y<\/code>, given x<\/code>, A˝<\/code>, C˝<\/code> and B˝<\/code>."}}
    {"origin_server_ts":1656571663476,"event_id":"$q_lEE6NKrx6_c93qiKzeTyG3XHSeVDUsju8BKnwxbZ0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Given functions A, C and B, then you'd want to invert `x (A C B) y`.  Which is equivalent to `z = (x A y) C (x B y)`. Now, solving the inversion problem here involves computing `y`, given `x`, `z`, `A˝`, `C˝` and `B˝`.","msgtype":"m.text","formatted_body":"Given functions A, C and B, then you'd want to invert x (A C B) y<\/code>.  Which is equivalent to z = (x A y) C (x B y)<\/code>. Now, solving the inversion problem here involves computing y<\/code>, given x<\/code>, z<\/code>, A˝<\/code>, C˝<\/code> and B˝<\/code>."},"m.relates_to":{"event_id":"$CDU20z8Casu5frWzqh-yY8gljEFkvI2C7RGZN7E10NQ","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Given functions A, C and B, then you'd want to invert `x (A C B) y`.  Which is equivalent to `z = (x A y) C (x B y)`. Now, solving the inversion problem here involves computing `y`, given `x`, `z`, `A˝`, `C˝` and `B˝`.","msgtype":"m.text","formatted_body":" * Given functions A, C and B, then you'd want to invert x (A C B) y<\/code>.  Which is equivalent to z = (x A y) C (x B y)<\/code>. Now, solving the inversion problem here involves computing y<\/code>, given x<\/code>, z<\/code>, A˝<\/code>, C˝<\/code> and B˝<\/code>."}}
    {"origin_server_ts":1656571688023,"event_id":"$l1xiMRYnEbhAGpbYr55tnMev-SYUu7Kgb31MBqA3FGc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Because I need to rearrange this equation.","msgtype":"m.text"}}
    {"origin_server_ts":1656589800696,"event_id":"$HaO06XyguIZkJqpkvTwuCKal7Emd5GVcq_W0lb2nrwU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, it's not possible. BQN has special cases for when `A` or `B` is a constant function (constant-valued, or derived from `˙`).","msgtype":"m.text","formatted_body":"Yeah, it's not possible. BQN has special cases for when A<\/code> or B<\/code> is a constant function (constant-valued, or derived from ˙<\/code>)."}}
    {"origin_server_ts":1656590814705,"event_id":"$qvree-lxrs5TY1x0VWN7Rgk5GFD8kpf2LyfPBWQk-_w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I noted that Dyalog can inverse `(-+÷)`. I wonder how it does that.","msgtype":"m.text","formatted_body":"I noted that Dyalog can inverse (-+÷)<\/code>. I wonder how it does that."}}
    {"origin_server_ts":1656590840720,"event_id":"$3D4i8b3busLacsf2Yzk8AYUeZh82SR7EHu3RoRR94EM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Dyalog has a numerical solver that's separate from regular inverse logic","msgtype":"m.text","formatted_body":"Dyalog has a numerical solver that's separate from regular inverse logic"}}
    {"origin_server_ts":1656590880154,"event_id":"$fySmJMC_vMUXsvFNKNYq5PEt0wE8vQJnBXSgaAxqc9o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh I see.","msgtype":"m.text"}}
    {"origin_server_ts":1656590903233,"event_id":"$sW3sAbcZugLquGH6r5eC9Jo16GAasRft_NsVSYQvX1A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So it would fail on non-numeric functions, even if they are otherwise inversible?","msgtype":"m.text"}}
    {"origin_server_ts":1656590931935,"event_id":"$i4d-Sz9ok98AdzzA-KKTqXXz94NXUCQqPKLnQvKuQlA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the numeric solver is only used if regular inverses fail","msgtype":"m.text","formatted_body":"the numeric solver is only used if regular inverses fail"}}
    {"origin_server_ts":1656590964285,"event_id":"$1uMuBpSpMLk5AZfKcPK7dvEREsrXX1k_BT8jZ_vkrtg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"When I started analysing what I needed to do to get 3-trains inversible, I did come to the conclusion that I could do it by using a solver, so it appears I was on the same track as Dyalog. It's just that I have no intention to actually implement it. :-)","msgtype":"m.text"}}
    {"origin_server_ts":1656591016312,"event_id":"$lmOfx_xIa-I-YMdut-CKXt8Sc4A9oeKIf3mBQXQC4lE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"well, `(×-×)` & similar would still pose problems","msgtype":"m.text","formatted_body":"well, (×-×)<\/code> & similar would still pose problems"}}
    {"origin_server_ts":1656591097700,"event_id":"$gZlRNOuOLgu26YI3J1XB26QX6atwoM5YQRDvA-e8Crg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and a numerical solver won't work on non-numeric things","msgtype":"m.text","formatted_body":"and a numerical solver won't work on non-numeric things"}}
    {"origin_server_ts":1656591135600,"event_id":"$QSTnosuH_s5tTmI83vRyFBLhPBKIAjaXIicHijI0raE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I have started thinking about a flow analyser that would be able to inverse `{1+(100+⍵)÷2}`","msgtype":"m.text","formatted_body":"I have started thinking about a flow analyser that would be able to inverse {1+(100+⍵)÷2}<\/code>"}}
    {"origin_server_ts":1656591177183,"event_id":"$a1ijHIskvBOCmCBC0aY7LD1glv7MZ1QiQWfRUoW-qdo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"if I were to write a dfn inverter, I'd just make a thing that tries to convert it to tacit :)","msgtype":"m.text","formatted_body":"if I were to write a dfn inverter, I'd just make a thing that tries to convert it to tacit :)"}}
    {"origin_server_ts":1656591215758,"event_id":"$EeEHQxoBqRYIGXT1YDw9kQ6PPDolTmKDGFIx4aacODI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Sure, but not all tacit functions can be inverted, as was seen with 3-trains.","msgtype":"m.text"}}
    {"origin_server_ts":1656591250481,"event_id":"$MTnce6NmQUsZxCB8-m4HHgWd5ECJmXFvjHwxcJq06mc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And since the parsed function format in kap is rather straightforward, I can easily determine if it follows a pattern that can be inverted.","msgtype":"m.text"}}
    {"origin_server_ts":1656591273087,"event_id":"$Bgq7jzpBRX5g95aDlMTUPqrxVMBEKo4CbwaXXGCuAhY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$EeEHQxoBqRYIGXT1YDw9kQ6PPDolTmKDGFIx4aacODI"}},"format":"org.matrix.custom.html","body":"well the corresponding dfn won't be able to be inverted then either","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>well the corresponding dfn won't be able to be inverted then either"}}
    {"origin_server_ts":1656591279994,"event_id":"$Vb5V_64b2rcKqbh7kyQcsxdNOZSvDoJfW87T93vfZAM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Exactly.","msgtype":"m.text"}}
    {"origin_server_ts":1656591303687,"event_id":"$OF1T0ORxn1G9ESkgfPJGJ_GXj6FJbKrX8BcJJLTjMyg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"but in general the pattern you want to be able to invert a function is only a single use of the argument, and a sequence of invertible modifications on it","msgtype":"m.text","formatted_body":"but in general the pattern you want to be able to invert a function is only a single use of the argument, and a sequence of invertible modifications on it"}}
    {"origin_server_ts":1656591306144,"event_id":"$gdZ9Wp06mkl0DhS-O2k8l4uRgcFJAZfGGT2pyMwwe4I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Bu the opposite can be true as well, no? There are surely dfns that are invertible but not convertible to tacit form.","msgtype":"m.text"}}
    {"origin_server_ts":1656591318905,"event_id":"$ARCE3LKiMcaRL4xR7hsh_yxMBKeqEvpNzBwTtqgDDYM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, precisely.","msgtype":"m.text"}}
    {"origin_server_ts":1656591360749,"event_id":"$wzYZGNGd8NmjBGyUgUtNhUigv1AeFdVdxq9O4IpLrfM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I am fairly sure tacit can represent all functions that are a sequence of operations applied on a single input","msgtype":"m.text","formatted_body":"I am fairly sure tacit can represent all functions that are a sequence of operations applied on a single input"}}
    {"origin_server_ts":1656591378553,"event_id":"$SnbyM9UDxmlWp3a11xMxfRykRwkHNNK6SBRBQaozKeI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(things get a bit more messy for dyadic functions; haven't thought about that much)","msgtype":"m.text","formatted_body":"(things get a bit more messy for dyadic functions; haven't thought about that much)"}}
    {"origin_server_ts":1656591405545,"event_id":"$-P3HdNG8QNYiqCFzDdFcLtz6UCfjabQn7d1AS0C-AEA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: But for dyadic invocations, you can access the opposite argument multiple times without problem.","msgtype":"m.text","formatted_body":"dzaima<\/a>: But for dyadic invocations, you can access the opposite argument multiple times without problem."}}
    {"origin_server_ts":1656591415618,"event_id":"$XjXfIRXRkZ0baI1Iry2qdUsqzeDkgXWX9TWdJcpBkvQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's only the unknown argument that can only be accessed once.","msgtype":"m.text"}}
    {"origin_server_ts":1656591443883,"event_id":"$bkX9MyoK-fpKkWGaT6mOQ_FbxOYxa4DBu-c3x5tMAlo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"right; so dyadic doesn't pose much of an issue","msgtype":"m.text","formatted_body":"right; so dyadic doesn't pose much of an issue"}}
    {"origin_server_ts":1656591455620,"event_id":"$IJPLNuLiVLaZpunnI1Lw7lbQh4oOJWSTHAR6wOneIs0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So what I was thinking of doing is to drill down the call chain, ensuring all function calls are invertible and there is only once reference to the the unknown argument.","msgtype":"m.text"}}
    {"origin_server_ts":1656591472675,"event_id":"$hjbjWeVnjALAYornKtb7yHo64mkgPyOj_egVq6A7tv4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Then simply evaluating the inverses backwards.","msgtype":"m.text"}}
    {"origin_server_ts":1656591486242,"event_id":"$l_TsItIKe3k1nRipNq18Tc5e6WGc1QDk7PWAOvlvQDw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It seems like it's going to work, but I haven't proven in mathematically :-)","msgtype":"m.text"}}
    {"origin_server_ts":1656591491038,"event_id":"$EZ6hOANJZ1ThOf4pVNpm-xAmAQ7HoYCAfaIWrlV6JUo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"It seems like it's going to work, but I haven't proven it mathematically :-)","msgtype":"m.text"},"m.relates_to":{"event_id":"$l_TsItIKe3k1nRipNq18Tc5e6WGc1QDk7PWAOvlvQDw","rel_type":"m.replace"},"body":" * It seems like it's going to work, but I haven't proven it mathematically :-)","msgtype":"m.text"}}
    {"origin_server_ts":1656591598632,"event_id":"$kXKkn9GfOZ9SDUDPIPzPeE-7wCaf_03oGrnFX1xsmak","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Now, it should be possible in principle to use this technique to invert `{c ← ⍺×2 ◊ c+⍵}`","msgtype":"m.text","formatted_body":"Now, it should be possible in principle to use this technique to invert {c ← ⍺×2 ◊ c+⍵}<\/code>"}}
    {"origin_server_ts":1656591612542,"event_id":"$2O0r5pUT8WwpoXuqlEcD5QYEsm0_GytJnXk1q-TvoZM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But that'll be harder.","msgtype":"m.text"}}
    {"origin_server_ts":1656591632013,"event_id":"$T9EBzkoS82-CyfoOxc8Ge9ksD_44qiD8rIs8Yl83kB0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Actually, much harder.","msgtype":"m.text"}}
    {"origin_server_ts":1656591712526,"event_id":"$GecSirMCKIgitx66xt-VjtkDdejnc-TXvRXhgsHqcks","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(then there's Under, which in dzaima/APL & dzaima/BQN has a separate invocation definitions from inverses, allowing doing funky things like `{\", \",⍵,\"!\"}⍢(5∘↓) \"helloworld\"` → `\"hello, world!\"`)","msgtype":"m.text","formatted_body":"(then there's Under, which in dzaima/APL & dzaima/BQN has a separate invocation definitions from inverses, allowing doing funky things like {\", \",⍵,\"!\"}⍢(5∘↓) \"helloworld\"<\/code> → \"hello, world!\"<\/code>)"}}
    {"origin_server_ts":1656592602941,"event_id":"$7e1wT3E7EuD7_K4_WP7ctUfR6a-oOPUlqtj7JfcEdvY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ok that one needs some explanation I think. I don't fully understand the semantics. ","msgtype":"m.text"}}
    {"origin_server_ts":1656592618657,"event_id":"$ve-K6CdhvLRlVf3FQ1TMovTji_x0GuurpqEupKAzrVs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the semantics is whatever `↓` wants them to be :)","msgtype":"m.text","formatted_body":"the semantics is whatever ↓<\/code> wants them to be :)"}}
    {"origin_server_ts":1656592673449,"event_id":"$6N0-hwzhYYcdvHWqFXKW5G0RyP34nWxaJBI9ITC7YP0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(but dzaima/APL & dzaima/BQN are the only languages that do funky things like this)","msgtype":"m.text","formatted_body":"(but dzaima/APL & dzaima/BQN are the only languages that do funky things like this)"}}
    {"origin_server_ts":1656593175781,"event_id":"$5p8s4FG2o_QRQgFIIn6PV0dIURS7MwjSLiUHPfppQbI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I see. ","msgtype":"m.text"}}
    {"origin_server_ts":1656593193570,"event_id":"$P4FPJeaG6rsAyG1hu1KUb5xIYbzLUZFajllMKzO2ctQ","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$7e1wT3E7EuD7_K4_WP7ctUfR6a-oOPUlqtj7JfcEdvY"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@loke:dhsdevelopments.com> Ok that one needs some explanation I think. I don't fully understand the semantics.\n\n1. This diagram commutes: https://q.uiver.app/?q=WzAsNCxbMCwwLCJCIl0sWzIsMCwiQiJdLFswLDIsIkEiXSxbMiwyLCJBIl0sWzAsMSwiZlxcb2RvdCBoIl0sWzIsMywiZiJdLFswLDIsImgiLDFdLFsxLDMsImgiLDFdXQ==\n2. From all such functions, `f⌾h` is the least invasive one"},{"mimetype":"text/html","body":"
    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
    Ok that one needs some explanation I think. I don't fully understand the semantics. <\/blockquote><\/mx-reply>
      \n
    1. This diagram commutes: https://q.uiver.app/?q=WzAsNCxbMCwwLCJCIl0sWzIsMCwiQiJdLFswLDIsIkEiXSxbMiwyLCJBIl0sWzAsMSwiZlxcb2RvdCBoIl0sWzIsMywiZiJdLFswLDIsImgiLDFdLFsxLDMsImgiLDFdXQ==<\/li>\n
    2. From all such functions, f⌾h<\/code> is the least invasive one<\/li>\n<\/ol>\n"}],"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Ok that one needs some explanation I think. I don't fully understand the semantics.\n\n1. This diagram commutes: https://q.uiver.app/?q=WzAsNCxbMCwwLCJCIl0sWzIsMCwiQiJdLFswLDIsIkEiXSxbMiwyLCJBIl0sWzAsMSwiZlxcb2RvdCBoIl0sWzIsMywiZiJdLFswLDIsImgiLDFdLFsxLDMsImgiLDFdXQ==\n2. From all such functions, `f⌾h` is the least invasive one","msgtype":"m.text","formatted_body":"
      In reply to<\/a> @loke:dhsdevelopments.com<\/a>
      Ok that one needs some explanation I think. I don't fully understand the semantics. <\/blockquote><\/mx-reply>
        \n
      1. This diagram commutes: https://q.uiver.app/?q=WzAsNCxbMCwwLCJCIl0sWzIsMCwiQiJdLFswLDIsIkEiXSxbMiwyLCJBIl0sWzAsMSwiZlxcb2RvdCBoIl0sWzIsMywiZiJdLFswLDIsImgiLDFdLFsxLDMsImgiLDFdXQ==<\/li>\n
      2. From all such functions, f⌾h<\/code> is the least invasive one<\/li>\n<\/ol>\n"}} {"origin_server_ts":1656593355086,"event_id":"$IYu9ogQDPK1shep47mx8FgXx092xYHNL4f01yUSWREs","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"The second property for `↓` is can be obtained by comparing dropped parts. "},{"mimetype":"text/html","body":"The second property for ↓<\/code> is can be obtained by comparing dropped parts."}],"format":"org.matrix.custom.html","body":"The second property for `↓` is can be obtained by comparing dropped parts. ","msgtype":"m.text","formatted_body":"The second property for ↓<\/code> is can be obtained by comparing dropped parts."}} {"origin_server_ts":1656593432425,"event_id":"$fPQPDFo09kKl24X0j3bS15bDWjqGcEaAX2bUrU6gbIg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"counterpoint: `{\"hello\",⍵}⍢(3∘↑) \"foobarbaz\"` gives `\"hellofoobarbaz\"`, for which `3∘↑` doesn't give the result of `f`, which is `\"hellofoo\"` not `\"hel\"`. As I said, no semantics :)","msgtype":"m.text","formatted_body":"counterpoint: {\"hello\",⍵}⍢(3∘↑) \"foobarbaz\"<\/code> gives \"hellofoobarbaz\"<\/code>, for which 3∘↑<\/code> doesn't give the result of f<\/code>, which is \"hellofoo\"<\/code> not \"hel\"<\/code>. As I said, no semantics :)"}} {"origin_server_ts":1656593525109,"event_id":"$RFtcDOPw2jKQDC6NtjnRkSHNzZ5jpIPDPcrsGQGj1NI","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"body":"Ugh.","msgtype":"m.text","org.matrix.msc1767.text":"Ugh."}} {"origin_server_ts":1656593572343,"event_id":"$qlSaOwy2VvnHM0fUhWpS00buq-xK7rnOzOEJ0cXCWjc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(i'm not saying this is a good thing; but it is a useful thing)","msgtype":"m.text","formatted_body":"(i'm not saying this is a good thing; but it is a useful thing)"}} {"origin_server_ts":1656593897762,"event_id":"$3FjmPENneVBSxTg8KtCSMAh271u0IjcSi3vZn9RApks","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"body":"Structural under vs proper under. Hm.","msgtype":"m.text","org.matrix.msc1767.text":"Structural under vs proper under. Hm."}} {"origin_server_ts":1656594041690,"event_id":"$QeHmyRcxLxGn2b3PwZnkjxyM1YOPfW2gxqMmnd9uu8I","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"body":"There really should be two different symbols for them.","msgtype":"m.text","org.matrix.msc1767.text":"There really should be two different symbols for them."}} {"origin_server_ts":1656594096048,"event_id":"$531Po8_OCxHbKGtBUN32kyVx8cIj1UpXn22jYJRlezc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I wouldn't call this a \"proper\" under","msgtype":"m.text","formatted_body":"I wouldn't call this a \"proper\" under"}} {"origin_server_ts":1656594170923,"event_id":"$1QfoC47_r2Arth8ZGPyDE1g9kFSzwVon6zGapeb-Css","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Well, for inversible functions it's the same as `h\u207c f h`."},{"mimetype":"text/html","body":"Well, for inversible functions it's the same as h\u207c f h<\/code>."}],"format":"org.matrix.custom.html","body":"Well, for inversible functions it's the same as `h\u207c f h`.","msgtype":"m.text","formatted_body":"Well, for inversible functions it's the same as h\u207c f h<\/code>."}} {"origin_server_ts":1656594261640,"event_id":"$ZGQBSovHpwSDB9q4cdUvyMxpgFhmHGENIaY7hxI9JLU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima/APL & dzaima/BQN unify the unders with generic \"do `F` under me (`H`)\" functions for each under-able function","msgtype":"m.text","formatted_body":"dzaima/APL & dzaima/BQN unify the unders with generic \"do F<\/code> under me (H<\/code>)\" functions for each under-able function"}} {"origin_server_ts":1656594330262,"event_id":"$EoWdJSYHZ7-DH4v1HDmJ4YxtWClHOHaY94DdfwJ_R2U","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"body":"And the problem is it's all ad-hoc with no semantics at all.","msgtype":"m.text","org.matrix.msc1767.text":"And the problem is it's all ad-hoc with no semantics at all."}} {"origin_server_ts":1656594400082,"event_id":"$_AhlZRfXpu2ho8OPZtfjjuPXBInFTy8if3lE2bZGR1A","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"well the length-changing `F⍢(n∘↑)` & `F⍢(n∘↓)` are the only cases that defy the regular semantics; and separating unders wouldn't help me as I'd want to have those somewhere anyway","msgtype":"m.text","formatted_body":"well the length-changing F⍢(n∘↑)<\/code> & F⍢(n∘↓)<\/code> are the only cases that defy the regular semantics; and separating unders wouldn't help me as I'd want to have those somewhere anyway"}} {"origin_server_ts":1656594465332,"event_id":"$UK8nZ-cba2YX94TvASOcnwc27srxns3oQfXtPJWuYlg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the unification means you can do things like `{⍵×1000}⍢(0 1 0 1⌿ 2× 1↓ -∘1) 10×⍳5` → `10 20 29001 40 49001`","msgtype":"m.text","formatted_body":"the unification means you can do things like {⍵×1000}⍢(0 1 0 1⌿ 2× 1↓ -∘1) 10×⍳5<\/code> → 10 20 29001 40 49001<\/code>"}} {"origin_server_ts":1656596067800,"event_id":"$HNTQDjxbIH-8CgH5XLZOcKzW6pp7BuFre_sDZs5U-y0","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"body":"...but this can be actually patched: https://q.uiver.app/?q=WzAsNCxbMCwwLCJcXG1hdGh0dHtcImZvb2JhclwifSJdLFswLDIsIlxcbWF0aHR0e1wiZm9vXCJ9Il0sWzIsMiwiXFxtYXRodHR7XCJoZWxsb1wifSJdLFsyLDAsIlxcbWF0aHR0e1wiaGVsbG9iYXJcIn0iXSxbMCwxLCIz4oaRIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsxLDIsIiIsMCx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XSxbMywyLCIo4omgXFxtYXRodHR7XCJoZWxsb1wifSnihpEiLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzAsMywiIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dXQ==","msgtype":"m.text","org.matrix.msc1767.text":"...but this can be actually patched: https://q.uiver.app/?q=WzAsNCxbMCwwLCJcXG1hdGh0dHtcImZvb2JhclwifSJdLFswLDIsIlxcbWF0aHR0e1wiZm9vXCJ9Il0sWzIsMiwiXFxtYXRodHR7XCJoZWxsb1wifSJdLFsyLDAsIlxcbWF0aHR0e1wiaGVsbG9iYXJcIn0iXSxbMCwxLCIz4oaRIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsxLDIsIiIsMCx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XSxbMywyLCIo4omgXFxtYXRodHR7XCJoZWxsb1wifSnihpEiLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzAsMywiIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dXQ=="}} {"origin_server_ts":1656596174446,"event_id":"$q5w_rSQbLEa_ohD1L-3PqX7sssrVhNw9iexHfKQm2sQ","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"body":"Still ad-hoc, but maybe it can be generalized somehow...","msgtype":"m.text","org.matrix.msc1767.text":"Still ad-hoc, but maybe it can be generalized somehow..."}} {"origin_server_ts":1656596181486,"event_id":"$I7pW3RXjdzX3v6Jk1HNn4oCj2XAAdTc3X-LeUJDNMww","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$QSTnosuH_s5tTmI83vRyFBLhPBKIAjaXIicHijI0raE"}},"format":"org.matrix.custom.html","body":"For anything consisting of `+` and `×`, you could symbolically evaluate it to get a polynomial, and solve that. Same for `÷` with a numeric right argument and `⋆` with a natural number right argument.","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>For anything consisting of +<\/code> and ×<\/code>, you could symbolically evaluate it to get a polynomial, and solve that. Same for ÷<\/code> with a numeric right argument and ⋆<\/code> with a natural number right argument."}} {"origin_server_ts":1656596259227,"event_id":"$DtmbentwD9nDr0Ol_XfoyXC_EmqzQQlTaLtcLSE6lq4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Although getting one solution to a polynomial isn't necessarily a good thing. Might want to restrict it to linear equations, or ones that only have one real root.","msgtype":"m.text","formatted_body":"Although getting one solution to a polynomial isn't necessarily a good thing. Might want to restrict it to linear equations, or ones that only have one real root."}} {"origin_server_ts":1656596333483,"event_id":"$OAeCipSB1_jlfVknHYHXa2xt3LV0O1aVcPKiA-3V62A","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Would be nice in BQN to invert `-⟜¬`, the linear function that takes 0,1 to ¯1,1.","msgtype":"m.text","formatted_body":"Would be nice in BQN to invert -⟜¬<\/code>, the linear function that takes 0,1 to ¯1,1."}} {"origin_server_ts":1656597061906,"event_id":"$hxuGU1kEmiLAAPxpkFGv-ywHeKzFgcPi4fsMQ9kmJqA","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"body":"https://q.uiver.app/?q=WzAsNixbMCwwLCJcXG1hdGh0dHtcImFiY1wifSJdLFswLDIsIlxcbWF0aHR0e1wiYmNcIn0iXSxbMCw0LCJcXG1hdGh0dHtcImJcIn0iXSxbMyw0LCJcXG1hdGh0dHtcImhpXCJ9Il0sWzMsMiwiXFxtYXRodHR7XCJoaWNcIn0iXSxbMywwLCJcXG1hdGh0dHtcImFoaWJcIn0iXSxbMSwyLCIx4oaRIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsyLDMsIlxcbWF0aHR0e1wiaGlcIn0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzQsMywiKOKJoFxcbWF0aHR0e1wiaGlcIn0p4oaRIiwwLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFs1LDQsIjHihpMiXSxbMCw1LCJcXG1hdGh0dHtcImhpXCJcXG9kb3QgXFx7MeKGkTHihpPwnZWpXFx9fSIsMCx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XSxbMCwxLCIx4oaTIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsxLDQsIlxcbWF0aHR0e1wiaGlcIlxcb2RvdFxcezHihpHwnZWpXFx9fSIsMSx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XV0=","msgtype":"m.text","org.matrix.msc1767.text":"https://q.uiver.app/?q=WzAsNixbMCwwLCJcXG1hdGh0dHtcImFiY1wifSJdLFswLDIsIlxcbWF0aHR0e1wiYmNcIn0iXSxbMCw0LCJcXG1hdGh0dHtcImJcIn0iXSxbMyw0LCJcXG1hdGh0dHtcImhpXCJ9Il0sWzMsMiwiXFxtYXRodHR7XCJoaWNcIn0iXSxbMywwLCJcXG1hdGh0dHtcImFoaWJcIn0iXSxbMSwyLCIx4oaRIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsyLDMsIlxcbWF0aHR0e1wiaGlcIn0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzQsMywiKOKJoFxcbWF0aHR0e1wiaGlcIn0p4oaRIiwwLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFs1LDQsIjHihpMiXSxbMCw1LCJcXG1hdGh0dHtcImhpXCJcXG9kb3QgXFx7MeKGkTHihpPwnZWpXFx9fSIsMCx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XSxbMCwxLCIx4oaTIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsxLDQsIlxcbWF0aHR0e1wiaGlcIlxcb2RvdFxcezHihpHwnZWpXFx9fSIsMSx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XV0="}} {"origin_server_ts":1656597105302,"event_id":"$j2ufgvtmSyoAMFNSayro-_-WCRI776FfFGRZLBU3Rao","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"m.new_content":{"body":"https://q.uiver.app/?q=WzAsNixbMCwwLCJcXG1hdGh0dHtcImFiY1wifSJdLFswLDIsIlxcbWF0aHR0e1wiYmNcIn0iXSxbMCw0LCJcXG1hdGh0dHtcImJcIn0iXSxbMyw0LCJcXG1hdGh0dHtcImhpXCJ9Il0sWzMsMiwiXFxtYXRodHR7XCJoaWNcIn0iXSxbMywwLCJcXG1hdGh0dHtcImFoaWNcIn0iXSxbMSwyLCIx4oaRIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsyLDMsIlxcbWF0aHR0e1wiaGlcIn0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzQsMywiKOKJoFxcbWF0aHR0e1wiaGlcIn0p4oaRIiwwLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFs1LDQsIjHihpMiXSxbMCw1LCJcXG1hdGh0dHtcImhpXCJcXG9kb3QgXFx7MeKGkTHihpPwnZWpXFx9fSIsMCx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XSxbMCwxLCIx4oaTIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsxLDQsIlxcbWF0aHR0e1wiaGlcIlxcb2RvdFxcezHihpHwnZWpXFx9fSIsMSx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XV0=","msgtype":"m.text","org.matrix.msc1767.text":"https://q.uiver.app/?q=WzAsNixbMCwwLCJcXG1hdGh0dHtcImFiY1wifSJdLFswLDIsIlxcbWF0aHR0e1wiYmNcIn0iXSxbMCw0LCJcXG1hdGh0dHtcImJcIn0iXSxbMyw0LCJcXG1hdGh0dHtcImhpXCJ9Il0sWzMsMiwiXFxtYXRodHR7XCJoaWNcIn0iXSxbMywwLCJcXG1hdGh0dHtcImFoaWNcIn0iXSxbMSwyLCIx4oaRIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsyLDMsIlxcbWF0aHR0e1wiaGlcIn0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzQsMywiKOKJoFxcbWF0aHR0e1wiaGlcIn0p4oaRIiwwLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFs1LDQsIjHihpMiXSxbMCw1LCJcXG1hdGh0dHtcImhpXCJcXG9kb3QgXFx7MeKGkTHihpPwnZWpXFx9fSIsMCx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XSxbMCwxLCIx4oaTIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsxLDQsIlxcbWF0aHR0e1wiaGlcIlxcb2RvdFxcezHihpHwnZWpXFx9fSIsMSx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XV0="},"m.relates_to":{"event_id":"$hxuGU1kEmiLAAPxpkFGv-ywHeKzFgcPi4fsMQ9kmJqA","rel_type":"m.replace"},"body":" * https://q.uiver.app/?q=WzAsNixbMCwwLCJcXG1hdGh0dHtcImFiY1wifSJdLFswLDIsIlxcbWF0aHR0e1wiYmNcIn0iXSxbMCw0LCJcXG1hdGh0dHtcImJcIn0iXSxbMyw0LCJcXG1hdGh0dHtcImhpXCJ9Il0sWzMsMiwiXFxtYXRodHR7XCJoaWNcIn0iXSxbMywwLCJcXG1hdGh0dHtcImFoaWNcIn0iXSxbMSwyLCIx4oaRIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsyLDMsIlxcbWF0aHR0e1wiaGlcIn0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzQsMywiKOKJoFxcbWF0aHR0e1wiaGlcIn0p4oaRIiwwLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFs1LDQsIjHihpMiXSxbMCw1LCJcXG1hdGh0dHtcImhpXCJcXG9kb3QgXFx7MeKGkTHihpPwnZWpXFx9fSIsMCx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XSxbMCwxLCIx4oaTIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsxLDQsIlxcbWF0aHR0e1wiaGlcIlxcb2RvdFxcezHihpHwnZWpXFx9fSIsMSx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XV0=","msgtype":"m.text","org.matrix.msc1767.text":" * https://q.uiver.app/?q=WzAsNixbMCwwLCJcXG1hdGh0dHtcImFiY1wifSJdLFswLDIsIlxcbWF0aHR0e1wiYmNcIn0iXSxbMCw0LCJcXG1hdGh0dHtcImJcIn0iXSxbMyw0LCJcXG1hdGh0dHtcImhpXCJ9Il0sWzMsMiwiXFxtYXRodHR7XCJoaWNcIn0iXSxbMywwLCJcXG1hdGh0dHtcImFoaWNcIn0iXSxbMSwyLCIx4oaRIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsyLDMsIlxcbWF0aHR0e1wiaGlcIn0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzQsMywiKOKJoFxcbWF0aHR0e1wiaGlcIn0p4oaRIiwwLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFs1LDQsIjHihpMiXSxbMCw1LCJcXG1hdGh0dHtcImhpXCJcXG9kb3QgXFx7MeKGkTHihpPwnZWpXFx9fSIsMCx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XSxbMCwxLCIx4oaTIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsxLDQsIlxcbWF0aHR0e1wiaGlcIlxcb2RvdFxcezHihpHwnZWpXFx9fSIsMSx7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XV0="}} {"origin_server_ts":1656597139848,"event_id":"$a_LNJm2LNWXfPxQFSgA5oSaNKLs3q_SxTpzQWnJHtUo","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"m.new_content":{"body":"https://q.uiver.app/?q=WzAsNixbMCwwLCJcXG1hdGh0dHtcImFiY1wifSJdLFswLDIsIlxcbWF0aHR0e1wiYmNcIn0iXSxbMCw0LCJcXG1hdGh0dHtcImJcIn0iXSxbMyw0LCJcXG1hdGh0dHtcImhpXCJ9Il0sWzMsMiwiXFxtYXRodHR7XCJoaWNcIn0iXSxbMywwLCJcXG1hdGh0dHtcImFoaWNcIn0iXSxbMSwyLCIx4oaRIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsyLDMsIlxcbWF0aHR0e1wiaGlcIn0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzQsMywiKOKJoFxcbWF0aHR0e1wiaGlcIn0p4oaRIiwwLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFs1LDQsIjHihpMiLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzAsNSwiXFxtYXRodHR7XCJoaVwiXFxvZG90IFxcezHihpEx4oaT8J2VqVxcfX0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzAsMSwiMeKGkyIsMix7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XSxbMSw0LCJcXG1hdGh0dHtcImhpXCJcXG9kb3RcXHsx4oaR8J2VqVxcfX0iLDEseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV1d","msgtype":"m.text","org.matrix.msc1767.text":"https://q.uiver.app/?q=WzAsNixbMCwwLCJcXG1hdGh0dHtcImFiY1wifSJdLFswLDIsIlxcbWF0aHR0e1wiYmNcIn0iXSxbMCw0LCJcXG1hdGh0dHtcImJcIn0iXSxbMyw0LCJcXG1hdGh0dHtcImhpXCJ9Il0sWzMsMiwiXFxtYXRodHR7XCJoaWNcIn0iXSxbMywwLCJcXG1hdGh0dHtcImFoaWNcIn0iXSxbMSwyLCIx4oaRIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsyLDMsIlxcbWF0aHR0e1wiaGlcIn0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzQsMywiKOKJoFxcbWF0aHR0e1wiaGlcIn0p4oaRIiwwLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFs1LDQsIjHihpMiLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzAsNSwiXFxtYXRodHR7XCJoaVwiXFxvZG90IFxcezHihpEx4oaT8J2VqVxcfX0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzAsMSwiMeKGkyIsMix7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XSxbMSw0LCJcXG1hdGh0dHtcImhpXCJcXG9kb3RcXHsx4oaR8J2VqVxcfX0iLDEseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV1d"},"m.relates_to":{"event_id":"$hxuGU1kEmiLAAPxpkFGv-ywHeKzFgcPi4fsMQ9kmJqA","rel_type":"m.replace"},"body":" * https://q.uiver.app/?q=WzAsNixbMCwwLCJcXG1hdGh0dHtcImFiY1wifSJdLFswLDIsIlxcbWF0aHR0e1wiYmNcIn0iXSxbMCw0LCJcXG1hdGh0dHtcImJcIn0iXSxbMyw0LCJcXG1hdGh0dHtcImhpXCJ9Il0sWzMsMiwiXFxtYXRodHR7XCJoaWNcIn0iXSxbMywwLCJcXG1hdGh0dHtcImFoaWNcIn0iXSxbMSwyLCIx4oaRIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsyLDMsIlxcbWF0aHR0e1wiaGlcIn0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzQsMywiKOKJoFxcbWF0aHR0e1wiaGlcIn0p4oaRIiwwLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFs1LDQsIjHihpMiLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzAsNSwiXFxtYXRodHR7XCJoaVwiXFxvZG90IFxcezHihpEx4oaT8J2VqVxcfX0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzAsMSwiMeKGkyIsMix7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XSxbMSw0LCJcXG1hdGh0dHtcImhpXCJcXG9kb3RcXHsx4oaR8J2VqVxcfX0iLDEseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV1d","msgtype":"m.text","org.matrix.msc1767.text":" * https://q.uiver.app/?q=WzAsNixbMCwwLCJcXG1hdGh0dHtcImFiY1wifSJdLFswLDIsIlxcbWF0aHR0e1wiYmNcIn0iXSxbMCw0LCJcXG1hdGh0dHtcImJcIn0iXSxbMyw0LCJcXG1hdGh0dHtcImhpXCJ9Il0sWzMsMiwiXFxtYXRodHR7XCJoaWNcIn0iXSxbMywwLCJcXG1hdGh0dHtcImFoaWNcIn0iXSxbMSwyLCIx4oaRIiwyLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFsyLDMsIlxcbWF0aHR0e1wiaGlcIn0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzQsMywiKOKJoFxcbWF0aHR0e1wiaGlcIn0p4oaRIiwwLHsic3R5bGUiOnsidGFpbCI6eyJuYW1lIjoibWFwcyB0byJ9fX1dLFs1LDQsIjHihpMiLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzAsNSwiXFxtYXRodHR7XCJoaVwiXFxvZG90IFxcezHihpEx4oaT8J2VqVxcfX0iLDAseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV0sWzAsMSwiMeKGkyIsMix7InN0eWxlIjp7InRhaWwiOnsibmFtZSI6Im1hcHMgdG8ifX19XSxbMSw0LCJcXG1hdGh0dHtcImhpXCJcXG9kb3RcXHsx4oaR8J2VqVxcfX0iLDEseyJzdHlsZSI6eyJ0YWlsIjp7Im5hbWUiOiJtYXBzIHRvIn19fV1d"}} {"origin_server_ts":1656597334220,"event_id":"$2U4kPL4d2gXd28igQT1W8B-05hJRELRaW68T8p4V2mY","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"`f⌾(g∘h) ←→ f⌾g f⌾h` is something really nice to have. Does it always hold?"},{"mimetype":"text/html","body":"f⌾(g∘h) ←→ f⌾g f⌾h<\/code> is something really nice to have. Does it always hold?"}],"format":"org.matrix.custom.html","body":"`f⌾(g∘h) ←→ f⌾g f⌾h` is something really nice to have. Does it always hold?","msgtype":"m.text","formatted_body":"f⌾(g∘h) ←→ f⌾g f⌾h<\/code> is something really nice to have. Does it always hold?"}} {"origin_server_ts":1656597429157,"event_id":"$Gn_JlA9klhJZu5Rcl0Fqg9KayOwIdVw4AePBrTCAwXU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`f⌾(g∘h)` ↔ `f⌾g⌾h` is the correct equation; `f⌾g f⌾h` is quite different","msgtype":"m.text","formatted_body":"f⌾(g∘h)<\/code> ↔ f⌾g⌾h<\/code> is the correct equation; f⌾g f⌾h<\/code> is quite different"}} {"origin_server_ts":1656597436506,"event_id":"$hBmTVwwaUVzcxxiBLE1hDhC4EV1S2OTPNr-ViNiarTU","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"`f⌾(g∘h) ←→ f⌾g⌾h` is something really nice to have. Does it always hold?"},{"mimetype":"text/html","body":"f⌾(g∘h) ←→ f⌾g⌾h<\/code> is something really nice to have. Does it always hold?"}],"format":"org.matrix.custom.html","body":"`f⌾(g∘h) ←→ f⌾g⌾h` is something really nice to have. Does it always hold?","msgtype":"m.text","formatted_body":"f⌾(g∘h) ←→ f⌾g⌾h<\/code> is something really nice to have. Does it always hold?"},"m.relates_to":{"event_id":"$2U4kPL4d2gXd28igQT1W8B-05hJRELRaW68T8p4V2mY","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * `f⌾(g∘h) ←→ f⌾g⌾h` is something really nice to have. Does it always hold?"},{"mimetype":"text/html","body":" * f⌾(g∘h) ←→ f⌾g⌾h<\/code> is something really nice to have. Does it always hold?"}],"format":"org.matrix.custom.html","body":" * `f⌾(g∘h) ←→ f⌾g⌾h` is something really nice to have. Does it always hold?","msgtype":"m.text","formatted_body":" * f⌾(g∘h) ←→ f⌾g⌾h<\/code> is something really nice to have. Does it always hold?"}} {"origin_server_ts":1656597438091,"event_id":"$9FYHVX6Uwqfn5UIHp47uumG1kvgaLECNNu1rjTVwumA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The rule is `f⌾(g∘h) ←→ f⌾g⌾h`? I think it only holds for structural Under.","msgtype":"m.text","formatted_body":"The rule is f⌾(g∘h) ←→ f⌾g⌾h<\/code>? I think it only holds for structural Under."}} {"origin_server_ts":1656597445324,"event_id":"$FqcS0dzAcrCu1UEq8pKx8cDZU2gKY6wC2_8PwDgZdWw","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"body":"Yeah, fixed.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, fixed."}} {"origin_server_ts":1656597479272,"event_id":"$H4sDBjk5iOyZuypnVbFk_TAyzNlE6DwHi-GVxcWFZu4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`f⌾(g∘h)` ↔ `f⌾g⌾h` should hold for all inputs; at least that's [what I do always](https://github.com/dzaima/BQN/blob/master/src/BQN/types/callable/builtins/md2/AtopBuiltin.java#L30-L36)","msgtype":"m.text","formatted_body":"f⌾(g∘h)<\/code> ↔ f⌾g⌾h<\/code> should hold for all inputs; at least that's what I do always<\/a>"}} {"origin_server_ts":1656597525447,"event_id":"$3Wt-hFo5xXgeTPMd7xSn0kY2SHEJcBhZ8G7bWCRY6Rk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Well, it works for computational Under if you literally write `g∘h`, but not necessarily if you have an equivalent function to the composition.","msgtype":"m.text","formatted_body":"Well, it works for computational Under if you literally write g∘h<\/code>, but not necessarily if you have an equivalent function to the composition."}} {"origin_server_ts":1656597545072,"event_id":"$SxHywE7CFWgoGusuBCS76PGZxuirirLfVtOw2BSoeB8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"But I guess that's the case for everything. Computational Under just isn't well defined.","msgtype":"m.text","formatted_body":"But I guess that's the case for everything. Computational Under just isn't well defined."}} {"origin_server_ts":1656598003256,"event_id":"$A7705STR8PEEci6BzZzQvIlIGFWhltAnnTvBZOyIPBo","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","type":"m.room.message","content":{"body":"Yeah, it involves an arbitrary choice.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, it involves an arbitrary choice."}} {"origin_server_ts":1656600941959,"event_id":"$66sbzVF_r_oeoTE-1O0eCbG6OWtUtq7dKxrv3UrNlUY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh, I'm reading about structural under.","msgtype":"m.text"}} {"origin_server_ts":1656600949464,"event_id":"$i945a56YYkNe-8s82vcjz6v0SGak8WcgaEHSfy8aQRo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's some really cool stuff.","msgtype":"m.text"}} {"state_key":"@eris:chat.unix.lgbt","origin_server_ts":1657555461710,"event_id":"$WYc3NUVSpZ6O_g4YWTvTkQwdCRF8YzvNGERYJmg6RMo","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","prev_content":{"avatar_url":"mxc://chat.unix.lgbt/wkBwQHWFcTolDHIwyMbMjrCp","displayname":"eris","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://chat.unix.lgbt/6a177edead22a3646a9681053e235d2509d280b7","displayname":"eris","membership":"join"},"replaces_state":"$sf9poGLRP-S9XHOJWhDKj6dmVpjPj7ynJqdqgDPDECE"} {"state_key":"@eris:chat.unix.lgbt","origin_server_ts":1657555595473,"event_id":"$ofRy7kBwc0e6jhFCMARjoDrxzLPR5PHkLpOZrFyueT4","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","prev_content":{"avatar_url":"mxc://chat.unix.lgbt/6a177edead22a3646a9681053e235d2509d280b7","displayname":"eris","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://chat.unix.lgbt/c835821681d096bc70063e912174e7719a8dd938","displayname":"eris","membership":"join"},"replaces_state":"$WYc3NUVSpZ6O_g4YWTvTkQwdCRF8YzvNGERYJmg6RMo"} {"state_key":"@eris:chat.unix.lgbt","origin_server_ts":1657556997963,"event_id":"$w0Q6MtJCv6qneDwaAte5A786YRxWWcHHlapNfhAG_9I","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","prev_content":{"avatar_url":"mxc://chat.unix.lgbt/c835821681d096bc70063e912174e7719a8dd938","displayname":"eris","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://chat.unix.lgbt/178e60da729be0a342bbe330afcc62d4b7bde3e3","displayname":"eris","membership":"join"},"replaces_state":"$ofRy7kBwc0e6jhFCMARjoDrxzLPR5PHkLpOZrFyueT4"} {"state_key":"@eris:chat.unix.lgbt","origin_server_ts":1657558374831,"event_id":"$dtNxdMh7tUrnjTRa8CS9JKR_EmSKHWXYqaXGRttjVQ8","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","prev_content":{"avatar_url":"mxc://chat.unix.lgbt/178e60da729be0a342bbe330afcc62d4b7bde3e3","displayname":"eris","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://chat.unix.lgbt/02f5bea5479e53ea0d8441add6c9643aa6ce54f8","displayname":"eris","membership":"join"},"replaces_state":"$w0Q6MtJCv6qneDwaAte5A786YRxWWcHHlapNfhAG_9I"} {"state_key":"@eris:chat.unix.lgbt","origin_server_ts":1657560022697,"event_id":"$HTcD7OKkDZ0mvteTy-ZS8lQ-xSSvv52wgdqIPCreizc","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","prev_content":{"avatar_url":"mxc://chat.unix.lgbt/02f5bea5479e53ea0d8441add6c9643aa6ce54f8","displayname":"eris","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://chat.unix.lgbt/2f9e93fa1d6e14ba0c60281ebe1d372a3500dd50","displayname":"eris","membership":"join"},"replaces_state":"$dtNxdMh7tUrnjTRa8CS9JKR_EmSKHWXYqaXGRttjVQ8"} {"state_key":"@eris:chat.unix.lgbt","origin_server_ts":1657658456339,"event_id":"$FO8V5w-Gqpnm7euvuX-WGfsZWs7s3I2rh2soA2VKtEs","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","prev_content":{"avatar_url":"mxc://chat.unix.lgbt/2f9e93fa1d6e14ba0c60281ebe1d372a3500dd50","displayname":"eris","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://chat.unix.lgbt/6c2213fcc1e615ee6806f30e8029c4f9d920a185","displayname":"eris","membership":"join"},"replaces_state":"$HTcD7OKkDZ0mvteTy-ZS8lQ-xSSvv52wgdqIPCreizc"} {"state_key":"@eris:chat.unix.lgbt","origin_server_ts":1657659113698,"event_id":"$CV5FUPT3VWvqYH21cqrAKSvRKEOxUg8cS-g9dCB_bGY","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","prev_content":{"avatar_url":"mxc://chat.unix.lgbt/6c2213fcc1e615ee6806f30e8029c4f9d920a185","displayname":"eris","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://chat.unix.lgbt/2437ddfb44bebf6cd4b7a7d33b4abe6fcc03b7af","displayname":"eris","membership":"join"},"replaces_state":"$FO8V5w-Gqpnm7euvuX-WGfsZWs7s3I2rh2soA2VKtEs"} {"state_key":"@eris:chat.unix.lgbt","origin_server_ts":1657659570539,"event_id":"$jyjHrTiztyDDQPmkPf3g2eomsXfvXc4UOQK8wCKwGBs","sender":"@eris:chat.unix.lgbt","user_id":"@eris:chat.unix.lgbt","prev_content":{"avatar_url":"mxc://chat.unix.lgbt/2437ddfb44bebf6cd4b7a7d33b4abe6fcc03b7af","displayname":"eris","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://chat.unix.lgbt/2ea89984d2179ba6add9a3f1741e7c2070fe7647","displayname":"eris","membership":"join"},"replaces_state":"$CV5FUPT3VWvqYH21cqrAKSvRKEOxUg8cS-g9dCB_bGY"} {"state_key":"@better_sleeping:converser.eu","origin_server_ts":1658277448310,"event_id":"$vu8ovcso9z_qrmCS_SldG_EySiCu3On6uSL4MC2Khiw","sender":"@better_sleeping:converser.eu","user_id":"@better_sleeping:converser.eu","type":"m.room.member","content":{"avatar_url":null,"displayname":"better_sleeping","membership":"join"},"age_ts":1658277448848} {"state_key":"@better_sleeping:converser.eu","origin_server_ts":1658277462858,"event_id":"$YdqjMltr9AP2o0GXyJPdNLCMq2uxs4KhsE_rmOt26EU","sender":"@better_sleeping:converser.eu","user_id":"@better_sleeping:converser.eu","prev_content":{"avatar_url":null,"displayname":"better_sleeping","membership":"join"},"type":"m.room.member","content":{"membership":"leave"},"replaces_state":"$vu8ovcso9z_qrmCS_SldG_EySiCu3On6uSL4MC2Khiw"} {"origin_server_ts":1658474898625,"event_id":"$3iV9BfgJNhB8AgRdUMHHOlXzUVqwFcjWjEty7_FRnN8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, so I was looking at project euler, and wanted to golf my solution to problem 3.","msgtype":"m.text"}} {"origin_server_ts":1658474925995,"event_id":"$4Q8vVWNVtBYAS061c1hMxkZkhuOFeAYQiTf8QMXD0SU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I ended up with this: `↑ (⍒⊇⊢) (⍕≡∘⌽⍕)¨⍛⫽⍨ ,×⌺⍨ 1+⍳1000`","msgtype":"m.text","formatted_body":"I ended up with this: ↑ (⍒⊇⊢) (⍕≡∘⌽⍕)¨⍛⫽⍨ ,×⌺⍨ 1+⍳1000<\/code>"}} {"origin_server_ts":1658474952951,"event_id":"$weEMX8RpbN6WGwUwUlgA4pAcD6gaCRxruc2Lg_GD5xk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now, I just wrote this thing, and yet I still barely understand it because of trains. :-)","msgtype":"m.text"}} {"origin_server_ts":1658475293506,"event_id":"$5KJ1TgYXy-xUHexivVwuadAZZE2gSF-GaJCtiKE4N4g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I ended up with this: `↑ (⍒⊇⊢) (⍕≡∘⌽⍕)¨⍛⫽⍨ ,×⌺⍨ ⍳1000`","msgtype":"m.text","formatted_body":"I ended up with this: ↑ (⍒⊇⊢) (⍕≡∘⌽⍕)¨⍛⫽⍨ ,×⌺⍨ ⍳1000<\/code>"},"m.relates_to":{"event_id":"$4Q8vVWNVtBYAS061c1hMxkZkhuOFeAYQiTf8QMXD0SU","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * I ended up with this: `↑ (⍒⊇⊢) (⍕≡∘⌽⍕)¨⍛⫽⍨ ,×⌺⍨ ⍳1000`","msgtype":"m.text","formatted_body":" * I ended up with this: ↑ (⍒⊇⊢) (⍕≡∘⌽⍕)¨⍛⫽⍨ ,×⌺⍨ ⍳1000<\/code>"}} {"origin_server_ts":1658475472107,"event_id":"$pi60KAAw2rA2Ari8XUO-87KtSvW5PId88FpVC4j70EA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Cut down a bit further. I implemented the parser for trains, it works, but I still can't read it properly. I guess I'm just too stupid to use them: `↑ (⍒⊇⊢) (≡∘⌽⍨⍕)¨⍛⫽⍨ ,×⌺⍨ ⍳1000`","msgtype":"m.text","formatted_body":"Cut down a bit further. I implemented the parser for trains, it works, but I still can't read it properly. I guess I'm just too stupid to use them: ↑ (⍒⊇⊢) (≡∘⌽⍨⍕)¨⍛⫽⍨ ,×⌺⍨ ⍳1000<\/code>"}} {"origin_server_ts":1658477077783,"event_id":"$zNOF8Ho981rAJTLpMQrFidovjpJBOs7j8wUubiRKKgk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"How silly. There's of course a better way to get the maximum value in an array. `⌈/ (≡∘⌽⍨⍕)¨⍛⫽⍨ ,×⌺⍨ ⍳1000`","msgtype":"m.text","formatted_body":"How silly. There's of course a better way to get the maximum value in an array. ⌈/ (≡∘⌽⍨⍕)¨⍛⫽⍨ ,×⌺⍨ ⍳1000<\/code>"}} {"state_key":"@eris:the-apothecary.club","origin_server_ts":1658504295564,"event_id":"$EPlMz425yc1YHoJpSSpszwI8izG_TjOxtNERUJJEHi4","sender":"@eris:the-apothecary.club","user_id":"@eris:the-apothecary.club","type":"m.room.member","content":{"avatar_url":"mxc://the-apothecary.club/0e69f65fbecb250e6cfb1f491df91285a9402891","displayname":"eris","membership":"join"},"age_ts":1658504296110} {"origin_server_ts":1658657186377,"event_id":"$W8L_GGCCieawufH8ZfVSYPu8AaEaPsg83dHl-88DDrU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Published a new post: https://blog.dhsdevelopments.com/control-structures-in-kap","msgtype":"m.text"}} {"state_key":"jitsi_@loke:dhsdevelopments.com_1660390710827","origin_server_ts":1660390710873,"event_id":"$IC8lRJlawQLniIOOMo4H8aiv3SUroPPEZraFsI5kGfE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"im.vector.modular.widgets","content":{"data":{"auth":null,"conferenceId":"JitsiXfcpgngvbmgriplrfhqqrhdn","domain":"jitsi.riot.im","isAudioOnly":true,"roomName":"KAP"},"name":"Jitsi","type":"jitsi","url":"https://app.element.io/jitsi.html?confId=JitsiXfcpgngvbmgriplrfhqqrhdn#conferenceDomain=$domain&conferenceId=$conferenceId&isAudioOnly=$isAudioOnly&displayName=$matrix_display_name&avatarUrl=$matrix_avatar_url&userId=$matrix_user_id&roomId=$matrix_room_id&theme=$theme&roomName=$roomName"}} {"origin_server_ts":1660405839954,"event_id":"$IuBIes0Nm3mXans85NRpfpqBeT0NMXtvr_zKl2gdZC0","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"why the conference?","msgtype":"m.text","org.matrix.msc1767.text":"why the conference?"}} {"origin_server_ts":1660406238017,"event_id":"$Pn7FaEOjKnC0qZhOQVm7C8qrG-eK3MCpra21RWA9tj4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Just testing video calls and I needed a channel that I was owning. ","msgtype":"m.text"}} {"state_key":"jitsi_@loke:dhsdevelopments.com_1660390710827","origin_server_ts":1660406630334,"event_id":"$XoSUxGQz90annJbBj6bifVsNiAlcKizi4LPlPYym7Cw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","prev_content":{"data":{"auth":null,"conferenceId":"JitsiXfcpgngvbmgriplrfhqqrhdn","domain":"jitsi.riot.im","isAudioOnly":true,"roomName":"KAP"},"name":"Jitsi","type":"jitsi","url":"https://app.element.io/jitsi.html?confId=JitsiXfcpgngvbmgriplrfhqqrhdn#conferenceDomain=$domain&conferenceId=$conferenceId&isAudioOnly=$isAudioOnly&displayName=$matrix_display_name&avatarUrl=$matrix_avatar_url&userId=$matrix_user_id&roomId=$matrix_room_id&theme=$theme&roomName=$roomName"},"type":"im.vector.modular.widgets","content":{},"replaces_state":"$IC8lRJlawQLniIOOMo4H8aiv3SUroPPEZraFsI5kGfE"} {"origin_server_ts":1660752884553,"event_id":"$5dm1FlbO7fJyLEVmJ39O1uMusuDQbFyRBrLwT09CLcw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I need a good implementation of binomial that I can use. My current implementation uses gamma on the right argument, which very quickly overflows even if the left argument is big. So 200!201 can't be computed. ","msgtype":"m.text"}} {"origin_server_ts":1660752905636,"event_id":"$_5KtODiaqpSdeqf_0ut_lcWctZ7Y9Yfm_oavFWGmYwY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Preferably something that is correct for complex numbers too. ","msgtype":"m.text"}} {"origin_server_ts":1660752930571,"event_id":"$wQvZFi0Q6KL_Jtmo_tTksmivJPHcwjcNyb2BjE_jDXM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: what does BQN use? ","msgtype":"m.text","formatted_body":"Marshall<\/a>: what does BQN use? "}} {"origin_server_ts":1660752955292,"event_id":"$nm1ahseMbt5GQCUrc5Sqlyq8Fhq5gyKVx3QUem30w7c","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`!` is assert.","msgtype":"m.text","formatted_body":"!<\/code> is assert."}} {"origin_server_ts":1660753021388,"event_id":"$Lv4NHxsnAsFm9L5_3Wk6VVFrIjXB8hBFVO3eXBpcRLQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(i.e. there is no BQN builtin for neither factorial nor binomial)","msgtype":"m.text","formatted_body":"(i.e. there is no BQN builtin for neither factorial nor binomial)"}} {"origin_server_ts":1660753027291,"event_id":"$RoqZyzWCwNdJ_vcgqFszy2os-XSuc0jAiWGdja2fJZQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think Dyalog uses Stirling's approximation for large monadic `!`, and it might do something related for dyadic.","msgtype":"m.text","formatted_body":"I think Dyalog uses Stirling's approximation for large monadic !<\/code>, and it might do something related for dyadic."}} {"origin_server_ts":1660757991480,"event_id":"$pXL83olxWyhWFr-ZO-Zow8py4_No2gLNLX6RU-RbPCg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Monadic `!` isn't really a problem. The biggest argument possible is around 170 or so, and my implementation can handle that (I'm using the algorithms from FreeBSD)","msgtype":"m.text","formatted_body":"Monadic !<\/code> isn't really a problem. The biggest argument possible is around 170 or so, and my implementation can handle that (I'm using the algorithms from FreeBSD)"}} {"origin_server_ts":1660758070706,"event_id":"$xye8YN6kmvhnmDWWdla3pDzlt1wMpFkQdHN9H1l8MGQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"However, my current implementation of `a!b` involves taking `!b` first, which will overflow with large arguments. Dyalog has no problem giving me the correct answer for `200!202` which suggests it's using a better algorithm that doesn't require intermediary huge numbers.","msgtype":"m.text","formatted_body":"However, my current implementation of a!b<\/code> involves taking !b<\/code> first, which will overflow with large arguments. Dyalog has no problem giving me the correct answer for 200!202<\/code> which suggests it's using a better algorithm that doesn't require intermediary huge numbers."}} {"origin_server_ts":1660758674936,"event_id":"$SaRTeFVZk3CCuZulP1ZEN8m5TdEIofevBTOzGb6zM34","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[This method](https://stackoverflow.com/a/19125294/18591979) works for integers, and I think if computed for floats it'll be correct for small integer `k`. I'm not sure what to do about large floats.","msgtype":"m.text","formatted_body":"This method<\/a> works for integers, and I think if computed for floats it'll be correct for small integer k<\/code>. I'm not sure what to do about large floats."}} {"origin_server_ts":1660758775329,"event_id":"$OQ6QJw40GBkaXrJmU4VOU-NfQ3_w-zYRDJZeu8X0Elo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(And as the comment says the `n == k` test is pointless: that case doesn't enter the loop anyway)","msgtype":"m.text","formatted_body":"(And as the comment says the n == k<\/code> test is pointless: that case doesn't enter the loop anyway)"}} {"origin_server_ts":1660759008907,"event_id":"$F52WS1Fk3ez_aCLUWXhqvN7LROnywE5M8lPJxiS2NQg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Here's [J's source](https://github.com/jsoftware/jsource/blob/master/jsrc/vbang.c). I believe `jtbindd` is the top-level method for real combinations.","msgtype":"m.text","formatted_body":"Here's J's source<\/a>. I believe jtbindd<\/code> is the top-level method for real combinations."}} {"origin_server_ts":1660839813518,"event_id":"$D5r0JiQMGl9CMwrtFWB46NF48mBqchNe0B7gBr7eM4k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I grabbed the integer algorithm from the google guava library and ported it over to Kotlin.","msgtype":"m.text"}} {"origin_server_ts":1660839834510,"event_id":"$crRphU3AShv_aLZAWM5tsteQsgHup8uQ8YwFd0Bca1k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So now I can compute binomials for any pair of 32-bit numbers.","msgtype":"m.text"}} {"origin_server_ts":1660839858782,"event_id":"$QgZldj84PKDJWMgvMj9qbjSGMN0FjV6vTPmPJ9_eCrw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I still fail on non-integer values though. I haven't looked at the J version yet.","msgtype":"m.text"}} {"origin_server_ts":1660840160779,"event_id":"$gfZ3unkCCmroC-tigr5AKZ13_NRtZRv4HuyEuVZ5Gas","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, I note that J can handle it, and I get the correct values with non-integer numbers as well.","msgtype":"m.text"}} {"origin_server_ts":1660840167334,"event_id":"$fAI443Z1UiCzf2ChiXXYmNKfyG3yQkHvj-S9_6-76js","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I will try to use it.","msgtype":"m.text"}} {"origin_server_ts":1660840293521,"event_id":"$P7HyHDnxHEsadJfM_6CuvDMCzDrOlxDqXaCOur0QOew","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hmm, the J code is licensed under GPL3","msgtype":"m.text"}} {"origin_server_ts":1660840309343,"event_id":"$PC2W8v3V7wingFJ6hPbVocnd58UguZoi2mvy4wMey3g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So I can't take the code, since I'm using the MIT license.","msgtype":"m.text"}} {"origin_server_ts":1662207887556,"event_id":"$doR2YMxAg0674ykZrs_kEVaRZ6ICNqOF2WAVmoSokWo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Array metadata is currently limited to axis labels. It would be nice if this could be made more generic.","msgtype":"m.text"}} {"origin_server_ts":1662207888317,"event_id":"$1mOWwpi6Xc-yw3bqZ7DZT75hkGlq1xi5EwN4GN0n49c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#((%2C1%E2%86%91)%20labels%20(1%200%E2%86%93))%20%22Foo%22%20%22Bar%22%20%22Blah%22%20%E2%8D%AA%205%203%20%E2%8D%B4%20%E2%8D%B3100","msgtype":"m.text"}} {"origin_server_ts":1662207910785,"event_id":"$TWee5z8T-YGbmr4PmWR7aw4iyG5kv-QdzqKRbrL7M-E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Someone suggested that an entire axis could have a label too, which can be useful when drawing graphs.","msgtype":"m.text"}} {"origin_server_ts":1662207953992,"event_id":"$w54kG-MLkBsQ1xljjKjaBpdITXIOiBWHu0fzjF9rBRg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Also, an entire array could have a name. And perhaps other types of metadata. Or perhaps that information is better attached to a symbol.","msgtype":"m.text"}} {"state_key":"@faunl:matrix.org","origin_server_ts":1662502718486,"event_id":"$dlKa7qTX35UdbQH3LUthtxe5ANjyaOnmA_NKRxOHk-0","sender":"@faunl:matrix.org","user_id":"@faunl:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/uEmNfahiwODtlssWcYUMdnPC","displayname":"Faun","membership":"join"}} {"state_key":"@m_algery:leohoo.xyz","origin_server_ts":1663126074312,"event_id":"$KS1yHjgiRB-yDhw2SQZNIVPTZaGPtaXvkB48Yny3v9I","sender":"@m_algery:leohoo.xyz","user_id":"@m_algery:leohoo.xyz","type":"m.room.member","content":{"avatar_url":null,"displayname":"m_algery","membership":"join"},"age_ts":1663126074728} {"state_key":"@m_algery:leohoo.xyz","origin_server_ts":1663126075486,"event_id":"$XzcnAXjes-qtrO6o9h-zYCYGQKe2VupCtPNKuEiVD7w","sender":"@m_algery:leohoo.xyz","user_id":"@m_algery:leohoo.xyz","prev_content":{"avatar_url":null,"displayname":"m_algery","membership":"join"},"type":"m.room.member","content":{"membership":"leave"},"replaces_state":"$KS1yHjgiRB-yDhw2SQZNIVPTZaGPtaXvkB48Yny3v9I"} {"state_key":"@faunl:matrix.org","origin_server_ts":1663192396136,"event_id":"$f7unDHOVeF_RTmspd8SLzCz7mq_G79sI3b_2G_NRhjw","sender":"@faunl:matrix.org","user_id":"@faunl:matrix.org","prev_content":{"avatar_url":"mxc://matrix.org/uEmNfahiwODtlssWcYUMdnPC","displayname":"Faun","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/lKbFyNgFsWNXdPpHgikeSBzB","displayname":"Faun","membership":"join"},"replaces_state":"$dlKa7qTX35UdbQH3LUthtxe5ANjyaOnmA_NKRxOHk-0"} {"state_key":"@faunl:matrix.org","origin_server_ts":1663596248579,"event_id":"$Pic0hTj6RT4K8rPbTHeb1rZvJFoPQqLlG1ZA111-2-I","sender":"@faunl:matrix.org","user_id":"@faunl:matrix.org","prev_content":{"avatar_url":"mxc://matrix.org/lKbFyNgFsWNXdPpHgikeSBzB","displayname":"Faun","membership":"join"},"type":"m.room.member","content":{"displayname":"Faun","membership":"join"},"replaces_state":"$f7unDHOVeF_RTmspd8SLzCz7mq_G79sI3b_2G_NRhjw"} {"state_key":"@faunl:matrix.org","origin_server_ts":1663602226699,"event_id":"$-hVLGTH0I80jwtDNYyjCdsVaNSYKICjzTIM5psF0v-8","sender":"@faunl:matrix.org","user_id":"@faunl:matrix.org","prev_content":{"displayname":"Faun","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/ZJfsIwIpMYTjJxnZSDnNpDNY","displayname":"Faun","membership":"join"},"replaces_state":"$Pic0hTj6RT4K8rPbTHeb1rZvJFoPQqLlG1ZA111-2-I"} {"state_key":"@faunl:matrix.org","origin_server_ts":1663602270941,"event_id":"$RbEBSD6L_RbuZZV3PQhonDvFm5xVIXWA0oW1pOC1XNs","sender":"@faunl:matrix.org","user_id":"@faunl:matrix.org","prev_content":{"avatar_url":"mxc://matrix.org/ZJfsIwIpMYTjJxnZSDnNpDNY","displayname":"Faun","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/zfPIegiQJosPyuPRpOGLhZyg","displayname":"Faun","membership":"join"},"replaces_state":"$-hVLGTH0I80jwtDNYyjCdsVaNSYKICjzTIM5psF0v-8"} {"state_key":"@wezl_:matrix.org","origin_server_ts":1665536654215,"event_id":"$hvU0FkLAPYnNe48m8pBS8lFj3QatkkTMCQ1gOV_2k2w","sender":"@wezl_:matrix.org","user_id":"@wezl_:matrix.org","prev_content":{"avatar_url":"mxc://matrix.org/lTayEfWpTmlptDdvHpxVHbmP","displayname":"Wezl","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/WgVYYtEkkYqzrGjhIFhUTQeh","displayname":"Wezl","membership":"join"},"replaces_state":"$9f5FNiAYbhkGJ3ZZf64PgPSOcIjWSAePbL89MNnDhic"} {"origin_server_ts":1665995104110,"event_id":"$62c8kX5lPFCiQByW8j7oi7W5Js5ms68u6FxBq1g0bFU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Finally implemented structural under (well, it only works for ↑ right now, but at least it's something).","msgtype":"m.text"}} {"origin_server_ts":1665995112391,"event_id":"$nhc_4mgrGUJkwJpcp-Ia5aBVWXm7mRqiGN3KxyPH0_M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#(1000%2B)%E2%8C%BE(1%204%201%E2%86%91)%203%204%205%20%E2%8D%B4%20%E2%8D%B31000","msgtype":"m.text"}} {"origin_server_ts":1666008351201,"event_id":"$Luqvtt9I0EMnF5gbuTMg462fhpZH8qte6XlOdrjGF9Q","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Looks good. Yeah, I think it's reasonable to start with some special cases. They'll still be useful when you have a general version since they're faster.","msgtype":"m.text","formatted_body":"Looks good. Yeah, I think it's reasonable to start with some special cases. They'll still be useful when you have a general version since they're faster."}} {"origin_server_ts":1666008394176,"event_id":"$cmOM5Fb_d-4PcMbtWs4yftMSuaQsByteUmYb3FjU-wM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"KAP is the first array language to do structural Under before computational, looks like?","msgtype":"m.text","formatted_body":"KAP is the first array language to do structural Under before computational, looks like?"}} {"origin_server_ts":1666014344116,"event_id":"$yGNtUnx9bp-mbeFJ3fgJ_aNyuoDwWKEqYWGvSTlrvro","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I just added support for under on inversible functions.","msgtype":"m.text"}} {"origin_server_ts":1666014394202,"event_id":"$6uJtU0xfD0QT2faL2ByYhpoWVormUEPerwdpPHHb1_Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"That gives me support for things like `(10×)⌾(1-⍨) 8`","msgtype":"m.text","formatted_body":"That gives me support for things like (10×)⌾(1-⍨) 8<\/code>"}} {"origin_server_ts":1666014424124,"event_id":"$4-GAmMCbDlmV2HRjIRMZRkxdAlWtFrNLQgWMmbYdp5Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's what you refer to as computational under, no?","msgtype":"m.text"}} {"origin_server_ts":1666014822744,"event_id":"$u_sLg0Ziz4tsx4meMB_w9zCe0XR-HGW3F9rMyl6WGNs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yes, that's right.","msgtype":"m.text","formatted_body":"Yes, that's right."}} {"origin_server_ts":1666014991327,"event_id":"$ctdhAV-ODjuavEVKF33gygfKFhpjFvWXc6j8ascTytM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#(10%C3%97)%E2%8C%BE(1-%E2%8D%A8)%208","msgtype":"m.text"}} {"origin_server_ts":1666015060348,"event_id":"$2b7G44CmOdznfUiFevdEeZaMAzGIl9ZDCpZe6aDzm-U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: using under, the nicest way to implement \"the number with the smallest absolut value\" is `⌊⌾|/`","msgtype":"m.text","formatted_body":"Marshall<\/a>: using under, the nicest way to implement "the number with the smallest absolut value" is ⌊⌾|/<\/code>"}} {"origin_server_ts":1666015104319,"event_id":"$HKVbR7T4YZsVVd5R6Ok-wX9GuYDuhXHgFJDs1eOonlE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now, that's pretty neat. However, if under is not available, what is the nicest way to express it in plain APL? My solutions are all pretty ugly.","msgtype":"m.text"}} {"origin_server_ts":1666015120587,"event_id":"$OCI9Tst1P_5YEgFiWO9irCNQHDIlWo_XWui-capIFVA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Marshall: using under, the nicest way to implement \"the number with the smallest absolute value\" is `⌊⌾|/`","msgtype":"m.text","formatted_body":"Marshall<\/a>: using under, the nicest way to implement "the number with the smallest absolute value" is ⌊⌾|/<\/code>"},"m.relates_to":{"event_id":"$2b7G44CmOdznfUiFevdEeZaMAzGIl9ZDCpZe6aDzm-U","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Marshall: using under, the nicest way to implement \"the number with the smallest absolute value\" is `⌊⌾|/`","msgtype":"m.text","formatted_body":" * Marshall<\/a>: using under, the nicest way to implement "the number with the smallest absolute value" is ⌊⌾|/<\/code>"}} {"origin_server_ts":1666015314336,"event_id":"$F-GdGoLT6pf2nZIGwTh8CID4G1rH6tEGoEnTQDAOrnU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I ended up with this monster: `{⍵[(⊣⍳⌊/)|⍵]}`","msgtype":"m.text","formatted_body":"I ended up with this monster: {⍵[(⊣⍳⌊/)|⍵]}<\/code>"}} {"origin_server_ts":1666015330265,"event_id":"$R9Aen8y3AgCx_rADfeQ2UAUZiTl7BGJfa6yYHo5EMck","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think you'd have to use index-of-smallest, something like `(⌊/⍳⊢)⍤|⊃⊢`. Or `⊃⍤⍒⍤|⊃⊢` if `⊃⍤⍒` is fast.","msgtype":"m.text","formatted_body":"I think you'd have to use index-of-smallest, something like (⌊/⍳⊢)⍤|⊃⊢<\/code>. Or ⊃⍤⍒⍤|⊃⊢<\/code> if ⊃⍤⍒<\/code> is fast."}} {"origin_server_ts":1666015350463,"event_id":"$UueG5-Ernk0MHeNmHpOVb9bUtG6kczYONYKuICqCm4M","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I think you'd have to use index-of-smallest, something like `(⌊/⍳⊢)⍤|⊃⊢`. Or `⊃⍤⍋⍤|⊃⊢` if `⊃⍤⍋` is fast.","msgtype":"m.text","formatted_body":"I think you'd have to use index-of-smallest, something like (⌊/⍳⊢)⍤|⊃⊢<\/code>. Or ⊃⍤⍋⍤|⊃⊢<\/code> if ⊃⍤⍋<\/code> is fast."},"m.relates_to":{"event_id":"$R9Aen8y3AgCx_rADfeQ2UAUZiTl7BGJfa6yYHo5EMck","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* I think you'd have to use index-of-smallest, something like `(⌊/⍳⊢)⍤|⊃⊢`. Or `⊃⍤⍋⍤|⊃⊢` if `⊃⍤⍋` is fast.","msgtype":"m.text","formatted_body":"* I think you'd have to use index-of-smallest, something like (⌊/⍳⊢)⍤|⊃⊢<\/code>. Or ⊃⍤⍋⍤|⊃⊢<\/code> if ⊃⍤⍋<\/code> is fast."}} {"origin_server_ts":1666015367655,"event_id":"$7w-DmTxR5XgKF_HYEZWFdNqOcHvcb8WuSu7_87ahm4M","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I think you'd have to use index-of-smallest, something like `(⊢⍳⌊/)⍤|⊃⊢`. Or `⊃⍤⍋⍤|⊃⊢` if `⊃⍤⍋` is fast.","msgtype":"m.text","formatted_body":"I think you'd have to use index-of-smallest, something like (⊢⍳⌊/)⍤|⊃⊢<\/code>. Or ⊃⍤⍋⍤|⊃⊢<\/code> if ⊃⍤⍋<\/code> is fast."},"m.relates_to":{"event_id":"$R9Aen8y3AgCx_rADfeQ2UAUZiTl7BGJfa6yYHo5EMck","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* I think you'd have to use index-of-smallest, something like `(⊢⍳⌊/)⍤|⊃⊢`. Or `⊃⍤⍋⍤|⊃⊢` if `⊃⍤⍋` is fast.","msgtype":"m.text","formatted_body":"* I think you'd have to use index-of-smallest, something like (⊢⍳⌊/)⍤|⊃⊢<\/code>. Or ⊃⍤⍋⍤|⊃⊢<\/code> if ⊃⍤⍋<\/code> is fast."}} {"origin_server_ts":1666015408746,"event_id":"$cM4jbGh62BRvv4vydZnX-Xh0gBCkm54ya83J6OgTRYM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I must say I much prefer `⌊⌾|/`","msgtype":"m.text","formatted_body":"I must say I much prefer ⌊⌾|/<\/code>"}} {"origin_server_ts":1666015500623,"event_id":"$EfPge2T47Q6VxCTc2iUVNrS7xVKjX5ZOa4MZo2Zw3zo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Wait, it wouldn't actually be correct because you'd always get the sign of `⍵`. So `¯2⌊⌾|4` would be 2.","msgtype":"m.text","formatted_body":"Wait, it wouldn't actually be correct because you'd always get the sign of ⍵<\/code>. So ¯2⌊⌾|4<\/code> would be 2."}} {"origin_server_ts":1666015555900,"event_id":"$csfwrqLeh7wFDwhxXEi_sqOC6YREp3fNiv0KrEKpiIU","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1666015601470,"event_id":"$vFmhFLWnghOGoUyI0zzB_RyPqufuZZ71u5bTqrLlP0k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$csfwrqLeh7wFDwhxXEi_sqOC6YREp3fNiv0KrEKpiIU","type":"m.room.redaction","content":{"redacts":"$csfwrqLeh7wFDwhxXEi_sqOC6YREp3fNiv0KrEKpiIU"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1666015562285,"event_id":"$WtghxeW7nDuJIkdR5qj05ERTBAhZIny3QDJU1iIwAX8","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1666015604763,"event_id":"$WvZ0z1-MCroqQmSUKL-DkX43xoq7JrazlA_iSg526bE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$WtghxeW7nDuJIkdR5qj05ERTBAhZIny3QDJU1iIwAX8","type":"m.room.redaction","content":{"redacts":"$WtghxeW7nDuJIkdR5qj05ERTBAhZIny3QDJU1iIwAX8"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1666015565545,"event_id":"$1QcMHd7JTpXeH8pVTkOlCyOh1gO-6cXf22L57X8mNq8","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1666015607916,"event_id":"$nPITTM0-mwde1A_bCxacmjBPqUooxlXsEPxqA2Lnmxw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$1QcMHd7JTpXeH8pVTkOlCyOh1gO-6cXf22L57X8mNq8","type":"m.room.redaction","content":{"redacts":"$1QcMHd7JTpXeH8pVTkOlCyOh1gO-6cXf22L57X8mNq8"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1666015590723,"event_id":"$wzFOdgVc5JqfJhs7ypyWYlFk5low-6qiqvAABH89UDc","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1666015610478,"event_id":"$rI-n9VsiqFdqTxduF2IPqKlPp69tMWVFTnD35uMTaAk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$wzFOdgVc5JqfJhs7ypyWYlFk5low-6qiqvAABH89UDc","type":"m.room.redaction","content":{"redacts":"$wzFOdgVc5JqfJhs7ypyWYlFk5low-6qiqvAABH89UDc"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1666015601470,"event_id":"$vFmhFLWnghOGoUyI0zzB_RyPqufuZZ71u5bTqrLlP0k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$csfwrqLeh7wFDwhxXEi_sqOC6YREp3fNiv0KrEKpiIU","type":"m.room.redaction","content":{"redacts":"$csfwrqLeh7wFDwhxXEi_sqOC6YREp3fNiv0KrEKpiIU"}} {"origin_server_ts":1666015604763,"event_id":"$WvZ0z1-MCroqQmSUKL-DkX43xoq7JrazlA_iSg526bE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$WtghxeW7nDuJIkdR5qj05ERTBAhZIny3QDJU1iIwAX8","type":"m.room.redaction","content":{"redacts":"$WtghxeW7nDuJIkdR5qj05ERTBAhZIny3QDJU1iIwAX8"}} {"origin_server_ts":1666015607916,"event_id":"$nPITTM0-mwde1A_bCxacmjBPqUooxlXsEPxqA2Lnmxw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$1QcMHd7JTpXeH8pVTkOlCyOh1gO-6cXf22L57X8mNq8","type":"m.room.redaction","content":{"redacts":"$1QcMHd7JTpXeH8pVTkOlCyOh1gO-6cXf22L57X8mNq8"}} {"origin_server_ts":1666015610478,"event_id":"$rI-n9VsiqFdqTxduF2IPqKlPp69tMWVFTnD35uMTaAk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$wzFOdgVc5JqfJhs7ypyWYlFk5low-6qiqvAABH89UDc","type":"m.room.redaction","content":{"redacts":"$wzFOdgVc5JqfJhs7ypyWYlFk5low-6qiqvAABH89UDc"}} {"origin_server_ts":1666015631218,"event_id":"$ehJ1mfp8xC-egSb2Q8E15x0HVHkowcuwxk8ODCb2KGA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`⊣⍟(<○|)´` works in BQN.","msgtype":"m.text","formatted_body":"⊣⍟(<○|)´<\/code> works in BQN."}} {"origin_server_ts":1666015641499,"event_id":"$ezx7NlJj_PNa6VQ7EqaaaJvIJMR01qR2-v10lS5NAew","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, I better actually implement under for these functions before proclaiming that this works. :-)","msgtype":"m.text"}} {"origin_server_ts":1666016033299,"event_id":"$KH4mSIjJl0DNCMjxGEt-Otit4pyWUVEkwFXsg-M-NFY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$ehJ1mfp8xC-egSb2Q8E15x0HVHkowcuwxk8ODCb2KGA"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> `⊣⍟(<○|)´` works in BQN.\n\nOh clever. It works because if the repeat count is zero, the right argument is returned?","msgtype":"m.text","formatted_body":"
        In reply to<\/a> @mlochbaum:matrix.org<\/a>
        ⊣⍟(<○|)´<\/code> works in BQN.<\/blockquote><\/mx-reply>Oh clever. It works because if the repeat count is zero, the right argument is returned?"}} {"origin_server_ts":1666016101571,"event_id":"$FvamZ9VVz3qzRizgctbbxndH0N5LPqMBFIRl0yMa1sY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah. You could write `<○|◶⊢\u203f⊣` but `⍟` is nicer.","msgtype":"m.text","formatted_body":"Yeah. You could write <○|◶⊢\u203f⊣<\/code> but ⍟<\/code> is nicer."}} {"origin_server_ts":1666016373409,"event_id":"$2rORB2jh7ezEclxjJgfyyePcWdOlIjGQa6L_f1WeZso","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$2b7G44CmOdznfUiFevdEeZaMAzGIl9ZDCpZe6aDzm-U"}},"format":"org.matrix.custom.html","body":"I don't think that can work in general? `⌾` won't have any clues about whether to re-add the sign from the left or right argument","msgtype":"m.text","formatted_body":"
        ↰ <\/a> loke<\/a> <\/mx-reply>I don't think that can work in general? ⌾<\/code> won't have any clues about whether to re-add the sign from the left or right argument"}} {"origin_server_ts":1666017798205,"event_id":"$Ecxlg3GbX6tI7QLY9IP3fK36cT8ra8yrKv2Td261LIY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Even `2⌊⌾|¯2` shows the problem pretty well.","msgtype":"m.text","formatted_body":"Even 2⌊⌾|¯2<\/code> shows the problem pretty well."}} {"origin_server_ts":1666017963028,"event_id":"$RbZOfkhnHUNBJoD3A9LnssmZKOmA803Uza9fdTyCPdE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"..that said, dzaima/BQN does implement `f⌾|`, but [it doesn't do](https://dzaima.github.io/paste/#0U1BQMH7U0/WoZ1/NofVGXCCsoKBghClkiCJkCAA#BQN) the thing you want for \"smallest absolute value\"","msgtype":"m.text","formatted_body":"..that said, dzaima/BQN does implement f⌾|<\/code>, but it doesn't do<\/a> the thing you want for \"smallest absolute value\""}} {"origin_server_ts":1666018560130,"event_id":"$DcsvDSLaKHXXgUlRUd_wwxVt2GzP4rj5jdUm_Er6jCM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Using `1⌈⌾|x` to force `|x` to be at least 1 is somewhat useful (`x` isn't allowed to be 0 which may or may not be good). Although `1⊸⌈⌾|x` is probably a more principled way to write that.","msgtype":"m.text","formatted_body":"Using 1⌈⌾|x<\/code> to force |x<\/code> to be at least 1 is somewhat useful (x<\/code> isn't allowed to be 0 which may or may not be good). Although 1⊸⌈⌾|x<\/code> is probably a more principled way to write that."}} {"origin_server_ts":1666018603677,"event_id":"$AyYENMPI7EIxxbA9oRp_0krKLJ-SB-s0AS5Uihwaa58","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"right, dyadic `⌾` is rarely useful","msgtype":"m.text","formatted_body":"right, dyadic ⌾<\/code> is rarely useful"}} {"origin_server_ts":1666018614521,"event_id":"$c-cD8L27eRX1bES5d7GuIb3xMe4Pq3TvugFeTiMJLog","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"right, dyadically invoked `F⌾G` is rarely useful","msgtype":"m.text","formatted_body":"right, dyadically invoked F⌾G<\/code> is rarely useful"},"m.relates_to":{"event_id":"$AyYENMPI7EIxxbA9oRp_0krKLJ-SB-s0AS5Uihwaa58","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* right, dyadically invoked `F⌾G` is rarely useful","msgtype":"m.text","formatted_body":"* right, dyadically invoked F⌾G<\/code> is rarely useful"}} {"origin_server_ts":1666018812495,"event_id":"$DhfJzAOAQdLoOA0v36gin8i_G8X9JDu53jFp8sAzYtk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I do have two dyadic `⌾(m⊸/)`s and one `⌾(i⊸⊏)` in the BQN compiler.","msgtype":"m.text","formatted_body":"I do have two dyadic ⌾(m⊸/)<\/code>s and one ⌾(i⊸⊏)<\/code> in the BQN compiler."}} {"origin_server_ts":1666019180393,"event_id":"$j5lBGRddTMsPNPAZA2m8cdzqHT8MZwqUcJB5LVSaces","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"huh, that's actually quite a lot (there are a total of 28 `⌾` in the BQN compiler)","msgtype":"m.text","formatted_body":"huh, that's actually quite a lot (there are a total of 28 ⌾<\/code> in the BQN compiler)"}} {"origin_server_ts":1666019246499,"event_id":"$y71fvFwkLs_mMCv2vjwetEBOW3o9Pk0I8wN6COB6szE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"there are also three `a⊸F⌾𝔾 𝕩` (from a grep of `⊸.⌾`) so that's as frequent","msgtype":"m.text","formatted_body":"there are also three a⊸F⌾𝔾 𝕩<\/code> (from a grep of ⊸.⌾<\/code>) so that's as frequent"}} {"origin_server_ts":1666019410136,"event_id":"$TaR5aqhhGTZmsQiizcRhY805VgbjyhYSBd8pacZkKmI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I feel that dyadic structural `⌾` is just weird though; I can't see it as anything other than two separate actions, of applying `𝔾` to the left arg, and then behaving as regular structural under","msgtype":"m.text","formatted_body":"I feel that dyadic structural ⌾<\/code> is just weird though; I can't see it as anything other than two separate actions, of applying 𝔾<\/code> to the left arg, and then behaving as regular structural under"}} {"origin_server_ts":1666019475502,"event_id":"$zQdCkutZqrQvAkwW-GekKInQ9T62YCrYS100eoze8Bc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Huh, that one's a lot less than I expected. Adding a `⊸` is a lot easier than figuring out how to duplicate `𝔾` so for the compiler the current way is clearly better.","msgtype":"m.text","formatted_body":"Huh, that one's a lot less than I expected. Adding a ⊸<\/code> is a lot easier than figuring out how to duplicate 𝔾<\/code> so for the compiler the current way is clearly better."}} {"origin_server_ts":1666019499787,"event_id":"$fnspHzcd1N80FnKZQhvTQJf4TaOcBmhXlv03DWGU-uM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"but then there's the elephant of `F⌾(array⊸G)`","msgtype":"m.text","formatted_body":"but then there's the elephant of F⌾(array⊸G)<\/code>"}} {"origin_server_ts":1666019520102,"event_id":"$tJAwmFYWMxRJHmzvZ7oGQSmp1cFtaz_fOacof1On71I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"my AoC has 65 `⌾`s, and 12 of those are `a⊸F⌾𝔾 𝕩`","msgtype":"m.text","formatted_body":"my AoC has 65 ⌾<\/code>s, and 12 of those are a⊸F⌾𝔾 𝕩<\/code>"}} {"origin_server_ts":1666019537483,"event_id":"$uAQ1zgd9H24aBDGbYOOoFliZaBbrauCZxtTEo3QCTHA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, I don't think the compiler is typical.","msgtype":"m.text","formatted_body":"Yeah, I don't think the compiler is typical."}} {"origin_server_ts":1666019684409,"event_id":"$fuxyEXn48C0xMSp8dr4unNDCIoTPAGgILLizwbaspQI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"This line in number parsing shows off dyadic Under well I think. You have powers of 10 `t` and exponent signs `ee`, so you need to incorporate those powers in a different way depending on whether the exponent sign is positive or negative (and ignore exponent 0).\n```\nt÷˜⌾((0>ee)⊸/)t×⌾((0t<\/code> and exponent signs ee<\/code>, so you need to incorporate those powers in a different way depending on whether the exponent sign is positive or negative (and ignore exponent 0).
        t÷˜⌾((0>ee)⊸/)t×⌾((0<ee)⊸/)\u2026<\/code><\/pre>"}}
        {"origin_server_ts":1666019924920,"event_id":"$2DmaBWca3eSs9rGaohQrAzVnEzulSTNUi3Ig7WsxXtQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Making `𝕨` an argument to `𝔾` would be useful a lot, but it just feels so weird. Might also make expressions harder to work with algebraically because a rule like `⌾G⌾H → ⌾(G H)` doesn't apply any more.","msgtype":"m.text","formatted_body":"Making 𝕨<\/code> an argument to 𝔾<\/code> would be useful a lot, but it just feels so weird. Might also make expressions harder to work with algebraically because a rule like ⌾G⌾H → ⌾(G H)<\/code> doesn't apply any more."}}
        {"origin_server_ts":1666020130389,"event_id":"$n49kdTIHese06XlxXdE7oIxu4xj4UCaIHNh4XUPzWKA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"hm, I hadn't even considered that `⌾G⌾H → ⌾(G H)` might be true for the current dyadic definition","msgtype":"m.text","formatted_body":"hm, I hadn't even considered that ⌾G⌾H → ⌾(G H)<\/code> might be true for the current dyadic definition"}}
        {"origin_server_ts":1666022432074,"event_id":"$Ecn0_Nz6I7L9N5EnHnN2gbqvVjZm4lx_YWHAYg1lY1Q","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":">  They are mostly used in advanced concept such as when defining new syntax. "},{"mimetype":"text/html","body":"
        \n

        They are mostly used in advanced concept such as when defining new syntax.<\/p>\n<\/blockquote>\n"}],"format":"org.matrix.custom.html","body":"> They are mostly used in advanced concept such as when defining new syntax. ","msgtype":"m.text","formatted_body":"

        \n

        They are mostly used in advanced concept such as when defining new syntax.<\/p>\n<\/blockquote>\n"}} {"origin_server_ts":1666022440838,"event_id":"$YEHdUK0MLp4ZSuDjxgqq73HWYdlaKV8qKgr6KJ8Xxmo","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"can one define new syntax using symbols in KAP?","msgtype":"m.text","org.matrix.msc1767.text":"can one define new syntax using symbols in KAP?"}} {"origin_server_ts":1666026563943,"event_id":"$BGuhqmaOpQZcYZZZaH9yLJHDBvHAVG1Vs_6KwHqgK8w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, of course course ","msgtype":"m.text"}} {"origin_server_ts":1666026708832,"event_id":"$QpuJ9IMD02HOi0xBTcxDYxj8J5K73aBN4hMvqx4mvw0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$YEHdUK0MLp4ZSuDjxgqq73HWYdlaKV8qKgr6KJ8Xxmo"}},"format":"org.matrix.custom.html","body":"> <@razetime:coven.palaiologos.rocks> can one define new syntax using symbols in KAP?\n\nIs there a particular syntax you were thinking of? I could give an example how to implement it. ","msgtype":"m.text","formatted_body":"

        In reply to<\/a> @razetime:coven.palaiologos.rocks<\/a>
        can one define new syntax using symbols in KAP?<\/blockquote><\/mx-reply>Is there a particular syntax you were thinking of? I could give an example how to implement it."}} {"origin_server_ts":1666026718365,"event_id":"$cXBf7svsC6mv7q3JKWUldYnyOIYrF9YzmIkKzFUtAr8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Yes, of course","msgtype":"m.text"},"m.relates_to":{"event_id":"$BGuhqmaOpQZcYZZZaH9yLJHDBvHAVG1Vs_6KwHqgK8w","rel_type":"m.replace"},"body":"* Yes, of course","msgtype":"m.text"}} {"origin_server_ts":1666026727611,"event_id":"$Iss3jyGZkMAznC6c9pEjSkZ8NpsmPTXjERAXZ5gbPaU","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"i'm just wondering how complicated it can get","msgtype":"m.text","org.matrix.msc1767.text":"i'm just wondering how complicated it can get"}} {"origin_server_ts":1666026771084,"event_id":"$MvTAMr45VNlmTx5vhxVjUy63vIhpad2UGEgUw-ppZOs","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"well, how are the if-elses implemented?","msgtype":"m.text","org.matrix.msc1767.text":"well, how are the if-elses implemented?"}} {"origin_server_ts":1666026785893,"event_id":"$JttqH0eYc8ELtIhieXgBFfiHbo1Q8rphRmYJrfNJHOs","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"we can start with that","msgtype":"m.text","org.matrix.msc1767.text":"we can start with that"}} {"origin_server_ts":1666026944102,"event_id":"$cCKikLKPBzUqTJJ1Cm-jOb0g8E_SXye5gpBfkLdS_hk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Did you look at the code? ","msgtype":"m.text"}} {"origin_server_ts":1666026946880,"event_id":"$Zd5-umT_zeEM7eONev_jHuTLbwa2CAJx4bcG30KmAvM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://codeberg.org/loke/array/src/branch/master/array/standard-lib/structure.kap#L3","msgtype":"m.text"}} {"origin_server_ts":1666027030818,"event_id":"$_6A2aIGg5XxkUBuTHiMCXLVJbrP6PJ94bxomLtp-0aI","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"wowo","msgtype":"m.text","org.matrix.msc1767.text":"wowo"}} {"origin_server_ts":1666027036975,"event_id":"$2qS9OHd3hF-cxe-UZH0FNCcFj6pa2QHbfq8Ybtz3oPc","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"so these are effectively macros?","msgtype":"m.text","org.matrix.msc1767.text":"so these are effectively macros?"}} {"origin_server_ts":1666027040966,"event_id":"$eS8norRhr5p2OeQoS2OXenHmR9ezN8ujsgBYBxMQ3YA","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"we have gensym and such?","msgtype":"m.text","org.matrix.msc1767.text":"we have gensym and such?"}} {"origin_server_ts":1666027091846,"event_id":"$MjPG0qOX5jnHIExbI9F-nSfDr5hmCUXgvXi-tIhqjtw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Kinda. ","msgtype":"m.text"}} {"origin_server_ts":1666027107468,"event_id":"$6soX_WQFPXO92vB15ZK-9IU5qDZicgJfS1grdxNb8a8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Therese not full macros actually. That may come later. ","msgtype":"m.text"}} {"origin_server_ts":1666027125996,"event_id":"$nkG0b-O6SpZ3n0gGfcCDGHtgWmSN4okrHueonaDfbUM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"These are the more like fexprs in old lisp. ","msgtype":"m.text"}} {"origin_server_ts":1666027143160,"event_id":"$r_aUIdw7dQnSyn5YPcWiTolepTopaVfzsiKyk3Jv3Nc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No sorry. ","msgtype":"m.text"}} {"origin_server_ts":1666027152159,"event_id":"$6VP6yyNSMRuJw9esN1i5wZEfeq4l55u4vBbr5odhVO0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Fexprs were more powerful. ","msgtype":"m.text"}} {"origin_server_ts":1666027216091,"event_id":"$5WQtH33RM8tccb9_30xDr0qfAj4XPCiHYAozwCBmMeg","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"so basically they get raw code as a nested list?","msgtype":"m.text","org.matrix.msc1767.text":"so basically they get raw code as a nested list?"}} {"origin_server_ts":1666027224525,"event_id":"$mCnjBGg04Vfv3Ie75Lqdsj_YtfL0xNKIIoYKkqLX988","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"They're more like instructions to the parser to match certain patterns and generate special code to be executed when those patterns are seen. ","msgtype":"m.text"}} {"origin_server_ts":1666027304479,"event_id":"$3MFlqJaguIC2fN4Tv5yT7gyH8xuJjFQtDpTKSdxnZLs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No, that's what I might implement if needed at some point. Right now, you cab only say that a custom syntax element contains \"code\" and that code will be returned as a lambda that can be callers later. ","msgtype":"m.text"}} {"origin_server_ts":1666027343467,"event_id":"$ZjWz6W80LQbO7j8vEF-npUKwoCfZy0P1N0O3cVNm6rw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So there is no way to inspect code, just essentially create templates where code is part of of them. ","msgtype":"m.text"}} {"origin_server_ts":1666027550847,"event_id":"$hMjtVDzcCz2xZK8QQSdH7SFx_mAEq9IXzfE_LlNNntM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What I want to do is to deprecate the current model, and instead have a way to run code during parsing, so I can drive the custom syntax directly from KAP code, rather than define templates using what is effectively a second programming language. ","msgtype":"m.text"}} {"origin_server_ts":1666027566317,"event_id":"$3G8QIJBwa4PDltLhJH8CP12Cpa1ZaKR1exWnyrCVTQU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Essentially making it much more like Lisp ","msgtype":"m.text"}} {"origin_server_ts":1666027612825,"event_id":"$34-v6X2J3Ke_QVqINdhR7oSE2yDGKDJAtM3-tpIYj2I","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"oh, so it's a sort of syntactic sugar for higher order functions?","msgtype":"m.text","org.matrix.msc1767.text":"oh, so it's a sort of syntactic sugar for higher order functions?"}} {"origin_server_ts":1666027834736,"event_id":"$xnLIfdj1X5QS_eXhC2tXFSKN_Iw5UcJmqs-FXDBUu5A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, pretty much. ","msgtype":"m.text"}} {"origin_server_ts":1666027887892,"event_id":"$7FKiEKpbWeYtD121RfafgXiEFWSQLjWH0N3Gk4uWtkQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's enough to implement the basic flow control functions that I need, but there are some more pretty syntactic structures I want to create which the current system isn't capable of handling. ","msgtype":"m.text"}} {"origin_server_ts":1666028344772,"event_id":"$CP4bcQ1Cbf5SxYuuTkorL3mUoEd1muMXuxtQGuZ2_sY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'd also like to add the capability to hook into the tokeniser, similar to reader macros in Lisp.","msgtype":"m.text"}} {"origin_server_ts":1666030395585,"event_id":"$aA71GMs_zTI3ERb-pBogHksmvA7W24xhBNDfYI8dWKQ","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"reader macros seems like a massive task to implement","msgtype":"m.text","org.matrix.msc1767.text":"reader macros seems like a massive task to implement"}} {"origin_server_ts":1666030899955,"event_id":"$jOp__tGG_fR4sZcirU7npK_I1ri2xRfHxIABRFCvmtE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Not really. The reader macro would work on the tokeniser level, which is a *much* simpler piece of code than the Parser.","msgtype":"m.text","formatted_body":"Not really. The reader macro would work on the tokeniser level, which is a much<\/em> simpler piece of code than the Parser."}} {"origin_server_ts":1666030903288,"event_id":"$YAombs93qqUTHxc-aL1gv9ogPitIgmvyJr0FPVgaHLM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Not really. The reader macro would work on the tokeniser level, which is a _much_ simpler piece of code than the parser.","msgtype":"m.text","formatted_body":"Not really. The reader macro would work on the tokeniser level, which is a much<\/em> simpler piece of code than the parser."},"m.relates_to":{"event_id":"$jOp__tGG_fR4sZcirU7npK_I1ri2xRfHxIABRFCvmtE","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Not really. The reader macro would work on the tokeniser level, which is a _much_ simpler piece of code than the parser.","msgtype":"m.text","formatted_body":" * Not really. The reader macro would work on the tokeniser level, which is a much<\/em> simpler piece of code than the parser."}} {"origin_server_ts":1666257143347,"event_id":"$4Klr0XZpShjhW_ESxj5mUYMmz7jX1b-zeflMNIx5f_A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: I have a question about under. Should the following be legal code, and if so, what should it return: `{3 4}⌾| 10 11 ¯12`","msgtype":"m.text","formatted_body":"
        Marshall<\/a>: I have a question about under. Should the following be legal code, and if so, what should it return: {3 4}⌾| 10 11 ¯12<\/code>"}} {"origin_server_ts":1666257154258,"event_id":"$9iLthAxkjSLn7XUKxuXsKD-0qT9epf6FLq0f-IDqC9U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And if not, should the following be allowed?","msgtype":"m.text"}} {"origin_server_ts":1666257175608,"event_id":"$t9VtFk0chmWCWSfanKH8Nm7pS4Bx3rPCGuOQ9BVbKdk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`{3 4 (5 6)}⌾| 10 11 ¯12`","msgtype":"m.text","formatted_body":"{3 4 (5 6)}⌾| 10 11 ¯12<\/code>"}} {"origin_server_ts":1666259239769,"event_id":"$lkBwkxGeXalHWZSaoof5jrXAQPzPwt3VOB3wF8flTkw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`⌾|` is a weird case that's neither strictly computational under (i.e. which doesn't care about the original argument) nor structural under (i.e. which doesn't care about element values in the array, and requires knowledge of the original array), so there isn't much in strict rules that has","msgtype":"m.text","formatted_body":"⌾|<\/code> is a weird case that's neither strictly computational under (i.e. which doesn't care about the original argument) nor structural under (i.e. which doesn't care about element values in the array, and requires knowledge of the original array), so there isn't much in strict rules that has"}} {"origin_server_ts":1666259671497,"event_id":"$4PUwvPccz2oLAiQzQO2P9fmwVfl7opJpGG6hXdkI1jU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the main rule of Under is`(F G x) ≡ G F⌾G x`; that'll match if the equation in question returns `3 4 (¯5 ¯6)`, `3 4 (5 6)`, `¯3 ¯4 (¯5 6)`, etc, so any of those is a \"valid\" result","msgtype":"m.text","formatted_body":"the main rule of Under is(F G x) ≡ G F⌾G x<\/code>; that'll match if the equation in question returns 3 4 (¯5 ¯6)<\/code>, 3 4 (5 6)<\/code>, ¯3 ¯4 (¯5 6)<\/code>, etc, so any of those is a \"valid\" result"}} {"origin_server_ts":1666260616935,"event_id":"$Fy-kBIBiw0FYpNwmpy118CNA6y3Xrm9--i8orYlpG1s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Does that rule work? It doesn't work here: https://kapdemo.dhsdevelopments.com/clientweb2/#io%3Aprintln%20a%20%E2%86%90%20(1%E2%86%93)%E2%8C%BE(2%E2%86%91)%20%E2%8D%B34%0Aio%3Aprintln%20b%20%E2%86%90%20(2%E2%86%91)%20(1%E2%86%93)%20%E2%8D%B34%0Aa%20%E2%89%A1%20b","msgtype":"m.text"}} {"origin_server_ts":1666260723163,"event_id":"$DFWlLD-hXzHJgLIaW7comur4b9w3wz9ePty1p86ysc8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"first line should be `io:println a ← (2↑) (1↓)⌾(2↑) ⍳4`","msgtype":"m.text","formatted_body":"first line should be io:println a ← (2↑) (1↓)⌾(2↑) ⍳4<\/code>"}} {"origin_server_ts":1666261340399,"event_id":"$RSxQeFTuFqnIFsfvCsUw3ZrbRkSIPolHzjBRIZu61E4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh I see. Thanks.","msgtype":"m.text"}} {"state_key":"@mondra:matrix.org","origin_server_ts":1667336329410,"event_id":"$rsQ5V7oMRFnclt_L5ZkiTvjEvN3osgs9DRSmhOZg9ts","sender":"@mondra:matrix.org","user_id":"@mondra:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/WepPggUYvGrHjAsVDbWxvzTV","displayname":"mondra","membership":"join"}} {"state_key":"@eris:the-apothecary.club","origin_server_ts":1667755151653,"event_id":"$ojgweQdKFVBT6FMZP1J6LrUDwYBBSTRa7SkIWaNntoY","sender":"@eris:the-apothecary.club","user_id":"@eris:the-apothecary.club","prev_content":{"avatar_url":"mxc://the-apothecary.club/0e69f65fbecb250e6cfb1f491df91285a9402891","displayname":"eris","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://the-apothecary.club/0e69f65fbecb250e6cfb1f491df91285a9402891","displayname":"eris (Old)","membership":"join"},"replaces_state":"$EPlMz425yc1YHoJpSSpszwI8izG_TjOxtNERUJJEHi4"} {"state_key":"@eris:the-apothecary.club","origin_server_ts":1667757587012,"event_id":"$WMMKTqW49sdt0-vaYzJQUkfBNNZLd93SvMGC_NDujYw","sender":"@eris:the-apothecary.club","user_id":"@eris:the-apothecary.club","prev_content":{"avatar_url":"mxc://the-apothecary.club/0e69f65fbecb250e6cfb1f491df91285a9402891","displayname":"eris (Old)","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://the-apothecary.club/0e69f65fbecb250e6cfb1f491df91285a9402891","displayname":"eris","membership":"join"},"replaces_state":"$ojgweQdKFVBT6FMZP1J6LrUDwYBBSTRa7SkIWaNntoY"} {"origin_server_ts":1670005837192,"event_id":"$Vj71HIDBBM50BdlIgNDoCQXrQ4fsZDaMqakovq0u1gA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Day one of advent of code: https://functional.cafe/@loke/109445483566686566","msgtype":"m.text","org.matrix.msc1767.text":"Day one of advent of code: https://functional.cafe/@loke/109445483566686566"}} {"origin_server_ts":1670006359135,"event_id":"$QG5MpYVnMTep2SQy77o5-x2g6B15JDLujflpWWIPGLs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Cool! I'd have `⍬∘≢¨⍛⊂` for `⍵ ⊂⍨ (⊂⍬)≢¨⍵`, if `∘` works for that.","msgtype":"m.text","formatted_body":"Cool! I'd have ⍬∘≢¨⍛⊂<\/code> for ⍵ ⊂⍨ (⊂⍬)≢¨⍵<\/code>, if ∘<\/code> works for that."}} {"origin_server_ts":1670006759836,"event_id":"$1DhUACTsVV_YtlZMVt7v5IO82wWOefcJDAg86uJB2iM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No, sadly you can't attach an operator to a value.","msgtype":"m.text","org.matrix.msc1767.text":"No, sadly you can't attach an operator to a value."}} {"origin_server_ts":1670006875315,"event_id":"$_Q1h-cNWWZzf6QLfRwyz-Ygo3w6RFg9zcqCfC1BJz2I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"An operator always binds to a function. It can take value arguments on the right (which actually carries some parsing problems that I don't really like)","msgtype":"m.text","org.matrix.msc1767.text":"An operator always binds to a function. It can take value arguments on the right (which actually carries some parsing problems that I don't really like)"}} {"origin_server_ts":1670006938713,"event_id":"$WZPJj8Z5XqBGEXhPukRWFFTk5wLbYEVf4BqhPPg2GTA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Well, there's `(0<≢)` then. Or I guess just `(⍬≢⊢)`, come to think of it.","msgtype":"m.text","formatted_body":"Well, there's (0<≢)<\/code> then. Or I guess just (⍬≢⊢)<\/code>, come to think of it."}} {"origin_server_ts":1670006967013,"event_id":"$zuIDjb-fKbSYJM9iEXO8OyGC9w5w5oJy0MP_vVjOGQo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Or `≢∘⍬`?","msgtype":"m.text","formatted_body":"Or ≢∘⍬<\/code>?"}} {"origin_server_ts":1670007887078,"event_id":"$5qbYFk02r3HLifLfkaildUzQd4ThsH_Rf2UsWfjvvzA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"`(⍬≢⊢)` parses as `(⍬(≢⊢))`, which a left-bound 0 to a 2-train."},{"mimetype":"text/html","body":"(⍬≢⊢)<\/code> parses as (⍬(≢⊢))<\/code>, which a left-bound 0 to a 2-train."}],"format":"org.matrix.custom.html","body":"`(⍬≢⊢)` parses as `(⍬(≢⊢))`, which a left-bound 0 to a 2-train.","msgtype":"m.text","formatted_body":"(⍬≢⊢)<\/code> parses as (⍬(≢⊢))<\/code>, which a left-bound 0 to a 2-train."}} {"origin_server_ts":1670007939091,"event_id":"$i1tR4npDGOhrcHXHrb_WByCX6Smb5XBjBu8n4-Zq7ZY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"So you'd have to write it as `((⍬≢)⊢)¨`"},{"mimetype":"text/html","body":"So you'd have to write it as ((⍬≢)⊢)¨<\/code>"}],"format":"org.matrix.custom.html","body":"So you'd have to write it as `((⍬≢)⊢)¨`","msgtype":"m.text","formatted_body":"So you'd have to write it as ((⍬≢)⊢)¨<\/code>"}} {"origin_server_ts":1670007972705,"event_id":"$pj_3pQ4mfQJbMlUp_SxP1iFBxedDEmDLHpfeGbWyUUk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And I have to admit that perhaps left arguments should bind stronger than train.","msgtype":"m.text","org.matrix.msc1767.text":"And I have to admit that perhaps left arguments should bind stronger than train."}} {"origin_server_ts":1670007974205,"event_id":"$i9_1Cu0LRGxqVYaSEWhRU2mnG5tPtRL6XQKLHBzFdxk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"And I have to admit that perhaps left arguments should bind stronger than trains.","msgtype":"m.text","org.matrix.msc1767.text":"And I have to admit that perhaps left arguments should bind stronger than trains."},"m.relates_to":{"event_id":"$pj_3pQ4mfQJbMlUp_SxP1iFBxedDEmDLHpfeGbWyUUk","rel_type":"m.replace"},"body":" * And I have to admit that perhaps left arguments should bind stronger than trains.","msgtype":"m.text","org.matrix.msc1767.text":" * And I have to admit that perhaps left arguments should bind stronger than trains."}} {"origin_server_ts":1670008018943,"event_id":"$0GTOuOf5m5oywXghv4GG8BTwX6oqCKD9VFQluoRqgVA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Anyway, in practice you don't need the tack of course, so `(⍬≢)¨` works fine."},{"mimetype":"text/html","body":"Anyway, in practice you don't need the tack of course, so (⍬≢)¨<\/code> works fine."}],"format":"org.matrix.custom.html","body":"Anyway, in practice you don't need the tack of course, so `(⍬≢)¨` works fine.","msgtype":"m.text","formatted_body":"Anyway, in practice you don't need the tack of course, so (⍬≢)¨<\/code> works fine."}} {"origin_server_ts":1670008046424,"event_id":"$nAKJP0H2R0rivguhiuMX2nYbl270o19UBpTD9B-qm1o","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, I forgot that the 2-train form worked here.","msgtype":"m.text","formatted_body":"Yeah, I forgot that the 2-train form worked here."}} {"origin_server_ts":1670054070982,"event_id":"$Aqgw415NBD0nXRnoJXZKyCUgLk4cqbfLNPvKbEwbo5I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And here's my solution for day 2: https://functional.cafe/@loke/109448618849864493","msgtype":"m.text","org.matrix.msc1767.text":"And here's my solution for day 2: https://functional.cafe/@loke/109448618849864493"}} {"origin_server_ts":1670054096508,"event_id":"$IIWsJ0ivKxPqy6arrHUoODx2e0-g76Pz2bTyCMuYluo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think it would be a lot cleaner in BQN because there is no need to do explicit conversion to codepoints.","msgtype":"m.text","org.matrix.msc1767.text":"I think it would be a lot cleaner in BQN because there is no need to do explicit conversion to codepoints."}} {"origin_server_ts":1670226371616,"event_id":"$ZXRz7lAQxXy27gZ_Klnoj2i2EYXoqpMq8ThlDi8HI8Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: I have a question about structural under. I believe that the following `(100+)⌾(1 0⫽) 3 4` should result in `103 4`."},{"mimetype":"text/html","body":"Marshall<\/a>: I have a question about structural under. I believe that the following (100+)⌾(1 0⫽) 3 4<\/code> should result in 103 4<\/code>."}],"format":"org.matrix.custom.html","body":"Marshall: I have a question about structural under. I believe that the following `(100+)⌾(1 0⫽) 3 4` should result in `103 4`.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I have a question about structural under. I believe that the following (100+)⌾(1 0⫽) 3 4<\/code> should result in 103 4<\/code>."}} {"origin_server_ts":1670226402143,"event_id":"$beFScDC1XAop80exXLypDqgeI7Vo9b7w4HVyOtw5zQo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"And `(100+)⌾(2 0⫽) 3 4` should be `103 103 4`."},{"mimetype":"text/html","body":"And (100+)⌾(2 0⫽) 3 4<\/code> should be 103 103 4<\/code>."}],"format":"org.matrix.custom.html","body":"And `(100+)⌾(2 0⫽) 3 4` should be `103 103 4`.","msgtype":"m.text","formatted_body":"And (100+)⌾(2 0⫽) 3 4<\/code> should be 103 103 4<\/code>."}} {"origin_server_ts":1670226430430,"event_id":"$Qt1gIi-IrZcO8VpXNesz9XeG9iI41z7ScTmx8y0h8-0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"However, is there a logical result for `(100 101+)⌾(2 0⫽) 3 4`?"},{"mimetype":"text/html","body":"However, is there a logical result for (100 101+)⌾(2 0⫽) 3 4<\/code>?"}],"format":"org.matrix.custom.html","body":"However, is there a logical result for `(100 101+)⌾(2 0⫽) 3 4`?","msgtype":"m.text","formatted_body":"However, is there a logical result for (100 101+)⌾(2 0⫽) 3 4<\/code>?"}} {"origin_server_ts":1670226448064,"event_id":"$fYZvMJ69rN1hkl9Eo6okd8nADruwbn-hQ2R2Rj0oO8Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And if not, should option 2 even be allowed?","msgtype":"m.text","org.matrix.msc1767.text":"And if not, should option 2 even be allowed?"}} {"origin_server_ts":1670226481095,"event_id":"$2ihA0I64rpveE_8iGjN6hvBF-ooqrOlkL8_Tosc4g8Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Perhaps structural under for `⫽` should only be allowed as long as the selector only contains 0 and 1."},{"mimetype":"text/html","body":"Perhaps structural under for ⫽<\/code> should only be allowed as long as the selector only contains 0 and 1."}],"format":"org.matrix.custom.html","body":"Perhaps structural under for `⫽` should only be allowed as long as the selector only contains 0 and 1.","msgtype":"m.text","formatted_body":"Perhaps structural under for ⫽<\/code> should only be allowed as long as the selector only contains 0 and 1."}} {"origin_server_ts":1670227009157,"event_id":"$9qERIlpXr5al6I9sVBCajPsHQgGbYsbZdqaAz5085iU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$beFScDC1XAop80exXLypDqgeI7Vo9b7w4HVyOtw5zQo"}},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> And `(100+)⌾(2 0⫽) 3 4` should be `103 103 4`.\n\nno, it should be `103 4`; `2 0⫽103 103 4` doesn't give back the argument originally given to `(100+)`","msgtype":"m.text","formatted_body":"
        In reply to<\/a> @loke:dhsdevelopments.com<\/a>
        And (100+)⌾(2 0⫽) 3 4<\/code> should be 103 103 4<\/code>.<\/blockquote><\/mx-reply>no, it should be 103 4<\/code>; 2 0⫽103 103 4<\/code> doesn't give back the argument originally given to (100+)<\/code>"}} {"origin_server_ts":1670227570470,"event_id":"$2QLZ0ZI0y_t9BHrfmzPxebvBrDBW7hTvDn8cZjvvrQU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: Oh wow. OK, you're right."},{"mimetype":"text/html","body":"
        dzaima<\/a>: Oh wow. OK, you're right."}],"format":"org.matrix.custom.html","body":"dzaima: Oh wow. OK, you're right.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Oh wow. OK, you're right."}} {"origin_server_ts":1670227608217,"event_id":"$pirPXUj5WyFf_vjNGVN9Qp0-o80QGG4sQxcte0Qg2HU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"But... I'm not sure how to implement this properly. What is the rule that the under-function for `⫽` follow?"},{"mimetype":"text/html","body":"But... I'm not sure how to implement this properly. What is the rule that the under-function for ⫽<\/code> follow?"}],"format":"org.matrix.custom.html","body":"But... I'm not sure how to implement this properly. What is the rule that the under-function for `⫽` follow?","msgtype":"m.text","formatted_body":"But... I'm not sure how to implement this properly. What is the rule that the under-function for ⫽<\/code> follow?"}} {"origin_server_ts":1670227615145,"event_id":"$0ZyhLpENmRDtwjEqZ6muA8V9taV3e2hKNM0ZObucglE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"But... I'm not sure how to implement this properly. What is the rule that the under-function for `⫽` should follow?"},{"mimetype":"text/html","body":"But... I'm not sure how to implement this properly. What is the rule that the under-function for ⫽<\/code> should follow?"}],"format":"org.matrix.custom.html","body":"But... I'm not sure how to implement this properly. What is the rule that the under-function for `⫽` should follow?","msgtype":"m.text","formatted_body":"But... I'm not sure how to implement this properly. What is the rule that the under-function for ⫽<\/code> should follow?"},"m.relates_to":{"event_id":"$pirPXUj5WyFf_vjNGVN9Qp0-o80QGG4sQxcte0Qg2HU","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * But... I'm not sure how to implement this properly. What is the rule that the under-function for `⫽` should follow?"},{"mimetype":"text/html","body":" * But... I'm not sure how to implement this properly. What is the rule that the under-function for ⫽<\/code> should follow?"}],"format":"org.matrix.custom.html","body":" * But... I'm not sure how to implement this properly. What is the rule that the under-function for `⫽` should follow?","msgtype":"m.text","formatted_body":" * But... I'm not sure how to implement this properly. What is the rule that the under-function for ⫽<\/code> should follow?"}} {"origin_server_ts":1670239645755,"event_id":"$ix6BqXux77ys-4c46QPmokoTU7WD1RNcQ6d3ZrQIQLk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"there are options; one would be the proper thing of checking that all repeated input elements are repeated in the result of the left operand too too, that is, check that all elements that map to the same final result element are equivalent (what BQN does); then there's the option of just not implementing `⌾(nonBooleanArray⫽)`, since I don't think there'd be much use for it. (and there's also the option of not caring about what happens if the elements don't match, i.e. allow `(100 101+)⌾(2 0⫽) 3 4` to be either 103 or 104 depending on how the interpreter feels; but this does break The Rule)","msgtype":"m.text","formatted_body":"there are options; one would be the proper thing of checking that all repeated input elements are repeated in the result of the left operand too too, that is, check that all elements that map to the same final result element are equivalent (what BQN does); then there's the option of just not implementing ⌾(nonBooleanArray⫽)<\/code>, since I don't think there'd be much use for it. (and there's also the option of not caring about what happens if the elements don't match, i.e. allow (100 101+)⌾(2 0⫽) 3 4<\/code> to be either 103 or 104 depending on how the interpreter feels; but this does break The Rule)"}} {"origin_server_ts":1670239884121,"event_id":"$7LedeBUpZwa92wWaDybqE0qUnnmNzcFmz9ClGo084Oc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think only supporting boolean arrays seems like the most straightforward approach. Thanks a lot.","msgtype":"m.text","org.matrix.msc1767.text":"I think only supporting boolean arrays seems like the most straightforward approach. Thanks a lot."}} {"origin_server_ts":1670239912536,"event_id":"$Pzf4cbK4xapm1ps4Pa2GbnSfBqGezvZYkS_z3PSFH44","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it's definitely the easiest one (and what dzaima/APL & dzaima/BQN do)","msgtype":"m.text","formatted_body":"it's definitely the easiest one (and what dzaima/APL & dzaima/BQN do)"}} {"origin_server_ts":1670243409811,"event_id":"$5Lq2A_8EI3EIJh6DLaY7xpG7uiiyN3jvoUAEPeVFsTM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks. I'll do the same.","msgtype":"m.text","org.matrix.msc1767.text":"Thanks. I'll do the same."}} {"origin_server_ts":1670243898546,"event_id":"$c7WTUaIM31zFPyKDekh1-jt4FzGaAgCVfJL-ubMnpVI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"You could state if values in the inner result should go to the same place, the one with a larger index there wins. So it doesn't have to be implementation-defined, just unprincipled.","msgtype":"m.text","formatted_body":"You could state if values in the inner result should go to the same place, the one with a larger index there wins. So it doesn't have to be implementation-defined, just unprincipled."}} {"origin_server_ts":1670243970231,"event_id":"$_r76FU98O0LlZX6a6SNxvJbokqxXIEoLbaCr-i90eas","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The main problem is selection, where it's not that easy to tell there are duplicate indices.","msgtype":"m.text","formatted_body":"The main problem is selection, where it's not that easy to tell there are duplicate indices."}} {"state_key":"@wyb-pip:matrix.org","origin_server_ts":1670484905334,"event_id":"$fvg8OY0Uapy4hfbKFYufpET8LcBac0_YrYksPOBw16Q","sender":"@wyb-pip:matrix.org","user_id":"@wyb-pip:matrix.org","type":"m.room.member","content":{"displayname":"&pip","membership":"join"}} {"state_key":"@wyb-pip:matrix.org","origin_server_ts":1670484905954,"event_id":"$rlb89VZN5niK9t9Hi8B4ILdaqrN8dlGcjYDcKVRGLnU","sender":"@wyb-pip:matrix.org","user_id":"@wyb-pip:matrix.org","prev_content":{"displayname":"&pip","membership":"join"},"type":"m.room.member","content":{"membership":"leave"},"replaces_state":"$fvg8OY0Uapy4hfbKFYufpET8LcBac0_YrYksPOBw16Q"} {"origin_server_ts":1670654422379,"event_id":"$5L-y0FlFNHXuTIs0IVmAQG6mNoS-l5ha7rsBwxNJ59s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I created a KAP version of the snowflake programming challenge. https://functional.cafe/@loke/109487995368380662","msgtype":"m.text","org.matrix.msc1767.text":"I created a KAP version of the snowflake programming challenge. https://functional.cafe/@loke/109487995368380662"}} {"origin_server_ts":1670654453633,"event_id":"$CWr9fsBkhGn-YcS5lX4RYLOOrJmO_nqm4IoCjCjlTHc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: what would a BQN version look like?"},{"mimetype":"text/html","body":"Marshall<\/a>: what would a BQN version look like?"}],"format":"org.matrix.custom.html","body":"Marshall: what would a BQN version look like?","msgtype":"m.text","formatted_body":"Marshall<\/a>: what would a BQN version look like?"}} {"origin_server_ts":1670654468775,"event_id":"$MY7lzQDXpxyTa_nLsUck-wheLSZuO6U4wDWDiA4mlB0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"My version isn't very good, and I'm sure there are much more efficient ways to handle it.","msgtype":"m.text","org.matrix.msc1767.text":"My version isn't very good, and I'm sure there are much more efficient ways to handle it."}} {"origin_server_ts":1670654754835,"event_id":"$_Z6OjstF7a5jBrJh33u01I446I0byOY9xFCkXtvlNyI","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$5L-y0FlFNHXuTIs0IVmAQG6mNoS-l5ha7rsBwxNJ59s"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@loke:dhsdevelopments.com> I created a KAP version of the snowflake programming challenge. https://functional.cafe/@loke/109487995368380662\n\nlink there doesn't seem to work."},{"mimetype":"text/html","body":"
        In reply to<\/a> @loke:dhsdevelopments.com<\/a>
        I created a KAP version of the snowflake programming challenge. https://functional.cafe/@loke/109487995368380662<\/blockquote><\/mx-reply>link there doesn't seem to work."}],"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> I created a KAP version of the snowflake programming challenge. https://functional.cafe/@loke/109487995368380662\n\nlink there doesn't seem to work.","msgtype":"m.text","formatted_body":"
        In reply to<\/a> @loke:dhsdevelopments.com<\/a>
        I created a KAP version of the snowflake programming challenge. https://functional.cafe/@loke/109487995368380662<\/blockquote><\/mx-reply>link there doesn't seem to work."}} {"origin_server_ts":1670654839528,"event_id":"$O4D1Mp3WaXyumnql5-10mG1d5Q6xUdLqg5065N17Rr4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Weird. It works for me.","msgtype":"m.text","org.matrix.msc1767.text":"Weird. It works for me."}} {"origin_server_ts":1670654866521,"event_id":"$XoYNK5SHh25XxHMdkwimh3F0OOHip0P1TKE9u7tL1u0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It should link you to: https://kapdemo.dhsdevelopments.com/clientweb2/#(io%3Aprintln%E2%8D%A41)%20%22%20*%22%20%E2%8A%87%E2%8D%A8%20m%20%E2%8D%AA%20(4%209%204%E2%AB%BD0%201%200)%20%E2%8D%AA%20%E2%8A%96m%20%E2%86%90%20n%20%2C%20(%E2%8D%AA4%204%E2%AB%BD0%201)%20%2C%E2%8C%BDn%E2%86%90(e%2Cq)%E2%8D%AA(%E2%8D%89q%E2%86%90%E2%8A%831%E2%8D%B4%E2%8D%A8%C2%A81%2B%E2%8D%B34)%2C%7Ee%E2%86%904%204%E2%8D%B40","msgtype":"m.text","org.matrix.msc1767.text":"It should link you to: https://kapdemo.dhsdevelopments.com/clientweb2/#(io%3Aprintln%E2%8D%A41)%20%22%20*%22%20%E2%8A%87%E2%8D%A8%20m%20%E2%8D%AA%20(4%209%204%E2%AB%BD0%201%200)%20%E2%8D%AA%20%E2%8A%96m%20%E2%86%90%20n%20%2C%20(%E2%8D%AA4%204%E2%AB%BD0%201)%20%2C%E2%8C%BDn%E2%86%90(e%2Cq)%E2%8D%AA(%E2%8D%89q%E2%86%90%E2%8A%831%E2%8D%B4%E2%8D%A8%C2%A81%2B%E2%8D%B34)%2C%7Ee%E2%86%904%204%E2%8D%B40"}} {"origin_server_ts":1670654895910,"event_id":"$4oLssW5c0KcS4GF3FYx4sBepbI_rIvsOsnua5-4WIm4","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#(io:println%E2%8D%A41)%20%22%20*%22%20%E2%8A%87%E2%8D%A8%20m%20%E2%8D%AA%20(4%209%204%E2%AB%BD0%201%200)%20%E2%8D%AA%20%E2%8A%96m%20%E2%86%90%20n%20,%20(%E2%8D%AA4%204%E2%AB%BD0%201)%20,%E2%8C%BDn%E2%86%90(e,q)%E2%8D%AA(%E2%8D%89q%E2%86%90%E2%8A%831%E2%8D%B4%E2%8D%A8%20%CC%881+%E2%8D%B34),~e%E2%86%904%204%E2%8D%B40 is what i get","msgtype":"m.text","org.matrix.msc1767.text":"https://kapdemo.dhsdevelopments.com/clientweb2/#(io:println%E2%8D%A41)%20%22%20*%22%20%E2%8A%87%E2%8D%A8%20m%20%E2%8D%AA%20(4%209%204%E2%AB%BD0%201%200)%20%E2%8D%AA%20%E2%8A%96m%20%E2%86%90%20n%20,%20(%E2%8D%AA4%204%E2%AB%BD0%201)%20,%E2%8C%BDn%E2%86%90(e,q)%E2%8D%AA(%E2%8D%89q%E2%86%90%E2%8A%831%E2%8D%B4%E2%8D%A8%20%CC%881+%E2%8D%B34),~e%E2%86%904%204%E2%8D%B40 is what i get"}} {"origin_server_ts":1670655000183,"event_id":"$67W84zZn9TA9_fhkK_8CfRQEFrcmypOrYrMrs8hzdMA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Odd. There are differences. Like`:` being encoded in my link but not yours."},{"mimetype":"text/html","body":"Odd. There are differences. Like:<\/code> being encoded in my link but not yours."}],"format":"org.matrix.custom.html","body":"Odd. There are differences. Like`:` being encoded in my link but not yours.","msgtype":"m.text","formatted_body":"Odd. There are differences. Like:<\/code> being encoded in my link but not yours."}} {"origin_server_ts":1670655019559,"event_id":"$j0JZWbUI-PbSlVTTnOBECYhC4YoQzlkCqAZNqsDQ0k8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ah. It fails in chromium","msgtype":"m.text","org.matrix.msc1767.text":"Ah. It fails in chromium"}} {"origin_server_ts":1670655023025,"event_id":"$C9wx6hYdRLnUyhAcPfdzcrduKsTgRFcwtfbqKTvS1Vo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It works in firefox.","msgtype":"m.text","org.matrix.msc1767.text":"It works in firefox."}} {"origin_server_ts":1670655030732,"event_id":"$T-Ru9bAtUB7AJIAs6snoKSpCtAMSWoudTjmxe-6qODc","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"i'm on firefox sooo","msgtype":"m.text","org.matrix.msc1767.text":"i'm on firefox sooo"}} {"origin_server_ts":1670655053660,"event_id":"$6_uuLe5yD8F1-uT134bBPeoi--IPKZAwMvSyE9j3QK8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh wait. If I copy&paste the link it fails. If I click on it, it works.","msgtype":"m.text","org.matrix.msc1767.text":"Oh wait. If I copy&paste the link it fails. If I click on it, it works."}} {"origin_server_ts":1670655071523,"event_id":"$94VFVzdW0SqnW4xLFyEA-xEaaLi0kxWtVv11K-3I1Xg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No wait. Now I can't even click on it anymore. And I didn't even reload the page.","msgtype":"m.text","org.matrix.msc1767.text":"No wait. Now I can't even click on it anymore. And I didn't even reload the page."}} {"origin_server_ts":1670655084863,"event_id":"$FxfKfns5HzV89k_jWbDnjdJ_xUwIK_6eCaxd05X3iEo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What the...","msgtype":"m.text","org.matrix.msc1767.text":"What the..."}} {"origin_server_ts":1670655228917,"event_id":"$F1u7Y24dmnpVlonlSeqhAI7UWKkWD8kgQZSrLsNt8wE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"razetime: Can you try loading and try again? I edited the post and changed the link."},{"mimetype":"text/html","body":"
        razetime<\/a>: Can you try loading and try again? I edited the post and changed the link."}],"format":"org.matrix.custom.html","body":"razetime: Can you try loading and try again? I edited the post and changed the link.","msgtype":"m.text","formatted_body":"razetime<\/a>: Can you try loading and try again? I edited the post and changed the link."}} {"origin_server_ts":1670655239602,"event_id":"$yilAA4BLmIRWGl93Bumz95XectcCeDYLg77tsMZoxuQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ostensibly changed it to exactly the same thing, but let's see.","msgtype":"m.text","org.matrix.msc1767.text":"Ostensibly changed it to exactly the same thing, but let's see."}} {"origin_server_ts":1670655256258,"event_id":"$6Flxcs6iqy9HXwMD6ok9QyyJnxI0sVzgOzqhJPLivDI","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"still same error","msgtype":"m.text","org.matrix.msc1767.text":"still same error"}} {"origin_server_ts":1670655265138,"event_id":"$eJhtE0bCR21NDKTP6OwmQPZ3_WNwaqsfxqs8ZB5O868","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"`Error at: 1:82: Unexpected symbol: '̈' (308)`"},{"mimetype":"text/html","body":"Error at: 1:82: Unexpected symbol: '̈' (308)<\/code>"}],"format":"org.matrix.custom.html","body":"`Error at: 1:82: Unexpected symbol: '̈' (308)`","msgtype":"m.text","formatted_body":"Error at: 1:82: Unexpected symbol: '̈' (308)<\/code>"}} {"origin_server_ts":1670655332004,"event_id":"$Wg9xrwlIhuzKnPtHfp0GvnjtK3XaYqwfdEo1J9bBkGA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"At column 82. That's the `+` symbol."},{"mimetype":"text/html","body":"At column 82. That's the +<\/code> symbol."}],"format":"org.matrix.custom.html","body":"At column 82. That's the `+` symbol.","msgtype":"m.text","formatted_body":"At column 82. That's the +<\/code> symbol."}} {"origin_server_ts":1670655348284,"event_id":"$eX4AXc88iG3ElArhjfkUO7QjXEDJweAJxnifAXOi9wQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Makes sense. So it somehow didn't escape the +.","msgtype":"m.text","org.matrix.msc1767.text":"Makes sense. So it somehow didn't escape the +."}} {"origin_server_ts":1670655350911,"event_id":"$R7UKXLSruddCJNTDJJzOs7yOfV5w3yukl_SH_nSodP0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Makes sense. So it somehow didn't escape the `+`."},{"mimetype":"text/html","body":"Makes sense. So it somehow didn't escape the +<\/code>."}],"format":"org.matrix.custom.html","body":"Makes sense. So it somehow didn't escape the `+`.","msgtype":"m.text","formatted_body":"Makes sense. So it somehow didn't escape the +<\/code>."},"m.relates_to":{"event_id":"$eX4AXc88iG3ElArhjfkUO7QjXEDJweAJxnifAXOi9wQ","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * Makes sense. So it somehow didn't escape the `+`."},{"mimetype":"text/html","body":" * Makes sense. So it somehow didn't escape the +<\/code>."}],"format":"org.matrix.custom.html","body":" * Makes sense. So it somehow didn't escape the `+`.","msgtype":"m.text","formatted_body":" * Makes sense. So it somehow didn't escape the +<\/code>."}} {"origin_server_ts":1670655425019,"event_id":"$t129Sbcq062drr6Krb7JcUrm0BypCv5feUnnR_3bs0A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I can't reproduce the problem anymore. Can you hover the mouse over the link and look at the expanded link at in the statusbar in Firebox? It should show the entire expression in a decoded form in the link.","msgtype":"m.text","org.matrix.msc1767.text":"I can't reproduce the problem anymore. Can you hover the mouse over the link and look at the expanded link at in the statusbar in Firebox? It should show the entire expression in a decoded form in the link."}} {"origin_server_ts":1670655543475,"event_id":"$uAUFifWpBNU0mtnOm5X907HY8v5eIEKbh16KaNrbzOE","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"it's a problem with *this* link: "},{"mimetype":"text/html","body":"it's a problem with this<\/em> link:"}],"format":"org.matrix.custom.html","body":"it's a problem with *this* link: ","msgtype":"m.text","formatted_body":"it's a problem with this<\/em> link:"}} {"origin_server_ts":1670655546049,"event_id":"$40YdozEvt2hFZmzIxgRtOshXekEiuYwsswqroXGjlxg","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"image.png","msgtype":"m.image","url":"mxc://coven.palaiologos.rocks/DkHiFBuVaObwLTBRDxrPZHob","info":{"xyz.amorgan.blurhash":"L16RcY?wNKD*M|WCxut7DiITt6xu","size":5062,"w":567,"h":123,"mimetype":"image/png"}}} {"origin_server_ts":1670655578963,"event_id":"$IDqB5_4deHkL3VZWxMkr04ly5nEKhxXg8YaIRvwdLto","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ohh I see.","msgtype":"m.text","org.matrix.msc1767.text":"Ohh I see."}} {"origin_server_ts":1670655593969,"event_id":"$eAPvELo2KIsYtXOLXi9mppstbzSpzlh5uMCE0fQnYIo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's clearly a Mastodon bug then, since they should be the same.","msgtype":"m.text","org.matrix.msc1767.text":"That's clearly a Mastodon bug then, since they should be the same."}} {"origin_server_ts":1670656421374,"event_id":"$ZmZqNLl0sN16ooTIH3h8Vw3eVhZeUkJR2TT41QZnLA0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I reported a bug/","msgtype":"m.text","org.matrix.msc1767.text":"I reported a bug/"}} {"origin_server_ts":1670656423438,"event_id":"$h67xI8fjh47kUxhyDzYNFDZKAZuuq4JbGJJm-TEWg-g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I reported a bug.","msgtype":"m.text","org.matrix.msc1767.text":"I reported a bug."},"m.relates_to":{"event_id":"$ZmZqNLl0sN16ooTIH3h8Vw3eVhZeUkJR2TT41QZnLA0","rel_type":"m.replace"},"body":" * I reported a bug.","msgtype":"m.text","org.matrix.msc1767.text":" * I reported a bug."}} {"origin_server_ts":1670657798496,"event_id":"$VhFru9EDMjK4BZOu31Oj-0mN86iiVh4fIAx18kk4o1U","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"very cool","msgtype":"m.text","org.matrix.msc1767.text":"very cool"}} {"origin_server_ts":1670676407528,"event_id":"$uBz3Ucj9agUACHIZcJlKlQcnguoEEzFelT9vAPVRYXo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Got the [direct translation](https://mlochbaum.github.io/BQN/try.html#code=IiAqIiDiio/LnCBtIOKIviAoNOKAvznigL80LzDigL8x4oC/MCkg4oi+IOKMvW0g4oaQIG4g4oi+y5ggKOKJjcuYNOKAvzQvMOKAvzEpIOKIvsuY4oy9y5hu4oaQKGXiiL7LmHEp4oi+KOKNiXHihpA+NOKGkcKoMeKlisucwqgxK+KGlTQp4oi+y5jCrGXihpA04oC/NOKlijA=) working.","msgtype":"m.text","formatted_body":"Got the direct translation<\/a> working."}} {"origin_server_ts":1670676536594,"event_id":"$BOPR-hVHqUpqk-O-Yjj4Kz_4IqYOJZkH3DVLxTBMCUA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The two changes that stick out to me are to turn `4\u203f9\u203f4/0\u203f1\u203f0` into `2|/4\u203f9\u203f4` (should be possible in KAP too, with `2|⍸`?) and to start using the multidimensional join all over the place.","msgtype":"m.text","formatted_body":"The two changes that stick out to me are to turn 4\u203f9\u203f4/0\u203f1\u203f0<\/code> into 2|/4\u203f9\u203f4<\/code> (should be possible in KAP too, with 2|⍸<\/code>?) and to start using the multidimensional join all over the place."}} {"origin_server_ts":1670677320407,"event_id":"$ZmcK31xXTw0x4IwpdgL2VHAkDFMR3iL-6htjwmtD3ZQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[Some cleanup](https://mlochbaum.github.io/BQN/try.html#code=UiDihpAge/CdlaniiL7wnZWo4oi+4oy98J2VqX0KIiAqIiDiio/LnCAoMnwvNOKAvznigL80KSBSICgvNOKAvzQpIFLLmCDiiL4o4oqi4omN4o2J4oC/wqx78J2VjvCdlal9wqjijL0pIDDCqOKKuOKLiCDiiaXijJzLnOKGlTQ=). Thinking about a version that works on one big array and or-s stuff together though.","msgtype":"m.text","formatted_body":"Some cleanup<\/a>. Thinking about a version that works on one big array and or-s stuff together though."}} {"origin_server_ts":1670677561749,"event_id":"$OKo_TXxej3bgR7ppp1OAUgTKK4kmkpKb95ig5C1bL74","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[Done](https://mlochbaum.github.io/BQN/try.html#code=IiAqIiDiio/LnCDijL3iirjiiKjijYniirjiiKjijL3iirjiiKgxMijiiaTin5woK+KMnMucKeKIp+KIp+KMnMuc4oiY4omlKeKGlTE3). That worked well!","msgtype":"m.text","formatted_body":"Done<\/a>. That worked well!"}} {"origin_server_ts":1670677744026,"event_id":"$u0atneFJS3rFcI03-FSTm9gz4TVaGKd7iK8WAEIIWXw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh, [no need for transpose](https://mlochbaum.github.io/BQN/try.html#code=IiAqIiDiio/LnCDijL3LmOKKuOKIqOKMveKKuOKIqDEyKOKJpOKfnCgr4oycy5wp4oin4oin4oycy5ziiJjiiaUp4oaVMTc=).","msgtype":"m.text","formatted_body":"Oh, no need for transpose<\/a>."}} {"origin_server_ts":1670678142367,"event_id":"$3t0M0TJe0jOEL2HTiYEMJFavBIYCoA92wPvK_W-Y9zM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Vintage APL version:\n```\nm∨⌽m←n∨⊖n←(p≤i∘.+i)∧g∘.∧g←(p←12)≥i←⍳17\n```","msgtype":"m.text","formatted_body":"Vintage APL version:
        m∨⌽m←n∨⊖n←(p≤i∘.+i)∧g∘.∧g←(p←12)≥i←⍳17<\/code><\/pre>"}}
        {"origin_server_ts":1670681959889,"event_id":"$VLmGyU_MxOJ1L0zEiISaj0nieSif62zFoEhzJM-xM2o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: APL360?"},{"mimetype":"text/html","body":"Marshall<\/a>: APL360?"}],"format":"org.matrix.custom.html","body":"Marshall: APL360?","msgtype":"m.text","formatted_body":"Marshall<\/a>: APL360?"}}
        {"origin_server_ts":1670682069982,"event_id":"$nk9Di_4QcLazmuVgnxljeoQjTicOFS40qw2pZvyqc4w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What I meant was, how vintage?","msgtype":"m.text","org.matrix.msc1767.text":"What I meant was, how vintage?"}}
        {"origin_server_ts":1670682555807,"event_id":"$II9YilV8ZWKdBjLEfy--ktu6K9EPDo_Kt_ctzXwFDfs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I didn't try it, but all that stuff's defined in 360 so it should work. `)ORIGIN 0` of course.","msgtype":"m.text","formatted_body":"I didn't try it, but all that stuff's defined in 360 so it should work. )ORIGIN 0<\/code> of course."}}
        {"origin_server_ts":1670683005113,"event_id":"$n5SyklhUQ2Xc4YBA7pG4KXrEtj3CNw9u2SX9l9b96KA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: are you on the fediverse? (I'm going to share your solution so I want to give credit)"},{"mimetype":"text/html","body":"Marshall<\/a>: are you on the fediverse? (I'm going to share your solution so I want to give credit)"}],"format":"org.matrix.custom.html","body":"Marshall: are you on the fediverse? (I'm going to share your solution so I want to give credit)","msgtype":"m.text","formatted_body":"Marshall<\/a>: are you on the fediverse? (I'm going to share your solution so I want to give credit)"}}
        {"origin_server_ts":1670683096174,"event_id":"$RF3BrrFotif5alEAvpSPRhT95t6IzcIjCLQqFTyEMtc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No.","msgtype":"m.text","formatted_body":"No."}}
        {"origin_server_ts":1670683130612,"event_id":"$kt2c2ojyKeT_66wEJTnAkivpIK-BI-kZUkErQ7FkvGU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Github link works if you want to have one.","msgtype":"m.text","formatted_body":"Github link works if you want to have one."}}
        {"origin_server_ts":1670683148597,"event_id":"$m_RUApDP7bJ5L3ymv0_uEu5M32D5LyJoixyI-AGftbo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So your solution should work on the 5110 emulator?","msgtype":"m.text","org.matrix.msc1767.text":"So your solution should work on the 5110 emulator?"}}
        {"origin_server_ts":1670683328103,"event_id":"$uRxigcyTYq8Exku4Bu2NxXKCBS5J2bxN5AOG2E_BmbU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah. I tried part of it before getting tired of the weird input. It has `⎕IO`, not `)ORIGIN`.","msgtype":"m.text","formatted_body":"Yeah. I tried part of it before getting tired of the weird input. It has ⎕IO<\/code>, not )ORIGIN<\/code>."}}
        {"origin_server_ts":1670683364115,"event_id":"$8BVwXsKVZepoq4ZsuMiGsWzvBrD6l2phBHCX-ovnAxw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"And my letters should all have been uppercase.","msgtype":"m.text","formatted_body":"And my letters should all have been uppercase."}}
        {"origin_server_ts":1670683962624,"event_id":"$hnAcWYFL902W5oTnzPQS9Cw_JazWvCzGcKWS5n2yNWg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's kinda annoying. The 5110 emulator keyboard is using german keymapping only.","msgtype":"m.text","org.matrix.msc1767.text":"It's kinda annoying. The 5110 emulator keyboard is using german keymapping only."}}
        {"origin_server_ts":1672848983837,"event_id":"$OfawooQS9V7vnwzUd3um4SWBScAVwr57AjaXCOZHEPQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"The more I think about trains, the more I have come to the conclusion that I'm actually not such a big hater of trains as I thought. It's specifically the 3-train that I dislike. The 2-train is fine, and if `A B C D` was simply `A (B (C D))` I'd fine fine with it."},{"mimetype":"text/html","body":"The more I think about trains, the more I have come to the conclusion that I'm actually not such a big hater of trains as I thought. It's specifically the 3-train that I dislike. The 2-train is fine, and if A B C D<\/code> was simply A (B (C D))<\/code> I'd fine fine with it."}],"format":"org.matrix.custom.html","body":"The more I think about trains, the more I have come to the conclusion that I'm actually not such a big hater of trains as I thought. It's specifically the 3-train that I dislike. The 2-train is fine, and if `A B C D` was simply `A (B (C D))` I'd fine fine with it.","msgtype":"m.text","formatted_body":"The more I think about trains, the more I have come to the conclusion that I'm actually not such a big hater of trains as I thought. It's specifically the 3-train that I dislike. The 2-train is fine, and if A B C D<\/code> was simply A (B (C D))<\/code> I'd fine fine with it."}}
        {"origin_server_ts":1672849031489,"event_id":"$JujTqhniSDbWCmHigiBUnH_yZAe5VloOLLROuK_ev6U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"It's becoming clear to me that the `A B C` train syntax is one of those clever things where whoever came up with it was so pround of his idea that he couldn't let it go, even when faced with the even/odd rule."},{"mimetype":"text/html","body":"It's becoming clear to me that the A B C<\/code> train syntax is one of those clever things where whoever came up with it was so pround of his idea that he couldn't let it go, even when faced with the even/odd rule."}],"format":"org.matrix.custom.html","body":"It's becoming clear to me that the `A B C` train syntax is one of those clever things where whoever came up with it was so pround of his idea that he couldn't let it go, even when faced with the even/odd rule.","msgtype":"m.text","formatted_body":"It's becoming clear to me that the A B C<\/code> train syntax is one of those clever things where whoever came up with it was so pround of his idea that he couldn't let it go, even when faced with the even/odd rule."}}
        {"origin_server_ts":1672849052313,"event_id":"$Ywidy_gULX1VrlfmDZDpeLUH6fVvxU9UxQfHNZKXobQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think it was Iverson?","msgtype":"m.text","org.matrix.msc1767.text":"I think it was Iverson?"}}
        {"origin_server_ts":1672849072395,"event_id":"$ebD80CSJg1WkNj0ecRZ2CD0nha_UAQq3bQO64b0MGRE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it's also very very useful, and is the main thing that allows trains to be not ugly for many things","msgtype":"m.text","formatted_body":"it's also very very useful, and is the main thing that allows trains to be not ugly for many things"}}
        {"origin_server_ts":1672849082199,"event_id":"$35PWnSRqmWwgE7VYq5JobZy0sCFJ0768RkUvhYG_nxw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"it's also very very useful, and is the main thing that allows trains to be not ugly (or usable at all) for many things","msgtype":"m.text","formatted_body":"it's also very very useful, and is the main thing that allows trains to be not ugly (or usable at all) for many things"},"m.relates_to":{"event_id":"$ebD80CSJg1WkNj0ecRZ2CD0nha_UAQq3bQO64b0MGRE","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* it's also very very useful, and is the main thing that allows trains to be not ugly (or usable at all) for many things","msgtype":"m.text","formatted_body":"* it's also very very useful, and is the main thing that allows trains to be not ugly (or usable at all) for many things"}}
        {"origin_server_ts":1672849102343,"event_id":"$UxkSnfFsdwfxkeHJEPti9C_ub6lv3jcxT01nQvzMpEI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Anyway, I am thinking of alternative syntaxes for this. `A«B»C` is one option."},{"mimetype":"text/html","body":"Anyway, I am thinking of alternative syntaxes for this. A«B»C<\/code> is one option."}],"format":"org.matrix.custom.html","body":"Anyway, I am thinking of alternative syntaxes for this. `A«B»C` is one option.","msgtype":"m.text","formatted_body":"Anyway, I am thinking of alternative syntaxes for this. A«B»C<\/code> is one option."}}
        {"origin_server_ts":1672849122473,"event_id":"$7NSpRqe6cix5fKx2B4v_ZOYhMBfo3x2yqXrEOs9kli0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I definitely don't want to remove the 3-train. I want an explicit syntax for it.","msgtype":"m.text","org.matrix.msc1767.text":"I definitely don't want to remove the 3-train. I want an explicit syntax for it."}}
        {"state_key":"@tortus:matrix.org","origin_server_ts":1673481588045,"event_id":"$p8bFbFnAqmVCB4sggEt4WjiGYgPl9ZexYKPQe20PpHA","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/gNJhBljNPxSRGmDMluWpTaWD","displayname":"Tortus","membership":"join"}}
        {"origin_server_ts":1673481611869,"event_id":"$TUGK_FWEziNXVk52n1LSq77Zn1Jc8zkXeTRNeJ-TGko","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"heyooooooooo! Finally took the time to get here y'all, nice to see y'all bahaha","msgtype":"m.text","org.matrix.msc1767.text":"heyooooooooo! Finally took the time to get here y'all, nice to see y'all bahaha"}}
        {"origin_server_ts":1673491151285,"event_id":"$gvbNw9Atzu0Gk0sHnpcnIfvpwDBjJplCGkKLtZCNNzs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hello","msgtype":"m.text","org.matrix.msc1767.text":"Hello"}}
        {"origin_server_ts":1673491184943,"event_id":"$PiL7dJx4HNfYuOFns7yvBOvEQzbiq6v5klTLBXisl7g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"After having migrated to the new fork syntax, I now have another idea.","msgtype":"m.text","org.matrix.msc1767.text":"After having migrated to the new fork syntax, I now have another idea."}}
        {"origin_server_ts":1673491224254,"event_id":"$O11tVQ_hMrfWwiMJnywuJ2XfPbhDmiYDa6gAkJq3JSY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Currently, integer math is always 64-bit, with wraparound overflow (because that's what the JVM does by default).","msgtype":"m.text","org.matrix.msc1767.text":"Currently, integer math is always 64-bit, with wraparound overflow (because that's what the JVM does by default)."}}
        {"origin_server_ts":1673491249569,"event_id":"$HsLB-rt0RoNbPjgoWANI_YFbJDFBlqAdrIlwhZkjvIo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm considering implementing support for bignums, in order to eliminate integer overflows.","msgtype":"m.text","org.matrix.msc1767.text":"I'm considering implementing support for bignums, in order to eliminate integer overflows."}}
        {"origin_server_ts":1673491295358,"event_id":"$uxOFqm5XfPBfG7QfzUwhjeGBl9_a8foIFgZtJjz6aBY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Doing so will make the behaviours of integers similar to Lisp, which is good (Lisp has, after all, the best numeric tower of any programming language, and this would make KAP almost on par with it).","msgtype":"m.text","org.matrix.msc1767.text":"Doing so will make the behaviours of integers similar to Lisp, which is good (Lisp has, after all, the best numeric tower of any programming language, and this would make KAP almost on par with it)."}}
        {"origin_server_ts":1673491297650,"event_id":"$Cs92n9A-ZSKqRO5o2kXpwk2LBPWLJ1lawCbA34MUkJ0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However...","msgtype":"m.text","org.matrix.msc1767.text":"However..."}}
        {"origin_server_ts":1673491320673,"event_id":"$RzNqGQyupU6XQ0g2p8GlH6bdj0Elj5POdQ_kwyMinZA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It would have a negative impact on performance. I don't know how much, but definitely measurable.","msgtype":"m.text","org.matrix.msc1767.text":"It would have a negative impact on performance. I don't know how much, but definitely measurable."}}
        {"origin_server_ts":1673491433134,"event_id":"$PmVYHaSp6nPUTyBTJftaVfZgfzbIarnCjcX2H_Yv_zs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"On the other hand, no one would care:\n1. There are no actual users of KAP anyway, and I'm not sure that'll ever change.\n2. If you are looking for performance, kap is already slower than any performance-oriented language.\n3. No matter how slow I make kap, it'll still be faster than Pythin, which people seems to happily by using."},{"mimetype":"text/html","body":"

        On the other hand, no one would care:<\/p>\n

          \n
        1. There are no actual users of KAP anyway, and I'm not sure that'll ever change.<\/li>\n
        2. If you are looking for performance, kap is already slower than any performance-oriented language.<\/li>\n
        3. No matter how slow I make kap, it'll still be faster than Pythin, which people seems to happily by using.<\/li>\n<\/ol>\n"}],"format":"org.matrix.custom.html","body":"On the other hand, no one would care:\n1. There are no actual users of KAP anyway, and I'm not sure that'll ever change.\n2. If you are looking for performance, kap is already slower than any performance-oriented language.\n3. No matter how slow I make kap, it'll still be faster than Pythin, which people seems to happily by using.","msgtype":"m.text","formatted_body":"

          On the other hand, no one would care:<\/p>\n

            \n
          1. There are no actual users of KAP anyway, and I'm not sure that'll ever change.<\/li>\n
          2. If you are looking for performance, kap is already slower than any performance-oriented language.<\/li>\n
          3. No matter how slow I make kap, it'll still be faster than Pythin, which people seems to happily by using.<\/li>\n<\/ol>\n"}} {"origin_server_ts":1673491456093,"event_id":"$d-Rprwkv3G0NX839dXQO1K1Ppv12WCjvFwU2nKeGXjg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"On the other hand, no one would care:\n\n1. There are no actual users of KAP anyway, and I'm not sure that'll ever change.\n2. If you are looking for performance, kap is already slower than any performance-oriented language.\n3. No matter how slow I make kap, it'll still be faster than Python, which people seems to happily by using."},{"mimetype":"text/html","body":"

            On the other hand, no one would care:<\/p>\n

              \n
            1. There are no actual users of KAP anyway, and I'm not sure that'll ever change.<\/li>\n
            2. If you are looking for performance, kap is already slower than any performance-oriented language.<\/li>\n
            3. No matter how slow I make kap, it'll still be faster than Python, which people seems to happily by using.<\/li>\n<\/ol>\n"}],"format":"org.matrix.custom.html","body":"On the other hand, no one would care:\n\n1. There are no actual users of KAP anyway, and I'm not sure that'll ever change.\n2. If you are looking for performance, kap is already slower than any performance-oriented language.\n3. No matter how slow I make kap, it'll still be faster than Python, which people seems to happily by using.","msgtype":"m.text","formatted_body":"

              On the other hand, no one would care:<\/p>\n

                \n
              1. There are no actual users of KAP anyway, and I'm not sure that'll ever change.<\/li>\n
              2. If you are looking for performance, kap is already slower than any performance-oriented language.<\/li>\n
              3. No matter how slow I make kap, it'll still be faster than Python, which people seems to happily by using.<\/li>\n<\/ol>\n"},"m.relates_to":{"event_id":"$PmVYHaSp6nPUTyBTJftaVfZgfzbIarnCjcX2H_Yv_zs","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * On the other hand, no one would care:\n\n1. There are no actual users of KAP anyway, and I'm not sure that'll ever change.\n2. If you are looking for performance, kap is already slower than any performance-oriented language.\n3. No matter how slow I make kap, it'll still be faster than Python, which people seems to happily by using."},{"mimetype":"text/html","body":" *

                On the other hand, no one would care:<\/p>\n

                  \n
                1. There are no actual users of KAP anyway, and I'm not sure that'll ever change.<\/li>\n
                2. If you are looking for performance, kap is already slower than any performance-oriented language.<\/li>\n
                3. No matter how slow I make kap, it'll still be faster than Python, which people seems to happily by using.<\/li>\n<\/ol>\n"}],"format":"org.matrix.custom.html","body":" * On the other hand, no one would care:\n\n1. There are no actual users of KAP anyway, and I'm not sure that'll ever change.\n2. If you are looking for performance, kap is already slower than any performance-oriented language.\n3. No matter how slow I make kap, it'll still be faster than Python, which people seems to happily by using.","msgtype":"m.text","formatted_body":" *

                  On the other hand, no one would care:<\/p>\n

                    \n
                  1. There are no actual users of KAP anyway, and I'm not sure that'll ever change.<\/li>\n
                  2. If you are looking for performance, kap is already slower than any performance-oriented language.<\/li>\n
                  3. No matter how slow I make kap, it'll still be faster than Python, which people seems to happily by using.<\/li>\n<\/ol>\n"}} {"origin_server_ts":1673499551498,"event_id":"$kErEmSLM64xTlBRkaSVuNaQr70mcBFoeclQlFZtNWC8","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"I dunno how strong \"no one would care\" is as an argument...","msgtype":"m.text","org.matrix.msc1767.text":"I dunno how strong \"no one would care\" is as an argument..."}} {"origin_server_ts":1673509437890,"event_id":"$44nV4-vAxnoGpiX7prmE9m-Ye35rSh24iI-hlcByJGg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Sure. I think my point was that since the use of the system is limited to small-scale experiments, performance is not very high on the list of priorities.","msgtype":"m.text","org.matrix.msc1767.text":"Sure. I think my point was that since the use of the system is limited to small-scale experiments, performance is not very high on the list of priorities."}} {"origin_server_ts":1673521789233,"event_id":"$_iduNYYae_LkXoNS8BjYcI_EybmS6p5o8AmnxiHVHbg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$PmVYHaSp6nPUTyBTJftaVfZgfzbIarnCjcX2H_Yv_zs"}},"format":"org.matrix.custom.html","body":"I wouldn't be so quick on assuming anything will be faster than python; while certainly slow, it's not too unreasonably slow for a traditional interpreter","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>I wouldn't be so quick on assuming anything will be faster than python; while certainly slow, it's not too unreasonably slow for a traditional interpreter"}} {"origin_server_ts":1673522209018,"event_id":"$ha_nyfU_S5F2Te3p2-avtCNPGOY1suxSARhYf7WEU6E","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"as a random test, `sum([sum([a,a+1]) for a in range(1000000)])` in python is ~190ms, and `time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}` in KAP is ~300ms","msgtype":"m.text","formatted_body":"as a random test, sum([sum([a,a+1]) for a in range(1000000)])<\/code> in python is ~190ms, and time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}<\/code> in KAP is ~300ms"}} {"origin_server_ts":1673531946922,"event_id":"$WpU-Y2eR-ZTuv0acIShI4OVhKmyE2ReqUUgjEqt4PJ4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: I'm surprised that was as fast as it was. I checked in the profiler and it's taking the slow path."},{"mimetype":"text/html","body":"dzaima<\/a>: I'm surprised that was as fast as it was. I checked in the profiler and it's taking the slow path."}],"format":"org.matrix.custom.html","body":"dzaima: I'm surprised that was as fast as it was. I checked in the profiler and it's taking the slow path.","msgtype":"m.text","formatted_body":"dzaima<\/a>: I'm surprised that was as fast as it was. I checked in the profiler and it's taking the slow path."}} {"origin_server_ts":1673531975323,"event_id":"$G51lIwT6V3zYuuDaBw0urFqE9Eo89eIXs_Hz3s_icRE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It shouldn't, because it's all numbers.","msgtype":"m.text","org.matrix.msc1767.text":"It shouldn't, because it's all numbers."}} {"origin_server_ts":1673532053550,"event_id":"$g9EpO9MRw5GPMXbahYILCbN6JoeN_AtVPIQdPlSZOU0","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1673532326544,"event_id":"$4fO1dDbO8CZWv8XsqFlGFNYOF1_z30y2wq1gWOuBxKA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$g9EpO9MRw5GPMXbahYILCbN6JoeN_AtVPIQdPlSZOU0","type":"m.room.redaction","content":{"redacts":"$g9EpO9MRw5GPMXbahYILCbN6JoeN_AtVPIQdPlSZOU0"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1673532326544,"event_id":"$4fO1dDbO8CZWv8XsqFlGFNYOF1_z30y2wq1gWOuBxKA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$g9EpO9MRw5GPMXbahYILCbN6JoeN_AtVPIQdPlSZOU0","type":"m.room.redaction","content":{"redacts":"$g9EpO9MRw5GPMXbahYILCbN6JoeN_AtVPIQdPlSZOU0"}} {"origin_server_ts":1673536127581,"event_id":"$3oWEy-9uT76dT_BOMoeDiULrO_8hN4yQmJ97U3T5e6w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, if you avoid the dfn it's much faster. 43 ms on my system.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, if you avoid the dfn it's much faster. 43 ms on my system."}} {"origin_server_ts":1673536134534,"event_id":"$BwPSoTWAve1uO6isjP1iFwyVSWAHeZ6rpZ4oi78XbK4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"`time:measureTime { +/(+∘(1+))¨⍳1000000 }`"},{"mimetype":"text/html","body":"time:measureTime { +/(+∘(1+))¨⍳1000000 }<\/code>"}],"format":"org.matrix.custom.html","body":"`time:measureTime { +/(+∘(1+))¨⍳1000000 }`","msgtype":"m.text","formatted_body":"time:measureTime { +/(+∘(1+))¨⍳1000000 }<\/code>"}} {"origin_server_ts":1673541213662,"event_id":"$rTHUmaft6_zlPczqmgVnqCBm3-lvamH5a-Ib70oCyEA","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Oh lord","msgtype":"m.text","org.matrix.msc1767.text":"Oh lord"}} {"origin_server_ts":1673541236624,"event_id":"$un395e1jGRMJHykps8kH4_y2hDbVbvBPESaXjh70Dfs","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Why is the dfn so much slower?","msgtype":"m.text","org.matrix.msc1767.text":"Why is the dfn so much slower?"}} {"origin_server_ts":1673541577810,"event_id":"$XDyQ8-FK55E5Qi3-WY72JLTAI9JnmPTO7vqKHhj8X3U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Tortus: Because of a bug."},{"mimetype":"text/html","body":"Tortus<\/a>: Because of a bug."}],"format":"org.matrix.custom.html","body":"Tortus: Because of a bug.","msgtype":"m.text","formatted_body":"Tortus<\/a>: Because of a bug."}} {"origin_server_ts":1673541629719,"event_id":"$-UeT0i7nGrzPJAmaJwKIqE1hKnB8pjnTi7SPRuIybxI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There is a lot of extra overhead when allocating a new stack frame. It's useless work, but the fix requires some work that I just haven't bothered doing.","msgtype":"m.text","org.matrix.msc1767.text":"There is a lot of extra overhead when allocating a new stack frame. It's useless work, but the fix requires some work that I just haven't bothered doing."}} {"origin_server_ts":1673541636885,"event_id":"$K5POvk_e2yZuF7QG_t99kOeOwexW0xHV1bV_WQa3KnQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's on a my todo list.","msgtype":"m.text","org.matrix.msc1767.text":"It's on a my todo list."}} {"origin_server_ts":1673543889332,"event_id":"$DNf6p5acOK6TnBUSe1KskOeMnvT6jJqPZQ1KUXvLqTQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"It's on my todo list.","msgtype":"m.text"},"m.relates_to":{"event_id":"$K5POvk_e2yZuF7QG_t99kOeOwexW0xHV1bV_WQa3KnQ","rel_type":"m.replace"},"body":"* It's on my todo list.","msgtype":"m.text"}} {"origin_server_ts":1673544860934,"event_id":"$9ON4aF-ZAFIGJZ9BKKHg9dD1OEwAk_1HMQ6CPMKNsi4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Wouldn't rewriting `+/⍵(⍵+1)` as `⍵+⍵+1` also be faster? Part of the benchmark is that Python calls `sum` in the loop body.","msgtype":"m.text","formatted_body":"Wouldn't rewriting +/⍵(⍵+1)<\/code> as ⍵+⍵+1<\/code> also be faster? Part of the benchmark is that Python calls sum<\/code> in the loop body."}} {"origin_server_ts":1673545089187,"event_id":"$RuI413u1TD4QEPcYC24s9x1b_mGCzwXMPDkIP5OkJJQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: I'm on the phone right now, so I can't check the actual numbers, but I don't think you'll save much.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I'm on the phone right now, so I can't check the actual numbers, but I don't think you'll save much."}} {"origin_server_ts":1673545123741,"event_id":"$zYu23dfrSE4G1HH0g-LliICI-DOWVaN3PobwDkqfQ7E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It'll be a bit faster due to avoiding the reduction, but reduce is pretty fast anyway.","msgtype":"m.text"}} {"origin_server_ts":1673545171313,"event_id":"$HFnqc8ozr9WLR3cHUdAUALFml9KWeIzMPiES5bLn6no","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The dfn call is still going to be there and those are expensive. Not as bad as apls that need to reparse every time, but there is a lot of room for improvement. ","msgtype":"m.text"}} {"origin_server_ts":1673545184068,"event_id":"$rizANMl5m_xNGy-yCENB6JkYs98db-9qDpmtvCe0kHo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"If it builds a list object from `⍵(⍵+1)` I'd expect that to be a significant cost.","msgtype":"m.text","formatted_body":"If it builds a list object from ⍵(⍵+1)<\/code> I'd expect that to be a significant cost."}} {"origin_server_ts":1673545232508,"event_id":"$1Yzz7CXkJif7VkjrWRpmhcqJrSl4OP0C2L9Mz9mmVbU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Nah, building the list object is fast. It's just a single object in the jvm, and that's very fast. ","msgtype":"m.text"}} {"origin_server_ts":1673545277103,"event_id":"$Uh9Ygnsk7YcHgxrtei6ZkDGwuBd1UAmb3FBgyoe0w2k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Looking up the variable is slower (because of the same issue that causes stack frame allocations to be slow) ","msgtype":"m.text"}} {"state_key":"@Kooda:elynx.fr","origin_server_ts":1673557380736,"event_id":"$MAc-HWoasFVChEB967wcun4_yWarYG6K4h3TmCj3e1Q","sender":"@Kooda:elynx.fr","user_id":"@Kooda:elynx.fr","prev_content":{"avatar_url":"mxc://elynx.fr/iNacefvfmiIziWHNECDQjhrJ","displayname":"Kooda","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://elynx.fr/fxSHqVFLAHpFVChqsvHZxFzX","displayname":"Kooda","membership":"join"},"replaces_state":"$WOjrs8Hhj2du1umaO-x1cFz4Ds3IneSiaRvBB1BXB7c"} {"origin_server_ts":1673577499517,"event_id":"$HGl4oXi3WIxhH4_y7pVyteAaMr3Roheo7JgJFwARVjI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"If you want to remove the dfn and keep the plus reduction, then you can do this: `time:measureTime { +/ (+/ ,∘(1+))¨ ⍳1000000 }`"},{"mimetype":"text/html","body":"If you want to remove the dfn and keep the plus reduction, then you can do this: time:measureTime { +/ (+/ ,∘(1+))¨ ⍳1000000 }<\/code>"}],"format":"org.matrix.custom.html","body":"If you want to remove the dfn and keep the plus reduction, then you can do this: `time:measureTime { +/ (+/ ,∘(1+))¨ ⍳1000000 }`","msgtype":"m.text","formatted_body":"If you want to remove the dfn and keep the plus reduction, then you can do this: time:measureTime { +/ (+/ ,∘(1+))¨ ⍳1000000 }<\/code>"}} {"origin_server_ts":1673577510037,"event_id":"$i-wBf72ThbqQMAEf-V4O6zmTJ2lKCFaHuDRxM4RQ5OM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's about half the time compared to the dfn version.","msgtype":"m.text","org.matrix.msc1767.text":"That's about half the time compared to the dfn version."}} {"origin_server_ts":1673577770796,"event_id":"$hK20TPfgIiab5pLhWcCLbdRzGA9NdANdr8wvT5JyaNk","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1673577892457,"event_id":"$5ycPFxOI2VTO7tGpTOBZ98oJxLulHJtYKWzr0pxZv-0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$hK20TPfgIiab5pLhWcCLbdRzGA9NdANdr8wvT5JyaNk","type":"m.room.redaction","content":{"redacts":"$hK20TPfgIiab5pLhWcCLbdRzGA9NdANdr8wvT5JyaNk"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1673577773878,"event_id":"$_YpApGoVmrGK-184UYBMFfc2GEn3E6qGBdYMM2qViR8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Actually, it's half in the JS version, but that doesn't translate to the JVM version. For the JVM, it's actually 10 times faster.","msgtype":"m.text","org.matrix.msc1767.text":"Actually, it's half in the JS version, but that doesn't translate to the JVM version. For the JVM, it's actually 10 times faster."},"m.relates_to":{"event_id":"$hK20TPfgIiab5pLhWcCLbdRzGA9NdANdr8wvT5JyaNk","rel_type":"m.replace"},"body":" * Actually, it's half in the JS version, but that doesn't translate to the JVM version. For the JVM, it's actually 10 times faster.","msgtype":"m.text","org.matrix.msc1767.text":" * Actually, it's half in the JS version, but that doesn't translate to the JVM version. For the JVM, it's actually 10 times faster."}} {"origin_server_ts":1673577826165,"event_id":"$WzGjxCpx7BN2Nqhn03ZUk7QoYpMhDzAuf557la4BX1A","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1673577897466,"event_id":"$38FecJrlhpDeL80vRlztXq0_P1DF9epJx_b-Cv4MScY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$WzGjxCpx7BN2Nqhn03ZUk7QoYpMhDzAuf557la4BX1A","type":"m.room.redaction","content":{"redacts":"$WzGjxCpx7BN2Nqhn03ZUk7QoYpMhDzAuf557la4BX1A"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1673577892457,"event_id":"$5ycPFxOI2VTO7tGpTOBZ98oJxLulHJtYKWzr0pxZv-0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$hK20TPfgIiab5pLhWcCLbdRzGA9NdANdr8wvT5JyaNk","type":"m.room.redaction","content":{"redacts":"$hK20TPfgIiab5pLhWcCLbdRzGA9NdANdr8wvT5JyaNk"}} {"origin_server_ts":1673577897466,"event_id":"$38FecJrlhpDeL80vRlztXq0_P1DF9epJx_b-Cv4MScY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$WzGjxCpx7BN2Nqhn03ZUk7QoYpMhDzAuf557la4BX1A","type":"m.room.redaction","content":{"redacts":"$WzGjxCpx7BN2Nqhn03ZUk7QoYpMhDzAuf557la4BX1A"}} {"origin_server_ts":1673577916352,"event_id":"$7THb9dOZR0pnUq5AbzUVye1E4Tplw6hV84pCUmZgnXc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"About half on the JS version, the difference is buigger on the JVM.","msgtype":"m.text","org.matrix.msc1767.text":"About half on the JS version, the difference is buigger on the JVM."}} {"origin_server_ts":1673577918359,"event_id":"$mTHAMOWcE4oIG84YlxWRNk89J71-PmQiRw3Q9eG_D7Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"About half on the JS version, the difference is bigger on the JVM.","msgtype":"m.text","org.matrix.msc1767.text":"About half on the JS version, the difference is bigger on the JVM."},"m.relates_to":{"event_id":"$7THb9dOZR0pnUq5AbzUVye1E4Tplw6hV84pCUmZgnXc","rel_type":"m.replace"},"body":" * About half on the JS version, the difference is bigger on the JVM.","msgtype":"m.text","org.matrix.msc1767.text":" * About half on the JS version, the difference is bigger on the JVM."}} {"origin_server_ts":1673578380923,"event_id":"$nqd4XfA9uAYpZY-o9wsRF2UU9GY3P3NKpXG8HDPI0Kw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$ha_nyfU_S5F2Te3p2-avtCNPGOY1suxSARhYf7WEU6E"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> as a random test, `sum([sum([a,a+1]) for a in range(1000000)])` in python is ~190ms, and `time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}` in KAP is ~300ms\n\nI note that this test is much slower on Dyalog."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    as a random test, sum([sum([a,a+1]) for a in range(1000000)])<\/code> in python is ~190ms, and time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}<\/code> in KAP is ~300ms<\/blockquote><\/mx-reply>I note that this test is much slower on Dyalog."}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> as a random test, `sum([sum([a,a+1]) for a in range(1000000)])` in python is ~190ms, and `time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}` in KAP is ~300ms\n\nI note that this test is much slower on Dyalog.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    as a random test, sum([sum([a,a+1]) for a in range(1000000)])<\/code> in python is ~190ms, and time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}<\/code> in KAP is ~300ms<\/blockquote><\/mx-reply>I note that this test is much slower on Dyalog."}} {"origin_server_ts":1673578435233,"event_id":"$tcKk7GzktMxUZAZATtevgnZs8zGbCKmrvLInxyQzq4Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Twice as slow as KAP on my machine.","msgtype":"m.text","org.matrix.msc1767.text":"Twice as slow as KAP on my machine."}} {"origin_server_ts":1673578444227,"event_id":"$sLBib_aYjrOVH2imrvI1XeK3UboMdLl6pUHxiG99HYQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Twice as slow as KAP on my machine, for the dfn case.","msgtype":"m.text","org.matrix.msc1767.text":"Twice as slow as KAP on my machine, for the dfn case."},"m.relates_to":{"event_id":"$tcKk7GzktMxUZAZATtevgnZs8zGbCKmrvLInxyQzq4Q","rel_type":"m.replace"},"body":" * Twice as slow as KAP on my machine, for the dfn case.","msgtype":"m.text","org.matrix.msc1767.text":" * Twice as slow as KAP on my machine, for the dfn case."}} {"origin_server_ts":1673578503215,"event_id":"$ScUIe0JYn44DgnWalDGTlBFJgGOEGcAYE13rj640dhI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And Dyalog is 10 times slower for the optimised non-dfn case.","msgtype":"m.text","org.matrix.msc1767.text":"And Dyalog is 10 times slower for the optimised non-dfn case."}} {"origin_server_ts":1673581940166,"event_id":"$j6BE7B--veKigh1FSVTQtFdgP07-PGc6fgGaZAEle4o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: what's the performance of dzaima/apl here?"},{"mimetype":"text/html","body":"
                    dzaima<\/a>: what's the performance of dzaima/apl here?"}],"format":"org.matrix.custom.html","body":"dzaima: what's the performance of dzaima/apl here?","msgtype":"m.text","formatted_body":"dzaima<\/a>: what's the performance of dzaima/apl here?"}} {"origin_server_ts":1673582757337,"event_id":"$w_Q5CxV-olz_7-f-tulfD0_oOEOfHU1f1cbUGX9oQfE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`⎕htime\"+/{+/⍵(⍵+1)}¨⍳1000000\"` is an awful 1.8s, 2x slower than dyalog. `10⎕htime\"+/(+∘(1∘+))¨⍳1000000\"` is ~90ms","msgtype":"m.text","formatted_body":"⎕htime"+/{+/⍵(⍵+1)}¨⍳1000000"<\/code> is an awful 1.8s, 2x slower than dyalog. 10⎕htime"+/(+∘(1∘+))¨⍳1000000"<\/code> is ~90ms"}} {"origin_server_ts":1673582839099,"event_id":"$4bXSiaMTXj6o1X_h4FySpNTNl6OWaVfS9qvgqtrWWo0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"though, actually, being only 2x slower than dyalog is kind of surprising, given that it's under the same restriction of runtime parsing, but is written in unoptimized java instead of decades of developed C","msgtype":"m.text"}} {"origin_server_ts":1673582842666,"event_id":"$zO1hSeejgJe1_KS8N-xoHWZSFnKhsDjftvsPBpFKXKk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: The train version is still faster than Dyalog."},{"mimetype":"text/html","body":"dzaima<\/a>: The train version is still faster than Dyalog."}],"format":"org.matrix.custom.html","body":"dzaima: The train version is still faster than Dyalog.","msgtype":"m.text","formatted_body":"dzaima<\/a>: The train version is still faster than Dyalog."}} {"origin_server_ts":1673582878747,"event_id":"$H92Ln5A2bICXzqnPC1FE5XT7ReYH1J7YY7EH9Z3PraM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"To be honest I'm surprised at Dyalog's poor results here.","msgtype":"m.text","org.matrix.msc1767.text":"To be honest I'm surprised at Dyalog's poor results here."}} {"origin_server_ts":1673582959549,"event_id":"$hdsB6Z8Sn-KdH2WCH6bkEulgDWjrlEuf6vdJU6ZJMQM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Also, \"unoptimised java\" is a bit misleading since you're taking advantage of decades of JVM optimisation (which kap also takes advantage of)","msgtype":"m.text","org.matrix.msc1767.text":"Also, \"unoptimised java\" is a bit misleading since you're taking advantage of decades of JVM optimisation (which kap also takes advantage of)"}} {"origin_server_ts":1673583089998,"event_id":"$Sjs6JKHxZf3s0DmWgNKZo3tsutYKiRaX7O5oUFXeJ6g","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"well, Dyalog is also presumably relying on decades of C compiler optimization","msgtype":"m.text"}} {"origin_server_ts":1673583131828,"event_id":"$IEvPxDxxvWeju1zya2jyot8y_a9TWuICXJVQ7MhEz68","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"in addition to developer time spent on the problem","msgtype":"m.text"}} {"origin_server_ts":1673583165218,"event_id":"$Ps2-N-aRWy-HTkwAAMFgNWqqypTYT1CNop-uvmzw2YQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"but then again it also has a bunch of funky restrictions on how it can do things","msgtype":"m.text"}} {"origin_server_ts":1673583189872,"event_id":"$ZiDPN4Dwu28SPYP13nqiNPnULSz4Qo8q7mS9eFmof58","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Those optimisations can only work on a lower level. For example, when it comes to memory allocation optimisation, Dyalog have to do that themselves, but anything built on the JVM can take advantage of the java performance optimisations. Memory optimisation is very hard, so being able to delegate that is a good thing.","msgtype":"m.text","org.matrix.msc1767.text":"Those optimisations can only work on a lower level. For example, when it comes to memory allocation optimisation, Dyalog have to do that themselves, but anything built on the JVM can take advantage of the java performance optimisations. Memory optimisation is very hard, so being able to delegate that is a good thing."}} {"origin_server_ts":1673583214163,"event_id":"$zCDO395cbO1u8uTVVduRs3339ol8jdnm8Sd8pnDLa7w","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(and then there's CBQN with 42ms for `+´{+´⟨𝕩, 𝕩+1⟩}¨ ↕1000000` and 14ms for `+´(+⟜(1⊸+))¨ ↕1000000`)","msgtype":"m.text","formatted_body":"(and then there's CBQN with 42ms for +´{+´⟨𝕩, 𝕩+1⟩}¨ ↕1000000<\/code> and 14ms for +´(+⟜(1⊸+))¨ ↕1000000<\/code>)"}} {"origin_server_ts":1673583257405,"event_id":"$_WK7y9g2slu70JnSfIWXY43fHjqtKC4inPOKr1jTroo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, BQN is good.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, BQN is good."}} {"origin_server_ts":1673583401692,"event_id":"$oUtjTiEbPt0WdNjG8VCvIVKMNHDfvLmoLZP2Jdi0_y4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Tonight I will spend a little time on optimising the interpreter for this specific case to see how much I can improve it. It's not impossible to get it within a factor of 2 of the CBQN numbers, I think.","msgtype":"m.text","org.matrix.msc1767.text":"Tonight I will spend a little time on optimising the interpreter for this specific case to see how much I can improve it. It's not impossible to get it within a factor of 2 of the CBQN numbers, I think."}} {"origin_server_ts":1673882779021,"event_id":"$yLfFju8LULLE5Umw0sCRuaPGCPorsG6UGzjGAca2aOQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ok. I've spent a bunch of time redesigning the entire way stack frames are allocated, and working on escape analysis. All of this to finally be able to eliminate the hashmap to store variable bindings. ","msgtype":"m.text"}} {"origin_server_ts":1673882835317,"event_id":"$nP_bS5hRCH7cTzsOfMsPewM3fG4h8xE2KBC70OxBRrw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Currently the code is a mess because it's in the mudd of the rewrite, once all of the that is in place the previous test case should be twice as fast. ","msgtype":"m.text"}} {"origin_server_ts":1673882847656,"event_id":"$oURmDMe2S_ElQyce300u5_1iPrFme63Kx8Dk7XqvJcU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And other test cases will be a lot faster. ","msgtype":"m.text"}} {"origin_server_ts":1673882877729,"event_id":"$pEd5Y_WxgRPA4U9ytRRwAFIwD9in6TthmFDmnEfM_Ao","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But I have no idea how long this will take. It's the kind of work that leads to headache. ","msgtype":"m.text"}} {"origin_server_ts":1673882921452,"event_id":"$nMBUyvhVbkx462h0DMNgghX0uePaSwtM0WIkYalNB3w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And that is kinda the reason I haven't addressed this design problem before. ","msgtype":"m.text"}} {"origin_server_ts":1673882988719,"event_id":"$wV1R-76-FoO3tbDgVMD8MoON_wmDaTcoHOtv4TtCA3A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But, when someone shows that kap is slower than Python on something, I need to address it. I cannot allow this thing to ever lose against Python. ","msgtype":"m.text"}} {"origin_server_ts":1674131719403,"event_id":"$mnqwjG9iIqMed0j6pXFaoUtodN87pD2jjsBYdtZ3QEg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: Because of you I have been unable to concentrate on anything for days."},{"mimetype":"text/html","body":"dzaima<\/a>: Because of you I have been unable to concentrate on anything for days."}],"format":"org.matrix.custom.html","body":"dzaima: Because of you I have been unable to concentrate on anything for days.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Because of you I have been unable to concentrate on anything for days."}} {"origin_server_ts":1674131728792,"event_id":"$xfG4nluGTEOnquQaLOiedOVdk1Fkuka7VPwsB9xlzFc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I've completely redesigned the variable storage systems","msgtype":"m.text","org.matrix.msc1767.text":"I've completely redesigned the variable storage systems"}} {"origin_server_ts":1674131729883,"event_id":"$uTdkca1iIxe70C-7GfycC9kVc5YeoDAnAa-uuw-ZeOg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I've completely redesigned the variable storage system","msgtype":"m.text","org.matrix.msc1767.text":"I've completely redesigned the variable storage system"},"m.relates_to":{"event_id":"$xfG4nluGTEOnquQaLOiedOVdk1Fkuka7VPwsB9xlzFc","rel_type":"m.replace"},"body":" * I've completely redesigned the variable storage system","msgtype":"m.text","org.matrix.msc1767.text":" * I've completely redesigned the variable storage system"}} {"origin_server_ts":1674131739778,"event_id":"$PXo6KxgzU4UlYAr4xFDhUpR-oQwXsxqByJoD9YjIeIk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm only half-way there and nothing works at the moment.","msgtype":"m.text","org.matrix.msc1767.text":"I'm only half-way there and nothing works at the moment."}} {"origin_server_ts":1674131754460,"event_id":"$BrzAFSXqxZ0n0huA63IJEj8wk5LBv5vMuA0-rRUxjuw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And I've try to implement the new escape analysis function","msgtype":"m.text","org.matrix.msc1767.text":"And I've try to implement the new escape analysis function"}} {"origin_server_ts":1674131776679,"event_id":"$Dxho5WTNkxUcSZF0LL8rJd2Jd3Ulzz-HtT5Ew_Lh57g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Unable to concentrate on anything except kap, I mean","msgtype":"m.text","org.matrix.msc1767.text":"Unable to concentrate on anything except kap, I mean"}} {"origin_server_ts":1674131801859,"event_id":"$oCnBKjfbQUSCNyqmzeIka5RWJBwj0FfLZmLJX1BZ_Dg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"All in the hope that I'll be able to cut down function call times by 30% and variable lookups by another 30%.","msgtype":"m.text","org.matrix.msc1767.text":"All in the hope that I'll be able to cut down function call times by 30% and variable lookups by another 30%."}} {"origin_server_ts":1674131821153,"event_id":"$aINBzhY9-AKbxyQ0OM5QIKhyGfYi1ZII-Ow7bAaJhvE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This would at least in principle make your test case 2 times faster.","msgtype":"m.text","org.matrix.msc1767.text":"This would at least in principle make your test case 2 times faster."}} {"origin_server_ts":1674131831434,"event_id":"$4T24cyIBLVUX_p7v4rTVuqRvHTtFo-qcG03icZt4BCo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hopefully a lot more.","msgtype":"m.text","org.matrix.msc1767.text":"Hopefully a lot more."}} {"origin_server_ts":1674313714959,"event_id":"$2dAtqDI3fmNP81hjg41brHvL27CUjIlCWIs3Msqw0mI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$ha_nyfU_S5F2Te3p2-avtCNPGOY1suxSARhYf7WEU6E"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> as a random test, `sum([sum([a,a+1]) for a in range(1000000)])` in python is ~190ms, and `time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}` in KAP is ~300ms\n\nMy new stack management code has now reached a point where I can benchmark this again. It's still very broken for a lot of things, but as least I now see 150 ms for the same expression."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    as a random test, sum([sum([a,a+1]) for a in range(1000000)])<\/code> in python is ~190ms, and time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}<\/code> in KAP is ~300ms<\/blockquote><\/mx-reply>My new stack management code has now reached a point where I can benchmark this again. It's still very broken for a lot of things, but as least I now see 150 ms for the same expression."}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> as a random test, `sum([sum([a,a+1]) for a in range(1000000)])` in python is ~190ms, and `time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}` in KAP is ~300ms\n\nMy new stack management code has now reached a point where I can benchmark this again. It's still very broken for a lot of things, but as least I now see 150 ms for the same expression.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    as a random test, sum([sum([a,a+1]) for a in range(1000000)])<\/code> in python is ~190ms, and time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}<\/code> in KAP is ~300ms<\/blockquote><\/mx-reply>My new stack management code has now reached a point where I can benchmark this again. It's still very broken for a lot of things, but as least I now see 150 ms for the same expression."}} {"origin_server_ts":1674322696608,"event_id":"$cVdCgT4TViw0D6s1ZqdHginIOc7pa1yejxrU0r2b_8E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's 135 ms now.","msgtype":"m.text","org.matrix.msc1767.text":"It's 135 ms now."}} {"origin_server_ts":1674487360003,"event_id":"$seabPVnuFevmyPI9PqEoJ9cnqOAX82NXPzJoxdNW9iQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Wow... I'm down to 3 failed tests after the rewrite.","msgtype":"m.text","org.matrix.msc1767.text":"Wow... I'm down to 3 failed tests after the rewrite."}} {"origin_server_ts":1674487434431,"event_id":"$VFEtNBJIbkZsbWzJBA-zo1r2a6FOU_6R00jSI-h6NCY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This is an absolutely enormous change, and given the number of subtle bugs I've picked up by the existing tests (and a few more that I wrote) I'm somewhat concerned that the reason for the tests passing is because the tests aren't thorough enough, rather than the code actually working.","msgtype":"m.text","org.matrix.msc1767.text":"This is an absolutely enormous change, and given the number of subtle bugs I've picked up by the existing tests (and a few more that I wrote) I'm somewhat concerned that the reason for the tests passing is because the tests aren't thorough enough, rather than the code actually working."}} {"origin_server_ts":1674487601407,"event_id":"$bmMSuhNQMYmr9TEzFYk5hEC8DQgb0T9TilfFgeJJmnU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Just look at the size of the change: https://codeberg.org/loke/array/compare/master...escape-analysis","msgtype":"m.text","org.matrix.msc1767.text":"Just look at the size of the change: https://codeberg.org/loke/array/compare/master...escape-analysis"}} {"origin_server_ts":1674487715963,"event_id":"$SBdMogEXefAa7An2YdUlvocjjjTQLkle6kWLAAclhcE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The problem is that certain constructs can leak closures, and that's not just lambda functions. Implicit closures can leak as part of a lazy result, and it feels like every single testcase I have that tests that has failed at some point in this development.","msgtype":"m.text","org.matrix.msc1767.text":"The problem is that certain constructs can leak closures, and that's not just lambda functions. Implicit closures can leak as part of a lazy result, and it feels like every single testcase I have that tests that has failed at some point in this development."}} {"origin_server_ts":1674487759145,"event_id":"$Z8G7Q13gmBi0DIE8Gxw80aD7SAKzlfwYOo3TAeCOAII","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"what exactly is it that you're changing here?","msgtype":"m.text","formatted_body":"what exactly is it that you're changing here?"}} {"origin_server_ts":1674487779222,"event_id":"$JAUOrhBOoL4G5PU6VoPtaq-5EIGBYcXwe6kJKMwbj_c","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So, the escape analyzer fails to notice they leak, and cleans them up too soon?","msgtype":"m.text","formatted_body":"So, the escape analyzer fails to notice they leak, and cleans them up too soon?"}} {"origin_server_ts":1674487782534,"event_id":"$dTbEYH4UeqUlO8GRZxeXN8ogohepQmz7WvaErGJshDY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I just now realised that I have the `defer` operator that I don't think I have good test coverage for. It'll probably fail too because it's not marked as potentially leaking."},{"mimetype":"text/html","body":"I just now realised that I have the defer<\/code> operator that I don't think I have good test coverage for. It'll probably fail too because it's not marked as potentially leaking."}],"format":"org.matrix.custom.html","body":"I just now realised that I have the `defer` operator that I don't think I have good test coverage for. It'll probably fail too because it's not marked as potentially leaking.","msgtype":"m.text","formatted_body":"I just now realised that I have the defer<\/code> operator that I don't think I have good test coverage for. It'll probably fail too because it's not marked as potentially leaking."}} {"origin_server_ts":1674487813945,"event_id":"$JGBUp2O_k5zvacvbrv2y5XQ7Mhhkcs49IbuTZZ0XeMY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$JAUOrhBOoL4G5PU6VoPtaq-5EIGBYcXwe6kJKMwbj_c"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@mlochbaum:matrix.org> So, the escape analyzer fails to notice they leak, and cleans them up too soon?\n\nYes. Or to be more precise, it doesn't copy the references so it'll get dropped as soon as the stack unrolls."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    So, the escape analyzer fails to notice they leak, and cleans them up too soon?<\/blockquote><\/mx-reply>Yes. Or to be more precise, it doesn't copy the references so it'll get dropped as soon as the stack unrolls."}],"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> So, the escape analyzer fails to notice they leak, and cleans them up too soon?\n\nYes. Or to be more precise, it doesn't copy the references so it'll get dropped as soon as the stack unrolls.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    So, the escape analyzer fails to notice they leak, and cleans them up too soon?<\/blockquote><\/mx-reply>Yes. Or to be more precise, it doesn't copy the references so it'll get dropped as soon as the stack unrolls."}} {"origin_server_ts":1674487838754,"event_id":"$cikHmk9CFolCEPbboaUaDEURw34XIBekt082FrbADV4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The old code copied all references \"just in case\" so it's been quite some work going back to analyse all situations this can happen.","msgtype":"m.text","org.matrix.msc1767.text":"The old code copied all references \"just in case\" so it's been quite some work going back to analyse all situations this can happen."}} {"origin_server_ts":1674487840261,"event_id":"$HrNKHrDJHRtS-a-0IZukssKlmZkB0JfRB659t16fT70","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Seems like you'd want to have features be marked as leaking by default, if that's possible.","msgtype":"m.text","formatted_body":"Seems like you'd want to have features be marked as leaking by default, if that's possible."}} {"origin_server_ts":1674487870193,"event_id":"$v8R1jDBIhOwxLY14PT6pMT44d30Awn4ICL8N2cXPU-U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah. That's what I did. And it's slow. I get a general speedup of 2x for function calls just from that.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah. That's what I did. And it's slow. I get a general speedup of 2x for function calls just from that."}} {"origin_server_ts":1674487999457,"event_id":"$y8ZN4J2DRktzNXmfOBoBlEF1FIQN71S3dlWuYFeb8sI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"What's the cost there? Something like stack allocation versus heap allocation? Would think the escape analysis itself is a small one-time thing.","msgtype":"m.text","formatted_body":"What's the cost there? Something like stack allocation versus heap allocation? Would think the escape analysis itself is a small one-time thing."}} {"origin_server_ts":1674488017526,"event_id":"$PwMetNKyXWtTBJhxVkkzH1WdujGUZ4S4ImRCuzTCWVY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Basically, at parse-time every lexical context is described by an instance of `Environment`. An environment instance has a number of bindings. The bindings are either local or refers to a parent environment. If there are no leaking contexts, the code can simply refer to a value in a parent stack frame (represented by a corresponding environment)."},{"mimetype":"text/html","body":"Basically, at parse-time every lexical context is described by an instance of Environment<\/code>. An environment instance has a number of bindings. The bindings are either local or refers to a parent environment. If there are no leaking contexts, the code can simply refer to a value in a parent stack frame (represented by a corresponding environment)."}],"format":"org.matrix.custom.html","body":"Basically, at parse-time every lexical context is described by an instance of `Environment`. An environment instance has a number of bindings. The bindings are either local or refers to a parent environment. If there are no leaking contexts, the code can simply refer to a value in a parent stack frame (represented by a corresponding environment).","msgtype":"m.text","formatted_body":"Basically, at parse-time every lexical context is described by an instance of Environment<\/code>. An environment instance has a number of bindings. The bindings are either local or refers to a parent environment. If there are no leaking contexts, the code can simply refer to a value in a parent stack frame (represented by a corresponding environment)."}} {"origin_server_ts":1674488124105,"event_id":"$dUvwIf-7oUxNiZbAQ9V5G6sI4znCw0YNEKwfri6ztNg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"If an environment is marked as `canEscape`, then the analyser identifies all variable references that crosses that environment, and rewrites them to point to the escaping environment. When allocating a stack frame for the escaping environment, all the variables from the parent frames that correspond to these escaping references are then copied into the frame."},{"mimetype":"text/html","body":"If an environment is marked as canEscape<\/code>, then the analyser identifies all variable references that crosses that environment, and rewrites them to point to the escaping environment. When allocating a stack frame for the escaping environment, all the variables from the parent frames that correspond to these escaping references are then copied into the frame."}],"format":"org.matrix.custom.html","body":"If an environment is marked as `canEscape`, then the analyser identifies all variable references that crosses that environment, and rewrites them to point to the escaping environment. When allocating a stack frame for the escaping environment, all the variables from the parent frames that correspond to these escaping references are then copied into the frame.","msgtype":"m.text","formatted_body":"If an environment is marked as canEscape<\/code>, then the analyser identifies all variable references that crosses that environment, and rewrites them to point to the escaping environment. When allocating a stack frame for the escaping environment, all the variables from the parent frames that correspond to these escaping references are then copied into the frame."}} {"origin_server_ts":1674488181795,"event_id":"$tm89gy2UVTEUu28B0nbyDmyEiUZi47O9yPbfiP_nV4g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"All variables are heap-allocated with a reference from the stack (the stack is also on the heap, as it's not using the JVM stack)","msgtype":"m.text","org.matrix.msc1767.text":"All variables are heap-allocated with a reference from the stack (the stack is also on the heap, as it's not using the JVM stack)"}} {"origin_server_ts":1674488243163,"event_id":"$q_j_VH3xkmrq0-ot7eW16sTm4sU_KI_C3ZdSkxbQdz4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Bindings exist at parse time? I think I don't know what a \"binding\" is here.","msgtype":"m.text","formatted_body":"Bindings exist at parse time? I think I don't know what a \"binding\" is here."}} {"origin_server_ts":1674488269119,"event_id":"$R33smNbQLP-0ny-97pINhI2LgU71lY5OLT7NIr_gpfg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"A binding is a mapping from a symbol name to a specific storage descriptor.","msgtype":"m.text","org.matrix.msc1767.text":"A binding is a mapping from a symbol name to a specific storage descriptor."}} {"origin_server_ts":1674488321170,"event_id":"$gASDwfm8gtojMDjKl3QTotSCPhLjl2W1rVbXWRXGUPs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"For example: `{ a ← 1 ◊ foo a ◊ { bar a } 0 }`"},{"mimetype":"text/html","body":"For example: { a ← 1 ◊ foo a ◊ { bar a } 0 }<\/code>"}],"format":"org.matrix.custom.html","body":"For example: `{ a ← 1 ◊ foo a ◊ { bar a } 0 }`","msgtype":"m.text","formatted_body":"For example: { a ← 1 ◊ foo a ◊ { bar a } 0 }<\/code>"}} {"origin_server_ts":1674488348951,"event_id":"$A6FIM2fgmBE65jAjM7pzLIhNddoxwZl6hIqahKDr0zc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Here you have two bindings to the same storage descriptor (the variable a at toplevel)","msgtype":"m.text","org.matrix.msc1767.text":"Here you have two bindings to the same storage descriptor (the variable a at toplevel)"}} {"origin_server_ts":1674488357617,"event_id":"$XR4tSHQ3ct5JzxueiSp_wLyK7PW8dngzn1YUjM5Y7BU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Here you have two bindings to the same storage descriptor (the variable a)","msgtype":"m.text","org.matrix.msc1767.text":"Here you have two bindings to the same storage descriptor (the variable a)"},"m.relates_to":{"event_id":"$A6FIM2fgmBE65jAjM7pzLIhNddoxwZl6hIqahKDr0zc","rel_type":"m.replace"},"body":" * Here you have two bindings to the same storage descriptor (the variable a)","msgtype":"m.text","org.matrix.msc1767.text":" * Here you have two bindings to the same storage descriptor (the variable a)"}} {"origin_server_ts":1674488375570,"event_id":"$5RukKONzRgr_GDLn1bBRTIJvam4XmDlzg82jjsacjxI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The two bindings are in different environment though.","msgtype":"m.text","org.matrix.msc1767.text":"The two bindings are in different environment though."}} {"origin_server_ts":1674488379518,"event_id":"$yyNkQvmLeitPRaIxsJe_EwUSgtu75HgdamutU5mJZXk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"The two bindings are in different environments though.","msgtype":"m.text","org.matrix.msc1767.text":"The two bindings are in different environments though."},"m.relates_to":{"event_id":"$5RukKONzRgr_GDLn1bBRTIJvam4XmDlzg82jjsacjxI","rel_type":"m.replace"},"body":" * The two bindings are in different environments though.","msgtype":"m.text","org.matrix.msc1767.text":" * The two bindings are in different environments though."}} {"origin_server_ts":1674488391159,"event_id":"$vks0lsSswHP_C3LfgrK9dRjtlASaLAizZcc1TFMaiI4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Okay, so the result of escape analysis is basically to classify bindings as being either locally contained or not.","msgtype":"m.text","formatted_body":"Okay, so the result of escape analysis is basically to classify bindings as being either locally contained or not."}} {"origin_server_ts":1674488403642,"event_id":"$H-rOLlNi0ouiuKmI2Ih3urG_n3SZ_xV4pYXMfWq9V_M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. Exactly.","msgtype":"m.text","org.matrix.msc1767.text":"Yes. Exactly."}} {"origin_server_ts":1674488430849,"event_id":"$XnLMUc7Sfz-_0vKs6Zociki0xMw_VR3SgbnazZOTf60","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And to ensure that they all are locally contained, by doing some extra work at runtime.","msgtype":"m.text","org.matrix.msc1767.text":"And to ensure that they all are locally contained, by doing some extra work at runtime."}} {"origin_server_ts":1674488442068,"event_id":"$LlUoasu7yhUaQYfYg-BGPEG4aeU0GWDekKFc4LQOa7Y","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Somewhat confused about whether it's the variables or their values escaping? I believe traditional escape analysis just deals with values.","msgtype":"m.text","formatted_body":"Somewhat confused about whether it's the variables or their values escaping? I believe traditional escape analysis just deals with values."}} {"origin_server_ts":1674488493460,"event_id":"$wEj2pGNB9VRGAx3sQ6iWoO5cEJnEBj--pvbKFCXF7m8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If I miss one, I end up with an attempt to try to find a storage location at a higher level of the stack, which may then be a completely different frame. In the best case, I get an array index out of bounds error when it tries to find the n'th element in the frame, or I get the wrong value.","msgtype":"m.text","org.matrix.msc1767.text":"If I miss one, I end up with an attempt to try to find a storage location at a higher level of the stack, which may then be a completely different frame. In the best case, I get an array index out of bounds error when it tries to find the n'th element in the frame, or I get the wrong value."}} {"origin_server_ts":1674488526664,"event_id":"$y3z-LA9tZ-B-WlA08B8X_npMBXqq8tpS2yQ6PdhZOoE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"so you have a runtime stack, and reference values up it now?","msgtype":"m.text","formatted_body":"so you have a runtime stack, and reference values up it now?"}} {"origin_server_ts":1674488529329,"event_id":"$QPI4Xm5VnCX0MaxjJbqFtvHM7vrGTT_fQIunZG3cC6w","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Well, I guess you have to do the value-oriented analysis to figure out if an environment will outlive its parent, which is how I'm interpreting `canEscape`.","msgtype":"m.text","formatted_body":"Well, I guess you have to do the value-oriented analysis to figure out if an environment will outlive its parent, which is how I'm interpreting canEscape<\/code>."}} {"origin_server_ts":1674488528475,"event_id":"$7I3OcVO2QNZKBDIuwRFSUjtW6mLnS0WcfzaP0SPitmA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$LlUoasu7yhUaQYfYg-BGPEG4aeU0GWDekKFc4LQOa7Y"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@mlochbaum:matrix.org> Somewhat confused about whether it's the variables or their values escaping? I believe traditional escape analysis just deals with values.\n\nI think the confusion comes from my choice of terminology."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Somewhat confused about whether it's the variables or their values escaping? I believe traditional escape analysis just deals with values.<\/blockquote><\/mx-reply>I think the confusion comes from my choice of terminology."}],"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Somewhat confused about whether it's the variables or their values escaping? I believe traditional escape analysis just deals with values.\n\nI think the confusion comes from my choice of terminology.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Somewhat confused about whether it's the variables or their values escaping? I believe traditional escape analysis just deals with values.<\/blockquote><\/mx-reply>I think the confusion comes from my choice of terminology."}} {"origin_server_ts":1674488535824,"event_id":"$8Fi-CyVT0nad5LGVNy0wUttKqQvSB4jy_0-4pmLlIjw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$y3z-LA9tZ-B-WlA08B8X_npMBXqq8tpS2yQ6PdhZOoE"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> so you have a runtime stack, and reference values up it now?\n\nYes."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    so you have a runtime stack, and reference values up it now?<\/blockquote><\/mx-reply>Yes."}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> so you have a runtime stack, and reference values up it now?\n\nYes.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    so you have a runtime stack, and reference values up it now?<\/blockquote><\/mx-reply>Yes."}} {"origin_server_ts":1674488554106,"event_id":"$RNgYQhR46T5cJ71rRBhRkuykfwKoYP29gUHw662obgo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and that's much faster than referencing values by the lexical stack?","msgtype":"m.text","formatted_body":"and that's much faster than referencing values by the lexical stack?"}} {"origin_server_ts":1674488558229,"event_id":"$KeC6RBWflq9y6lqtTE4KncZDyctM2uvFHWK9zKbGJMk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So a storage reference can say: \"the value can be found 3 frames up in the 2'nd slot\"","msgtype":"m.text","org.matrix.msc1767.text":"So a storage reference can say: \"the value can be found 3 frames up in the 2'nd slot\""}} {"origin_server_ts":1674488590606,"event_id":"$Bage6QK7Okbxo3I7Ji4cOlGUeVbLzTO7Y7K4pVETt1Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$RNgYQhR46T5cJ71rRBhRkuykfwKoYP29gUHw662obgo"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> and that's much faster than referencing values by the lexical stack?\n\nThe lexical stack is a compile-time concept."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    and that's much faster than referencing values by the lexical stack?<\/blockquote><\/mx-reply>The lexical stack is a compile-time concept."}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> and that's much faster than referencing values by the lexical stack?\n\nThe lexical stack is a compile-time concept.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    and that's much faster than referencing values by the lexical stack?<\/blockquote><\/mx-reply>The lexical stack is a compile-time concept."}} {"origin_server_ts":1674488625920,"event_id":"$mKaq1Sg4zPk2YAduV-S-BvDHMVKpZ-2H8S1kiN78SiM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's just that as long as nothing escapes, the stack of environments (compile-time) is the same as the stack of runtime stack frames.","msgtype":"m.text","org.matrix.msc1767.text":"It's just that as long as nothing escapes, the stack of environments (compile-time) is the same as the stack of runtime stack frames."}} {"origin_server_ts":1674488645725,"event_id":"$11IJVfas36H0mDG5uotxMSPklV8xptTWFqxEXSPEae8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"anything preventing preserving the lexical stack into runtime?","msgtype":"m.text","formatted_body":"anything preventing preserving the lexical stack into runtime?"}} {"origin_server_ts":1674488648158,"event_id":"$h14MqJ3gn2RRylVEaVgzS6t-8uMf8LptRSukmxUkHBk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"At runtime you get a tree, where each (runtime) environment points to the one that created it, which corresponds to its lexical parent.","msgtype":"m.text","formatted_body":"At runtime you get a tree, where each (runtime) environment points to the one that created it, which corresponds to its lexical parent."}} {"origin_server_ts":1674488662420,"event_id":"$J2r0n07fmDdIr_j507TPj4BWA6RxPujiIzoa6B5KyL8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right. Exactly.","msgtype":"m.text","org.matrix.msc1767.text":"Right. Exactly."}} {"origin_server_ts":1674488708613,"event_id":"$1FfjCvOe-VwU2hc0Gn2up2eFFEz8h1LhOOWQ04R_yPo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But lambda functions and lazy values break that, and it's the job of the escape analyser to find those spots and ensure that there are no references that crosses the escaped frames.","msgtype":"m.text","org.matrix.msc1767.text":"But lambda functions and lazy values break that, and it's the job of the escape analyser to find those spots and ensure that there are no references that crosses the escaped frames."}} {"origin_server_ts":1674488724077,"event_id":"$fbEB_QKEGRuCaWQVijtWVdTvMX6rCWqVT_v1xlAkqXs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Actually the compile-time thing is also a tree, but the runtime one can be bigger (multiple runtime environments corresponding to a compile-time scope).","msgtype":"m.text","formatted_body":"Actually the compile-time thing is also a tree, but the runtime one can be bigger (multiple runtime environments corresponding to a compile-time scope)."}} {"origin_server_ts":1674488785713,"event_id":"$Xqf_4N2e5i0UDrNkD7R7dCLvPfodFzHFRYm-H-jXSRo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"And to answer the earlier question as to whether it's worth it... I'm not sure at the moment. I've been unable to think of anything else for days, and I feel exhausted. All of this for a 2x performance increase in the dzaima test case."},{"mimetype":"text/html","body":"And to answer the earlier question as to whether it's worth it... I'm not sure at the moment. I've been unable to think of anything else for days, and I feel exhausted. All of this for a 2x performance increase in the
                    dzaima<\/a> test case."}],"format":"org.matrix.custom.html","body":"And to answer the earlier question as to whether it's worth it... I'm not sure at the moment. I've been unable to think of anything else for days, and I feel exhausted. All of this for a 2x performance increase in the dzaima test case.","msgtype":"m.text","formatted_body":"And to answer the earlier question as to whether it's worth it... I'm not sure at the moment. I've been unable to think of anything else for days, and I feel exhausted. All of this for a 2x performance increase in the dzaima<\/a> test case."}} {"origin_server_ts":1674488822430,"event_id":"$KqBBkeO5ysbpkcgFbaHnHCiKOdwgIM_ZbFnC_0QDTP0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Actually, there is a memory savings as well, and variable lookups are faster too.","msgtype":"m.text","org.matrix.msc1767.text":"Actually, there is a memory savings as well, and variable lookups are faster too."}} {"origin_server_ts":1674488843868,"event_id":"$G2TErGlD_ivnecfw7NXyJSFdtRjAhEcprqjS-eOjGTE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"At least I'm beating python on that test case now, so that's good.","msgtype":"m.text","org.matrix.msc1767.text":"At least I'm beating python on that test case now, so that's good."}} {"origin_server_ts":1674488849756,"event_id":"$fbFP3oYfkEjznbepaeiP9vP1odWFqVm_e-1YCuJFBS4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$gASDwfm8gtojMDjKl3QTotSCPhLjl2W1rVbXWRXGUPs"}},"format":"org.matrix.custom.html","body":"what is it that you, before these changes, do to look up `a` in the inner dfn there?","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>what is it that you, before these changes, do to look up a<\/code> in the inner dfn there?"}} {"origin_server_ts":1674488857045,"event_id":"$iIkcwI8t9zbWf0fPqsRfIYkSxz-PA-b4iGFML_ff9ps","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(until dzaima shows me another test case where python wins)","msgtype":"m.text","org.matrix.msc1767.text":"(until dzaima shows me another test case where python wins)"}} {"origin_server_ts":1674488898708,"event_id":"$FekuNdMNmn9LoCrAuNaWpmxprXbErxapuwQQiqJSzjw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"What we do in BQN is to have a reference from the child environment to the parent, so the parent will stay alive if its variables are still reachable.","msgtype":"m.text","formatted_body":"What we do in BQN is to have a reference from the child environment to the parent, so the parent will stay alive if its variables are still reachable."}} {"origin_server_ts":1674488926092,"event_id":"$ap1GftYxc-fwzz_zVm50l_UYcQ6gpTlakQfvMfkvESE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, I used to do that.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, I used to do that."}} {"origin_server_ts":1674488950790,"event_id":"$RtY6KGBhh-4wwdJtFjJK2JoMkgAdnVV76fgWQDnNhe0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But each variable lookup was a hash lookup at the time, and I had to do more than one when searching up the stack for the value.","msgtype":"m.text","org.matrix.msc1767.text":"But each variable lookup was a hash lookup at the time, and I had to do more than one when searching up the stack for the value."}} {"origin_server_ts":1674488987003,"event_id":"$_3cGv91QP2YfKHVeecfjaec4A2UktOWlxmnybVijT4A","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it seems like hash lookups & searching is the issue there","msgtype":"m.text","formatted_body":"it seems like hash lookups & searching is the issue there"}} {"origin_server_ts":1674489014715,"event_id":"$5SVGp3xpQJ5eol160vFSfarEZQbhjwRxxT2oFqOaxoA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Also it meant that if I leaked a reference, all the content of all the affected frames were kept and couldn't be cg'ed.","msgtype":"m.text","org.matrix.msc1767.text":"Also it meant that if I leaked a reference, all the content of all the affected frames were kept and couldn't be cg'ed."}} {"origin_server_ts":1674489025239,"event_id":"$EA3D9jGmS1ekpfNX50l-iibX18OtlG_Ek94bdDVPdKI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: Yeah, that's where I began."},{"mimetype":"text/html","body":"dzaima<\/a>: Yeah, that's where I began."}],"format":"org.matrix.custom.html","body":"dzaima: Yeah, that's where I began.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Yeah, that's where I began."}} {"origin_server_ts":1674489031470,"event_id":"$FD8E1Nb3SqM8-XfYx6vnLyuJZagmpk_guYtdWSXIBjY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Then I entered the rabbit hole.","msgtype":"m.text","org.matrix.msc1767.text":"Then I entered the rabbit hole."}} {"origin_server_ts":1674489086944,"event_id":"$b1NNWlKyMtkNQ5lYZX6OFG6pDaObJ8QwGMLJKfZkkI0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I had several iterations until I found a decent way to track leaking frames.","msgtype":"m.text","org.matrix.msc1767.text":"I had several iterations until I found a decent way to track leaking frames."}} {"origin_server_ts":1674489092555,"event_id":"$qOUDwGE87R7xWXSlyamtfgeRlA5-f7CSq2kWUaktbkg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$5SVGp3xpQJ5eol160vFSfarEZQbhjwRxxT2oFqOaxoA"}},"format":"org.matrix.custom.html","body":"you could also instead of referning the parent environment, reference all variables you need from it, and put them into a nice flat array, and have variable reading know the index in the array to use (and children scopes know which slots to pick up)","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>you could also instead of referning the parent environment, reference all variables you need from it, and put them into a nice flat array, and have variable reading know the index in the array to use (and children scopes know which slots to pick up)"}} {"origin_server_ts":1674489103945,"event_id":"$RcPBsKl8upxgb4CIZxd-J_rv0Dfr1uiqMxcp7rf2n7Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If I had had that system in place before I changed everything else, perhaps I could have done things differently.","msgtype":"m.text","org.matrix.msc1767.text":"If I had had that system in place before I changed everything else, perhaps I could have done things differently."}} {"origin_server_ts":1674489129088,"event_id":"$jM9cXMK77wi0m8hYP_xzq5Fe3AqRwjtGXfoVx_fYvcw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$qOUDwGE87R7xWXSlyamtfgeRlA5-f7CSq2kWUaktbkg"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> you could also instead of referning the parent environment, reference all variables you need from it, and put them into a nice flat array, and have variable reading know the index in the array to use (and children scopes know which slots to pick up)\n\nThat's essentially what I do now, but only in the leaking case."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    you could also instead of referning the parent environment, reference all variables you need from it, and put them into a nice flat array, and have variable reading know the index in the array to use (and children scopes know which slots to pick up)<\/blockquote><\/mx-reply>That's essentially what I do now, but only in the leaking case."}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> you could also instead of referning the parent environment, reference all variables you need from it, and put them into a nice flat array, and have variable reading know the index in the array to use (and children scopes know which slots to pick up)\n\nThat's essentially what I do now, but only in the leaking case.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    you could also instead of referning the parent environment, reference all variables you need from it, and put them into a nice flat array, and have variable reading know the index in the array to use (and children scopes know which slots to pick up)<\/blockquote><\/mx-reply>That's essentially what I do now, but only in the leaking case."}} {"origin_server_ts":1674489141899,"event_id":"$Sfag7fLCnX1b4R-WiwYhBDkljQsD7Iv-vc7_9C8ZxNA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and that's slow?","msgtype":"m.text","formatted_body":"and that's slow?"}} {"origin_server_ts":1674489155080,"event_id":"$iayuU8N6O3O9EjNsXOsUF6z2HgP7CkhHxieZpJRPzLM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No, right now with the new code it's reasonably fast.","msgtype":"m.text","org.matrix.msc1767.text":"No, right now with the new code it's reasonably fast."}} {"origin_server_ts":1674489158629,"event_id":"$TaR-9gW1lC1tvGQq5Kni9-vp4aMb1mzszPKoYMdMbAo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But it's fragile.","msgtype":"m.text","org.matrix.msc1767.text":"But it's fragile."}} {"origin_server_ts":1674489162340,"event_id":"$lOzq61Z7_gGnxr1w1-lLrSPxOQuKOcjz3yVe_rmweUQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I mean the old code","msgtype":"m.text","formatted_body":"I mean the old code"}} {"origin_server_ts":1674489165187,"event_id":"$tPeyrDKGGG4y5p5HlEwXMyzx9V0rFkR4ECmjjTpIzFc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Very easy to introduce bugs.","msgtype":"m.text","org.matrix.msc1767.text":"Very easy to introduce bugs."}} {"origin_server_ts":1674489174793,"event_id":"$L88Bqks2ChBsU3XJUwskC5BHd3naovSJvc8eVKJDXeg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$lOzq61Z7_gGnxr1w1-lLrSPxOQuKOcjz3yVe_rmweUQ"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> I mean the old code\n\nAh no. The old code didn't do that."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    I mean the old code<\/blockquote><\/mx-reply>Ah no. The old code didn't do that."}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> I mean the old code\n\nAh no. The old code didn't do that.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    I mean the old code<\/blockquote><\/mx-reply>Ah no. The old code didn't do that."}} {"origin_server_ts":1674489188475,"event_id":"$JcGLajCNfiBZ8AEu3Px7mtU-3ma08IyZElxAqVfFI3E","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"oh, the new code changes both leaking and non-leaking behavior?","msgtype":"m.text","formatted_body":"oh, the new code changes both leaking and non-leaking behavior?"}} {"origin_server_ts":1674489199257,"event_id":"$7tsilVd1bPGtr4s0NKbMowUcMR-kHSINSSz7k9MWl3Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. It changed pretty much everything.","msgtype":"m.text","org.matrix.msc1767.text":"Yes. It changed pretty much everything."}} {"origin_server_ts":1674489217226,"event_id":"$hQEKivwksv9T0NM7V3vaNKN0O514hno_2WpUYKUd-yE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"so you could disable the escape analysis and still get a perf boost?","msgtype":"m.text","formatted_body":"so you could disable the escape analysis and still get a perf boost?"}} {"origin_server_ts":1674489219276,"event_id":"$ju71eKrjtfRUtCAiPIxlMDYflonPyMOvtJNxs5FpclQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's as close to a complete rewrite of this thing as you can get without doing a complete rewrite.","msgtype":"m.text","org.matrix.msc1767.text":"It's as close to a complete rewrite of this thing as you can get without doing a complete rewrite."}} {"origin_server_ts":1674489226126,"event_id":"$7cEq-RPtHugEEd054QEpoKOTzkroEK52r7ZsfXahY9k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's why I'm so concerened about bugs.","msgtype":"m.text","org.matrix.msc1767.text":"That's why I'm so concerened about bugs."}} {"origin_server_ts":1674489230794,"event_id":"$C9jR6tREMnGwO00f-nKZPwW_PWG8SxTuSaHQ0FqS0To","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"That's why I'm so concerned about bugs.","msgtype":"m.text","org.matrix.msc1767.text":"That's why I'm so concerned about bugs."},"m.relates_to":{"event_id":"$7cEq-RPtHugEEd054QEpoKOTzkroEK52r7ZsfXahY9k","rel_type":"m.replace"},"body":" * That's why I'm so concerned about bugs.","msgtype":"m.text","org.matrix.msc1767.text":" * That's why I'm so concerned about bugs."}} {"origin_server_ts":1674489232852,"event_id":"$IqqYF-AI_QDQSOFDTpeoK2ScO1NXrLYdlG-Qesbhr70","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Before you said allocating a stack frame is slow, but it doesn't seem like any of this touches that? Or it might make it worse.","msgtype":"m.text","formatted_body":"Before you said allocating a stack frame is slow, but it doesn't seem like any of this touches that? Or it might make it worse."}} {"origin_server_ts":1674489239660,"event_id":"$y1vLsDGsUrpVlq8N6bPMjzu5hTTA1dNvXAyTU0sBW_M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$hQEKivwksv9T0NM7V3vaNKN0O514hno_2WpUYKUd-yE"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> so you could disable the escape analysis and still get a perf boost?\n\nPossibly."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    so you could disable the escape analysis and still get a perf boost?<\/blockquote><\/mx-reply>Possibly."}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> so you could disable the escape analysis and still get a perf boost?\n\nPossibly.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    so you could disable the escape analysis and still get a perf boost?<\/blockquote><\/mx-reply>Possibly."}} {"origin_server_ts":1674489254405,"event_id":"$S17WW6ZfIvAhiPQwf9qT0vcUhhTXWODUgl5boFfZJ1o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'd probably be much faster thanks to the other improvements.","msgtype":"m.text","org.matrix.msc1767.text":"I'd probably be much faster thanks to the other improvements."}} {"origin_server_ts":1674489284454,"event_id":"$LdFr7-OcQ3BN59o6BPMykTofbiUcfJSwgZLF2TOQKio","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$IqqYF-AI_QDQSOFDTpeoK2ScO1NXrLYdlG-Qesbhr70"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@mlochbaum:matrix.org> Before you said allocating a stack frame is slow, but it doesn't seem like any of this touches that? Or it might make it worse.\n\nAllocating a stack frame used to be very slow, because it involved a bunch of hash lookups to copy values."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Before you said allocating a stack frame is slow, but it doesn't seem like any of this touches that? Or it might make it worse.<\/blockquote><\/mx-reply>Allocating a stack frame used to be very slow, because it involved a bunch of hash lookups to copy values."}],"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Before you said allocating a stack frame is slow, but it doesn't seem like any of this touches that? Or it might make it worse.\n\nAllocating a stack frame used to be very slow, because it involved a bunch of hash lookups to copy values.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Before you said allocating a stack frame is slow, but it doesn't seem like any of this touches that? Or it might make it worse.<\/blockquote><\/mx-reply>Allocating a stack frame used to be very slow, because it involved a bunch of hash lookups to copy values."}} {"origin_server_ts":1674489320720,"event_id":"$KAZXP343mUPIRrdHVhqmqhCoLAMG-exI6HrlIi7K85E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now it's much faster, although I still have room to improve things, because there is still one level of indirection for variable storage.","msgtype":"m.text","org.matrix.msc1767.text":"Now it's much faster, although I still have room to improve things, because there is still one level of indirection for variable storage."}} {"origin_server_ts":1674489378186,"event_id":"$EXz6amCfXDHBv_YKyjK1W7tgnHJBLelRwGlb4KJCF4w","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Makes sense I guess. Does anything still hash at runtime?","msgtype":"m.text","formatted_body":"Makes sense I guess. Does anything still hash at runtime?"}} {"origin_server_ts":1674489424068,"event_id":"$ND9p8YtOx4r-5cW4Gm4caMGfk8KmQPE2X-bBCONPGLc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No. All hashing is now eliminated. ","msgtype":"m.text"}} {"origin_server_ts":1674489434810,"event_id":"$mFYtPdunOXsnhEnPLLtLBFMZST_tmRXqzBnispc19ew","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's just array indexing ","msgtype":"m.text"}} {"origin_server_ts":1674489462179,"event_id":"$_qhshPMmVfXf160zVgfhE_Rk4p7naLg-iWQZVnwSfdY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I wish I had an extensive benchmark I could run to test things. ","msgtype":"m.text"}} {"origin_server_ts":1674489497839,"event_id":"$QPZhf0mNM-iYzjCHAp7vpBQwMTjOd7znT-ajg6LXX7c","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"just occurred to me that I can throw in dzaima/BQN into the benchmarking mix:\n```\n 10\u2022Time \"+´{+´⟨𝕩, 𝕩+1⟩}¨ ↕1000000\"\n\"66.8ms\"\n \u2022compstart←¯1\n 10\u2022Time \"+´{+´⟨𝕩, 𝕩+1⟩}¨ ↕1000000\"\n\"227ms\"\n```","msgtype":"m.text","formatted_body":"just occurred to me that I can throw in dzaima/BQN into the benchmarking mix:
                       10\u2022Time "+´{+´⟨𝕩, 𝕩+1⟩}¨ ↕1000000"\n"66.8ms"\n   \u2022compstart←¯1\n   10\u2022Time "+´{+´⟨𝕩, 𝕩+1⟩}¨ ↕1000000"\n"227ms"<\/code><\/pre>"}}
                    {"origin_server_ts":1674489553787,"event_id":"$cWzy35L-LszMOHGTLzaitFy9NuBL33SR7r-FO31jyBE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's actually quite the big boost from the compilation to java bytecode","msgtype":"m.text","formatted_body":"that's actually quite the big boost from the compilation to java bytecode"}}
                    {"origin_server_ts":1674489567435,"event_id":"$hcD2KWvDVbpi60CTYx5PQmcyC_viK8w4P5cUA_aN-mQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"that's actually quite the big boost from the compilation to java bytecode; somehow I don't recall that being too good :p","msgtype":"m.text","formatted_body":"that's actually quite the big boost from the compilation to java bytecode; somehow I don't recall that being too good :p"},"m.relates_to":{"event_id":"$cWzy35L-LszMOHGTLzaitFy9NuBL33SR7r-FO31jyBE","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* that's actually quite the big boost from the compilation to java bytecode; somehow I don't recall that being too good :p","msgtype":"m.text","formatted_body":"* that's actually quite the big boost from the compilation to java bytecode; somehow I don't recall that being too good :p"}}
                    {"origin_server_ts":1674489582845,"event_id":"$HOAwGDI40bJUxe13H-J381x22NbmAWJt1gv-bxHRaXg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Did dzaima/APL do bytecode compilation? Can't remember the timeline on that.","msgtype":"m.text","formatted_body":"Did dzaima/APL do bytecode compilation? Can't remember the timeline on that."}}
                    {"origin_server_ts":1674489594246,"event_id":"$bkjK5OpWsj0hGMG0gJWifdMOppjqR_UzxVYaN1HEbjc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima/APL didn't do any compilation at all","msgtype":"m.text","formatted_body":"dzaima/APL didn't do any compilation at all"}}
                    {"origin_server_ts":1674489642956,"event_id":"$EHnlIPdr3Lxzu86EkgE71hIooGo8uwJl0Fa_eF5cMwA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I meant JVM compilation but that answers that too.","msgtype":"m.text","formatted_body":"I meant JVM compilation but that answers that too."}}
                    {"origin_server_ts":1674491263664,"event_id":"$tO7-p4CpJcFbr_zbL9Kdq-HM2e4LvEpt9mAsF_Jt72k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$cWzy35L-LszMOHGTLzaitFy9NuBL33SR7r-FO31jyBE"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> that's actually quite the big boost from the compilation to java bytecode; somehow I don't recall that being too good :p\n\nWhat does compstart do? ","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    that's actually quite the big boost from the compilation to java bytecode; somehow I don't recall that being too good :p<\/blockquote><\/mx-reply>What does compstart do?"}} {"origin_server_ts":1674491314121,"event_id":"$_A3iEyR1XBG6w8zJMS7YXSCCW0iid8DpArNVPMWvx-I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"sets the point at which dzaima/BQN will compile blocks to jvm bytecode; `¯1` disables that; by default it's like `2` or something (i.e. after 2 calls, compile a block to jvm bytecode)","msgtype":"m.text","formatted_body":"sets the point at which dzaima/BQN will compile blocks to jvm bytecode; ¯1<\/code> disables that; by default it's like 2<\/code> or something (i.e. after 2 calls, compile a block to jvm bytecode)"}} {"origin_server_ts":1674491461086,"event_id":"$mfcj_oUrGhjRAxslIOYrGgnp7s6DOLwTdxSJ_OZhJiY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Impressive ","msgtype":"m.text"}} {"origin_server_ts":1674491607358,"event_id":"$iwxkG-5zIlbGKwBXYnrM-NbIVM2SpkVa0wyMNL8QmIQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it wasn't that complicated actually; just translating the switch cases to equivalent bytecode ([the jvm bytecode generator](https://github.com/dzaima/BQN/blob/88f2b43966a75cc2c382421218eb30003bb16f4a/src/BQN/tools/JBQNComp.java), and respective [basic java `switch`](https://github.com/dzaima/BQN/blob/88f2b43966a75cc2c382421218eb30003bb16f4a/src/BQN/Comp.java#L119-L384))","msgtype":"m.text","formatted_body":"it wasn't that complicated actually; just translating the switch cases to equivalent bytecode (
                    the jvm bytecode generator<\/a>, and respective basic java switch<\/code><\/a>)"}} {"origin_server_ts":1674570558027,"event_id":"$rTzzibLwqjh7crWkeP4TUUwrMo5l9Ry3_Pr5TssHmMc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Almost there. The only thing that fails now is self recursion (using the `⍓` function, similar to `∇` in Dyalog)"},{"mimetype":"text/html","body":"Almost there. The only thing that fails now is self recursion (using the ⍓<\/code> function, similar to ∇<\/code> in Dyalog)"}],"format":"org.matrix.custom.html","body":"Almost there. The only thing that fails now is self recursion (using the `⍓` function, similar to `∇` in Dyalog)","msgtype":"m.text","formatted_body":"Almost there. The only thing that fails now is self recursion (using the ⍓<\/code> function, similar to ∇<\/code> in Dyalog)"}} {"origin_server_ts":1674570581920,"event_id":"$AJaVWE8iaMyreuqvkoPRVjYJvbfQfDHyTwJyz5dsvKg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think I know what the issue is, but it's tricky.","msgtype":"m.text","org.matrix.msc1767.text":"I think I know what the issue is, but it's tricky."}} {"origin_server_ts":1674570609665,"event_id":"$vByrjZUNAurI4vGPWhzNX8DQZ2v8mfj1Pm6a_5k21Nc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, you can always use this trick to achieve the same thing (it's called the ycombinator I think?)","msgtype":"m.text","org.matrix.msc1767.text":"However, you can always use this trick to achieve the same thing (it's called the ycombinator I think?)"}} {"origin_server_ts":1674570610403,"event_id":"$ep8RHeNudI6cGBjvTbMWIAh-AKXGpSjyTl2Mty_UEuk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#outer%20%E2%86%90%20%CE%BB%7B%0A%20%20a0%20%E2%86%90%20%E2%8D%B5%0A%20%20inner%20%E2%86%90%20%CE%BB%7B%0A%20%20%20%20(f%20arg)%20%E2%86%90%20%E2%8D%B5%0A%20%20%20%20if%20(0%E2%89%A1arg)%20%7B%0A%20%20%20%20%20%200%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20arg%20%2B%20%E2%8D%9Ef%20f%20(arg%20-%201)%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20%E2%8D%9Einner%20inner%20a0%0A%7D%0A%E2%8D%9Eouter%2010","msgtype":"m.text","org.matrix.msc1767.text":"https://kapdemo.dhsdevelopments.com/clientweb2/#outer%20%E2%86%90%20%CE%BB%7B%0A%20%20a0%20%E2%86%90%20%E2%8D%B5%0A%20%20inner%20%E2%86%90%20%CE%BB%7B%0A%20%20%20%20(f%20arg)%20%E2%86%90%20%E2%8D%B5%0A%20%20%20%20if%20(0%E2%89%A1arg)%20%7B%0A%20%20%20%20%20%200%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20arg%20%2B%20%E2%8D%9Ef%20f%20(arg%20-%201)%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20%E2%8D%9Einner%20inner%20a0%0A%7D%0A%E2%8D%9Eouter%2010"}} {"origin_server_ts":1674652749945,"event_id":"$i_tMKmPjzoXQPHEKg75ZWz2IJWRkNAKOEGsY-e15nII","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Test","msgtype":"m.text","org.matrix.msc1767.text":"Test"}} {"origin_server_ts":1674652761772,"event_id":"$S3K-9xGbrCJ5-_mkZJPPRCBfrggEydKFACDNOYn6xwM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"My matrix server didn't restart properly after an upgrade","msgtype":"m.text","org.matrix.msc1767.text":"My matrix server didn't restart properly after an upgrade"}} {"origin_server_ts":1674652920510,"event_id":"$pwByFiDNRrhNiHmBvZ-uDnuHs38qzMlsHqlS6IkAbXo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Last two messages came through.","msgtype":"m.text","formatted_body":"Last two messages came through."}} {"origin_server_ts":1674657414555,"event_id":"$a3xk6BNS_edJTW7S0jWeRD6Ov1tqm1rQ_oolenQ-7Ng","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The send to last one was send yesterday. :-)","msgtype":"m.text","org.matrix.msc1767.text":"The send to last one was send yesterday. :-)"}} {"origin_server_ts":1674657441094,"event_id":"$HIBai6ujq8lSxVrA3Jmy2K0-OwcFJrf4D2lX_677vyY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now... last night I thought about this great idea to remove one level of indirection for variable access, which should increase performance a bit.","msgtype":"m.text","org.matrix.msc1767.text":"Now... last night I thought about this great idea to remove one level of indirection for variable access, which should increase performance a bit."}} {"origin_server_ts":1674657496867,"event_id":"$aV94ned_j2YnTDQ4VsOWkqmIDrAjlw91tX1gwPOKlok","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So, I implemented it... In doing so, I discovered a bit of debug code that was left behind which doubled the time taken to do variable lookup (the code was duplicated, with the first one recording the result for the debugger)","msgtype":"m.text","org.matrix.msc1767.text":"So, I implemented it... In doing so, I discovered a bit of debug code that was left behind which doubled the time taken to do variable lookup (the code was duplicated, with the first one recording the result for the debugger)"}} {"origin_server_ts":1674657512487,"event_id":"$T2vJ2BQ2GWiMoAkO9OC0BnG1qHbbI5YllVEfCScNdw0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Removing that one saved me a _lot_ more than I gained from the optimised lookup."},{"mimetype":"text/html","body":"Removing that one saved me a lot<\/em> more than I gained from the optimised lookup."}],"format":"org.matrix.custom.html","body":"Removing that one saved me a _lot_ more than I gained from the optimised lookup.","msgtype":"m.text","formatted_body":"Removing that one saved me a lot<\/em> more than I gained from the optimised lookup."}} {"origin_server_ts":1674657514617,"event_id":"$ENcGf26OkdFCydaXT1Z-wHcKAMeRKEsPFSgD1lPwh_4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Question:","msgtype":"m.text","org.matrix.msc1767.text":"Question:"}} {"origin_server_ts":1674657557330,"event_id":"$SHC7uWSBNXdz1MbSI6B7HyYOq5Hc30grF8c-75JtARc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Is it even worth making the variable lookup code even more complicated to gain very little? Here are the numbers for the following function (from dzaima some time ago, which I've used for testing)"},{"mimetype":"text/html","body":"Is it even worth making the variable lookup code even more complicated to gain very little? Here are the numbers for the following function (from dzaima<\/a> some time ago, which I've used for testing)"}],"format":"org.matrix.custom.html","body":"Is it even worth making the variable lookup code even more complicated to gain very little? Here are the numbers for the following function (from dzaima some time ago, which I've used for testing)","msgtype":"m.text","formatted_body":"Is it even worth making the variable lookup code even more complicated to gain very little? Here are the numbers for the following function (from dzaima<\/a> some time ago, which I've used for testing)"}} {"origin_server_ts":1674657567400,"event_id":"$EUkloTe0rmO_QWsZjsA-R4tfeul1SwH5WplhR5ERC2k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"```\nf ⇐ {⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵}\n({f 5}⍣10000000) 0\n```"},{"mimetype":"text/html","body":"
                    f ⇐ {⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵}\n({f 5}⍣10000000) 0\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"```\nf ⇐ {⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵}\n({f 5}⍣10000000) 0\n```","msgtype":"m.text","formatted_body":"
                    f ⇐ {⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵+⍵}\n({f 5}⍣10000000) 0\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1674657573755,"event_id":"$5KSHwqCSt_FLAo61Q9HSI5NFhf0CZT9h8IHSwNNQVl8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"    // Orig: 5.375100000000001\n    // removed redundant lookup: 3.7815\n    // New stack: 3.3473\n"},{"mimetype":"text/html","body":"
                    // Orig: 5.375100000000001\n// removed redundant lookup: 3.7815\n// New stack: 3.3473\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"    // Orig: 5.375100000000001\n    // removed redundant lookup: 3.7815\n    // New stack: 3.3473\n","msgtype":"m.text","formatted_body":"
                    // Orig: 5.375100000000001\n// removed redundant lookup: 3.7815\n// New stack: 3.3473\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1674657599543,"event_id":"$9c_Vh3f79-iau0iIE9wAmv6b-OmVbDaZPQVU7hzEvjk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Orig is the buggy code. The second one is after removing the extra lookup, and the last one is after removing the extra indirection.","msgtype":"m.text","org.matrix.msc1767.text":"Orig is the buggy code. The second one is after removing the extra lookup, and the last one is after removing the extra indirection."}}
                    {"origin_server_ts":1674657604917,"event_id":"$GhdGNoqQudkR2gMcVxK_DDd8i1aPoHnGzanU3mQPzwI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"those numbers being seconds of execution time?","msgtype":"m.text","formatted_body":"those numbers being seconds of execution time?"}}
                    {"origin_server_ts":1674657613351,"event_id":"$gogbm3Bl2aYQ8V3a_s_jNRLn_CrJHHD_A8LRorGNkNk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"those numbers being seconds of execution time for that whole expression?","msgtype":"m.text","formatted_body":"those numbers being seconds of execution time for that whole expression?"},"m.relates_to":{"event_id":"$GhdGNoqQudkR2gMcVxK_DDd8i1aPoHnGzanU3mQPzwI","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* those numbers being seconds of execution time for that whole expression?","msgtype":"m.text","formatted_body":"* those numbers being seconds of execution time for that whole expression?"}}
                    {"origin_server_ts":1674657676697,"event_id":"$3DxccMKbo15s9ggjAcU-ArgOL9niWuySzVmoRQV0NAY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Milliseconds.","msgtype":"m.text","org.matrix.msc1767.text":"Milliseconds."}}
                    {"origin_server_ts":1674657738327,"event_id":"$3c-0lQo9MPOxFLZkyinwiOohOdYEDgHxTtHTkPEI558","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that seems wrong; I don't think you're taking 0.015 nanoseconds per variable lookup","msgtype":"m.text","formatted_body":"that seems wrong; I don't think you're taking 0.015 nanoseconds per variable lookup"}}
                    {"origin_server_ts":1674657748932,"event_id":"$pYDZ2yW9I1zWiA-Tj4R7F2DQnHNpts4jLisW-ikh24Q","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"that seems wrong; I don't think you're taking 0.015 nanoseconds per variable lookup (`21÷˜3.34e6÷10000000`)","msgtype":"m.text","formatted_body":"that seems wrong; I don't think you're taking 0.015 nanoseconds per variable lookup (21÷˜3.34e6÷10000000<\/code>)"},"m.relates_to":{"event_id":"$3c-0lQo9MPOxFLZkyinwiOohOdYEDgHxTtHTkPEI558","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* that seems wrong; I don't think you're taking 0.015 nanoseconds per variable lookup (`21÷˜3.34e6÷10000000`)","msgtype":"m.text","formatted_body":"* that seems wrong; I don't think you're taking 0.015 nanoseconds per variable lookup (21÷˜3.34e6÷10000000<\/code>)"}}
                    {"origin_server_ts":1674657766082,"event_id":"$TMeNz41Fb52gQ2tIEwfC0_Mlq5AACxjA2jhsIV_C_0E","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"that seems wrong; I don't think you're taking <0.015 nanoseconds per variable lookup (`21÷˜3.34e6÷10000000`)","msgtype":"m.text","formatted_body":"that seems wrong; I don't think you're taking <0.015 nanoseconds per variable lookup (21÷˜3.34e6÷10000000<\/code>)"},"m.relates_to":{"event_id":"$3c-0lQo9MPOxFLZkyinwiOohOdYEDgHxTtHTkPEI558","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* that seems wrong; I don't think you're taking <0.015 nanoseconds per variable lookup (`21÷˜3.34e6÷10000000`)","msgtype":"m.text","formatted_body":"* that seems wrong; I don't think you're taking <0.015 nanoseconds per variable lookup (21÷˜3.34e6÷10000000<\/code>)"}}
                    {"origin_server_ts":1674657797676,"event_id":"$n6Eb-pkbM_L93xh3bC-Y3GhcPoqeuswqmKjR2tMIvLI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"This is the code:\n```\nfun main() {\n    val engine = Engine()\n    engine.addLibrarySearchPath(\"array/standard-lib\")\n    engine.parseAndEval(StringSourceLocation(\"use(\\\"standard-lib.kap\\\")\"))\n    val srcString = benchmarkMultipleCall()\n    println(\"Starting\")\n    val iterations = 10\n    repeat(iterations) {\n        val result = engine.parseAndEval(StringSourceLocation(srcString))\n        result.collapse()\n    }\n    val elapsed = measureTimeMillis {\n        repeat(iterations) {\n            val result = engine.parseAndEval(StringSourceLocation(srcString))\n            result.collapse()\n        }\n    }\n    println(\"Elapsed: ${elapsed / iterations.toDouble() / 1000.0}\")\n}\n```"},{"mimetype":"text/html","body":"

                    This is the code:<\/p>\n

                    fun main() {\n    val engine = Engine()\n    engine.addLibrarySearchPath("array/standard-lib")\n    engine.parseAndEval(StringSourceLocation("use(\\"standard-lib.kap\\")"))\n    val srcString = benchmarkMultipleCall()\n    println("Starting")\n    val iterations = 10\n    repeat(iterations) {\n        val result = engine.parseAndEval(StringSourceLocation(srcString))\n        result.collapse()\n    }\n    val elapsed = measureTimeMillis {\n        repeat(iterations) {\n            val result = engine.parseAndEval(StringSourceLocation(srcString))\n            result.collapse()\n        }\n    }\n    println("Elapsed: ${elapsed / iterations.toDouble() / 1000.0}")\n}\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"This is the code:\n```\nfun main() {\n    val engine = Engine()\n    engine.addLibrarySearchPath(\"array/standard-lib\")\n    engine.parseAndEval(StringSourceLocation(\"use(\\\"standard-lib.kap\\\")\"))\n    val srcString = benchmarkMultipleCall()\n    println(\"Starting\")\n    val iterations = 10\n    repeat(iterations) {\n        val result = engine.parseAndEval(StringSourceLocation(srcString))\n        result.collapse()\n    }\n    val elapsed = measureTimeMillis {\n        repeat(iterations) {\n            val result = engine.parseAndEval(StringSourceLocation(srcString))\n            result.collapse()\n        }\n    }\n    println(\"Elapsed: ${elapsed / iterations.toDouble() / 1000.0}\")\n}\n```","msgtype":"m.text","formatted_body":"

                    This is the code:<\/p>\n

                    fun main() {\n    val engine = Engine()\n    engine.addLibrarySearchPath("array/standard-lib")\n    engine.parseAndEval(StringSourceLocation("use(\\"standard-lib.kap\\")"))\n    val srcString = benchmarkMultipleCall()\n    println("Starting")\n    val iterations = 10\n    repeat(iterations) {\n        val result = engine.parseAndEval(StringSourceLocation(srcString))\n        result.collapse()\n    }\n    val elapsed = measureTimeMillis {\n        repeat(iterations) {\n            val result = engine.parseAndEval(StringSourceLocation(srcString))\n            result.collapse()\n        }\n    }\n    println("Elapsed: ${elapsed / iterations.toDouble() / 1000.0}")\n}\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1674657819492,"event_id":"$cURcoHMki1Pq2Aq7BDH5a8eZaIrx9eLLyVXlbCzvLrA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"The function `benchmarkMultipleCall` returns the code quoted above."},{"mimetype":"text/html","body":"The function benchmarkMultipleCall<\/code> returns the code quoted above."}],"format":"org.matrix.custom.html","body":"The function `benchmarkMultipleCall` returns the code quoted above.","msgtype":"m.text","formatted_body":"The function benchmarkMultipleCall<\/code> returns the code quoted above."}}
                    {"origin_server_ts":1674657887118,"event_id":"$1QN-401nGrCK93UM95TcrBQ3iBlT2tOW9YOSW4dsq3M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No wait... You're right :-)","msgtype":"m.text","org.matrix.msc1767.text":"No wait... You're right :-)"}}
                    {"origin_server_ts":1674657890747,"event_id":"$YNKB9XQ8rLkZtbXV8RBPknTXO5LwWr_pPQzBqcxwj3Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Gah","msgtype":"m.text","org.matrix.msc1767.text":"Gah"}}
                    {"origin_server_ts":1674657912489,"event_id":"$NonSLEi8zdDl7YpovdBPORPHzDNyQDCRomOaxqUF55Y","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, I wouldn't think extreme optimizations for variable lookups are worth much. You could spend the effort looking into optimizing compiler transformations instead, likely more interesting too.","msgtype":"m.text","formatted_body":"Yeah, I wouldn't think extreme optimizations for variable lookups are worth much. You could spend the effort looking into optimizing compiler transformations instead, likely more interesting too."}}
                    {"origin_server_ts":1674657929064,"event_id":"$4yP6qUknytz09YWoZmPsuptZW0aoyPwMKgsLuT9hqVY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Although certainly harder to benchmark.","msgtype":"m.text","formatted_body":"Although certainly harder to benchmark."}}
                    {"origin_server_ts":1674657947429,"event_id":"$qLp3551ppsjkbo-yu4dqVc3lXOzGUEzXS4Ic4-U6ACs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I always stick to using either nanoseconds or seconds for timings (except human-formatted strings) so that if something goes wrong, a 1000000000x factor is hard to ignore :)","msgtype":"m.text","formatted_body":"I always stick to using either nanoseconds or seconds for timings (except human-formatted strings) so that if something goes wrong, a 1000000000x factor is hard to ignore :)"}}
                    {"origin_server_ts":1674658009508,"event_id":"$8o2urPAndL59kJQKpQtBwywgOBpLNOHdR9srxX7yuJE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's fair.","msgtype":"m.text","org.matrix.msc1767.text":"That's fair."}}
                    {"origin_server_ts":1674658039262,"event_id":"$8xXkZ3Q11XC_z7E1xrDvQcE5lIvk_yjsby60unYs-uc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: Yeah. The Optimised lookup was messy."},{"mimetype":"text/html","body":"Marshall<\/a>: Yeah. The Optimised lookup was messy."}],"format":"org.matrix.custom.html","body":"Marshall: Yeah. The Optimised lookup was messy.","msgtype":"m.text","formatted_body":"Marshall<\/a>: Yeah. The Optimised lookup was messy."}}
                    {"origin_server_ts":1674658086757,"event_id":"$pevXqVSygY87kLI-SrWRTdiue_NSUHBeSh2se2_FUyM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"By the way, I've kept the old hash-based storage implementation in https://kapdemo.dhsdevelopments.com/clientweb2-old/","msgtype":"m.text","org.matrix.msc1767.text":"By the way, I've kept the old hash-based storage implementation in https://kapdemo.dhsdevelopments.com/clientweb2-old/"}}
                    {"origin_server_ts":1674658095984,"event_id":"$ZUQZ55wL8iki8ige9u2BM4DYa-bHCckJk0TWWk0tHgU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And the new one in the same path as before.","msgtype":"m.text","org.matrix.msc1767.text":"And the new one in the same path as before."}}
                    {"origin_server_ts":1674658126938,"event_id":"$GLw9yFIxXrTmXkZ1NXFDmLedi2GY_13jqzLmH87oGek","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I did some testing and Chromium is much faster than FF, and what's even more interesting is that the speedup from the new system is much greated in Chromium compared to FF.","msgtype":"m.text","org.matrix.msc1767.text":"I did some testing and Chromium is much faster than FF, and what's even more interesting is that the speedup from the new system is much greated in Chromium compared to FF."}}
                    {"origin_server_ts":1674658131517,"event_id":"$-Fz0opSKgOVNdBb8drjFDdVsJwfIkykobVjR8usEyPs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I did some testing and Chromium is much faster than FF, and what's even more interesting is that the speedup from the new system is much greater in Chromium compared to FF.","msgtype":"m.text","org.matrix.msc1767.text":"I did some testing and Chromium is much faster than FF, and what's even more interesting is that the speedup from the new system is much greater in Chromium compared to FF."},"m.relates_to":{"event_id":"$GLw9yFIxXrTmXkZ1NXFDmLedi2GY_13jqzLmH87oGek","rel_type":"m.replace"},"body":" * I did some testing and Chromium is much faster than FF, and what's even more interesting is that the speedup from the new system is much greater in Chromium compared to FF.","msgtype":"m.text","org.matrix.msc1767.text":" * I did some testing and Chromium is much faster than FF, and what's even more interesting is that the speedup from the new system is much greater in Chromium compared to FF."}}
                    {"origin_server_ts":1674658261561,"event_id":"$N2H0uLFOvNZkKz7_aeMN_KwTmwaMUQW-pFsix_-YRr8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that indirection removing step saves 44ns/iteration. If variable lookups are roughly half of the time spent there (other half being constant overhead & `+`es), that's roughly maybe in the ballpark of 30% reduced time per lookup, or 2ns per. Your call on how much you care about performance","msgtype":"m.text","formatted_body":"that indirection removing step saves 44ns/iteration. If variable lookups are roughly half of the time spent there (other half being constant overhead & +<\/code>es), that's roughly maybe in the ballpark of 30% reduced time per lookup, or 2ns per. Your call on how much you care about performance"}}
                    {"origin_server_ts":1674658283301,"event_id":"$e1RoI0RWbyw9Aod3CGZQWGK923fk7xW-J-z-aoOG1o8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"that indirection removing step saves 44ns/iteration. If variable lookups are roughly half of the time spent there (other half being constant overhead & `+`es), that's roughly maybe in the ballpark of 30% reduced time per lookup, or 2ns per, assuming I've done the math correctly. Your call on how much you care about performance","msgtype":"m.text","formatted_body":"that indirection removing step saves 44ns/iteration. If variable lookups are roughly half of the time spent there (other half being constant overhead & +<\/code>es), that's roughly maybe in the ballpark of 30% reduced time per lookup, or 2ns per, assuming I've done the math correctly. Your call on how much you care about performance"},"m.relates_to":{"event_id":"$N2H0uLFOvNZkKz7_aeMN_KwTmwaMUQW-pFsix_-YRr8","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* that indirection removing step saves 44ns/iteration. If variable lookups are roughly half of the time spent there (other half being constant overhead & `+`es), that's roughly maybe in the ballpark of 30% reduced time per lookup, or 2ns per, assuming I've done the math correctly. Your call on how much you care about performance","msgtype":"m.text","formatted_body":"* that indirection removing step saves 44ns/iteration. If variable lookups are roughly half of the time spent there (other half being constant overhead & +<\/code>es), that's roughly maybe in the ballpark of 30% reduced time per lookup, or 2ns per, assuming I've done the math correctly. Your call on how much you care about performance"}}
                    {"origin_server_ts":1674658302136,"event_id":"$gwt7-0N41RSFEgaHuyQQt25MT_-waMn_UC-BjiV6R1g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I don't actually care _that_ much. I just don't want to be slower than Python :-)"},{"mimetype":"text/html","body":"I don't actually care that<\/em> much. I just don't want to be slower than Python :-)"}],"format":"org.matrix.custom.html","body":"I don't actually care _that_ much. I just don't want to be slower than Python :-)","msgtype":"m.text","formatted_body":"I don't actually care that<\/em> much. I just don't want to be slower than Python :-)"}}
                    {"origin_server_ts":1674668454349,"event_id":"$EbsspJEi4IcClEK53jM1mlMt6-Kh0vw3O7JiUjhuxUM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Wow. Turns out the performance improvement from the optimised stack referencing actually came from me replacing an ArrayList with an Array. So I just did that and now there is basically no difference.","msgtype":"m.text","org.matrix.msc1767.text":"Wow. Turns out the performance improvement from the optimised stack referencing actually came from me replacing an ArrayList with an Array. So I just did that and now there is basically no difference."}}
                    {"origin_server_ts":1674668533662,"event_id":"$td0yB9bGD2LXM4WQmOYeLHfuf5zsi_x_eLpY-QNQSRo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$ha_nyfU_S5F2Te3p2-avtCNPGOY1suxSARhYf7WEU6E"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> as a random test, `sum([sum([a,a+1]) for a in range(1000000)])` in python is ~190ms, and `time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}` in KAP is ~300ms\n\nWould you be willing to rerun this test case on your machine on the `escape-analysis` branch?"},{"mimetype":"text/html","body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    as a random test, sum([sum([a,a+1]) for a in range(1000000)])<\/code> in python is ~190ms, and time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}<\/code> in KAP is ~300ms<\/blockquote><\/mx-reply>Would you be willing to rerun this test case on your machine on the escape-analysis<\/code> branch?"}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> as a random test, `sum([sum([a,a+1]) for a in range(1000000)])` in python is ~190ms, and `time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}` in KAP is ~300ms\n\nWould you be willing to rerun this test case on your machine on the `escape-analysis` branch?","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    as a random test, sum([sum([a,a+1]) for a in range(1000000)])<\/code> in python is ~190ms, and time:measureTime {+/{+/⍵(⍵+1)}¨⍳1000000}<\/code> in KAP is ~300ms<\/blockquote><\/mx-reply>Would you be willing to rerun this test case on your machine on the escape-analysis<\/code> branch?"}} {"origin_server_ts":1674668583112,"event_id":"$o8u_oAkpWnmZQNNoztuicBIXk_88k9wSRDT--rEUV_I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: It's 158 ms on my machine now, but I don't recall what the original version clocked in as. You're stating 300 in the message above."},{"mimetype":"text/html","body":"
                    dzaima<\/a>: It's 158 ms on my machine now, but I don't recall what the original version clocked in as. You're stating 300 in the message above."}],"format":"org.matrix.custom.html","body":"dzaima: It's 158 ms on my machine now, but I don't recall what the original version clocked in as. You're stating 300 in the message above.","msgtype":"m.text","formatted_body":"dzaima<\/a>: It's 158 ms on my machine now, but I don't recall what the original version clocked in as. You're stating 300 in the message above."}} {"origin_server_ts":1674668592108,"event_id":"$7MqCQ8q1R1bXNCm_XQsIfYjtS0aYujgJYiLQTDCTxTc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It should be about twice as fast now.","msgtype":"m.text","org.matrix.msc1767.text":"It should be about twice as fast now."}} {"origin_server_ts":1674668637733,"event_id":"$nz5y8rMhdCxlN0NJ8PicnYC6YX24DvgTF4_23kypXR8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The first run after starting the client gives me about 300 ms, but after rerunning it a few times is appears to settle on 151 ms.","msgtype":"m.text","org.matrix.msc1767.text":"The first run after starting the client gives me about 300 ms, but after rerunning it a few times is appears to settle on 151 ms."}} {"origin_server_ts":1674669263648,"event_id":"$fONEz36_4xxk7Jk48FUMa13HBznwEmSnNFfYVE-ACAk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"5 minutes of building KAP later, I see ~230ms","msgtype":"m.text","formatted_body":"5 minutes of building KAP later, I see ~230ms"}} {"origin_server_ts":1674669590716,"event_id":"$nS7-ge1005JxZlBZArFNNrwaZb9BlqvmRCIoDxf5rRY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What if you rerun it a few times? ","msgtype":"m.text"}} {"origin_server_ts":1674669602854,"event_id":"$EvsAHDSq6Kdpni8kFzkt0fMa-MWnYojhH1g-BeaaqXU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that is with rerunning it a few times","msgtype":"m.text","formatted_body":"that is with rerunning it a few times"}} {"origin_server_ts":1674669606626,"event_id":"$AODZ2QeC4fzyLcZQCO7demXGyEVDVR_ZGnr9MgqrK0E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The first couple of times is slower. ","msgtype":"m.text"}} {"origin_server_ts":1674669609777,"event_id":"$B9PblSLjsUXtrtZwwmmD2yXImjTkA_Yetqj_D7rHFR8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh ","msgtype":"m.text"}} {"origin_server_ts":1674669612307,"event_id":"$dkJA-GKqhexNRoSx7v-xevFCDuXijjb6yvQo9sXxJvQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Strange ","msgtype":"m.text"}} {"origin_server_ts":1674669629003,"event_id":"$C4_OKE3HrZ_Z5OCinv5j3zq88hWRxYCzOXgAQ7SqCN8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And you're using the branch ","msgtype":"m.text"}} {"origin_server_ts":1674669635501,"event_id":"$Q5l-pbHSxGHAvB-dWXCW2BcjC8DCSvPXov-gVmQdYt4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"And you're using the branch? ","msgtype":"m.text"},"m.relates_to":{"event_id":"$C4_OKE3HrZ_Z5OCinv5j3zq88hWRxYCzOXgAQ7SqCN8","rel_type":"m.replace"},"body":"* And you're using the branch? ","msgtype":"m.text"}} {"origin_server_ts":1674669647864,"event_id":"$YNKr14T1hOcXb5MaCtzolFbnwtupz5472Na38fDyJJc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```sh\n$ git log -1; git status\ncommit 94d51db2db8520f4bef117a3dc6d7ec72359573d (HEAD -> escape-analysis, origin/escape-analysis)\nAuthor: Elias Mårtenson \nDate: Thu Jan 26 01:21:40 2023 +0800\n\n Updated performance tests\nOn branch escape-analysis\nYour branch is up to date with 'origin/escape-analysis'.\n\nnothing to commit, working tree clean\n```","msgtype":"m.text","formatted_body":"
                    $ git log -1; git status\ncommit 94d51db2db8520f4bef117a3dc6d7ec72359573d (HEAD -> escape-analysis, origin/escape-analysis)\nAuthor: Elias Mårtenson <elias@dhsdevelopments.com>\nDate:   Thu Jan 26 01:21:40 2023 +0800\n\n    Updated performance tests\nOn branch escape-analysis\nYour branch is up to date with 'origin/escape-analysis'.\n\nnothing to commit, working tree clean<\/code><\/pre>"}}
                    {"origin_server_ts":1674669670257,"event_id":"$z7uuCFD_G8acs6aF01Pkm0QfZBmkmQRu6wirq-oor1k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That is very disappointing. ","msgtype":"m.text"}}
                    {"origin_server_ts":1674669673635,"event_id":"$Is434FISm-f4aWhUWMDUjC95Pa_RNJHNC0vHSG7IUac","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"tested under `./gradlew gui:run`","msgtype":"m.text","formatted_body":"tested under ./gradlew gui:run<\/code>"}}
                    {"origin_server_ts":1674669676579,"event_id":"$chCLbXxtzx8K3kg26HKrUEn9SbBZE6QEZG1aUfGBSzM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Also confusing. ","msgtype":"m.text"}}
                    {"origin_server_ts":1674669709390,"event_id":"$8DgCDtv6XRB1wyh76GBliVh6SjN1EPzshYHYO3sYg3c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And on master you see 300?","msgtype":"m.text"}}
                    {"origin_server_ts":1674669727202,"event_id":"$G5OhrbXZmlMOdWzkNFMeZ3dSCmC3Q4fnY8nX9fr4ae4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's gonna take like 5 minutes to find out","msgtype":"m.text","formatted_body":"that's gonna take like 5 minutes to find out"}}
                    {"origin_server_ts":1674669732053,"event_id":"$uG6aSwl85FJy9nBAruQfmIMXaXimEAHRVyuCFUhl4aA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Haha ok ","msgtype":"m.text"}}
                    {"origin_server_ts":1674669739351,"event_id":"$mysbPsuDgAX0WdbDZuxK9lTTloXwjcjl3I5nBvwb4es","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No need ","msgtype":"m.text"}}
                    {"origin_server_ts":1674669743452,"event_id":"$grPlTO8t2qsvnBe5ufUpQS1IutHO5GkPddKABWHGWdg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Is this on Linux? ","msgtype":"m.text"}}
                    {"origin_server_ts":1674669751932,"event_id":"$L482_aSmkfdjvMi3qXBkGdn4PYygnuAkLhc8XFzvnCg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah","msgtype":"m.text","formatted_body":"yeah"}}
                    {"origin_server_ts":1674669772258,"event_id":"$T0V0q_WiNr9mAYnXTcJ59bOhlYFRq6AjuSbsmMiiyhA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ok. I have work to Di it seems ","msgtype":"m.text"}}
                    {"origin_server_ts":1674669780843,"event_id":"$v8fC1YT5f4s8BR4DwIpQubSBJE6foEK7DtRD3KY__FE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Ok. I have work to do it seems ","msgtype":"m.text"},"m.relates_to":{"event_id":"$T0V0q_WiNr9mAYnXTcJ59bOhlYFRq6AjuSbsmMiiyhA","rel_type":"m.replace"},"body":"* Ok. I have work to do it seems ","msgtype":"m.text"}}
                    {"origin_server_ts":1674669795580,"event_id":"$qFuoUm30Wa3jfMRfOqmnZ-azfckPuoV5QDvkLpnMyB0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks for the the help ","msgtype":"m.text"}}
                    {"origin_server_ts":1674669815350,"event_id":"$yBYtDzDeMIktTvET6_pr4qs5i3q1PO5hp6p3Ulnh49g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh, just tell me, what CPU are you using. ","msgtype":"m.text"}}
                    {"origin_server_ts":1674669830115,"event_id":"$8-_b3nhlYd0FpNxtAKpk0dtC9lrh_eYeR6OOHceHAaM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"i3-4160","msgtype":"m.text","formatted_body":"i3-4160"}}
                    {"origin_server_ts":1674669894623,"event_id":"$DQgd5eSBbC0C58viwfTZl6n4bNbKDSldxK_sCeGO75Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Also, can you try adding ∥after the each? ","msgtype":"m.text"}}
                    {"origin_server_ts":1674669937051,"event_id":"$H53IhQLN27UEw5TDbtftUbo0fuKL9RfYhISk4sUK0ts","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Also, can you try adding ∥ after the each? ","msgtype":"m.text"},"m.relates_to":{"event_id":"$DQgd5eSBbC0C58viwfTZl6n4bNbKDSldxK_sCeGO75Q","rel_type":"m.replace"},"body":"* Also, can you try adding ∥ after the each? ","msgtype":"m.text"}}
                    {"origin_server_ts":1674669971840,"event_id":"$heAjhqcLuy8uPMCV_kDrmSyCa_t-cQAfMrFDQQMKIpA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$G5OhrbXZmlMOdWzkNFMeZ3dSCmC3Q4fnY8nX9fr4ae4"}},"format":"org.matrix.custom.html","body":"oh hey it only took 2 minutes; testing on master aka `1e406226b95ab74c76cff0dd34ab0ceded0f68bf` it's more like 260-370ms now","msgtype":"m.text","formatted_body":" ↰ <\/a> dzaima<\/a> <\/mx-reply>oh hey it only took 2 minutes; testing on master aka 1e406226b95ab74c76cff0dd34ab0ceded0f68bf<\/code> it's more like 260-370ms now"}}
                    {"origin_server_ts":1674669997855,"event_id":"$hYx1-pGlxJzyE2adQ_hChsvzypyUluh67oxpLNMY8q8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What on... ","msgtype":"m.text"}}
                    {"origin_server_ts":1674670023780,"event_id":"$GhuL_zIq0fnyXTwGuCTYpcYP8r8KFk__IPkxY8vH1wo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Makes no sense. The branch should be twice as fast as master. ","msgtype":"m.text"}}
                    {"origin_server_ts":1674670068636,"event_id":"$47MT4dWtyxxcc_PieEeQLWa_A2zp-VlvvEvbpGMSjj0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Does the parallel operator work for you? ","msgtype":"m.text"}}
                    {"origin_server_ts":1674670518078,"event_id":"$LRXVD-_DmnxNaeTNYOBsPyrzJM5PzlrRL__DHqBFOgQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"back to `escape-analysis`, with `∥` it fluctuates quite a lot - at least one occurrence of 170ms, but like half the times it goes above 300ms; I'm also with nearly full RAM here though, KAP + gradle just use too much of it","msgtype":"m.text","formatted_body":"back to escape-analysis<\/code>, with ∥<\/code> it fluctuates quite a lot - at least one occurrence of 170ms, but like half the times it goes above 300ms; I'm also with nearly full RAM here though, KAP + gradle just use too much of it"}}
                    {"origin_server_ts":1674671569615,"event_id":"$MooYZqcXddA2mA65VXisvY84JtmoPVikIPeUAOe4eAs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh yeah, that's the only thing that could explain it to me. ","msgtype":"m.text"}}
                    {"origin_server_ts":1674671588292,"event_id":"$giIClnbQM7RCbYWRcGYpAuyBqfWUQu0jLgUiHn6woWg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks a lot for helping. ","msgtype":"m.text"}}
                    {"origin_server_ts":1674718457165,"event_id":"$q9X8llpC6YgL-R9zC9R9B2N6jNiIsFhb1SMuHBhs-c8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: I did some more tests, and I've been tricked by the fact that my computer is much faster than yours."},{"mimetype":"text/html","body":"dzaima<\/a>: I did some more tests, and I've been tricked by the fact that my computer is much faster than yours."}],"format":"org.matrix.custom.html","body":"dzaima: I did some more tests, and I've been tricked by the fact that my computer is much faster than yours.","msgtype":"m.text","formatted_body":"dzaima<\/a>: I did some more tests, and I've been tricked by the fact that my computer is much faster than yours."}}
                    {"origin_server_ts":1674718484198,"event_id":"$kYDCKvu0twhhfnmnXgw95Fe8vroCIlvVDBnP98-C394","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Performance difference between the old version, and the latest updated when running on the JVM is pretty small (10%?).","msgtype":"m.text","org.matrix.msc1767.text":"Performance difference between the old version, and the latest updated when running on the JVM is pretty small (10%?)."}}
                    {"origin_server_ts":1674718496837,"event_id":"$uPZntgZP7RXQZPSMkHkXPbABsDfmhV2CQr0p8n6Xlk4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, when run on JS, the difference is about 5 times.","msgtype":"m.text","org.matrix.msc1767.text":"However, when run on JS, the difference is about 5 times."}}
                    {"origin_server_ts":1674718559056,"event_id":"$fxhq0vlCu6byUYo5rO078xLzALFZ3Mo1_2-5DeuZtsk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's really strange though. When I run the performance analyser, I can see a significant reduction is time taken for stack frame allocation as well as variable lookup, but the runtime doesn't change that much.","msgtype":"m.text","org.matrix.msc1767.text":"It's really strange though. When I run the performance analyser, I can see a significant reduction is time taken for stack frame allocation as well as variable lookup, but the runtime doesn't change that much."}}
                    {"origin_server_ts":1675005139542,"event_id":"$goXM3lWEDE4_4Ybk0ooVtZw60ABFnoF1n63IfqOvjhA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I've started thinking about how something like CLOS could be applied to APL. So I had some ideas how it could look in KAP.","msgtype":"m.text","org.matrix.msc1767.text":"I've started thinking about how something like CLOS could be applied to APL. So I had some ideas how it could look in KAP."}}
                    {"origin_server_ts":1675005174786,"event_id":"$W9_sUiS8pVhivVRsv2exTzrY44GTKftCV5xI3fHytrg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I started writing down my ideas. The article isn't anywhere near done, and I don't even know if I'm not the right track. That's why I'm posting the work in progress here, to get criticism: https://write.as/djp3u63etwu4t02s.md","msgtype":"m.text","org.matrix.msc1767.text":"I started writing down my ideas. The article isn't anywhere near done, and I don't even know if I'm not the right track. That's why I'm posting the work in progress here, to get criticism: https://write.as/djp3u63etwu4t02s.md"}}
                    {"origin_server_ts":1675016500902,"event_id":"$rvGK-bW1UwUYY-J4kvXFN83Oe5t8VLDFN-eJp0NH4lw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It looks like a reasonable feature, but it doesn't seem to me like a replacement for an object system. You say CLOS fields \"can be assigned and read from user code\". Does assignment translate to these? Haven't used CLOS, but one thing I might expect to be able to do is pass in a counter object to a function and, once that function finishes, measure how many times it was incremented. The function could pass the object around or store it in arrays, and doesn't have to return a new copy or anything. If your objects are immutable, wouldn't this be impossible?","msgtype":"m.text","formatted_body":"It looks like a reasonable feature, but it doesn't seem to me like a replacement for an object system. You say CLOS fields \"can be assigned and read from user code\". Does assignment translate to these? Haven't used CLOS, but one thing I might expect to be able to do is pass in a counter object to a function and, once that function finishes, measure how many times it was incremented. The function could pass the object around or store it in arrays, and doesn't have to return a new copy or anything. If your objects are immutable, wouldn't this be impossible?"}}
                    {"origin_server_ts":1675016560538,"event_id":"$uNKpJ2UFGGlbgndQVkzyqF-7VbcyOlKqmsiH063PtnI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Another thing that requires mutability is to make loops, maybe for nodes in a double-ended queue.","msgtype":"m.text","formatted_body":"Another thing that requires mutability is to make loops, maybe for nodes in a double-ended queue."}}
                    {"origin_server_ts":1675016619519,"event_id":"$3Ck6SYFHcN0LIce54ZQAZtykRMWndI-FZYQoks4YYkU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Maybe laziness can get that one though?","msgtype":"m.text","formatted_body":"Maybe laziness can get that one though?"}}
                    {"origin_server_ts":1675053435949,"event_id":"$ysKlcSH6OqpuXSzqUfJVr5GWtmxTJJZR9JPEPrDNeLk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: You are absolutely right. I mentioned immutability because I haven't thought much about mutability yet, not because I don't want to have it."},{"mimetype":"text/html","body":"Marshall<\/a>: You are absolutely right. I mentioned immutability because I haven't thought much about mutability yet, not because I don't want to have it."}],"format":"org.matrix.custom.html","body":"Marshall: You are absolutely right. I mentioned immutability because I haven't thought much about mutability yet, not because I don't want to have it.","msgtype":"m.text","formatted_body":"Marshall<\/a>: You are absolutely right. I mentioned immutability because I haven't thought much about mutability yet, not because I don't want to have it."}}
                    {"origin_server_ts":1675053464080,"event_id":"$PsTTmDSzzPSEj77745NlrbZeKGO0b5A0mp2yowVMRB0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Currently in KAP, the only thing that can mutate is the value of a variable. All objects, including hashmaps are immutable.","msgtype":"m.text","org.matrix.msc1767.text":"Currently in KAP, the only thing that can mutate is the value of a variable. All objects, including hashmaps are immutable."}}
                    {"origin_server_ts":1675053513350,"event_id":"$d0cgjgabEvb8JuPAW_phR3kQd1D6D2qXJ0ZJH9eQBpM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(there is the argument as to whether a database handle is immutable or not. The handle is immutable of course, but the data that can be accessed through is not)","msgtype":"m.text","org.matrix.msc1767.text":"(there is the argument as to whether a database handle is immutable or not. The handle is immutable of course, but the data that can be accessed through is not)"}}
                    {"origin_server_ts":1675053577665,"event_id":"$UKCpU0YNiSd7XCF4pP5YtmC2b-UxiXsBBh7NcBT69eU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Since all fundamental KAP objects are immutable, adding mutability to instances would require me to introduce some kind of mutability to the core objects, since an instance _is_ a core object."},{"mimetype":"text/html","body":"Since all fundamental KAP objects are immutable, adding mutability to instances would require me to introduce some kind of mutability to the core objects, since an instance is<\/em> a core object."}],"format":"org.matrix.custom.html","body":"Since all fundamental KAP objects are immutable, adding mutability to instances would require me to introduce some kind of mutability to the core objects, since an instance _is_ a core object.","msgtype":"m.text","formatted_body":"Since all fundamental KAP objects are immutable, adding mutability to instances would require me to introduce some kind of mutability to the core objects, since an instance is<\/em> a core object."}}
                    {"origin_server_ts":1675053625299,"event_id":"$kSExMFLUt8zNihm2WxCW4DMoXQOmleT4bgJ8OiIuly8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I've thought about mutability a lot since I wrote the first line of code for kap, and I still haven't decided on a good solution.","msgtype":"m.text","org.matrix.msc1767.text":"I've thought about mutability a lot since I wrote the first line of code for kap, and I still haven't decided on a good solution."}}
                    {"origin_server_ts":1675053665697,"event_id":"$klPB0xN6kKWB-32hX3D0ErpgewHw6NEhIROVE-rQjh4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Perhaps one solution would be a \"mutable wrapper\" that holds a single value which can be changed.","msgtype":"m.text","org.matrix.msc1767.text":"Perhaps one solution would be a \"mutable wrapper\" that holds a single value which can be changed."}}
                    {"origin_server_ts":1675205448502,"event_id":"$xcfrfZjhiaUebVXNo5jvYacu-uCdfOXRVSiMn0T3uN8","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"hello!","msgtype":"m.text"}}
                    {"origin_server_ts":1675221305383,"event_id":"$fSUjKAVcvTJn-Es7iKbXOaG1qk-jZZ9LbFFGJIOrlNg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hello","msgtype":"m.text","org.matrix.msc1767.text":"Hello"}}
                    {"origin_server_ts":1675221312178,"event_id":"$_SXOSZUrmNqpMNlsaj4DCuPBeXrqFHIQNO0dKawYsqg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Hello Tortus "},{"mimetype":"text/html","body":"Hello Tortus<\/a>"}],"format":"org.matrix.custom.html","body":"Hello Tortus ","msgtype":"m.text","formatted_body":"Hello Tortus<\/a>"}}
                    {"origin_server_ts":1675225177484,"event_id":"$FcG8AWCXrMQ6c2lD-tftxnQF-wpdWLW5W2uzJBf6stU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: I will rewrite some of the text to make it more clear, and also to expand on where the object system comes in."},{"mimetype":"text/html","body":"Marshall<\/a>: I will rewrite some of the text to make it more clear, and also to expand on where the object system comes in."}],"format":"org.matrix.custom.html","body":"Marshall: I will rewrite some of the text to make it more clear, and also to expand on where the object system comes in.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I will rewrite some of the text to make it more clear, and also to expand on where the object system comes in."}}
                    {"origin_server_ts":1675225332972,"event_id":"$KZEUa3GW1_QX2KYV_ag43bo4sFDcaYHeog3LKLC9N3U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"But the short version is that when defining a function that acts on arguments of a given type, like so:\n```\n∇ foo (arg,type0) {\n  ⍝ do something with an argument of type0\n}\n```\nYou can then create another function with the same name:\n```\n∇ foo (arg,type1) {\n    ...\n}\n```\nAnd the actual implementation that is called will be determined at runtime depending on whether the argument is of type type0 or type1."},{"mimetype":"text/html","body":"

                    But the short version is that when defining a function that acts on arguments of a given type, like so:<\/p>\n

                    ∇ foo (arg,type0) {\n  ⍝ do something with an argument of type0\n}\n<\/code><\/pre>\n

                    You can then create another function with the same name:<\/p>\n

                    ∇ foo (arg,type1) {\n    ...\n}\n<\/code><\/pre>\n

                    And the actual implementation that is called will be determined at runtime depending on whether the argument is of type type0 or type1.<\/p>\n"}],"format":"org.matrix.custom.html","body":"But the short version is that when defining a function that acts on arguments of a given type, like so:\n```\n∇ foo (arg,type0) {\n ⍝ do something with an argument of type0\n}\n```\nYou can then create another function with the same name:\n```\n∇ foo (arg,type1) {\n ...\n}\n```\nAnd the actual implementation that is called will be determined at runtime depending on whether the argument is of type type0 or type1.","msgtype":"m.text","formatted_body":"

                    But the short version is that when defining a function that acts on arguments of a given type, like so:<\/p>\n

                    ∇ foo (arg,type0) {\n  ⍝ do something with an argument of type0\n}\n<\/code><\/pre>\n

                    You can then create another function with the same name:<\/p>\n

                    ∇ foo (arg,type1) {\n    ...\n}\n<\/code><\/pre>\n

                    And the actual implementation that is called will be determined at runtime depending on whether the argument is of type type0 or type1.<\/p>\n"}} {"origin_server_ts":1675225555177,"event_id":"$bECM-K1HBdQ7hmbj2_Uy2qA7iMeFc7PhPYH9V9GVEZc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"In CLOS, you define a \"generic function\" as such:\n```\n(defgeneric foo (arg))\n```\nYou can then define methods that implement this function depending on the types of the arguments (in this particular case, the function has only one argument):\n```\n(defmethod foo ((arg string))\n (format t \"argument is a string: ~s\" arg))\n\n(defmethod foo ((arg integer))\n (print \"arg is an integer\"))\n```"},{"mimetype":"text/html","body":"

                    In CLOS, you define a "generic function" as such:<\/p>\n

                    (defgeneric foo (arg))\n<\/code><\/pre>\n

                    You can then define methods that implement this function depending on the types of the arguments (in this particular case, the function has only one argument):<\/p>\n

                    (defmethod foo ((arg string))\n   (format t "argument is a string: ~s" arg))\n\n(defmethod foo ((arg integer))\n  (print "arg is an integer"))\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"In CLOS, you define a \"generic function\" as such:\n```\n(defgeneric foo (arg))\n```\nYou can then define methods that implement this function depending on the types of the arguments (in this particular case, the function has only one argument):\n```\n(defmethod foo ((arg string))\n   (format t \"argument is a string: ~s\" arg))\n\n(defmethod foo ((arg integer))\n  (print \"arg is an integer\"))\n```","msgtype":"m.text","formatted_body":"

                    In CLOS, you define a "generic function" as such:<\/p>\n

                    (defgeneric foo (arg))\n<\/code><\/pre>\n

                    You can then define methods that implement this function depending on the types of the arguments (in this particular case, the function has only one argument):<\/p>\n

                    (defmethod foo ((arg string))\n   (format t "argument is a string: ~s" arg))\n\n(defmethod foo ((arg integer))\n  (print "arg is an integer"))\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1675228200619,"event_id":"$8-Nrbx55-GDIxxm8_hzs5EIb2zsiLm7vRQSpaa1XtXU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"But the short version is that when defining a function that acts on arguments of a given type, like so:\n\n```\n∇ foo (arg,type0) {\n    ⍝ do something with an argument of type0\n}\n```\n\nYou can then create another function with the same name:\n\n```\n∇ foo (arg,type1) {\n    ...\n}\n```\n\nAnd the actual implementation that is called will be determined at runtime depending on whether the argument is of type type0 or type1."},{"mimetype":"text/html","body":"

                    But the short version is that when defining a function that acts on arguments of a given type, like so:<\/p>\n

                    ∇ foo (arg,type0) {\n    ⍝ do something with an argument of type0\n}\n<\/code><\/pre>\n

                    You can then create another function with the same name:<\/p>\n

                    ∇ foo (arg,type1) {\n    ...\n}\n<\/code><\/pre>\n

                    And the actual implementation that is called will be determined at runtime depending on whether the argument is of type type0 or type1.<\/p>\n"}],"format":"org.matrix.custom.html","body":"But the short version is that when defining a function that acts on arguments of a given type, like so:\n\n```\n∇ foo (arg,type0) {\n ⍝ do something with an argument of type0\n}\n```\n\nYou can then create another function with the same name:\n\n```\n∇ foo (arg,type1) {\n ...\n}\n```\n\nAnd the actual implementation that is called will be determined at runtime depending on whether the argument is of type type0 or type1.","msgtype":"m.text","formatted_body":"

                    But the short version is that when defining a function that acts on arguments of a given type, like so:<\/p>\n

                    ∇ foo (arg,type0) {\n    ⍝ do something with an argument of type0\n}\n<\/code><\/pre>\n

                    You can then create another function with the same name:<\/p>\n

                    ∇ foo (arg,type1) {\n    ...\n}\n<\/code><\/pre>\n

                    And the actual implementation that is called will be determined at runtime depending on whether the argument is of type type0 or type1.<\/p>\n"},"m.relates_to":{"event_id":"$KZEUa3GW1_QX2KYV_ag43bo4sFDcaYHeog3LKLC9N3U","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * But the short version is that when defining a function that acts on arguments of a given type, like so:\n\n```\n∇ foo (arg,type0) {\n ⍝ do something with an argument of type0\n}\n```\n\nYou can then create another function with the same name:\n\n```\n∇ foo (arg,type1) {\n ...\n}\n```\n\nAnd the actual implementation that is called will be determined at runtime depending on whether the argument is of type type0 or type1."},{"mimetype":"text/html","body":" *

                    But the short version is that when defining a function that acts on arguments of a given type, like so:<\/p>\n

                    ∇ foo (arg,type0) {\n    ⍝ do something with an argument of type0\n}\n<\/code><\/pre>\n

                    You can then create another function with the same name:<\/p>\n

                    ∇ foo (arg,type1) {\n    ...\n}\n<\/code><\/pre>\n

                    And the actual implementation that is called will be determined at runtime depending on whether the argument is of type type0 or type1.<\/p>\n"}],"format":"org.matrix.custom.html","body":" * But the short version is that when defining a function that acts on arguments of a given type, like so:\n\n```\n∇ foo (arg,type0) {\n ⍝ do something with an argument of type0\n}\n```\n\nYou can then create another function with the same name:\n\n```\n∇ foo (arg,type1) {\n ...\n}\n```\n\nAnd the actual implementation that is called will be determined at runtime depending on whether the argument is of type type0 or type1.","msgtype":"m.text","formatted_body":" *

                    But the short version is that when defining a function that acts on arguments of a given type, like so:<\/p>\n

                    ∇ foo (arg,type0) {\n    ⍝ do something with an argument of type0\n}\n<\/code><\/pre>\n

                    You can then create another function with the same name:<\/p>\n

                    ∇ foo (arg,type1) {\n    ...\n}\n<\/code><\/pre>\n

                    And the actual implementation that is called will be determined at runtime depending on whether the argument is of type type0 or type1.<\/p>\n"}} {"origin_server_ts":1675280285108,"event_id":"$XTtgFarZUq0rZpBw-t3lkl-hfhRDMjfJrWqyhH7rnQY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$d0cgjgabEvb8JuPAW_phR3kQd1D6D2qXJ0ZJH9eQBpM"}},"format":"org.matrix.custom.html","body":"a function reference is as mutable as that too because closures; but the important question is what's part of the \"identity\" of a given object, i.e. by what it compares equal to others","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>a function reference is as mutable as that too because closures; but the important question is what's part of the \"identity\" of a given object, i.e. by what it compares equal to others"}} {"origin_server_ts":1675304431589,"event_id":"$HPjOUfVjb4wLKOfFuHChZ5d8BM9ujatnooL01v5WN9o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: I haven't thought about equality yet. My instinct is to simply delegate that to the underlying objects."},{"mimetype":"text/html","body":"dzaima<\/a>: I haven't thought about equality yet. My instinct is to simply delegate that to the underlying objects."}],"format":"org.matrix.custom.html","body":"dzaima: I haven't thought about equality yet. My instinct is to simply delegate that to the underlying objects.","msgtype":"m.text","formatted_body":"dzaima<\/a>: I haven't thought about equality yet. My instinct is to simply delegate that to the underlying objects."}} {"origin_server_ts":1675304477958,"event_id":"$bSSdHxYmd_g7JPvk6y-qYuTOzGFPZP8fqXsTaqdlRdQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And you're right about function references. However, functions aren't guaranteed to be pure in the first place.","msgtype":"m.text","org.matrix.msc1767.text":"And you're right about function references. However, functions aren't guaranteed to be pure in the first place."}} {"origin_server_ts":1675304517681,"event_id":"$1cbnR19tYriLrxE7JUxkBza7RKOIjGji8B9UOYgPBVw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There may of course be a benefit in being able to determine if a function is pure. That would be possible, although I'm not sure it's that needed.","msgtype":"m.text","org.matrix.msc1767.text":"There may of course be a benefit in being able to determine if a function is pure. That would be possible, although I'm not sure it's that needed."}} {"origin_server_ts":1675430432683,"event_id":"$3BHUiQTd7EVp1zjBHiOMgeGMFPpOiXnF9seBLo5uPbk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm changing the syntax slightly and I need some comments.","msgtype":"m.text","org.matrix.msc1767.text":"I'm changing the syntax slightly and I need some comments."}} {"origin_server_ts":1675430452588,"event_id":"$YhYh9LXBiXJHOc7jGPhvtbmFBkfv1i_b1xOFEVqutzw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Throwing exceptions now use the function `throw` instead of `→`"},{"mimetype":"text/html","body":"Throwing exceptions now use the function throw<\/code> instead of →<\/code>"}],"format":"org.matrix.custom.html","body":"Throwing exceptions now use the function `throw` instead of `→`","msgtype":"m.text","formatted_body":"Throwing exceptions now use the function throw<\/code> instead of →<\/code>"}} {"origin_server_ts":1675430465670,"event_id":"$p10-qdccvV7yfHC6OIMXBS6OC2MvriJw_y3G5c_-zPo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"`→` has now been repurposed to be return."},{"mimetype":"text/html","body":"→<\/code> has now been repurposed to be return."}],"format":"org.matrix.custom.html","body":"`→` has now been repurposed to be return.","msgtype":"m.text","formatted_body":"→<\/code> has now been repurposed to be return."}} {"origin_server_ts":1675430478410,"event_id":"$CiLFicb2dFnJA9VjdVUa-nqqMYLUhimJsrwPjdU-ghw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Thus, you can do `→10` to return 10 from a function."},{"mimetype":"text/html","body":"Thus, you can do →10<\/code> to return 10 from a function."}],"format":"org.matrix.custom.html","body":"Thus, you can do `→10` to return 10 from a function.","msgtype":"m.text","formatted_body":"Thus, you can do →10<\/code> to return 10 from a function."}} {"origin_server_ts":1675430484849,"event_id":"$EJxofpa2D7SDjWC5nT20vxlAXToad0gpTCa_1tRfIFw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now, here's where I want input:","msgtype":"m.text","org.matrix.msc1767.text":"Now, here's where I want input:"}} {"origin_server_ts":1675430571182,"event_id":"$ITCC0biGMU3z2yb3jZr1adqN-l0vL0K4h9-Wi_d_dz0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I'm considering making `→` dyadic, with the left argument being a boolean. If true, it will trigger a return of the function with the value being the right argument. If false, return `⍬` (return from the `→` function, that is)"},{"mimetype":"text/html","body":"I'm considering making →<\/code> dyadic, with the left argument being a boolean. If true, it will trigger a return of the function with the value being the right argument. If false, return ⍬<\/code> (return from the →<\/code> function, that is)"}],"format":"org.matrix.custom.html","body":"I'm considering making `→` dyadic, with the left argument being a boolean. If true, it will trigger a return of the function with the value being the right argument. If false, return `⍬` (return from the `→` function, that is)","msgtype":"m.text","formatted_body":"I'm considering making →<\/code> dyadic, with the left argument being a boolean. If true, it will trigger a return of the function with the value being the right argument. If false, return ⍬<\/code> (return from the →<\/code> function, that is)"}} {"origin_server_ts":1675430645932,"event_id":"$Hx2dk1BXtby68kS__7GsDPPmiPIm21kM2VdwxeV4Uk0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"That means you can do a very concise early return using something like:\n```\n∇ foo (a) {\n (a≡⍬) → 0\n ⍝ Do whatever with a\n}\n```"},{"mimetype":"text/html","body":"

                    That means you can do a very concise early return using something like:<\/p>\n

                    ∇ foo (a) {\n    (a≡⍬) → 0\n    ⍝ Do whatever with a\n}\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"That means you can do a very concise early return using something like:\n```\n∇ foo (a) {\n    (a≡⍬) → 0\n    ⍝ Do whatever with a\n}\n```","msgtype":"m.text","formatted_body":"

                    That means you can do a very concise early return using something like:<\/p>\n

                    ∇ foo (a) {\n    (a≡⍬) → 0\n    ⍝ Do whatever with a\n}\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1675430681093,"event_id":"$qZTyWbwM0oG-E_EkmoZ5JGAR7PwlOwzlgNExqF1D6XE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Is this good synatx?","msgtype":"m.text","org.matrix.msc1767.text":"Is this good synatx?"}}
                    {"origin_server_ts":1675431452390,"event_id":"$POYAEFeB47Pgh-rPfJahSa0Zx3gKjBJ6RnEP60D9t14","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Is `→` syntax or a function? If it's a function it doesn't seem like you're gaining much beyond `→⍣(a≡⍬)⊢ 0`.","msgtype":"m.text","formatted_body":"Is →<\/code> syntax or a function? If it's a function it doesn't seem like you're gaining much beyond →⍣(a≡⍬)⊢ 0<\/code>."}}
                    {"origin_server_ts":1675431512236,"event_id":"$fVwLS2lEHrdnTzapSuAlBsE-92BrjjpmTprz0YmvJNs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and if it's syntax, that's just the Dyalog `:` but with a different character","msgtype":"m.text","formatted_body":"and if it's syntax, that's just the Dyalog :<\/code> but with a different character"}}
                    {"origin_server_ts":1675431513378,"event_id":"$KfwvNXqGUynwqkVMr7Yp1GGprnRv1F_UxxyBhz9jrNI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'd expect the result of `→` if it doesn't return to be the right argument anyway. `⍬` seems so arbitrary.","msgtype":"m.text","formatted_body":"I'd expect the result of →<\/code> if it doesn't return to be the right argument anyway. ⍬<\/code> seems so arbitrary."}}
                    {"origin_server_ts":1675431716714,"event_id":"$r6eAC_V1D5PlbOk75xTANrsFHhK9VmSpmbteL9n_GbU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: that's a good point ","msgtype":"m.text","formatted_body":"Marshall<\/a>: that's a good point "}}
                    {"origin_server_ts":1675431901779,"event_id":"$KdWScfMPM1pZNJYg7LfeKzZnTlxMjGy_sQPFvzQ0Dik","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But, it would be neat if the right argument isn't evaluated if the left argument is false ","msgtype":"m.text"}}
                    {"origin_server_ts":1675431930462,"event_id":"$eX9uYogtDervt35NkQMz793HQFLJotNUJPg-vSDWmNU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Although one could always use explicit defer for that ","msgtype":"m.text"}}
                    {"origin_server_ts":1675431988627,"event_id":"$P0bgTxOPO0w3oo53ceM6SdyqKd1bM60vMMp3i_z9Pmk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$KdWScfMPM1pZNJYg7LfeKzZnTlxMjGy_sQPFvzQ0Dik"}},"format":"org.matrix.custom.html","body":"and returning `⍬` somehow allows for that? if `→` is special syntax, you could also just not allow using its result, and if it's not it can't control what's executed","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>and returning ⍬<\/code> somehow allows for that? if →<\/code> is special syntax, you could also just not allow using its result, and if it's not it can't control what's executed"}}
                    {"origin_server_ts":1675432071955,"event_id":"$AzPPP2vlBRJXXuwLXVJbYv6BM7lkRY8IJRgzS7aAq2k","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Returning left argument (`0`) is still better than `⍬`.","msgtype":"m.text","formatted_body":"Returning left argument (0<\/code>) is still better than ⍬<\/code>."}}
                    {"origin_server_ts":1675433130186,"event_id":"$GIQxHMKSDqSvum9ZU1ro7edeLjiTmQBeHscNlQ1QHVA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah you're right ","msgtype":"m.text"}}
                    {"origin_server_ts":1675433136746,"event_id":"$0gVbyvIdYqbd8IGFdXn901eNFa6cSIWOFAVoblY_ftM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll return the right argument ","msgtype":"m.text"}}
                    {"origin_server_ts":1675442132002,"event_id":"$6LbFhuF8pusGqmNQap1f7B3xS0oXHiTkvJV0bl5j0uE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: Since `→` is now a function rather than special syntax as is the case in APL, there are some interesting things that can be done with it. For example, it's possible to use it in a train."},{"mimetype":"text/html","body":"Marshall<\/a>: Since →<\/code> is now a function rather than special syntax as is the case in APL, there are some interesting things that can be done with it. For example, it's possible to use it in a train."}],"format":"org.matrix.custom.html","body":"Marshall: Since `→` is now a function rather than special syntax as is the case in APL, there are some interesting things that can be done with it. For example, it's possible to use it in a train.","msgtype":"m.text","formatted_body":"Marshall<\/a>: Since →<\/code> is now a function rather than special syntax as is the case in APL, there are some interesting things that can be done with it. For example, it's possible to use it in a train."}}
                    {"origin_server_ts":1675442166632,"event_id":"$_Lq9S9jEcmOX2CHw1GLkRYJzKFC5Hso6HU_UE-DY-hA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, I'm not sure I can think of a good use case for this. But I still need something to put in my testcases. Do you have any suggestion for a testcase?","msgtype":"m.text","org.matrix.msc1767.text":"However, I'm not sure I can think of a good use case for this. But I still need something to put in my testcases. Do you have any suggestion for a testcase?"}}
                    {"origin_server_ts":1675442287589,"event_id":"$1uORKqmzVVJmEZtDcS58j04WzSnfcE_dSx0VZvCfy74","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"what will happen if you store the `→` in a variable somewhere, and call it after the function has exited?","msgtype":"m.text","formatted_body":"what will happen if you store the →<\/code> in a variable somewhere, and call it after the function has exited?"}}
                    {"origin_server_ts":1675442295107,"event_id":"$H1Gw6p7E-5D4DgFxO4C-cQwiVZHxj-KgP1AlI1UdOSA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"what will happen if you store the `→` in a variable somewhere, and call it after the function has already completed?","msgtype":"m.text","formatted_body":"what will happen if you store the →<\/code> in a variable somewhere, and call it after the function has already completed?"},"m.relates_to":{"event_id":"$1uORKqmzVVJmEZtDcS58j04WzSnfcE_dSx0VZvCfy74","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* what will happen if you store the `→` in a variable somewhere, and call it after the function has already completed?","msgtype":"m.text","formatted_body":"* what will happen if you store the →<\/code> in a variable somewhere, and call it after the function has already completed?"}}
                    {"origin_server_ts":1675442360822,"event_id":"$Na3AkOBqcihf7r9MNvGyRT0sM9MC8sCaB_ZLIkhwAsM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Does `{S←→⋄{S⍣(81=×⍨⍵)⊢⍵}¨⍳10}` work?","msgtype":"m.text","formatted_body":"Does {S←→⋄{S⍣(81=×⍨⍵)⊢⍵}¨⍳10}<\/code> work?"}}
                    {"origin_server_ts":1675442496074,"event_id":"$PG4YajDLC54T1-VXODTj5DInbQvFTyMeBdjq8CAfIqU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$1uORKqmzVVJmEZtDcS58j04WzSnfcE_dSx0VZvCfy74"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> what will happen if you store the `→` in a variable somewhere, and call it after the function has already completed?\n\nYou mean if you close over the `→` function? The implementation isnThe closure knows where the return "},{"mimetype":"text/html","body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    what will happen if you store the →<\/code> in a variable somewhere, and call it after the function has already completed?<\/blockquote><\/mx-reply>You mean if you close over the →<\/code> function? The implementation isnThe closure knows where the return"}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> what will happen if you store the `→` in a variable somewhere, and call it after the function has already completed?\n\nYou mean if you close over the `→` function? The implementation isnThe closure knows where the return ","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    what will happen if you store the →<\/code> in a variable somewhere, and call it after the function has already completed?<\/blockquote><\/mx-reply>You mean if you close over the →<\/code> function? The implementation isnThe closure knows where the return"}} {"origin_server_ts":1675442502579,"event_id":"$7ZsyXGkVa9AiDqyMfDbVn251M-GJbFp8XiQ_2C0el8k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"You mean if you close over the `→` function? The implementation isn't done."},{"mimetype":"text/html","body":"You mean if you close over the →<\/code> function? The implementation isn't done."}],"format":"org.matrix.custom.html","body":"You mean if you close over the `→` function? The implementation isn't done.","msgtype":"m.text","formatted_body":"You mean if you close over the →<\/code> function? The implementation isn't done."},"m.relates_to":{"event_id":"$PG4YajDLC54T1-VXODTj5DInbQvFTyMeBdjq8CAfIqU","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> what will happen if you store the `→` in a variable somewhere, and call it after the function has already completed?\n\n * You mean if you close over the `→` function? The implementation isn't done."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    what will happen if you store the →<\/code> in a variable somewhere, and call it after the function has already completed?<\/blockquote><\/mx-reply> * You mean if you close over the →<\/code> function? The implementation isn't done."}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> what will happen if you store the `→` in a variable somewhere, and call it after the function has already completed?\n\n * You mean if you close over the `→` function? The implementation isn't done.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    what will happen if you store the →<\/code> in a variable somewhere, and call it after the function has already completed?<\/blockquote><\/mx-reply> * You mean if you close over the →<\/code> function? The implementation isn't done."}} {"origin_server_ts":1675442529148,"event_id":"$ixSpobQMCD7zG10s79A827K3HYn578OHc9wNaGL3g9U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But the closure will know which environment it's supposed to return from, so if that's not available in the stack at execution time, you'll get an error.","msgtype":"m.text","org.matrix.msc1767.text":"But the closure will know which environment it's supposed to return from, so if that's not available in the stack at execution time, you'll get an error."}} {"origin_server_ts":1675442606176,"event_id":"$F6jV1qcP36isMMfYgKJZSdSWP1EdS1_RheG8C7sh3oA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But in the current half-done implementation, this is not done so it will just return from whatever function you happen to be in. Or you'll get an exception if you're at toplevel.","msgtype":"m.text","org.matrix.msc1767.text":"But in the current half-done implementation, this is not done so it will just return from whatever function you happen to be in. Or you'll get an exception if you're at toplevel."}} {"origin_server_ts":1675442627154,"event_id":"$1-GA26SAQv1rD2QuGVN_s_ERCGTH13bx4lCCdBl7ZEw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(that's what you can find on the web version right now if you want to try it)","msgtype":"m.text","org.matrix.msc1767.text":"(that's what you can find on the web version right now if you want to try it)"}} {"origin_server_ts":1675442761379,"event_id":"$pRZJ_HBIyg3tcQTzeQ5nsSup5cilMsNbCw-udvNvUc0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$Na3AkOBqcihf7r9MNvGyRT0sM9MC8sCaB_ZLIkhwAsM"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@mlochbaum:matrix.org> Does `{S←→⋄{S⍣(81=×⍨⍵)⊢⍵}¨⍳10}` work?\n\nMaybe. But the behaviour will change if I implement it the way I explained to dzaima just now."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Does {S←→⋄{S⍣(81=×⍨⍵)⊢⍵}¨⍳10}<\/code> work?<\/blockquote><\/mx-reply>Maybe. But the behaviour will change if I implement it the way I explained to
                    dzaima<\/a> just now."}],"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Does `{S←→⋄{S⍣(81=×⍨⍵)⊢⍵}¨⍳10}` work?\n\nMaybe. But the behaviour will change if I implement it the way I explained to dzaima just now.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Does {S←→⋄{S⍣(81=×⍨⍵)⊢⍵}¨⍳10}<\/code> work?<\/blockquote><\/mx-reply>Maybe. But the behaviour will change if I implement it the way I explained to
                    dzaima<\/a> just now."}} {"origin_server_ts":1675442802461,"event_id":"$KoWKtDwdyM-RfTqzOekC4u72WwFw1UDBfgOv0CPbhtk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Dyadic `→` is not on the web version right now. I'll implement it tomorrow."},{"mimetype":"text/html","body":"Dyadic →<\/code> is not on the web version right now. I'll implement it tomorrow."}],"format":"org.matrix.custom.html","body":"Dyadic `→` is not on the web version right now. I'll implement it tomorrow.","msgtype":"m.text","formatted_body":"Dyadic →<\/code> is not on the web version right now. I'll implement it tomorrow."}} {"origin_server_ts":1675443931939,"event_id":"$CQJdLK_snJruOLkGBQTjMdpjPS4-_r6UpoD06iPNeNM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"BQN2NGN supports `→` as a function, for example try `{S←→⋄{S⍟(81=ט𝕩)𝕩}¨↕𝕩}20` [here](https://mlochbaum.github.io/BQN2NGN/web/index.html). I'm pretty sure I got it from ngn/apl, but it doesn't look like it works there.","msgtype":"m.text","formatted_body":"BQN2NGN supports →<\/code> as a function, for example try {S←→⋄{S⍟(81=ט𝕩)𝕩}¨↕𝕩}20<\/code> here<\/a>. I'm pretty sure I got it from ngn/apl, but it doesn't look like it works there."}} {"origin_server_ts":1675444137282,"event_id":"$BYoGKjOAfo1E3nFnS1JzF0MOLr4ZzdMv7oNVru7SS0c","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Okay, it's written `⍫` in ngn/apl. But `{S←⍫⋄{S⍣(81=×⍨⍵)⊢⍵}¨⍳⍵}20` breaks.","msgtype":"m.text","formatted_body":"Okay, it's written ⍫<\/code> in ngn/apl. But {S←⍫⋄{S⍣(81=×⍨⍵)⊢⍵}¨⍳⍵}20<\/code> breaks."}} {"origin_server_ts":1675444257589,"event_id":"$sUVOIaPfAOy_jHDLhRo5Nu9yglfCePKfpBIXHJZ1G58","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ngn/apl has two tests:\n```\n{⍫1⋄2}⍬ ←→ 1\nc←{}⋄x←{c←⍫⋄1}⍬⋄{x=1:c 2⋄x}⍬ ←→ 2\n```","msgtype":"m.text","formatted_body":"ngn/apl has two tests:
                    {⍫1⋄2}⍬ ←→ 1\nc←{}⋄x←{c←⍫⋄1}⍬⋄{x=1:c 2⋄x}⍬ ←→ 2<\/code><\/pre>"}}
                    {"origin_server_ts":1675444372807,"event_id":"$KhosSP47ZUbGPTgEfUVxNrYFYd77u2Irt3IwP86YV58","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks.","msgtype":"m.text","org.matrix.msc1767.text":"Thanks."}}
                    {"origin_server_ts":1675444385347,"event_id":"$MpspSX0FYiK-V1JfOULOdhd_-tUOhu-GtLZlQzuJrGc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll take a look at that tomorrow (time to sleep :-) )","msgtype":"m.text","org.matrix.msc1767.text":"I'll take a look at that tomorrow (time to sleep :-) )"}}
                    {"origin_server_ts":1675488529133,"event_id":"$pcKSIAF9cz1Mj0TGFyFQy91WO0zNrXSMa0DGgix9kTA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$P0bgTxOPO0w3oo53ceM6SdyqKd1bM60vMMp3i_z9Pmk"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@dzaima:matrix.org> and returning `⍬` somehow allows for that? if `→` is special syntax, you could also just not allow using its result, and if it's not it can't control what's executed\n\nIt doesn't. I basically wanted to return a null value because I don't have anything else to return (if I implement it that way)"},{"mimetype":"text/html","body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    and returning ⍬<\/code> somehow allows for that? if →<\/code> is special syntax, you could also just not allow using its result, and if it's not it can't control what's executed<\/blockquote><\/mx-reply>It doesn't. I basically wanted to return a null value because I don't have anything else to return (if I implement it that way)"}],"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> and returning `⍬` somehow allows for that? if `→` is special syntax, you could also just not allow using its result, and if it's not it can't control what's executed\n\nIt doesn't. I basically wanted to return a null value because I don't have anything else to return (if I implement it that way)","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    and returning ⍬<\/code> somehow allows for that? if →<\/code> is special syntax, you could also just not allow using its result, and if it's not it can't control what's executed<\/blockquote><\/mx-reply>It doesn't. I basically wanted to return a null value because I don't have anything else to return (if I implement it that way)"}} {"origin_server_ts":1675494019873,"event_id":"$9tM21cJPWmYD2V4dLn3ojUQqiEgv9MDCNMW3Ug_D0fQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, the dyadic return is now implemented.","msgtype":"m.text","org.matrix.msc1767.text":"OK, the dyadic return is now implemented."}} {"origin_server_ts":1675517461495,"event_id":"$RYOejou_-wMnjsdpK4qgbgNdZanlGAjr_AhDYoJ1OKk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$Na3AkOBqcihf7r9MNvGyRT0sM9MC8sCaB_ZLIkhwAsM"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@mlochbaum:matrix.org> Does `{S←→⋄{S⍣(81=×⍨⍵)⊢⍵}¨⍳10}` work?\n\nIt does, but only if I collapse the array before returning from the function. I.e. I have to do this:\n```\n{S ⇐ → ⋄ comp {(S⍣(81=×⍨⍵)) ⍵}¨⍳10} 0\n```\nIf I remove `comp` then I get an error because the result of `¨` is lazy, and the actual function won't be called until after the outer stack frame has returned."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Does {S←→⋄{S⍣(81=×⍨⍵)⊢⍵}¨⍳10}<\/code> work?<\/blockquote><\/mx-reply>

                    It does, but only if I collapse the array before returning from the function. I.e. I have to do this:<\/p>\n

                    {S ⇐ → ⋄ comp {(S⍣(81=×⍨⍵)) ⍵}¨⍳10} 0\n<\/code><\/pre>\n

                    If I remove comp<\/code> then I get an error because the result of ¨<\/code> is lazy, and the actual function won't be called until after the outer stack frame has returned.<\/p>\n"}],"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Does `{S←→⋄{S⍣(81=×⍨⍵)⊢⍵}¨⍳10}` work?\n\nIt does, but only if I collapse the array before returning from the function. I.e. I have to do this:\n```\n{S ⇐ → ⋄ comp {(S⍣(81=×⍨⍵)) ⍵}¨⍳10} 0\n```\nIf I remove `comp` then I get an error because the result of `¨` is lazy, and the actual function won't be called until after the outer stack frame has returned.","msgtype":"m.text","formatted_body":"

                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Does {S←→⋄{S⍣(81=×⍨⍵)⊢⍵}¨⍳10}<\/code> work?<\/blockquote><\/mx-reply>

                    It does, but only if I collapse the array before returning from the function. I.e. I have to do this:<\/p>\n

                    {S ⇐ → ⋄ comp {(S⍣(81=×⍨⍵)) ⍵}¨⍳10} 0\n<\/code><\/pre>\n

                    If I remove comp<\/code> then I get an error because the result of ¨<\/code> is lazy, and the actual function won't be called until after the outer stack frame has returned.<\/p>\n"}} {"origin_server_ts":1675518891752,"event_id":"$NqyVGRJMOZdVMgXaD4AVXvUjnCqT7p0G4dWkV1mYCb4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I could use the escape analysis machinery to determine if the code attempts to return across a frame boundary that could potentially escape, and then raise an error. This can be done at parse time.","msgtype":"m.text","org.matrix.msc1767.text":"I could use the escape analysis machinery to determine if the code attempts to return across a frame boundary that could potentially escape, and then raise an error. This can be done at parse time."}} {"origin_server_ts":1675520235759,"event_id":"$xzmG0iMM-yCY7UYDWTzYwRyWf-rJo9WR8BBvoo3nY5M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This is actually an interesting problem.","msgtype":"m.text","org.matrix.msc1767.text":"This is actually an interesting problem."}} {"origin_server_ts":1675530799131,"event_id":"$WheNBqQ1jTqZlz2-OduA2dq4OxsZwceMqhKHU4NIRtE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It works a bit better now:","msgtype":"m.text","org.matrix.msc1767.text":"It works a bit better now:"}} {"origin_server_ts":1675530804647,"event_id":"$f955Ia5pzC0159VAKisgAAP6EIvLsXlfGFtps19-JO4","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1675530811410,"event_id":"$Efllo-rPxGtg_Ej58TJk_JkKvlVghpfqw5R7ASyBX3U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$f955Ia5pzC0159VAKisgAAP6EIvLsXlfGFtps19-JO4","type":"m.room.redaction","content":{"redacts":"$f955Ia5pzC0159VAKisgAAP6EIvLsXlfGFtps19-JO4"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1675530808261,"event_id":"$aZFQA8Pz2eEGv2sYFPkxrdEXzkx1UahfAWaszcV677Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#%7B%20S%20%E2%87%90%20%E2%86%92%20%E2%97%8A%20100%20%2B%20%7B%20S%20%E2%8D%B5%2B20%20%E2%97%8A%20%E2%8D%B5%2B1%20%7D%2010%20%7D%200","msgtype":"m.text","org.matrix.msc1767.text":"https://kapdemo.dhsdevelopments.com/clientweb2/#%7B%20S%20%E2%87%90%20%E2%86%92%20%E2%97%8A%20100%20%2B%20%7B%20S%20%E2%8D%B5%2B20%20%E2%97%8A%20%E2%8D%B5%2B1%20%7D%2010%20%7D%200"}} {"origin_server_ts":1675530811410,"event_id":"$Efllo-rPxGtg_Ej58TJk_JkKvlVghpfqw5R7ASyBX3U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$f955Ia5pzC0159VAKisgAAP6EIvLsXlfGFtps19-JO4","type":"m.room.redaction","content":{"redacts":"$f955Ia5pzC0159VAKisgAAP6EIvLsXlfGFtps19-JO4"}} {"origin_server_ts":1675587900473,"event_id":"$Zvtmw3oS7Py-h3PY1l_hAjQ77bFJ7PqqhVoBuJixCkM","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"this is very cool","msgtype":"m.text"}} {"origin_server_ts":1675609592977,"event_id":"$nS8sWPXPBQ8uqEDvoIhO40b6NrB4SlSNSBGRGlJqnGI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks. ","msgtype":"m.text"}} {"origin_server_ts":1675756755149,"event_id":"$ZwQaKHt2SSvLnUqA6g9aexdjLEQKwFkbIAQi1vGbRvo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Design question: the `∥` symbol is the parallel operator. It means that the function it's applied to should be parallelised. It's currently only implemented for `¨`, and does the obvious thing. It evaluates (and collapses the results of) the functions in multiple threads. As long as the function is pure, the result is identical to the result you'd get if you don't use the parallel directive."},{"mimetype":"text/html","body":"Design question: the ∥<\/code> symbol is the parallel operator. It means that the function it's applied to should be parallelised. It's currently only implemented for ¨<\/code>, and does the obvious thing. It evaluates (and collapses the results of) the functions in multiple threads. As long as the function is pure, the result is identical to the result you'd get if you don't use the parallel directive."}],"format":"org.matrix.custom.html","body":"Design question: the `∥` symbol is the parallel operator. It means that the function it's applied to should be parallelised. It's currently only implemented for `¨`, and does the obvious thing. It evaluates (and collapses the results of) the functions in multiple threads. As long as the function is pure, the result is identical to the result you'd get if you don't use the parallel directive.","msgtype":"m.text","formatted_body":"Design question: the ∥<\/code> symbol is the parallel operator. It means that the function it's applied to should be parallelised. It's currently only implemented for ¨<\/code>, and does the obvious thing. It evaluates (and collapses the results of) the functions in multiple threads. As long as the function is pure, the result is identical to the result you'd get if you don't use the parallel directive."}} {"origin_server_ts":1675756776119,"event_id":"$gFykP34fgRAdmCikH-l6kaYhDGc8DoOn-OHdoTQHd9c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If the function has side-effects, then you can have the usual threading issues.","msgtype":"m.text","org.matrix.msc1767.text":"If the function has side-effects, then you can have the usual threading issues."}} {"origin_server_ts":1675756796593,"event_id":"$0q7MPhSdU_VGcTNCz1ZkqDvQf-8uQuAqP_Q76mn62QI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"So you can do something like `longRunningFunction¨∥ someLargeArray`"},{"mimetype":"text/html","body":"So you can do something like longRunningFunction¨∥ someLargeArray<\/code>"}],"format":"org.matrix.custom.html","body":"So you can do something like `longRunningFunction¨∥ someLargeArray`","msgtype":"m.text","formatted_body":"So you can do something like longRunningFunction¨∥ someLargeArray<\/code>"}} {"origin_server_ts":1675756828098,"event_id":"$X88Xui0PO4J5KSOewljeczdr-qdkondlTMTufRvA-as","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Especially useful when computing the mandelbrot set that is in the demo directory of the KAPdistribution.","msgtype":"m.text","org.matrix.msc1767.text":"Especially useful when computing the mandelbrot set that is in the demo directory of the KAPdistribution."}} {"origin_server_ts":1675756831277,"event_id":"$PE7K5C2gugn3yldzIqBinCBbAe-tGyEY5se5eKSCeiU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Especially useful when computing the mandelbrot set that is in the demo directory of the KAPd istribution.","msgtype":"m.text","org.matrix.msc1767.text":"Especially useful when computing the mandelbrot set that is in the demo directory of the KAPd istribution."},"m.relates_to":{"event_id":"$X88Xui0PO4J5KSOewljeczdr-qdkondlTMTufRvA-as","rel_type":"m.replace"},"body":" * Especially useful when computing the mandelbrot set that is in the demo directory of the KAPd istribution.","msgtype":"m.text","org.matrix.msc1767.text":" * Especially useful when computing the mandelbrot set that is in the demo directory of the KAPd istribution."}} {"origin_server_ts":1675756834489,"event_id":"$21vsYEHY62Mov3WljuarwKwwzQST_eAH1r0O2CmNAHY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Especially useful when computing the mandelbrot set that is in the demo directory of the KAP distribution.","msgtype":"m.text","org.matrix.msc1767.text":"Especially useful when computing the mandelbrot set that is in the demo directory of the KAP distribution."},"m.relates_to":{"event_id":"$X88Xui0PO4J5KSOewljeczdr-qdkondlTMTufRvA-as","rel_type":"m.replace"},"body":" * Especially useful when computing the mandelbrot set that is in the demo directory of the KAP distribution.","msgtype":"m.text","org.matrix.msc1767.text":" * Especially useful when computing the mandelbrot set that is in the demo directory of the KAP distribution."}} {"origin_server_ts":1675756913816,"event_id":"$HxaOnTJc0Z_Wv5GmFzM5JU00MjOC2jFHC_3wuXfOlbU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now, the question:","msgtype":"m.text","org.matrix.msc1767.text":"Now, the question:"}} {"origin_server_ts":1675757183008,"event_id":"$PJBRI5ayspkvhZvoOKI5pjGSpRJ98uzem5EvBHNF_zE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I was considering implementing `∥` for `/`. It would do so by performing a standard map-reduce algorithm. However, this would add another restriction to the function: it must be associateive."},{"mimetype":"text/html","body":"I was considering implementing ∥<\/code> for /<\/code>. It would do so by performing a standard map-reduce algorithm. However, this would add another restriction to the function: it must be associateive."}],"format":"org.matrix.custom.html","body":"I was considering implementing `∥` for `/`. It would do so by performing a standard map-reduce algorithm. However, this would add another restriction to the function: it must be associateive.","msgtype":"m.text","formatted_body":"I was considering implementing ∥<\/code> for /<\/code>. It would do so by performing a standard map-reduce algorithm. However, this would add another restriction to the function: it must be associateive."}} {"origin_server_ts":1675757191377,"event_id":"$KE2m4PMqCaCxNr3i5FF3pUsJNUmjZQkSqUcDHOdbE6w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I was considering implementing `∥` for `/`. It would do so by performing a standard map-reduce algorithm. However, this would add another restriction to the function: it must be associative."},{"mimetype":"text/html","body":"I was considering implementing ∥<\/code> for /<\/code>. It would do so by performing a standard map-reduce algorithm. However, this would add another restriction to the function: it must be associative."}],"format":"org.matrix.custom.html","body":"I was considering implementing `∥` for `/`. It would do so by performing a standard map-reduce algorithm. However, this would add another restriction to the function: it must be associative.","msgtype":"m.text","formatted_body":"I was considering implementing ∥<\/code> for /<\/code>. It would do so by performing a standard map-reduce algorithm. However, this would add another restriction to the function: it must be associative."},"m.relates_to":{"event_id":"$PJBRI5ayspkvhZvoOKI5pjGSpRJ98uzem5EvBHNF_zE","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * I was considering implementing `∥` for `/`. It would do so by performing a standard map-reduce algorithm. However, this would add another restriction to the function: it must be associative."},{"mimetype":"text/html","body":" * I was considering implementing ∥<\/code> for /<\/code>. It would do so by performing a standard map-reduce algorithm. However, this would add another restriction to the function: it must be associative."}],"format":"org.matrix.custom.html","body":" * I was considering implementing `∥` for `/`. It would do so by performing a standard map-reduce algorithm. However, this would add another restriction to the function: it must be associative.","msgtype":"m.text","formatted_body":" * I was considering implementing ∥<\/code> for /<\/code>. It would do so by performing a standard map-reduce algorithm. However, this would add another restriction to the function: it must be associative."}} {"origin_server_ts":1675757229813,"event_id":"$1W_b1oKSCVEOABUwpmrHSGK7zinC97mmsL_jQH8ldwc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"On the other hand, there isn't any other algorithm that would make sense for a parallel `/`."},{"mimetype":"text/html","body":"On the other hand, there isn't any other algorithm that would make sense for a parallel /<\/code>."}],"format":"org.matrix.custom.html","body":"On the other hand, there isn't any other algorithm that would make sense for a parallel `/`.","msgtype":"m.text","formatted_body":"On the other hand, there isn't any other algorithm that would make sense for a parallel /<\/code>."}} {"origin_server_ts":1675757239358,"event_id":"$AHHfpu2X5YWYJBts_zgTBiaSrw1scJEMvJmjK0eJTJU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"At least I don't think so, hence the question.","msgtype":"m.text","org.matrix.msc1767.text":"At least I don't think so, hence the question."}} {"origin_server_ts":1675757625623,"event_id":"$zlgN27xKDDegvcU0aJYeF8bvhcsgaFJbwz_qBF4DZeI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"As it stands, there is a rather simple rules that says that when you use the parallel operator, all functions have to be pure. It's quiet a simple rule to state. If I add support for reduction, then the rule is more like \"you can't rely on standard evluation rules and you have read the documentation to figure out the restrictions on the function. Oh, and if you get it wrong you'll get random data or worse\"","msgtype":"m.text","org.matrix.msc1767.text":"As it stands, there is a rather simple rules that says that when you use the parallel operator, all functions have to be pure. It's quiet a simple rule to state. If I add support for reduction, then the rule is more like \"you can't rely on standard evluation rules and you have read the documentation to figure out the restrictions on the function. Oh, and if you get it wrong you'll get random data or worse\""}} {"origin_server_ts":1675757637885,"event_id":"$Wdiq7ZwqZNxYE9QTt_rVeAZFkZjAlr6qUjwLfcmbHnI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"As it stands, there is a rather simple rules that says that when you use the parallel operator, all functions have to be pure. It's quiet a simple rule to state. If I add support for reduction, then the rule is more like \"you can't rely on standard evaluation rules and you have read the documentation to figure out the restrictions on the function. Oh, and if you get it wrong you'll get random data or worse\"","msgtype":"m.text","org.matrix.msc1767.text":"As it stands, there is a rather simple rules that says that when you use the parallel operator, all functions have to be pure. It's quiet a simple rule to state. If I add support for reduction, then the rule is more like \"you can't rely on standard evaluation rules and you have read the documentation to figure out the restrictions on the function. Oh, and if you get it wrong you'll get random data or worse\""},"m.relates_to":{"event_id":"$zlgN27xKDDegvcU0aJYeF8bvhcsgaFJbwz_qBF4DZeI","rel_type":"m.replace"},"body":" * As it stands, there is a rather simple rules that says that when you use the parallel operator, all functions have to be pure. It's quiet a simple rule to state. If I add support for reduction, then the rule is more like \"you can't rely on standard evaluation rules and you have read the documentation to figure out the restrictions on the function. Oh, and if you get it wrong you'll get random data or worse\"","msgtype":"m.text","org.matrix.msc1767.text":" * As it stands, there is a rather simple rules that says that when you use the parallel operator, all functions have to be pure. It's quiet a simple rule to state. If I add support for reduction, then the rule is more like \"you can't rely on standard evaluation rules and you have read the documentation to figure out the restrictions on the function. Oh, and if you get it wrong you'll get random data or worse\""}} {"origin_server_ts":1675757665279,"event_id":"$BSU39Rq_3tQvvHB42Ze4y5k2pfdtlJEq28q-Bwx4OOg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But implementing map-reduce is also quite appealing","msgtype":"m.text","org.matrix.msc1767.text":"But implementing map-reduce is also quite appealing"}} {"origin_server_ts":1675759317785,"event_id":"$mg54fNfKnRi4c22xi3BhEYGaB-KbPv5dcF4cuLomzWI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that'd make `∥` pretty much be just a magic \"do some random other thing\" builtin; like bracket axis, but for parallelism instead of rank","msgtype":"m.text","formatted_body":"that'd make ∥<\/code> pretty much be just a magic "do some random other thing" builtin; like bracket axis, but for parallelism instead of rank"}} {"origin_server_ts":1675759401440,"event_id":"$CXJ2-B1lzNn49ZM98FbaH665v0Vu47_y4DM0gO-b-Nw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"I'd rather have a parallel fold be its own separate thing, same for a parallel each too","msgtype":"m.text"}} {"origin_server_ts":1675771415132,"event_id":"$VcxwZvroDGX_vY47xQA76HuiWMSRb-HgckpVTNFHxmk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's what the parallel operator would be. The combination of some function with parallel makes the completely different function of the which you spoke. ","msgtype":"m.text"}} {"origin_server_ts":1675771483692,"event_id":"$v5RH-m4US4gASHITPcNhM6naQTUiC-m7CKmvuaCdEu4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But that's basically what the parallel operator does. Combining it with a function makes a special parallel function. ","msgtype":"m.text"}} {"origin_server_ts":1675771485941,"event_id":"$IlKkbbQsfkAMAXt6Sip6P5iH2Yss0O3HV3GgcxzKDqE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"then the parallel fold makes perfect sense","msgtype":"m.text"}} {"origin_server_ts":1675776726192,"event_id":"$9KlzqVh4INaxhJA7VZSw8TdTKRbLBszqOC5GZf1Oybg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: sure, but is my reasoning sound? Would you rather suggest different, and named, functions for this? ","msgtype":"m.text","formatted_body":"dzaima<\/a>: sure, but is my reasoning sound? Would you rather suggest different, and named, functions for this? "}} {"origin_server_ts":1675776825514,"event_id":"$54P3_QgoDMm63yMAdBw4lOwZgEEjVYGvi9gQOoohD4s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think the key property of the the parallel operator is that if the parallel is removed, the behaviour will be unchanged. The reverse isn't true. ","msgtype":"m.text"}} {"origin_server_ts":1675777426530,"event_id":"$aOzDIFXHj66cq5ssq3_ioN7a5JSra6PjJuH0L50h8O0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So one weird thing for fold is, what should `f/∥` of a matrix do? Split rows across threads or columns? Or pairwise match up the entire matrix at once to be more flexible?","msgtype":"m.text","formatted_body":"So one weird thing for fold is, what should f/∥<\/code> of a matrix do? Split rows across threads or columns? Or pairwise match up the entire matrix at once to be more flexible?"}} {"origin_server_ts":1675777563913,"event_id":"$qQz3NAi28FmhKbk2ua06QJIEldzrK_PxGPL5N7ZvPO4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Having a separate `∥` lets you parallelize some calls but not others, so maybe you'd define `f←⌽¨` and call it as either `f` or `f∥`. Not sure if that's a good thing or not.","msgtype":"m.text","formatted_body":"Having a separate ∥<\/code> lets you parallelize some calls but not others, so maybe you'd define f←⌽¨<\/code> and call it as either f<\/code> or f∥<\/code>. Not sure if that's a good thing or not."}} {"origin_server_ts":1675785670007,"event_id":"$RgnwnTDb93k8UiaBzNZQ6mXUg5N4LuiEvj7LTxPMN0Y","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1675860115582,"event_id":"$n0HxGFYQbl-GmYocoD6_MUM02UbFWLeUZjlovhodzhM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$RgnwnTDb93k8UiaBzNZQ6mXUg5N4LuiEvj7LTxPMN0Y","type":"m.room.redaction","content":{"redacts":"$RgnwnTDb93k8UiaBzNZQ6mXUg5N4LuiEvj7LTxPMN0Y"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1675860115582,"event_id":"$n0HxGFYQbl-GmYocoD6_MUM02UbFWLeUZjlovhodzhM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$RgnwnTDb93k8UiaBzNZQ6mXUg5N4LuiEvj7LTxPMN0Y","type":"m.room.redaction","content":{"redacts":"$RgnwnTDb93k8UiaBzNZQ6mXUg5N4LuiEvj7LTxPMN0Y"}} {"origin_server_ts":1675860191855,"event_id":"$8RVUtyndRKT22yq5mE0AO5Ya2wPkZFOFLPgL1ocEZFg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$qQz3NAi28FmhKbk2ua06QJIEldzrK_PxGPL5N7ZvPO4"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@mlochbaum:matrix.org> Having a separate `∥` lets you parallelize some calls but not others, so maybe you'd define `f←⌽¨` and call it as either `f` or `f∥`. Not sure if that's a good thing or not.\n\nThat would work, since `f` will effectively be the derived function rotate-each."},{"mimetype":"text/html","body":"

                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Having a separate ∥<\/code> lets you parallelize some calls but not others, so maybe you'd define f←⌽¨<\/code> and call it as either f<\/code> or f∥<\/code>. Not sure if that's a good thing or not.<\/blockquote><\/mx-reply>That would work, since f<\/code> will effectively be the derived function rotate-each."}],"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Having a separate `∥` lets you parallelize some calls but not others, so maybe you'd define `f←⌽¨` and call it as either `f` or `f∥`. Not sure if that's a good thing or not.\n\nThat would work, since `f` will effectively be the derived function rotate-each.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Having a separate ∥<\/code> lets you parallelize some calls but not others, so maybe you'd define f←⌽¨<\/code> and call it as either f<\/code> or f∥<\/code>. Not sure if that's a good thing or not.<\/blockquote><\/mx-reply>That would work, since f<\/code> will effectively be the derived function rotate-each."}} {"origin_server_ts":1675860298717,"event_id":"$qjQtKERSDHOShvL21qcUkAD-Wz60DJP1NN9B6OOe8JU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"This function would have a parallel derivation. However, `F ⇐ {⌽¨⍵} ◊ F∥ a` would not work because `F` would be a user defined function which doesn't have a parallel derivation."},{"mimetype":"text/html","body":"This function would have a parallel derivation. However, F ⇐ {⌽¨⍵} ◊ F∥ a<\/code> would not work because F<\/code> would be a user defined function which doesn't have a parallel derivation."}],"format":"org.matrix.custom.html","body":"This function would have a parallel derivation. However, `F ⇐ {⌽¨⍵} ◊ F∥ a` would not work because `F` would be a user defined function which doesn't have a parallel derivation.","msgtype":"m.text","formatted_body":"This function would have a parallel derivation. However, F ⇐ {⌽¨⍵} ◊ F∥ a<\/code> would not work because F<\/code> would be a user defined function which doesn't have a parallel derivation."}} {"origin_server_ts":1675860411691,"event_id":"$bwwetAEY3CbOBQWV3uIzxZBve-3pON58MrJ2hjV4GjY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$aOzDIFXHj66cq5ssq3_ioN7a5JSra6PjJuH0L50h8O0"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@mlochbaum:matrix.org> So one weird thing for fold is, what should `f/∥` of a matrix do? Split rows across threads or columns? Or pairwise match up the entire matrix at once to be more flexible?\n\nAre you seeing an issue that I don't see? It could do it either way, and probably the system would choose approach based on the actual dimensions of the array?"},{"mimetype":"text/html","body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    So one weird thing for fold is, what should f/∥<\/code> of a matrix do? Split rows across threads or columns? Or pairwise match up the entire matrix at once to be more flexible?<\/blockquote><\/mx-reply>Are you seeing an issue that I don't see? It could do it either way, and probably the system would choose approach based on the actual dimensions of the array?"}],"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> So one weird thing for fold is, what should `f/∥` of a matrix do? Split rows across threads or columns? Or pairwise match up the entire matrix at once to be more flexible?\n\nAre you seeing an issue that I don't see? It could do it either way, and probably the system would choose approach based on the actual dimensions of the array?","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    So one weird thing for fold is, what should f/∥<\/code> of a matrix do? Split rows across threads or columns? Or pairwise match up the entire matrix at once to be more flexible?<\/blockquote><\/mx-reply>Are you seeing an issue that I don't see? It could do it either way, and probably the system would choose approach based on the actual dimensions of the array?"}} {"origin_server_ts":1675861221282,"event_id":"$t1EcmW6OtfEC_lH32Iuez_uSsV-66toih8cfuqEW7dc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Just seems confusing for the programmer. Hard to figure out how many function calls will be running at a time for example. One way doesn't require associativity and the others do.","msgtype":"m.text","formatted_body":"Just seems confusing for the programmer. Hard to figure out how many function calls will be running at a time for example. One way doesn't require associativity and the others do."}} {"origin_server_ts":1675861255233,"event_id":"$RXvBJ1XqSnxQtbsPn0qBADRxWh1so_yikYXt7aBY3DA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Although I mainly wasn't pointing it out as a problem, just wondering what would happen.","msgtype":"m.text","formatted_body":"Although I mainly wasn't pointing it out as a problem, just wondering what would happen."}} {"origin_server_ts":1675861286052,"event_id":"$FMOPZ3UXiD9ovBHZ7NRY_wnrRjY6hHRqIJL_BOti-T0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The system manages the number of parallel threads (based on the number of cores)","msgtype":"m.text","org.matrix.msc1767.text":"The system manages the number of parallel threads (based on the number of cores)"}} {"origin_server_ts":1675861292602,"event_id":"$NkPoCVGysMew7YWZBEv8LW_FwLmwDPlWf0VFwxMYJY8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This is how the parallel version of each works now","msgtype":"m.text","org.matrix.msc1767.text":"This is how the parallel version of each works now"}} {"origin_server_ts":1675861385512,"event_id":"$tn2SnWBhkdyw6bk1uYRAIzTpUQos0vE96Ouo56IRaIQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, but a reduction doesn't let you use them all towards the end.","msgtype":"m.text","formatted_body":"Yeah, but a reduction doesn't let you use them all towards the end."}} {"origin_server_ts":1675861625624,"event_id":"$Dzn4TsmgbBmPQIl0XT3UqDO8fUIICTMjI0VVtfImitk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So like if you want `f/` on a shape 3 8 array, you can keep 3 cores occupied for 8 steps, or repeat 4-2-1 on each of 3 rows, or do a big 12-6-3 probably requiring tricky data movement.","msgtype":"m.text","formatted_body":"So like if you want f/<\/code> on a shape 3 8 array, you can keep 3 cores occupied for 8 steps, or repeat 4-2-1 on each of 3 rows, or do a big 12-6-3 probably requiring tricky data movement."}} {"origin_server_ts":1675867270797,"event_id":"$FzKKjqEcH3c7YuC54U0uPah3URkk54soZSIE27Z6r3U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Why would the data movement be tricky? ","msgtype":"m.text"}} {"origin_server_ts":1675867735544,"event_id":"$nex0_mu7mmxTM4-P7441rMqwTN5z_gaXys_sADLhOgQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"If you store one big array I guess it's not. I'd been thinking you'd try to avoid passing things between cores too much but now that I consider it I have no idea whether that's useful.","msgtype":"m.text","formatted_body":"If you store one big array I guess it's not. I'd been thinking you'd try to avoid passing things between cores too much but now that I consider it I have no idea whether that's useful."}} {"origin_server_ts":1675867747284,"event_id":"$r6qe9MEhAyTXtOgtTplHvx59au0GP7BQRcG6Q-8_jVs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"If you store one big array I guess it's not. I'd been thinking you'd try to avoid passing things between threads too much but now that I consider it I have no idea whether that's useful.","msgtype":"m.text","formatted_body":"If you store one big array I guess it's not. I'd been thinking you'd try to avoid passing things between threads too much but now that I consider it I have no idea whether that's useful."},"m.relates_to":{"event_id":"$nex0_mu7mmxTM4-P7441rMqwTN5z_gaXys_sADLhOgQ","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* If you store one big array I guess it's not. I'd been thinking you'd try to avoid passing things between threads too much but now that I consider it I have no idea whether that's useful.","msgtype":"m.text","formatted_body":"* If you store one big array I guess it's not. I'd been thinking you'd try to avoid passing things between threads too much but now that I consider it I have no idea whether that's useful."}} {"origin_server_ts":1675868433167,"event_id":"$TXYEZk0ReZHLYnPBQVE0xLD0GXxIrk13GvhornZN5VI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: we've talked about about map and reduce as two parallelisable operators or functions. Are there any other obvious cases? ","msgtype":"m.text","formatted_body":"
                    Marshall<\/a>: we've talked about about map and reduce as two parallelisable operators or functions. Are there any other obvious cases? "}} {"origin_server_ts":1675868464406,"event_id":"$auRaMovabvfByYQ1zhS2Af4KXftHXz05sd75Qp0EFMU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Scalar functions can obviously also be parallelised. ","msgtype":"m.text"}} {"origin_server_ts":1675869287627,"event_id":"$7w9TljYMYxRdXdT2hbfv3ClB_0eRjOXMeRW1mlkzwTY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Scan is the only one I can think of. Has to do more total function calls though.","msgtype":"m.text","formatted_body":"Scan is the only one I can think of. Has to do more total function calls though."}} {"origin_server_ts":1675869309138,"event_id":"$YZNhBnVzB9ZidCdgsBgTFg_dpgYqjd6Dd7GwgkFZYSE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Scalar functions are just map to me.","msgtype":"m.text","formatted_body":"Scalar functions are just map to me."}} {"origin_server_ts":1676268535193,"event_id":"$audTVrtG0JuYYnZQa0KtsWC9sZ4CQxFLNlJzsF03kcw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"About parallelisation: I need opinions.","msgtype":"m.text","org.matrix.msc1767.text":"About parallelisation: I need opinions."}} {"origin_server_ts":1676268599411,"event_id":"$elsxwo8rL_BzA2iyY43e-HwgJ_c05w2jeT18TeaTvIg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So for fun, I wanted to show off parallel each, and I wanted to do it on the standard game of life implementation: Like so:","msgtype":"m.text","org.matrix.msc1767.text":"So for fun, I wanted to show off parallel each, and I wanted to do it on the standard game of life implementation: Like so:"}} {"origin_server_ts":1676268616907,"event_id":"$chMx3V05OgoiyeMmSHpGUkHmUvAsADuBoicnmLdmCME","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"```\n{ ⊢¨∥ ⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ∘.⊖ ¯1 0 1 ⌽¨ ⊂⍵ }\n```"},{"mimetype":"text/html","body":"
                    { ⊢¨∥ ⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ∘.⊖ ¯1 0 1 ⌽¨ ⊂⍵ }\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"```\n{ ⊢¨∥ ⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ∘.⊖ ¯1 0 1 ⌽¨ ⊂⍵ }\n```","msgtype":"m.text","formatted_body":"
                    { ⊢¨∥ ⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ∘.⊖ ¯1 0 1 ⌽¨ ⊂⍵ }\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1676268649652,"event_id":"$_3-Dn4bFD_7VHnW5B98zdM2DPW5BLuKGrMRx4Zw6mcA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"```\n{ ⊢¨∥ ⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ⊖⌻ ¯1 0 1 ⌽¨ ⊂⍵ }\n```"},{"mimetype":"text/html","body":"
                    { ⊢¨∥ ⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ⊖⌻ ¯1 0 1 ⌽¨ ⊂⍵ }\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"```\n{ ⊢¨∥ ⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ⊖⌻ ¯1 0 1 ⌽¨ ⊂⍵ }\n```","msgtype":"m.text","formatted_body":"
                    { ⊢¨∥ ⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ⊖⌻ ¯1 0 1 ⌽¨ ⊂⍵ }\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$chMx3V05OgoiyeMmSHpGUkHmUvAsADuBoicnmLdmCME","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * ```\n{ ⊢¨∥ ⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ⊖⌻ ¯1 0 1 ⌽¨ ⊂⍵ }\n```"},{"mimetype":"text/html","body":" * 
                    { ⊢¨∥ ⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ⊖⌻ ¯1 0 1 ⌽¨ ⊂⍵ }\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":" * ```\n{ ⊢¨∥ ⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ⊖⌻ ¯1 0 1 ⌽¨ ⊂⍵ }\n```","msgtype":"m.text","formatted_body":" * 
                    { ⊢¨∥ ⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ⊖⌻ ¯1 0 1 ⌽¨ ⊂⍵ }\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1676268684840,"event_id":"$olMXjSiBkRkJyEBZBe0GOUbRDfwZlGT1lRFykFxbhLE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Turns out, it didn't run faster. So I investigated.","msgtype":"m.text","org.matrix.msc1767.text":"Turns out, it didn't run faster. So I investigated."}}
                    {"origin_server_ts":1676268778730,"event_id":"$pMrNaPBRxRsNybTrPlxyEwV79ZFSfI3yvCSVUOjOgNo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I realised this was because the reduction operator collapses the result of each iteration in the reduction. I then remembered that I implemented that because I did something like `+/⍳N` with a very large `N` and ended up blowing the stack when eventually collapsing the result."},{"mimetype":"text/html","body":"I realised this was because the reduction operator collapses the result of each iteration in the reduction. I then remembered that I implemented that because I did something like +/⍳N<\/code> with a very large N<\/code> and ended up blowing the stack when eventually collapsing the result."}],"format":"org.matrix.custom.html","body":"I realised this was because the reduction operator collapses the result of each iteration in the reduction. I then remembered that I implemented that because I did something like `+/⍳N` with a very large `N` and ended up blowing the stack when eventually collapsing the result.","msgtype":"m.text","formatted_body":"I realised this was because the reduction operator collapses the result of each iteration in the reduction. I then remembered that I implemented that because I did something like +/⍳N<\/code> with a very large N<\/code> and ended up blowing the stack when eventually collapsing the result."}}
                    {"origin_server_ts":1676268853508,"event_id":"$kDaVK0682YQLX31NFdxnSvFJTjWH_UDs4kVcVD6nn9k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Of course, in this case it's 3 elements, so I just removed that implicit collapse and all of a sudden the parallelisation worked exactly as expected (almost perfect utilisation, being almost 8 times faster on my 8-core machine)","msgtype":"m.text","org.matrix.msc1767.text":"Of course, in this case it's 3 elements, so I just removed that implicit collapse and all of a sudden the parallelisation worked exactly as expected (almost perfect utilisation, being almost 8 times faster on my 8-core machine)"}}
                    {"origin_server_ts":1676268877864,"event_id":"$rHSlQ11aA6xjJzQPOKon_Aw8yawnPwFntzQHxqOtL04","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So I have a couple of options here:","msgtype":"m.text","org.matrix.msc1767.text":"So I have a couple of options here:"}}
                    {"origin_server_ts":1676268907814,"event_id":"$HE7NLkCwb24qpzvDCXyZTMV617zcPhBhcoeecDJetZ4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I could do nothing of course, or I could inhibit the implicit collapse if the array is smaller than some cutoff size.","msgtype":"m.text","org.matrix.msc1767.text":"I could do nothing of course, or I could inhibit the implicit collapse if the array is smaller than some cutoff size."}}
                    {"origin_server_ts":1676268916884,"event_id":"$l6ZRZcyJE-T8hYhdPo5UDGB4hhj4V1JSNjGyb-StaKc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Or perhaps there is something more clever I could do.","msgtype":"m.text","org.matrix.msc1767.text":"Or perhaps there is something more clever I could do."}}
                    {"origin_server_ts":1676269921901,"event_id":"$RUQRwtaJkGmedAUm5wJWzJAl9xljp-mhGQwRZjpyIQs","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"parallelisation huh","msgtype":"m.text"}}
                    {"origin_server_ts":1676291551921,"event_id":"$rU5JcWPjAJmEIaK3Sfvm06pUXNnY8J7SiIZ0ag4eDuI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Or, I could collapse every N iterations. That's probably better. ","msgtype":"m.text"}}
                    {"origin_server_ts":1676291558105,"event_id":"$9kgYLJm2MmPOLhFiAGQOOooNWjgOgJs3Dn4MAx3a7hM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Question is what N should be. ","msgtype":"m.text"}}
                    {"origin_server_ts":1676616125986,"event_id":"$IzQtzhNjfT4FTmVP8DYTXpbCFLdw_FZ1rErlLVp_ZPM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I've spent a lot of time trying to figure out reliable alternatives but haven't really come up with anything. I may have to settle with heuristics and perhaps use 30 or so as the cutoff.","msgtype":"m.text","org.matrix.msc1767.text":"I've spent a lot of time trying to figure out reliable alternatives but haven't really come up with anything. I may have to settle with heuristics and perhaps use 30 or so as the cutoff."}}
                    {"origin_server_ts":1676616146068,"event_id":"$ZxNfIHfh6JggNV7xKx0oPVoW7Y2qfXJ959hA2iStpgc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have been thinking about something else: Nuladic function.","msgtype":"m.text","org.matrix.msc1767.text":"I have been thinking about something else: Nuladic function."}}
                    {"origin_server_ts":1676616147436,"event_id":"$3DZaDvPRoQjv-K2N2zVjYLwLDO4JvHePXJKIwkn4_MU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I have been thinking about something else: Nuladic functions.","msgtype":"m.text","org.matrix.msc1767.text":"I have been thinking about something else: Nuladic functions."},"m.relates_to":{"event_id":"$ZxNfIHfh6JggNV7xKx0oPVoW7Y2qfXJ959hA2iStpgc","rel_type":"m.replace"},"body":" * I have been thinking about something else: Nuladic functions.","msgtype":"m.text","org.matrix.msc1767.text":" * I have been thinking about something else: Nuladic functions."}}
                    {"origin_server_ts":1676616160897,"event_id":"$la7ZhD-wq17ApbZkEhFLo2OCqzVVrBsDj2xLKM-6OJQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I have been thinking about something else: Null-adic or nil-adic functions.","msgtype":"m.text","org.matrix.msc1767.text":"I have been thinking about something else: Null-adic or nil-adic functions."},"m.relates_to":{"event_id":"$ZxNfIHfh6JggNV7xKx0oPVoW7Y2qfXJ959hA2iStpgc","rel_type":"m.replace"},"body":" * I have been thinking about something else: Null-adic or nil-adic functions.","msgtype":"m.text","org.matrix.msc1767.text":" * I have been thinking about something else: Null-adic or nil-adic functions."}}
                    {"origin_server_ts":1676616200799,"event_id":"$bLjr_y7FfgqqU2p45EITB7aUi9qK96Kn37pNIZpox40","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I kinda want them for certain purposes, but they clearly can't be regular functions. From a language perspective, they have to be values.","msgtype":"m.text","org.matrix.msc1767.text":"I kinda want them for certain purposes, but they clearly can't be regular functions. From a language perspective, they have to be values."}}
                    {"origin_server_ts":1676616269438,"event_id":"$waE77kZDtwEokafeU0SQVn4I5aK2W4ep9jz25iMmhjs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Perhaps have a way to tie a value to a function such that when the value is dereferenced, an associated function is called. It would them be called with an argument that somehow represents the context in which it was called.","msgtype":"m.text","org.matrix.msc1767.text":"Perhaps have a way to tie a value to a function such that when the value is dereferenced, an associated function is called. It would them be called with an argument that somehow represents the context in which it was called."}}
                    {"origin_server_ts":1676616333295,"event_id":"$ohXK5Vn6h3tLCgYq-xx0661ZJayCFvBIHPzcQwmBLtM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It could also be called with some other argument when assigned to, so you can create variables which are backed by something else.","msgtype":"m.text","org.matrix.msc1767.text":"It could also be called with some other argument when assigned to, so you can create variables which are backed by something else."}}
                    {"origin_server_ts":1676616368583,"event_id":"$3oVkEdB1gh-ybcX5OQLOjrU51SHWwSy2U8J1uRmFSwk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"You could then simply declare `⎕` as being one of these special values, and you'd be able to emulate APL io"},{"mimetype":"text/html","body":"You could then simply declare ⎕<\/code> as being one of these special values, and you'd be able to emulate APL io"}],"format":"org.matrix.custom.html","body":"You could then simply declare `⎕` as being one of these special values, and you'd be able to emulate APL io","msgtype":"m.text","formatted_body":"You could then simply declare ⎕<\/code> as being one of these special values, and you'd be able to emulate APL io"}}
                    {"origin_server_ts":1676870384999,"event_id":"$mdELVxrA3UvZpX2ha_KoTQzcvlO9voAxZ36pwUImk_U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, I have no adopted the BQN semantics of doing addition and subtraction of chars.","msgtype":"m.text","org.matrix.msc1767.text":"OK, I have no adopted the BQN semantics of doing addition and subtraction of chars."}}
                    {"origin_server_ts":1676870448502,"event_id":"$UwwoW6vSVbl4hC6v21zuEqQvT6aar0dkvhMJdqvoWrU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: should I also support `(¯97 × 2) - \"a\"`?"},{"mimetype":"text/html","body":"Marshall<\/a>: should I also support (¯97 × 2) - "a"<\/code>?"}],"format":"org.matrix.custom.html","body":"Marshall: should I also support `(¯97 × 2) - \"a\"`?","msgtype":"m.text","formatted_body":"Marshall<\/a>: should I also support (¯97 × 2) - "a"<\/code>?"}}
                    {"origin_server_ts":1676870461243,"event_id":"$3qjYXEJVLRIeX_Hyd49sxJ8HJU2dXt7YQLYASGiLEFY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Right now numeric values are not allowed to the left of `-`."},{"mimetype":"text/html","body":"Right now numeric values are not allowed to the left of -<\/code>."}],"format":"org.matrix.custom.html","body":"Right now numeric values are not allowed to the left of `-`.","msgtype":"m.text","formatted_body":"Right now numeric values are not allowed to the left of -<\/code>."}}
                    {"origin_server_ts":1676896261261,"event_id":"$r49okbmAA1kn2bi_sOo_OrvpUpG9WACiMyi3QzKaEHQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No, since the \"character-ness\" of `num-char` is `0-1` or `¯1`, regardless of what the numeric value is. Put another way, there's nothing you can add `\"a\"` to and get `¯97 × 2`.","msgtype":"m.text","formatted_body":"No, since the \"character-ness\" of num-char<\/code> is 0-1<\/code> or ¯1<\/code>, regardless of what the numeric value is. Put another way, there's nothing you can add \"a\"<\/code> to and get ¯97 × 2<\/code>."}}
                    {"origin_server_ts":1676898364592,"event_id":"$3-8hkUKOAyrnbQqegcR5v_xfpi8hHxprrn8hvIP-4lU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: Thanks. Here's the result: https://kapdemo.dhsdevelopments.com/clientweb2/#(%22foo%22%20%2B%201)%20(%22012345%22%20-%20%400)%20(%22foo%22%20-%20%22xbc%22)"},{"mimetype":"text/html","body":"Marshall<\/a>: Thanks. Here's the result: https://kapdemo.dhsdevelopments.com/clientweb2/#(%22foo%22%20%2B%201)%20(%22012345%22%20-%20%400)%20(%22foo%22%20-%20%22xbc%22)"}],"format":"org.matrix.custom.html","body":"Marshall: Thanks. Here's the result: https://kapdemo.dhsdevelopments.com/clientweb2/#(%22foo%22%20%2B%201)%20(%22012345%22%20-%20%400)%20(%22foo%22%20-%20%22xbc%22)","msgtype":"m.text","formatted_body":"Marshall<\/a>: Thanks. Here's the result: https://kapdemo.dhsdevelopments.com/clientweb2/#(%22foo%22%20%2B%201)%20(%22012345%22%20-%20%400)%20(%22foo%22%20-%20%22xbc%22)"}}
                    {"origin_server_ts":1676898438128,"event_id":"$PXIuJvtNxONcznJ0udaxxMAhNZ7gPmJC342vX10wMbI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Looks good!","msgtype":"m.text","formatted_body":"Looks good!"}}
                    {"origin_server_ts":1676898471524,"event_id":"$-zSLtwAN-7hQeRIWNTud6LaH1ip9tHwgDlUjYncdtbs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I've also implemented an improved way to specify characters: You can specify a character like so: `@↑`. But you cal also use `@\\u2191` or `@\\UPWARDS_ARROW`."},{"mimetype":"text/html","body":"I've also implemented an improved way to specify characters: You can specify a character like so: @↑<\/code>. But you cal also use @\\u2191<\/code> or @\\UPWARDS_ARROW<\/code>."}],"format":"org.matrix.custom.html","body":"I've also implemented an improved way to specify characters: You can specify a character like so: `@↑`. But you cal also use `@\\u2191` or `@\\UPWARDS_ARROW`.","msgtype":"m.text","formatted_body":"I've also implemented an improved way to specify characters: You can specify a character like so: @↑<\/code>. But you cal also use @\\u2191<\/code> or @\\UPWARDS_ARROW<\/code>."}}
                    {"origin_server_ts":1676898492060,"event_id":"$lbixhJu0sKhPGjlcCD2l8ie4TTOD1FoKi5g1QGHM2BI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The named version doesn't work in the js version though, because that would increase the download js blob by a few MB. :-)","msgtype":"m.text","org.matrix.msc1767.text":"The named version doesn't work in the js version though, because that would increase the download js blob by a few MB. :-)"}}
                    {"origin_server_ts":1676898516489,"event_id":"$wuh8oDcoPLXGtNRTpud0lA9fZKP8POxn_tLBBMCjk9A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I've also implemented an improved way to specify characters: You can specify a character like so: `@↑`. But you can also use `@\\u2191` or `@\\UPWARDS_ARROW`."},{"mimetype":"text/html","body":"I've also implemented an improved way to specify characters: You can specify a character like so: @↑<\/code>. But you can also use @\\u2191<\/code> or @\\UPWARDS_ARROW<\/code>."}],"format":"org.matrix.custom.html","body":"I've also implemented an improved way to specify characters: You can specify a character like so: `@↑`. But you can also use `@\\u2191` or `@\\UPWARDS_ARROW`.","msgtype":"m.text","formatted_body":"I've also implemented an improved way to specify characters: You can specify a character like so: @↑<\/code>. But you can also use @\\u2191<\/code> or @\\UPWARDS_ARROW<\/code>."},"m.relates_to":{"event_id":"$-zSLtwAN-7hQeRIWNTud6LaH1ip9tHwgDlUjYncdtbs","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * I've also implemented an improved way to specify characters: You can specify a character like so: `@↑`. But you can also use `@\\u2191` or `@\\UPWARDS_ARROW`."},{"mimetype":"text/html","body":" * I've also implemented an improved way to specify characters: You can specify a character like so: @↑<\/code>. But you can also use @\\u2191<\/code> or @\\UPWARDS_ARROW<\/code>."}],"format":"org.matrix.custom.html","body":" * I've also implemented an improved way to specify characters: You can specify a character like so: `@↑`. But you can also use `@\\u2191` or `@\\UPWARDS_ARROW`.","msgtype":"m.text","formatted_body":" * I've also implemented an improved way to specify characters: You can specify a character like so: @↑<\/code>. But you can also use @\\u2191<\/code> or @\\UPWARDS_ARROW<\/code>."}}
                    {"origin_server_ts":1676898557853,"event_id":"$b1TA6epxZCi2eX7bHS6HCSyh_e7EzSmNzLJkUZgQu-8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"You also a have a few special characters, like `@\\r`, `@\\n`."},{"mimetype":"text/html","body":"You also a have a few special characters, like @\\r<\/code>, @\\n<\/code>."}],"format":"org.matrix.custom.html","body":"You also a have a few special characters, like `@\\r`, `@\\n`.","msgtype":"m.text","formatted_body":"You also a have a few special characters, like @\\r<\/code>, @\\n<\/code>."}}
                    {"origin_server_ts":1676898607562,"event_id":"$MFjAnpgWH7JRVCkX868XpMPvbhZhPknwfkYAZ4msqaY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"OK, I have now adopted the BQN semantics of doing addition and subtraction of chars.","msgtype":"m.text","org.matrix.msc1767.text":"OK, I have now adopted the BQN semantics of doing addition and subtraction of chars."},"m.relates_to":{"event_id":"$mdELVxrA3UvZpX2ha_KoTQzcvlO9voAxZ36pwUImk_U","rel_type":"m.replace"},"body":" * OK, I have now adopted the BQN semantics of doing addition and subtraction of chars.","msgtype":"m.text","org.matrix.msc1767.text":" * OK, I have now adopted the BQN semantics of doing addition and subtraction of chars."}}
                    {"origin_server_ts":1676898630858,"event_id":"$TXe_dek-hOZ7RqM2eDFqEfW1nv-mCsH7sjvG5U4zr1o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But, they work find on the JVM as well as native.","msgtype":"m.text","org.matrix.msc1767.text":"But, they work find on the JVM as well as native."}}
                    {"origin_server_ts":1676898647847,"event_id":"$HFRIcsR9rh6QJOSBsQRlmh-JBDVjNQRZMnNvP9LCeCE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"But, they work fine on the JVM as well as native.","msgtype":"m.text","org.matrix.msc1767.text":"But, they work fine on the JVM as well as native."},"m.relates_to":{"event_id":"$TXe_dek-hOZ7RqM2eDFqEfW1nv-mCsH7sjvG5U4zr1o","rel_type":"m.replace"},"body":" * But, they work fine on the JVM as well as native.","msgtype":"m.text","org.matrix.msc1767.text":" * But, they work fine on the JVM as well as native."}}
                    {"origin_server_ts":1676898736885,"event_id":"$rOba7LPZeN2tN6wC3qUNAj0l7bIqH70ipZYZFY5zW1c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: what is your thought of nil-adic functions? BQN has them, no?"},{"mimetype":"text/html","body":"Marshall<\/a>: what is your thought of nil-adic functions? BQN has them, no?"}],"format":"org.matrix.custom.html","body":"Marshall: what is your thought of nil-adic functions? BQN has them, no?","msgtype":"m.text","formatted_body":"Marshall<\/a>: what is your thought of nil-adic functions? BQN has them, no?"}}
                    {"origin_server_ts":1676898739075,"event_id":"$FCypWyqXPEFN3_NCngWQAzi-kQfr9mZ5_7XrmdldgLA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"That's a pretty good system. `'\\n'` and so on could be added in BQN, but they look kind of weird.","msgtype":"m.text","formatted_body":"That's a pretty good system. '\\n'<\/code> and so on could be added in BQN, but they look kind of weird."}}
                    {"origin_server_ts":1676898754192,"event_id":"$7vwnb44Ck1wcgpp0Mw0n8VPFfGyqOL0jSbTl3zNHC_A","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"BQN only has one or two arguments.","msgtype":"m.text","formatted_body":"BQN only has one or two arguments."}}
                    {"origin_server_ts":1676898754778,"event_id":"$W3uSFW0NUD7w2NJiWU6QQv1Z4di58VAOLSszNCwd5_M","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$b1TA6epxZCi2eX7bHS6HCSyh_e7EzSmNzLJkUZgQu-8"}},"format":"org.matrix.custom.html","body":"feature request: `` @\\0 ``","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>feature request: @\\0<\/code>"}}
                    {"origin_server_ts":1676898778339,"event_id":"$72mKnQKSdId_esnMpB4klQ0azKzHeMz7lzZ15WgZQEs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It's `@0`, right?","msgtype":"m.text","formatted_body":"It's @0<\/code>, right?"}}
                    {"origin_server_ts":1676898788457,"event_id":"$iai7sRMTc64HtkFhmU9LXdWTJDrGrxi440snlBLP88Y","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's BQN `@+48`","msgtype":"m.text","formatted_body":"that's BQN @+48<\/code>"}}
                    {"origin_server_ts":1676898790748,"event_id":"$lSXyxz235jg-f7UNfRoqbpvTD2_XOsnuc5mdj8fDp2o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: You mean the null character?"},{"mimetype":"text/html","body":"dzaima<\/a>: You mean the null character?"}],"format":"org.matrix.custom.html","body":"dzaima: You mean the null character?","msgtype":"m.text","formatted_body":"dzaima<\/a>: You mean the null character?"}}
                    {"origin_server_ts":1676898793806,"event_id":"$fXwVy8FZPJR746dzEXGzsyxOMiTPVYbtwH_ClelhHhw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah","msgtype":"m.text","formatted_body":"yeah"}}
                    {"origin_server_ts":1676898800318,"event_id":"$fpKZ1tDcxsTE8hPxw-PhezxLiwLn4Wxbd5oz7HjHq44","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"That's `@u0`"},{"mimetype":"text/html","body":"That's @u0<\/code>"}],"format":"org.matrix.custom.html","body":"That's `@u0`","msgtype":"m.text","formatted_body":"That's @u0<\/code>"}}
                    {"origin_server_ts":1676898808735,"event_id":"$IhDOWzicPaKEjVk5HCl7OCjuVOvNN0hSNnr0XZ1POiM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"If you want the zero, it's `@0`"},{"mimetype":"text/html","body":"If you want the zero, it's @0<\/code>"}],"format":"org.matrix.custom.html","body":"If you want the zero, it's `@0`","msgtype":"m.text","formatted_body":"If you want the zero, it's @0<\/code>"}}
                    {"origin_server_ts":1676898827664,"event_id":"$6IOXDUhDpLm9wHMc27r_iazmp4VxdY1E5UXXKzzJpxE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"That's `@\\u0`"},{"mimetype":"text/html","body":"That's @\\u0<\/code>"}],"format":"org.matrix.custom.html","body":"That's `@\\u0`","msgtype":"m.text","formatted_body":"That's @\\u0<\/code>"},"m.relates_to":{"event_id":"$fpKZ1tDcxsTE8hPxw-PhezxLiwLn4Wxbd5oz7HjHq44","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * That's `@\\u0`"},{"mimetype":"text/html","body":" * That's @\\u0<\/code>"}],"format":"org.matrix.custom.html","body":" * That's `@\\u0`","msgtype":"m.text","formatted_body":" * That's @\\u0<\/code>"}}
                    {"origin_server_ts":1676898855606,"event_id":"$_Qi7nNtT6TDkS-YMAOaWrYCST2wlrem87fHR4w7UJRg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(fwiw, dzaima/BQN allows a plain unquoted `\\\\n`/`` \\u2191 ``/etc character literals as a backslash is otherwise unused)","msgtype":"m.text","formatted_body":"(fwiw, dzaima/BQN allows a plain unquoted \\n<\/code>/\\u2191<\/code>/etc character literals as a backslash is otherwise unused)"}}
                    {"origin_server_ts":1676898868394,"event_id":"$je-PKe8Qt9MhGK1tZ41FbM8jqP65fdWTGtkApFjn_x4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"You can also use `@\\NULL`"},{"mimetype":"text/html","body":"You can also use @\\NULL<\/code>"}],"format":"org.matrix.custom.html","body":"You can also use `@\\NULL`","msgtype":"m.text","formatted_body":"You can also use @\\NULL<\/code>"}}
                    {"origin_server_ts":1676898906662,"event_id":"$yH8T60cQ4zagH9gl4rt_RMyQBaOr2LeOzMH594UNI38","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: OK, that's neat :-)"},{"mimetype":"text/html","body":"dzaima<\/a>: OK, that's neat :-)"}],"format":"org.matrix.custom.html","body":"dzaima: OK, that's neat :-)","msgtype":"m.text","formatted_body":"dzaima<\/a>: OK, that's neat :-)"}}
                    {"origin_server_ts":1676898922264,"event_id":"$hVtt9pDj0jymR4bqOh4sHbG7NSM4RLU5bySzD8wzuy4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I can't do that as I want scan on backslash.","msgtype":"m.text","org.matrix.msc1767.text":"I can't do that as I want scan on backslash."}}
                    {"origin_server_ts":1676898929004,"event_id":"$currT1fP_WHQ-dqKmpHFfnBbxWqA24VFpqw3LhuAaZs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"APL's nilads are really weird in that a nilad can only be used by name; once it's reached it's immediately evaluated. So it's not a first-class value. I would never use them because of that.","msgtype":"m.text","formatted_body":"APL's nilads are really weird in that a nilad can only be used by name; once it's reached it's immediately evaluated. So it's not a first-class value. I would never use them because of that."}}
                    {"origin_server_ts":1676898993384,"event_id":"$R9g2KQEx9cpwMzwT0lVAUZntjmPYsgm3EhXB_ZAFZOs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: I'm not sure I'd have the same problem. The evaluation rules would be the same as function calls."},{"mimetype":"text/html","body":"Marshall<\/a>: I'm not sure I'd have the same problem. The evaluation rules would be the same as function calls."}],"format":"org.matrix.custom.html","body":"Marshall: I'm not sure I'd have the same problem. The evaluation rules would be the same as function calls.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I'm not sure I'd have the same problem. The evaluation rules would be the same as function calls."}}
                    {"origin_server_ts":1676899024854,"event_id":"$jcjGpNzl6cBOUNVVKehFSPXRHQ1T1_RfEXFXSB9I4Rk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I mean, the same as values.","msgtype":"m.text","org.matrix.msc1767.text":"I mean, the same as values."}}
                    {"origin_server_ts":1676899070576,"event_id":"$wuK0fdLGKoCUEj7x9L0AobBue-B0EvtvgqfPV2Qy5rw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"But, the key difference here is that they would for all intents and purposes *be* values."},{"mimetype":"text/html","body":"But, the key difference here is that they would for all intents and purposes be<\/em> values."}],"format":"org.matrix.custom.html","body":"But, the key difference here is that they would for all intents and purposes *be* values.","msgtype":"m.text","formatted_body":"But, the key difference here is that they would for all intents and purposes be<\/em> values."}}
                    {"origin_server_ts":1676899111627,"event_id":"$BJVGpMVPpdtz38U8vEJTCN5penQzucauM7tcvfuTWS0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"But you can pass one around unevaluated if you want?","msgtype":"m.text","formatted_body":"But you can pass one around unevaluated if you want?"}}
                    {"origin_server_ts":1676899119061,"event_id":"$tj3oc3u0rj7OW0ppPT3w05yTQB6HmDp5Wd1udhppOFA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$jcjGpNzl6cBOUNVVKehFSPXRHQ1T1_RfEXFXSB9I4Rk"}},"format":"org.matrix.custom.html","body":"that is, what? i.e. how would you 1) call a nilad; 2) pass a nilad without calling it to somewhere else","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>that is, what? i.e. how would you 1) call a nilad; 2) pass a nilad without calling it to somewhere else"}}
                    {"origin_server_ts":1676899125630,"event_id":"$-hNKxreNZWsYLcIomRChVVnWNO6J1Q5erBAF99fQi-Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"They would behave exactly the same, and `foo ← bar` where bar is nilalic would simply call bar's evaluation function and assign it to foo. `foo ⇐ bar` would be a syntax error just like today."},{"mimetype":"text/html","body":"They would behave exactly the same, and foo ← bar<\/code> where bar is nilalic would simply call bar's evaluation function and assign it to foo. foo ⇐ bar<\/code> would be a syntax error just like today."}],"format":"org.matrix.custom.html","body":"They would behave exactly the same, and `foo ← bar` where bar is nilalic would simply call bar's evaluation function and assign it to foo. `foo ⇐ bar` would be a syntax error just like today.","msgtype":"m.text","formatted_body":"They would behave exactly the same, and foo ← bar<\/code> where bar is nilalic would simply call bar's evaluation function and assign it to foo. foo ⇐ bar<\/code> would be a syntax error just like today."}}
                    {"origin_server_ts":1676899162428,"event_id":"$EEYDEQRfegDPgMY7LPijpv4jGky6v--syKcIpxMMPaY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: 1) You dereference it. 2) You can't, at least not directly. You could always do: `λ{foo}`"},{"mimetype":"text/html","body":"dzaima<\/a>: 1) You dereference it. 2) You can't, at least not directly. You could always do: λ{foo}<\/code>"}],"format":"org.matrix.custom.html","body":"dzaima: 1) You dereference it. 2) You can't, at least not directly. You could always do: `λ{foo}`","msgtype":"m.text","formatted_body":"dzaima<\/a>: 1) You dereference it. 2) You can't, at least not directly. You could always do: λ{foo}<\/code>"}}
                    {"origin_server_ts":1676899199319,"event_id":"$Pm4ZlscCcQ9F3dChpklwtywAwd1xApUCj85RsKEV-H8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's better to think of them as programmatic values, than regular functions.","msgtype":"m.text","org.matrix.msc1767.text":"It's better to think of them as programmatic values, than regular functions."}}
                    {"origin_server_ts":1676899227884,"event_id":"$7Z1JLFyMN22eKM2H9lqwjzzXAfolf1NadjNS1fLVzxA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ok so they are what marshall called a non-first-class value","msgtype":"m.text","formatted_body":"ok so they are what marshall called a non-first-class value"}}
                    {"origin_server_ts":1676899247024,"event_id":"$Bji3cy1_rrDbHeHhH0NGCAx_Ctow5qKsZUAZf1n2fFQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That does sound like it, yes.","msgtype":"m.text","org.matrix.msc1767.text":"That does sound like it, yes."}}
                    {"origin_server_ts":1676899251599,"event_id":"$Ei0zaMakU0q_9lfVH-jpPpj-WnNsw87o3QXJgX-zeDM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Right, it's not that different from a lazy value. Depends on how it's presented I guess.","msgtype":"m.text","formatted_body":"Right, it's not that different from a lazy value. Depends on how it's presented I guess."}}
                    {"origin_server_ts":1676899257864,"event_id":"$wim2oqygK42wRtYPVipEF2WBU4B3_uzOkYlXCQ_Bb2c","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I still don't know what I'd use it for?","msgtype":"m.text","formatted_body":"I still don't know what I'd use it for?"}}
                    {"origin_server_ts":1676899288458,"event_id":"$Ko8z_eIek8g864TKHpVBK9kcD6L0FKUaw1DhiDACekk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$Ei0zaMakU0q_9lfVH-jpPpj-WnNsw87o3QXJgX-zeDM"}},"format":"org.matrix.custom.html","body":"right, it's pretty much precisely a lazily-evaluated value, with the caveat of being re-evaluated on every use-site","msgtype":"m.text","formatted_body":" ↰ <\/a> Marshall<\/a> <\/mx-reply>right, it's pretty much precisely a lazily-evaluated value, with the caveat of being re-evaluated on every use-site"}}
                    {"origin_server_ts":1676899304555,"event_id":"$QyDDmiOEQblMtXEUCtiDpRQVzFtFgt8914syNvZc2UY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: My primary use case would be to be able to implement some APL-compatibility stuff. Especially quad names."},{"mimetype":"text/html","body":"Marshall<\/a>: My primary use case would be to be able to implement some APL-compatibility stuff. Especially quad names."}],"format":"org.matrix.custom.html","body":"Marshall: My primary use case would be to be able to implement some APL-compatibility stuff. Especially quad names.","msgtype":"m.text","formatted_body":"Marshall<\/a>: My primary use case would be to be able to implement some APL-compatibility stuff. Especially quad names."}}
                    {"origin_server_ts":1676899327502,"event_id":"$w4yuuVMYy_InOrBe8oWPz_SdvXsgMjXFYPc7yplVWSY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"to me it seems like it'd just be very confusing/hard to use","msgtype":"m.text","formatted_body":"to me it seems like it'd just be very confusing/hard to use"}}
                    {"origin_server_ts":1676899336328,"event_id":"$WYhQlCAbRWo_SiBiULSnIFVFnAF8gb3F_HUsPJITJa8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now that said, I can kinda-sorta emulate that using custom syntax today. I think... Let me test.","msgtype":"m.text","org.matrix.msc1767.text":"Now that said, I can kinda-sorta emulate that using custom syntax today. I think... Let me test."}}
                    {"origin_server_ts":1676899401426,"event_id":"$U6k6xZDMwSqWtsNImKu2DMDXtCCKmG837YcJzTMz2a8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, it works:","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, it works:"}}
                    {"origin_server_ts":1676899408508,"event_id":"$Z1aUPXWAuMvI9grCGThWgEnQBYsM2asQSoN8xAnl3t4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"```\ndefsyntax foo () { io:println \"i'm called\" ◊ ?10 }\n100 200 foo 300 400 foo\n```"},{"mimetype":"text/html","body":"
                    defsyntax foo () { io:println "i'm called" ◊ ?10 }\n100 200 foo 300 400 foo\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"```\ndefsyntax foo () { io:println \"i'm called\" ◊ ?10 }\n100 200 foo 300 400 foo\n```","msgtype":"m.text","formatted_body":"
                    defsyntax foo () { io:println "i'm called" ◊ ?10 }\n100 200 foo 300 400 foo\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1676899412539,"event_id":"$r2tqGbn4uOUo-Id5oSkwWGZfCULhnzZjMuuGkF08QYM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#defsyntax%20foo%20()%20%7B%20io%3Aprintln%20%22i'm%20called%22%20%E2%97%8A%20%3F10%20%7D%0A100%20200%20foo%20300%20400%20foo","msgtype":"m.text","org.matrix.msc1767.text":"https://kapdemo.dhsdevelopments.com/clientweb2/#defsyntax%20foo%20()%20%7B%20io%3Aprintln%20%22i'm%20called%22%20%E2%97%8A%20%3F10%20%7D%0A100%20200%20foo%20300%20400%20foo"}}
                    {"origin_server_ts":1676899418932,"event_id":"$k7AQZRTp4t4MF-VEwpwNZfK0iRZz0OD0D1gSOgnLm3A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So maybe I don't need it as a feature.","msgtype":"m.text","org.matrix.msc1767.text":"So maybe I don't need it as a feature."}}
                    {"origin_server_ts":1676899461708,"event_id":"$f3d7AX8aAYZgJRf4aXkT_eYBzFvSsUp-ZHI2zC-xDcM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"One feature is better than two, for sure.","msgtype":"m.text","formatted_body":"One feature is better than two, for sure."}}
                    {"origin_server_ts":1676899481364,"event_id":"$AGafmDrnZ1PtkbDYCuv8YFclT01OjSJoL8weZn2PFiQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Definitely. I didn't actually think about this approach until just now.","msgtype":"m.text","org.matrix.msc1767.text":"Definitely. I didn't actually think about this approach until just now."}}
                    {"origin_server_ts":1676899522530,"event_id":"$JhhvqpqeODOeiMGEk9p9xBSR67xTxhF459ZhyE02VCg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The main difference is that any code that looks at the parse tree wouldn't see a variable reference, but rather a special call to a defsyntax definition.","msgtype":"m.text","org.matrix.msc1767.text":"The main difference is that any code that looks at the parse tree wouldn't see a variable reference, but rather a special call to a defsyntax definition."}}
                    {"origin_server_ts":1676899536366,"event_id":"$CUBEqVWel5TpAjyIbHO-g3GOTJmp5n7WsTNKFAiimOs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The only place where that would be a problem is the structure viewer right now :-)","msgtype":"m.text","org.matrix.msc1767.text":"The only place where that would be a problem is the structure viewer right now :-)"}}
                    {"origin_server_ts":1676899569059,"event_id":"$D35sfnuveONWZ1lT3Dc6DMRP3pkFYAsckrz2JjMqJvk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Internally it's a call to a closure.","msgtype":"m.text","org.matrix.msc1767.text":"Internally it's a call to a closure."}}
                    {"origin_server_ts":1676899697217,"event_id":"$yy_Vapz4S4JL1A9eRRm6fGugPMDA8WkMrZ_2kqIey6M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I'm still trying to figure out what to do with `⎕`. It's a nice symbol, that is used for a lot of things in APL, but Kap doesn't use it at all. I've been thinking of just making it a valid name symbol, but surely I can do something more interesting. My original thought was to limit the niladic functions to start with quad, but that was a pretty useless idea."},{"mimetype":"text/html","body":"I'm still trying to figure out what to do with ⎕<\/code>. It's a nice symbol, that is used for a lot of things in APL, but Kap doesn't use it at all. I've been thinking of just making it a valid name symbol, but surely I can do something more interesting. My original thought was to limit the niladic functions to start with quad, but that was a pretty useless idea."}],"format":"org.matrix.custom.html","body":"I'm still trying to figure out what to do with `⎕`. It's a nice symbol, that is used for a lot of things in APL, but Kap doesn't use it at all. I've been thinking of just making it a valid name symbol, but surely I can do something more interesting. My original thought was to limit the niladic functions to start with quad, but that was a pretty useless idea.","msgtype":"m.text","formatted_body":"I'm still trying to figure out what to do with ⎕<\/code>. It's a nice symbol, that is used for a lot of things in APL, but Kap doesn't use it at all. I've been thinking of just making it a valid name symbol, but surely I can do something more interesting. My original thought was to limit the niladic functions to start with quad, but that was a pretty useless idea."}}
                    {"origin_server_ts":1676899723637,"event_id":"$5z0g2p_D9SgbWMhMX1zNDrRxZ7RQQlqN6769tVTFDmA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And for something like system functions, I have namespaces that is a lot better, although more verbose.","msgtype":"m.text","org.matrix.msc1767.text":"And for something like system functions, I have namespaces that is a lot better, although more verbose."}}
                    {"origin_server_ts":1676899805032,"event_id":"$4bi3b_7DRfHGWifIJxnL2GIOBNmGgbWytEjn6WI_cdk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Perhaps I should just build a bunch of APL compatibility things. Not that many that would be useful though. `⎕U` is useful, as is `⎕A`."},{"mimetype":"text/html","body":"Perhaps I should just build a bunch of APL compatibility things. Not that many that would be useful though. ⎕U<\/code> is useful, as is ⎕A<\/code>."}],"format":"org.matrix.custom.html","body":"Perhaps I should just build a bunch of APL compatibility things. Not that many that would be useful though. `⎕U` is useful, as is `⎕A`.","msgtype":"m.text","formatted_body":"Perhaps I should just build a bunch of APL compatibility things. Not that many that would be useful though. ⎕U<\/code> is useful, as is ⎕A<\/code>."}}
                    {"origin_server_ts":1676900038876,"event_id":"$mmMwn0DI-301IEivcI0pC3DkrSBXn7c_r44YKrdIg4A","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It's a confusing symbol, since it looks like \"character not found\" in many font setups.","msgtype":"m.text","formatted_body":"It's a confusing symbol, since it looks like \"character not found\" in many font setups."}}
                    {"origin_server_ts":1676900080579,"event_id":"$QZfw8zSc2fSXKzXgbchAMdOk2aP_CT6mjZUcPbJ0-kU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"True.","msgtype":"m.text","org.matrix.msc1767.text":"True."}}
                    {"origin_server_ts":1676900136280,"event_id":"$M_VZK1xf4vumH1TJFS63bSoHWlZl7GETEGuH1wKudA0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"How about using the combining char? So instead of `⎕a`, you'd write `a\u20de`."},{"mimetype":"text/html","body":"How about using the combining char? So instead of ⎕a<\/code>, you'd write a\u20de<\/code>."}],"format":"org.matrix.custom.html","body":"How about using the combining char? So instead of `⎕a`, you'd write `a\u20de`.","msgtype":"m.text","formatted_body":"How about using the combining char? So instead of ⎕a<\/code>, you'd write a\u20de<\/code>."}}
                    {"origin_server_ts":1676900145239,"event_id":"$8KUip0ttrCIfjf5AIWWYkkxFPm3fOWAMPpG40tPN4bs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"How about using the combining char? So instead of `⎕a`, you'd write a\u20de."},{"mimetype":"text/html","body":"How about using the combining char? So instead of ⎕a<\/code>, you'd write a\u20de."}],"format":"org.matrix.custom.html","body":"How about using the combining char? So instead of `⎕a`, you'd write a\u20de.","msgtype":"m.text","formatted_body":"How about using the combining char? So instead of ⎕a<\/code>, you'd write a\u20de."},"m.relates_to":{"event_id":"$M_VZK1xf4vumH1TJFS63bSoHWlZl7GETEGuH1wKudA0","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * How about using the combining char? So instead of `⎕a`, you'd write a\u20de."},{"mimetype":"text/html","body":" * How about using the combining char? So instead of ⎕a<\/code>, you'd write a\u20de."}],"format":"org.matrix.custom.html","body":" * How about using the combining char? So instead of `⎕a`, you'd write a\u20de.","msgtype":"m.text","formatted_body":" * How about using the combining char? So instead of ⎕a<\/code>, you'd write a\u20de."}}
                    {"origin_server_ts":1676900157494,"event_id":"$ey1EZJ-yPATxYhV1sDTnaCt4RF2Mr6yRST_KBgn1cYE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, that rendered terribly in my element.","msgtype":"m.text","org.matrix.msc1767.text":"OK, that rendered terribly in my element."}}
                    {"origin_server_ts":1676900162118,"event_id":"$RpvDMEFQYUMbe7dOvKCDG_xdjpDf8qKDKxbALwH-Wm0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"OK, that rendered terribly in my Element.","msgtype":"m.text","org.matrix.msc1767.text":"OK, that rendered terribly in my Element."},"m.relates_to":{"event_id":"$ey1EZJ-yPATxYhV1sDTnaCt4RF2Mr6yRST_KBgn1cYE","rel_type":"m.replace"},"body":" * OK, that rendered terribly in my Element.","msgtype":"m.text","org.matrix.msc1767.text":" * OK, that rendered terribly in my Element."}}
                    {"origin_server_ts":1676900173413,"event_id":"$L662MJPMgZPOFMpmeaRmqtlo4L46S4_XtdVAqrBNKy0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Anyway, very stupid idea :-)","msgtype":"m.text","org.matrix.msc1767.text":"Anyway, very stupid idea :-)"}}
                    {"origin_server_ts":1676919683892,"event_id":"$VlbqRMJdckiyQDfo_EHVZLt5rnINvzaGUOP34Foggis","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"argh","msgtype":"m.text"}}
                    {"origin_server_ts":1676981600771,"event_id":"$kTQdJCufW-otM_-PKNy07RC-5sVZJy9TBUVPxUv_oDo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"A little video of game of life. I'd have narrated it but my microphone is broken. https://peertube.functional.cafe/w/3y4B5BMVZWPmCM8ffWPcPD","msgtype":"m.text","org.matrix.msc1767.text":"A little video of game of life. I'd have narrated it but my microphone is broken. https://peertube.functional.cafe/w/3y4B5BMVZWPmCM8ffWPcPD"}}
                    {"origin_server_ts":1676983553985,"event_id":"$8RisqWUHjipskEzZAech9Ca1wc-4bnW0W3vLJT9lhBE","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$kTQdJCufW-otM_-PKNy07RC-5sVZJy9TBUVPxUv_oDo"}},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> A little video of game of life. I'd have narrated it but my microphone is broken. https://peertube.functional.cafe/w/3y4B5BMVZWPmCM8ffWPcPD\n\nnice, so this is sort of like a viewmat from J","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    A little video of game of life. I'd have narrated it but my microphone is broken. https://peertube.functional.cafe/w/3y4B5BMVZWPmCM8ffWPcPD<\/blockquote><\/mx-reply>nice, so this is sort of like a viewmat from J"}} {"origin_server_ts":1676984540418,"event_id":"$dCOFu2Rri5f9yY5RVULI4pTGWCOS0nK5wApIBQ9jIao","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I guess. It supports passing 2d arrays (greyscale), or 3d arrays with the minor dimension being size 3, which is drawn in colour. ","msgtype":"m.text"}} {"origin_server_ts":1676984560880,"event_id":"$bKZbEns-WVKsyA3wG7kqoy7TqytACATiNxxrEa6oEOk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I guess I have to read up on what J does, because I want to add more features. ","msgtype":"m.text"}} {"origin_server_ts":1676990300500,"event_id":"$b6g7K79up164l2R3VbMyH-JWv9ulgXf4ZZnbAGy6Q0w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"razetime: viewmat does seem to be very close to the canvas in KAP. However, the documentation isn't really clear to me, a non-j-programmer."},{"mimetype":"text/html","body":"
                    razetime<\/a>: viewmat does seem to be very close to the canvas in KAP. However, the documentation isn't really clear to me, a non-j-programmer."}],"format":"org.matrix.custom.html","body":"razetime: viewmat does seem to be very close to the canvas in KAP. However, the documentation isn't really clear to me, a non-j-programmer.","msgtype":"m.text","formatted_body":"razetime<\/a>: viewmat does seem to be very close to the canvas in KAP. However, the documentation isn't really clear to me, a non-j-programmer."}} {"origin_server_ts":1676990434075,"event_id":"$8x2dTRA7hOaxeN9luP6ohK5ZOErqljJJ36o0aXSqvD8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: I'm dumb... It really didn't hit me that having arithmetic on characters makes `unicode:fromCodepoints` and `unicode:toCodepoints` unnecessary."},{"mimetype":"text/html","body":"Marshall<\/a>: I'm dumb... It really didn't hit me that having arithmetic on characters makes unicode:fromCodepoints<\/code> and unicode:toCodepoints<\/code> unnecessary."}],"format":"org.matrix.custom.html","body":"Marshall: I'm dumb... It really didn't hit me that having arithmetic on characters makes `unicode:fromCodepoints` and `unicode:toCodepoints` unnecessary.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I'm dumb... It really didn't hit me that having arithmetic on characters makes unicode:fromCodepoints<\/code> and unicode:toCodepoints<\/code> unnecessary."}} {"origin_server_ts":1676990481960,"event_id":"$ApTth80Mg32uNaxFc5CSDOODy04wqGMY21RVGTQgN9w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I can just replace them with `(@\\u0-⍨)` and `(@\\u0+)`"},{"mimetype":"text/html","body":"I can just replace them with (@\\u0-⍨)<\/code> and (@\\u0+)<\/code>"}],"format":"org.matrix.custom.html","body":"I can just replace them with `(@\\u0-⍨)` and `(@\\u0+)`","msgtype":"m.text","formatted_body":"I can just replace them with (@\\u0-⍨)<\/code> and (@\\u0+)<\/code>"}} {"origin_server_ts":1676990707181,"event_id":"$3sp7cPocY6PRopvPqR-QBR8Nr_m9ArZir89THOH4W00","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[Yep](https://github.com/mlochbaum/BQN/commit/cf072f5).","msgtype":"m.text","formatted_body":"Yep<\/a>."}} {"origin_server_ts":1676991305997,"event_id":"$4ES8iAByxY1fvo-Zw4yphzrcD_nB__5RVwZl9IHfFjI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"hence my request for `@\\0` so that gets even shorter","msgtype":"m.text","formatted_body":"hence my request for @\\0<\/code> so that gets even shorter"}} {"origin_server_ts":1676992183662,"event_id":"$DudsaUpJofjy_9xknD0_ohPUnkfF78MVHIGsTWUlke8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: good point. Easily done. ","msgtype":"m.text","formatted_body":"dzaima<\/a>: good point. Easily done. "}} {"origin_server_ts":1677207541747,"event_id":"$Lvsy1TA1I0ZbOPbvXRnqx_ziwvVFXpHpwv6jT62jaDI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have a question:","msgtype":"m.text","org.matrix.msc1767.text":"I have a question:"}} {"origin_server_ts":1677207624412,"event_id":"$uSV5uB-14fTKhZF2KYiEOdL2WMynAOzp3t0I77AxeSA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"A \"left bound function\" is a function that is derived by specifying a left argument. This returns 12: `a ⇐ 2+ ◊ a 10`"},{"mimetype":"text/html","body":"A "left bound function" is a function that is derived by specifying a left argument. This returns 12: a ⇐ 2+ ◊ a 10<\/code>"}],"format":"org.matrix.custom.html","body":"A \"left bound function\" is a function that is derived by specifying a left argument. This returns 12: `a ⇐ 2+ ◊ a 10`","msgtype":"m.text","formatted_body":"A "left bound function" is a function that is derived by specifying a left argument. This returns 12: a ⇐ 2+ ◊ a 10<\/code>"}} {"origin_server_ts":1677207725110,"event_id":"$FlJjntMA0IhRzL6996J2lp5sJUWEoLD_lxJOauJofCw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Now, let's assume the following: `1+2+×`. I think it would make sense from first that this be parsed as: `(1+)(2+)(×)`."},{"mimetype":"text/html","body":"Now, let's assume the following: 1+2+×<\/code>. I think it would make sense from first that this be parsed as: (1+)(2+)(×)<\/code>."}],"format":"org.matrix.custom.html","body":"Now, let's assume the following: `1+2+×`. I think it would make sense from first that this be parsed as: `(1+)(2+)(×)`.","msgtype":"m.text","formatted_body":"Now, let's assume the following: 1+2+×<\/code>. I think it would make sense from first that this be parsed as: (1+)(2+)(×)<\/code>."}} {"origin_server_ts":1677207769313,"event_id":"$HcK6Id14HGwaMYL0lZOE_DTUh5ZASYgR5bWmCX9lDNQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, currently this is parsed very differently because of right-to-left binding.","msgtype":"m.text","org.matrix.msc1767.text":"However, currently this is parsed very differently because of right-to-left binding."}} {"origin_server_ts":1677207890582,"event_id":"$40OXXUVBu3fMKsvBRn30tRwc3BElZVmfVjCEsjvOaPE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It could be argued that right-to-left is technically more \"correct\", but it's never what the programmer wants.","msgtype":"m.text","org.matrix.msc1767.text":"It could be argued that right-to-left is technically more \"correct\", but it's never what the programmer wants."}} {"origin_server_ts":1677208225503,"event_id":"$Yxg21ftdRZ4fhoHBlLCbKJYJ50CBFs946GaCTFTM7IY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: how did dzaima/apl do this?"},{"mimetype":"text/html","body":"dzaima<\/a>: how did dzaima/apl do this?"}],"format":"org.matrix.custom.html","body":"dzaima: how did dzaima/apl do this?","msgtype":"m.text","formatted_body":"dzaima<\/a>: how did dzaima/apl do this?"}} {"origin_server_ts":1677230455003,"event_id":"$hLHBseRcT5paweq7OLBPfy7_b6UszPlFk1GfYxmVfLQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"dzaima/APL has fork trains, so that's just a fork with a fork right tine","msgtype":"m.text"}} {"origin_server_ts":1677230555998,"event_id":"$9m3EuRn-70lHOarXxEIbd1taE1Kap0CQB097Kw0HNvM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the only situation where `(A f)` trains come into play are when `A f` are the rightmost two things in an expression (i.e. `(+/1+2×)` → `+/2+(2×)`)","msgtype":"m.text","formatted_body":"the only situation where (A f)<\/code> trains come into play are when A f<\/code> are the rightmost two things in an expression (i.e. (+/1+2×)<\/code> → +/2+(2×)<\/code>)"}} {"origin_server_ts":1677230581968,"event_id":"$ZnXqvMuUpuEPwvZq8xnAzBb2u1LjCKIFMiiQ7ePgcLc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"the only situation where `(A f)` trains come into play are when `A f` are the rightmost two things in an expression (i.e. `(+/1+2×)` → `+/1+(2×)`)","msgtype":"m.text","formatted_body":"the only situation where (A f)<\/code> trains come into play are when A f<\/code> are the rightmost two things in an expression (i.e. (+/1+2×)<\/code> → +/1+(2×)<\/code>)"},"m.relates_to":{"event_id":"$9m3EuRn-70lHOarXxEIbd1taE1Kap0CQB097Kw0HNvM","rel_type":"m.replace"},"body":"* the only situation where `(A f)` trains come into play are when `A f` are the rightmost two things in an expression (i.e. `(+/1+2×)` → `+/1+(2×)`)","msgtype":"m.text"}} {"origin_server_ts":1677232491859,"event_id":"$T24opgDOQuCqX3dliqThmrLuWIWgEupO8KPjIO1uGo4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"In my case, I end up parsing that as: `+/1(+(2×))`"},{"mimetype":"text/html","body":"In my case, I end up parsing that as: +/1(+(2×))<\/code>"}],"format":"org.matrix.custom.html","body":"In my case, I end up parsing that as: `+/1(+(2×))`","msgtype":"m.text","formatted_body":"In my case, I end up parsing that as: +/1(+(2×))<\/code>"}} {"origin_server_ts":1677232619657,"event_id":"$Gj7w6eNEasNbyaao6PdbKWjHBErRyHaQXmOec0JE1U0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah you'd want to delay `(f g)` train binding to after an `A f` train could get its chance to bind","msgtype":"m.text","formatted_body":"yeah you'd want to delay (f g)<\/code> train binding to after an A f<\/code> train could get its chance to bind"}} {"origin_server_ts":1677232903382,"event_id":"$CrLHyR2NcW2L2LOAr86TAlzY5OyPpsNg4JmcQ9sKUBI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. I think I have a solution and I will try it out tonight.","msgtype":"m.text","org.matrix.msc1767.text":"Yes. I think I have a solution and I will try it out tonight."}} {"origin_server_ts":1677240256901,"event_id":"$tnTHqGO8Y82CKogbk6p9LY5FObeYExMqs2TW7BiNGFU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: fixed. I've uploaded a new version to the website. I think this behaviour is much more intuitive."},{"mimetype":"text/html","body":"dzaima<\/a>: fixed. I've uploaded a new version to the website. I think this behaviour is much more intuitive."}],"format":"org.matrix.custom.html","body":"dzaima: fixed. I've uploaded a new version to the website. I think this behaviour is much more intuitive.","msgtype":"m.text","formatted_body":"dzaima<\/a>: fixed. I've uploaded a new version to the website. I think this behaviour is much more intuitive."}} {"origin_server_ts":1677240284660,"event_id":"$0tWty32arwNe6eTuBzP9aAlPPohNPMO-uvHZ21cJiJ4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There. uploaded.","msgtype":"m.text","org.matrix.msc1767.text":"There. uploaded."}} {"origin_server_ts":1677241716787,"event_id":"$rysfSk9urgFvvT2g0yqI9R0D2DSdrNHsJhpBjVYLiw0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now the left argument binds directly to the subsequent function and not to the entire following train ","msgtype":"m.text"}} {"origin_server_ts":1677252286439,"event_id":"$p8TLgqHxRowmVQZnN0-e3MwoYRkGA6pC0ehy54sFuB8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I have now implemented `@\\0` as dzaima was suggesting. I also added `@\\s` for space, since both `@ ` and `@\\u20` is a bit ugly."},{"mimetype":"text/html","body":"I have now implemented @\\0<\/code> as dzaima<\/a> was suggesting. I also added @\\s<\/code> for space, since both @ <\/code> and @\\u20<\/code> is a bit ugly."}],"format":"org.matrix.custom.html","body":"I have now implemented `@\\0` as dzaima was suggesting. I also added `@\\s` for space, since both `@ ` and `@\\u20` is a bit ugly.","msgtype":"m.text","formatted_body":"I have now implemented @\\0<\/code> as dzaima<\/a> was suggesting. I also added @\\s<\/code> for space, since both @ <\/code> and @\\u20<\/code> is a bit ugly."}} {"origin_server_ts":1677252287691,"event_id":"$5-d47HPuqMEZGmMkj3Yrh2-2wiROGUt9oiBNKeDhs9s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#%40%5C0-%E2%8D%A8%20(%40%5Cs%E2%89%A0)%E2%8D%9B%E2%8A%82%20%22foo%20bar%20test%22","msgtype":"m.text","org.matrix.msc1767.text":"https://kapdemo.dhsdevelopments.com/clientweb2/#%40%5C0-%E2%8D%A8%20(%40%5Cs%E2%89%A0)%E2%8D%9B%E2%8A%82%20%22foo%20bar%20test%22"}} {"origin_server_ts":1677252362857,"event_id":"$PB7bFd8v2HRS0f8JEb1HV_mk_SsvYdeEP6zl5Kgmkn8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I guess the clearest variation is `@\\SPACE`, but that one doesn't work in the JS version."},{"mimetype":"text/html","body":"I guess the clearest variation is @\\SPACE<\/code>, but that one doesn't work in the JS version."}],"format":"org.matrix.custom.html","body":"I guess the clearest variation is `@\\SPACE`, but that one doesn't work in the JS version.","msgtype":"m.text","formatted_body":"I guess the clearest variation is @\\SPACE<\/code>, but that one doesn't work in the JS version."}} {"origin_server_ts":1677822796660,"event_id":"$t1_eld4LP_stDDhk2Jr2Y161hcpOnZ6wCqbRUFovBU8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have some ideas for a feature I've started working on, but I need someone to bounce some ideas off of","msgtype":"m.text","org.matrix.msc1767.text":"I have some ideas for a feature I've started working on, but I need someone to bounce some ideas off of"}} {"origin_server_ts":1677822859809,"event_id":"$9nVc_9E2RxMeky6DvRB6tHBjhSs6M7u8np5-uYjV8R0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Basically, the feature is called \"dynamic assignment\". For the purposes of this discussion, let's use the symbol `↤` to represent this."},{"mimetype":"text/html","body":"Basically, the feature is called "dynamic assignment". For the purposes of this discussion, let's use the symbol ↤<\/code> to represent this."}],"format":"org.matrix.custom.html","body":"Basically, the feature is called \"dynamic assignment\". For the purposes of this discussion, let's use the symbol `↤` to represent this.","msgtype":"m.text","formatted_body":"Basically, the feature is called "dynamic assignment". For the purposes of this discussion, let's use the symbol ↤<\/code> to represent this."}} {"origin_server_ts":1677822912797,"event_id":"$xxmncM338K9AfrAJmwHYU9PL7XYBuTa5Maxf8OtA_l4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"With dynamic assignment, the following will print `3`:\n```\na ← 1\nb ↤ a+1\na ← 2\nio:println a\n```"},{"mimetype":"text/html","body":"

                    With dynamic assignment, the following will print 3<\/code>:<\/p>\n

                    a ← 1\nb ↤ a+1\na ← 2\nio:println a\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"With dynamic assignment, the following will print `3`:\n```\na ← 1\nb ↤ a+1\na ← 2\nio:println a\n```","msgtype":"m.text","formatted_body":"

                    With dynamic assignment, the following will print 3<\/code>:<\/p>\n

                    a ← 1\nb ↤ a+1\na ← 2\nio:println a\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1677822949954,"event_id":"$LNrpRJ1MBNdtWb-yi0KiEQFU02OPAAGtEvir-r38SwE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The implementation takes advantage of the fact that the parser knows about free variables and can register callbacks on change of values.","msgtype":"m.text","org.matrix.msc1767.text":"The implementation takes advantage of the fact that the parser knows about free variables and can register callbacks on change of values."}}
                    {"origin_server_ts":1677822967250,"event_id":"$7uk-H7MIQOIU5Q1AlWRwE8ZXFPnNoccy-QEN2GIuuDM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"With dynamic assignment, the following will print `3`:\n\n```\na ← 1\nb ↤ a+1\na ← 2\nio:println b\n```"},{"mimetype":"text/html","body":"

                    With dynamic assignment, the following will print 3<\/code>:<\/p>\n

                    a ← 1\nb ↤ a+1\na ← 2\nio:println b\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"With dynamic assignment, the following will print `3`:\n\n```\na ← 1\nb ↤ a+1\na ← 2\nio:println b\n```","msgtype":"m.text","formatted_body":"

                    With dynamic assignment, the following will print 3<\/code>:<\/p>\n

                    a ← 1\nb ↤ a+1\na ← 2\nio:println b\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$xxmncM338K9AfrAJmwHYU9PL7XYBuTa5Maxf8OtA_l4","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * With dynamic assignment, the following will print `3`:\n\n```\na ← 1\nb ↤ a+1\na ← 2\nio:println b\n```"},{"mimetype":"text/html","body":" * 

                    With dynamic assignment, the following will print 3<\/code>:<\/p>\n

                    a ← 1\nb ↤ a+1\na ← 2\nio:println b\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":" * With dynamic assignment, the following will print `3`:\n\n```\na ← 1\nb ↤ a+1\na ← 2\nio:println b\n```","msgtype":"m.text","formatted_body":" * 

                    With dynamic assignment, the following will print 3<\/code>:<\/p>\n

                    a ← 1\nb ↤ a+1\na ← 2\nio:println b\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1677823009677,"event_id":"$rqQAPP1FQo6qWgO_idknROPO_67rZYmY3Eg5K81NK1g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"So it's not reevaluating `b` every time it's looked up. The system knows `b` depends on `a`, and will mark its value as stale so it's reevaluated the first time after `a` is changed."},{"mimetype":"text/html","body":"So it's not reevaluating b<\/code> every time it's looked up. The system knows b<\/code> depends on a<\/code>, and will mark its value as stale so it's reevaluated the first time after a<\/code> is changed."}],"format":"org.matrix.custom.html","body":"So it's not reevaluating `b` every time it's looked up. The system knows `b` depends on `a`, and will mark its value as stale so it's reevaluated the first time after `a` is changed.","msgtype":"m.text","formatted_body":"So it's not reevaluating b<\/code> every time it's looked up. The system knows b<\/code> depends on a<\/code>, and will mark its value as stale so it's reevaluated the first time after a<\/code> is changed."}}
                    {"origin_server_ts":1677823056162,"event_id":"$2ciCFtiRWHuOm30Vsrnq2zgf4nPQeq3ESRZE4Ew6Z-0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This works on bindings, and not symbols, so it handles local variables, closures, etc.","msgtype":"m.text","org.matrix.msc1767.text":"This works on bindings, and not symbols, so it handles local variables, closures, etc."}}
                    {"origin_server_ts":1677823082091,"event_id":"$pGdIHco3856J7yOp1PdLPQL9E_A5-FMEQ1sb_uRa7rY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What it doesn't do is handle dependencies via functions.","msgtype":"m.text","org.matrix.msc1767.text":"What it doesn't do is handle dependencies via functions."}}
                    {"origin_server_ts":1677823163204,"event_id":"$QzDo6CnICdZysh2wKl47XGK8hgktxqZTu3Q8NBrO09I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The purpose of this feature is to use it as a base for a kind of reporting tool, similar to how people build Excel sheets with various realtime-updated fields that depend on some data in different sheets. The idea here is that you can name a formula (i.e. a dynamically assigned value) so you have them all in the same place instead of embedding them inside cells like a speadsheet.","msgtype":"m.text","org.matrix.msc1767.text":"The purpose of this feature is to use it as a base for a kind of reporting tool, similar to how people build Excel sheets with various realtime-updated fields that depend on some data in different sheets. The idea here is that you can name a formula (i.e. a dynamically assigned value) so you have them all in the same place instead of embedding them inside cells like a speadsheet."}}
                    {"origin_server_ts":1677823180381,"event_id":"$neeR_sj72bsBjEBM4tCk1QjnVYmQHMYgKoJ2eE2f8Tk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Then these formulas can be displayed wherever you want using drag&drop.","msgtype":"m.text","org.matrix.msc1767.text":"Then these formulas can be displayed wherever you want using drag&drop."}}
                    {"origin_server_ts":1677823209111,"event_id":"$RQrzN1zbpI-Fx97dLHI-5XxllUvNkRsrDd2LTLcpBlM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's quite ambitious, so I would like some input on these ideas.","msgtype":"m.text","org.matrix.msc1767.text":"It's quite ambitious, so I would like some input on these ideas."}}
                    {"origin_server_ts":1677823268431,"event_id":"$ZHN9srSnd4wEADA65FpAM0aAOQ7zBb-KwsLokM62d4Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Although `b ↤ a+1` looks like an assignment, behind the scenes `a+1` is actually a closure, and there is some internal cleverness to track changes."},{"mimetype":"text/html","body":"Although b ↤ a+1<\/code> looks like an assignment, behind the scenes a+1<\/code> is actually a closure, and there is some internal cleverness to track changes."}],"format":"org.matrix.custom.html","body":"Although `b ↤ a+1` looks like an assignment, behind the scenes `a+1` is actually a closure, and there is some internal cleverness to track changes.","msgtype":"m.text","formatted_body":"Although b ↤ a+1<\/code> looks like an assignment, behind the scenes a+1<\/code> is actually a closure, and there is some internal cleverness to track changes."}}
                    {"origin_server_ts":1677825897634,"event_id":"$U6CeAKynkN9gY4Z1UyBmzpMYWNyrUo4kB0OHIG17Lzg","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$xxmncM338K9AfrAJmwHYU9PL7XYBuTa5Maxf8OtA_l4"}},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> With dynamic assignment, the following will print `3`:\n> \n> ```\n> a ← 1\n> b ↤ a+1\n> a ← 2\n> io:println b\n> ```\n\noh sort of like nial's `is`","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>

                    With dynamic assignment, the following will print 3<\/code>:<\/p>\n

                    a ← 1\nb ↤ a+1\na ← 2\nio:println b\n<\/code><\/pre>\n<\/blockquote><\/mx-reply>oh sort of like nial's is<\/code>"}}
                    {"origin_server_ts":1677828237035,"event_id":"$ZJjMvnB3xlbJ_-JovMGslndmh35UNF-zav5NvoATSp8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"razetime: Thanks. I was not aware of this, since I don't know anything about Nial."},{"mimetype":"text/html","body":"razetime<\/a>: Thanks. I was not aware of this, since I don't know anything about Nial."}],"format":"org.matrix.custom.html","body":"razetime: Thanks. I was not aware of this, since I don't know anything about Nial.","msgtype":"m.text","formatted_body":"razetime<\/a>: Thanks. I was not aware of this, since I don't know anything about Nial."}}
                    {"origin_server_ts":1677828412419,"event_id":"$vXRTHrga_VzGBjTsgocxKfhfc90MbjzoQ83qo1LKujM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Does nial have lexical scoping?","msgtype":"m.text","org.matrix.msc1767.text":"Does nial have lexical scoping?"}}
                    {"origin_server_ts":1677839731337,"event_id":"$CzZE0Vu-1D7dzjN45TYkZDGpGv8tJ8ydgIt29Oviyqc","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"yeah nial has lexical scoping","msgtype":"m.text"}}
                    {"origin_server_ts":1677849149305,"event_id":"$GD35D_yewvPFDJdApqytvT_AuxLPuf41Bl2fXIJKICE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"razetime: can an \"is\" declaration be lexically scoped?"},{"mimetype":"text/html","body":"razetime<\/a>: can an "is" declaration be lexically scoped?"}],"format":"org.matrix.custom.html","body":"razetime: can an \"is\" declaration be lexically scoped?","msgtype":"m.text","formatted_body":"razetime<\/a>: can an "is" declaration be lexically scoped?"}}
                    {"origin_server_ts":1677944705596,"event_id":"$0o92rsUUkFFx137jKcsTIZEGTWkHpS_AeGud9Ubzkns","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$GD35D_yewvPFDJdApqytvT_AuxLPuf41Bl2fXIJKICE"}},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> razetime: can an \"is\" declaration be lexically scoped?\n\ni don't know. it probably does but i'll have to test it later","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    razetime<\/a>: can an \"is\" declaration be lexically scoped?<\/blockquote><\/mx-reply>i don't know. it probably does but i'll have to test it later"}} {"origin_server_ts":1677944941342,"event_id":"$yerUIUGZyqmP5Rko89YWlzsOCYb7v1imAvdDW-S0h3U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I've actually implemented a first draft of the dynamic assignment","msgtype":"m.text","org.matrix.msc1767.text":"I've actually implemented a first draft of the dynamic assignment"}} {"origin_server_ts":1677944949957,"event_id":"$kPWdYhzzQOHReZHFzNsuoMemKoJ5SgxzZs_5GR9PL98","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What's a good syntax to use for it?","msgtype":"m.text","org.matrix.msc1767.text":"What's a good syntax to use for it?"}} {"origin_server_ts":1677945100892,"event_id":"$AraDrkltjSd7JuU62RHQWb6KrGw1Aix5-fp3GfgT8Mg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"also like k's views; oK:\n```\n b::a+1\nb::a+1\n a:2\n2\n b\n3\n```","msgtype":"m.text","formatted_body":"also like k's views; oK:
                      b::a+1\nb::a+1\n  a:2\n2\n  b\n3<\/code><\/pre>"}}
                    {"origin_server_ts":1677945112692,"event_id":"$cIBTeGLVPmf5zzbuoJ624SVah5vpXnclx7x7CJIVyeM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"also like k's views; oK:\n```\n  a:1\n1\n  b::a+1\nb::a+1\n  a:2\n2\n  b\n3\n```","msgtype":"m.text","formatted_body":"also like k's views; oK:
                      a:1\n1\n  b::a+1\nb::a+1\n  a:2\n2\n  b\n3<\/code><\/pre>"},"m.relates_to":{"event_id":"$AraDrkltjSd7JuU62RHQWb6KrGw1Aix5-fp3GfgT8Mg","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* also like k's views; oK:\n```\n  a:1\n1\n  b::a+1\nb::a+1\n  a:2\n2\n  b\n3\n```","msgtype":"m.text","formatted_body":"* also like k's views; oK:
                      a:1\n1\n  b::a+1\nb::a+1\n  a:2\n2\n  b\n3<\/code><\/pre>"}}
                    {"origin_server_ts":1677945204943,"event_id":"$zKR8LyWJ7BxkIxoK8fF4iq0cHexa6F0woJyVzZVN8os","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[appears](https://dzaima.github.io/paste/#0U1BItFJKy89X4oKQCgpJVlYKCQoGVgqJOkpJiUVKXECBBAMrGE9BIRGhlAvIAIqCBaCySTg5QIuSEquAFoFJkCSQAdYNoaEaoBwA#k) it also does the staleness thing","msgtype":"m.text","formatted_body":"appears<\/a> it also does the staleness thing"}}
                    {"origin_server_ts":1677945218165,"event_id":"$yJXbQCIjyUkkftLM5c18kTDRYpGgHKBESjdTikt5wnY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"([oK REPL fwiw](http://johnearnest.github.io/ok/index.html))","msgtype":"m.text","formatted_body":"(oK REPL fwiw<\/a>)"}}
                    {"origin_server_ts":1677945454760,"event_id":"$RfLWoCVejo8rP_yEI6Xj8w4PdUqMUc7d7nJq9ND4KmI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Here's an example of the behaviour in KAP:","msgtype":"m.text","org.matrix.msc1767.text":"Here's an example of the behaviour in KAP:"}}
                    {"origin_server_ts":1677945455587,"event_id":"$WQuHcsUERshJScX31xgiOKNeytutWYm-BeroGAtGLHs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#a%20%E2%86%90%201%0Ab%20dynamicequal%20a%2B1%0Aio%3Aprintln%20%22Before%20assignment%3A%20%22%2C%E2%8D%95b%0Aa%20%E2%86%90%202%0Aio%3Aprintln%20%22After%20assignment%3A%20%22%2C%E2%8D%95b","msgtype":"m.text","org.matrix.msc1767.text":"https://kapdemo.dhsdevelopments.com/clientweb2/#a%20%E2%86%90%201%0Ab%20dynamicequal%20a%2B1%0Aio%3Aprintln%20%22Before%20assignment%3A%20%22%2C%E2%8D%95b%0Aa%20%E2%86%90%202%0Aio%3Aprintln%20%22After%20assignment%3A%20%22%2C%E2%8D%95b"}}
                    {"origin_server_ts":1677945493039,"event_id":"$R47lK96KWLbBL0QRKGDjh7B8djn6SQDPc97FA-C1EqQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Right now you use `dynamicequal` to perform the assignment. Obviously not the permanent syntax."},{"mimetype":"text/html","body":"Right now you use dynamicequal<\/code> to perform the assignment. Obviously not the permanent syntax."}],"format":"org.matrix.custom.html","body":"Right now you use `dynamicequal` to perform the assignment. Obviously not the permanent syntax.","msgtype":"m.text","formatted_body":"Right now you use dynamicequal<\/code> to perform the assignment. Obviously not the permanent syntax."}}
                    {"origin_server_ts":1677945561173,"event_id":"$deuI_o3WUZ6lXadNqUzMDvXGG-Mf3QfOfbHvJC1fSk4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There is a mess if you try to do a regular assignment to a variable that used to be dynamic.","msgtype":"m.text","org.matrix.msc1767.text":"There is a mess if you try to do a regular assignment to a variable that used to be dynamic."}}
                    {"origin_server_ts":1677945589488,"event_id":"$X_CVTNVQUYiE5E5bg0oRqTaNFOBwcmoYKYmZ1PG0VNA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It doesn't clean up the change listeners so once you do that you get a lot of weird errors.","msgtype":"m.text","org.matrix.msc1767.text":"It doesn't clean up the change listeners so once you do that you get a lot of weird errors."}}
                    {"state_key":"@Kooda:elynx.fr","origin_server_ts":1678016493498,"event_id":"$mFebezqaEM90LoNKUSzqrS3UpZM1FnL-RpBBtrRthNw","sender":"@Kooda:elynx.fr","user_id":"@Kooda:elynx.fr","prev_content":{"avatar_url":"mxc://elynx.fr/fxSHqVFLAHpFVChqsvHZxFzX","displayname":"Kooda","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://elynx.fr/EIcRYgVMfgOYulQeMeVVGtUV","displayname":"Kooda","membership":"join"},"replaces_state":"$MAc-HWoasFVChEB967wcun4_yWarYG6K4h3TmCj3e1Q"}
                    {"origin_server_ts":1678281975885,"event_id":"$hqApjmJHg0orX4XjCLimNEX0uKiHSOHBUXZcPh4BCKE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, now it works.","msgtype":"m.text","org.matrix.msc1767.text":"OK, now it works."}}
                    {"origin_server_ts":1678281976624,"event_id":"$72_95Wmys-nl3qGVoAsMbXTb5KbKYcTiqxbqEjl9IQI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#a%20%E2%86%90%201%0Ab%20dynamicequal%20a%2B10%0Ac%20dynamicequal%20b%2B100%0Aio%3Aprintln%20c%0Aa%E2%86%902%0Aio%3Aprintln%20c","msgtype":"m.text","org.matrix.msc1767.text":"https://kapdemo.dhsdevelopments.com/clientweb2/#a%20%E2%86%90%201%0Ab%20dynamicequal%20a%2B10%0Ac%20dynamicequal%20b%2B100%0Aio%3Aprintln%20c%0Aa%E2%86%902%0Aio%3Aprintln%20c"}}
                    {"origin_server_ts":1678281988607,"event_id":"$jT8SgjKRX89vf_oHG2IZoJAu1InLEiLg8dSNzlHfOHY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I now have another design question:","msgtype":"m.text","org.matrix.msc1767.text":"I now have another design question:"}}
                    {"origin_server_ts":1678282026834,"event_id":"$gk4F7UIL5CPKARmjI1veoh8T2BtHj6oMuqoV0t-ZJ9c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In the system I intend to build: A UI application allowing you to show the dynamic variables and providing a UI to edit them while the results are displayed in a window.","msgtype":"m.text","org.matrix.msc1767.text":"In the system I intend to build: A UI application allowing you to show the dynamic variables and providing a UI to edit them while the results are displayed in a window."}}
                    {"origin_server_ts":1678282053936,"event_id":"$6vIDy1JENhM5Gq6ULAhiTdS4sELXXujJpmMmZ-VTr_8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The source code for dynamic variables needs to be displayed. I have this idea to actually store them in the runtime instead of in a separate source file.","msgtype":"m.text","org.matrix.msc1767.text":"The source code for dynamic variables needs to be displayed. I have this idea to actually store them in the runtime instead of in a separate source file."}}
                    {"origin_server_ts":1678282059526,"event_id":"$U7WQNGMagfnaXmbP9JG2aOT9EbrYnlXN0Bpqk-4PI1g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In this idea I have two options:","msgtype":"m.text","org.matrix.msc1767.text":"In this idea I have two options:"}}
                    {"origin_server_ts":1678282115004,"event_id":"$2U8THyPGHjn0mG4nCnLLBlCwWchnX8chEzxdtEaIKrc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"1: Allow some metadata to be stored together with a variable, something like `foo←[\"metadata\"] 1234` this would store `\"metadata\"` together with the value 1234."},{"mimetype":"text/html","body":"1: Allow some metadata to be stored together with a variable, something like foo←["metadata"] 1234<\/code> this would store "metadata"<\/code> together with the value 1234."}],"format":"org.matrix.custom.html","body":"1: Allow some metadata to be stored together with a variable, something like `foo←[\"metadata\"] 1234` this would store `\"metadata\"` together with the value 1234.","msgtype":"m.text","formatted_body":"1: Allow some metadata to be stored together with a variable, something like foo←["metadata"] 1234<\/code> this would store "metadata"<\/code> together with the value 1234."}}
                    {"origin_server_ts":1678282131673,"event_id":"$Zt7V5uYZILGgMI_6hDWcKN0858_bvBu8pyEexdmo5NE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You'd have some way to access said metadata, which would among other things contain the source.","msgtype":"m.text","org.matrix.msc1767.text":"You'd have some way to access said metadata, which would among other things contain the source."}}
                    {"origin_server_ts":1678282134849,"event_id":"$dlyGnte32RcPrV9J_QuQcU6J4w0Tf4cWqvAJMRbNGQk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Another idea:","msgtype":"m.text","org.matrix.msc1767.text":"Another idea:"}}
                    {"origin_server_ts":1678282171899,"event_id":"$y__2YYnhD9MXW0TwLTZoQnOo8wsjmD4KuhwS8zMK5p0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"2: Store metadata together with a value. That way the dynamic value itself could be stored together with the source code that generated it. I already have something like this for axis labels:","msgtype":"m.text","org.matrix.msc1767.text":"2: Store metadata together with a value. That way the dynamic value itself could be stored together with the source code that generated it. I already have something like this for axis labels:"}}
                    {"origin_server_ts":1678282222568,"event_id":"$MA7h4s7KF41dlfIexjQFLDMBKzyVJwW0rd02FzUOGNM","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1678282250186,"event_id":"$qzdA0KcrAf5AbrDG79cQfLHnRQWferb8anVYWnl5M78","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$MA7h4s7KF41dlfIexjQFLDMBKzyVJwW0rd02FzUOGNM","type":"m.room.redaction","content":{"redacts":"$MA7h4s7KF41dlfIexjQFLDMBKzyVJwW0rd02FzUOGNM"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                    {"origin_server_ts":1678282250186,"event_id":"$qzdA0KcrAf5AbrDG79cQfLHnRQWferb8anVYWnl5M78","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$MA7h4s7KF41dlfIexjQFLDMBKzyVJwW0rd02FzUOGNM","type":"m.room.redaction","content":{"redacts":"$MA7h4s7KF41dlfIexjQFLDMBKzyVJwW0rd02FzUOGNM"}}
                    {"origin_server_ts":1678282288624,"event_id":"$yClBonPNIWKX9HcPqXv1VPn3Y5pzGPrd1ObOQjRBI-4","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1678282293282,"event_id":"$8oM0fXfU75RaZ50mEEArSH6HjmUawpwcKaZ7ZbGR2v8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$yClBonPNIWKX9HcPqXv1VPn3Y5pzGPrd1ObOQjRBI-4","type":"m.room.redaction","content":{"redacts":"$yClBonPNIWKX9HcPqXv1VPn3Y5pzGPrd1ObOQjRBI-4"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                    {"origin_server_ts":1678282293282,"event_id":"$8oM0fXfU75RaZ50mEEArSH6HjmUawpwcKaZ7ZbGR2v8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$yClBonPNIWKX9HcPqXv1VPn3Y5pzGPrd1ObOQjRBI-4","type":"m.room.redaction","content":{"redacts":"$yClBonPNIWKX9HcPqXv1VPn3Y5pzGPrd1ObOQjRBI-4"}}
                    {"origin_server_ts":1678282316090,"event_id":"$w_hTsb1uv2ua6c3X116utSBqzmf5CsZuylUJ6jXo-SM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#labelled%20%E2%86%90%20%22one%22%20%22two%22%20%22three%22%20labels%5B0%5D%20%22foo%22%20%22bar%22%20labels%203%202%20%E2%8D%B4%20%E2%8D%B36%0Aio%3Aprintln%20labelled%0Aio%3Aprintln%20%E2%8D%B4labelled","msgtype":"m.text","org.matrix.msc1767.text":"https://kapdemo.dhsdevelopments.com/clientweb2/#labelled%20%E2%86%90%20%22one%22%20%22two%22%20%22three%22%20labels%5B0%5D%20%22foo%22%20%22bar%22%20labels%203%202%20%E2%8D%B4%20%E2%8D%B36%0Aio%3Aprintln%20labelled%0Aio%3Aprintln%20%E2%8D%B4labelled"}}
                    {"origin_server_ts":1678282322990,"event_id":"$PxTcj1_oe7lWXhBVMm7CBAlxGYOxkbY4CPjqCVcRZuU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I could just make this generic.","msgtype":"m.text","org.matrix.msc1767.text":"I could just make this generic."}}
                    {"origin_server_ts":1678282327150,"event_id":"$MGy-FzuZCtR8xdOllC55NfyJpT9PhvFoNTNchqMl3XQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What is the better approach?","msgtype":"m.text","org.matrix.msc1767.text":"What is the better approach?"}}
                    {"origin_server_ts":1680622176062,"event_id":"$McT0CEhjtCVyRzik2NRq9ZHCfSs2j60pGyZCNoITgtU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Here's a monster commit that introduces bigint support: https://codeberg.org/loke/array/commit/3ea29681414436cca245b0f8540513c5e09aee80","msgtype":"m.text","org.matrix.msc1767.text":"Here's a monster commit that introduces bigint support: https://codeberg.org/loke/array/commit/3ea29681414436cca245b0f8540513c5e09aee80"}}
                    {"origin_server_ts":1681249715962,"event_id":"$cVAiaSyUOTQDWIQknCE-pnWhGMSsfq3fJK6S-wIBk_w","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"👀","msgtype":"m.text"}}
                    {"origin_server_ts":1681280767069,"event_id":"$wtN8--0KzLQ5xV9qknSB7wpB4IeIAn9qB8tol9lmXVQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Hello Tortus :-)"},{"mimetype":"text/html","body":"Hello Tortus<\/a> :-)"}],"format":"org.matrix.custom.html","body":"Hello Tortus :-)","msgtype":"m.text","formatted_body":"Hello Tortus<\/a> :-)"}}
                    {"state_key":"","origin_server_ts":1681283392029,"event_id":"$1I68PWbv1mcnoyE6iFxgWev76VlDspvMB--qMamXoQQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","prev_content":{"topic":"KAP programming language. https://github.com/lokedhs/array"},"type":"m.room.topic","content":{"org.matrix.msc3765.topic":[{"mimetype":"text/plain","body":"KAP programming language. https://codeberg.org/loke/array"}],"topic":"KAP programming language. https://codeberg.org/loke/array"},"replaces_state":"$CmSqab28i3t8HEsjw_G-gDVxc4DFKy4MUyolXNcpb4k"}
                    {"origin_server_ts":1681399145635,"event_id":"$AxR9G3iS1ldPDxvnFe8c-fYrJzCrj5YGdpc3xzcj3cg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Example here","msgtype":"m.text"}}
                    {"origin_server_ts":1681399187649,"event_id":"$SUpRXmd5nKeVzfHA1qsh4w0h065SoQjKWv4_ykqbS38","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think I need some function to retrieve the numenator and denominator of a rational. https://kapdemo.dhsdevelopments.com/clientweb2/#%22Num%22%20%222%2Fx%22%20labels%20%2C%E2%88%98(%E2%8D%AA2%C3%B7)1%2B%E2%8D%B310","msgtype":"m.text"}}
                    {"origin_server_ts":1681399394202,"event_id":"$C-NQDuHOQM7I9RELCy4JOTY2JK_pRVUjfC8uFQieqOM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`1∨rat` is the denominator, I believe? aplcart lists `((,÷∨)∘1)Ns` as numerator and denominator.","msgtype":"m.text","formatted_body":"1∨rat<\/code> is the denominator, I believe? aplcart lists ((,÷∨)∘1)Ns<\/code> as numerator and denominator."}}
                    {"origin_server_ts":1681399481331,"event_id":"$deUJfIrf0JR83v8FRS1xgnsB73JL_oUxaYKVbz_bX_Y","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No, `÷1∨rat`.","msgtype":"m.text","formatted_body":"No, ÷1∨rat<\/code>."}}
                    {"origin_server_ts":1681399620450,"event_id":"$wsOs-9YkYKTQlmi_I6ejor4Hz7fEYTSouX9pUcjQG-c","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`1∧rat` is the numerator, and I think the rule of `∧×∨` being the product is absolute so there shouldn't be any problem with signedness. Numerator is signed, denominator is positive.","msgtype":"m.text","formatted_body":"1∧rat<\/code> is the numerator, and I think the rule of ∧×∨<\/code> being the product is absolute so there shouldn't be any problem with signedness. Numerator is signed, denominator is positive."}}
                    {"origin_server_ts":1681399655972,"event_id":"$bhWDaMo2FXtmFw2P_gxc5-XkIHCEgZYKA2ssgB7iwko","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"wait, that's gcm","msgtype":"m.text"}}
                    {"origin_server_ts":1681399780905,"event_id":"$cNiwv6IYTo8TOAVKjE4HV4khbz2nUeon58Fhe2iUzWU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yes. To divide 1 it has to be 1 over something and we want the largest possible one that divides the fraction evenly.","msgtype":"m.text","formatted_body":"Yes. To divide 1 it has to be 1 over something and we want the largest possible one that divides the fraction evenly."}}
                    {"origin_server_ts":1681399967688,"event_id":"$rPgmTh8HCqtdNYBiHN3qQimgfyJIgG6Qr9RD9zsH4_A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh right","msgtype":"m.text"}}
                    {"origin_server_ts":1681399989956,"event_id":"$QU8uMlFxPM0D0N1bp4e5plvqL1NVx4xU6A1LkS4UJk8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I even implemented that but I never thought about how it can be used","msgtype":"m.text"}}
                    {"origin_server_ts":1681400108701,"event_id":"$xDGieKvi56ntFjaCrCVHX0V82fXWi3GIDhwf68hdGgw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I didn't come up with it. I don't think it's obvious at all.","msgtype":"m.text","formatted_body":"I didn't come up with it. I don't think it's obvious at all."}}
                    {"origin_server_ts":1681401722529,"event_id":"$6NtKCS0QmD3MgJKrKQmYHYb0v2CUquOWXC_hF03Sq8U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That means I have to implement a rational gcd","msgtype":"m.text"}}
                    {"origin_server_ts":1681401776575,"event_id":"$-0qQjilNEPbbwvhJA_nIT-9Gm6YdPRfOjmoHenGcDxg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Do you happen to know of an effective algorithm for it?","msgtype":"m.text"}}
                    {"origin_server_ts":1681402045708,"event_id":"$pAv14LlW7kGqtS5hbM-YzEh4ruS6gBFeAXPuH75-p20","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think it's not too hard to get from integer gcd but I'm not sure how. J would have code for it.","msgtype":"m.text","formatted_body":"I think it's not too hard to get from integer gcd but I'm not sure how. J would have code for it."}}
                    {"origin_server_ts":1681490985322,"event_id":"$KvgTV5XnBUQdvfnvIyt2lTNrieJMp7upcN606c70nFw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I did some updates to the documentation. I really should write a lot more, but at least rationals are mentioned: https://kapdemo.dhsdevelopments.com/kap-comparison.html#_numbers","msgtype":"m.text","org.matrix.msc1767.text":"I did some updates to the documentation. I really should write a lot more, but at least rationals are mentioned: https://kapdemo.dhsdevelopments.com/kap-comparison.html#_numbers"}}
                    {"origin_server_ts":1681491001985,"event_id":"$QgcASUC7T1ryk4byJUPHaCphk09GXpzoWoqgqtcCUZY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And I also summarised what tacit looks like: https://kapdemo.dhsdevelopments.com/kap-comparison.html#_tacit_programming","msgtype":"m.text","org.matrix.msc1767.text":"And I also summarised what tacit looks like: https://kapdemo.dhsdevelopments.com/kap-comparison.html#_tacit_programming"}}
                    {"origin_server_ts":1681491826771,"event_id":"$XHoxho3ockidmBq11HU8gpB_hSBhiVzkqqpBYF7XDl0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The thing about `⌊` or `⌈` is confusing. The result is an exact integer, right? I wouldn't really describe it as a conversion. Maybe there should be a way to convert a float to a binary fraction, but given that it would give an unexpected result on something like `÷3.0` maybe not.","msgtype":"m.text","formatted_body":"The thing about ⌊<\/code> or ⌈<\/code> is confusing. The result is an exact integer, right? I wouldn't really describe it as a conversion. Maybe there should be a way to convert a float to a binary fraction, but given that it would give an unexpected result on something like ÷3.0<\/code> maybe not."}}
                    {"origin_server_ts":1681491997378,"event_id":"$4GPdQRQj3qaGRxjUrf2TPaWnmIDpax7tXuwS8NnD-90","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: It is possible. Common Lisp has `RATIONAL` and `RATIONALIZE` which does this. The former returns the rational that is closest to the floating point argument, and the latter is more lenient to give a \"better\" rational."},{"mimetype":"text/html","body":"Marshall<\/a>: It is possible. Common Lisp has RATIONAL<\/code> and RATIONALIZE<\/code> which does this. The former returns the rational that is closest to the floating point argument, and the latter is more lenient to give a "better" rational."}],"format":"org.matrix.custom.html","body":"Marshall: It is possible. Common Lisp has `RATIONAL` and `RATIONALIZE` which does this. The former returns the rational that is closest to the floating point argument, and the latter is more lenient to give a \"better\" rational.","msgtype":"m.text","formatted_body":"Marshall<\/a>: It is possible. Common Lisp has RATIONAL<\/code> and RATIONALIZE<\/code> which does this. The former returns the rational that is closest to the floating point argument, and the latter is more lenient to give a "better" rational."}}
                    {"origin_server_ts":1681492016190,"event_id":"$20UOkX4shl9yYZQqpm-vFz1WOJnpkNUZZSEaJxIVtRo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"So `(RATIONALIZE 0.33333333333333333)` returns `1/3`."},{"mimetype":"text/html","body":"So (RATIONALIZE 0.33333333333333333)<\/code> returns 1/3<\/code>."}],"format":"org.matrix.custom.html","body":"So `(RATIONALIZE 0.33333333333333333)` returns `1/3`.","msgtype":"m.text","formatted_body":"So (RATIONALIZE 0.33333333333333333)<\/code> returns 1/3<\/code>."}}
                    {"origin_server_ts":1681492034173,"event_id":"$esbGfR4IlBqDI5EDX2q2wjWjLrpgi77xUnrkrk4x_5g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I do want to implement this, but I need to figure out the algorithm SBCL uses and use it :-)","msgtype":"m.text","org.matrix.msc1767.text":"I do want to implement this, but I need to figure out the algorithm SBCL uses and use it :-)"}}
                    {"origin_server_ts":1681492044819,"event_id":"$g_jCu8Y_MNLkZy1Tl1zkb-e9EqNVWATEKcSRA8fOVD8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"That's what J `x:` does too.","msgtype":"m.text","formatted_body":"That's what J x:<\/code> does too."}}
                    {"origin_server_ts":1681492075415,"event_id":"$o6v9Et6ZXCfCyXiH36jhVRHObAWKIg1MROQ7n3b417s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: But yes, `⌊` and `⌈` returns an exact integer (possibly bigint if it doesn't fit in 64 bits)"},{"mimetype":"text/html","body":"Marshall<\/a>: But yes, ⌊<\/code> and ⌈<\/code> returns an exact integer (possibly bigint if it doesn't fit in 64 bits)"}],"format":"org.matrix.custom.html","body":"Marshall: But yes, `⌊` and `⌈` returns an exact integer (possibly bigint if it doesn't fit in 64 bits)","msgtype":"m.text","formatted_body":"Marshall<\/a>: But yes, ⌊<\/code> and ⌈<\/code> returns an exact integer (possibly bigint if it doesn't fit in 64 bits)"}}
                    {"origin_server_ts":1681492145159,"event_id":"$JfOX9KgyjbdaX5rIBGDsumWo2fC2IBW_iVhMNt55ZjI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"J's code is often very difficult to follow, although it's much better since Henry worked on it.","msgtype":"m.text","org.matrix.msc1767.text":"J's code is often very difficult to follow, although it's much better since Henry worked on it."}}
                    {"origin_server_ts":1681492167022,"event_id":"$yB7UPvRCNl2X98RrIVR5f53N9ioGIQfd-9rdU3yvuYA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"> the rational that is closest to the floating point argument\nIt can't be this exactly; all finite floating point values are rational. Has to be some metric on the denominator.","msgtype":"m.text","formatted_body":"
                    the rational that is closest to the floating point argument<\/blockquote>It can't be this exactly; all finite floating point values are rational. Has to be some metric on the denominator."}} {"origin_server_ts":1681492194882,"event_id":"$ymOJmP6duvpryoohFahYQNH6nwbNgmOXYrNFdykGlnw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Wait, I got the two names backwards.","msgtype":"m.text","formatted_body":"Wait, I got the two names backwards."}} {"origin_server_ts":1681492201887,"event_id":"$L91aDW5LwWnoapKjqUCNxxcgRmVwAPGtTy-gOr6TKSc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: none for `RATIONAL` I think..."},{"mimetype":"text/html","body":"Marshall<\/a>: none for RATIONAL<\/code> I think..."}],"format":"org.matrix.custom.html","body":"Marshall: none for `RATIONAL` I think...","msgtype":"m.text","formatted_body":"Marshall<\/a>: none for RATIONAL<\/code> I think..."}} {"origin_server_ts":1681492226902,"event_id":"$0epa0l2O1bkjqSy7Is5F8ssA8TK8tbK357fWeG5ivJ4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I added a paragraph on left-bound functions as well: https://kapdemo.dhsdevelopments.com/kap-comparison.html#_left_bound_functions","msgtype":"m.text","org.matrix.msc1767.text":"I added a paragraph on left-bound functions as well: https://kapdemo.dhsdevelopments.com/kap-comparison.html#_left_bound_functions"}} {"origin_server_ts":1681492256183,"event_id":"$cDy_0bOtiYf1kDrGPsmreUsBnU-trffbmRTc7wRx_q0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"`(rational pi)` returns `884279719003555/281474976710656`"},{"mimetype":"text/html","body":"(rational pi)<\/code> returns 884279719003555/281474976710656<\/code>"}],"format":"org.matrix.custom.html","body":"`(rational pi)` returns `884279719003555/281474976710656`","msgtype":"m.text","formatted_body":"(rational pi)<\/code> returns 884279719003555/281474976710656<\/code>"}} {"origin_server_ts":1681492273207,"event_id":"$FYPvDcGos76cED8Y8wKR-3k3_OA94Gl807MXArhHYnk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"`(rationalize pi)` returns `245850922/78256779`"},{"mimetype":"text/html","body":"(rationalize pi)<\/code> returns 245850922/78256779<\/code>"}],"format":"org.matrix.custom.html","body":"`(rationalize pi)` returns `245850922/78256779`","msgtype":"m.text","formatted_body":"(rationalize pi)<\/code> returns 245850922/78256779<\/code>"}} {"origin_server_ts":1681492318602,"event_id":"$xf9Y-L-_0-n4d4sq7FRnfZB_pTxLQwOxjcz04QpH080","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"```\n* (rational 0.33333333333333333333333333333333d0)\n6004799503160661/18014398509481984\n```"},{"mimetype":"text/html","body":"
                    * (rational 0.33333333333333333333333333333333d0)\n6004799503160661/18014398509481984\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"```\n* (rational 0.33333333333333333333333333333333d0)\n6004799503160661/18014398509481984\n```","msgtype":"m.text","formatted_body":"
                    * (rational 0.33333333333333333333333333333333d0)\n6004799503160661/18014398509481984\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1681492320092,"event_id":"$5vkW3w7W9uJyqXICx1lCwvrHVhosQ2jAxcMHIfJC6Jw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And:","msgtype":"m.text","org.matrix.msc1767.text":"And:"}}
                    {"origin_server_ts":1681492326075,"event_id":"$FNfE-ISD1cB80T5bUITRES4uh4whevTQMx0Tmn83w9I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"```\n* (rationalize 0.33333333333333333333333333333333d0)\n1/3\n```"},{"mimetype":"text/html","body":"
                    * (rationalize 0.33333333333333333333333333333333d0)\n1/3\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"```\n* (rationalize 0.33333333333333333333333333333333d0)\n1/3\n```","msgtype":"m.text","formatted_body":"
                    * (rationalize 0.33333333333333333333333333333333d0)\n1/3\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1681492388898,"event_id":"$1W5R9KQK5kg7iK5IbBfoqIMUfo5fc9IJv92xMhb-fcA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> \"If number is a float, rational returns a rational that is mathematically equal in value to the float. rationalize returns a rational that approximates the float to the accuracy of the underlying floating-point representation. \""},{"mimetype":"text/html","body":"
                    \n

                    "If number is a float, rational returns a rational that is mathematically equal in value to the float. rationalize returns a rational that approximates the float to the accuracy of the underlying floating-point representation. "<\/p>\n<\/blockquote>\n"}],"format":"org.matrix.custom.html","body":"> \"If number is a float, rational returns a rational that is mathematically equal in value to the float. rationalize returns a rational that approximates the float to the accuracy of the underlying floating-point representation. \"","msgtype":"m.text","formatted_body":"

                    \n

                    "If number is a float, rational returns a rational that is mathematically equal in value to the float. rationalize returns a rational that approximates the float to the accuracy of the underlying floating-point representation. "<\/p>\n<\/blockquote>\n"}} {"origin_server_ts":1681492392872,"event_id":"$RDhyaEXVLW_Rxs7NEkq0ybKmHONOkVwL7ABCTWGjwoQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_rationalcm_rationalize.html","msgtype":"m.text","org.matrix.msc1767.text":"http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_rationalcm_rationalize.html"}} {"origin_server_ts":1681492433052,"event_id":"$514sOd4zD1cLhvwIWbTDePoi6WvYMjmJ42vV5P2wKEc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Is `pi` a single-precision float then? That's not a big denominator.","msgtype":"m.text","formatted_body":"Is pi<\/code> a single-precision float then? That's not a big denominator."}} {"origin_server_ts":1681492434605,"event_id":"$-f9kBRLe6o7opNibG_VWVCeswFDWpvaGb5idY6LekjY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"In practice, I don't think I've ever used `RATIONAL`. I've used `RATIONALIZE` a lot though."},{"mimetype":"text/html","body":"In practice, I don't think I've ever used RATIONAL<\/code>. I've used RATIONALIZE<\/code> a lot though."}],"format":"org.matrix.custom.html","body":"In practice, I don't think I've ever used `RATIONAL`. I've used `RATIONALIZE` a lot though.","msgtype":"m.text","formatted_body":"In practice, I don't think I've ever used RATIONAL<\/code>. I've used RATIONALIZE<\/code> a lot though."}} {"origin_server_ts":1681492463045,"event_id":"$ZuQw3uT8dB_FK0Rrer3PHKXeRr7m3EU78c0RBQ_Sj80","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"`(type-of pi)` returns `DOUBLE-FLOAT`"},{"mimetype":"text/html","body":"(type-of pi)<\/code> returns DOUBLE-FLOAT<\/code>"}],"format":"org.matrix.custom.html","body":"`(type-of pi)` returns `DOUBLE-FLOAT`","msgtype":"m.text","formatted_body":"(type-of pi)<\/code> returns DOUBLE-FLOAT<\/code>"}} {"origin_server_ts":1681492501478,"event_id":"$D0N2bxq0Pp_zjvHvwpw-WSfgkt3synlAi9lNPUodhOE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"It shows as `3.141592653589793d0`"},{"mimetype":"text/html","body":"It shows as 3.141592653589793d0<\/code>"}],"format":"org.matrix.custom.html","body":"It shows as `3.141592653589793d0`","msgtype":"m.text","formatted_body":"It shows as 3.141592653589793d0<\/code>"}} {"origin_server_ts":1681492560336,"event_id":"$ekR04h44v7y8okmK80l9-vXVH9MoVzr-XKsAmUdxnWU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So I do expect that fraction to accurately represent a double precision pi. If not, SBCL has a bug :-)","msgtype":"m.text","org.matrix.msc1767.text":"So I do expect that fraction to accurately represent a double precision pi. If not, SBCL has a bug :-)"}} {"origin_server_ts":1681492577068,"event_id":"$QJ-UKwLmnqgZx7lorOZfnZPB6jWGyQCrc0c6b1Vq-qA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"J's `x:1p1` returns `1285290289249r409120605684`, but this is apparently a _worse_ representation.","msgtype":"m.text","formatted_body":"J's x:1p1<\/code> returns 1285290289249r409120605684<\/code>, but this is apparently a worse<\/i> representation."}} {"origin_server_ts":1681492635422,"event_id":"$DYjyX1Mm2TlyN3F5ZuwdPGG8geYOpjr08is47nc82Sw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"But J has only one conversion function, no? So I expect it to make a tradeoff and be more like `rationalize` than `rational`."},{"mimetype":"text/html","body":"But J has only one conversion function, no? So I expect it to make a tradeoff and be more like rationalize<\/code> than rational<\/code>."}],"format":"org.matrix.custom.html","body":"But J has only one conversion function, no? So I expect it to make a tradeoff and be more like `rationalize` than `rational`.","msgtype":"m.text","formatted_body":"But J has only one conversion function, no? So I expect it to make a tradeoff and be more like rationalize<\/code> than rational<\/code>."}} {"origin_server_ts":1681492675062,"event_id":"$Zk4H9cVk9t8hd2NX9T1RWADXfh_cCXbMwn8a6nFZu1k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I mean, implementing `rational` would be easy, no? But I'm not sure about the approach to make it actually useful (i.e. the more lax one)"},{"mimetype":"text/html","body":"I mean, implementing rational<\/code> would be easy, no? But I'm not sure about the approach to make it actually useful (i.e. the more lax one)"}],"format":"org.matrix.custom.html","body":"I mean, implementing `rational` would be easy, no? But I'm not sure about the approach to make it actually useful (i.e. the more lax one)","msgtype":"m.text","formatted_body":"I mean, implementing rational<\/code> would be easy, no? But I'm not sure about the approach to make it actually useful (i.e. the more lax one)"}} {"origin_server_ts":1681492777587,"event_id":"$Rcim8cr-bxa97P5ou1eot1tV6jiR8l209juh4xLrhZE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"But J's result has an error of `1.48994e_13` versus Lisp's rationalize with `4.42853e_17`. Worse in both ways.","msgtype":"m.text","formatted_body":"But J's result has an error of 1.48994e_13<\/code> versus Lisp's rationalize with 4.42853e_17<\/code>. Worse in both ways."}} {"origin_server_ts":1681492794016,"event_id":"$Os5D9Uu3ePkUKp041-6sFiFNX-UD9aXn3nhEXWXwsJI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh, I see.","msgtype":"m.text","org.matrix.msc1767.text":"Oh, I see."}} {"origin_server_ts":1681492818617,"event_id":"$qSGvvsc_qJUkXxJ6WC4EqJCZHWJmrteL07RwaROm5IU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Perhaps they want to be even more lax because it sometimes makes \"nicer\" rational representations?","msgtype":"m.text","org.matrix.msc1767.text":"Perhaps they want to be even more lax because it sometimes makes \"nicer\" rational representations?"}} {"origin_server_ts":1681492843305,"event_id":"$Y6ws3nzeRIpu1aIHfvTZFqayiU97sISXu4fpHBU5oOc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Mathematically a somewhat dubious choice though?","msgtype":"m.text","org.matrix.msc1767.text":"Mathematically a somewhat dubious choice though?"}} {"origin_server_ts":1681493022049,"event_id":"$wJ--ws6IgY0-ovCfd1RQy9q0rEZhfndpYljeasIDHxw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The Lisp definition makes sense; I would guess it finds the fraction with the smallest denominator that rounds to the input. Should be practical since the boundaries of the range that rounds to a given float are also binary fractions.","msgtype":"m.text","formatted_body":"The Lisp definition makes sense; I would guess it finds the fraction with the smallest denominator that rounds to the input. Should be practical since the boundaries of the range that rounds to a given float are also binary fractions."}} {"origin_server_ts":1681493168885,"event_id":"$gamU6GjD-YRvNbDQIfWqAVL_VyaZ6TmY5Mp00iM5fXg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh nice. The SBCL source code explains the algorithm in a comment.","msgtype":"m.text","org.matrix.msc1767.text":"Oh nice. The SBCL source code explains the algorithm in a comment."}} {"origin_server_ts":1681493169799,"event_id":"$nfuWkkW-Ii1PGhkp-AX_CAPn1CgLdZDLUxBQChIpfSY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://sourceforge.net/p/sbcl/sbcl/ci/master/tree/src/code/float.lisp#l850","msgtype":"m.text","org.matrix.msc1767.text":"https://sourceforge.net/p/sbcl/sbcl/ci/master/tree/src/code/float.lisp#l850"}} {"origin_server_ts":1681493236906,"event_id":"$l6fLDjG2p4s6_x4tiBoM64A44h9Jg-rCvdRsJ-NAUCA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I was looking for the source for J algorithm, but I have to admit that it's not easy to navigate.","msgtype":"m.text","org.matrix.msc1767.text":"I was looking for the source for J algorithm, but I have to admit that it's not easy to navigate."}} {"origin_server_ts":1681493975631,"event_id":"$-edH5Z-QBY8NhgjLlr3r4YH8rjoZI4Zzs2V85iINZwU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think it's `jtXfromD` but then this calls a lot of macros that I can't figure out. General procedure is to check t.c for a primitive to find what function it uses, then search for that.","msgtype":"m.text","formatted_body":"I think it's jtXfromD<\/code> but then this calls a lot of macros that I can't figure out. General procedure is to check t.c for a primitive to find what function it uses, then search for that."}} {"origin_server_ts":1681494522071,"event_id":"$a6yV5hBcojCmY10TTIHzGltpYW9J6c8s5c_1yxUMFTI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's useful information, thanks. ","msgtype":"m.text"}} {"origin_server_ts":1681494547953,"event_id":"$SocCMyN7XBkgRyFRvkZaSKREVTI3y2zw4xfCBsFFRtk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In this case, I think following the SBCL implementation is probably the easiest way. ","msgtype":"m.text"}} {"origin_server_ts":1681494569145,"event_id":"$58IjvZCu_LYy1Tkjnoivo8-sgDjm_h7bQKn0OkpglYQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Are you putting rationals into BQN?","msgtype":"m.text"}} {"origin_server_ts":1681494638824,"event_id":"$u4bSwKj4wHouz6HpwILAsdafOKH_Sq2MBjJpor7DhEU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No, they're incompatible with floats. The spec would allow you to have a rational-only language but not to mix them.","msgtype":"m.text","formatted_body":"No, they're incompatible with floats. The spec would allow you to have a rational-only language but not to mix them."}} {"origin_server_ts":1681494735764,"event_id":"$Ra_1WhA6U1Q9rSRhD1Lc75P8myDh1u-heRwP0oXyL-k","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Although I'll take the SBCL algorithm if I ever get around to doing a bigrat library in bqn-libs. There's a half-hearted bigint there.","msgtype":"m.text","formatted_body":"Although I'll take the SBCL algorithm if I ever get around to doing a bigrat library in bqn-libs. There's a half-hearted bigint there."}} {"origin_server_ts":1681494750830,"event_id":"$lLJh-UJkI6Z7P19sD7vvXU8j7W2CBokxn-f4i8lnhUA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So I take it you don't want to maintain two separate number systems. ","msgtype":"m.text"}} {"origin_server_ts":1681494793435,"event_id":"$-eudtiogwdPWhLsOTLnfF3vXMkw-NGToS27W7UbPbME","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Because that's what both kap and lisp does.","msgtype":"m.text"}} {"origin_server_ts":1681494835187,"event_id":"$bxvoJ_z7yR0LkkhyDoQqt4-BEWLy7TfoPJ3pBSMw6_4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No, it's a language issue. I don't want it to be possible for `a=b` and `c=d` but `(a+b)≠(b+d)` and many other issues.","msgtype":"m.text","formatted_body":"No, it's a language issue. I don't want it to be possible for a=b<\/code> and c=d<\/code> but (a+b)≠(b+d)<\/code> and many other issues."}} {"origin_server_ts":1681494883837,"event_id":"$_BVuqRXNbmXpE-hQMnNPSBfUeZQwkjS-NlpTc-aJNd4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"If you have two incompatible types the user has to know which is which to write accurate code and I don't think the complexity is appropriate for a general-purpose scripting language.","msgtype":"m.text","formatted_body":"If you have two incompatible types the user has to know which is which to write accurate code and I don't think the complexity is appropriate for a general-purpose scripting language."}} {"origin_server_ts":1681494919525,"event_id":"$6kXkVMgISD3oua9LcC2cABw0OXuICwFyRKT26GzucTs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"No, it's a language issue. I don't want it to be possible for `a=b` and `c=d` but `(a+c)≠(b+d)` and many other issues.","msgtype":"m.text","formatted_body":"No, it's a language issue. I don't want it to be possible for a=b<\/code> and c=d<\/code> but (a+c)≠(b+d)<\/code> and many other issues."},"m.relates_to":{"event_id":"$bxvoJ_z7yR0LkkhyDoQqt4-BEWLy7TfoPJ3pBSMw6_4","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* No, it's a language issue. I don't want it to be possible for `a=b` and `c=d` but `(a+c)≠(b+d)` and many other issues.","msgtype":"m.text","formatted_body":"* No, it's a language issue. I don't want it to be possible for a=b<\/code> and c=d<\/code> but (a+c)≠(b+d)<\/code> and many other issues."}} {"origin_server_ts":1681494944157,"event_id":"$BlwsaOGKCXIVIKbaV5DzXMacVc1igF6iXROFQHUuD3E","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$bxvoJ_z7yR0LkkhyDoQqt4-BEWLy7TfoPJ3pBSMw6_4"}},"format":"org.matrix.custom.html","body":"in dzaima/BQN `10 ≢ 10L` so that wouldn't happen","msgtype":"m.text","formatted_body":" ↰ <\/a> Marshall<\/a> <\/mx-reply>in dzaima/BQN 10 ≢ 10L<\/code> so that wouldn't happen"}} {"origin_server_ts":1681495020374,"event_id":"$W7HwllrCe3qB0HrjohyLsiivRWMNRK7M4AR3cIc1SHU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, it's a design thing. Personally I dislike floats as a general datatype. With floats you can never do equals comparisons anyway and the CT stuff that apl does just makes it worse.","msgtype":"m.text"}} {"origin_server_ts":1681495039798,"event_id":"$VCVMNo8u6nfOoQEiKQUxElV9NIyj_kl_kGKOGtC-_NY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"You can for integer-valued floats.","msgtype":"m.text","formatted_body":"You can for integer-valued floats."}} {"origin_server_ts":1681495106273,"event_id":"$zduBzvR8vM0KlPXNo7Hqkgm99DtJ69hifgYCAF4Yn0M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Well sure, but then you have to track that they are actually floats. So you're back to the same manual tracking as you have to do with the separare CL-style rationals.","msgtype":"m.text"}} {"origin_server_ts":1681495113642,"event_id":"$NX70t-bGCCQicfjufd_FJ0ZhWxtEHyMNfPam6mxOTJo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Well sure, but then you have to track that they are actually floats. So you're back to the same manual tracking as you have to do with the separate CL-style rationals.","msgtype":"m.text"},"m.relates_to":{"event_id":"$zduBzvR8vM0KlPXNo7Hqkgm99DtJ69hifgYCAF4Yn0M","rel_type":"m.replace"},"body":"* Well sure, but then you have to track that they are actually floats. So you're back to the same manual tracking as you have to do with the separate CL-style rationals.","msgtype":"m.text"}} {"origin_server_ts":1681495141150,"event_id":"$-BxJKRKQ-3m-zxnB7VoiisQzXODYaMuu9cCCkqwWOwE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But sure, it's harder to explain. ","msgtype":"m.text"}} {"origin_server_ts":1681495361369,"event_id":"$JBtHGn_XuoOa0mrQtdixNZsMJGBR_eGGrrDvzzreJDA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Not really, you can only introduce imprecision (except for overflow) with an operation that results in a non-integer. If you're in the typical case where all values are integers, you don't have to think about type.","msgtype":"m.text","formatted_body":"Not really, you can only introduce imprecision (except for overflow) with an operation that results in a non-integer. If you're in the typical case where all values are integers, you don't have to think about type."}} {"origin_server_ts":1681495401122,"event_id":"$hd9FBSBaffyHkOGUoZAmEqVWWUX4geJydK9OLqEu76M","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I guess there are use cases for rationals but I find it's pretty rare to do non-integer operations and also want exact comparison.","msgtype":"m.text","formatted_body":"I guess there are use cases for rationals but I find it's pretty rare to do non-integer operations and also want exact comparison."}} {"origin_server_ts":1681495889305,"event_id":"$N5_gXGeGOeuUa1akiH4iA5zYYTa1MZ2CMI3BziJ9aI4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What I really wanted was bignums.","msgtype":"m.text"}} {"origin_server_ts":1681495947611,"event_id":"$WCshdRKp3dUC4eFMQf_bLYrdjAc_u94Lm-Cu16uXheI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But once you have bignums, adding rationals makes sense since you can lose a lot of precision when doing division otherwise. ","msgtype":"m.text"}} {"origin_server_ts":1681495971837,"event_id":"$3wH_ZrUdA3g2aSNO40JQ2yDaH199zeD2c4NiPIrL4Z4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And it wasn't that much of a hassle. The difficult part was the bignums. ","msgtype":"m.text"}} {"origin_server_ts":1681496089318,"event_id":"$eZQUKyci0fYlWr5LwFfSwSTBXGTi6vfaFqXw1FRRHiY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'm one of those weird programmers who things 9 quadrillion is big.","msgtype":"m.text","formatted_body":"I'm one of those weird programmers who things 9 quadrillion is big."}} {"origin_server_ts":1681496109958,"event_id":"$WuwSP2B9kbajM_Hhf2lGMbeqHiqgAIe4w2xvx6BLL_k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah. Weird.","msgtype":"m.text"}} {"origin_server_ts":1681496177952,"event_id":"$bx-vM5aNa3eAnb6mXnkL8ToBHqnhjq88PGVR0QPbPh8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, at work we have customers who cannot represent money amounts in the precision offered by floats.","msgtype":"m.text"}} {"origin_server_ts":1681496232791,"event_id":"$4QIszeAknUr3Xq6-tLUwJcJj5uVcDlAUefhSi3Rs4Rw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The problem is that there are 10000 Indonesian rupiah to a dollar.","msgtype":"m.text"}} {"origin_server_ts":1681496265892,"event_id":"$-ZA4bK1GhxOvu6VKHaX2IEBi-yRtdbYFubgQ_g9WxDw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And VND is even worse. ","msgtype":"m.text"}} {"origin_server_ts":1681496350719,"event_id":"$6eh73L5wXoDtjuHlMgrOLI4u-T8RujYEqHbh0RXlgRQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, that's one of the few places doubles don't work. You'd need a compound type.","msgtype":"m.text","formatted_body":"Yeah, that's one of the few places doubles don't work. You'd need a compound type."}} {"origin_server_ts":1681496450236,"event_id":"$pvdxVTF20sTe8Zms6WAYFNP_b7k8RJkKynqtjyooNRo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Aka bigint. 😀","msgtype":"m.text"}} {"origin_server_ts":1681496497810,"event_id":"$Zz8HyeNxT0G0Iy6T1uU7lw-YN4j82a344IMPEaH9s4M","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Double-double's probably fine too though? You get up to 1e30 or something.","msgtype":"m.text","formatted_body":"Double-double's probably fine too though? You get up to 1e30 or something."}} {"origin_server_ts":1681496503435,"event_id":"$HggfAVOFG1ZSnALTU3nRt9xlP_Td-PEFxDZbZKG36jc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But sure, having it provided by a library like Java covers pretty much all usecases.","msgtype":"m.text"}} {"origin_server_ts":1681496530019,"event_id":"$jGFht8kPWhxLVW0lQrRNB0ObuEdWjW9nkPluM_JV1gg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$Zz8HyeNxT0G0Iy6T1uU7lw-YN4j82a344IMPEaH9s4M"}},"format":"org.matrix.custom.html","body":"but it'll be ≈∞x more annoying to use than a built-in type","msgtype":"m.text","formatted_body":" ↰ <\/a> Marshall<\/a> <\/mx-reply>but it'll be ≈∞x more annoying to use than a built-in type"}} {"origin_server_ts":1681496670187,"event_id":"$e0yykhmjQoej1eequX-U4gcP7JPsakZi0ODryOb83TU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I don't feel that bad about annoying people who move billions of dollars around.","msgtype":"m.text","formatted_body":"I don't feel that bad about annoying people who move billions of dollars around."}} {"origin_server_ts":1681496695709,"event_id":"$cC0ZAFYiUBjyNWVtLj8ZVivsvmAwD8jER1R4WXx-CFg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the people with billions of dollars aren't the ones that will be writing the code","msgtype":"m.text","formatted_body":"the people with billions of dollars aren't the ones that will be writing the code"}} {"origin_server_ts":1681496755849,"event_id":"$RFsASADcRhIG4lmzsOLH2ppk7OapkIQ4Gj6F9gXKLe8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"To be honest one of the biggest reasons why I decided to go ahead and implement it was when I solved one of the project euler problems and the numbers were chosen so that it was just ever so slightly larger they you couldn't do a trivial implementation with 64-bit ints.","msgtype":"m.text"}} {"origin_server_ts":1681496791795,"event_id":"$SeMvy_Ij4K06Qc2rxqaoxka3hjZZN-pNwpRfhcW4X1o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I felt like the designers of the problem was laughing at me so I needed to make sure I wasn't beat. ","msgtype":"m.text"}} {"origin_server_ts":1681496801574,"event_id":"$RgV88LJvBSa0SGk9indkh3d69CX3nJKLunTjz8o0Hks","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$cC0ZAFYiUBjyNWVtLj8ZVivsvmAwD8jER1R4WXx-CFg"}},"format":"org.matrix.custom.html","body":"But they sure do have the money to pay for a DECF fork of BQN if they run into this.","msgtype":"m.text","formatted_body":" ↰ <\/a> dzaima<\/a> <\/mx-reply>But they sure do have the money to pay for a DECF fork of BQN if they run into this."}} {"origin_server_ts":1681496822224,"event_id":"$bhH39z7BxaUznQHUZC51nzTMs5AEphDa-yAvZB0PmYo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It was easier to implement bigint support than solving the problem in a different way. ","msgtype":"m.text"}} {"origin_server_ts":1681496913044,"event_id":"$0_TYBoHhKpLth_LFggKUUR528esVmEKhp43XOnHCe4A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Marshall: the finance industry are weird people. And I work in that industry. Perhaps you should try to get BQN in there? ","msgtype":"m.text"}} {"origin_server_ts":1681497007091,"event_id":"$lHcsRQ88Gjgqt2uhkaIYEDuWT0UVTn8UUAiK3cuSvaI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'm not interested in pushing BQN anywhere just to have users.","msgtype":"m.text","formatted_body":"I'm not interested in pushing BQN anywhere just to have users."}} {"origin_server_ts":1681497299744,"event_id":"$U2wHm9H9amgcpfabqGEiqTphWh02WzEPiGX7l7RtJ1c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, it was a bit tongue in cheek. ","msgtype":"m.text"}} {"origin_server_ts":1681497501735,"event_id":"$U0UgbSIGpbLcJbgo7Cd_19JT6-42L17DVCE9SzQzp0g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Anyway, next step for me is to fix the bitwise operations to work with bigints. That will make them much more useful than they are now. ","msgtype":"m.text"}} {"origin_server_ts":1681498189934,"event_id":"$IU8xgq4HhUXKr1fAP5wpsU6wPiL86jwKBEFyHnEGPX0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$RgV88LJvBSa0SGk9indkh3d69CX3nJKLunTjz8o0Hks"}},"format":"org.matrix.custom.html","body":"they also have the money to do research & choose to not use the language that blatantly doesn't support their primary use-case. And billionares don't even need to be involved at the point where one decides on the language, they just need to be a non-zero possibility to occur in the future","msgtype":"m.text","formatted_body":" ↰ <\/a> Marshall<\/a> <\/mx-reply>they also have the money to do research & choose to not use the language that blatantly doesn't support their primary use-case. And billionares don't even need to be involved at the point where one decides on the language, they just need to be a non-zero possibility to occur in the future"}} {"origin_server_ts":1681498210449,"event_id":"$2fxbbMydwdLcEdi__U3hrftTqG9uvfhqyZwj-1vptKM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"they also have the money to do research & choose to not use the language that blatantly doesn't support their primary use-case. And billionares don't even need to be involved at the point where one decides on the language, they just need to have a non-zero possibility to occur in the future","msgtype":"m.text","formatted_body":"they also have the money to do research & choose to not use the language that blatantly doesn't support their primary use-case. And billionares don't even need to be involved at the point where one decides on the language, they just need to have a non-zero possibility to occur in the future"},"m.relates_to":{"event_id":"$IU8xgq4HhUXKr1fAP5wpsU6wPiL86jwKBEFyHnEGPX0","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* they also have the money to do research & choose to not use the language that blatantly doesn't support their primary use-case. And billionares don't even need to be involved at the point where one decides on the language, they just need to have a non-zero possibility to occur in the future","msgtype":"m.text","formatted_body":"* they also have the money to do research & choose to not use the language that blatantly doesn't support their primary use-case. And billionares don't even need to be involved at the point where one decides on the language, they just need to have a non-zero possibility to occur in the future"}} {"origin_server_ts":1681498277465,"event_id":"$NOBI0uuOeEnvLaXh8uw8L5Nc_QQWkY-Q2Hpxmx0-uM8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I really really could not care less that my non-commercial project will not be used to shuffle money around.","msgtype":"m.text","formatted_body":"I really really could not care less that my non-commercial project will not be used to shuffle money around."}} {"origin_server_ts":1681498404722,"event_id":"$dbc73RqRX5mjI3r8z6WMG4jxf1ApScSRGwTAKOid3io","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"now that is a valid reason to not do bigints","msgtype":"m.text","formatted_body":"now that is a valid reason to not do bigints"}} {"origin_server_ts":1681498534776,"event_id":"$99s0LR6Ex158dQvJqpEmdWpbh1OV7e0PwBWHNFFXu7s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"random note: [this](https://kapdemo.dhsdevelopments.com/clientweb2/#a%E2%86%901%20%E2%8B%84%20b%E2%86%901.2*0%20%E2%8B%84%20%E2%8A%83%7B%E2%8D%B5(%E2%8D%B5%2B2*100%29%7D%C2%A8%20a%20b) is pretty unintuitive behavior - `a` and `b` there compare equal & display exactly the same, but have different behavior","msgtype":"m.text","formatted_body":"random note: this<\/a> is pretty unintuitive behavior - a<\/code> and b<\/code> there compare equal & display exactly the same, but have different behavior"}} {"origin_server_ts":1681498847276,"event_id":"$bLTo8_d7dTsR_EujVOVYmdYRkryKdEXIRzgpKVtWIvw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"other than displaying integers & floats differently, I guess you can't reasonably avoid that with implicit bigints though, if you want to keep `1+1.2` working","msgtype":"m.text","formatted_body":"other than displaying integers & floats differently, I guess you can't reasonably avoid that with implicit bigints though, if you want to keep 1+1.2<\/code> working"}} {"origin_server_ts":1681498960045,"event_id":"$T6k6MztYo5AyPRx_maqEwd9aHYWHOiQsPMXG9EG8KDQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima/BQN has the luxury of bigints being opt-in, so I can sanely make `1+2L⋆100` operate in bigints, and have `1.2+2L⋆100` error","msgtype":"m.text","formatted_body":"dzaima/BQN has the luxury of bigints being opt-in, so I can sanely make 1+2L⋆100<\/code> operate in bigints, and have 1.2+2L⋆100<\/code> error"}} {"origin_server_ts":1681524856154,"event_id":"$_fRzZAfh0QhcJ3-ZkxS9gVgSKX6fdvyaM39ewYwDoKU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"dzaima: yeah, I should probably change the display of floats to always include the decimal point. ","msgtype":"m.text"}} {"origin_server_ts":1681524903913,"event_id":"$RvwM1go2rbl3x77fj23qRJaFTsu0GRmQhZHCHaam1rA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That is to say, I definitely should do that. Thanks for the feedback on that. ","msgtype":"m.text"}} {"origin_server_ts":1681534431689,"event_id":"$R1DVpY_rtOND-q3m-tR9ElPKkH5soh38XKhGBgRLaJ8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And it's done.","msgtype":"m.text","org.matrix.msc1767.text":"And it's done."}} {"origin_server_ts":1681534840049,"event_id":"$cXBZdgRnqdkcFU4x3-3DDH-aMZ6pMFEKV4k0z43xvoE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: Marshall Question:"},{"mimetype":"text/html","body":"dzaima<\/a>: Marshall<\/a> Question:"}],"format":"org.matrix.custom.html","body":"dzaima: Marshall Question:","msgtype":"m.text","formatted_body":"dzaima<\/a>: Marshall<\/a> Question:"}} {"origin_server_ts":1681534894998,"event_id":"$x9-d2e7xze3VnEAuRkBRv5ANWhcQPV6WN62HlVtUGpQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Bitwise operations are derived using the `∵` operator. That is to say, `37 = 99≠∵70`."},{"mimetype":"text/html","body":"Bitwise operations are derived using the ∵<\/code> operator. That is to say, 37 = 99≠∵70<\/code>."}],"format":"org.matrix.custom.html","body":"Bitwise operations are derived using the `∵` operator. That is to say, `37 = 99≠∵70`.","msgtype":"m.text","formatted_body":"Bitwise operations are derived using the ∵<\/code> operator. That is to say, 37 = 99≠∵70<\/code>."}} {"origin_server_ts":1681534954444,"event_id":"$NEZsijDm73fANgpfYsY2RaSRwMTDJJs_-8HzJtC6SMI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Now, I want to expose the shl and shr functions. I could attach them to `⌽∵`, but that would be more fitting for the rol and ror operations."},{"mimetype":"text/html","body":"Now, I want to expose the shl and shr functions. I could attach them to ⌽∵<\/code>, but that would be more fitting for the rol and ror operations."}],"format":"org.matrix.custom.html","body":"Now, I want to expose the shl and shr functions. I could attach them to `⌽∵`, but that would be more fitting for the rol and ror operations.","msgtype":"m.text","formatted_body":"Now, I want to expose the shl and shr functions. I could attach them to ⌽∵<\/code>, but that would be more fitting for the rol and ror operations."}} {"origin_server_ts":1681534977882,"event_id":"$zwVML4ZVw06jNxADNUwJPg-hwkZ4ZvC6ZKVhjB6GwJw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(also, rol and ror and kinda difficult to define with bignum arithmetic)","msgtype":"m.text","org.matrix.msc1767.text":"(also, rol and ror and kinda difficult to define with bignum arithmetic)"}} {"origin_server_ts":1681535026838,"event_id":"$WcswEvnjm8FARWK6DIQVutZBIgQ03yf1_h7q1povaGY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"My thought was to have bigint shl/shr on `⊖∵`. Then have a 64-bit rol/ror on `⌽∵`."},{"mimetype":"text/html","body":"My thought was to have bigint shl/shr on ⊖∵<\/code>. Then have a 64-bit rol/ror on ⌽∵<\/code>."}],"format":"org.matrix.custom.html","body":"My thought was to have bigint shl/shr on `⊖∵`. Then have a 64-bit rol/ror on `⌽∵`.","msgtype":"m.text","formatted_body":"My thought was to have bigint shl/shr on ⊖∵<\/code>. Then have a 64-bit rol/ror on ⌽∵<\/code>."}} {"origin_server_ts":1681535159694,"event_id":"$Wn_lnsQuCZ58z0HYqX8PlDUcHCB6a_VlcLsAYZSuWKY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"But making it 64-bit seems arbitrary, and sometimes you want a 32-bit rol. If so, I was thinking of using the axis argument for that: `2147483650 = 1 ⌽∵[32] 3`"},{"mimetype":"text/html","body":"But making it 64-bit seems arbitrary, and sometimes you want a 32-bit rol. If so, I was thinking of using the axis argument for that: 2147483650 = 1 ⌽∵[32] 3<\/code>"}],"format":"org.matrix.custom.html","body":"But making it 64-bit seems arbitrary, and sometimes you want a 32-bit rol. If so, I was thinking of using the axis argument for that: `2147483650 = 1 ⌽∵[32] 3`","msgtype":"m.text","formatted_body":"But making it 64-bit seems arbitrary, and sometimes you want a 32-bit rol. If so, I was thinking of using the axis argument for that: 2147483650 = 1 ⌽∵[32] 3<\/code>"}} {"origin_server_ts":1681535182049,"event_id":"$Qj13JgHdzylwbGOMRTugXp8QRiZ-bDRf_Zg6gZCT2Ss","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Is this a sound design? It feels... Not perfect.","msgtype":"m.text","org.matrix.msc1767.text":"Is this a sound design? It feels... Not perfect."}} {"origin_server_ts":1681561856276,"event_id":"$b9OuURg-fhThcDa8jxxW6LHh-6lyQ6_-1IuKrAwzJOQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Well, you're missing one of the right shifts, presumably signed. I'm guessing one shift direction would be positive and one negative? Then there's a potential performance problem if you vectorize it, with say `5 8 ¯6 0 2 ⊖∵ numbers`. Branching on the direction would be slow; you might have to do both shifts and branchlessly combine.","msgtype":"m.text","formatted_body":"Well, you're missing one of the right shifts, presumably signed. I'm guessing one shift direction would be positive and one negative? Then there's a potential performance problem if you vectorize it, with say 5 8 ¯6 0 2 ⊖∵ numbers<\/code>. Branching on the direction would be slow; you might have to do both shifts and branchlessly combine."}} {"origin_server_ts":1681562115807,"event_id":"$Mj3Y45xlMjyjtuDY8q5OYfWc8d-BrHBLcSGBOe3WUD0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"if you need varying shift directions, having separate builtins for the shifts would be even worse than one branching one. But I don't think anyone would even need unpredictable left/right shifts, much less ones where performance matters. (and fwiw aarch64 has at least vector shift instructions which take a signed shift amount)","msgtype":"m.text","formatted_body":"if you need varying shift directions, having separate builtins for the shifts would be even worse than one branching one. But I don't think anyone would even need unpredictable left/right shifts, much less ones where performance matters. (and fwiw aarch64 has at least vector shift instructions which take a signed shift amount)"}} {"origin_server_ts":1681562155858,"event_id":"$gjhORkKpb96Z1i_gRZ-vSg4mmGG8OUrZXPjlBvEb2Y8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and when bigints get involved all perf becomes meaningless","msgtype":"m.text","formatted_body":"and when bigints get involved all perf becomes meaningless"}} {"origin_server_ts":1681562405075,"event_id":"$_nkWmvxOkO0K6zwLIWgjULmczCut3FMZ1K52pqKZ45Y","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I didn't state that very well. The problem is more that you have to test for it, slowing down the normal case where there's only one sign.","msgtype":"m.text","formatted_body":"I didn't state that very well. The problem is more that you have to test for it, slowing down the normal case where there's only one sign."}} {"origin_server_ts":1681562475486,"event_id":"$xDyWq16vMcignh5riyKdFBEbZjwBQS1lYgnbylN2FhQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"a predictable branch comparing a number to 0 is cheap; not as cheap as not doing it of course, but still plenty cheap","msgtype":"m.text","formatted_body":"a predictable branch comparing a number to 0 is cheap; not as cheap as not doing it of course, but still plenty cheap"}} {"origin_server_ts":1681562476498,"event_id":"$g6XqLnEX9N1KTUbhUXZsBO9ph6nyPtiK_6zOVb4dZ_E","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"And it could start with any number of 0s so you can't even check the first and assume that.","msgtype":"m.text","formatted_body":"And it could start with any number of 0s so you can't even check the first and assume that."}} {"origin_server_ts":1681562492884,"event_id":"$Mu3zN9dQc9NODYXSf7wyO7WSQLQxnuZnTQDjU5UalLk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ah right 0 is a bit messy","msgtype":"m.text","formatted_body":"ah right 0 is a bit messy"}} {"origin_server_ts":1681562682678,"event_id":"$y24vY5O7YWi4mEr1Bv8xMrtWOMEfMDCZANYWkx-6QI4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$Qj13JgHdzylwbGOMRTugXp8QRiZ-bDRf_Zg6gZCT2Ss"}},"format":"org.matrix.custom.html","body":"it, like, definitely is a design that can be implemented, but I wouldn't call it one that makes much sense; `⊖` doesn't have any reason to be more rotate-less than `⌽`, and of course using bracket axis for non-axis things is always weird. I'd even say that `6172 ≡ 12345 ÷∵ 1` & `24690 ≡ ×∵ 1` would make more sense, and those are still very weird","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>it, like, definitely is a design that can be implemented, but I wouldn't call it one that makes much sense; ⊖<\/code> doesn't have any reason to be more rotate-less than ⌽<\/code>, and of course using bracket axis for non-axis things is always weird. I'd even say that 6172 ≡ 12345 ÷∵ 1<\/code> & 24690 ≡ ×∵ 1<\/code> would make more sense, and those are still very weird"}} {"origin_server_ts":1681562717006,"event_id":"$IhwOwrtXnhqgCE5EFhDFng9hLFEDyBAXhBzaQeNDNXw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"it, like, definitely is a design that can be implemented, but I wouldn't call it one that makes much sense; `⊖` doesn't have any reason to be more rotate-less than `⌽`, and of course using bracket axis for non-axis things is always weird. I'd even say that `6172 ≡ 12345 ÷∵ 1` & `24690 ≡ 12345 ×∵ 1` would make more sense, and those are still very weird","msgtype":"m.text","formatted_body":"it, like, definitely is a design that can be implemented, but I wouldn't call it one that makes much sense; ⊖<\/code> doesn't have any reason to be more rotate-less than ⌽<\/code>, and of course using bracket axis for non-axis things is always weird. I'd even say that 6172 ≡ 12345 ÷∵ 1<\/code> & 24690 ≡ 12345 ×∵ 1<\/code> would make more sense, and those are still very weird"},"m.relates_to":{"event_id":"$y24vY5O7YWi4mEr1Bv8xMrtWOMEfMDCZANYWkx-6QI4","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* it, like, definitely is a design that can be implemented, but I wouldn't call it one that makes much sense; `⊖` doesn't have any reason to be more rotate-less than `⌽`, and of course using bracket axis for non-axis things is always weird. I'd even say that `6172 ≡ 12345 ÷∵ 1` & `24690 ≡ 12345 ×∵ 1` would make more sense, and those are still very weird","msgtype":"m.text","formatted_body":"* it, like, definitely is a design that can be implemented, but I wouldn't call it one that makes much sense; ⊖<\/code> doesn't have any reason to be more rotate-less than ⌽<\/code>, and of course using bracket axis for non-axis things is always weird. I'd even say that 6172 ≡ 12345 ÷∵ 1<\/code> & 24690 ≡ 12345 ×∵ 1<\/code> would make more sense, and those are still very weird"}} {"origin_server_ts":1681562945122,"event_id":"$4pNuse4E3B1KeDPeSZu20cLXIj1spArQzZP-liuKoB4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"heh: `6172 ≡ ¯1 ↓∵ 12345`; doesn't have any nice left-shift equivalent though","msgtype":"m.text","formatted_body":"heh: 6172 ≡ ¯1 ↓∵ 12345<\/code>; doesn't have any nice left-shift equivalent though"}} {"origin_server_ts":1681563550341,"event_id":"$QiA9NWsvEHQGXlTtZiq9Pa2kehukGF8_XSGUl4XBay8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh, never thought about drop being a kind of shift","msgtype":"m.text"}} {"origin_server_ts":1681563626296,"event_id":"$_GFSODDuXwaYN9B0qLkmqT-AIsj-j-nm05pIpuM1mlc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And the reason I picked vertical rotate for the shift is that it's a visual variation of horizontal rotate. No other reason. ","msgtype":"m.text"}} {"origin_server_ts":1681563632724,"event_id":"$FH7CMEEuSSPRmlrCOwdD7RvlLDEQ2pCOigeSe77tyos","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"And the reason I picked vertical rotate for the shift is that it's a visual variation of horizontal rotate. No other reason.","msgtype":"m.text"},"m.relates_to":{"event_id":"$_GFSODDuXwaYN9B0qLkmqT-AIsj-j-nm05pIpuM1mlc","rel_type":"m.replace"},"body":"* And the reason I picked vertical rotate for the shift is that it's a visual variation of horizontal rotate. No other reason.","msgtype":"m.text"}} {"origin_server_ts":1681835219402,"event_id":"$jwLrRgU_bX2bvEY4bz0Z5jC71elSBlLi3opGHQWFBO8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have implemented a very basic, and low-level, API to talk to Java reflection. My intention is to implement a nicer user-facing API on top of this in kap itself.","msgtype":"m.text","org.matrix.msc1767.text":"I have implemented a very basic, and low-level, API to talk to Java reflection. My intention is to implement a nicer user-facing API on top of this in kap itself."}} {"origin_server_ts":1681835226068,"event_id":"$Jqf6futj02WFuc9FO872Q8dACEgIeBbNzSabBnyJu5w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Here's an example of the API: https://codeberg.org/loke/array/src/branch/master/array/src/jvmTest/kotlin/array/jvmmod/MethodCallsTest.kt#L47","msgtype":"m.text","org.matrix.msc1767.text":"Here's an example of the API: https://codeberg.org/loke/array/src/branch/master/array/src/jvmTest/kotlin/array/jvmmod/MethodCallsTest.kt#L47"}} {"origin_server_ts":1681835244462,"event_id":"$vr5OygSjzN075D8NnVKZO-TLCIrx4jF8jcbnNtHuMso","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The question is, what should the user-facing API look like? The languages are quite different.","msgtype":"m.text","org.matrix.msc1767.text":"The question is, what should the user-facing API look like? The languages are quite different."}} {"state_key":"@vylsaz:matrix.org","origin_server_ts":1682069725435,"event_id":"$i_2z4TxdnqVIs676JYkahZIvtxjGZrEvN8pBlbVa49E","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.member","content":{"displayname":"vylsaz","membership":"join"}} {"origin_server_ts":1682320627800,"event_id":"$h8um6eobJRNz17p4rSp6ZbX-vNLF-defb0g8bYli1Rs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Test","msgtype":"m.text","org.matrix.msc1767.text":"Test"}} {"state_key":"@phantomics:matrix.org","origin_server_ts":1682320690246,"event_id":"$aaflSMjdXSXKesjdCBcG3owxdGyfpOgH6S05BuB9Q-k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","prev_content":{"displayname":"phantomics","membership":"invite"},"type":"m.room.member","content":{"membership":"leave"},"replaces_state":"$abhvjJ3Oto-kczyJT5UztVHxnOR_GHi4ihkPDnQQ2jA"} {"state_key":"@_discord_562517174997221378:t2bot.io","origin_server_ts":1682320715317,"event_id":"$ZPH57DYRv2iYwMBtikWR_JZwZq2tp4MJMsHE7NV2vfM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","prev_content":{"displayname":"Phantomics#2204","membership":"invite"},"type":"m.room.member","content":{"membership":"leave"},"replaces_state":"$0Zz7ck87VubvP2b9SI6P3-F2TRc2ktONC8sxGglxku4"} {"state_key":"@phantomics:matrix.org","origin_server_ts":1682320795477,"event_id":"$DjjKGO5j-I6RNEwtrPn0kLnS4WJohQLYVa-4gAZRAGE","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","prev_content":{"membership":"leave"},"type":"m.room.member","content":{"displayname":"phantomics","membership":"join"},"replaces_state":"$aaflSMjdXSXKesjdCBcG3owxdGyfpOgH6S05BuB9Q-k"} {"origin_server_ts":1682320837934,"event_id":"$X1bmkqwWJDaiTwISMQ-JxCwoj-q13ZNqZDciT8zovdE","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Hey loke","msgtype":"m.text"}} {"origin_server_ts":1682320849648,"event_id":"$jWYEUTCWGa2wB6T2PlUAZHAbHXWZPZ3Ses6f7UaQ9qI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It works","msgtype":"m.text","org.matrix.msc1767.text":"It works"}} {"origin_server_ts":1682320855844,"event_id":"$LBxfw3M5C9qaK4pr2sIegwYGt_S-92RUHqlBlS3bVQE","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Yes","msgtype":"m.text"}} {"origin_server_ts":1682320896771,"event_id":"$axBE-KZCc7S6t6ZkwNWZkz3-KKJHt_oue2P3n2V4eCM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I started implementing an object system inspired by CLOS.","msgtype":"m.text","org.matrix.msc1767.text":"I started implementing an object system inspired by CLOS."}} {"origin_server_ts":1682320900954,"event_id":"$N-9m70cX7lwn_QDRSURbj6qbDipInzZtoOf0qK2vD0k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Called KAOS of course.","msgtype":"m.text","org.matrix.msc1767.text":"Called KAOS of course."}} {"origin_server_ts":1682320913733,"event_id":"$02UEQwCMitqQpBYlUGVHBGuUBJNA0FKKSbrTeLnV6Fk","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Very cool! That would be a serious powerup for Kotlin","msgtype":"m.text"}} {"origin_server_ts":1682320935666,"event_id":"$BpZNpdQN8JHw28ZsDtZW1zTcN-A7QsxTQm5dULVLrVE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Well, it's for kap, not kotlin :-)","msgtype":"m.text","org.matrix.msc1767.text":"Well, it's for kap, not kotlin :-)"}} {"origin_server_ts":1682320952713,"event_id":"$tLPRi7FtO6undXfa_jgkrAPyeeFRNcxudkppBwoM4TY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I did try to implement generic functions for kotlin, and it kinda-sorta worked.","msgtype":"m.text","org.matrix.msc1767.text":"I did try to implement generic functions for kotlin, and it kinda-sorta worked."}} {"origin_server_ts":1682320999334,"event_id":"$RbVU2HIP0bNSgwM3aJ2rwZ5_8W8Rl-afj0B-10v56hs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"The syntax wasn't too terrible, since kotlin allows you to do: `operator fun Foo.call() { ... }`"},{"mimetype":"text/html","body":"The syntax wasn't too terrible, since kotlin allows you to do: operator fun Foo.call() { ... }<\/code>"}],"format":"org.matrix.custom.html","body":"The syntax wasn't too terrible, since kotlin allows you to do: `operator fun Foo.call() { ... }`","msgtype":"m.text","formatted_body":"The syntax wasn't too terrible, since kotlin allows you to do: operator fun Foo.call() { ... }<\/code>"}} {"origin_server_ts":1682321025354,"event_id":"$AKBj21GhQndO5bai69aZ2yftD9aM0pGTegv9MXMLqKA","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I see, is there anything impeding KAOS being used for general-purpose Kotlin apps? Could turn some heads","msgtype":"m.text"}} {"origin_server_ts":1682321142273,"event_id":"$8DDdrbU-7vysfT5x_33dMbcD402roS0E24TUABtLd9U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That would be a completely different think. Kap does not integrate with the underlying system in the same way April does.","msgtype":"m.text","org.matrix.msc1767.text":"That would be a completely different think. Kap does not integrate with the underlying system in the same way April does."}} {"origin_server_ts":1682321150033,"event_id":"$K_4cpOFrtuADiKw4V-dPTzkc90Leh5sQ8OUkd1h2qYc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"That would be a completely different thin. Kap does not integrate with the underlying system in the same way April does.","msgtype":"m.text","org.matrix.msc1767.text":"That would be a completely different thin. Kap does not integrate with the underlying system in the same way April does."},"m.relates_to":{"event_id":"$8DDdrbU-7vysfT5x_33dMbcD402roS0E24TUABtLd9U","rel_type":"m.replace"},"body":" * That would be a completely different thin. Kap does not integrate with the underlying system in the same way April does.","msgtype":"m.text","org.matrix.msc1767.text":" * That would be a completely different thin. Kap does not integrate with the underlying system in the same way April does."}} {"origin_server_ts":1682321154991,"event_id":"$Cpskmg8sUCgx-Hc4TtC5ZpA88buh3njt1pEmZcC0ius","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"That would be a completely different thing. Kap does not integrate with the underlying system in the same way April does.","msgtype":"m.text","org.matrix.msc1767.text":"That would be a completely different thing. Kap does not integrate with the underlying system in the same way April does."},"m.relates_to":{"event_id":"$8DDdrbU-7vysfT5x_33dMbcD402roS0E24TUABtLd9U","rel_type":"m.replace"},"body":" * That would be a completely different thing. Kap does not integrate with the underlying system in the same way April does.","msgtype":"m.text","org.matrix.msc1767.text":" * That would be a completely different thing. Kap does not integrate with the underlying system in the same way April does."}} {"origin_server_ts":1682321159780,"event_id":"$ceSe5AtH0WHS7FIE4nmR2oshxFGFJj3YVbWCUIuBkws","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I see","msgtype":"m.text"}} {"origin_server_ts":1682321202085,"event_id":"$gd6MMLLJN1SGhSIyQx7tpWe3XBbdVjihPXP5uMPhyOo","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Testing performance I get numbers like 403/500 or 3/1000, is this just fractions of a second?","msgtype":"m.text"}} {"origin_server_ts":1682321247828,"event_id":"$FZ8T1snbwHKcc_juGBe1XZO2dhtuBrwzNzPEcmTNG8A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"However, my kotlin object system did allow you to implement generic functions like so: `val foo = defgeneric(Foo::class)` and then you could do: `foo.defmethod(Int::class) { someImplementation() }`"},{"mimetype":"text/html","body":"However, my kotlin object system did allow you to implement generic functions like so: val foo = defgeneric(Foo::class)<\/code> and then you could do: foo.defmethod(Int::class) { someImplementation() }<\/code>"}],"format":"org.matrix.custom.html","body":"However, my kotlin object system did allow you to implement generic functions like so: `val foo = defgeneric(Foo::class)` and then you could do: `foo.defmethod(Int::class) { someImplementation() }`","msgtype":"m.text","formatted_body":"However, my kotlin object system did allow you to implement generic functions like so: val foo = defgeneric(Foo::class)<\/code> and then you could do: foo.defmethod(Int::class) { someImplementation() }<\/code>"}} {"origin_server_ts":1682321259781,"event_id":"$sxdpGEx4SzK73gFptD7bTdctNOULOKieFiZeY_YA6rE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Then you could do `foo(1)` to call that method."},{"mimetype":"text/html","body":"Then you could do foo(1)<\/code> to call that method."}],"format":"org.matrix.custom.html","body":"Then you could do `foo(1)` to call that method.","msgtype":"m.text","formatted_body":"Then you could do foo(1)<\/code> to call that method."}} {"origin_server_ts":1682321318876,"event_id":"$wAbVzuP1S11iOEWarMgnxDVTuI63oznkyCNP8fqFBiE","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Ok, nice, so you could create an array element fetcher that has effective multiple dispatch, it could fetch an element from an uncomputed array thunk or a literal array","msgtype":"m.text"}} {"origin_server_ts":1682321418735,"event_id":"$orgXgATGHUIJ4XF4I7eImQPOPgQq32SWzgYLnYzewqA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Are we talking about my kapo object model, or the kotlin one? They're two completely independent projects.","msgtype":"m.text","org.matrix.msc1767.text":"Are we talking about my kapo object model, or the kotlin one? They're two completely independent projects."}} {"origin_server_ts":1682321423851,"event_id":"$nxzb8PqJkG0mmkissq6LQAA5dAR4Ca_g9LL1FuT0jRM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Are we talking about my kap object model, or the kotlin one? They're two completely independent projects.","msgtype":"m.text","org.matrix.msc1767.text":"Are we talking about my kap object model, or the kotlin one? They're two completely independent projects."},"m.relates_to":{"event_id":"$orgXgATGHUIJ4XF4I7eImQPOPgQq32SWzgYLnYzewqA","rel_type":"m.replace"},"body":" * Are we talking about my kap object model, or the kotlin one? They're two completely independent projects.","msgtype":"m.text","org.matrix.msc1767.text":" * Are we talking about my kap object model, or the kotlin one? They're two completely independent projects."}} {"origin_server_ts":1682321436271,"event_id":"$GJiiCaOHLQ5IRt5Yc2pEbh6zioH1OhbKKF22NWzox4k","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Your kap model, I know kotlin's couldn't do that","msgtype":"m.text"}} {"origin_server_ts":1682321493705,"event_id":"$N6hfszueDRUxTT0hmHWgZPbw_mTCPI1CBYbke_3Fcnk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Well, yes. You could do something like `foo¨ someArray` where `foo` is a generic function."},{"mimetype":"text/html","body":"Well, yes. You could do something like foo¨ someArray<\/code> where foo<\/code> is a generic function."}],"format":"org.matrix.custom.html","body":"Well, yes. You could do something like `foo¨ someArray` where `foo` is a generic function.","msgtype":"m.text","formatted_body":"Well, yes. You could do something like foo¨ someArray<\/code> where foo<\/code> is a generic function."}} {"origin_server_ts":1682321510337,"event_id":"$lDMMxKmRd0DaXOPXo9nUyL44t-WPgejoThlM6tygKBc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I wrote down some of the ideas: https://write.as/djp3u63etwu4t02s.md","msgtype":"m.text","org.matrix.msc1767.text":"I wrote down some of the ideas: https://write.as/djp3u63etwu4t02s.md"}} {"origin_server_ts":1682321537955,"event_id":"$8AvZlZov4y3wVamFdxLqQnzBQHAYRcGwcHCLl3MKDkc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The actual implementation looks different, and I haven't settled on a syntax for defmethod.","msgtype":"m.text","org.matrix.msc1767.text":"The actual implementation looks different, and I haven't settled on a syntax for defmethod."}} {"origin_server_ts":1682321605172,"event_id":"$3dx5qn1eYz_FvDtLfCoYX9qV5HyBpxf5w--mDv_DzF4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"One change I made is that `extract` is now monadic. The dyadic form turned out to be pointless."},{"mimetype":"text/html","body":"One change I made is that extract<\/code> is now monadic. The dyadic form turned out to be pointless."}],"format":"org.matrix.custom.html","body":"One change I made is that `extract` is now monadic. The dyadic form turned out to be pointless.","msgtype":"m.text","formatted_body":"One change I made is that extract<\/code> is now monadic. The dyadic form turned out to be pointless."}} {"origin_server_ts":1682321761217,"event_id":"$vwe6mTGKenUXvxwqTa7sgO5C4Lr2atup_CRzUv7vvvQ","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Ok, btw are the array transforms implemented in parallel currently?","msgtype":"m.text"}} {"origin_server_ts":1682321844775,"event_id":"$c5qVb7-40ivWdSlceObir8Lt2KZZMKT-NpKuliMlzDo","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1682321912619,"event_id":"$0SvsUrFY7lSWh50SF2f86evho8I-RYcnNN9PLEVGM00","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","unsigned":{"age":41027541788},"redacts":"$c5qVb7-40ivWdSlceObir8Lt2KZZMKT-NpKuliMlzDo","type":"m.room.redaction","content":{"redacts":"$c5qVb7-40ivWdSlceObir8Lt2KZZMKT-NpKuliMlzDo"},"age":41027541788},"sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{}} {"origin_server_ts":1682321912619,"event_id":"$0SvsUrFY7lSWh50SF2f86evho8I-RYcnNN9PLEVGM00","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","redacts":"$c5qVb7-40ivWdSlceObir8Lt2KZZMKT-NpKuliMlzDo","type":"m.room.redaction","content":{"redacts":"$c5qVb7-40ivWdSlceObir8Lt2KZZMKT-NpKuliMlzDo"}} {"origin_server_ts":1682321920093,"event_id":"$qWt79P0xNP7MAyb7gqQ7jpAW33nShqc0LeF3_0YQgx8","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1682321936172,"event_id":"$T9-bB2d9qeDR5rJQnDBpq_giwIORXQmcE41zy5c9bdw","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","unsigned":{"age":41027518235},"redacts":"$qWt79P0xNP7MAyb7gqQ7jpAW33nShqc0LeF3_0YQgx8","type":"m.room.redaction","content":{"redacts":"$qWt79P0xNP7MAyb7gqQ7jpAW33nShqc0LeF3_0YQgx8"},"age":41027518235},"sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{}} {"origin_server_ts":1682321936172,"event_id":"$T9-bB2d9qeDR5rJQnDBpq_giwIORXQmcE41zy5c9bdw","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","redacts":"$qWt79P0xNP7MAyb7gqQ7jpAW33nShqc0LeF3_0YQgx8","type":"m.room.redaction","content":{"redacts":"$qWt79P0xNP7MAyb7gqQ7jpAW33nShqc0LeF3_0YQgx8"}} {"origin_server_ts":1682321948875,"event_id":"$_8qojbN8CyJsx6Ag7170VKAy2jzw081dtK0A_4dCx2g","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1682321957519,"event_id":"$zYPq2QS8-s1wME_WOfP_taB2vJotx9r_Ss_HcC4_0Ms","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","unsigned":{"age":41027496888},"redacts":"$_8qojbN8CyJsx6Ag7170VKAy2jzw081dtK0A_4dCx2g","type":"m.room.redaction","content":{"redacts":"$_8qojbN8CyJsx6Ag7170VKAy2jzw081dtK0A_4dCx2g"},"age":41027496888},"sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{}} {"origin_server_ts":1682321957519,"event_id":"$zYPq2QS8-s1wME_WOfP_taB2vJotx9r_Ss_HcC4_0Ms","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","redacts":"$_8qojbN8CyJsx6Ag7170VKAy2jzw081dtK0A_4dCx2g","type":"m.room.redaction","content":{"redacts":"$_8qojbN8CyJsx6Ag7170VKAy2jzw081dtK0A_4dCx2g"}} {"origin_server_ts":1682321969517,"event_id":"$IMkNmx2R7awZa2vHDn0RMuZboyvNHZI4n5AWy8y3jsQ","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I was trying A←200 200 200⍴⍳200 ⋄ time:measureTime{ B←10 10↓¯10 ¯10↓180 180 180↑300⌽A ⋄ 10 }","msgtype":"m.text"}} {"origin_server_ts":1682321982854,"event_id":"$-eDYpdRgh8_sa1y6VxqERtU4JYJNaBdRsPzZ_QpVHPY","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"How do I quote code?","msgtype":"m.text"}} {"origin_server_ts":1682322012463,"event_id":"$0OBMAZb9K-tqOKY9CSmiKYjzTS3CZbRelH1Mvy_7adw","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Not sure if this kind of sequential reshaping transform will happen in parallel","msgtype":"m.text"}} {"origin_server_ts":1682322309669,"event_id":"$7x7P0-oFyFiYtAGLMRYED_BlVOk50aeUPNhhu-M1V6w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: Not sure what you are trying to measure."},{"mimetype":"text/html","body":"phantomics<\/a>: Not sure what you are trying to measure."}],"format":"org.matrix.custom.html","body":"phantomics: Not sure what you are trying to measure.","msgtype":"m.text","formatted_body":"phantomics<\/a>: Not sure what you are trying to measure."}} {"origin_server_ts":1682322315798,"event_id":"$93KFtoGiHdmsqQZEDUu5w95jqRcX6SGizwjTs4lJMMA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What id it you want to learn?","msgtype":"m.text","org.matrix.msc1767.text":"What id it you want to learn?"}} {"origin_server_ts":1682322374523,"event_id":"$osk5wcLu2pGDKylMJzlmnHvWUaT8RhZs9UWjYZFaPpQ","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Execution time of different function permutations, will KAP perform the B← assignment without intermediate memory writes?","msgtype":"m.text"}} {"origin_server_ts":1682322376140,"event_id":"$kaC5e1gtdH953hI3sa-vhA29dlclZmRp126coxUClls","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"What is it you want to learn?","msgtype":"m.text","org.matrix.msc1767.text":"What is it you want to learn?"},"m.relates_to":{"event_id":"$93KFtoGiHdmsqQZEDUu5w95jqRcX6SGizwjTs4lJMMA","rel_type":"m.replace"},"body":" * What is it you want to learn?","msgtype":"m.text","org.matrix.msc1767.text":" * What is it you want to learn?"}} {"origin_server_ts":1682322394016,"event_id":"$Shhi5hZmfNIqcqCSV33qQGjF3F4_L_BVHrPaNuWdFgE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Well, it's complicated. :-)","msgtype":"m.text","org.matrix.msc1767.text":"Well, it's complicated. :-)"}} {"origin_server_ts":1682322412672,"event_id":"$49syIcyoPppyPUJb5AfQGwjGURXBsggsACQnhhtvmgY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"First and foremost: Assignment always causes a collapse (i.e. evaluation of all elements)","msgtype":"m.text","org.matrix.msc1767.text":"First and foremost: Assignment always causes a collapse (i.e. evaluation of all elements)"}} {"origin_server_ts":1682322532746,"event_id":"$KtMmf3FxyXlk7wyJ-mfs0nBo_WyG0c01JOCcs6NGjHc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So all the time taken in that expression should happen during the assignment. Now, a standalone expression will also cause collapse, since it is assumed that any standalone evaluation is only done for the side effects.","msgtype":"m.text","org.matrix.msc1767.text":"So all the time taken in that expression should happen during the assignment. Now, a standalone expression will also cause collapse, since it is assumed that any standalone evaluation is only done for the side effects."}} {"origin_server_ts":1682322564235,"event_id":"$VZJs-S6NaCrdFbtfB0yyGE1B40W7ymNigh4CML8Fgf4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"In other words, change your computation to `0 ⊣ 10 10↓¯10 ¯10↓180 180 180↑300⌽A` and it will take zero time."},{"mimetype":"text/html","body":"In other words, change your computation to 0 ⊣ 10 10↓¯10 ¯10↓180 180 180↑300⌽A<\/code> and it will take zero time."}],"format":"org.matrix.custom.html","body":"In other words, change your computation to `0 ⊣ 10 10↓¯10 ¯10↓180 180 180↑300⌽A` and it will take zero time.","msgtype":"m.text","formatted_body":"In other words, change your computation to 0 ⊣ 10 10↓¯10 ¯10↓180 180 180↑300⌽A<\/code> and it will take zero time."}} {"origin_server_ts":1682322636405,"event_id":"$NZE7p2oSOhkOMs55DtmOtEaOSNRj2lPlkCmOVblnNe0","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I figured assignment would cause it to collapse, in April these functions will be merged into one loop over the array, is it the same in KAP? This is the case for ↑↓⌽⍉/ currently","msgtype":"m.text"}} {"origin_server_ts":1682322695282,"event_id":"$zXJdJYFE5ePv7qrusiodxUr7f2_jdyeFsCs5Yo9w5O8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, collapse is implemented as a single loop that just evaluates each cell in sequence. There are some optimisations for certain cases, but in general that's what happens.","msgtype":"m.text","org.matrix.msc1767.text":"Yes, collapse is implemented as a single loop that just evaluates each cell in sequence. There are some optimisations for certain cases, but in general that's what happens."}} {"origin_server_ts":1682322717724,"event_id":"$Zrl8_Jxnz94qt2uabxViFi7F0U9fZsRJUqDfM3dUXZ8","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Cool, is it multithreaded?","msgtype":"m.text"}} {"origin_server_ts":1682322739204,"event_id":"$EFkz4T3SYK7RYaTrwZbWFiGEJ4YNofk765ZWSlzrSZM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"For example, IotaValue doesn't actually create an array even after collapse.","msgtype":"m.text","org.matrix.msc1767.text":"For example, IotaValue doesn't actually create an array even after collapse."}} {"origin_server_ts":1682322772235,"event_id":"$q-6BK4kCSI1AGFCNY-ViwRCrnosLU_1q0li7mML6pps","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Ok, so the arithmetic progression vector is used as a datatype throughout","msgtype":"m.text"}} {"origin_server_ts":1682322800775,"event_id":"$u13Bd_-X4meomTkTXlzg_T2p37069GoOqV4yl_IEtKM","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"In April that's not the case because of the CL integration, CL wouldn't know what to do with a sparse vector type","msgtype":"m.text"}} {"origin_server_ts":1682322812534,"event_id":"$v0g9nvK6RaFR1PvxzU450hK3zxvmy-Zw8lGUGzyUKKA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, all arrays are internallyuu indexed as a single-dimensional vector.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, all arrays are internallyuu indexed as a single-dimensional vector."}} {"origin_server_ts":1682322816632,"event_id":"$Ojj7tJvANbH9zwqAAqcJb-md354karZgpQ_1TRFtkEU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Yeah, all arrays are internally indexed as a single-dimensional vector.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, all arrays are internally indexed as a single-dimensional vector."},"m.relates_to":{"event_id":"$v0g9nvK6RaFR1PvxzU450hK3zxvmy-Zw8lGUGzyUKKA","rel_type":"m.replace"},"body":" * Yeah, all arrays are internally indexed as a single-dimensional vector.","msgtype":"m.text","org.matrix.msc1767.text":" * Yeah, all arrays are internally indexed as a single-dimensional vector."}} {"origin_server_ts":1682322838939,"event_id":"$AjrVfLYIOzqLL9faop8C-uNrwG1vEiuEbgvBgXZp8zs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Reshaping is added as a layer on top of the vectora.","msgtype":"m.text","org.matrix.msc1767.text":"Reshaping is added as a layer on top of the vectora."}} {"origin_server_ts":1682322840105,"event_id":"$0aljdljJNkz2FzLDWfHN_M4Jlxd77R5G7C1KllKWXxk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Reshaping is added as a layer on top of the vectors.","msgtype":"m.text","org.matrix.msc1767.text":"Reshaping is added as a layer on top of the vectors."},"m.relates_to":{"event_id":"$AjrVfLYIOzqLL9faop8C-uNrwG1vEiuEbgvBgXZp8zs","rel_type":"m.replace"},"body":" * Reshaping is added as a layer on top of the vectors.","msgtype":"m.text","org.matrix.msc1767.text":" * Reshaping is added as a layer on top of the vectors."}} {"origin_server_ts":1682322870074,"event_id":"$E1VaCaJ4q1_oA6w1dciCq4Wu2oeSuKwONIMMMH0tYR8","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Internally they're a 1D Kotlin vector? So Kotlin can use them as vectors without too much friction then?","msgtype":"m.text"}} {"origin_server_ts":1682323004195,"event_id":"$GT2vhwJWF0VPIpgYuVZXdA3pctn9vXu2Kq_h8joXjKw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"No, because they don't *have* to be. The application uses a class called `APLArray` that has a bunch of methods, but the important on here is `.valueAt(Int)`."},{"mimetype":"text/html","body":"No, because they don't have<\/em> to be. The application uses a class called APLArray<\/code> that has a bunch of methods, but the important on here is .valueAt(Int)<\/code>."}],"format":"org.matrix.custom.html","body":"No, because they don't *have* to be. The application uses a class called `APLArray` that has a bunch of methods, but the important on here is `.valueAt(Int)`.","msgtype":"m.text","formatted_body":"No, because they don't have<\/em> to be. The application uses a class called APLArray<\/code> that has a bunch of methods, but the important on here is .valueAt(Int)<\/code>."}} {"origin_server_ts":1682323030464,"event_id":"$6ihbNFr3fHe24R40f_ozSVuUwA4X05OKI2t52LI48xI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"It also has a `.dimensions` property that is a list of dimensions."},{"mimetype":"text/html","body":"It also has a .dimensions<\/code> property that is a list of dimensions."}],"format":"org.matrix.custom.html","body":"It also has a `.dimensions` property that is a list of dimensions.","msgtype":"m.text","formatted_body":"It also has a .dimensions<\/code> property that is a list of dimensions."}} {"origin_server_ts":1682323056318,"event_id":"$Hx7_XMG8s1ap3MYGrnLtkZZEzMN8a8FBUYf8UpigAno","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Ok, I see","msgtype":"m.text"}} {"origin_server_ts":1682323118586,"event_id":"$viNfAdGDvfA2wI0KyHVZ49WbtwwyRrJ6jCXIWG-QuMM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"There is one concrete implementation called `APLArrayImpl` which is a wrapper around a JVM array of `APLValue` instances. But then there is another one called `APLArrayLong` which is a wrapper around a JVM array of `long`. This is used to implement the array that is specialised on long values to avoid boxing."},{"mimetype":"text/html","body":"There is one concrete implementation called APLArrayImpl<\/code> which is a wrapper around a JVM array of APLValue<\/code> instances. But then there is another one called APLArrayLong<\/code> which is a wrapper around a JVM array of long<\/code>. This is used to implement the array that is specialised on long values to avoid boxing."}],"format":"org.matrix.custom.html","body":"There is one concrete implementation called `APLArrayImpl` which is a wrapper around a JVM array of `APLValue` instances. But then there is another one called `APLArrayLong` which is a wrapper around a JVM array of `long`. This is used to implement the array that is specialised on long values to avoid boxing.","msgtype":"m.text","formatted_body":"There is one concrete implementation called APLArrayImpl<\/code> which is a wrapper around a JVM array of APLValue<\/code> instances. But then there is another one called APLArrayLong<\/code> which is a wrapper around a JVM array of long<\/code>. This is used to implement the array that is specialised on long values to avoid boxing."}} {"origin_server_ts":1682323171711,"event_id":"$L1fq60om6NwtRYI4Lm6N2KtJOxXn8mrMm5h2XyT7KOA","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Neat","msgtype":"m.text"}} {"origin_server_ts":1682323193319,"event_id":"$S-M8H__XsjrCPXQwbfjebby3UiRgOJKJXHJdKv9DjUc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Compare the performance of `+/⍳N` vs `+/0.0,⍳N`"},{"mimetype":"text/html","body":"Compare the performance of +/⍳N<\/code> vs +/0.0,⍳N<\/code>"}],"format":"org.matrix.custom.html","body":"Compare the performance of `+/⍳N` vs `+/0.0,⍳N`","msgtype":"m.text","formatted_body":"Compare the performance of +/⍳N<\/code> vs +/0.0,⍳N<\/code>"}} {"origin_server_ts":1682323224379,"event_id":"$Gwf1t4ZQ7sjwA__4VZL0p_oB4T3O71DwdShCBDau50o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The latter upgrades the specialised array to a generic array since it contains both double and long, and is therefore much slower.","msgtype":"m.text","org.matrix.msc1767.text":"The latter upgrades the specialised array to a generic array since it contains both double and long, and is therefore much slower."}} {"origin_server_ts":1682323247617,"event_id":"$qI_xMSE40jXBxCqs2RaBhy0ww0Nvf4BhZSfXuxGJ-AM","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Gotcha","msgtype":"m.text"}} {"origin_server_ts":1682323283316,"event_id":"$tbAUTUfJiJa4SRboL0fAmkPlxEUKFPd6EpxyE_FK_xg","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I'll be presenting a paper at the PLDI ARRAY workshop that's coming up, the paper has some benchmarks of April and Dyalog, would it be all right with you to include some KAP benchmarks asa well? It's the only other APL impl I can think to test, since it's currently maintained and has a similar evaluation model","msgtype":"m.text"}} {"origin_server_ts":1682323305936,"event_id":"$ktwkn-cjHywPAL_eqai2pf7Amw28408icPC9RS03j2s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"(`IotaArray` is always specialised to long)"},{"mimetype":"text/html","body":"(IotaArray<\/code> is always specialised to long)"}],"format":"org.matrix.custom.html","body":"(`IotaArray` is always specialised to long)","msgtype":"m.text","formatted_body":"(IotaArray<\/code> is always specialised to long)"}} {"origin_server_ts":1682323634462,"event_id":"$fvzpa0yya3gQVmgr2_IBQCjrmUplJdmGVI4nnAEWIjM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I mean sure, you can talk about it as much as you want.","msgtype":"m.text","org.matrix.msc1767.text":"I mean sure, you can talk about it as much as you want."}} {"origin_server_ts":1682323687117,"event_id":"$9v0YXJk1INhk1rwpm19TbHIG9sC-u7uFL0wcNmHLtQ8","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Cool, currently I mention KAP as another lazy APL but that's the extent of it, space is at a premium in the paper","msgtype":"m.text"}} {"origin_server_ts":1682323707099,"event_id":"$klFKlqRfMIgQCkff3TabIbE_p6VIQHlwuuRKldspjfw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Where the model really shines is when you're able to elide large swaths of calculations. It becomes more natural to specify calculations on all elements and then pick the ones you want.","msgtype":"m.text","org.matrix.msc1767.text":"Where the model really shines is when you're able to elide large swaths of calculations. It becomes more natural to specify calculations on all elements and then pick the ones you want."}} {"origin_server_ts":1682323714229,"event_id":"$LpCaU2ZxzoXEV9iqUH51uAvS1PFcfuwPVQMtAQWkGy8","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"My table of benchmark results has room for a third column so I thought why not add tests of another APL there","msgtype":"m.text"}} {"origin_server_ts":1682323741656,"event_id":"$A7ur_uE5zZi0Jf1NrGu_py51kZljTOVJoQDL5HzpDpU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Kap was never written for performance though :-)","msgtype":"m.text","org.matrix.msc1767.text":"Kap was never written for performance though :-)"}} {"origin_server_ts":1682323756646,"event_id":"$Udv9EoL-yERUyVlvXTxe-KqzZgMfOh4QUD8DVOF3Als","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Did you read my blog posts on the topic?","msgtype":"m.text","org.matrix.msc1767.text":"Did you read my blog posts on the topic?"}} {"origin_server_ts":1682323789849,"event_id":"$jvVNe4zaOMtorjaitYkPwljzUdEpWW0uuEkLg_-TYY0","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"On that note, here's something from the paper: a Mandelbrot explorer: C ← ⊢⊣{¯3×0.7J0.5-(¯11∘○∘.+⊢⍨)⍵÷⍨⍳⍵+1}¨10*⍳14 ⋄ M ← {+∘⍵⍤*∘2⍣⍺⊢0}∘{D↑X⌽Y⊖C⊃⍨1+⌈/⌊10⍟⊃Y X D←⍵}","msgtype":"m.text"}} {"origin_server_ts":1682323848984,"event_id":"$VUPPFbV0kxS3QvYkO9Sm1g9UoFXlUCGpOUiH4yaSNLc","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I don't think so, where is your blog linked?","msgtype":"m.text"}} {"origin_server_ts":1682323867523,"event_id":"$Waq6Ju9S48v2CPe-2WPopZDhn0HsGQMoRAe76htRBBM","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"In April the bowtie expression ⊢⊣ causes something to be assigned as a virtual array, not rendered","msgtype":"m.text"}} {"origin_server_ts":1682323877565,"event_id":"$u8CWOiRkh9ILNQGCc2NASQLTjzTWOhnFa-SRAURXil0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://blog.dhsdevelopments.com/","msgtype":"m.text","org.matrix.msc1767.text":"https://blog.dhsdevelopments.com/"}} {"origin_server_ts":1682323902230,"event_id":"$JN07w5lceEindfIgQXwpBeY1KiF4TBDCBxYVqJ5w8s8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have a mandelbrot in the demos directory :-)","msgtype":"m.text","org.matrix.msc1767.text":"I have a mandelbrot in the demos directory :-)"}} {"origin_server_ts":1682323910686,"event_id":"$ySPEm9EhT_GAcGpEcAYWhV5XCjCX00IbenQ1xyb2MRk","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Great","msgtype":"m.text"}} {"origin_server_ts":1682323937610,"event_id":"$XwmEzXzup9Kk2edQH7_p4nH1qFaMvHQrKOuu04rpcxY","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"So in this case based on the coordinate vector you pass to M, it zooms to a given order of magnitude and takes a slice out of the matrix","msgtype":"m.text"}} {"origin_server_ts":1682323952133,"event_id":"$ghwUjGO0ubf4LvSxSLQK4qne8axfPhPwEoYEACHya70","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"The biggest matric in vector C is 100 trillion and 1 square","msgtype":"m.text"}} {"origin_server_ts":1682324179147,"event_id":"$uhm2Qktt4T4JKgwYc_suoF2Ei3oJjm9bubA_rL_cuNo","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"If performance isn't the focus I may not include the benchmarks for it, I guess I could try finding a copy of APL2 to compare performance to since I'm using core APL functions, APL2 was written to be pretty fast","msgtype":"m.text"}} {"origin_server_ts":1682324228249,"event_id":"$V5aZqihU3aP1SWkuf4Upoil6oH1Wh3njGb9cCw4Y8LA","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"The highlight of the paper is the system I wrote for generating JIT assembly kernels, I mentioned the idea to you before and now it's working","msgtype":"m.text"}} {"origin_server_ts":1682324520628,"event_id":"$Oe-It2L9IGnbvoJZ_k2NzoOjwBuOamS9bQdSe4iQC2Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There are certainly things in kap that is way, way faster than Dyalog","msgtype":"m.text","org.matrix.msc1767.text":"There are certainly things in kap that is way, way faster than Dyalog"}} {"origin_server_ts":1682324531679,"event_id":"$GV49CxXEX6Egnn7jPyf0w6TYwExR-OVvR_gDctCVPUo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"For example defns","msgtype":"m.text","org.matrix.msc1767.text":"For example defns"}} {"origin_server_ts":1682324534143,"event_id":"$TE8fG2SZcVBjLEvtRIZa7azIS8j6QtG5myXlkIHl3bc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"For example dfns","msgtype":"m.text","org.matrix.msc1767.text":"For example dfns"},"m.relates_to":{"event_id":"$GV49CxXEX6Egnn7jPyf0w6TYwExR-OVvR_gDctCVPUo","rel_type":"m.replace"},"body":" * For example dfns","msgtype":"m.text","org.matrix.msc1767.text":" * For example dfns"}} {"origin_server_ts":1682324584896,"event_id":"$omF0A82lvxHM9zdvu_RSAye8h-vTlH3e_A36QC-eq3I","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I just tried this in KAP but doesn't work: 5 5↑¯40 ¯40↓40 40↓3/20⌽2000000 2000000⍴⍳100","msgtype":"m.text"}} {"origin_server_ts":1682324618340,"event_id":"$Zonj3FU669jmF7jnI2nWxBNVxDlWZRgnR6QX1J7c7Qg","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Doesn't like making a ginormous array even if the array will never actually be written","msgtype":"m.text"}} {"origin_server_ts":1682324672218,"event_id":"$y4TUDCaJ-72SKTeovgLtVt-qrem4pj12liR2kuXZW-8","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"The Mandelbrot's probably faster too if you're doing ops on a giant array and then taking a little slice of it","msgtype":"m.text"}} {"origin_server_ts":1682324947840,"event_id":"$IvCZSCQsaAp1gZrJQbHVJXbdnMSWQEr3tNf72_niDp4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"If you try the mandelbrot implementation in kap, try changing `¨` to `¨∥` to have the computation in parallel."},{"mimetype":"text/html","body":"If you try the mandelbrot implementation in kap, try changing ¨<\/code> to ¨∥<\/code> to have the computation in parallel."}],"format":"org.matrix.custom.html","body":"If you try the mandelbrot implementation in kap, try changing `¨` to `¨∥` to have the computation in parallel.","msgtype":"m.text","formatted_body":"If you try the mandelbrot implementation in kap, try changing ¨<\/code> to ¨∥<\/code> to have the computation in parallel."}} {"origin_server_ts":1682324966029,"event_id":"$fll2ocnXcYAY6fM8268J-e1hk3Wye__qzbZLO2Ci-5c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That should increase the performance by the number of cores.","msgtype":"m.text","org.matrix.msc1767.text":"That should increase the performance by the number of cores."}} {"origin_server_ts":1682325242497,"event_id":"$5Dg11uhzSG_d0hZeEXJQtUVC0YcjtbdFubVQfa1MGX8","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Ok, is parallelism something that's implemented specificially by operator?","msgtype":"m.text"}} {"origin_server_ts":1682325268286,"event_id":"$zsV8tWdmfuMYi1RdeA136wq9gUnt1AU9BdC53ZrwrQc","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Do benchmarks like my B← above not automatically run in parallel?","msgtype":"m.text"}} {"origin_server_ts":1682325309567,"event_id":"$WGK7EckYl2I18ad-WwKDzWRO5j9-_J6WHGNhavz44HE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$omF0A82lvxHM9zdvu_RSAye8h-vTlH3e_A36QC-eq3I"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@phantomics:matrix.org> I just tried this in KAP but doesn't work: 5 5↑¯40 ¯40↓40 40↓3/20⌽2000000 2000000⍴⍳100\n\nThe array is collapsed unless you explicitly discard the result, so prefix it with `0⊣`"},{"mimetype":"text/html","body":"

                    In reply to<\/a> @phantomics:matrix.org<\/a>
                    I just tried this in KAP but doesn't work: 5 5↑¯40 ¯40↓40 40↓3/20⌽2000000 2000000⍴⍳100<\/blockquote><\/mx-reply>The array is collapsed unless you explicitly discard the result, so prefix it with 0⊣<\/code>"}],"format":"org.matrix.custom.html","body":"> <@phantomics:matrix.org> I just tried this in KAP but doesn't work: 5 5↑¯40 ¯40↓40 40↓3/20⌽2000000 2000000⍴⍳100\n\nThe array is collapsed unless you explicitly discard the result, so prefix it with `0⊣`","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @phantomics:matrix.org<\/a>
                    I just tried this in KAP but doesn't work: 5 5↑¯40 ¯40↓40 40↓3/20⌽2000000 2000000⍴⍳100<\/blockquote><\/mx-reply>The array is collapsed unless you explicitly discard the result, so prefix it with 0⊣<\/code>"}} {"origin_server_ts":1682325374507,"event_id":"$HMgaV-lDm74oTzENEWOtSHvKcC9DlwQnyTw_6juqvCM","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Tried that, still get \"array too large\"","msgtype":"m.text"}} {"origin_server_ts":1682325393396,"event_id":"$HzzRdnxd4zXHtEJmLLeH3faglyQ4MelCtZBIwaLkugg","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"And collapsing it should just return the 5×5 array I would think","msgtype":"m.text"}} {"origin_server_ts":1682325809552,"event_id":"$09T4ASle9dZFQ_ToAUAEUChNuWjrFVjKffq9h2Jo4jo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"2000000×2000000 is 4000000000000 elements in size.","msgtype":"m.text","org.matrix.msc1767.text":"2000000×2000000 is 4000000000000 elements in size."}} {"origin_server_ts":1682325829918,"event_id":"$k-E8Wdlhj5T-EPecxNqESSaO-hAeHFg2Z4yHdwbT0MA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Kap is currently limited to 2⋆32 elements.","msgtype":"m.text","org.matrix.msc1767.text":"Kap is currently limited to 2⋆32 elements."}} {"origin_server_ts":1682325842881,"event_id":"$yUM-jG2uBtpg_8tHU020dgWU68SgX6GpRs-WwhjRglk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That limit is there regardless of whether the array is materialised or not.","msgtype":"m.text","org.matrix.msc1767.text":"That limit is there regardless of whether the array is materialised or not."}} {"origin_server_ts":1682325912636,"event_id":"$o5Z9SIDtOWe9wb4RhA4RHuKzh-VZ4CrrItRXMa2-zKE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have considered looseing that limit, but there would be a performance impact that I'm not sure is worth it.","msgtype":"m.text","org.matrix.msc1767.text":"I have considered looseing that limit, but there would be a performance impact that I'm not sure is worth it."}} {"origin_server_ts":1682325939563,"event_id":"$Qa09wduIDUPl4Gv2HPPhUo5OlQ71XF7QLe5S1z7C5fA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Especially for the js version, since 64-bit numbers are very slow in js.","msgtype":"m.text","org.matrix.msc1767.text":"Especially for the js version, since 64-bit numbers are very slow in js."}} {"origin_server_ts":1682326098674,"event_id":"$7Ir4T8ynTjwqhuigHFd10kl0pgAkiLaxpZm0GGpo9So","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Ok, 5 5↑¯40 ¯40↓40 40↓3/20⌽20000 20000⍴⍳10000 works","msgtype":"m.text"}} {"origin_server_ts":1682326130642,"event_id":"$CRnz26rkhE7KvQ6hF6Apwbx_7jTPnmiO12GxXAbQ5jY","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I'm taking off for now but I'll experiment more with KAP later, good job on the GUI","msgtype":"m.text"}} {"origin_server_ts":1682326140896,"event_id":"$zDnVX2KZB7y5UpX9bi_TFXjBuFU_OPUgoXBREmT8H4M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks :-)","msgtype":"m.text","org.matrix.msc1767.text":"Thanks :-)"}} {"origin_server_ts":1682326145025,"event_id":"$LxHbeWigajSEuTjN8v7cVEm0SEoQMUB9GsV6sMqb9i8","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"One last question: is there a way to run it from the CLI via gradle?","msgtype":"m.text"}} {"origin_server_ts":1682326158957,"event_id":"$JUxZjDXnN27jwi-wgau-960tfTfnTu1x5TEnOlLFyo4","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"For some quick tests","msgtype":"m.text"}} {"origin_server_ts":1682326172062,"event_id":"$ofTTuvNFR4v4b0Dk3Y5vWhCN7dCk9phTYE0Kg2JIWvw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Via gradle? No. But you can build the text based version using gradle and run it manually.","msgtype":"m.text","org.matrix.msc1767.text":"Via gradle? No. But you can build the text based version using gradle and run it manually."}} {"origin_server_ts":1682326208791,"event_id":"$2RlyUkpJei_xAH62Z-LnRhKk03ckx2d4_8SGqQxKJzE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Check the `client-java` project"},{"mimetype":"text/html","body":"Check the client-java<\/code> project"}],"format":"org.matrix.custom.html","body":"Check the `client-java` project","msgtype":"m.text","formatted_body":"Check the client-java<\/code> project"}} {"origin_server_ts":1682326212476,"event_id":"$_xgHOwQNBT-aKay09wjtYYfDOIYEytZS900lC0clTW0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Check the `client-java` module"},{"mimetype":"text/html","body":"Check the client-java<\/code> module"}],"format":"org.matrix.custom.html","body":"Check the `client-java` module","msgtype":"m.text","formatted_body":"Check the client-java<\/code> module"},"m.relates_to":{"event_id":"$2RlyUkpJei_xAH62Z-LnRhKk03ckx2d4_8SGqQxKJzE","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * Check the `client-java` module"},{"mimetype":"text/html","body":" * Check the client-java<\/code> module"}],"format":"org.matrix.custom.html","body":" * Check the `client-java` module","msgtype":"m.text","formatted_body":" * Check the client-java<\/code> module"}} {"origin_server_ts":1682326220062,"event_id":"$CL6Kw9m7E9xqVtu6drvnU27wOfJYcY5_gru7RL0TZe8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Once built, you should have a jar you can run.","msgtype":"m.text","org.matrix.msc1767.text":"Once built, you should have a jar you can run."}} {"origin_server_ts":1682326238279,"event_id":"$nH1mSOCucZQIUkgr42mLUaU9b_zYfGd72L5fwA4gWP4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You might be able to run it via gradle as well, now that I think about it.","msgtype":"m.text","org.matrix.msc1767.text":"You might be able to run it via gradle as well, now that I think about it."}} {"origin_server_ts":1682326282939,"event_id":"$70HLMhbcJ9Bm5k_JekxE3oQitcG6UAptN41rlwTEdsI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Perhaps `./gradlew client-java:run` ?"},{"mimetype":"text/html","body":"Perhaps ./gradlew client-java:run<\/code> ?"}],"format":"org.matrix.custom.html","body":"Perhaps `./gradlew client-java:run` ?","msgtype":"m.text","formatted_body":"Perhaps ./gradlew client-java:run<\/code> ?"}} {"origin_server_ts":1682326293844,"event_id":"$2Kcli8W7JEeQg-ZJ2zjYB6emxHxMjCdsrq9SBk6bo5w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I don't have a linux mahcine in front of me so I can't test.","msgtype":"m.text","org.matrix.msc1767.text":"I don't have a linux mahcine in front of me so I can't test."}} {"origin_server_ts":1682326308004,"event_id":"$mIvgSWjxt0mC5enKC5paGypTWtlvU7J07bwPQ5Mklso","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Let's see...","msgtype":"m.text"}} {"origin_server_ts":1682326377352,"event_id":"$RfehBjbcYHuCrM5jHejWV-EBug5_VqAzn4aGigC0S0Y","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Exception in thread \"main\" Error at: 1:0: Error loading file: standard-lib.kap: java.io.FileNotFoundException: standard-lib.kap (No such file or directory)\n","msgtype":"m.text"}} {"origin_server_ts":1682326420752,"event_id":"$XJTctJApqQxpjW4lxXYEzby_H0Hgs5i2l3ySYYzFqrg","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I can check into it later, thanks, talk soon","msgtype":"m.text"}} {"origin_server_ts":1682326476854,"event_id":"$78xS9kqUSvhj5t-FPDfHS5e5nIZQAs8jhvNMa8mUkVY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Try adding `--lib-path`"},{"mimetype":"text/html","body":"Try adding --lib-path<\/code>"}],"format":"org.matrix.custom.html","body":"Try adding `--lib-path`","msgtype":"m.text","formatted_body":"Try adding --lib-path<\/code>"}} {"origin_server_ts":1682326492094,"event_id":"$GePKD2-pY-Y9huH_DsslqCl5qc3BYq2eMHpq3emBPqw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"`--lib-path=path-to-stdlib`"},{"mimetype":"text/html","body":"--lib-path=path-to-stdlib<\/code>"}],"format":"org.matrix.custom.html","body":"`--lib-path=path-to-stdlib`","msgtype":"m.text","formatted_body":"--lib-path=path-to-stdlib<\/code>"}} {"origin_server_ts":1682326509471,"event_id":"$xalbxVu30GUUCR0a4P3qGySSFfluqyt_d__ht7C9cYE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's in $SOURCE/array/standard-lib","msgtype":"m.text","org.matrix.msc1767.text":"It's in $SOURCE/array/standard-lib"}} {"origin_server_ts":1682326535640,"event_id":"$az1ZRnAx9WH0tSd68huUx9ass6zWmDyo_bgNUMI9TzA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh wait... Running it from gradle.","msgtype":"m.text","org.matrix.msc1767.text":"Oh wait... Running it from gradle."}} {"origin_server_ts":1682326543527,"event_id":"$vXKldRDKiQAazo4S4YHfzxWR0NmpUylaTN0wIJ_29hk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So you can either run it from the commandline, adding the flag","msgtype":"m.text","org.matrix.msc1767.text":"So you can either run it from the commandline, adding the flag"}} {"origin_server_ts":1682326562297,"event_id":"$jRQmuRBiq197vYU2up-bSlEo65w9FNM28dVRFCQZOYU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Or you can cd to $SOURCE/array before starting it","msgtype":"m.text","org.matrix.msc1767.text":"Or you can cd to $SOURCE/array before starting it"}} {"origin_server_ts":1682326590789,"event_id":"$EDz_JVd6sZaHPPD4vuHBwh3X0ZQR_Tb-keTUbMDVuMs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Or you can edit the code in the source file in client-java to add the correct library path.","msgtype":"m.text","org.matrix.msc1767.text":"Or you can edit the code in the source file in client-java to add the correct library path."}} {"origin_server_ts":1682326595857,"event_id":"$v3GszTrXmJwREe7YvDaPEHbft5IwPYHIQ9WvOW8YESw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Or you can wait until I fix it :-)","msgtype":"m.text","org.matrix.msc1767.text":"Or you can wait until I fix it :-)"}} {"origin_server_ts":1682408382125,"event_id":"$ZFzd_KCDmyjMMZNkPnF7C1sh50zP9Bb_Z2DiZbndHK0","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I've tried building the native executable but I get this error: Exception in thread \"main\" java.lang.Error: /tmp/15324051352990952812.c:7:15: error: unknown type name 'bool'","msgtype":"m.text"}} {"origin_server_ts":1682409531106,"event_id":"$R0s0HcUVySEwyrurL-AyfiwgeVGyqjFvM6igaJqSzcw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Huh?!","msgtype":"m.text","org.matrix.msc1767.text":"Huh?!"}} {"origin_server_ts":1682409547111,"event_id":"$2Lc4EkaBbVkOdvYswweqERX0-62tNTIZY-EY-eCJiBg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's truly bizarre.","msgtype":"m.text","org.matrix.msc1767.text":"That's truly bizarre."}} {"origin_server_ts":1682409557220,"event_id":"$voZDKUcjV46pdqKri2ORYiqpOmsI6oKT4GgTofqy5kM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What platform are you building on?","msgtype":"m.text","org.matrix.msc1767.text":"What platform are you building on?"}} {"origin_server_ts":1682409602735,"event_id":"$Syk5MfGGs9o1YHBn_fFs-o85_Z2wmkkpFdQj9mw9e38","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And how did you try to build?","msgtype":"m.text","org.matrix.msc1767.text":"And how did you try to build?"}} {"origin_server_ts":1682410220413,"event_id":"$CkkdECLln0bDh6Z1IPR1hNSvWJviAsNO5prrgF9_zM4","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Building on MX Linux, kernel 5.10.0-18","msgtype":"m.text"}} {"origin_server_ts":1682410238069,"event_id":"$JzLy2Iy8PPHmkaol98k_9uvowknmefRCZ9ecfRGJO50","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I did ./gradlew build","msgtype":"m.text"}} {"origin_server_ts":1682412268747,"event_id":"$Iq67TSd1cKaGE_VIL2c8ym7oB2ZLrb8zBYW6c0k9aaA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: What is mx linux?"},{"mimetype":"text/html","body":"
                    phantomics<\/a>: What is mx linux?"}],"format":"org.matrix.custom.html","body":"phantomics: What is mx linux?","msgtype":"m.text","formatted_body":"phantomics<\/a>: What is mx linux?"}} {"origin_server_ts":1682412279499,"event_id":"$FqN6h8eH0llic-zhRhhpXB8JN-T8atovkCwRlsDTmaY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I've tested it on Fedora and Ubuntu","msgtype":"m.text","org.matrix.msc1767.text":"I've tested it on Fedora and Ubuntu"}} {"origin_server_ts":1682412287356,"event_id":"$OygYKmkcAgclZfITJaELEn99M-vXGczASZHjXJaUSxI","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"https://mxlinux.org","msgtype":"m.text","formatted_body":"https://mxlinux.org<\/a>"}} {"origin_server_ts":1682412299522,"event_id":"$ym8_PPUuY79JrcBHmt0fsutFpnFN8sYNi6NHniynRo8","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"It's a .deb distro, should work if it does on Ubnutu","msgtype":"m.text"}} {"origin_server_ts":1682412305821,"event_id":"$3iHSqUTY4EEtasw2n0A3W9drBlb2MvP4PTHB6rj0B40","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"*Ubuntu","msgtype":"m.text"}} {"origin_server_ts":1682418292945,"event_id":"$PKJ_yRHzhRxDXoF1F4d26pQ1LaQOzVBVQ2oN8eWoS60","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, I think I know where it comes from","msgtype":"m.text","org.matrix.msc1767.text":"OK, I think I know where it comes from"}} {"origin_server_ts":1682419088804,"event_id":"$mYR0EX1XhKMskVSwbPa9rISnAMPD2thIcG4G9sGv_AY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I think it's because for some reason the compiler you use doesn't know about `bool`."},{"mimetype":"text/html","body":"I think it's because for some reason the compiler you use doesn't know about bool<\/code>."}],"format":"org.matrix.custom.html","body":"I think it's because for some reason the compiler you use doesn't know about `bool`.","msgtype":"m.text","formatted_body":"I think it's because for some reason the compiler you use doesn't know about bool<\/code>."}} {"origin_server_ts":1682419098988,"event_id":"$cCm6UZD3tBOApVzyZg8JuKMnpAxKJO-2k6fuswvtDl8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"It's specified in the `icu.def`."},{"mimetype":"text/html","body":"It's specified in the icu.def<\/code>."}],"format":"org.matrix.custom.html","body":"It's specified in the `icu.def`.","msgtype":"m.text","formatted_body":"It's specified in the icu.def<\/code>."}} {"origin_server_ts":1682419115572,"event_id":"$Vs18bJTAjlAdwJ7oPpe0AFt6IyYg0Pvud_Nmu1okpQA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Check the `.def` files for `bool` and replace it with `int`. That should fix it."},{"mimetype":"text/html","body":"Check the .def<\/code> files for bool<\/code> and replace it with int<\/code>. That should fix it."}],"format":"org.matrix.custom.html","body":"Check the `.def` files for `bool` and replace it with `int`. That should fix it.","msgtype":"m.text","formatted_body":"Check the .def<\/code> files for bool<\/code> and replace it with int<\/code>. That should fix it."}} {"origin_server_ts":1682419143350,"event_id":"$x2MQlQAq_sB2DO0i7558bw2i7eTnNB_cIKeEp4uHiB8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Perhaps your mx linux comes with an older gcc that defaults to c99 (boot was introduced in a later version of C I think)","msgtype":"m.text","org.matrix.msc1767.text":"Perhaps your mx linux comes with an older gcc that defaults to c99 (boot was introduced in a later version of C I think)"}} {"origin_server_ts":1682419154462,"event_id":"$Gfzk3KDn_2qz4RoyBV-hu_GsjeMOb-b8RYmoD1KjTLA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Perhaps your mx linux comes with an older gcc that defaults to c99 (bool was introduced in a later version of C I think)","msgtype":"m.text","org.matrix.msc1767.text":"Perhaps your mx linux comes with an older gcc that defaults to c99 (bool was introduced in a later version of C I think)"},"m.relates_to":{"event_id":"$x2MQlQAq_sB2DO0i7558bw2i7eTnNB_cIKeEp4uHiB8","rel_type":"m.replace"},"body":" * Perhaps your mx linux comes with an older gcc that defaults to c99 (bool was introduced in a later version of C I think)","msgtype":"m.text","org.matrix.msc1767.text":" * Perhaps your mx linux comes with an older gcc that defaults to c99 (bool was introduced in a later version of C I think)"}} {"origin_server_ts":1682419169846,"event_id":"$3Enk8s63wKP9zHBJHP8bjsXqOEyLAVNaqD5_WFoYP00","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If it works, let me know and I can change this in the code.","msgtype":"m.text","org.matrix.msc1767.text":"If it works, let me know and I can change this in the code."}} {"origin_server_ts":1682419193707,"event_id":"$sw0sCRZ-XFk-IJoaGavZqk8EOn8IkXVrYnVrC3eAYgM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(`bool` needs `#include` or something)","msgtype":"m.text","formatted_body":"(bool<\/code> needs #include<stdbool.h><\/code> or something)"}} {"origin_server_ts":1682419684450,"event_id":"$ME0Tie-LEY7ieDgFcmc6lx7Q97o9JG3SB2v7OjwJVWk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, so I should include that in the def I guess.","msgtype":"m.text","org.matrix.msc1767.text":"OK, so I should include that in the def I guess."}} {"origin_server_ts":1682419749924,"event_id":"$qZY9JkMoA8_1k2MhPu972Qm_1u9E76L8Xrj_Lv2-r6o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Although replacing it with `int` is probably better."},{"mimetype":"text/html","body":"Although replacing it with int<\/code> is probably better."}],"format":"org.matrix.custom.html","body":"Although replacing it with `int` is probably better.","msgtype":"m.text","formatted_body":"Although replacing it with int<\/code> is probably better."}} {"origin_server_ts":1682419826898,"event_id":"$UnEN_FU-6XE4lzeqMPPUDgaSn1WJdLtERY-UNr8Gzk4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Either that, or add stdbool.h to the `headers` declaration in the top libe."},{"mimetype":"text/html","body":"Either that, or add stdbool.h to the headers<\/code> declaration in the top libe."}],"format":"org.matrix.custom.html","body":"Either that, or add stdbool.h to the `headers` declaration in the top libe.","msgtype":"m.text","formatted_body":"Either that, or add stdbool.h to the headers<\/code> declaration in the top libe."}} {"origin_server_ts":1682419831445,"event_id":"$csIyfizbZZ6EeYQBiJ4ckWFx3fY16Ib2utmkeXB5QuA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Either that, or add stdbool.h to the `headers` declaration in the top line."},{"mimetype":"text/html","body":"Either that, or add stdbool.h to the headers<\/code> declaration in the top line."}],"format":"org.matrix.custom.html","body":"Either that, or add stdbool.h to the `headers` declaration in the top line.","msgtype":"m.text","formatted_body":"Either that, or add stdbool.h to the headers<\/code> declaration in the top line."},"m.relates_to":{"event_id":"$UnEN_FU-6XE4lzeqMPPUDgaSn1WJdLtERY-UNr8Gzk4","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * Either that, or add stdbool.h to the `headers` declaration in the top line."},{"mimetype":"text/html","body":" * Either that, or add stdbool.h to the headers<\/code> declaration in the top line."}],"format":"org.matrix.custom.html","body":" * Either that, or add stdbool.h to the `headers` declaration in the top line.","msgtype":"m.text","formatted_body":" * Either that, or add stdbool.h to the headers<\/code> declaration in the top line."}} {"origin_server_ts":1682476423666,"event_id":"$o7W9rHMVJoT0Bf4c1SaC9kMwrx-Zl4NbmOV-LBV7DwM","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I'll try that","msgtype":"m.text"}} {"origin_server_ts":1682478068918,"event_id":"$PGJgpug5fyuIX1K-eoSQUC2vfPVeaPoP-8DnPAXyyWE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: let me know the result and I can change it."},{"mimetype":"text/html","body":"phantomics<\/a>: let me know the result and I can change it."}],"format":"org.matrix.custom.html","body":"phantomics: let me know the result and I can change it.","msgtype":"m.text","formatted_body":"phantomics<\/a>: let me know the result and I can change it."}} {"origin_server_ts":1682483497034,"event_id":"$tMU097Sgs3EBI39Ao3C_IDsoOSJ_12ZAPgTS0AgC6aU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: To run the native version, build it using: `./gradlew text-client:linuxBinaries`"},{"mimetype":"text/html","body":"phantomics<\/a>: To run the native version, build it using: ./gradlew text-client:linuxBinaries<\/code>"}],"format":"org.matrix.custom.html","body":"phantomics: To run the native version, build it using: `./gradlew text-client:linuxBinaries`","msgtype":"m.text","formatted_body":"phantomics<\/a>: To run the native version, build it using: ./gradlew text-client:linuxBinaries<\/code>"}} {"origin_server_ts":1682483510800,"event_id":"$VHrUyQ1Vrkp3FBlTmM2eTMyBGpX0fLvOzBba6L8xDgo","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Tried it, now I get: Exception in thread \"main\" java.lang.Error: /tmp/4528787461617442738.c:1:10: fatal error: 'jansson.h' file not found","msgtype":"m.text"}} {"origin_server_ts":1682483514063,"event_id":"$leVO2EOE5JddmjCMhM_Em54upkjQaaSc-zppR9nXv3Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Then run it like so:\n```\ntext-client/build/bin/linux/releaseExecutable/text-client.kexe --lib-path=array/standard-lib\n```"},{"mimetype":"text/html","body":"

                    Then run it like so:<\/p>\n

                    text-client/build/bin/linux/releaseExecutable/text-client.kexe --lib-path=array/standard-lib\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"Then run it like so:\n```\ntext-client/build/bin/linux/releaseExecutable/text-client.kexe --lib-path=array/standard-lib\n```","msgtype":"m.text","formatted_body":"

                    Then run it like so:<\/p>\n

                    text-client/build/bin/linux/releaseExecutable/text-client.kexe --lib-path=array/standard-lib\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1682483524820,"event_id":"$7Cgf5gMb_TSbBbTMhOe6mGOZjCKlIgLRJ7CBBTscCmw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: Install the jansson-dev package"},{"mimetype":"text/html","body":"phantomics<\/a>: Install the jansson-dev package"}],"format":"org.matrix.custom.html","body":"phantomics: Install the jansson-dev package","msgtype":"m.text","formatted_body":"phantomics<\/a>: Install the jansson-dev package"}}
                    {"origin_server_ts":1682483576250,"event_id":"$4aumDyIMP6cOeTOh6b5fNO0dA5c4rnsKvmHfYE8_evM","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Same jannson error when I try the text-client build","msgtype":"m.text"}}
                    {"origin_server_ts":1682483587789,"event_id":"$JTuYvhjMVlJVq1rwooFlkU-EKEjR8owjqPr8ZWrlc5E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, did you install the package?","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, did you install the package?"}}
                    {"origin_server_ts":1682483599257,"event_id":"$j-XlZIfA7mD0qe8tyw0zCY9uklKOqb2E4V5HIlm_Kq4","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Will try that now...","msgtype":"m.text"}}
                    {"origin_server_ts":1682483808680,"event_id":"$cNL2_mSjI_9XK62uPYJC9Bp0iuvQe6QWVC2imFswDXM","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Getting this error: file:///home/user/array/array/src/linuxMain/kotlin/array/charsets-linux.kt:27:20 Type mismatch: inferred type is Int but Boolean was expected","msgtype":"m.text"}}
                    {"origin_server_ts":1682483822084,"event_id":"$d4-QiEM--Jfaj0IKLaySLuouW3CYa6YUoE8YU1ihcu8","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Clearly caused by the mod to icu.def","msgtype":"m.text"}}
                    {"origin_server_ts":1682483862825,"event_id":"$aJCr9nCDOigzLeYv2sWBOKuIWR1eDW2851Fm-pLXQxA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, change the if(x) to if(x!=0)","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, change the if(x) to if(x!=0)"}}
                    {"origin_server_ts":1682484008582,"event_id":"$YXGgt4SLX0G-LboV9oBjYt-XZKuHHEXMNci7zVKacUg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's in two places in that file.","msgtype":"m.text","org.matrix.msc1767.text":"It's in two places in that file."}}
                    {"origin_server_ts":1682484022735,"event_id":"$SYUAoEKh8JAuNVFZkyBLiYnh_nNdRRH7EytTuA65ri8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Line 27 and 41 if I remember correctly.","msgtype":"m.text","org.matrix.msc1767.text":"Line 27 and 41 if I remember correctly."}}
                    {"origin_server_ts":1682484040860,"event_id":"$mrt4Uop8QWxSD8UDZIDGv1YW183tPPuh42fuhG4Cn5I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(I don't have the file available right now so I can't check)","msgtype":"m.text","org.matrix.msc1767.text":"(I don't have the file available right now so I can't check)"}}
                    {"origin_server_ts":1682484064574,"event_id":"$g6L05alVOwzOC09lzAThzKeyKR4potD2WiiIza0ZRpo","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I see this line: if (icu.icu_u_success(errorCode.value))","msgtype":"m.text"}}
                    {"origin_server_ts":1682484104768,"event_id":"$GYxH6JSpMr_KAKhC6QXsPM2XE-7-mP4lIVpoPOJW2QM","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"No if statements that contain just a value, always the result of a function","msgtype":"m.text"}}
                    {"origin_server_ts":1682484198977,"event_id":"$AlwdqTKTnd3k3TlrrX8ptWbQ7QHiLiLAksH3om-wNo0","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I changed to (0!=icu.icu_u_success(errorCode.value))","msgtype":"m.text"}}
                    {"origin_server_ts":1682484298136,"event_id":"$06A1XJcXaa79KZIWao701PpeNDHChqVkyrGMAeKLtS4","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"It built, I tried running it as you said and it tells me: Error: Invalid arg: --lib-path=array/standard-lib","msgtype":"m.text"}}
                    {"origin_server_ts":1682484346040,"event_id":"$kj5to8v3tXYiqp-vMvGwLh56d8p_qQkNT14-L5-moeI","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"But then in the options printout it tells me that --lib-path is a valid argument","msgtype":"m.text"}}
                    {"origin_server_ts":1682485819105,"event_id":"$qzrugGWvrUnTi9-QC9g0u6LCSMJWWYG86Hq4DKzY0Ks","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Change `if (icu.icu_u_success(errorCode.value))` to `if (icu.icu_u_success(errorCode.value) != 0)`"},{"mimetype":"text/html","body":"Change if (icu.icu_u_success(errorCode.value))<\/code> to if (icu.icu_u_success(errorCode.value) != 0)<\/code>"}],"format":"org.matrix.custom.html","body":"Change `if (icu.icu_u_success(errorCode.value))` to `if (icu.icu_u_success(errorCode.value) != 0)`","msgtype":"m.text","formatted_body":"Change if (icu.icu_u_success(errorCode.value))<\/code> to if (icu.icu_u_success(errorCode.value) != 0)<\/code>"}}
                    {"origin_server_ts":1682485865574,"event_id":"$17T3E3qRtquNpiaIfZDy2VGTPDSzQeeJAXf6Ux4RPxc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$06A1XJcXaa79KZIWao701PpeNDHChqVkyrGMAeKLtS4"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@phantomics:matrix.org> It built, I tried running it as you said and it tells me: Error: Invalid arg: --lib-path=array/standard-lib\n\nCan you paste the entire interaction, including your command as well as the full output?"},{"mimetype":"text/html","body":"
                    In reply to<\/a> @phantomics:matrix.org<\/a>
                    It built, I tried running it as you said and it tells me: Error: Invalid arg: --lib-path=array/standard-lib<\/blockquote><\/mx-reply>Can you paste the entire interaction, including your command as well as the full output?"}],"format":"org.matrix.custom.html","body":"> <@phantomics:matrix.org> It built, I tried running it as you said and it tells me: Error: Invalid arg: --lib-path=array/standard-lib\n\nCan you paste the entire interaction, including your command as well as the full output?","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @phantomics:matrix.org<\/a>
                    It built, I tried running it as you said and it tells me: Error: Invalid arg: --lib-path=array/standard-lib<\/blockquote><\/mx-reply>Can you paste the entire interaction, including your command as well as the full output?"}} {"origin_server_ts":1682485955720,"event_id":"$vxKmu4JkJ20qkUOqbyXXFk5yOc3y3RV2iBOVSVaq9mM","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"text-client/build/bin/linux/releaseExecutable/text-client.kexe --lib-path=array/standard-lib\n\nNative version. This will run slower than the Java version.\nError: Invalid arg: --lib-path=array/standard-lib\n\nOptions:\n --help Print a summary of options\n --lib-path Location of the KAP standard library\n --load File to load\n --no-repl Don't start the REPL\n --no-standard-lib Don't load standard-lib\n","msgtype":"m.text"}} {"origin_server_ts":1682485990381,"event_id":"$OiVPj_ENZkF4Q4_jxwAw8pQWP0QrTGWu12PeWI2NrHY","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"It's funny, the options immediately contradict the error msg","msgtype":"m.text"}} {"origin_server_ts":1682486152940,"event_id":"$Hkol6Rioj01LEMlDiy6S5B7M6IWGLQJkg3N_AxoIieQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Copy&paste error?","msgtype":"m.text","org.matrix.msc1767.text":"Copy&paste error?"}} {"origin_server_ts":1682486171873,"event_id":"$zVXf3ymhSXVBZYrBqaSXTE1l4vfgBMJuVEjRxRNmGIk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Perhaps the commandline you provided contains some nonprintable characters?","msgtype":"m.text","org.matrix.msc1767.text":"Perhaps the commandline you provided contains some nonprintable characters?"}} {"origin_server_ts":1682486176588,"event_id":"$Zm_CNII_5pzSgh9siDS8QsxdK-NFaflsnpgRIE9_nsY","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"That Error: is the error message","msgtype":"m.text"}} {"origin_server_ts":1682486190199,"event_id":"$oPn1iwhd0Pp9In_tS0VtoPcHnhbiXWHeQFWkMZcWyOg","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I'll try manually copying it","msgtype":"m.text"}} {"origin_server_ts":1682486232263,"event_id":"$YPsdZDSCHSQPWfhqBscYLlQL8lKjihhHJX086uO1i7o","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Ok, it works, when I pasted it from here some unprintable chars must have come with it","msgtype":"m.text"}} {"origin_server_ts":1682486280067,"event_id":"$9uOZ5voNj80LE1hBo-Bw_7D-Nhe80lhKPO7_YbeiFgU","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Thanks for the help, now you can make the bool/int change to the code if it makes sense, may help with systems like mine, maybe it's a C99 issue","msgtype":"m.text"}} {"origin_server_ts":1682486303816,"event_id":"$DB1j6o_n4s7aPoWcR1BBDbKVotMzCQ5H4UAr7vwF39Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah. I'll change it.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah. I'll change it."}} {"origin_server_ts":1682486314481,"event_id":"$QbUO4_WCPVYk5b4nJ501DD96EIGLGNW3mJeuY6AzLLM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The resulting code will be identical anyway. :-)","msgtype":"m.text","org.matrix.msc1767.text":"The resulting code will be identical anyway. :-)"}} {"origin_server_ts":1682486373826,"event_id":"$8tgPtInRv0sWGnS1Tnv2K3g0-dA0rPjXjR4TI9bfGUo","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I was reading about Kotlin native, looks like it takes a performance hit compared to the JVM","msgtype":"m.text"}} {"origin_server_ts":1682486416776,"event_id":"$hdVqvkR3jOvVujD0ZhZJpeqN6HR-t9q8FgbXNZhrMno","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, and quite a bad one too.","msgtype":"m.text","org.matrix.msc1767.text":"Yes, and quite a bad one too."}} {"origin_server_ts":1682486444655,"event_id":"$hWWHs2mkD185w8jNoJXy_AXgb8Q5EhSKCWRDHDUyQ0A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's significantly slower than JVM. 20 times is not uncommon.","msgtype":"m.text","org.matrix.msc1767.text":"It's significantly slower than JVM. 20 times is not uncommon."}} {"origin_server_ts":1682486469962,"event_id":"$6shPUjjy_cTFT6JYrGHDwX03fPJcbMpA-44q9GTBYs4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The average is 5-10 times slower, if I'm not mistaken.","msgtype":"m.text","org.matrix.msc1767.text":"The average is 5-10 times slower, if I'm not mistaken."}} {"origin_server_ts":1682486581974,"event_id":"$MntDx5E1F2iCc86W-WJjZzAvyjTAz7neAh0mjWyf4Ik","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Wow, ok, kind of defeats the purpose of using it in an embedded or low-power system if that's the case","msgtype":"m.text"}} {"origin_server_ts":1682486619114,"event_id":"$1BmuZFUSFUKFNdP4LPohF0YVcM_6mb3bPle_oipDoMw","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Unless it's something where performance is not a factor at all and you're doing something really simple","msgtype":"m.text"}} {"origin_server_ts":1682486819886,"event_id":"$nngEPhaKXh-pgC1nK9L2nFm3oPj6Bi8YIAy1wbRZhUM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"My understanding is that they are working on improving performance. The native compiler is still considered experimental.","msgtype":"m.text","org.matrix.msc1767.text":"My understanding is that they are working on improving performance. The native compiler is still considered experimental."}} {"origin_server_ts":1682486825662,"event_id":"$n8OelaqaqXzbwuq_-89srBh5pHFCl8Xkl6YQ_iA_Dpc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It used to be way worse.","msgtype":"m.text","org.matrix.msc1767.text":"It used to be way worse."}} {"origin_server_ts":1682486871624,"event_id":"$KtOLUrHJVEYr6qXAEqgX6v0Y6vRMApgiZCgup2H5zRE","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I see, it's a nice thing to have, also considering the specter of legal threats from Oracle over JVM distribution","msgtype":"m.text"}} {"origin_server_ts":1682486884630,"event_id":"$hGFS4ONqiScEAODrfggFJ5yoZjElxC15VC8S6fXR3yM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Also, kap has a tendency to hit some of the worse edge-cases when it comes to native performance. The allocator is really quite bad, and since kap uses a lot of boxing using very short-lived objects, the native code suffers (while the JVM is very good at optimising these)","msgtype":"m.text","org.matrix.msc1767.text":"Also, kap has a tendency to hit some of the worse edge-cases when it comes to native performance. The allocator is really quite bad, and since kap uses a lot of boxing using very short-lived objects, the native code suffers (while the JVM is very good at optimising these)"}} {"origin_server_ts":1682486921948,"event_id":"$aaDcsdJ3UuYd2E20Al6ZjG8cTnIe6SviGDlVHBb-k-Q","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I see","msgtype":"m.text"}} {"origin_server_ts":1682486951455,"event_id":"$EeyMfBsOspmi-A71ghggt2ntDZM2LAHYJXd9A_rzxB8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You can get decent performance out of the native compiler if you use mostly primitive classes and arrays.","msgtype":"m.text","org.matrix.msc1767.text":"You can get decent performance out of the native compiler if you use mostly primitive classes and arrays."}} {"origin_server_ts":1682487001813,"event_id":"$_TScg8aLFqd2TD5vvEQvkCAdQp6LOR8KtS4RBTGFXrM","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"So using unboxed arrays should be ok? If I'm doing operations like ⌽⍉↑↓/ will that be fairly quick?","msgtype":"m.text"}} {"origin_server_ts":1682487030569,"event_id":"$VPPKntvGJBiGI962ehUTb-JeKi0cHxo1WM4XvSt37_g","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"They won't need intermediate boxed storage on a primitive array","msgtype":"m.text"}} {"origin_server_ts":1682487039899,"event_id":"$g8iAyamH_UeiwP4uLjSP3KdmJydPL6ZJ-EJEVK--Q4Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, at least in princi0ple.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, at least in princi0ple."}} {"origin_server_ts":1682487041963,"event_id":"$0ZTTBO_HgAnDXZjHXAu3Au1Fa9v70ilLW1QeY26_e78","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Yeah, at least in principle.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, at least in principle."},"m.relates_to":{"event_id":"$g8iAyamH_UeiwP4uLjSP3KdmJydPL6ZJ-EJEVK--Q4Q","rel_type":"m.replace"},"body":" * Yeah, at least in principle.","msgtype":"m.text","org.matrix.msc1767.text":" * Yeah, at least in principle."}} {"origin_server_ts":1682487055055,"event_id":"$-KBvpq6LK8XhaN3A_k3CnaOeKjUcdG6LLQSLiLB7maU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That said, it's still much slower than JVM. Just not as bad :-)","msgtype":"m.text","org.matrix.msc1767.text":"That said, it's still much slower than JVM. Just not as bad :-)"}} {"origin_server_ts":1682487171302,"event_id":"$Z4lMhK-wlAhI8Mt5MS8pMvY-y6zEpSCw6s9zT6Ry6bg","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Another thing, I wanted to ask about your understanding of lazy evaluation. AFAIK KAP and April have fairly similar evaluation models, but someone said based on my description of April is that it isn't doing \"real lazy evaluation.\"","msgtype":"m.text"}} {"origin_server_ts":1682487194178,"event_id":"$kvS_0-IQmWJ7jlT6Lm8EuqeLqDGtJ8spxyUy96LmndM","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I'm not sure what to make of this, there are points where stuff is forced to render in April but you can override those few points and receive thunks instead of actual output in CL if you want to","msgtype":"m.text"}} {"origin_server_ts":1682487266393,"event_id":"$OFn6ly2_T5Fqraj17IRlJi1cecH4F68XwkTftoCDpuo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: Whoever said it was probably a haskell guy :-)"},{"mimetype":"text/html","body":"
                    phantomics<\/a>: Whoever said it was probably a haskell guy :-)"}],"format":"org.matrix.custom.html","body":"phantomics: Whoever said it was probably a haskell guy :-)","msgtype":"m.text","formatted_body":"phantomics<\/a>: Whoever said it was probably a haskell guy :-)"}} {"origin_server_ts":1682487309561,"event_id":"$Er5V8WwKmx3nP5pNY6nj5-2hKn-e-5HIYANIL5E_XvE","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Does haskell work by passing the literal code around or something? And it's not interpreted/compiled until it's time to materialize the data?","msgtype":"m.text"}} {"origin_server_ts":1682487499892,"event_id":"$1FSgZwIfr1jTZk6tOZ2_p4K2p2-ROmeROMK-kAy46II","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Haskell has a very strict lazy evaluation model. It also enforces purity on functions.","msgtype":"m.text","org.matrix.msc1767.text":"Haskell has a very strict lazy evaluation model. It also enforces purity on functions."}} {"origin_server_ts":1682487540103,"event_id":"$68GyMueo6nhtJWPDO49dm8vtno7r-11UXf8BE4uFzjI","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"The classic lazy APL papers i.e. Johnston and Abrams describe using thunks in a way similar to what I do, also similar to KAP as I understand","msgtype":"m.text"}} {"origin_server_ts":1682487591166,"event_id":"$04r6j6aJkTwYau-nqetQgavxj-LGYp_pneU1X2Airuk","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I tried being strict with lazy eval, but things like Game of Life grow exponentially in that case, so strict lazy eval is \"opt-in\" in April by using the ⊢⊣ bowtie expression","msgtype":"m.text"}} {"origin_server_ts":1682487629278,"event_id":"$fxnu61FgZ2yu94wINDTKIrCfS5o-N3Se6RYbijAtV6g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right.","msgtype":"m.text","org.matrix.msc1767.text":"Right."}} {"origin_server_ts":1682487642082,"event_id":"$ju3iBWzB6cF3G_gRjz8bO548rmi8GzgIOQmZao8tBPM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Kap has the `defer` function to do that."},{"mimetype":"text/html","body":"Kap has the defer<\/code> function to do that."}],"format":"org.matrix.custom.html","body":"Kap has the `defer` function to do that.","msgtype":"m.text","formatted_body":"Kap has the defer<\/code> function to do that."}} {"origin_server_ts":1682487671497,"event_id":"$9jZ_i5KZaTnjTsWjoxeUlMfmXJVlQV7Dca_jdvvH7tY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I also take a much more pragmatic approach. Assigning a result to a variable always causes evaluation.","msgtype":"m.text","org.matrix.msc1767.text":"I also take a much more pragmatic approach. Assigning a result to a variable always causes evaluation."}} {"origin_server_ts":1682487696916,"event_id":"$mXvM2KabRTY-WvpCdcm8FavQlftxnp12o30yc1_RW8A","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Bringing lazy eval to a language where it isn't traditional requires things like that, but in situations where you know lazy will work it can make an amazing difference","msgtype":"m.text"}} {"origin_server_ts":1682487702885,"event_id":"$-hamkK6z9EorzPBijDDdx55T3WZLhE-ZCDPIWrD3558","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In practice that gives the expected behaviour almost all the time to the point that most people don't have to think about it.","msgtype":"m.text","org.matrix.msc1767.text":"In practice that gives the expected behaviour almost all the time to the point that most people don't have to think about it."}} {"origin_server_ts":1682487722518,"event_id":"$lbxQYQCtXrs_EEOLIG8U-DLgQ5hYVN3FsD78LVGi5sY","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"If you do A←defer 2 3 4⍴⍳9 does it still evaluate?","msgtype":"m.text"}} {"origin_server_ts":1682487823812,"event_id":"$J7S6N5jVgeaPB_EwNNoPoXcka-rimHMIWwwBFCCk_MA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It evaluates. However, there is an optimisation there.","msgtype":"m.text","org.matrix.msc1767.text":"It evaluates. However, there is an optimisation there."}} {"origin_server_ts":1682487842314,"event_id":"$Yt9dhdvlXEkTCroPRl8OhNGBpzg30nFrjKpQXSjon_8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Evaluation of a resized iota array is a zero-cost operation.","msgtype":"m.text","org.matrix.msc1767.text":"Evaluation of a resized iota array is a zero-cost operation."}} {"origin_server_ts":1682487864898,"event_id":"$vMunpkXAE6AX0PK_tkUn17qU-puZP3SZOQR79nPcMEo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Oh wait. You mean with `defer`?"},{"mimetype":"text/html","body":"Oh wait. You mean with defer<\/code>?"}],"format":"org.matrix.custom.html","body":"Oh wait. You mean with `defer`?","msgtype":"m.text","formatted_body":"Oh wait. You mean with defer<\/code>?"}} {"origin_server_ts":1682488075538,"event_id":"$7CeROnhqDMxbfaTERktB8Yb2eiIrKCJ_5pNC9I_UTO8","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Yes","msgtype":"m.text"}} {"origin_server_ts":1682488101456,"event_id":"$095wrQhf4G4s22_J5XdsmHdZHG2M5qTxvCcejyiE1Uc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Currently, the assignment wil force evaluation even when using defer.","msgtype":"m.text","org.matrix.msc1767.text":"Currently, the assignment wil force evaluation even when using defer."}} {"origin_server_ts":1682488123840,"event_id":"$WKs2IT7PSj2jMpydQuuG49Xq5n1IBtEd5zC7O7qTS2g","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Ok, the ability to assign thunks could be useful at times","msgtype":"m.text"}} {"origin_server_ts":1682488125941,"event_id":"$xd2PSSujuNo-ywegfyE4CZGEI0RHxuP71f3APRGPcAQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"`defer` can be used to delay function calls. Otherwise functions are always called. For example:"},{"mimetype":"text/html","body":"defer<\/code> can be used to delay function calls. Otherwise functions are always called. For example:"}],"format":"org.matrix.custom.html","body":"`defer` can be used to delay function calls. Otherwise functions are always called. For example:","msgtype":"m.text","formatted_body":"defer<\/code> can be used to delay function calls. Otherwise functions are always called. For example:"}} {"origin_server_ts":1682488161129,"event_id":"$PkaitNCf0sWpIz35HOtxuf9oJmtI_8LgHm-63XopIY4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Consider this: https://kapdemo.dhsdevelopments.com/clientweb2/#1%20%E2%8C%B7%20(io%3Aprintln%201)%20(io%3Aprintln%202)","msgtype":"m.text","org.matrix.msc1767.text":"Consider this: https://kapdemo.dhsdevelopments.com/clientweb2/#1%20%E2%8C%B7%20(io%3Aprintln%201)%20(io%3Aprintln%202)"}} {"origin_server_ts":1682488174052,"event_id":"$5X-koAlMTllv4EUJ5UJxvmItP6l4K2n4MRSvM729t0I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This prints 1 and 2 before returning 2.","msgtype":"m.text","org.matrix.msc1767.text":"This prints 1 and 2 before returning 2."}} {"origin_server_ts":1682488177866,"event_id":"$p7Pt3raYrxoxARA9OytM4RomzHt3uoGUVHqMs7_6NY8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But this does not:","msgtype":"m.text","org.matrix.msc1767.text":"But this does not:"}} {"origin_server_ts":1682488182387,"event_id":"$Xg6Y0W46CgYDZvN25w7RBdNv9Af-qA7X3914cU_asiU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#1%20%E2%8C%B7%20(io%3Aprintln%20defer%201)%20(io%3Aprintln%20defer%202)","msgtype":"m.text","org.matrix.msc1767.text":"https://kapdemo.dhsdevelopments.com/clientweb2/#1%20%E2%8C%B7%20(io%3Aprintln%20defer%201)%20(io%3Aprintln%20defer%202)"}} {"origin_server_ts":1682488279203,"event_id":"$i-DnF5dQDUaZYiGgiqKvn0hXKdj1mcyZ1_3EXtcl3c4","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Ok, since 1 is deferred","msgtype":"m.text"}} {"origin_server_ts":1682488297285,"event_id":"$FvoaurQLpV_vbtheNgXTAeuVdwzLY7x8ULhADf4qLJg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"The call to `io:println` is deferred, yes."},{"mimetype":"text/html","body":"The call to io:println<\/code> is deferred, yes."}],"format":"org.matrix.custom.html","body":"The call to `io:println` is deferred, yes.","msgtype":"m.text","formatted_body":"The call to io:println<\/code> is deferred, yes."}} {"origin_server_ts":1682488309631,"event_id":"$od-wrpdgID6KDNCTs5kB14D47gBKkB0LVFdtI_yg7n4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Anyway, I wrote a blog post on the topic: https://blog.dhsdevelopments.com/lazy-evaluation-helping-implementation-of-transform-by-mask-in-kap","msgtype":"m.text","org.matrix.msc1767.text":"Anyway, I wrote a blog post on the topic: https://blog.dhsdevelopments.com/lazy-evaluation-helping-implementation-of-transform-by-mask-in-kap"}} {"origin_server_ts":1682488393429,"event_id":"$YM4us5XOPm6SLwUIcWiOnso2dF-LW4vc4VVgE4dP4Tg","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"For example I create the virtual input for my Mandelbrot explorer with this: C ← ⊢⊣{¯ 3×.7J.5-{⍵∘.+⍨⍵×0J1.0}⊢⊣⍵÷⍨⍳⍵+1}¨10*⍳14","msgtype":"m.text"}} {"origin_server_ts":1682488413364,"event_id":"$ArI9x-4CNhCmiFtFJdxs5neGd-dBlMgsDDsn02_tHss","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, one of my standard benchmarks (computing primes) takes 350 ms on JVM and 3000 ms on Linux native.","msgtype":"m.text","org.matrix.msc1767.text":"OK, one of my standard benchmarks (computing primes) takes 350 ms on JVM and 3000 ms on Linux native."}} {"origin_server_ts":1682488420438,"event_id":"$dQXgRyZKFA85Gb9FFK9LWiY-Pp6liLalg_77p32cZKA","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"This would be a bit expensive to store if it were rendered","msgtype":"m.text"}} {"origin_server_ts":1682488436347,"event_id":"$Hc-mjwmgSeSZwlb3c1BGhilLyki-734B2NM7yC9PmcA","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Kotlin native has some catching up to do","msgtype":"m.text"}} {"origin_server_ts":1682488440471,"event_id":"$N1EJTjrm0D910_r248mFRfbZ_HB6gtBOvRwqoG3oGyA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah."}} {"origin_server_ts":1682488489909,"event_id":"$kwYi6uJ-mkTqNtkXCGZJSXQhMhCVQlpFCJ52GjMzwbM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If I'm not wrong, it used to be 100 time slower back when it was very new. :-)","msgtype":"m.text","org.matrix.msc1767.text":"If I'm not wrong, it used to be 100 time slower back when it was very new. :-)"}} {"origin_server_ts":1682488630614,"event_id":"$N5gqP_iRqI39IEfsbgcNvU7FWFquv_QC7q9zX1i_obg","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"You could use unrendered arrays to \"query\" a large structure","msgtype":"m.text"}} {"origin_server_ts":1682488674291,"event_id":"$k4Ql39jAEd9EzPDBT0P0-eGeUgfCunUcHr8zWRGRGFY","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"For example, say you have a massive time-series table A, and a vector I that contains the index of the first transaction of each day in A","msgtype":"m.text"}} {"origin_server_ts":1682488719500,"event_id":"$9aNiEDxKQ8yprE69H1_30iQxxkc4t3YsRmKdCjv0lfA","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"You can create a vector of daily transactions by doing D←⊢⊣A⊆⍨I⍸⍳≢A, (should be, haven't tested)","msgtype":"m.text"}} {"origin_server_ts":1682488836719,"event_id":"$sKd_NVUAVta_mTxJxPEFecFiOiRCo7RlSLBaK7Zv_9o","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Now you have transactions grouped by day, you can store another vector of largest daily transactions by doing something like L←⊢⊣{⌈/3⊃⍵}¨D, assuming that the third column in each row stores the transaction amount","msgtype":"m.text"}} {"origin_server_ts":1682488875252,"event_id":"$uHkqlpvovj9Y2veG77dCSpyWuQ7LctKLyUNxzDQLTws","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Finally you can get the highest transaction for the last 3 days with ¯3↑L, and only then is the data actually fetched and rendered","msgtype":"m.text"}} {"origin_server_ts":1682490566256,"event_id":"$DzW1UdS3yZL-XkFpjeU7rztDM87weaFtXhKnPTScxQQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I thought about that stuff. For me, the problem is that everything relies on the dimensions always being available. So if I don't know the exact size of some result, I cannot have lazy results.","msgtype":"m.text"}} {"origin_server_ts":1682490635944,"event_id":"$AlJbDf8Ymzie7Xyyc_ZbZDZYu6lxoIJbP0Im8L2zxb8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now defer is an exception to this, but as soon as any operation wants to know the size, it evaluates, which means it will compute a deferred result much earlier than you may expect.","msgtype":"m.text"}} {"origin_server_ts":1682490881673,"event_id":"$CRl0FujgGz4oZ2NUySAHhQ8zgQlkMAUVgqDVbE2AGoE","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Interesting, I have separate operations to find the shape of an array and render it, this data runs along separate \"channels,\" if you will","msgtype":"m.text"}} {"origin_server_ts":1682490919471,"event_id":"$qH1oXpYsUcA8xE0ZmHVW4SGjRc1WpGmCo8p6xlcIuII","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Shaping operations often depend on the shape of the previous array, like for 2↓3/A the shape of the 2↓ depends on the shape of the 3/","msgtype":"m.text"}} {"origin_server_ts":1682490948219,"event_id":"$aRS-x0a3rF9GWS3rPtgrOKsCQfqsm7xNY4D5w61-sms","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Granted, for some operations you must evaluate the function to render its shape, as for S~' '","msgtype":"m.text"}} {"origin_server_ts":1682490974376,"event_id":"$uaJ9tkMccJARydROtE_lAGf-euIOB8N4LeQh_BhydXM","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"But for operations that don't need to render to know the shape the shaping and rendering phases can be separate","msgtype":"m.text"}} {"origin_server_ts":1682491508869,"event_id":"$tGe5FWLLZqUVaYiGxhp8v84kTtOY5st9KyMZMb59DZA","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"For example you can figure the shape of D above as long as you know the shapes of I and A","msgtype":"m.text"}} {"origin_server_ts":1682492580785,"event_id":"$YjE_niqQt9vGU-AjeVvuQa_G4gFil4i1liT3QEAXZKI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: It could be like that for me as well, but due to a lower-level design decision, it doesn't."},{"mimetype":"text/html","body":"phantomics<\/a>: It could be like that for me as well, but due to a lower-level design decision, it doesn't."}],"format":"org.matrix.custom.html","body":"phantomics: It could be like that for me as well, but due to a lower-level design decision, it doesn't.","msgtype":"m.text","formatted_body":"phantomics<\/a>: It could be like that for me as well, but due to a lower-level design decision, it doesn't."}} {"origin_server_ts":1682492666136,"event_id":"$V2-t7KC66XjvAWc7de0oGxpfl3fvNX2f68gaUk4v7FY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$tGe5FWLLZqUVaYiGxhp8v84kTtOY5st9KyMZMb59DZA"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@phantomics:matrix.org> For example you can figure the shape of D above as long as you know the shapes of I and A\n\nRight, and I can do that."},{"mimetype":"text/html","body":"
                    In reply to<\/a> @phantomics:matrix.org<\/a>
                    For example you can figure the shape of D above as long as you know the shapes of I and A<\/blockquote><\/mx-reply>Right, and I can do that."}],"format":"org.matrix.custom.html","body":"> <@phantomics:matrix.org> For example you can figure the shape of D above as long as you know the shapes of I and A\n\nRight, and I can do that.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @phantomics:matrix.org<\/a>
                    For example you can figure the shape of D above as long as you know the shapes of I and A<\/blockquote><\/mx-reply>Right, and I can do that."}} {"origin_server_ts":1682492726249,"event_id":"$v3lucvqLpVOREXFjAcKOmWNAaE1G2ov8TIgXxdNvemA","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Do you find there's a benefit to doing it that way?","msgtype":"m.text"}} {"origin_server_ts":1682492780240,"event_id":"$fqCLIc34gf1qhHFXOu_JnAajW_MXW465ucbbMHa9shw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Well, it's just a very early design decision. For example when you do `A+B` you need to know the dimensions of both so that you can raise an error if the dimensions don't match."},{"mimetype":"text/html","body":"Well, it's just a very early design decision. For example when you do A+B<\/code> you need to know the dimensions of both so that you can raise an error if the dimensions don't match."}],"format":"org.matrix.custom.html","body":"Well, it's just a very early design decision. For example when you do `A+B` you need to know the dimensions of both so that you can raise an error if the dimensions don't match.","msgtype":"m.text","formatted_body":"Well, it's just a very early design decision. For example when you do A+B<\/code> you need to know the dimensions of both so that you can raise an error if the dimensions don't match."}} {"origin_server_ts":1682492793720,"event_id":"$sSfQNfTyw15d4CnkCv2i1PGH9tFsnJQIhAdtT8aeWbQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You need the dimensions pretty much all the time.","msgtype":"m.text","org.matrix.msc1767.text":"You need the dimensions pretty much all the time."}} {"origin_server_ts":1682492807073,"event_id":"$UPJjXWIYYD566F9pmC2bFsWT5gGRJoA3dc02pwKPiX8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So I just decided early on that the dimensions must always be available.","msgtype":"m.text","org.matrix.msc1767.text":"So I just decided early on that the dimensions must always be available."}} {"origin_server_ts":1682492843912,"event_id":"$PB49X8dXNIO0LGf-wa5kTbQBJ4ej9gJyaWkpnl3xmeY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's a problem of course when implementing SQL support. Ideally you want to represent the result as a lazy array before you know how many rows match.","msgtype":"m.text","org.matrix.msc1767.text":"That's a problem of course when implementing SQL support. Ideally you want to represent the result as a lazy array before you know how many rows match."}} {"origin_server_ts":1682492943016,"event_id":"$i65d10t1vzVlgzcn6x2gFGex62ieARPtryF3HquGuJU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's particularly visible with SQL, but anything where the dimensions of the result depends on the every single element in the input.","msgtype":"m.text","org.matrix.msc1767.text":"It's particularly visible with SQL, but anything where the dimensions of the result depends on the every single element in the input."}} {"origin_server_ts":1682493030857,"event_id":"$NZ-QISy7AaMzD9M-PibcyQeS3RmYQADQ_iQvX4Wi0jo","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I see, in April's case finding the shapes of A and B can be done without rendering them if all the operations to find them are content-independent (i.e. not ~∪∩ or similar functions)","msgtype":"m.text"}} {"origin_server_ts":1682493045329,"event_id":"$70z03ivPMOdNHMEqN6RYZ8nuzykcB8cyD1IVXGU-VfM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Or something like `A ⊂ B` where you need to fully evaluate both arguments before you know the output dimensions."},{"mimetype":"text/html","body":"Or something like A ⊂ B<\/code> where you need to fully evaluate both arguments before you know the output dimensions."}],"format":"org.matrix.custom.html","body":"Or something like `A ⊂ B` where you need to fully evaluate both arguments before you know the output dimensions.","msgtype":"m.text","formatted_body":"Or something like A ⊂ B<\/code> where you need to fully evaluate both arguments before you know the output dimensions."}} {"origin_server_ts":1682493065913,"event_id":"$7_4F7pggiJp23s_r1OztbweT0MOLGFa7w-y0PUnkYPc","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"If there is a content dependent function in the hierarchy, then its output will be rendered as part of shaping but the stuff downstream from it does not need to render, just refer to the output of the content-dependent function","msgtype":"m.text"}} {"origin_server_ts":1682493177675,"event_id":"$Ou3LxS-0FxVIsGcEB0yxUfotZn8wsm5vVNkeA1KdUuk","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Are you building a SQL interface into KAP?","msgtype":"m.text"}} {"origin_server_ts":1682493289614,"event_id":"$oLiI5onXN3-ciFC48229iYR5pd26byI96Ti9UrE_Yyc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"One already exists","msgtype":"m.text","org.matrix.msc1767.text":"One already exists"}} {"origin_server_ts":1682493369596,"event_id":"$v-i2IRwh4NLU1Ve0X_DtqsNiJrYWOcMCI1EmyOyuh7U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Here's an example from the testcases: https://codeberg.org/loke/array/src/branch/master/array/src/jvmTest/kotlin/array/SQLTest.kt#L63","msgtype":"m.text","org.matrix.msc1767.text":"Here's an example from the testcases: https://codeberg.org/loke/array/src/branch/master/array/src/jvmTest/kotlin/array/SQLTest.kt#L63"}} {"origin_server_ts":1682493463813,"event_id":"$zRPNbekolq3rHLO_lry3FZfeehYSz7rPNWBuVhl46FE","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Ok, I see you're interfacing with APL using the \"insert into foo values\"","msgtype":"m.text"}} {"origin_server_ts":1682493524782,"event_id":"$SiQpNrYzkZn4Tnnlyh2pD9EklRPcvPKduswVdJOr-kU","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Extremely cool, would be good to see some write-ups of the feature set","msgtype":"m.text"}} {"origin_server_ts":1682493536257,"event_id":"$rymYx5MnZSz_KyxPUvUCUPS30x9_eicoHZuHhxAa1-Q","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I've been thinking about an April integration with Apache Arrow","msgtype":"m.text"}} {"origin_server_ts":1682493589154,"event_id":"$YYrBDpazCDbejfde7JCAr5xx9hRQ_d3TFDjRIRunqRI","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"So this updatePrepared function runs the sql:prepare statement filling in the ? with elements of the 3x2 matrix after splitting it is what I gather","msgtype":"m.text"}} {"origin_server_ts":1682493996109,"event_id":"$qKc5JThtsfQvxysMb9fVtL_bG-u2K7Ly1xtv7OAkRgo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right. You create a prepared statement and then automatically applies it on a 2-dimensional array. This leverages database features so that there is no need to re-parse the query for each row.","msgtype":"m.text","org.matrix.msc1767.text":"Right. You create a prepared statement and then automatically applies it on a 2-dimensional array. This leverages database features so that there is no need to re-parse the query for each row."}} {"origin_server_ts":1682494021181,"event_id":"$j4Tqvq4vh8Nf1Tqo6IghdJFTq6pkXLlf4XPEAOnwLT4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"In JDBC this is translated to a single `PreparedStatement` with multiple set and update calls."},{"mimetype":"text/html","body":"In JDBC this is translated to a single PreparedStatement<\/code> with multiple set and update calls."}],"format":"org.matrix.custom.html","body":"In JDBC this is translated to a single `PreparedStatement` with multiple set and update calls.","msgtype":"m.text","formatted_body":"In JDBC this is translated to a single PreparedStatement<\/code> with multiple set and update calls."}} {"origin_server_ts":1682495150209,"event_id":"$7WQXFk8acqLUrQFqzq8i6QoC5fKk-YfjJlGQZEdmdiI","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Very cool, the DB thing is a great feature, would be good to publicize","msgtype":"m.text"}} {"origin_server_ts":1682495765125,"event_id":"$EzRLa_mXMppqUjZme5B_UCpu57Hhw-0jYlTQogYgQBE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I will add a section on that in the documentation.","msgtype":"m.text","org.matrix.msc1767.text":"I will add a section on that in the documentation."}} {"origin_server_ts":1682495820478,"event_id":"$MaOAu4jKsEYh4fFinDV-Orpddc3ZMbvuFBJKslbtFAA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"As for apache arrow, I could easily create a kap array time that sits in front of an arrow array, but the problem is that once you want to actually do something with that array you'll not be able to take advantage of arrow anymore.","msgtype":"m.text","org.matrix.msc1767.text":"As for apache arrow, I could easily create a kap array time that sits in front of an arrow array, but the problem is that once you want to actually do something with that array you'll not be able to take advantage of arrow anymore."}} {"origin_server_ts":1682495841548,"event_id":"$9yFVzRu5wEQyurR4wtYSGxnyfwAgrz9Rf2ZMQeyGghc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Unless you expose separate functions for the arrow functionality.","msgtype":"m.text","org.matrix.msc1767.text":"Unless you expose separate functions for the arrow functionality."}} {"origin_server_ts":1682495852675,"event_id":"$hVLvaZSA6_9LOzAaUYnGZjzlHRdbEQHGbalQKorMXPQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That would probably be the best approach I think.","msgtype":"m.text","org.matrix.msc1767.text":"That would probably be the best approach I think."}} {"origin_server_ts":1682495862574,"event_id":"$0nqdDM0hGOxd9fUQ6edocHcLk1VGQbLytaR4Wi8e3k4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This is because arrow has different semantics.","msgtype":"m.text","org.matrix.msc1767.text":"This is because arrow has different semantics."}} {"origin_server_ts":1682496395060,"event_id":"$kQsxUi9wl7yV9l3CNfa_hRlo3KvqUd4_7du1OjPbc1s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: what timezone are you in by the way?"},{"mimetype":"text/html","body":"
                    phantomics<\/a>: what timezone are you in by the way?"}],"format":"org.matrix.custom.html","body":"phantomics: what timezone are you in by the way?","msgtype":"m.text","formatted_body":"phantomics<\/a>: what timezone are you in by the way?"}} {"origin_server_ts":1682496428515,"event_id":"$K0WihuXOm0f4uUyU6B8phOeVnWCWB08oOtStHfbDzlg","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"UTC-6","msgtype":"m.text"}} {"origin_server_ts":1682496530177,"event_id":"$y2zVrUaL1Uu4A9Tf79c4VyTp_gtvXWJ9msrtGLcigmc","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"In my case Arrow should be interfacable by creating a class representing an Arrow DB table with a generator function that treats the table as a matrix and fetches the item at a given column/row","msgtype":"m.text"}} {"origin_server_ts":1682496606774,"event_id":"$3-tKttLTO668YwFkkW8VHOpuzlk6ceagUDWEc8F7kv8","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"That way something like the 3↑L example above would only actually query Arrow when it's time to fetch the handful of rows that go into the output","msgtype":"m.text"}} {"origin_server_ts":1682496629922,"event_id":"$8uJyBjlJE7uwOGiMtGgs1V-rOv4qVOw1dd2KFgRzDU8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"With arrow you do have the dimensions even before reading the data, no?","msgtype":"m.text","org.matrix.msc1767.text":"With arrow you do have the dimensions even before reading the data, no?"}} {"origin_server_ts":1682496725064,"event_id":"$taSYR0FXh47W2uYrf5zc2qigELiciPRq0TJP9o5hApg","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Yes","msgtype":"m.text"}} {"origin_server_ts":1682496767993,"event_id":"$LlXJflXF5LN8-sjHc0ykRxv3a0FvWzSXY06aIOwPt2E","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"L's length is the same as D's length is the same as I's length, the length of I is all you need to figure that of L and D","msgtype":"m.text"}} {"origin_server_ts":1682496808446,"event_id":"$4st9fNdkfZ0ZT3Wa8oP6I2ul4TYRvK2leuMDY_kMriQ","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Although with ↑ the shape doesn't depend on the base shape, just the argument (assuming no dimensions are elided)","msgtype":"m.text"}} {"origin_server_ts":1682496820850,"event_id":"$vqYwX01BGZGp-olI2Ast5QWPAGtskEDcSHvg_4IgMd0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, then it should be trivial to create an interface for kap","msgtype":"m.text","org.matrix.msc1767.text":"OK, then it should be trivial to create an interface for kap"}} {"origin_server_ts":1682496828541,"event_id":"$5EJfRVLoIbPNBkvJgWMR4V4fMAn1FLOWZ9CIePhTDWU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Not sure how useful it is though :-)","msgtype":"m.text","org.matrix.msc1767.text":"Not sure how useful it is though :-)"}} {"origin_server_ts":1682496850914,"event_id":"$1WuDYk4uUca4ig4Vo94nxy8VxH9Rsn00QTgeOnttAz0","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Columnar time-series database with APL instead of K","msgtype":"m.text"}} {"origin_server_ts":1682496870784,"event_id":"$JjZQP5UzPulp6lKrTker-J1ynGLet8LekYBEUKn8RYg","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"There was a study by a fintech consulting firm that found Arrow could beat kdb's performance sometimes","msgtype":"m.text"}} {"origin_server_ts":1682496930544,"event_id":"$U7ppqjMyaVQOw1UB1bmVBRB5Qm5yyhP9VCigD3US6uE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, but at least for kap there would be a second API to work with it. You'd have to use an array-specific API to do extractions.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, but at least for kap there would be a second API to work with it. You'd have to use an array-specific API to do extractions."}} {"origin_server_ts":1682496963991,"event_id":"$nvNLFHAU9PKxbwvxOP4qM_PK6dkq0Hcp2KtjgKztGS4","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"That would be the case with any system, the advantage is expressing queries in such a succinct way","msgtype":"m.text"}} {"origin_server_ts":1682496978369,"event_id":"$wOeTRfxyIinG7q_LOoS1QEYcY13DJW9pcx8Y04nPjO4","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"You could probably express all queries in a major application in one page of APL","msgtype":"m.text"}} {"origin_server_ts":1682497105038,"event_id":"$R4CZ0nNnn4OD5-Cz4fTptRvhBPUmd0rL_3PQeXJqpso","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"But let's say you want to take a sum of a column in arrow. Even if I were to integrate arrow support, you wouldn't be able to use `+/[0] A` to sum it, because that wouldn't use the arrow features."},{"mimetype":"text/html","body":"But let's say you want to take a sum of a column in arrow. Even if I were to integrate arrow support, you wouldn't be able to use +/[0] A<\/code> to sum it, because that wouldn't use the arrow features."}],"format":"org.matrix.custom.html","body":"But let's say you want to take a sum of a column in arrow. Even if I were to integrate arrow support, you wouldn't be able to use `+/[0] A` to sum it, because that wouldn't use the arrow features.","msgtype":"m.text","formatted_body":"But let's say you want to take a sum of a column in arrow. Even if I were to integrate arrow support, you wouldn't be able to use +/[0] A<\/code> to sum it, because that wouldn't use the arrow features."}} {"origin_server_ts":1682497125196,"event_id":"$ei_KhI5VtAfYb67Nvn56tkJJU0AEStuOGQUvjgqi27c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"You'd be using something like `arrow:sum A`"},{"mimetype":"text/html","body":"You'd be using something like arrow:sum A<\/code>"}],"format":"org.matrix.custom.html","body":"You'd be using something like `arrow:sum A`","msgtype":"m.text","formatted_body":"You'd be using something like arrow:sum A<\/code>"}} {"origin_server_ts":1682497305613,"event_id":"$O9bIbX4auMiOu8RJiHKZVeHsM8z84ggLAQ5PpsAwXsU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: so it's only about 02:20 over there?"},{"mimetype":"text/html","body":"phantomics<\/a>: so it's only about 02:20 over there?"}],"format":"org.matrix.custom.html","body":"phantomics: so it's only about 02:20 over there?","msgtype":"m.text","formatted_body":"phantomics<\/a>: so it's only about 02:20 over there?"}} {"origin_server_ts":1682497368496,"event_id":"$1SGEno0qlY6CKSoYl57CXJkj7jhf311NrlGHzOJ0O0k","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Yes","msgtype":"m.text"}} {"origin_server_ts":1682497407339,"event_id":"$uE1yciXD3EWsdzpy4mn5nvGOOZdBHBOVbfHf_eto8Ho","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"In cases like that I would write a combinatoric that would use the arrow method, correct","msgtype":"m.text"}} {"origin_server_ts":1682497432627,"event_id":"$rUcQbMu0tdBh9ITCWtRe6c6ESddSDzbsg9ZvL-KtJxs","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"The vacomp-reduce class would have a case where its base is an arrow object that would dispatch to use the arrow method","msgtype":"m.text"}} {"origin_server_ts":1682497472556,"event_id":"$fFfw-Zml0ggEghBRVjIa9xmnZ87QkLT-ocSPOEnghrA","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Alternately, I could force-render the input, fetching each element from the Arrow store, putting them in a vector and then doing +/ as usual","msgtype":"m.text"}} {"origin_server_ts":1682497500081,"event_id":"$ELnmv4Qr77X0CLDjLm-me3gW1VF0eQrvOgRZ6gOt2Z4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But then you wouldn't actually be able to take advantage of arrow's benefits.","msgtype":"m.text","org.matrix.msc1767.text":"But then you wouldn't actually be able to take advantage of arrow's benefits."}} {"origin_server_ts":1682497549364,"event_id":"$vUGKbqxdlTdybOeV5x4j02IyYmadkNHuO4LaY7tOCmE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That said, most people overestimate the need for high performance. Most datasets are small enough that even the native-code version of kap could handle it with no issues :-)","msgtype":"m.text","org.matrix.msc1767.text":"That said, most people overestimate the need for high performance. Most datasets are small enough that even the native-code version of kap could handle it with no issues :-)"}} {"origin_server_ts":1682497572929,"event_id":"$Gz-Nte_s4m1HjRkv705I5ieSPNVperJcWTonGebBoBY","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Yes, with my performance work I'm looking at ML as a possible target field","msgtype":"m.text"}} {"origin_server_ts":1682497627794,"event_id":"$KDryxp3wzbYmot60KZAS_RVpBTBiQXQTrn46h752GG8","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I'm generating x86 assembly just in time now, the natural next target is GPU assembly langs","msgtype":"m.text"}} {"origin_server_ts":1682497665177,"event_id":"$0_59OG8WM2nSkNwMjh0j06r6ZEb06gkbX_pTesOED4U","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Co-dfns managed to achieve about 1/3 the speed of PyTorch, but it's using ArrayFire which is several abstraction levels above the GPU","msgtype":"m.text"}} {"origin_server_ts":1682497702751,"event_id":"$jvcCcIMlRqTDH9kvExUqqgfZBm3AeE9sM07dZbo4i4w","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"This project https://github.com/NervanaSystems/maxas developed a native GPU assembler for the Nvidia Maxwell arch, it achieved performance sometimes 10x that of CUDA","msgtype":"m.text","formatted_body":"This project https://github.com/NervanaSystems/maxas<\/a> developed a native GPU assembler for the Nvidia Maxwell arch, it achieved performance sometimes 10x that of CUDA"}} {"origin_server_ts":1682497879413,"event_id":"$cqjc1ZFbNhY5FpYn411OLnqr0BuDeJ9SOuM9lE7tT-g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Interesting. That's not in scope for my project.","msgtype":"m.text","org.matrix.msc1767.text":"Interesting. That's not in scope for my project."}} {"origin_server_ts":1682497911024,"event_id":"$TYeU0qhzEEMBizXbkOyqKTpX9HpktVO8jcrW0YoW1Hg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Here's the performance difference between JVM and Native by the way:\n```\nJVM:\n\nprimes: avg=3063.7, median=3020.5, min=2928, max=3316, stddev=1.0008113154443872\nvar lookup scope: avg=20467.6, median=20241.5, min=20146, max=21258, stddev=1.0001491293481208\ncontrib bench: avg=3022.0, median=3086.0, min=2918, max=3149, stddev=1.0002527251462061\nsimple sum: avg=2165.2, median=2145.0, min=2135, max=2300, stddev=1.0002517722890958\nmultiple call: avg=1053.4, median=1027.5, min=1009, max=1125, stddev=1.0005401318354343\n\nNative Linux:\n\nprimes: avg=788.8, median=861.0, min=590, max=955, stddev=1.0085759445987144\nvar lookup scope: avg=4203.7, median=4145.0, min=3938, max=4428, stddev=1.0005142787600272\ncontrib bench: avg=570.9, median=566.5, min=533, max=642, stddev=1.0013388064147486\nsimple sum: avg=439.6, median=458.5, min=412, max=463, stddev=1.0005991535102405\nmultiple call: avg=339.4, median=330.0, min=317, max=369, stddev=1.00137085274677\n```"},{"mimetype":"text/html","body":"

                    Here's the performance difference between JVM and Native by the way:<\/p>\n

                    JVM:\n\nprimes: avg=3063.7, median=3020.5, min=2928, max=3316, stddev=1.0008113154443872\nvar lookup scope: avg=20467.6, median=20241.5, min=20146, max=21258, stddev=1.0001491293481208\ncontrib bench: avg=3022.0, median=3086.0, min=2918, max=3149, stddev=1.0002527251462061\nsimple sum: avg=2165.2, median=2145.0, min=2135, max=2300, stddev=1.0002517722890958\nmultiple call: avg=1053.4, median=1027.5, min=1009, max=1125, stddev=1.0005401318354343\n\nNative Linux:\n\nprimes: avg=788.8, median=861.0, min=590, max=955, stddev=1.0085759445987144\nvar lookup scope: avg=4203.7, median=4145.0, min=3938, max=4428, stddev=1.0005142787600272\ncontrib bench: avg=570.9, median=566.5, min=533, max=642, stddev=1.0013388064147486\nsimple sum: avg=439.6, median=458.5, min=412, max=463, stddev=1.0005991535102405\nmultiple call: avg=339.4, median=330.0, min=317, max=369, stddev=1.00137085274677\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"Here's the performance difference between JVM and Native by the way:\n```\nJVM:\n\nprimes: avg=3063.7, median=3020.5, min=2928, max=3316, stddev=1.0008113154443872\nvar lookup scope: avg=20467.6, median=20241.5, min=20146, max=21258, stddev=1.0001491293481208\ncontrib bench: avg=3022.0, median=3086.0, min=2918, max=3149, stddev=1.0002527251462061\nsimple sum: avg=2165.2, median=2145.0, min=2135, max=2300, stddev=1.0002517722890958\nmultiple call: avg=1053.4, median=1027.5, min=1009, max=1125, stddev=1.0005401318354343\n\nNative Linux:\n\nprimes: avg=788.8, median=861.0, min=590, max=955, stddev=1.0085759445987144\nvar lookup scope: avg=4203.7, median=4145.0, min=3938, max=4428, stddev=1.0005142787600272\ncontrib bench: avg=570.9, median=566.5, min=533, max=642, stddev=1.0013388064147486\nsimple sum: avg=439.6, median=458.5, min=412, max=463, stddev=1.0005991535102405\nmultiple call: avg=339.4, median=330.0, min=317, max=369, stddev=1.00137085274677\n```","msgtype":"m.text","formatted_body":"

                    Here's the performance difference between JVM and Native by the way:<\/p>\n

                    JVM:\n\nprimes: avg=3063.7, median=3020.5, min=2928, max=3316, stddev=1.0008113154443872\nvar lookup scope: avg=20467.6, median=20241.5, min=20146, max=21258, stddev=1.0001491293481208\ncontrib bench: avg=3022.0, median=3086.0, min=2918, max=3149, stddev=1.0002527251462061\nsimple sum: avg=2165.2, median=2145.0, min=2135, max=2300, stddev=1.0002517722890958\nmultiple call: avg=1053.4, median=1027.5, min=1009, max=1125, stddev=1.0005401318354343\n\nNative Linux:\n\nprimes: avg=788.8, median=861.0, min=590, max=955, stddev=1.0085759445987144\nvar lookup scope: avg=4203.7, median=4145.0, min=3938, max=4428, stddev=1.0005142787600272\ncontrib bench: avg=570.9, median=566.5, min=533, max=642, stddev=1.0013388064147486\nsimple sum: avg=439.6, median=458.5, min=412, max=463, stddev=1.0005991535102405\nmultiple call: avg=339.4, median=330.0, min=317, max=369, stddev=1.00137085274677\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1682497959256,"event_id":"$8sGAEfYQI_T_Gb13oMEbv7sUmxfSS9_4UdOArKInXls","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Here's the performance difference between JVM and Native by the way:\n\n```\nNative Linux:\n\nprimes: avg=3063.7, median=3020.5, min=2928, max=3316, stddev=1.0008113154443872\nvar lookup scope: avg=20467.6, median=20241.5, min=20146, max=21258, stddev=1.0001491293481208\ncontrib bench: avg=3022.0, median=3086.0, min=2918, max=3149, stddev=1.0002527251462061\nsimple sum: avg=2165.2, median=2145.0, min=2135, max=2300, stddev=1.0002517722890958\nmultiple call: avg=1053.4, median=1027.5, min=1009, max=1125, stddev=1.0005401318354343\n\nJVM:\n\nprimes: avg=788.8, median=861.0, min=590, max=955, stddev=1.0085759445987144\nvar lookup scope: avg=4203.7, median=4145.0, min=3938, max=4428, stddev=1.0005142787600272\ncontrib bench: avg=570.9, median=566.5, min=533, max=642, stddev=1.0013388064147486\nsimple sum: avg=439.6, median=458.5, min=412, max=463, stddev=1.0005991535102405\nmultiple call: avg=339.4, median=330.0, min=317, max=369, stddev=1.00137085274677\n```"},{"mimetype":"text/html","body":"

                    Here's the performance difference between JVM and Native by the way:<\/p>\n

                    Native Linux:\n\nprimes: avg=3063.7, median=3020.5, min=2928, max=3316, stddev=1.0008113154443872\nvar lookup scope: avg=20467.6, median=20241.5, min=20146, max=21258, stddev=1.0001491293481208\ncontrib bench: avg=3022.0, median=3086.0, min=2918, max=3149, stddev=1.0002527251462061\nsimple sum: avg=2165.2, median=2145.0, min=2135, max=2300, stddev=1.0002517722890958\nmultiple call: avg=1053.4, median=1027.5, min=1009, max=1125, stddev=1.0005401318354343\n\nJVM:\n\nprimes: avg=788.8, median=861.0, min=590, max=955, stddev=1.0085759445987144\nvar lookup scope: avg=4203.7, median=4145.0, min=3938, max=4428, stddev=1.0005142787600272\ncontrib bench: avg=570.9, median=566.5, min=533, max=642, stddev=1.0013388064147486\nsimple sum: avg=439.6, median=458.5, min=412, max=463, stddev=1.0005991535102405\nmultiple call: avg=339.4, median=330.0, min=317, max=369, stddev=1.00137085274677\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"Here's the performance difference between JVM and Native by the way:\n\n```\nNative Linux:\n\nprimes: avg=3063.7, median=3020.5, min=2928, max=3316, stddev=1.0008113154443872\nvar lookup scope: avg=20467.6, median=20241.5, min=20146, max=21258, stddev=1.0001491293481208\ncontrib bench: avg=3022.0, median=3086.0, min=2918, max=3149, stddev=1.0002527251462061\nsimple sum: avg=2165.2, median=2145.0, min=2135, max=2300, stddev=1.0002517722890958\nmultiple call: avg=1053.4, median=1027.5, min=1009, max=1125, stddev=1.0005401318354343\n\nJVM:\n\nprimes: avg=788.8, median=861.0, min=590, max=955, stddev=1.0085759445987144\nvar lookup scope: avg=4203.7, median=4145.0, min=3938, max=4428, stddev=1.0005142787600272\ncontrib bench: avg=570.9, median=566.5, min=533, max=642, stddev=1.0013388064147486\nsimple sum: avg=439.6, median=458.5, min=412, max=463, stddev=1.0005991535102405\nmultiple call: avg=339.4, median=330.0, min=317, max=369, stddev=1.00137085274677\n```","msgtype":"m.text","formatted_body":"

                    Here's the performance difference between JVM and Native by the way:<\/p>\n

                    Native Linux:\n\nprimes: avg=3063.7, median=3020.5, min=2928, max=3316, stddev=1.0008113154443872\nvar lookup scope: avg=20467.6, median=20241.5, min=20146, max=21258, stddev=1.0001491293481208\ncontrib bench: avg=3022.0, median=3086.0, min=2918, max=3149, stddev=1.0002527251462061\nsimple sum: avg=2165.2, median=2145.0, min=2135, max=2300, stddev=1.0002517722890958\nmultiple call: avg=1053.4, median=1027.5, min=1009, max=1125, stddev=1.0005401318354343\n\nJVM:\n\nprimes: avg=788.8, median=861.0, min=590, max=955, stddev=1.0085759445987144\nvar lookup scope: avg=4203.7, median=4145.0, min=3938, max=4428, stddev=1.0005142787600272\ncontrib bench: avg=570.9, median=566.5, min=533, max=642, stddev=1.0013388064147486\nsimple sum: avg=439.6, median=458.5, min=412, max=463, stddev=1.0005991535102405\nmultiple call: avg=339.4, median=330.0, min=317, max=369, stddev=1.00137085274677\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$TYeU0qhzEEMBizXbkOyqKTpX9HpktVO8jcrW0YoW1Hg","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * Here's the performance difference between JVM and Native by the way:\n\n```\nNative Linux:\n\nprimes: avg=3063.7, median=3020.5, min=2928, max=3316, stddev=1.0008113154443872\nvar lookup scope: avg=20467.6, median=20241.5, min=20146, max=21258, stddev=1.0001491293481208\ncontrib bench: avg=3022.0, median=3086.0, min=2918, max=3149, stddev=1.0002527251462061\nsimple sum: avg=2165.2, median=2145.0, min=2135, max=2300, stddev=1.0002517722890958\nmultiple call: avg=1053.4, median=1027.5, min=1009, max=1125, stddev=1.0005401318354343\n\nJVM:\n\nprimes: avg=788.8, median=861.0, min=590, max=955, stddev=1.0085759445987144\nvar lookup scope: avg=4203.7, median=4145.0, min=3938, max=4428, stddev=1.0005142787600272\ncontrib bench: avg=570.9, median=566.5, min=533, max=642, stddev=1.0013388064147486\nsimple sum: avg=439.6, median=458.5, min=412, max=463, stddev=1.0005991535102405\nmultiple call: avg=339.4, median=330.0, min=317, max=369, stddev=1.00137085274677\n```"},{"mimetype":"text/html","body":" * 

                    Here's the performance difference between JVM and Native by the way:<\/p>\n

                    Native Linux:\n\nprimes: avg=3063.7, median=3020.5, min=2928, max=3316, stddev=1.0008113154443872\nvar lookup scope: avg=20467.6, median=20241.5, min=20146, max=21258, stddev=1.0001491293481208\ncontrib bench: avg=3022.0, median=3086.0, min=2918, max=3149, stddev=1.0002527251462061\nsimple sum: avg=2165.2, median=2145.0, min=2135, max=2300, stddev=1.0002517722890958\nmultiple call: avg=1053.4, median=1027.5, min=1009, max=1125, stddev=1.0005401318354343\n\nJVM:\n\nprimes: avg=788.8, median=861.0, min=590, max=955, stddev=1.0085759445987144\nvar lookup scope: avg=4203.7, median=4145.0, min=3938, max=4428, stddev=1.0005142787600272\ncontrib bench: avg=570.9, median=566.5, min=533, max=642, stddev=1.0013388064147486\nsimple sum: avg=439.6, median=458.5, min=412, max=463, stddev=1.0005991535102405\nmultiple call: avg=339.4, median=330.0, min=317, max=369, stddev=1.00137085274677\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":" * Here's the performance difference between JVM and Native by the way:\n\n```\nNative Linux:\n\nprimes: avg=3063.7, median=3020.5, min=2928, max=3316, stddev=1.0008113154443872\nvar lookup scope: avg=20467.6, median=20241.5, min=20146, max=21258, stddev=1.0001491293481208\ncontrib bench: avg=3022.0, median=3086.0, min=2918, max=3149, stddev=1.0002527251462061\nsimple sum: avg=2165.2, median=2145.0, min=2135, max=2300, stddev=1.0002517722890958\nmultiple call: avg=1053.4, median=1027.5, min=1009, max=1125, stddev=1.0005401318354343\n\nJVM:\n\nprimes: avg=788.8, median=861.0, min=590, max=955, stddev=1.0085759445987144\nvar lookup scope: avg=4203.7, median=4145.0, min=3938, max=4428, stddev=1.0005142787600272\ncontrib bench: avg=570.9, median=566.5, min=533, max=642, stddev=1.0013388064147486\nsimple sum: avg=439.6, median=458.5, min=412, max=463, stddev=1.0005991535102405\nmultiple call: avg=339.4, median=330.0, min=317, max=369, stddev=1.00137085274677\n```","msgtype":"m.text","formatted_body":" * 

                    Here's the performance difference between JVM and Native by the way:<\/p>\n

                    Native Linux:\n\nprimes: avg=3063.7, median=3020.5, min=2928, max=3316, stddev=1.0008113154443872\nvar lookup scope: avg=20467.6, median=20241.5, min=20146, max=21258, stddev=1.0001491293481208\ncontrib bench: avg=3022.0, median=3086.0, min=2918, max=3149, stddev=1.0002527251462061\nsimple sum: avg=2165.2, median=2145.0, min=2135, max=2300, stddev=1.0002517722890958\nmultiple call: avg=1053.4, median=1027.5, min=1009, max=1125, stddev=1.0005401318354343\n\nJVM:\n\nprimes: avg=788.8, median=861.0, min=590, max=955, stddev=1.0085759445987144\nvar lookup scope: avg=4203.7, median=4145.0, min=3938, max=4428, stddev=1.0005142787600272\ncontrib bench: avg=570.9, median=566.5, min=533, max=642, stddev=1.0013388064147486\nsimple sum: avg=439.6, median=458.5, min=412, max=463, stddev=1.0005991535102405\nmultiple call: avg=339.4, median=330.0, min=317, max=369, stddev=1.00137085274677\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1682497981826,"event_id":"$xV6jfUGAZuu3KU_pvC01uYmq3aSQUnuu_tPIlWONvM4","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Yeah, way faster","msgtype":"m.text"}}
                    {"origin_server_ts":1682498042585,"event_id":"$3uUwHGGdSQvi9TZ4rVr5TEm_4kl5CJD8itaSvXsIeq4","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I've learned some interesting things about Intel vs. AMD in the course of it, when doing highly parallel simple calculations AMD is faster, even given a chip 2 years older than the Intel one with 12 cores to 14 of Intel's","msgtype":"m.text"}}
                    {"origin_server_ts":1682498075355,"event_id":"$-Z_FEAkF6ml69cwHqpcnWnFrzujzf3BvVwuebgTTi8w","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Except when I threw a permute into the mix for a transform on a large (200^4) array, then Intel pulled ahead","msgtype":"m.text"}}
                    {"origin_server_ts":1682499366831,"event_id":"$_Y0zT8pt7h-z8Z_KIBfVTpbN-CYXnd-HI-2_VXNZKXc","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"This is odd:\n> )off\nError at: 1:0: Unexpected token: CloseParen","msgtype":"m.text"}}
                    {"origin_server_ts":1682499378602,"event_id":"$iwwZKQsfMQpwcmVGKlAR50aUW_vUYx3hO-2Otnr-Czg","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"It's one way to quit the REPL I guess","msgtype":"m.text"}}
                    {"origin_server_ts":1682500270674,"event_id":"$Fni67brxOBYC5EUnqNqFuUxt-9Pg0Y-2ZSeHilrwaMs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hah","msgtype":"m.text"}}
                    {"origin_server_ts":1682500291791,"event_id":"$Xjm9xKHg9zP1x9w_yoL-EXwvwizYTeseODeTGtwi9aw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The system commands are not implemented ","msgtype":"m.text"}}
                    {"origin_server_ts":1682500304360,"event_id":"$09LlkUNTjEzhHlKsXs2d94mnX82Nw23Lua_i6YkmpFU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Just presss C-d","msgtype":"m.text"}}
                    {"origin_server_ts":1682500344802,"event_id":"$HwP503xoyLQqlyAXxq1tD8wGwOSW-zF2SHCIy3poxXA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But did the interpreter exit there?","msgtype":"m.text"}}
                    {"origin_server_ts":1682501158253,"event_id":"$v8g2YoAn380iTTMUwbW5k5iik_k2TSYtYKegNz3ZfvI","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Yes it did, crashed","msgtype":"m.text"}}
                    {"origin_server_ts":1682501538864,"event_id":"$tGOqkBdElULeBrBCPqyzeesCfRyieC5006J-4naTTSM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, let me check","msgtype":"m.text","org.matrix.msc1767.text":"OK, let me check"}}
                    {"origin_server_ts":1682501821100,"event_id":"$GMRh-OuP_OYh5gpfJhfXG0J0E19-Qsa9Tb4utBVu710","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, fixed.","msgtype":"m.text","org.matrix.msc1767.text":"OK, fixed."}}
                    {"origin_server_ts":1682501829587,"event_id":"$Zfuilp8rxwwTkBWWDPRBaFQjbTl9UzEbhzZRaCiEpBo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll commit a fix soon","msgtype":"m.text","org.matrix.msc1767.text":"I'll commit a fix soon"}}
                    {"origin_server_ts":1682515587346,"event_id":"$69HhuUBxsDg67-XPJjnSlCebSARA1XO907--TgZWXKE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: OK, I've fixed the repl now"},{"mimetype":"text/html","body":"phantomics<\/a>: OK, I've fixed the repl now"}],"format":"org.matrix.custom.html","body":"phantomics: OK, I've fixed the repl now","msgtype":"m.text","formatted_body":"phantomics<\/a>: OK, I've fixed the repl now"}}
                    {"origin_server_ts":1682544608994,"event_id":"$0uzqh1ddO5LFXnuCRWwcEjdmw5kQ4LxoR5womBxbmt0","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Cool","msgtype":"m.text"}}
                    {"origin_server_ts":1682561145352,"event_id":"$kzkfU-c3aL9ZfC8QOuvCoEEXfM9AM0PrmSOmQuTEZXk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: works?"},{"mimetype":"text/html","body":"phantomics<\/a>: works?"}],"format":"org.matrix.custom.html","body":"phantomics: works?","msgtype":"m.text","formatted_body":"phantomics<\/a>: works?"}}
                    {"origin_server_ts":1682561187082,"event_id":"$IYHxG_hQNoO63YOgyiIcZKpVRC-5-JrecqSO438eBCw","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Did you change the bool/int too? Otherwise I'll have to manually make those changes to test it","msgtype":"m.text"}}
                    {"origin_server_ts":1682561300608,"event_id":"$l3D5gse2FkS3nHg5LQHYFaAckkX4TQ3DMYDFCU7aES4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, I did.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, I did."}}
                    {"origin_server_ts":1682561322716,"event_id":"$bExCSaylUaDun4rueawCPea1KmDUwaFjafNkSJmBrfA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://codeberg.org/loke/array/commit/0f2a975c9279865a204dc1e04e176a0807742acb","msgtype":"m.text","org.matrix.msc1767.text":"https://codeberg.org/loke/array/commit/0f2a975c9279865a204dc1e04e176a0807742acb"}}
                    {"origin_server_ts":1682703987006,"event_id":"$ncKq1HeVYMrtZ4bhJbLkfMH7ZZGDAHGHVc0atDQSk8M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: I created a wrapper around apache arrow arrays. It worked fine, but I guess I should actually learn arrow to understand what it can do before I actually implement this stuff."},{"mimetype":"text/html","body":"phantomics<\/a>: I created a wrapper around apache arrow arrays. It worked fine, but I guess I should actually learn arrow to understand what it can do before I actually implement this stuff."}],"format":"org.matrix.custom.html","body":"phantomics: I created a wrapper around apache arrow arrays. It worked fine, but I guess I should actually learn arrow to understand what it can do before I actually implement this stuff.","msgtype":"m.text","formatted_body":"phantomics<\/a>: I created a wrapper around apache arrow arrays. It worked fine, but I guess I should actually learn arrow to understand what it can do before I actually implement this stuff."}}
                    {"origin_server_ts":1682859250559,"event_id":"$Rvh1Gm4HKasuX6xJtP6KAraeSt35jDsX-wvu9sSSCEc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ouch, that was a nasty bug that had completely been missed by my tests. Probably the first scope-related bug I had to deal with since my rewrite of the stack management.","msgtype":"m.text","org.matrix.msc1767.text":"Ouch, that was a nasty bug that had completely been missed by my tests. Probably the first scope-related bug I had to deal with since my rewrite of the stack management."}}
                    {"origin_server_ts":1682859344870,"event_id":"$d7pi96tQhNUt3sjupl6TcfOXVBYbrfoomaalnUY3ins","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The rewrite improves performance, but now bugs don't show themselves as something as simple as \"can't find the variable related to binding X\", but instead are, if i'm lucky \"variable not bound\", an ArrayIndexOutOfBounds exception, or if I'm unlucky, reading/writing to a completely different variable.","msgtype":"m.text","org.matrix.msc1767.text":"The rewrite improves performance, but now bugs don't show themselves as something as simple as \"can't find the variable related to binding X\", but instead are, if i'm lucky \"variable not bound\", an ArrayIndexOutOfBounds exception, or if I'm unlucky, reading/writing to a completely different variable."}}
                    {"origin_server_ts":1682859385829,"event_id":"$xkl01jVEvqktm0qlN0pMnXUqC4IIpU7vVcsp4RfQF8g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The fix was reasonably small, but I wonder what other untested bugs are lurking in the code. https://codeberg.org/loke/array/commit/011cf99acdbaaf5eeb076f0b0002251eeacb52c0","msgtype":"m.text","org.matrix.msc1767.text":"The fix was reasonably small, but I wonder what other untested bugs are lurking in the code. https://codeberg.org/loke/array/commit/011cf99acdbaaf5eeb076f0b0002251eeacb52c0"}}
                    {"state_key":"@phantomics:matrix.org","origin_server_ts":1683165477613,"event_id":"$MxYIaSY1ehb5QKlS2HgI_adTV8ztO8KILyhKgVeMkN4","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","prev_content":{"displayname":"phantomics","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/nJfdmhgDPVzoEhTTsQUSXWdU","displayname":"phantomics","membership":"join"},"replaces_state":"$DjjKGO5j-I6RNEwtrPn0kLnS4WJohQLYVa-4gAZRAGE"}
                    {"origin_server_ts":1683179685031,"event_id":"$K2khjOzf4OnJ5hE9rvicCJZnj2maNNPgA25RfxbZgO0","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I pulled the latest code, it runs fine from the get-go with no changes to code now, )off still crashes with the same error","msgtype":"m.text"}}
                    {"origin_server_ts":1683180841772,"event_id":"$fKA1GylyLhBUa7bd4rFc6m0P1SQ7mq1XTHwmeWoIQpM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: `)off` should give a parse error."},{"mimetype":"text/html","body":"phantomics<\/a>: )off<\/code> should give a parse error."}],"format":"org.matrix.custom.html","body":"phantomics: `)off` should give a parse error.","msgtype":"m.text","formatted_body":"phantomics<\/a>: )off<\/code> should give a parse error."}}
                    {"origin_server_ts":1683180845664,"event_id":"$PfUTqqndhS2oY0kpYXSnH2H63Xsjj5Eyp1yxDDbyBLw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Let me test.","msgtype":"m.text","org.matrix.msc1767.text":"Let me test."}}
                    {"origin_server_ts":1683188426728,"event_id":"$0hXnTl_mAjUKA-DFGmECNUieIQj9rYyHqRwFYGK5Wjg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: what error do you get, and what does the crash look like?"},{"mimetype":"text/html","body":"phantomics<\/a>: what error do you get, and what does the crash look like?"}],"format":"org.matrix.custom.html","body":"phantomics: what error do you get, and what does the crash look like?","msgtype":"m.text","formatted_body":"phantomics<\/a>: what error do you get, and what does the crash look like?"}}
                    {"origin_server_ts":1683188433159,"event_id":"$yk6Kpkki64gG5Pnc0VOj-Fl2HN1FWE5rC4NBZLJJTgM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I tested here and there is no issue.","msgtype":"m.text","org.matrix.msc1767.text":"I tested here and there is no issue."}}
                    {"origin_server_ts":1683188445047,"event_id":"$HCGXqOw6FrvS0_CIzXIfNGSrklgL-1JnWIH1QNN8lqI","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"> )off\nError at: 1:0: Unexpected token: CloseParen","msgtype":"m.text"}}
                    {"origin_server_ts":1683188448369,"event_id":"$KJWe7LK_9_fPrk3TVfeJaSD0Yz0OLyu-gF7E_FsSMjg","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Same as before","msgtype":"m.text"}}
                    {"origin_server_ts":1683188472790,"event_id":"$P0x-GQS6qMPLmdYRAJ3GnBErztU6dyPwt2sHO9d9J6A","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Do I need to rebuild something? I did git reset --hard HEAD && git pull","msgtype":"m.text"}}
                    {"origin_server_ts":1683188567072,"event_id":"$4Kq9yXvlGdEqOe6O_g23tYZYCKxI9nKQ0c9z1Ji9fQ4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"phantomics: no, that is correct behaviour."},{"mimetype":"text/html","body":"phantomics<\/a>: no, that is correct behaviour."}],"format":"org.matrix.custom.html","body":"phantomics: no, that is correct behaviour.","msgtype":"m.text","formatted_body":"phantomics<\/a>: no, that is correct behaviour."}}
                    {"origin_server_ts":1683188576275,"event_id":"$oZ6lnjAfbSWXnRMmZGCWrYUqt6NNarDbdtmB_U6NCpw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You can't have an unbalanced close paren./","msgtype":"m.text","org.matrix.msc1767.text":"You can't have an unbalanced close paren./"}}
                    {"origin_server_ts":1683188577334,"event_id":"$aVXeQlfFXYHGWSfYMOIcYWQzFdoauMFmpQ5a2H_iYTc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"You can't have an unbalanced close paren.","msgtype":"m.text","org.matrix.msc1767.text":"You can't have an unbalanced close paren."},"m.relates_to":{"event_id":"$oZ6lnjAfbSWXnRMmZGCWrYUqt6NNarDbdtmB_U6NCpw","rel_type":"m.replace"},"body":" * You can't have an unbalanced close paren.","msgtype":"m.text","org.matrix.msc1767.text":" * You can't have an unbalanced close paren."}}
                    {"origin_server_ts":1683188589061,"event_id":"$21zTM3D-tFM7daQyBo3w_6_vsjjYRLWjhabUIt35x9U","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Ok, it makes sense","msgtype":"m.text"}}
                    {"origin_server_ts":1683188603528,"event_id":"$-edobAAzm0qZvL5tnr1PskKtpA7cBo7T3AWU-In8RZE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you want to quit the interpreter, you use Control-d.","msgtype":"m.text","org.matrix.msc1767.text":"If you want to quit the interpreter, you use Control-d."}}
                    {"origin_server_ts":1683188661520,"event_id":"$XHXq_9zwPrQ3suAp8eGDVahIzOh_YpVWOnDr_opB4TA","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Right, you said you were going to fix something about the )off before but it's fine to do that. Maybe instead of crashing you could pop up a message saying \"KAP doesn't use system commands starting with )\"","msgtype":"m.text"}}
                    {"origin_server_ts":1683188852384,"event_id":"$tp4LY_gMsDafRq_mGEiGgMAurKIYUMtzPgB5nHNdZro","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What I fixed was the stack trace and crash that happened.","msgtype":"m.text","org.matrix.msc1767.text":"What I fixed was the stack trace and crash that happened."}}
                    {"origin_server_ts":1683188900889,"event_id":"$-tmCWOLuF6MmIThYRLvOxuSbomS8tUqeTOmQ-aNq6tc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Special-casing leading `)` feels bad to me. The only thing that is special about it is that some other apls use it for system commands, which is a concept that doesn't even exist in kap"},{"mimetype":"text/html","body":"Special-casing leading )<\/code> feels bad to me. The only thing that is special about it is that some other apls use it for system commands, which is a concept that doesn't even exist in kap"}],"format":"org.matrix.custom.html","body":"Special-casing leading `)` feels bad to me. The only thing that is special about it is that some other apls use it for system commands, which is a concept that doesn't even exist in kap","msgtype":"m.text","formatted_body":"Special-casing leading )<\/code> feels bad to me. The only thing that is special about it is that some other apls use it for system commands, which is a concept that doesn't even exist in kap"}}
                    {"origin_server_ts":1683188989023,"event_id":"$MrGSUoSm2vm1QFLt43F9QoEyK13jsDVjzK_WbV-6bzg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Such functionality in kap is implemented as regular functions.","msgtype":"m.text","org.matrix.msc1767.text":"Such functionality in kap is implemented as regular functions."}}
                    {"origin_server_ts":1683189100927,"event_id":"$FapL1RxDnsYlVGPVl6BeQut6wVV0D89dV6VmSq1EEJs","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"Got it, I understand your dislike of )_ syntax","msgtype":"m.text"}}
                    {"origin_server_ts":1683189158404,"event_id":"$6iSDPZNZRsGyHVn8nUw7XTbFe-xigPFuCvuDupNO2HQ","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"I implemented some ) commands in the ApREPL for Emacs, it denotes a command that directs to the REPL as opposed to the underlying April instance","msgtype":"m.text"}}
                    {"origin_server_ts":1683189181284,"event_id":"$SSlLvJH0YWE7GGveZoJY0RTNV-34TCJjCUMEYiX0oSA","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"In ApREPL )off tells the REPL mode to stop and close its buffer","msgtype":"m.text"}}
                    {"origin_server_ts":1683189182982,"event_id":"$jmIpF8qytqmQrofPirmIldzcmvHXlvB5j30jU6MB248","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I never said i disliked it. But yes, I do dislike it.😀","msgtype":"m.text"}}
                    {"origin_server_ts":1683189244266,"event_id":"$trro5rmADyH2sEpa04NSHp0LFLPY77TKpS-Im9l5yn8","sender":"@phantomics:matrix.org","user_id":"@phantomics:matrix.org","type":"m.room.message","content":{"body":"What kind of mnemonic would you use for a command that directs to a shell (REPL) rather than the interpreter within?","msgtype":"m.text"}}
                    {"origin_server_ts":1683190076388,"event_id":"$Nn9yNA0fYx1BTMq9uC41rjbtf3AorvivRNeuTvkK1Ss","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"None. There are no commands that talk to the repl. Everything is via the language itself.","msgtype":"m.text","org.matrix.msc1767.text":"None. There are no commands that talk to the repl. Everything is via the language itself."}}
                    {"origin_server_ts":1683190097801,"event_id":"$ZQbnpkk8T6Ju945y-qeY8HIwWr1NHolXpsmNGfQ47Z0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"If such a feature is needed, I will likely create a new KAP command called `cmd` or something."},{"mimetype":"text/html","body":"If such a feature is needed, I will likely create a new KAP command called cmd<\/code> or something."}],"format":"org.matrix.custom.html","body":"If such a feature is needed, I will likely create a new KAP command called `cmd` or something.","msgtype":"m.text","formatted_body":"If such a feature is needed, I will likely create a new KAP command called cmd<\/code> or something."}}
                    {"state_key":"@leohoo_sdu:matrix.org","origin_server_ts":1683869471287,"event_id":"$B5n06sE_2u7DzkjqmoZBjG4V1nYgj5r7PhAGS72SjMI","sender":"@leohoo_sdu:matrix.org","user_id":"@leohoo_sdu:matrix.org","type":"m.room.member","content":{"displayname":"leohoo_sdu","membership":"join"}}
                    {"state_key":"@leohoo_sdu:matrix.org","origin_server_ts":1683869471960,"event_id":"$6vlJNjiQOBnObTsHtOV_T8MZxHNDEdUysqr3GFplmgU","sender":"@leohoo_sdu:matrix.org","user_id":"@leohoo_sdu:matrix.org","prev_content":{"displayname":"leohoo_sdu","membership":"join"},"type":"m.room.member","content":{"membership":"leave"},"replaces_state":"$B5n06sE_2u7DzkjqmoZBjG4V1nYgj5r7PhAGS72SjMI"}
                    {"state_key":"@Kooda:elynx.fr","origin_server_ts":1684495484567,"event_id":"$4qIM49cmwYC3A14-h1JhC8QnuFs7MW6oyJrJRSLQY6Y","sender":"@Kooda:elynx.fr","user_id":"@Kooda:elynx.fr","prev_content":{"avatar_url":"mxc://elynx.fr/EIcRYgVMfgOYulQeMeVVGtUV","displayname":"Kooda","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://elynx.fr/WrMnjUmqUhLuJkgkiishYIng","displayname":"Kooda","membership":"join"},"replaces_state":"$mFebezqaEM90LoNKUSzqrS3UpZM1FnL-RpBBtrRthNw"}
                    {"state_key":"@fluentpwn:matrix.org","origin_server_ts":1684568047016,"event_id":"$npRTQp2ZynBWjrB3uw-39D6nuT1RIukzakX6cZYp_QU","sender":"@fluentpwn:matrix.org","user_id":"@fluentpwn:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/eCFoSgZfvcTePhsAWCcTZEIi","displayname":"fluentpwn","membership":"join"}}
                    {"origin_server_ts":1685506823616,"event_id":"$90D63uk2--j9MRmh-8nezgLKL2GrVvvZJFVTAkhIPfw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I just wrote the following:\n```\n⊃ ⊂«,»(⊂unicode:toNames @\\0+16⊥\"0123456789ABCDEF\"⍳(2+⍳4)⊇)¨ (@\\n≠s) ⊂ s\n```\nClearly a simpler way to decode hex numbers is needed."},{"mimetype":"text/html","body":"

                    I just wrote the following:<\/p>\n

                    ⊃ ⊂«,»(⊂unicode:toNames @\\0+16⊥"0123456789ABCDEF"⍳(2+⍳4)⊇)¨ (@\\n≠s) ⊂ s\n<\/code><\/pre>\n

                    Clearly a simpler way to decode hex numbers is needed.<\/p>\n"}],"format":"org.matrix.custom.html","body":"I just wrote the following:\n```\n⊃ ⊂«,»(⊂unicode:toNames @\\0+16⊥\"0123456789ABCDEF\"⍳(2+⍳4)⊇)¨ (@\\n≠s) ⊂ s\n```\nClearly a simpler way to decode hex numbers is needed.","msgtype":"m.text","formatted_body":"

                    I just wrote the following:<\/p>\n

                    ⊃ ⊂«,»(⊂unicode:toNames @\\0+16⊥"0123456789ABCDEF"⍳(2+⍳4)⊇)¨ (@\\n≠s) ⊂ s\n<\/code><\/pre>\n

                    Clearly a simpler way to decode hex numbers is needed.<\/p>\n"}} {"origin_server_ts":1685506858991,"event_id":"$JNdb9peT8HE9Cw2lOHD_n-r78eH6qu05iG2NpJn0pB4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I'm considering having the dyadic form of `⍎` accept a base."},{"mimetype":"text/html","body":"I'm considering having the dyadic form of ⍎<\/code> accept a base."}],"format":"org.matrix.custom.html","body":"I'm considering having the dyadic form of `⍎` accept a base.","msgtype":"m.text","formatted_body":"I'm considering having the dyadic form of ⍎<\/code> accept a base."}} {"origin_server_ts":1685506920576,"event_id":"$lJNdWzg96f3zXfZdm6xToOxAtc8OStpDSOB6ELKxe_I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In any case, if I had kept the J-style 3-chain I don't think I'd ever written it as a train and instead used nested dfns.","msgtype":"m.text","org.matrix.msc1767.text":"In any case, if I had kept the J-style 3-chain I don't think I'd ever written it as a train and instead used nested dfns."}} {"origin_server_ts":1685508383382,"event_id":"$mjPw6NKiee96kk3XtQbH2n-Wp_NXnNgkx50DmWAQIzc","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"Is it possible to add hex and/or binary literals?","msgtype":"m.text"}} {"origin_server_ts":1685509377804,"event_id":"$ckhdRKPEVsUi_AJHUSH19ej92BiTZkDRkKW4N-3nuuw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"vylsaz: I don't have syntax for hex or binary literals at the moment."},{"mimetype":"text/html","body":"vylsaz<\/a>: I don't have syntax for hex or binary literals at the moment."}],"format":"org.matrix.custom.html","body":"vylsaz: I don't have syntax for hex or binary literals at the moment.","msgtype":"m.text","formatted_body":"vylsaz<\/a>: I don't have syntax for hex or binary literals at the moment."}} {"origin_server_ts":1685509419994,"event_id":"$fViTBeVlvv5q5Tlus8_vJEKcOoX6ql-Sq4FjrW54axM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"vylsaz: but if I did, once they are parsed they'd just be numbers, so there is nothing special about adding them."},{"mimetype":"text/html","body":"vylsaz<\/a>: but if I did, once they are parsed they'd just be numbers, so there is nothing special about adding them."}],"format":"org.matrix.custom.html","body":"vylsaz: but if I did, once they are parsed they'd just be numbers, so there is nothing special about adding them.","msgtype":"m.text","formatted_body":"vylsaz<\/a>: but if I did, once they are parsed they'd just be numbers, so there is nothing special about adding them."}} {"origin_server_ts":1685509537257,"event_id":"$VmgI6n-EwrphtajClE7L_kXtb-RPN0H492aMryxTZtA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Note that `⍎` in KAP is different from APL. In APL, it evaluates its argument. In KAP it's purely a \"parse number\" function at the moment."},{"mimetype":"text/html","body":"Note that ⍎<\/code> in KAP is different from APL. In APL, it evaluates its argument. In KAP it's purely a "parse number" function at the moment."}],"format":"org.matrix.custom.html","body":"Note that `⍎` in KAP is different from APL. In APL, it evaluates its argument. In KAP it's purely a \"parse number\" function at the moment.","msgtype":"m.text","formatted_body":"Note that ⍎<\/code> in KAP is different from APL. In APL, it evaluates its argument. In KAP it's purely a "parse number" function at the moment."}} {"origin_server_ts":1685509574067,"event_id":"$1rpuou6qJRsl_l1Rbai3bHx4hfmoOBoDPvv6JVt2n6U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I do want to extend it to support the Dyalog literal array representation though. That way it could be an interchange format.","msgtype":"m.text","org.matrix.msc1767.text":"I do want to extend it to support the Dyalog literal array representation though. That way it could be an interchange format."}} {"origin_server_ts":1685509747744,"event_id":"$zfPIX19Xkf54OZoFJzlLAic0H5AiuONcgWGBJyWXELk","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"I think most people are familiar with C/Python syntax (0x... and 0b...)\n(I brought this up because KAP seems to have bitwise function?)","msgtype":"m.text"}} {"origin_server_ts":1685509795430,"event_id":"$iBf7YsX0knyqXUBMdXHCdf_94XM7W0gOZ61kDAAzQjo","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$VmgI6n-EwrphtajClE7L_kXtb-RPN0H492aMryxTZtA"}},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Note that `⍎` in KAP is different from APL. In APL, it evaluates its argument. In KAP it's purely a \"parse number\" function at the moment.\n\nThat's nice. What will happen if the input is not a number?","msgtype":"m.text","formatted_body":"

                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    Note that ⍎<\/code> in KAP is different from APL. In APL, it evaluates its argument. In KAP it's purely a "parse number" function at the moment.<\/blockquote><\/mx-reply>That's nice. What will happen if the input is not a number?"}} {"origin_server_ts":1685509820697,"event_id":"$pB6csDi1MZYO25rBFKBDr0dbcZ79DIV7DcUljSeGBG8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"`Error at: 1:0: ⍎: Value cannot be parsed as a number: 'x123`"},{"mimetype":"text/html","body":"Error at: 1:0: ⍎: Value cannot be parsed as a number: 'x123<\/code>"}],"format":"org.matrix.custom.html","body":"`Error at: 1:0: ⍎: Value cannot be parsed as a number: 'x123`","msgtype":"m.text","formatted_body":"Error at: 1:0: ⍎: Value cannot be parsed as a number: 'x123<\/code>"}} {"origin_server_ts":1685509940916,"event_id":"$TxkzHsnjCI3nvsHzi9eL068961-PMA6hJojGgA09EnY","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"Oh OK","msgtype":"m.text"}} {"origin_server_ts":1685510076748,"event_id":"$Nvw65W3EYIueTDm3OIBma4VYOMGtx75NPWfgLFz9o-g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I don't think Dyalog has literal hex or binary?","msgtype":"m.text","org.matrix.msc1767.text":"I don't think Dyalog has literal hex or binary?"}} {"origin_server_ts":1685510082763,"event_id":"$lU9oeulDXidGLR1wlcYbQjRwYSAq5nE8ChFMND_klI0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Does BQN? Any other APL's?","msgtype":"m.text","org.matrix.msc1767.text":"Does BQN? Any other APL's?"}} {"origin_server_ts":1685510344862,"event_id":"$Bm21k8hcz2jO_ffNnP7dsWGymjGW2lwxWBWfK5W5ytw","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"I have no idea","msgtype":"m.text"}} {"origin_server_ts":1685510364362,"event_id":"$aUqXjQkv3Sjv4dI-JXImcREXyCFiNk4r4Xl9vZTGVn4","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"dyalog definitely does not","msgtype":"m.text"}} {"origin_server_ts":1685510593050,"event_id":"$HtjXj63Bzo3vEtorLtXlcoVig70IVDYE1G0FqCPuLIg","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"but, at least for me, it would be a little weird if I can do bitwise operations, but can't put numbers in a form that is easier to reason about for this kind of operstion ","msgtype":"m.text"}} {"origin_server_ts":1685511362984,"event_id":"$q6xwLEpiMrcf4UoXJaVAhdfUtQAdybu939vazl0y1XY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, true.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, true."}} {"origin_server_ts":1685511384331,"event_id":"$GIUl2nmq3yynoaTYWSAMYAMsWp_TAi8GsXHlWx8JXDY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I want to add this. Got a suggestion for syntax?","msgtype":"m.text","org.matrix.msc1767.text":"I want to add this. Got a suggestion for syntax?"}} {"origin_server_ts":1685511398630,"event_id":"$9Z60YXJJXqPhJA2nEHpER7Jnq8S8MN_YM2bT0exbFbQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I guess the C-style `0xNNNN` is one approach."},{"mimetype":"text/html","body":"I guess the C-style 0xNNNN<\/code> is one approach."}],"format":"org.matrix.custom.html","body":"I guess the C-style `0xNNNN` is one approach.","msgtype":"m.text","formatted_body":"I guess the C-style 0xNNNN<\/code> is one approach."}} {"origin_server_ts":1685511924879,"event_id":"$H59WBep564xwLiRdUkPpZ88m6FFvaOFnUFuZ_bpNdbY","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"Yeah","msgtype":"m.text"}} {"origin_server_ts":1685513429359,"event_id":"$Nc1uR7YIPoraFUlwgUUiFNC0nSml3OpZCH-lKx75Bqs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I guess binary could be 0b101000111","msgtype":"m.text","org.matrix.msc1767.text":"I guess binary could be 0b101000111"}} {"origin_server_ts":1685531981378,"event_id":"$fQU6eT8oVdYOai5RZ36KHDz-S5WXZH4UID806CAugBo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"J has `16b23fe5ca` for hex (so, `16b` is the prefix) and any other base. Nice enough that I put it in Singeli, and we use `4b` a lot there.","msgtype":"m.text","formatted_body":"J has 16b23fe5ca<\/code> for hex (so, 16b<\/code> is the prefix) and any other base. Nice enough that I put it in Singeli, and we use 4b<\/code> a lot there."}} {"origin_server_ts":1685532073781,"event_id":"$8mhbKmYRGqxlaqZbnh0edDP5DS719ji-1bz4okbDzgM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The J version is very permissive; I'd have expected it to stop at base 34 but it doesn't, and it also allows digits past the end of the base, so `10b5a` is 60.","msgtype":"m.text","formatted_body":"The J version is very permissive; I'd have expected it to stop at base 34 but it doesn't, and it also allows digits past the end of the base, so 10b5a<\/code> is 60."}} {"state_key":"@elcar0:matrix.org","origin_server_ts":1685538496851,"event_id":"$XPpkdu7Ntt8ud9BcPguPMM5HFkxyZg1JfzvLYsF_vp4","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.member","content":{"displayname":"elcar0","membership":"join"}} {"origin_server_ts":1685538630532,"event_id":"$jOlQT84efce0sj1jqjwnLRQ9sM02LN_lPRn56vfCeMM","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"loke doc error in the KAP tutorial for the result of `bar[;4]`","msgtype":"m.text","formatted_body":"
                    loke<\/a> doc error in the KAP tutorial for the result of bar[;4]<\/code>"}} {"origin_server_ts":1685538769764,"event_id":"$SUNx2D5x3hT-QNLmAOt5jlYjWiBZV-IY34ItIeTP6SY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Where?","msgtype":"m.text"}} {"origin_server_ts":1685538848895,"event_id":"$GgyE1GrgEjey8lg9xWny-Kgiv0rLfkYsTREK8XsdQCk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Let me check","msgtype":"m.text"}} {"origin_server_ts":1685538898602,"event_id":"$Ee1ko2h_F1bFA_LMVtgGWhbsvLv5v-VAWoUFDHlrqPM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh","msgtype":"m.text"}} {"origin_server_ts":1685539000427,"event_id":"$OAoMY4B_uV614SlnCgW2VwnBJ0Nv4XiGO5kBOxYZLDk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Fixed","msgtype":"m.text"}} {"origin_server_ts":1685539020161,"event_id":"$NfRnXgKCE4irtwhFDaadnmi1addFvT03meN2y6Vn5Lc","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$OAoMY4B_uV614SlnCgW2VwnBJ0Nv4XiGO5kBOxYZLDk","rel_type":"m.annotation","key":"👍️"}}} {"origin_server_ts":1685539760280,"event_id":"$-PWhYsn03ZGSzUhQg8wcJAikaZjJpw6AHLkdDwF40Ww","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$fQU6eT8oVdYOai5RZ36KHDz-S5WXZH4UID806CAugBo"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> J has `16b23fe5ca` for hex (so, `16b` is the prefix) and any other base. Nice enough that I put it in Singeli, and we use `4b` a lot there.\n\nI have to admit I'm not a fan of that syntax. The b looks like it's part of the hex number.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    J has 16b23fe5ca<\/code> for hex (so, 16b<\/code> is the prefix) and any other base. Nice enough that I put it in Singeli, and we use 4b<\/code> a lot there.<\/blockquote><\/mx-reply>I have to admit I'm not a fan of that syntax. The b looks like it's part of the hex number."}} {"origin_server_ts":1685936751769,"event_id":"$Y76DRbhVjeZuG-e0cHQ894IVC1qWSlbU3yCz8ln3RD4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I look at the pretty graph. I'll add support for more types later (it just calls into chart.js, but I'll make it work on the native client too).","msgtype":"m.text","org.matrix.msc1767.text":"I look at the pretty graph. I'll add support for more types later (it just calls into chart.js, but I'll make it work on the native client too)."}} {"origin_server_ts":1685936752631,"event_id":"$XSVS3s-mbN7lsOPFUDDv-F-E2oq45Z9udgPLGgecLwo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Aline%20%CE%BBmath%3Asin%20%CE%BBmath%3Acos%20%7B%E2%8D%9E%E2%8D%BA%20%E2%8D%B5%7D%E2%8C%BB%20(%E2%8D%B330)%C3%B73","msgtype":"m.text","org.matrix.msc1767.text":"https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Aline%20%CE%BBmath%3Asin%20%CE%BBmath%3Acos%20%7B%E2%8D%9E%E2%8D%BA%20%E2%8D%B5%7D%E2%8C%BB%20(%E2%8D%B330)%C3%B73"}} {"origin_server_ts":1685943715605,"event_id":"$tO_CG5MzqdzhVdhaNNrirMiG6VVNUww5i_hoSLhNa4A","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"Nice!","msgtype":"m.text"}} {"origin_server_ts":1685943779973,"event_id":"$6ozjv6MzTj6w9K-OVyVd8DxEtWY6ls34zm4tEBo1d3Q","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"How do you pass in the x values?","msgtype":"m.text"}} {"origin_server_ts":1685945391058,"event_id":"$H8bXlij5dQYxCGOuCQiSiqGlo0diSdJcrsxn08UohIg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"vylsaz: You mean the labels?"},{"mimetype":"text/html","body":"
                    vylsaz<\/a>: You mean the labels?"}],"format":"org.matrix.custom.html","body":"vylsaz: You mean the labels?","msgtype":"m.text","formatted_body":"vylsaz<\/a>: You mean the labels?"}} {"origin_server_ts":1685945965103,"event_id":"$7mocFPWPTJ7Gp6Bsyc9Tjd0_A7ULVNB2pJVJHNrNpn8","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"Yeah, sort of, the values that appear on the x-axis","msgtype":"m.text"}} {"origin_server_ts":1685946006353,"event_id":"$j0k9ite879wl5AkSE7bqIyUIBmMl3ozq8XriJlMAgfg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you want x values, then it's more of a scatter plot you want. I haven't implemented that yet. If all you want are labels, then the standard labels feature of kap can be used: https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Aline%20%22foo%22%20%22bar%22%20%22test%22%20labels%202%203%20%E2%8D%B4%2010%2020%2025%202%201%203","msgtype":"m.text","org.matrix.msc1767.text":"If you want x values, then it's more of a scatter plot you want. I haven't implemented that yet. If all you want are labels, then the standard labels feature of kap can be used: https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Aline%20%22foo%22%20%22bar%22%20%22test%22%20labels%202%203%20%E2%8D%B4%2010%2020%2025%202%201%203"}} {"origin_server_ts":1685946075967,"event_id":"$7zo8Ryy0FGe30A9sTKgVKFUstenYRCbgKu-dH4B6Wco","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Or you can name the other axis, which means naming the datasets: https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Aline%20%22foo%22%20%22bar%22%20%22test%22%20labels%202%203%20%E2%8D%B4%2010%2020%2025%202%201%203","msgtype":"m.text","org.matrix.msc1767.text":"Or you can name the other axis, which means naming the datasets: https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Aline%20%22foo%22%20%22bar%22%20%22test%22%20labels%202%203%20%E2%8D%B4%2010%2020%2025%202%201%203"}} {"origin_server_ts":1685946080697,"event_id":"$XBeH9fC3yHStDjkoI6xaNp0KVUIfBhCp8hNSa-lpu3U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Or you can do both, of course.","msgtype":"m.text","org.matrix.msc1767.text":"Or you can do both, of course."}} {"origin_server_ts":1685946268145,"event_id":"$Hzd4LTKWAiwXyDCvRsNs9FMGX1oyJYTJDFFKz8S4VdM","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1685946339073,"event_id":"$r-jDfVYVBXZp7njimyFW62ZnthLU9KSJ3soiEQyvbRg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$Hzd4LTKWAiwXyDCvRsNs9FMGX1oyJYTJDFFKz8S4VdM","type":"m.room.redaction","content":{"redacts":"$Hzd4LTKWAiwXyDCvRsNs9FMGX1oyJYTJDFFKz8S4VdM"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1685946288413,"event_id":"$l_9MN0LPwXHbj6sqM9vXj5b1JEM1cinVPsY9wJkL5Bo","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"If you want to have \"math-y\" plots, your x values can be different from 0, 1, 2...","msgtype":"m.text"}} {"origin_server_ts":1685946308352,"event_id":"$aowppPqBbWjecQOehE_HZ7tP_Cl_h5AwDH3VaNQJetI","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"Sorry on my sides the links are the same","msgtype":"m.text"}} {"origin_server_ts":1685946320806,"event_id":"$Qc7n0T8iVnRlf16YRaF7o3iK9SJ5xs4KWwIksanWyxA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Or coerce it to floating point before creating the labels: https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Aline%20(%E2%8D%95%C2%A80.0%2BL)%20labels%20%CE%BBmath%3Asin%20%CE%BBmath%3Acos%20%7B%E2%8D%9E%E2%8D%BA%20%E2%8D%B5%7D%E2%8C%BB%20L%E2%86%90(%E2%8D%B330)%C3%B73","msgtype":"m.text","org.matrix.msc1767.text":"Or coerce it to floating point before creating the labels: https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Aline%20(%E2%8D%95%C2%A80.0%2BL)%20labels%20%CE%BBmath%3Asin%20%CE%BBmath%3Acos%20%7B%E2%8D%9E%E2%8D%BA%20%E2%8D%B5%7D%E2%8C%BB%20L%E2%86%90(%E2%8D%B330)%C3%B73"}} {"origin_server_ts":1685946332462,"event_id":"$PlycssY9X9qtWwIC57A6ogK-hHm_5i8Me81o-ZHqpdA","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"m.new_content":{"body":"Sorry on my side the links are the same","msgtype":"m.text"},"m.relates_to":{"event_id":"$aowppPqBbWjecQOehE_HZ7tP_Cl_h5AwDH3VaNQJetI","rel_type":"m.replace"},"body":" * Sorry on my side the links are the same","msgtype":"m.text"}} {"origin_server_ts":1685946339073,"event_id":"$r-jDfVYVBXZp7njimyFW62ZnthLU9KSJ3soiEQyvbRg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$Hzd4LTKWAiwXyDCvRsNs9FMGX1oyJYTJDFFKz8S4VdM","type":"m.room.redaction","content":{"redacts":"$Hzd4LTKWAiwXyDCvRsNs9FMGX1oyJYTJDFFKz8S4VdM"}} {"origin_server_ts":1685946362036,"event_id":"$Ujz3bD9lT2qAevDF-jDZY5dTRQpLkvbRYaUxKg2PmiQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You're right, My mistake. Here's the correct version: https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Aline%20(%E2%8D%95%C2%A8L)%20labels%20%CE%BBmath%3Asin%20%CE%BBmath%3Acos%20%7B%E2%8D%9E%E2%8D%BA%20%E2%8D%B5%7D%E2%8C%BB%20L%E2%86%90(%E2%8D%B330)%C3%B73","msgtype":"m.text","org.matrix.msc1767.text":"You're right, My mistake. Here's the correct version: https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Aline%20(%E2%8D%95%C2%A8L)%20labels%20%CE%BBmath%3Asin%20%CE%BBmath%3Acos%20%7B%E2%8D%9E%E2%8D%BA%20%E2%8D%B5%7D%E2%8C%BB%20L%E2%86%90(%E2%8D%B330)%C3%B73"}} {"origin_server_ts":1685946504358,"event_id":"$yA5LwLTjBlL01wSVZb8Lp7pNt15lkkYWQ7JdiGFhu5o","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"I didn't know you can label your array in KAP","msgtype":"m.text"}} {"origin_server_ts":1685946523024,"event_id":"$tsx5zzAK7wAaG84gbMSd3Z29ght0m0ppa5qGyKYdDd8","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"That's interesting","msgtype":"m.text"}} {"origin_server_ts":1685946590561,"event_id":"$kxxIYjzKPbf8H0Hdi6jZBZ8tya7yERB4I7p1ewm3HHk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You can. The new renderer doesn't draw the labels (the old one did). I'll fix that.","msgtype":"m.text"}} {"origin_server_ts":1685946626567,"event_id":"$_GAGbXjdLdTU5dx6aq6j_905iSq1RJRGrcBWmVwzuS8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The labels are kept during structural operations such as transposition or indexing","msgtype":"m.text"}} {"origin_server_ts":1685946675138,"event_id":"$Aibm-l2M7LX2nEpn0r8KR1di6rVV8DY2NQedDVbWF3A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you turn off the new renderer you can see the labels when printing values.","msgtype":"m.text"}} {"origin_server_ts":1685946991128,"event_id":"$9LKab9Qmc0nGPQGrUnpZW8Rh4z5_NdXJaccximjhvtE","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"Wouldn't it use too much memory if you have to stringify a number array to use as labels?","msgtype":"m.text"}} {"origin_server_ts":1685947058336,"event_id":"$P13lfZhnIeVpaOS42wis5DDiUYQ6piOKFmXGpMeZtuQ","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"(the rationals look nice, I like it https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Aline%20((%E2%8D%95%C2%A8)%C2%ABlabels%C2%BB(%CE%BBmath%3Asin%20%CE%BBmath%3Acos%20%7B%E2%8D%9E%E2%8D%BA%20%E2%8D%B5%7D%E2%8C%BB))%20(%E2%8D%B330)%C3%B73)","msgtype":"m.text"}} {"origin_server_ts":1685947556452,"event_id":"$3ouk9XwrUo4hya9Py-KiW3DCY2XK9_h5_Rd4v5p27oE","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"For math stuff maybe x values can be decided by the left argument (I see this as orthogonal to the string labels), so I can do\n```","msgtype":"m.text","formatted_body":"

                    For math stuff maybe x values can be decided by the left argument (I see this as orthogonal to the string labels), so I can do<\/p>\n

                    <\/code><\/pre>\n"}}
                    {"origin_server_ts":1685947628213,"event_id":"$5gBDUDeYNyY89Qtdj9dwcxnUhn1g-b-5Hx61oQ-5J3I","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"For math stuff maybe x values can be decided by the left argument (I see this as orthogonal to the string labels), so I can do\n```\n( ⊢«chart:line»Func) x_array\n```","msgtype":"m.text","formatted_body":"

                    For math stuff maybe x values can be decided by the left argument (I see this as orthogonal to the string labels), so I can do<\/p>\n

                    ( ⊢«chart:line»Func) x_array\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$3ouk9XwrUo4hya9Py-KiW3DCY2XK9_h5_Rd4v5p27oE","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * For math stuff maybe x values can be decided by the left argument (I see this as orthogonal to the string labels), so I can do\n```\n( ⊢«chart:line»Func) x_array\n```","msgtype":"m.text","formatted_body":" * 

                    For math stuff maybe x values can be decided by the left argument (I see this as orthogonal to the string labels), so I can do<\/p>\n

                    ( ⊢«chart:line»Func) x_array\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1685947747234,"event_id":"$WaPFoyn4xZjthYrZPQ1wYg-pGUk4Wi9nftWBVrSI_hE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$3ouk9XwrUo4hya9Py-KiW3DCY2XK9_h5_Rd4v5p27oE"}},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"> <@vylsaz:matrix.org> For math stuff maybe x values can be decided by the left argument (I see this as orthogonal to the string labels), so I can do\n> ```\n> ( ⊢«chart:line»Func) x_array\n> ```\n\nWell, while currently `chart:line` (and later, `chart:bar`, etc...) are monadic, there will be a dyadic form. In that case, the left argument will be rendering parameters (such as specifying scales, or if you want logarithmic, etc)"},{"mimetype":"text/html","body":"
                    In reply to<\/a> @vylsaz:matrix.org<\/a>

                    For math stuff maybe x values can be decided by the left argument (I see this as orthogonal to the string labels), so I can do<\/p>\n

                    ( ⊢«chart:line»Func) x_array\n<\/code><\/pre>\n<\/blockquote><\/mx-reply>Well, while currently chart:line<\/code> (and later, chart:bar<\/code>, etc...) are monadic, there will be a dyadic form. In that case, the left argument will be rendering parameters (such as specifying scales, or if you want logarithmic, etc)"}],"format":"org.matrix.custom.html","body":"> <@vylsaz:matrix.org> For math stuff maybe x values can be decided by the left argument (I see this as orthogonal to the string labels), so I can do\n> ```\n> ( ⊢«chart:line»Func) x_array\n> ```\n\nWell, while currently `chart:line` (and later, `chart:bar`, etc...) are monadic, there will be a dyadic form. In that case, the left argument will be rendering parameters (such as specifying scales, or if you want logarithmic, etc)","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @vylsaz:matrix.org<\/a>

                    For math stuff maybe x values can be decided by the left argument (I see this as orthogonal to the string labels), so I can do<\/p>\n

                    ( ⊢«chart:line»Func) x_array\n<\/code><\/pre>\n<\/blockquote><\/mx-reply>Well, while currently chart:line<\/code> (and later, chart:bar<\/code>, etc...) are monadic, there will be a dyadic form. In that case, the left argument will be rendering parameters (such as specifying scales, or if you want logarithmic, etc)"}}
                    {"origin_server_ts":1685947826124,"event_id":"$OEibCPQDhsl6_1MeR5aXHcDf0ErHK2aCDE3DI_Mhfes","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"It's be something like `(:logarithmic 1 :grid 0.5) chart:line Data`"},{"mimetype":"text/html","body":"It's be something like (:logarithmic 1 :grid 0.5) chart:line Data<\/code>"}],"format":"org.matrix.custom.html","body":"It's be something like `(:logarithmic 1 :grid 0.5) chart:line Data`","msgtype":"m.text","formatted_body":"It's be something like (:logarithmic 1 :grid 0.5) chart:line Data<\/code>"}}
                    {"origin_server_ts":1685947946664,"event_id":"$I_7WKGw3XK0HHVhPU2iSwuET9d5yKBe2qgpnloYTP10","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"It'll be something like `(:logarithmic 1 :grid 0.5) chart:line Data`"},{"mimetype":"text/html","body":"It'll be something like (:logarithmic 1 :grid 0.5) chart:line Data<\/code>"}],"format":"org.matrix.custom.html","body":"It'll be something like `(:logarithmic 1 :grid 0.5) chart:line Data`","msgtype":"m.text","formatted_body":"It'll be something like (:logarithmic 1 :grid 0.5) chart:line Data<\/code>"},"m.relates_to":{"event_id":"$OEibCPQDhsl6_1MeR5aXHcDf0ErHK2aCDE3DI_Mhfes","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * It'll be something like `(:logarithmic 1 :grid 0.5) chart:line Data`"},{"mimetype":"text/html","body":" * It'll be something like (:logarithmic 1 :grid 0.5) chart:line Data<\/code>"}],"format":"org.matrix.custom.html","body":" * It'll be something like `(:logarithmic 1 :grid 0.5) chart:line Data`","msgtype":"m.text","formatted_body":" * It'll be something like (:logarithmic 1 :grid 0.5) chart:line Data<\/code>"}}
                    {"origin_server_ts":1685948267440,"event_id":"$dMTKzP2-fGwMT6NnMf9S9Juj7RwkAGl3-y5AkJG6WCA","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"Oh OK","msgtype":"m.text"}}
                    {"origin_server_ts":1685948591831,"event_id":"$nC5HSgGi7FvJVA47D1PL_ou6bFj7raln56QrFRokAeE","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"(plotting is such a rabbit hole)","msgtype":"m.text"}}
                    {"origin_server_ts":1685949407169,"event_id":"$FgBa1sqRUwaaMoovoGAp-tXaZuS89Vu_bMwrLohqLro","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, I don't know how much time I want to spend on it.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, I don't know how much time I want to spend on it."}}
                    {"origin_server_ts":1685949422342,"event_id":"$z7Hj4GceSvJAFGDZ8PxOjPpk126E359XypCdYVOSNxI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Well, I just committed a fix so that you at least have `math:pi` as a constant. :-)"},{"mimetype":"text/html","body":"Well, I just committed a fix so that you at least have math:pi<\/code> as a constant. :-)"}],"format":"org.matrix.custom.html","body":"Well, I just committed a fix so that you at least have `math:pi` as a constant. :-)","msgtype":"m.text","formatted_body":"Well, I just committed a fix so that you at least have math:pi<\/code> as a constant. :-)"}}
                    {"origin_server_ts":1685949431970,"event_id":"$a-nhaeYXpXML9tTD6H9hjLQBwwZCS52OEQ-jRUbU44c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"To do that, I had to implement support for constant variables. :-)","msgtype":"m.text","org.matrix.msc1767.text":"To do that, I had to implement support for constant variables. :-)"}}
                    {"origin_server_ts":1685949453544,"event_id":"$2CqkQOeLRQTnSLnW2YygoHh23tDZwjuOsr-rzUDVtwE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://codeberg.org/loke/array/src/branch/master/array/standard-lib/math.kap#L5","msgtype":"m.text","org.matrix.msc1767.text":"https://codeberg.org/loke/array/src/branch/master/array/standard-lib/math.kap#L5"}}
                    {"origin_server_ts":1685952029182,"event_id":"$Po68GZA6vr6kERpg8u9VMo2UiwL-5TXgtX-21Jb-PV0","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"Nice","msgtype":"m.text"}}
                    {"origin_server_ts":1686032326282,"event_id":"$i_8XcaXZOxMXkIP2QEhlGXDzXBLFybxfOmxtBSRES_s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Now there is `line`, `bar`, `pie` and `doughtnut`."},{"mimetype":"text/html","body":"Now there is line<\/code>, bar<\/code>, pie<\/code> and doughtnut<\/code>."}],"format":"org.matrix.custom.html","body":"Now there is `line`, `bar`, `pie` and `doughtnut`.","msgtype":"m.text","formatted_body":"Now there is line<\/code>, bar<\/code>, pie<\/code> and doughtnut<\/code>."}}
                    {"origin_server_ts":1686032329376,"event_id":"$fnzexuyy2LGiXD08KOBg3nmiYEiB8PDRzcfBbTTx-iA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Now there is `line`, `bar`, `pie` and `doughnut`."},{"mimetype":"text/html","body":"Now there is line<\/code>, bar<\/code>, pie<\/code> and doughnut<\/code>."}],"format":"org.matrix.custom.html","body":"Now there is `line`, `bar`, `pie` and `doughnut`.","msgtype":"m.text","formatted_body":"Now there is line<\/code>, bar<\/code>, pie<\/code> and doughnut<\/code>."},"m.relates_to":{"event_id":"$i_8XcaXZOxMXkIP2QEhlGXDzXBLFybxfOmxtBSRES_s","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * Now there is `line`, `bar`, `pie` and `doughnut`."},{"mimetype":"text/html","body":" * Now there is line<\/code>, bar<\/code>, pie<\/code> and doughnut<\/code>."}],"format":"org.matrix.custom.html","body":" * Now there is `line`, `bar`, `pie` and `doughnut`.","msgtype":"m.text","formatted_body":" * Now there is line<\/code>, bar<\/code>, pie<\/code> and doughnut<\/code>."}}
                    {"origin_server_ts":1686058507837,"event_id":"$DgRz7MTUxiKP_en4pO2G_3yvLLV7lIeZsdssbAGSGL0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm adding Excel import to the web version","msgtype":"m.text"}}
                    {"origin_server_ts":1686058514096,"event_id":"$gMLsgNSTfn1PWLhNtxA217s_zNKt3OQvoBX91YxDbdY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"All local, in-browser","msgtype":"m.text"}}
                    {"origin_server_ts":1686064252017,"event_id":"$Sr-hhCY0ZjRcHlxqqWMNliHWzh6AIKPWQPQPcqQ7UXY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, it's done now.","msgtype":"m.text"}}
                    {"origin_server_ts":1686064283436,"event_id":"$f2czqMrmmWR7WKhvETZ6MZFA_1mv7cOIiyGq8OV8FKg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Just type a variable name and pick an excel file","msgtype":"m.text"}}
                    {"origin_server_ts":1686064364736,"event_id":"$Pw4l76iCyCCd0oMh2C4Wpd023oC8eVtcVtDfzoZJvYA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"image.png","msgtype":"m.image","url":"mxc://dhsdevelopments.com/ZOaGFBJLxdQAjWKmkfEjQpiA","info":{"xyz.amorgan.blurhash":"LARp2q4n?bIo00kCn%V@~q?bIUt7","size":103966,"w":908,"h":705,"mimetype":"image/png"}}}
                    {"origin_server_ts":1686132132035,"event_id":"$OwKVsZ2hIvmjYZ4d75NbWTaKhxOiMnd1JwgSKggz6ac","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, UI changed a bit to make it more clear what's going on.","msgtype":"m.text"}}
                    {"origin_server_ts":1686665724915,"event_id":"$uzUQQDn_owJBSHavhh0Bqcpy64BkgnntEUslq1ccTIo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Working on an optimised version of `,/` that doesn't repeatedly call `,`.","msgtype":"m.text","formatted_body":"Working on an optimised version of ,/<\/code> that doesn't repeatedly call ,<\/code>."}}
                    {"origin_server_ts":1686665764361,"event_id":"$tp6rQEonB4v9Q0ShEb3FkmV0lf0OA_gz21kJRAJgCt4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What a pain. But initial tests show a performance increase of 350% in rendering array results (it spent most of its time doing string concatenations)","msgtype":"m.text"}}
                    {"origin_server_ts":1686665771502,"event_id":"$vnuE-G_se1_ptB1ypjN694qQ-ba8Ycjeg6_rMlsHVrY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"What a pain. But initial tests show a performance increase of 350% in rendering array results (it spent most of its time doing concatenations)","msgtype":"m.text"},"m.relates_to":{"event_id":"$tp6rQEonB4v9Q0ShEb3FkmV0lf0OA_gz21kJRAJgCt4","rel_type":"m.replace"},"body":" * What a pain. But initial tests show a performance increase of 350% in rendering array results (it spent most of its time doing concatenations)","msgtype":"m.text"}}
                    {"state_key":"@elcar0:matrix.org","origin_server_ts":1686670523973,"event_id":"$NJpd_OYveYSpbF8NKXvxVn8hfCvRz-bjlvML-K9_vmA","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","prev_content":{"displayname":"elcar0","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/PSkXJvFOTNyrTVohsRvWXgrX","displayname":"elcar0","membership":"join"},"replaces_state":"$XPpkdu7Ntt8ud9BcPguPMM5HFkxyZg1JfzvLYsF_vp4"}
                    {"origin_server_ts":1686674727453,"event_id":"$vGAUYs_TUzkE4op94WIXRSpXka2JQC1yGO0EGlsKiJA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, quite successful.","msgtype":"m.text"}}
                    {"origin_server_ts":1686674737936,"event_id":"$oYWg3rvFQeEDe9AKGo2HQ3brE_y6EoN6dPf0tofjBAk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This is a great example:","msgtype":"m.text"}}
                    {"origin_server_ts":1686674753826,"event_id":"$C30lcyt556p6vwx5X21Iow8nBstOAvasW5V_dflcbzQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"With the old unoptimised version (clientweb2-old):","msgtype":"m.text"}}
                    {"origin_server_ts":1686674754454,"event_id":"$9KeZTj6ciIRbV0raEDi2cODtbtG-7pT4bFzAIgJzDf0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2-old/#%E2%8D%B4%20%E2%8A%83%20time%3AmeasureTime%20%7B%20%2C%2F10000%E2%8D%B4(%E2%8A%82%201%202)%20%7D","msgtype":"m.text"}}
                    {"origin_server_ts":1686674759168,"event_id":"$RnYUUNCvRkdWsX5G8_nE5K7GXHr0F8lxfmA_K6rCfEk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"With the new version:","msgtype":"m.text"}}
                    {"origin_server_ts":1686674771086,"event_id":"$vuopF7r9FSwfwt4A8SZdWdc6jAm556K4OY_jwqcddIo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#%E2%8D%B4%20%E2%8A%83%20time%3AmeasureTime%20%7B%20%2C%2F10000%E2%8D%B4(%E2%8A%82%201%202)%20%7D","msgtype":"m.text"}}
                    {"origin_server_ts":1686676574123,"event_id":"$SL5uavnkV6IBtXD5wPpyWJrSFl4DHyW0kux6qfjOK30","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This does mean there are two separate implementations of concatenate.","msgtype":"m.text"}}
                    {"origin_server_ts":1686676600931,"event_id":"$cgXE1dZ--DyKrqzfkkJLzw-9GuqvmMnpRjwbeziU4XY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There may be bugs that show up as discrepancies between them. ","msgtype":"m.text"}}
                    {"origin_server_ts":1686676625437,"event_id":"$hgvb5cGwbWnwMIO1MtCiJt2fl3NroLu2mI1UH88hdEo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If anyone wants to see if they can find any between the two versions, that would be very useful. ","msgtype":"m.text"}}
                    {"origin_server_ts":1686766777427,"event_id":"$IBFRfIg90Bx6ynXMt8WoGaW2mf79wTrg-bLwx-l4bpg","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1686766796185,"event_id":"$eJe8l-AprE8q783A9lUkjCLeMjGodsuxyPglH9v6MhU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$IBFRfIg90Bx6ynXMt8WoGaW2mf79wTrg-bLwx-l4bpg","type":"m.room.redaction","content":{"redacts":"$IBFRfIg90Bx6ynXMt8WoGaW2mf79wTrg-bLwx-l4bpg"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                    {"origin_server_ts":1686766796185,"event_id":"$eJe8l-AprE8q783A9lUkjCLeMjGodsuxyPglH9v6MhU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$IBFRfIg90Bx6ynXMt8WoGaW2mf79wTrg-bLwx-l4bpg","type":"m.room.redaction","content":{"redacts":"$IBFRfIg90Bx6ynXMt8WoGaW2mf79wTrg-bLwx-l4bpg"}}
                    {"origin_server_ts":1686767162946,"event_id":"$4xI9D_DFTn5aaDB3WFhbjYtcoWWPx6tjkPk44YwcC2w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, 3x performance improvement in the JS version when formatting large arrays to text.","msgtype":"m.text"}}
                    {"origin_server_ts":1686767195880,"event_id":"$abG-oQNaHeaaOASDS6RPeSLdlzN3kYQGP1WmAG_RZtk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm using the text formatter to work on general optimisation of the interpreter, and while I've had some great improvements, it's still not super fast.","msgtype":"m.text"}}
                    {"origin_server_ts":1686767200331,"event_id":"$wHoeIG4wBF6fQ6MQU1JtCryZAr-yo0dvhIVie4WFBGM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I doubt it'll ever be.","msgtype":"m.text"}}
                    {"origin_server_ts":1686767240326,"event_id":"$-S775xlgUNMgcXQZDoXTpbWuje4Qkq_KA5XVUFNcF4s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This is the code: https://codeberg.org/loke/array/src/branch/master/array/standard-lib/output3.kap","msgtype":"m.text"}}
                    {"state_key":"@jay_els:matrix.org","origin_server_ts":1686777545869,"event_id":"$T1OQLbgOHqzswTbKrO1scmNVTaTKtU_dQ9VumEO5UWE","sender":"@jay_els:matrix.org","user_id":"@jay_els:matrix.org","type":"m.room.member","content":{"displayname":"jay_els","membership":"join"}}
                    {"state_key":"@jay_els:matrix.org","origin_server_ts":1686778431043,"event_id":"$5QGP1EW1UtUhhKqfLQXvpW5oTDep-Mjt4FJmtJ-NJnw","sender":"@jay_els:matrix.org","user_id":"@jay_els:matrix.org","prev_content":{"displayname":"jay_els","membership":"join"},"type":"m.room.member","content":{"membership":"leave"},"replaces_state":"$T1OQLbgOHqzswTbKrO1scmNVTaTKtU_dQ9VumEO5UWE"}
                    {"origin_server_ts":1686813848924,"event_id":"$uhy_YvOGKxcrquXBddA1hbhGucFilGc7cu83ukFtEtM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Currently, attempting to assign a value using `⇐` is an error. For example: `a⇐5`. I'm considering changing this so that this would be equivalent to assigning a constant function, i.e. it would be equivalent to: `a⇐{5}`."},{"mimetype":"text/html","body":"Currently, attempting to assign a value using ⇐<\/code> is an error. For example: a⇐5<\/code>. I'm considering changing this so that this would be equivalent to assigning a constant function, i.e. it would be equivalent to: a⇐{5}<\/code>."}],"format":"org.matrix.custom.html","body":"Currently, attempting to assign a value using `⇐` is an error. For example: `a⇐5`. I'm considering changing this so that this would be equivalent to assigning a constant function, i.e. it would be equivalent to: `a⇐{5}`.","msgtype":"m.text","formatted_body":"Currently, attempting to assign a value using ⇐<\/code> is an error. For example: a⇐5<\/code>. I'm considering changing this so that this would be equivalent to assigning a constant function, i.e. it would be equivalent to: a⇐{5}<\/code>."}}
                    {"origin_server_ts":1686813853895,"event_id":"$eSJpWi1bi7yQqPeqDGnmCSBmWLuk5L8buBXf8buNSuM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Is this a good idea?","msgtype":"m.text","org.matrix.msc1767.text":"Is this a good idea?"}}
                    {"origin_server_ts":1686815043356,"event_id":"$RgR5F2IBOAuEbZA49Fl6L82Ta1xsI2cu6YY7PLUHCQg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Another question: Currently all floating point to integer conversions are done by truncating. Should they use rounding instead?","msgtype":"m.text","org.matrix.msc1767.text":"Another question: Currently all floating point to integer conversions are done by truncating. Should they use rounding instead?"}}
                    {"origin_server_ts":1686815096825,"event_id":"$FCW9zqbtA0hU5P_mI_QpxhsevvikUuiA5C9RhS8TM9M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In practice I don't think it matters that much, since the time when integer conversion is important is when floating point values are used as array indexes.","msgtype":"m.text","org.matrix.msc1767.text":"In practice I don't think it matters that much, since the time when integer conversion is important is when floating point values are used as array indexes."}}
                    {"origin_server_ts":1686815132882,"event_id":"$9W5GHrFneq3oWmQ1NnsGTOVTPYpG9m974cZsdyNSxDc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So the question could be rephrased: What should happen when a nonzero argument is passed to an indexing function.","msgtype":"m.text","org.matrix.msc1767.text":"So the question could be rephrased: What should happen when a nonzero argument is passed to an indexing function."}}
                    {"origin_server_ts":1686815165066,"event_id":"$Ds4KZ9oSvmlmrG2TNSRhx5Tfsoq6ngMugULajtXcM2M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"(hmm, also things like `⍳` and `⫽`"},{"mimetype":"text/html","body":"(hmm, also things like ⍳<\/code> and ⫽<\/code>"}],"format":"org.matrix.custom.html","body":"(hmm, also things like `⍳` and `⫽`","msgtype":"m.text","formatted_body":"(hmm, also things like ⍳<\/code> and ⫽<\/code>"}}
                    {"origin_server_ts":1686815176063,"event_id":"$ixmZfZTmTohF_dPjxNRIEM2O63ouoZyvWLGaYwxJnio","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"(hmm, also things like `⍳` and `⫽`)"},{"mimetype":"text/html","body":"(hmm, also things like ⍳<\/code> and ⫽<\/code>)"}],"format":"org.matrix.custom.html","body":"(hmm, also things like `⍳` and `⫽`)","msgtype":"m.text","formatted_body":"(hmm, also things like ⍳<\/code> and ⫽<\/code>)"},"m.relates_to":{"event_id":"$Ds4KZ9oSvmlmrG2TNSRhx5Tfsoq6ngMugULajtXcM2M","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * (hmm, also things like `⍳` and `⫽`)"},{"mimetype":"text/html","body":" * (hmm, also things like ⍳<\/code> and ⫽<\/code>)"}],"format":"org.matrix.custom.html","body":" * (hmm, also things like `⍳` and `⫽`)","msgtype":"m.text","formatted_body":" * (hmm, also things like ⍳<\/code> and ⫽<\/code>)"}}
                    {"origin_server_ts":1686815180709,"event_id":"$6ydZyWcYDl6YzCXCdJ_lvDah_fHoo397VK6AYwBJUSc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Hhmm, also things like `⍳` and `⫽`"},{"mimetype":"text/html","body":"Hhmm, also things like ⍳<\/code> and ⫽<\/code>"}],"format":"org.matrix.custom.html","body":"Hhmm, also things like `⍳` and `⫽`","msgtype":"m.text","formatted_body":"Hhmm, also things like ⍳<\/code> and ⫽<\/code>"},"m.relates_to":{"event_id":"$Ds4KZ9oSvmlmrG2TNSRhx5Tfsoq6ngMugULajtXcM2M","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * Hhmm, also things like `⍳` and `⫽`"},{"mimetype":"text/html","body":" * Hhmm, also things like ⍳<\/code> and ⫽<\/code>"}],"format":"org.matrix.custom.html","body":" * Hhmm, also things like `⍳` and `⫽`","msgtype":"m.text","formatted_body":" * Hhmm, also things like ⍳<\/code> and ⫽<\/code>"}}
                    {"origin_server_ts":1686815182619,"event_id":"$hCQElK4VzLmLrV6U5dwrA1kKGgKbw8xiSkYwfdnCQ8o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Hmm, also things like `⍳` and `⫽`"},{"mimetype":"text/html","body":"Hmm, also things like ⍳<\/code> and ⫽<\/code>"}],"format":"org.matrix.custom.html","body":"Hmm, also things like `⍳` and `⫽`","msgtype":"m.text","formatted_body":"Hmm, also things like ⍳<\/code> and ⫽<\/code>"},"m.relates_to":{"event_id":"$Ds4KZ9oSvmlmrG2TNSRhx5Tfsoq6ngMugULajtXcM2M","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * Hmm, also things like `⍳` and `⫽`"},{"mimetype":"text/html","body":" * Hmm, also things like ⍳<\/code> and ⫽<\/code>"}],"format":"org.matrix.custom.html","body":" * Hmm, also things like `⍳` and `⫽`","msgtype":"m.text","formatted_body":" * Hmm, also things like ⍳<\/code> and ⫽<\/code>"}}
                    {"origin_server_ts":1686820616602,"event_id":"$69332n7OQTgklcgy7PuJTQfPFcwS-mV0gjvWUUV67K0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$RgR5F2IBOAuEbZA49Fl6L82Ta1xsI2cu6YY7PLUHCQg"}},"format":"org.matrix.custom.html","body":"I'd say it should error on a fractional value. `⍳10.5` or `a[2.2]` don't make much sense","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>I'd say it should error on a fractional value. ⍳10.5<\/code> or a[2.2]<\/code> don't make much sense"}}
                    {"origin_server_ts":1686820707885,"event_id":"$zDjXj7QWOI1qGL4BQwgYwBvfUg0ZVOWpinW9e5qmGfw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Fair. But what about 5.000000000001?","msgtype":"m.text","org.matrix.msc1767.text":"Fair. But what about 5.000000000001?"}}
                    {"origin_server_ts":1686820720048,"event_id":"$5AuRcOvZysbutrV8JfZobmi_qbJpYVjVCxk5tP4WGn8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"what about 4.9999999999999?","msgtype":"m.text","formatted_body":"what about 4.9999999999999?"}}
                    {"origin_server_ts":1686820726228,"event_id":"$9lO_qEDIRAY8FxJl3QFtlGannNLfFdnAQi_-tlzrVD4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Exactly.","msgtype":"m.text","org.matrix.msc1767.text":"Exactly."}}
                    {"origin_server_ts":1686820740336,"event_id":"$mXHWhq6eK3-E9glYYUW9LaKWAENgTKp6UHsFF1-EQNE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In the current implementation, that would become 4.","msgtype":"m.text","org.matrix.msc1767.text":"In the current implementation, that would become 4."}}
                    {"origin_server_ts":1686820750195,"event_id":"$-cf-f7DrsyW3TD15M_D8ZSKKWI1NQQVodbDkf5o-zxk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"you'd definitely want rounding to nearest if you wanted any implicit rounding","msgtype":"m.text","formatted_body":"you'd definitely want rounding to nearest if you wanted any implicit rounding"}}
                    {"origin_server_ts":1686820750546,"event_id":"$J5SW9rSqktwLRjwgUqD723vC2mUbcJLJK3551liOnig","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The other alternatives is to error, or to round.","msgtype":"m.text","org.matrix.msc1767.text":"The other alternatives is to error, or to round."}}
                    {"origin_server_ts":1686820774673,"event_id":"$RCS_ThLrOeRd1bQnTfgwCRWg9nZ6Po5TyIXKRvjrnfs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And if 4.9999999999 is 5, then what about 4.99, or 4.9?","msgtype":"m.text","org.matrix.msc1767.text":"And if 4.9999999999 is 5, then what about 4.99, or 4.9?"}}
                    {"origin_server_ts":1686820823151,"event_id":"$kGe6fepNMRCaJf9c6EcNj9iR5lPXHGHnJONxoKSHlJE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Dyalog does have some implicit rounding to integer, via `⎕CR`","msgtype":"m.text","formatted_body":"Dyalog does have some implicit rounding to integer, via ⎕CR<\/code>"}}
                    {"origin_server_ts":1686820838456,"event_id":"$u2IUN4stt3LtBF1EREPtpo_sUTePkXz786ShRAbN8uw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Dyalog does have some implicit rounding to integer, via `⎕CT`","msgtype":"m.text","formatted_body":"Dyalog does have some implicit rounding to integer, via ⎕CT<\/code>"},"m.relates_to":{"event_id":"$kGe6fepNMRCaJf9c6EcNj9iR5lPXHGHnJONxoKSHlJE","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* Dyalog does have some implicit rounding to integer, via `⎕CT`","msgtype":"m.text","formatted_body":"* Dyalog does have some implicit rounding to integer, via ⎕CT<\/code>"}}
                    {"origin_server_ts":1686820875436,"event_id":"$C8k3DiSyHrndsjhwnqZVDuPuzr99gGx2tTDnmjHMbKo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"i.e. it'll by default round off errors less than 1e¯14, but any larger error is still an error","msgtype":"m.text","formatted_body":"i.e. it'll by default round off errors less than 1e¯14, but any larger error is still an error"}}
                    {"origin_server_ts":1686820885063,"event_id":"$bBERGdhJ9XEuj3FNqqgm3pOFD0PLaKNTk-1hXG-OFXM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"I really am not a fan of `⎕CT`"},{"mimetype":"text/html","body":"I really am not a fan of ⎕CT<\/code>"}],"format":"org.matrix.custom.html","body":"I really am not a fan of `⎕CT`","msgtype":"m.text","formatted_body":"I really am not a fan of ⎕CT<\/code>"}}
                    {"origin_server_ts":1686820902568,"event_id":"$iogJtCklwD4T_4jLno3EI-B4RXLh5DWKpaY5SzYHpIc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"then you shouldn't be a fan of implicit rounding either","msgtype":"m.text","formatted_body":"then you shouldn't be a fan of implicit rounding either"}}
                    {"origin_server_ts":1686820904728,"event_id":"$izuyXwJuHLTAd6h0QDzbUE0F6WsSivyulX7wL1Wu_Jc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But in this case, it may be the appropriate solution.","msgtype":"m.text","org.matrix.msc1767.text":"But in this case, it may be the appropriate solution."}}
                    {"origin_server_ts":1686820919965,"event_id":"$LWSB9ELei4mvS_CbkG-UUQI29hiYDw6dP4y-HK-E_1w","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"well, `⎕CT` is an appropriate solution at times","msgtype":"m.text","formatted_body":"well, ⎕CT<\/code> is an appropriate solution at times"}}
                    {"origin_server_ts":1686820920245,"event_id":"$e5VV87z2GNTodVR61lYaB30WkcaCm4rG6x_Mm_CwK4g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"dzaima: Correct. That's why I'm not doing it."},{"mimetype":"text/html","body":"dzaima<\/a>: Correct. That's why I'm not doing it."}],"format":"org.matrix.custom.html","body":"dzaima: Correct. That's why I'm not doing it.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Correct. That's why I'm not doing it."}}
                    {"origin_server_ts":1686820932188,"event_id":"$tOKER8Kk718QfuphfWoqIOLmVl1m8HJnsI4AwTp0R3I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, I'm starting to realise that. Hence, my quesitons.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, I'm starting to realise that. Hence, my quesitons."}}
                    {"origin_server_ts":1686820935424,"event_id":"$HHBfK4EpdzEPyk5gXaa2fIHXxw4D0N8b-qJY3N7Lox8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Yeah, I'm starting to realise that. Hence, my questions","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, I'm starting to realise that. Hence, my questions"},"m.relates_to":{"event_id":"$tOKER8Kk718QfuphfWoqIOLmVl1m8HJnsI4AwTp0R3I","rel_type":"m.replace"},"body":" * Yeah, I'm starting to realise that. Hence, my questions","msgtype":"m.text","org.matrix.msc1767.text":" * Yeah, I'm starting to realise that. Hence, my questions"}}
                    {"origin_server_ts":1686820948756,"event_id":"$4RzT274O_iTeTqCk5iMlgkGthl4lBxZFG9M8CW3dhhQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$e5VV87z2GNTodVR61lYaB30WkcaCm4rG6x_Mm_CwK4g"}},"format":"org.matrix.custom.html","body":"well, currently you are accepting `⍳10.5`","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>well, currently you are accepting ⍳10.5<\/code>"}}
                    {"origin_server_ts":1686821002950,"event_id":"$Ok0ZzvTSgokqsO-dQVVEPXgx5Kg8fzmfDzlrH96T4jo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right, because it truncates.","msgtype":"m.text","org.matrix.msc1767.text":"Right, because it truncates."}}
                    {"origin_server_ts":1686821025146,"event_id":"$H5P8J4AiVk2aYP3GYPdxxH-xdcNo8j_DLPZsxFIQF4s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"so you are doing implicit rounding","msgtype":"m.text","formatted_body":"so you are doing implicit rounding"}}
                    {"origin_server_ts":1686821039687,"event_id":"$tdcpnMj5nGSW0Thd4N9kqezyTy2ZizTb5twrPQqgEZg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"No. Truncating. `⍳3.999999999` is `⍳3`"},{"mimetype":"text/html","body":"No. Truncating. ⍳3.999999999<\/code> is ⍳3<\/code>"}],"format":"org.matrix.custom.html","body":"No. Truncating. `⍳3.999999999` is `⍳3`","msgtype":"m.text","formatted_body":"No. Truncating. ⍳3.999999999<\/code> is ⍳3<\/code>"}}
                    {"origin_server_ts":1686821061809,"event_id":"$ssO8Ryr49yZGjEgodPjAd1gA9dFO4WDbsKIxlRV9TmA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"using \"rounding\" as a general term of converting floats to some near integer","msgtype":"m.text","formatted_body":"using \"rounding\" as a general term of converting floats to some near integer"}}
                    {"origin_server_ts":1686821126654,"event_id":"$DX4ICNgs7GIVjWPSyEGAuCWJaux2VPjM8Z9POPIUrpM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and here rounding to nearest is definitely significantly better than rounding down","msgtype":"m.text","formatted_body":"and here rounding to nearest is definitely significantly better than rounding down"}}
                    {"origin_server_ts":1686821169928,"event_id":"$qOUpggl5aVoXMsP8Km0FHc-ZYzKd8XPqRIzTaYjK0bY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Also, it's inclosistent because I don't support it for rationals: `⍳9999999999÷1000000000`"},{"mimetype":"text/html","body":"Also, it's inclosistent because I don't support it for rationals: ⍳9999999999÷1000000000<\/code>"}],"format":"org.matrix.custom.html","body":"Also, it's inclosistent because I don't support it for rationals: `⍳9999999999÷1000000000`","msgtype":"m.text","formatted_body":"Also, it's inclosistent because I don't support it for rationals: ⍳9999999999÷1000000000<\/code>"}}
                    {"origin_server_ts":1686821176805,"event_id":"$RUejNrBl-eRO6Wa3D4By1vrAGOBa3-n8kCQIuXRb7ss","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Also, it's inconsistent because I don't support it for rationals: `⍳9999999999÷1000000000`"},{"mimetype":"text/html","body":"Also, it's inconsistent because I don't support it for rationals: ⍳9999999999÷1000000000<\/code>"}],"format":"org.matrix.custom.html","body":"Also, it's inconsistent because I don't support it for rationals: `⍳9999999999÷1000000000`","msgtype":"m.text","formatted_body":"Also, it's inconsistent because I don't support it for rationals: ⍳9999999999÷1000000000<\/code>"},"m.relates_to":{"event_id":"$qOUpggl5aVoXMsP8Km0FHc-ZYzKd8XPqRIzTaYjK0bY","rel_type":"m.replace"},"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":" * Also, it's inconsistent because I don't support it for rationals: `⍳9999999999÷1000000000`"},{"mimetype":"text/html","body":" * Also, it's inconsistent because I don't support it for rationals: ⍳9999999999÷1000000000<\/code>"}],"format":"org.matrix.custom.html","body":" * Also, it's inconsistent because I don't support it for rationals: `⍳9999999999÷1000000000`","msgtype":"m.text","formatted_body":" * Also, it's inconsistent because I don't support it for rationals: ⍳9999999999÷1000000000<\/code>"}}
                    {"origin_server_ts":1686821197587,"event_id":"$w-0127W0j-f1NjeJw0-vuLThCv6I5dz5sie7rxPMz-g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Compared to:\n```\n⍳0.0+9999999999÷1000000000\n```"},{"mimetype":"text/html","body":"

                    Compared to:<\/p>\n

                    ⍳0.0+9999999999÷1000000000\n<\/code><\/pre>\n"}],"format":"org.matrix.custom.html","body":"Compared to:\n```\n⍳0.0+9999999999÷1000000000\n```","msgtype":"m.text","formatted_body":"

                    Compared to:<\/p>\n

                    ⍳0.0+9999999999÷1000000000\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1686821218876,"event_id":"$GMPjehR52omygxzaUzDB82C0DhIGGRCfqOCfJryH0_c","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"also, would you even ever get imprecise floats in places where you need integers? I certainly just have never encountered it in BQN","msgtype":"m.text","formatted_body":"also, would you even ever get imprecise floats in places where you need integers? I certainly just have never encountered it in BQN"}}
                    {"origin_server_ts":1686821231726,"event_id":"$IEBtw09y84W6T5NV3D0q_S8v6gdDyiA2ROSO9m6HaZ0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, you're right.","msgtype":"m.text","org.matrix.msc1767.text":"Yeah, you're right."}}
                    {"origin_server_ts":1686821252282,"event_id":"$j6Ftibkfd9EENrXJWlx99BjDyXr5epUth5TC6RpcCA4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So perhaps outright failing for anything non-integral is the right way to go. If you need it, you can just round yourself.","msgtype":"m.text","org.matrix.msc1767.text":"So perhaps outright failing for anything non-integral is the right way to go. If you need it, you can just round yourself."}}
                    {"origin_server_ts":1686821318447,"event_id":"$XEXYohQqK1iNAzatPUt32gPBgRE_0nyv7esMHt0kJw0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Especially since it support rationals, so things like (2÷3)×3 is safe.","msgtype":"m.text","org.matrix.msc1767.text":"Especially since it support rationals, so things like (2÷3)×3 is safe."}}
                    {"origin_server_ts":1687026322005,"event_id":"$IuNkM_wX65o7RzKcVH-H7nB4UBYXXwBTENOoAx9Y4C0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I rewrote part of the formatter. It's quite satisfying to increase the functionality of some code, while halving its size, just because one realises that a single function does everything I need.","msgtype":"m.text"}}
                    {"origin_server_ts":1687026326112,"event_id":"$qi8FU9ioIVg_gLKAjzhGnfeWuVHXPacMLz5fvWEQCRk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Old version:","msgtype":"m.text"}}
                    {"origin_server_ts":1687026362475,"event_id":"$AhWh-hCpilnBiX94qoYMkAO0aQ4pVfZhsAWUPzcrrcA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n∇ alignCells (v) {\n  colWidths ← ⌈⌿ (↑↓⍴)¨v\n  xAligned ← ((⍴v) ⍴ colWidths) {((≢⍵) (⍺-↑↓⍴⍵) ⍴ @\\s),⍵}¨ v\n  rowHeights ← ⌈/ ≢¨xAligned\n  yAligned ← (⍉ (⌽ ⍴ xAligned) ⍴ rowHeights) {⍵ ,[0] ((⍺-≢⍵) (↑↓⍴⍵)) ⍴ @\\s}¨ xAligned\n}\n```\n","msgtype":"m.text","formatted_body":"
                    ∇ alignCells (v) {\n  colWidths ← ⌈⌿ (↑↓⍴)¨v\n  xAligned ← ((⍴v) ⍴ colWidths) {((≢⍵) (⍺-↑↓⍴⍵) ⍴ @\\s),⍵}¨ v\n  rowHeights ← ⌈/ ≢¨xAligned\n  yAligned ← (⍉ (⌽ ⍴ xAligned) ⍴ rowHeights) {⍵ ,[0] ((⍺-≢⍵) (↑↓⍴⍵)) ⍴ @\\s}¨ xAligned\n}\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1687026390079,"event_id":"$ukVIL5x3WMhM3ouR1G_ZOUpCOg34uXbQoYT6ZMKL_PE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"New version:\n```\n∇ alignCells v {\n  colWidths ← ⌈⌿ (↑↓⍴)¨ v\n  rowHeights ← ⌈/ ≢¨ v\n  (rowHeights ,⌻ -1+colWidths) (zSpc↑)¨ v\n}\n```","msgtype":"m.text","formatted_body":"

                    New version:<\/p>\n

                    ∇ alignCells v {\n  colWidths ← ⌈⌿ (↑↓⍴)¨ v\n  rowHeights ← ⌈/ ≢¨ v\n  (rowHeights ,⌻ -1+colWidths) (zSpc↑)¨ v\n}\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1687026418492,"event_id":"$P4O-jdZK6jBGtjd_Qn5lIXtLBz7jWrFiv6Rv_BD_W8w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And it now also adds the spaces which the old version did not (it was clumsily added later)","msgtype":"m.text"}}
                    {"origin_server_ts":1687026485219,"event_id":"$2DEcTwoT43RKMsTlRy6kcL69sLy8CInliYxW0SC7uNA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`zSpc` is just a function that replaces `0` with space. It's needed because the character arrays don't have space as the prototype.","msgtype":"m.text","formatted_body":"zSpc<\/code> is just a function that replaces 0<\/code> with space. It's needed because the character arrays don't have space as the prototype."}}
                    {"origin_server_ts":1687027132398,"event_id":"$oKPnFBuEfGmj6WjUrsQ7s9UADyaecV4JxpA47Wxpzsk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's also twice as fast, which is useful.","msgtype":"m.text"}}
                    {"origin_server_ts":1687112681023,"event_id":"$v5AIkhdwPh59kPequszMDOis-v5Wcjf-irNLr0apAVg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, inverse \"where\" is now implemented: https://kapdemo.dhsdevelopments.com/clientweb2/#%E2%8D%B8%CB%9D%204%205","msgtype":"m.text"}}
                    {"origin_server_ts":1687113036065,"event_id":"$68c75-R5WAX-R6sVLPq1o3Nu6QPZkJOwgJEJljzSS18","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Hooray! Found a bug though: `⍸˝ ⍸ 2 2⍴0 1 1 0`.","msgtype":"m.text","formatted_body":"Hooray! Found a bug though: ⍸˝ ⍸ 2 2⍴0 1 1 0<\/code>."}}
                    {"origin_server_ts":1687113139237,"event_id":"$8fqmHQ0Jo7FDljIJZM64XV-LRGkBztF1nPm9Ymb8gJw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Wtf","msgtype":"m.text"}}
                    {"origin_server_ts":1687113140683,"event_id":"$mPePjE8xk734LUp2v0eApCxFRnA_NDQmR_aF60F71u4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Argh","msgtype":"m.text"}}
                    {"origin_server_ts":1687113145713,"event_id":"$cjEgexc7vBtvyXQLY0dSrumDXndZZIN0P2BVEq3PnNI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"My ordering check is backwards","msgtype":"m.text"}}
                    {"origin_server_ts":1687113230081,"event_id":"$bF1Kwo0L9a8Kvdo8NTSg6O1ksey2OQS7NDTzDcco3fI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I was certain I added checks for that in my testcases","msgtype":"m.text"}}
                    {"origin_server_ts":1687113313111,"event_id":"$7M6HVVExvIn-SVLu0EVRz6WC-YoRW9faS4yqwA8iqtg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Is there a reason for not supporting `⍣¯1` for this?","msgtype":"m.text","formatted_body":"Is there a reason for not supporting ⍣¯1<\/code> for this?"}}
                    {"origin_server_ts":1687113692343,"event_id":"$CDcIlQJKbWKb-wrRM2bThvGyV-6zqKbDZ9tnvb1NVkY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Fixed","msgtype":"m.text"}}
                    {"origin_server_ts":1687113698035,"event_id":"$zXR1l7kaqn8eCiI9JObRiq123RVd3JMr8jq6iT6WK44","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Uploading to the website now","msgtype":"m.text"}}
                    {"origin_server_ts":1687113710585,"event_id":"$lA5K_P2GSCJv01wHIA2jFPUQgO5kXCW1IbJNc7LuA3U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$7M6HVVExvIn-SVLu0EVRz6WC-YoRW9faS4yqwA8iqtg"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Is there a reason for not supporting `⍣¯1` for this?\n\nYou mean as opposed to having a separate operator for it?","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Is there a reason for not supporting ⍣¯1<\/code> for this?<\/blockquote><\/mx-reply>You mean as opposed to having a separate operator for it?"}} {"origin_server_ts":1687113733685,"event_id":"$LXmHbtyl9vCRODmcch4uYFSzqorTpUWHZ0Np_tSkx8s","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I was thinking both would work.","msgtype":"m.text","formatted_body":"I was thinking both would work."}} {"origin_server_ts":1687113800687,"event_id":"$B46w8gDF73IbtB6deh-yxC3MpglcLSAEF-yJFtXskZo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I don't really like the power version. I consider the syntax very clever, but ultimately nothing more than a clever trick.","msgtype":"m.text"}} {"origin_server_ts":1687113848176,"event_id":"$3Pf7JXmDxOoz8KiIJFGOfLVRDTTm5PIlmQbopVpXc9A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Because I can't think of a case where something like `(F⍣n)` would be used, where n could be either positive or negative.","msgtype":"m.text","formatted_body":"Because I can't think of a case where something like (F⍣n)<\/code> would be used, where n could be either positive or negative."}} {"origin_server_ts":1687113872301,"event_id":"$GMQUJKQxAaVFrk9jnIYFBCIyK9YBmNVZbcZJSDjIFSw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thus, if you want to do a repetition and you accidentally pass in a negative number, you will get very strange results instead of an error message.","msgtype":"m.text"}} {"origin_server_ts":1687113893512,"event_id":"$xpf70Fsv01hZtrPMu2jN41kZvRs1ohH7VGCCcN-je0U","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I wouldn't really say the results would be strange at all","msgtype":"m.text","formatted_body":"I wouldn't really say the results would be strange at all"}} {"origin_server_ts":1687113897723,"event_id":"$XfO5ZNXpD68OnOYCB59ahnuD1fysbX8x84d4JIMPsBY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"At least that's my justification for the choice.","msgtype":"m.text"}} {"origin_server_ts":1687113914035,"event_id":"$fqmlGPuXxF-EkxOY8tst6VJoJCXVLiP6nj80UXft2o0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"unexpected, sure, but very clear behavior","msgtype":"m.text","formatted_body":"unexpected, sure, but very clear behavior"}} {"origin_server_ts":1687113922930,"event_id":"$Eno5_5F6mUL_3I0zOMmlppxG8RblL9D-5sKYrWNMKs8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you made a mistake and never intended n to be negative, then the results will be very unexpected and probably hard to debug.","msgtype":"m.text"}} {"origin_server_ts":1687113924878,"event_id":"$yOwh6vRo63SKZQq0JNmzox7MU13SbgpDhAgJvge-VCM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"unexpected, sure (as with any consequence of wrong code), but very clear behavior","msgtype":"m.text","formatted_body":"unexpected, sure (as with any consequence of wrong code), but very clear behavior"},"m.relates_to":{"event_id":"$fqmlGPuXxF-EkxOY8tst6VJoJCXVLiP6nj80UXft2o0","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* unexpected, sure (as with any consequence of wrong code), but very clear behavior","msgtype":"m.text","formatted_body":"* unexpected, sure (as with any consequence of wrong code), but very clear behavior"}} {"origin_server_ts":1687113976330,"event_id":"$a5iE5di9XyqIVCizsPJwV7JtMZ7QeuAzFd2Vty1Lbqw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"A BQN example is `⍉⍟n`, which rotates the axes by `n` in either direction. If the function is invertible then the extension to negative numbers is very well behaved. Not so much with an inexact inverse like `⍸`.","msgtype":"m.text","formatted_body":"A BQN example is ⍉⍟n<\/code>, which rotates the axes by n<\/code> in either direction. If the function is invertible then the extension to negative numbers is very well behaved. Not so much with an inexact inverse like ⍸<\/code>."}} {"origin_server_ts":1687113976637,"event_id":"$lucEHL7LQXaxkXLoSD32teTJLkFEDS2qCc_piDCwLTo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It's just more clear to have a dedicated symbol for it, and while Dyalog may be restricted to `⎕AV`, I'm not :-)","msgtype":"m.text","formatted_body":"It's just more clear to have a dedicated symbol for it, and while Dyalog may be restricted to ⎕AV<\/code>, I'm not :-)"}} {"origin_server_ts":1687114008197,"event_id":"$S-ejzyIET26S8KgloG5e_o8IcIIdLL0CzI5RWVd2p7I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Dyalog's not restricted to `⎕AV` either","msgtype":"m.text","formatted_body":"Dyalog's not restricted to ⎕AV<\/code> either"}} {"origin_server_ts":1687114032784,"event_id":"$kiKz-glmqowZ2q14TFD9trnj10B8uuOv7NT2lhmMBd0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"e.g. `⍤` isn't in `⎕AV` but is used in Dyalog","msgtype":"m.text","formatted_body":"e.g. ⍤<\/code> isn't in ⎕AV<\/code> but is used in Dyalog"}} {"origin_server_ts":1687114049243,"event_id":"$mG_MlBTbkcKeVuS9Pi2rM-poHz9Y1DIzC5Y8-HyWa6Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I mean, implementing such an extension to power would be trivial (one line of code?) but I personally don't like things to be overly clever :-)","msgtype":"m.text"}} {"origin_server_ts":1687114095985,"event_id":"$XXceyPDY4tgtKh-fpgOeazj7EnxnJ8KqOuTS8IIxKi4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$kiKz-glmqowZ2q14TFD9trnj10B8uuOv7NT2lhmMBd0"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> e.g. `⍤` isn't in `⎕AV` but is used in Dyalog\n\nInteresting. You're right. So why is there a pushback on adding new symbols?","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    e.g. ⍤<\/code> isn't in ⎕AV<\/code> but is used in Dyalog<\/blockquote><\/mx-reply>Interesting. You're right. So why is there a pushback on adding new symbols?"}} {"origin_server_ts":1687114105490,"event_id":"$vtxtJAH-ujftx7Lyead0meWuOFFHGjCwpIlGplyghes","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Or `((2×)⍣n) 5` to multiply by a power of two. I agree this kind of thing is rarely used but not that it's weird or nonsense.","msgtype":"m.text","formatted_body":"Or ((2×)⍣n) 5<\/code> to multiply by a power of two. I agree this kind of thing is rarely used but not that it's weird or nonsense."}} {"origin_server_ts":1687114173884,"event_id":"$lArC6F36yuavqwV4JMwzUuzpaNV0cfCjHWQvh0gvVuU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$mG_MlBTbkcKeVuS9Pi2rM-poHz9Y1DIzC5Y8-HyWa6Q"}},"format":"org.matrix.custom.html","body":"it's not even that \"clever\" imo. It's a clear, obvious, extension that preserves (minus some edge-cases) `F (F⍣a) x` → `F⍣(a+1) x` and `(F⍣a) (F⍣b) x` → `(F⍣(a+b)) x`","msgtype":"m.text","formatted_body":"
                    ↰ <\/a> loke<\/a> <\/mx-reply>it's not even that \"clever\" imo. It's a clear, obvious, extension that preserves (minus some edge-cases) F (F⍣a) x<\/code> → F⍣(a+1) x<\/code> and (F⍣a) (F⍣b) x<\/code> → (F⍣(a+b)) x<\/code>"}} {"origin_server_ts":1687114221957,"event_id":"$8uyZZK3nl0lXAIPi9nK2b-YdIr-yVzxIwjNRGvPOns4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Getting stuff added to Dyalog's APL keyboard(s) is a pretty painful process. I remember it was a significant factor that Over (`⍥`) was already on it.","msgtype":"m.text","formatted_body":"Getting stuff added to Dyalog's APL keyboard(s) is a pretty painful process. I remember it was a significant factor that Over (⍥<\/code>) was already on it."}} {"origin_server_ts":1687114224862,"event_id":"$SX_FtPmJiCATmtHnpDec5-GNvaX78w75HrSx44B-Yow","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, fixed version uploaded.","msgtype":"m.text"}} {"origin_server_ts":1687114248103,"event_id":"$CaX6rMBxB73je-6NNrKejsUUPQjCxZabUKtI2krlpxs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks for finding bugs for me.","msgtype":"m.text"}} {"origin_server_ts":1687114279984,"event_id":"$BOwx33aTh_nCYTiuWVlNMsOL_cgJS9P5lQeqaJ_UhUU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I mean, your arguments are certainly valid. Not sure I'm swayed yet.","msgtype":"m.text"}} {"origin_server_ts":1687114294095,"event_id":"$0K8zdlasItpsAd8iTp-ljTK458GDIpNh5JgVMsh2zzQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll sleep on it. It's almost 3 and I need to work tomorrow.","msgtype":"m.text"}} {"origin_server_ts":1687117384481,"event_id":"$O93Ok-yOAOFHJ64y2ObIapcHC1iyl7gvKLz8SpKzvww","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Added KAP and other dialects supporting Indices inverse [to APL Wiki](https://aplwiki.com/wiki/Indices#History), don't tell ngn. Took forever because I decided I'd finally get April running, and neither April nor Quicklisp docs mention that `use-package` exists.","msgtype":"m.text","formatted_body":"Added KAP and other dialects supporting Indices inverse to APL Wiki<\/a>, don't tell ngn. Took forever because I decided I'd finally get April running, and neither April nor Quicklisp docs mention that use-package<\/code> exists."}} {"origin_server_ts":1687137044098,"event_id":"$iFWEfQDOBi6aCg3lK-thJQWFezB8eUSSgn86TvFESX8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks","msgtype":"m.text"}} {"origin_server_ts":1687137070314,"event_id":"$fd3u9P7uV0RCIuFw9GasSXcU1IX2Nw2J0y3MSdJh5Hw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I should actually stay documenting all of this","msgtype":"m.text"}} {"origin_server_ts":1687138939193,"event_id":"$_AI77glAAMcMvCe45vTPbrVd-lBu0klUXogC-d_l9AE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$O93Ok-yOAOFHJ64y2ObIapcHC1iyl7gvKLz8SpKzvww"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Added KAP and other dialects supporting Indices inverse [to APL Wiki](https://aplwiki.com/wiki/Indices#History), don't tell ngn. Took forever because I decided I'd finally get April running, and neither April nor Quicklisp docs mention that `use-package` exists.\n\nIs ngn against the where function?","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Added KAP and other dialects supporting Indices inverse
                    to APL Wiki<\/a>, don't tell ngn. Took forever because I decided I'd finally get April running, and neither April nor Quicklisp docs mention that use-package<\/code> exists.<\/blockquote><\/mx-reply>Is ngn against the where function?"}} {"origin_server_ts":1687139427370,"event_id":"$1SnkgDPa6pV0_bsie_lm0nRnwZc5ZJivl-2roTQ6spM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"He's against APL Wiki, and views contributing in any way as helping Dyalog: \"i would expect a wiki owned by dyalog to die away slowly. i would expect people who are not paid by dyalog to not contribute there. i would expect information about k to be contributed to a k wiki.\"","msgtype":"m.text","formatted_body":"He's against APL Wiki, and views contributing in any way as helping Dyalog: \"i would expect a wiki owned by dyalog to die away slowly. i would expect people who are not paid by dyalog to not contribute there. i would expect information about k to be contributed to a k wiki.\""}} {"origin_server_ts":1687139443794,"event_id":"$pc2rRd1GapvTyjClNrs3-J8fKuQdubAjhvQjKKkkz9g","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"You're much better off having missed that discussion...","msgtype":"m.text","formatted_body":"You're much better off having missed that discussion..."}} {"origin_server_ts":1687142854271,"event_id":"$l0Lv3A66cZ0yFbDrhtO36B8Wj_CT8k8bNg2aM42cRGU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"org.matrix.msc1767.message":[{"mimetype":"text/plain","body":"Marshall: I see. I can actually understand a lot of his opinions. I mostly don't agree with them, but I understand them."},{"mimetype":"text/html","body":"Marshall<\/a>: I see. I can actually understand a lot of his opinions. I mostly don't agree with them, but I understand them."}],"format":"org.matrix.custom.html","body":"Marshall: I see. I can actually understand a lot of his opinions. I mostly don't agree with them, but I understand them.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I see. I can actually understand a lot of his opinions. I mostly don't agree with them, but I understand them."}} {"origin_server_ts":1687142910816,"event_id":"$FQmOOqfpUzxcz6kL8SnscxHO9Ae6QMx4xO4_AF7-SOU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If this was Java or C I'd agree. But it's not like the array programming community is large enough to afford splinting into factions.","msgtype":"m.text","org.matrix.msc1767.text":"If this was Java or C I'd agree. But it's not like the array programming community is large enough to afford splinting into factions."}} {"origin_server_ts":1687196729930,"event_id":"$ogKlz26vmbork-v3Ss6fJoixqtq2MnwSF4kfpzk7Hdc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"My adding excel support to the web version turned out to be a useful move. At work today I had to reconcile the differences between some data in two excel sheets. The cross-referencing had to be done by substring in a column (different columns in the two files) so I had to extract the part of the string I was interested in and take an intersection. There were also a lot of duplicates all over.","msgtype":"m.text"}} {"origin_server_ts":1687196765340,"event_id":"$-9Eg20eFCLN9sQYdZV1961H1YDJdZNYzt6flCI97Jr0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I did it from the kay web interface by loading the excel files into the interpreter, and then a couple of expressions to extract the information and do the intersection.","msgtype":"m.text"}} {"origin_server_ts":1687196786069,"event_id":"$Qro4VhDDR6XM3jFD-ZWtYzMp23LpzU-5GhDlKxMVvDg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Much easier than doing it in Excel directly (in fact, I have no idea how I would have done it there).","msgtype":"m.text"}} {"origin_server_ts":1687196838550,"event_id":"$eQ7j-0EyIZPXtn6jjg43Yi9vvb3qZCpqkGfRO4ldZP0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The JS excel reader turned out to have some issues, so I had to clean up some weird data in excel first, but other than that it was all in the web vlient.","msgtype":"m.text"}} {"origin_server_ts":1687196845327,"event_id":"$oChInXLbxOixv0UUgznjpTl_10wxDQ-nGOmayE31bPY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"The JS excel reader turned out to have some issues, so I had to clean up some weird data in excel first, but other than that it was all in the web interpreter.","msgtype":"m.text"},"m.relates_to":{"event_id":"$eQ7j-0EyIZPXtn6jjg43Yi9vvb3qZCpqkGfRO4ldZP0","rel_type":"m.replace"},"body":" * The JS excel reader turned out to have some issues, so I had to clean up some weird data in excel first, but other than that it was all in the web interpreter.","msgtype":"m.text"}} {"origin_server_ts":1687196869138,"event_id":"$dH-HDCblEiAYr0OwqDTI7Rgm4zFloiLheTg42D2IZ5s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There is a weird sense of satisfaction when doing that.","msgtype":"m.text"}} {"origin_server_ts":1687196963529,"event_id":"$ExvdB_wEk9MxUQnInxkTh2EvhqyC-uJxTNU3VSA2j1w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The web ui has turned out to be unreasonably useful, being able to bring it up from any browser.","msgtype":"m.text"}} {"origin_server_ts":1687196981505,"event_id":"$ts8e1ApNOyaoNRAaprx2esrApjAe6wZR0f4lJSwKa2Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I hate that. I need to work on the real client.","msgtype":"m.text"}} {"origin_server_ts":1687237760676,"event_id":"$6luugyiC_6C8aqKZ2U25YDjte3-mb9qHjubxmQkaeFU","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"loke: \n > Also, that joke logo is better than I could make. I might use it for now.\n\nNo pressure to actually use it... but since you liked it, I sent it to my brother (who does sign writing, custom lettering, logotypes, etc) and he cleaned it up. Got an SVG if ya want.","msgtype":"m.text","formatted_body":"

                    loke<\/a>:<\/p>\n

                    \n

                    Also, that joke logo is better than I could make. I might use it for now.<\/p>\n<\/blockquote>\n

                    No pressure to actually use it... but since you liked it, I sent it to my brother (who does sign writing, custom lettering, logotypes, etc) and he cleaned it up. Got an SVG if ya want.<\/p>\n"}} {"origin_server_ts":1687237761496,"event_id":"$ANLdpppiuxwxTviRyYinu4vG1LEy7fwnY0VdZhVWi-I","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"body":"kap.png","msgtype":"m.image","url":"mxc://matrix.org/TOxAMVTwNjPduJKghXBWfAHg","info":{"xyz.amorgan.blurhash":"LVQ9_@Rj-;D%IUIURjof~qayRjof","size":16331,"w":520,"h":371,"mimetype":"image/png"}}} {"origin_server_ts":1687237796761,"event_id":"$tv_tGTFCpNQFIQ0kGCqgWfgBJNkRq03fFAWPOM_SCPg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh cool","msgtype":"m.text"}} {"origin_server_ts":1687237800077,"event_id":"$48ab4DlVGQ0lDtpZb0YtaEwiPB1k7pYj9L0YaziUZ8Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks","msgtype":"m.text"}} {"origin_server_ts":1687238076097,"event_id":"$r6JNMcpaFLEZXuac3RibK4RZBTnZpGTbEMFfYTu9C44","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"body":"np","msgtype":"m.text"}} {"origin_server_ts":1687244742289,"event_id":"$L1sQvymqETaf9lQsJy1gTSzu2nZ-0qdjtKalnWqMNxM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$6luugyiC_6C8aqKZ2U25YDjte3-mb9qHjubxmQkaeFU"}},"format":"org.matrix.custom.html","body":"> <@elcar0:matrix.org> loke: \n> > Also, that joke logo is better than I could make. I might use it for now.\n> \n> No pressure to actually use it... but since you liked it, I sent it to my brother (who does sign writing, custom lettering, logotypes, etc) and he cleaned it up. Got an SVG if ya want.\n\nI'd live the svg of you have it","msgtype":"m.text","formatted_body":"

                    In reply to<\/a> @elcar0:matrix.org<\/a>

                    loke<\/a>:<\/p>\n

                    \n

                    Also, that joke logo is better than I could make. I might use it for now.<\/p>\n<\/blockquote>\n

                    No pressure to actually use it... but since you liked it, I sent it to my brother (who does sign writing, custom lettering, logotypes, etc) and he cleaned it up. Got an SVG if ya want.<\/p>\n<\/blockquote><\/mx-reply>I'd live the svg of you have it"}} {"origin_server_ts":1687244749892,"event_id":"$2aNZwl6x_sJGln3kMcxNQF8oBX3FENUuEGtv7g-fdT0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"> <@elcar0:matrix.org> loke: \n> > Also, that joke logo is better than I could make. I might use it for now.\n> \n> No pressure to actually use it... but since you liked it, I sent it to my brother (who does sign writing, custom lettering, logotypes, etc) and he cleaned it up. Got an SVG if ya want.\n\nI'd live the svg if you have it","msgtype":"m.text","formatted_body":"

                    In reply to<\/a> elcar0<\/a>

                    loke<\/a>:<\/p>\n

                    \n

                    Also, that joke logo is better than I could make. I might use it for now.<\/p>\n<\/blockquote>\n

                    No pressure to actually use it... but since you liked it, I sent it to my brother (who does sign writing, custom lettering, logotypes, etc) and he cleaned it up. Got an SVG if ya want.<\/p>\n<\/blockquote><\/mx-reply>I'd live the svg if you have it"},"m.relates_to":{"event_id":"$L1sQvymqETaf9lQsJy1gTSzu2nZ-0qdjtKalnWqMNxM","rel_type":"m.replace"},"body":"* I'd live the svg if you have it","msgtype":"m.text"}} {"origin_server_ts":1687244756444,"event_id":"$i3WN29THVGuQ2uYtrxOwVGDp3_j6ubl7wIpd_ACHsFg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"> <@elcar0:matrix.org> loke: \n> > Also, that joke logo is better than I could make. I might use it for now.\n> \n> No pressure to actually use it... but since you liked it, I sent it to my brother (who does sign writing, custom lettering, logotypes, etc) and he cleaned it up. Got an SVG if ya want.\n\nI'd love the svg if you have it","msgtype":"m.text","formatted_body":"

                    In reply to<\/a> elcar0<\/a>

                    loke<\/a>:<\/p>\n

                    \n

                    Also, that joke logo is better than I could make. I might use it for now.<\/p>\n<\/blockquote>\n

                    No pressure to actually use it... but since you liked it, I sent it to my brother (who does sign writing, custom lettering, logotypes, etc) and he cleaned it up. Got an SVG if ya want.<\/p>\n<\/blockquote><\/mx-reply>I'd love the svg if you have it"},"m.relates_to":{"event_id":"$L1sQvymqETaf9lQsJy1gTSzu2nZ-0qdjtKalnWqMNxM","rel_type":"m.replace"},"body":"* I'd love the svg if you have it","msgtype":"m.text"}} {"origin_server_ts":1687245251525,"event_id":"$2wjoCC7ynOeJkSawTivHPz1hIPQmN3eUX9SVJ70YNbU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now I need to use this to actually create a web page. Sadly I have no design skills. ","msgtype":"m.text"}} {"origin_server_ts":1687245286753,"event_id":"$jbOJzKgpQ6fhIOasr6-J38eDXPQTy0506CNax1M1q4o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"As is It'll evident to anyone visiting kapdemo.dhsdevelopments.com ","msgtype":"m.text"}} {"origin_server_ts":1687256072975,"event_id":"$VfGNAevSze1kPN8nOaCnBVw-yL0IR83dfxxio9rPsB0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The number of people who has actually used Kap to solve real-life word related problems amounts to 1.","msgtype":"m.text"}} {"origin_server_ts":1687256096224,"event_id":"$Trp3quHxs_cJWdrtVv0sbYPGYVr4B-L3RhAwhuSgmCU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"The number of people who has actually used Kap to solve real-life work related problems amounts to 1.","msgtype":"m.text"},"m.relates_to":{"event_id":"$VfGNAevSze1kPN8nOaCnBVw-yL0IR83dfxxio9rPsB0","rel_type":"m.replace"},"body":"* The number of people who has actually used Kap to solve real-life work related problems amounts to 1.","msgtype":"m.text"}} {"origin_server_ts":1687256109710,"event_id":"$RON-jrrjVYrKF0WcfmqgxlP4gHZrESYp81xwT-O7X3c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"My goal is to get that number to 2.","msgtype":"m.text"}} {"origin_server_ts":1688029317047,"event_id":"$098pG2OsE-62UryzhbvWYrDH-G3bzSsoqMPGYfrUKGo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I wrote this function to encode a character to the corresponding UTF-8 sequence. It's pretty must a one-to-one conversion from the reference implementation. Is there some clever mathematical property of this algorithm that allows me to make is nicer?","msgtype":"m.text"}} {"origin_server_ts":1688029319960,"event_id":"$FWTN3fupTvkEnRlprp3Y1EV2JsXbCE_WoLfMx2IPTtE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n∇ encodeUtf8Char (ch) {\n code ← ch-@\\0\n when {\n (code < 128) { ,code }\n (code < 2048) { (192 ∨∵ 31 ∧∵ ¯6 ⌽∵ code) (128 ∨∵ 63 ∧∵ code) }\n (code < 65536) { (224 ∨∵ 15 ∧∵ ¯12 ⌽∵ code) (128 ∨∵ 63 ∧∵ ¯6 ⌽∵ code) (128 ∨∵ 63 ∧∵ code) }\n (code < 1114112) { (240 ∨∵ 7 ∧∵ ¯18 ⌽∵ code) (128 ∨∵ 63 ∧∵ ¯12 ⌽∵ code) (128 ∨∵ 63 ∧∵ ¯6 ⌽∵ code) (128 ∨∵ 63 ∧∵ code) }\n (1) { throw \"Invalid character: \",⍕code }\n }\n}\n```","msgtype":"m.text","formatted_body":"

                    ∇ encodeUtf8Char (ch) {\n  code ← ch-@\\0\n  when {\n    (code < 128)     { ,code }\n    (code < 2048)    { (192 ∨∵ 31 ∧∵ ¯6 ⌽∵ code) (128 ∨∵ 63 ∧∵ code) }\n    (code < 65536)   { (224 ∨∵ 15 ∧∵ ¯12 ⌽∵ code) (128 ∨∵ 63 ∧∵ ¯6 ⌽∵ code) (128 ∨∵ 63 ∧∵ code) }\n    (code < 1114112) { (240 ∨∵ 7 ∧∵ ¯18 ⌽∵ code) (128 ∨∵ 63 ∧∵ ¯12 ⌽∵ code) (128 ∨∵ 63 ∧∵ ¯6 ⌽∵ code) (128 ∨∵ 63 ∧∵ code) }\n    (1) { throw \"Invalid character: \",⍕code }\n  }\n}\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1688029688948,"event_id":"$e7qrcLPp6XbE7CUTl_oG2bPN8XoGANgs8pBA-UkQq6U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I wrote this function to encode a character to the corresponding UTF-8 sequence. It's pretty must a one-to-one conversion from the reference implementation. Is there some clever mathematical property of this algorithm that allows me to make it nicer?","msgtype":"m.text"},"m.relates_to":{"event_id":"$098pG2OsE-62UryzhbvWYrDH-G3bzSsoqMPGYfrUKGo","rel_type":"m.replace"},"body":" * I wrote this function to encode a character to the corresponding UTF-8 sequence. It's pretty must a one-to-one conversion from the reference implementation. Is there some clever mathematical property of this algorithm that allows me to make it nicer?","msgtype":"m.text"}}
                    {"origin_server_ts":1688030128386,"event_id":"$A_6-WZWzWiV8x2RL1AuaNexAmwcsY_2Ict03uL1eoxs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"not really a \"mathematical property\", but if you align it like [this](https://dzaima.github.io/paste/#0e9TRrpCal5yfkhpakmbhnJFYpKCRnKGpUM2loAASVXjUNkEhOUPXIcYAKFKekZoHllIAqgLJ2igYGllogvgK1Qo6YKFaFGkjAxOIfLUCWUDD0NJI4VHHikcdWxWMDYGs5SDWofVmCo969oKYIHs0gcqMLGDKzIxhyiByqA4yMzU1NtMk4CANIyMTmHGGpghbDY2IsZYC1xkaGpoYGhoBwx/oBhMDmCZzJCdYEOcE2jnVEOS6koyi/HIFJc@8ssSczBRgCkksSkwuSS2yUlDSedQ7FZ4SarlqAQ#APL) all those rotates align up. And you should be able to replace all the `n ∧∵`s with `63 ∧∵`s. At which point, across the last 3 cases the only varying thing is the leftmost `∨∵` value and the condition, but those should be reasonably possible to array-ify","msgtype":"m.text","formatted_body":"not really a \"mathematical property\", but if you align it like this<\/a> all those rotates align up. And you should be able to replace all the n ∧∵<\/code>s with 63 ∧∵<\/code>s. At which point, across the last 3 cases the only varying thing is the leftmost ∨∵<\/code> value and the condition, but those should be reasonably possible to array-ify"}}
                    {"origin_server_ts":1688031022675,"event_id":"$kfAApoRGQnv0c4gh2EH77pRfVD9Da9iNrQf86Y_jvCI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh, right.","msgtype":"m.text"}}
                    {"origin_server_ts":1688031219012,"event_id":"$rlsKp5D1fla6wf_YdZvS6DjLTRbUIpW1_fajYhssjI4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall has [this](https://github.com/mlochbaum/bqn-libs/blob/568e7189fdfa6f44e0cc9d49567128d3700a064c/strings.bqn#L108-L116) for converting a list of chars to UTF-8","msgtype":"m.text","formatted_body":"Marshall has this<\/a> for converting a list of chars to UTF-8"}}
                    {"origin_server_ts":1688037234969,"event_id":"$56FuCDz8pGliBwVAVLz1ZrRKL6njxykbe70DasRaXks","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Recently [changed](https://github.com/mlochbaum/bqn-libs/commit/4b4b95e998d6ea35d8747c2e5292066577492aed) from per-character 1-liner.","msgtype":"m.text","formatted_body":"Recently changed<\/a> from per-character 1-liner."}}
                    {"origin_server_ts":1688404916109,"event_id":"$1a39Zj_t_TJNuaMD-RHPyFlwJmNDKmhH9yzeY2ZWiXE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I need a way to specify hex and binary explicitly. I'll use 0x for hex if no one suggests a better syntax. ","msgtype":"m.text"}}
                    {"origin_server_ts":1688404924469,"event_id":"$Yr7zhlFnMJL_7SOvRVlup6uavWEqZ--SkDhYmxR94Cw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"0b for binary maybe. ","msgtype":"m.text"}}
                    {"origin_server_ts":1688446829639,"event_id":"$I6KUNux1zcxlCpJRdYci-WZdGFW-K7hYhR7-5krpzCo","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"I only know that Ada has a different way to do it. https://www.adacore.com/gems/ada-gem-7","msgtype":"m.text"}}
                    {"origin_server_ts":1688446865187,"event_id":"$gh29knAKj2LOyrsnYxT_cfmvXZ69CbsoYlgfurRBOgc","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"but it is designed to allow any bases, like J","msgtype":"m.text"}}
                    {"origin_server_ts":1688447130489,"event_id":"$zSyN22mg1BRiSI9e83t57btxnaiGbfY8Pw31t0mif2g","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"the Python way is good enough to me (I love that I can write underscores in numbers in python, too)","msgtype":"m.text"}}
                    {"origin_server_ts":1688470803084,"event_id":"$Gj3oaqTWtPhPDCnuuYjAF_GrSyW4P4ZE9bRNuUH5JQs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"> based literals","msgtype":"m.text","formatted_body":"
                    based literals<\/blockquote>"}} {"origin_server_ts":1688478918417,"event_id":"$2yXuqHA_RLWRr4fWb4cQjS-hHk-Pe9QcDM3GzLNFEso","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"vylsaz: how does python do it?","msgtype":"m.text","formatted_body":"vylsaz<\/a>: how does python do it?"}} {"origin_server_ts":1688479092428,"event_id":"$dzkPUynMrJvEYyE01A4VmEepUw2mVij0hdi73BVow1c","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the regular `0xAAA` and `0b101` (plus `0b11111111_00000000` where the underscore is a noop)","msgtype":"m.text","formatted_body":"the regular 0xAAA<\/code> and 0b101<\/code> (plus 0b11111111_00000000<\/code> where the underscore is a noop)"}} {"origin_server_ts":1688488300266,"event_id":"$fbgsNczji1t64xKF9Qb0SNc1rooqsvAOxr7cRQw9B8c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm at the airport now. Going on a flight to Europe. I'm in economy so if I have enough space for the laptop and if the charger works I'll implement it on the flight. ","msgtype":"m.text"}} {"origin_server_ts":1688526479906,"event_id":"$J5v13z3eoT0GhFVnJSDi5iGOIv_qS-fZgTey6PnhG_g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I was hacking during the flight but I didn't implement hex reading. Instead I fishined support for libedit in the native linux version.","msgtype":"m.text"}} {"origin_server_ts":1688526521998,"event_id":"$YSkfcX59YWme1zijr3b8NFbrDsQxQFvxZvT386T90dY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Still don't have history support. I was landing when I was in the middle of it","msgtype":"m.text"}} {"origin_server_ts":1688526541941,"event_id":"$DGRuo5GJlpjhRgn0lVrzc_Wm61MnjGU22rP_My31E0U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The second 7 hour leg coming up, so maybe ican do it then.","msgtype":"m.text"}} {"origin_server_ts":1688526551454,"event_id":"$R8PcLfBWDqsCoVbcZMivH5bX-jMbfAB-ZKAwRNB1HfU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"The second 7 hour leg coming up, so maybe I can do it then.","msgtype":"m.text"},"m.relates_to":{"event_id":"$DGRuo5GJlpjhRgn0lVrzc_Wm61MnjGU22rP_My31E0U","rel_type":"m.replace"},"body":"* The second 7 hour leg coming up, so maybe I can do it then.","msgtype":"m.text"}} {"origin_server_ts":1689028641016,"event_id":"$pZEhQLw_w13GDm9NmLdjauviRPvuzYWumTvYo5lvuMg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I didn't do it on the flight, but it's implemented now.","msgtype":"m.text"}} {"origin_server_ts":1689171267923,"event_id":"$gIjEMHdHS5YoY5YdA-QtSsmRH6Pll7RIIoVAoXwgwg8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Also, now the native client uses libinput and has a backquote-prefix input method.","msgtype":"m.text"}} {"origin_server_ts":1689225242148,"event_id":"$LU-NojXPw9_DjuXHueb5XPaxrG7U57eb7s16tM5r8LE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Also, now the native client uses libedit and has a backquote-prefix input method.","msgtype":"m.text"},"m.relates_to":{"event_id":"$gIjEMHdHS5YoY5YdA-QtSsmRH6Pll7RIIoVAoXwgwg8","rel_type":"m.replace"},"body":" * Also, now the native client uses libedit and has a backquote-prefix input method.","msgtype":"m.text"}} {"origin_server_ts":1689570624423,"event_id":"$bFZUIiS3HZFRC0984tvaJpnQnSXc3Rz4Glnb-FAjyx4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think I will change the official spelling of the language to \"Kap\", since it's not really an acronym.","msgtype":"m.text"}} {"origin_server_ts":1689570627940,"event_id":"$kyiJylcb0SIMGjQvF6PTGQNVlxaM9YI-ynBswnixLCU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thoughts?","msgtype":"m.text"}} {"origin_server_ts":1689570678545,"event_id":"$ZjNr8wpbfKYOKIApbT9mNlchbwDZvo4f-EOvtTSIm5E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Also, I posted a kap-related post: https://functional.cafe/@loke/110727664478255396","msgtype":"m.text"}} {"origin_server_ts":1689676722195,"event_id":"$LRlndNFsVgBqggi3vBT6fstHq3Uq5SjsLZDJzRh_PQc","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$bFZUIiS3HZFRC0984tvaJpnQnSXc3Rz4Glnb-FAjyx4"}},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> I think I will change the official spelling of the language to \"Kap\", since it's not really an acronym.\n\nit makes sense.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    I think I will change the official spelling of the language to "Kap", since it's not really an acronym.<\/blockquote><\/mx-reply>it makes sense."}} {"origin_server_ts":1689676723953,"event_id":"$pdE3d2AlU8zJMl4_YBSIHQvd6v-fY5r7TlhpPDqQQB0","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"although","msgtype":"m.text"}} {"origin_server_ts":1689676733551,"event_id":"$UmFVTT-cuTxTL7_213_M05r-PBjmbb20IIQd9r78bKM","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"sounds like a pain to change it everywhere","msgtype":"m.text"}} {"origin_server_ts":1689676754098,"event_id":"$s4jhTvOgxUATQ9DIo1W0yXIKDLl7wjM3wXsuIifsfBw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'd change it wherever I care, and then just leave it :-)","msgtype":"m.text"}} {"origin_server_ts":1689676762457,"event_id":"$KuOnuOmXRR8UOQvno14qGk0zgHV3OamiK1tkLDG6Ldk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I'd change it wherever I care, and then just leave the rest :-)","msgtype":"m.text"},"m.relates_to":{"event_id":"$s4jhTvOgxUATQ9DIo1W0yXIKDLl7wjM3wXsuIifsfBw","rel_type":"m.replace"},"body":" * I'd change it wherever I care, and then just leave the rest :-)","msgtype":"m.text"}} {"origin_server_ts":1689823289238,"event_id":"$5Ld3qoyeGc4qXWIuXUHDT4-Bil7ABQfd8C4RgZnr5n8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I just realised that structural under gives us a very neat syntax to replace specific values in an array. To replace cells at 1 1 and 2 2 to `0`: `{0 0}⍢((1 1) (2 2)⊇) 3 3 ⍴ ⍳9`","msgtype":"m.text","formatted_body":"I just realised that structural under gives us a very neat syntax to replace specific values in an array. To replace cells at 1 1 and 2 2 to 0<\/code>: {0 0}⍢((1 1) (2 2)⊇) 3 3 ⍴ ⍳9<\/code>"}} {"origin_server_ts":1689823325117,"event_id":"$ewF10T635kGBQlyNJyqnSIgxsc1MjFPMZdKr7lzp8TY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"All I have to do is to make `⊇` support structural under, but that's trivial.","msgtype":"m.text","formatted_body":"All I have to do is to make ⊇<\/code> support structural under, but that's trivial."}} {"origin_server_ts":1689873717273,"event_id":"$IQyZPhYqhErFGDMXiT535aAkYSZKvndrLeQNkCBTi_8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ok, it works now. ","msgtype":"m.text"}} {"origin_server_ts":1689873768552,"event_id":"$2lp6g6q3Gz7sz4wGzm_tsXEuhbyjz-iTsko-RK8lvVc","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1689873783805,"event_id":"$50deZ8wiXysxKwLPVo07e3o0Ps1ISmZUtev-ksRInfY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$2lp6g6q3Gz7sz4wGzm_tsXEuhbyjz-iTsko-RK8lvVc","type":"m.room.redaction","content":{"redacts":"$2lp6g6q3Gz7sz4wGzm_tsXEuhbyjz-iTsko-RK8lvVc"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1689873783805,"event_id":"$50deZ8wiXysxKwLPVo07e3o0Ps1ISmZUtev-ksRInfY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$2lp6g6q3Gz7sz4wGzm_tsXEuhbyjz-iTsko-RK8lvVc","type":"m.room.redaction","content":{"redacts":"$2lp6g6q3Gz7sz4wGzm_tsXEuhbyjz-iTsko-RK8lvVc"}} {"origin_server_ts":1690004042937,"event_id":"$cPX1c4ac8HbrnPTyaSNuIqp7c3nhTUbfg8wGEgpu_O0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Woah, I just fixed a bug where `2|¯2` was 2, and not 0. It must have been there a while.","msgtype":"m.text","formatted_body":"Woah, I just fixed a bug where 2|¯2<\/code> was 2, and not 0. It must have been there a while."}} {"origin_server_ts":1690363213194,"event_id":"$PNznTMiCgKpSKLBq3COZMth7herLzhOwseai_L2if8Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This is the fix for that one by the way: https://codeberg.org/loke/array/commit/93800d078c7331ac9f626d39d63d862b6941aab7","msgtype":"m.text"}} {"origin_server_ts":1690363281190,"event_id":"$E_Nseo55ySTdB7yYJZOn9US96isP8H-OlI9UieOUW0A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And this lead to me discovering the mod on negative rational numbers was broken when using GMP: https://codeberg.org/loke/array/commit/507aa8d2a320a782925d0fd66014ce42f8743825","msgtype":"m.text"}} {"origin_server_ts":1690518890675,"event_id":"$m-UINxNSAPKPmY4Xfby6_Mwf_7oMSF1N1FNo_Dk9hgs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Wow. This is really surprising: Normally, the JVM implementation is the fastest by far, followed by the JS implementation and finally the native one.","msgtype":"m.text"}} {"origin_server_ts":1690518960153,"event_id":"$2_MtLrLIB0VvfR5qi-9oMlNeDcNIXgqsQvnsK5y5dUI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Now, for the following expression, I get very different results: `×/÷1+⍳100000`","msgtype":"m.text","formatted_body":"Now, for the following expression, I get very different results: ×/÷1+⍳100000<\/code>"}} {"origin_server_ts":1690519191422,"event_id":"$xYOrNe9-69oJAum7F8XPzAEvKAcQRHuK1Qv0o8foqXI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"JVM version: Native: 18s, JVM: 47s, JS: 5.7s.","msgtype":"m.text"}} {"origin_server_ts":1690519199195,"event_id":"$aQl2NoDbuFOp_zdsZ471RO03TOa8nnWNr-UD-wb0m_g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Numbers: Native: 18s, JVM: 47s, JS: 5.7s.","msgtype":"m.text"},"m.relates_to":{"event_id":"$xYOrNe9-69oJAum7F8XPzAEvKAcQRHuK1Qv0o8foqXI","rel_type":"m.replace"},"body":" * Numbers: Native: 18s, JVM: 47s, JS: 5.7s.","msgtype":"m.text"}} {"origin_server_ts":1690519606622,"event_id":"$5IdYFX2jBZNFBIQho6KNde2_h3aaOajhQXPLuRHvPz8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I have some suspicions as to why that is the case, but I need to do some tests first. However, I do feel that apache commons-math `BigFraction` is probably much slower than what I wrote for JS (which doesn't have a rational number library I can reuse). So I could use the code written for JS in the JVM version instead.","msgtype":"m.text","formatted_body":"I have some suspicions as to why that is the case, but I need to do some tests first. However, I do feel that apache commons-math BigFraction<\/code> is probably much slower than what I wrote for JS (which doesn't have a rational number library I can reuse). So I could use the code written for JS in the JVM version instead."}} {"origin_server_ts":1690996368847,"event_id":"$FPuc1tU2_R2661eiO0vExs_sR-2JyxdyqfpHVnQhfhg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"I'm in a bit of a contributing mood again - but I can't seem to build KAP","msgtype":"m.text"}} {"origin_server_ts":1690996383143,"event_id":"$Ks9tJYNAyPr8L17oOEhjlhEkjw8VMOmv9nfy041yEHg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"What versions are being used?","msgtype":"m.text"}} {"origin_server_ts":1690997239207,"event_id":"$MXYrLFrH1-hdns0rmXaK-ws_8vCskLMRJde1unI2ta0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Also, what would be helpful, as for Kap developments","msgtype":"m.text"}} {"origin_server_ts":1690997286081,"event_id":"$vtzrQViNqH1Tr9c2uTrSTC7M8dYAL1IoDUSiW-GfRxw","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I just got it to build, but I had to mask out the `gui`, `gui2`, `client-java`, and `perf-test-jvm` to get it to work","msgtype":"m.text","formatted_body":"I just got it to build, but I had to mask out the gui<\/code>, gui2<\/code>, client-java<\/code>, and perf-test-jvm<\/code> to get it to work"}} {"origin_server_ts":1690999104643,"event_id":"$6q15TC9EpiCRi93rjz2MlTx8AzJKeE5DmduHrM7AFvs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hmm. Strange.","msgtype":"m.text"}} {"origin_server_ts":1690999114963,"event_id":"$DVydSV4i6D4deoRQ-lYed470AFvCvLGI48lyWE5WIhg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What error are you getting?","msgtype":"m.text"}} {"origin_server_ts":1690999163708,"event_id":"$ehZt_DR4M8yY7O1p72V641An6Gq5QHMFr9nYfbic8gw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Try running ./gradlew allTests to see if the core engine runs.","msgtype":"m.text"}} {"origin_server_ts":1690999177805,"event_id":"$QXkaYuVuk2td3Wm0zyls3kKd4H1XLYs5wWemi_OAjKY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Then build gui:run","msgtype":"m.text"}} {"origin_server_ts":1691000521491,"event_id":"$Ah29486QuY9RTIhT8D8mJSp349fmZPf0pCrm0vW1AL4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Tortus: I'm going to sleep soon, but do send the logs from the build and I'll help out. ","msgtype":"m.text"}} {"origin_server_ts":1691000550728,"event_id":"$P29wB4ptObZSMPvLRKuqrlhTaWHWqeTH1AZBm0Zjv1A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm sure it's simple. The gui and gui2 projects should definitely build on perry much anything. ","msgtype":"m.text"}} {"origin_server_ts":1691000624356,"event_id":"$0YWzchnNb5YUk-UDsIcyCCnE3oTws8XcwFOwS3lO8us","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Also I assume you've already tried umpiring it into IDEA. That's also something that should just work on the box. In use it on Linux but I also tried it on Windows and it worked fine there too. ","msgtype":"m.text"}} {"origin_server_ts":1691000647975,"event_id":"$gGowDWDlS4YK_Enmt6Ik9V5j1lxBlTdSu3pgWdmao-c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Also I assume you've already tried importing it into IDEA. That's also something that should just work on the box. In use it on Linux but I also tried it on Windows and it worked fine there too. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$0YWzchnNb5YUk-UDsIcyCCnE3oTws8XcwFOwS3lO8us","rel_type":"m.replace"},"body":"* Also I assume you've already tried importing it into IDEA. That's also something that should just work on the box. In use it on Linux but I also tried it on Windows and it worked fine there too. ","msgtype":"m.text"}} {"origin_server_ts":1691001779615,"event_id":"$DLVsZKbXEJqYyocP5osdimvcaDJOPsjhgEIecGntSO0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Finally, to build the native version on Linux you need a nick of dependencies installed. Only place they're listed is in the woodpecker file. Never mind that version though. ","msgtype":"m.text"}} {"origin_server_ts":1691003153128,"event_id":"$ayYz17oNLOdV_TZDftImf7k7BejdzfXiA29YHhG_8g0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I'm sure it's simple. The gui and gui2 projects should definitely build on pretty much anything. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$P29wB4ptObZSMPvLRKuqrlhTaWHWqeTH1AZBm0Zjv1A","rel_type":"m.replace"},"body":"* I'm sure it's simple. The gui and gui2 projects should definitely build on pretty much anything. ","msgtype":"m.text"}} {"origin_server_ts":1691116943810,"event_id":"$8lDjoqizbRYRPW5ACXZX2tQBFeC5ufgn4EomkJ5osqg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Latest update: I fixed structural under when the function has an axis specifier. That means this works now: `1 (1+)⍢↑[1] 3 3 ⍴ ⍳9`","msgtype":"m.text","formatted_body":"Latest update: I fixed structural under when the function has an axis specifier. That means this works now: 1 (1+)⍢↑[1] 3 3 ⍴ ⍳9<\/code>"}} {"origin_server_ts":1691117053123,"event_id":"$vsFNEAokVR8H-VhdXfhnLg9P8s4TxHxK-y2yR9stQDA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Tortus: By the way, in order to build the JVM versions of the interpreter, including UI, all you really should need is a copy of JDK 17.","msgtype":"m.text","formatted_body":"
                    Tortus<\/a>: By the way, in order to build the JVM versions of the interpreter, including UI, all you really should need is a copy of JDK 17."}} {"origin_server_ts":1691132310801,"event_id":"$aqdGmrlB84bZCEUohLdZbFSJ51CgLOzIAgiJppdoC_M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Whenever I use tacit in Kap, I feel stronger in my opinion that removing the 3-chain was the right call. I wanted to write a function that prepends a slash to a pathname if it doesn't already contain one, and this one reads a lot more naturally than the corresponding dyalog or J version, I think. `(@/⍴⍨ @/≠ ↑)⍛,`","msgtype":"m.text","formatted_body":"Whenever I use tacit in Kap, I feel stronger in my opinion that removing the 3-chain was the right call. I wanted to write a function that prepends a slash to a pathname if it doesn't already contain one, and this one reads a lot more naturally than the corresponding dyalog or J version, I think. (@/⍴⍨ @/≠ ↑)⍛,<\/code>"}} {"origin_server_ts":1691181215663,"event_id":"$UHMo0ZLLdCgHGIGU8mc5ufTIM1WkEFpSnA6hbIv2Wpw","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$vsFNEAokVR8H-VhdXfhnLg9P8s4TxHxK-y2yR9stQDA"}},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Tortus: By the way, in order to build the JVM versions of the interpreter, including UI, all you really should need is a copy of JDK 17.\n\nJDK 17, I think I was just using the wrong JDK","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    Tortus<\/a>: By the way, in order to build the JVM versions of the interpreter, including UI, all you really should need is a copy of JDK 17.<\/blockquote><\/mx-reply>JDK 17, I think I was just using the wrong JDK"}} {"origin_server_ts":1691181224617,"event_id":"$-9sKUlRJJqN_ZR9bqeHq8UWTluaJSk0F0r4yWobACPY","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"JDK 11 got downloaded automatically","msgtype":"m.text"}} {"origin_server_ts":1691181269692,"event_id":"$znbOv_iNw1C3C9dvBPcQlvGWKSphoIJ3IjA8IGhWNqE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"At any rate, what would help accelerate this program's use, do you think?","msgtype":"m.text"}} {"origin_server_ts":1691181371934,"event_id":"$tJXClcJnuWzbvxcoD9j8i56gbxcLPzj2dOG4aptDYVs","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"I'm also surprised at how small the KAP binary is, just checking now on my machine, it's smaller than the GNU APL binary, as well as other things","msgtype":"m.text"}} {"origin_server_ts":1691181395882,"event_id":"$cH0laauZhRKT0vyH0dRie_Hixr4-kTPBfpUqCEdG42M","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"smaller than BQN, smaller than APLT, smaller than dyalog even","msgtype":"m.text"}} {"origin_server_ts":1691181402589,"event_id":"$biG9mNa5NI_n3qrVW32JZvP1Jro6xyMPj0QiFVPM_1I","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"but dyalog gets a pass, it's like 100000 things in one","msgtype":"m.text"}} {"origin_server_ts":1691181468972,"event_id":"$_xqalAAhrWomQXgkyy8c062sA56itQ5J8ROywNVRk4c","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"I must say, it would be nice to be able to define variables that aren't just latin alphanumeric, but eh, first class functions, YAY","msgtype":"m.text"}} {"origin_server_ts":1691203295741,"event_id":"$Lnc5e14acNOQCwq5CWEXEA710-SOpDiIubeDhbvLrvg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$_xqalAAhrWomQXgkyy8c062sA56itQ5J8ROywNVRk4c"}},"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> I must say, it would be nice to be able to define variables that aren't just latin alphanumeric, but eh, first class functions, YAY\n\nYou can. The system allows you to use any characters that are characters (based on unicode class) as part of file names. Additionally, you can specify that any symbol is a \"singleChar\" symbol type, which is then treated specially in that it's always a symbol of its own, just like any built in language symbols.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @tortus:matrix.org<\/a>
                    I must say, it would be nice to be able to define variables that aren't just latin alphanumeric, but eh, first class functions, YAY<\/blockquote><\/mx-reply>You can. The system allows you to use any characters that are characters (based on unicode class) as part of file names. Additionally, you can specify that any symbol is a "singleChar" symbol type, which is then treated specially in that it's always a symbol of its own, just like any built in language symbols."}} {"origin_server_ts":1691203387870,"event_id":"$vJmdnBQGouZZlLJRyRVsUWVyDf3rwbr1fX4QlaoQfAY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$tJXClcJnuWzbvxcoD9j8i56gbxcLPzj2dOG4aptDYVs"}},"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> I'm also surprised at how small the KAP binary is, just checking now on my machine, it's smaller than the GNU APL binary, as well as other things\n\nAre you referring to the native binary? I think it's around 5 MB? I think the CBQN binary is smaller though.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @tortus:matrix.org<\/a>
                    I'm also surprised at how small the KAP binary is, just checking now on my machine, it's smaller than the GNU APL binary, as well as other things<\/blockquote><\/mx-reply>Are you referring to the native binary? I think it's around 5 MB? I think the CBQN binary is smaller though."}} {"origin_server_ts":1691203702754,"event_id":"$3dDxRDXancxACkLPZAKV6GRiaMd40IlieGLeX8SEMrI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$znbOv_iNw1C3C9dvBPcQlvGWKSphoIJ3IjA8IGhWNqE"}},"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> At any rate, what would help accelerate this program's use, do you think?\n\nI don't know. I haven't really thought much about users beyond myself at the moment. I have some ideas to make the array editor ui stronger, and adding some reporting capabilities. This is in order to make it an actual alternative to excel. Excel has the problem of putting the data up front and hiding the code, making it very difficult to spot mistakes. I want to do it differently, making sure the code is visible. People also use excel to do layout for reports which is stupid in my opinion. That is better done in a separate tool, so I want to build that too.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @tortus:matrix.org<\/a>
                    At any rate, what would help accelerate this program's use, do you think?<\/blockquote><\/mx-reply>I don't know. I haven't really thought much about users beyond myself at the moment. I have some ideas to make the array editor ui stronger, and adding some reporting capabilities. This is in order to make it an actual alternative to excel. Excel has the problem of putting the data up front and hiding the code, making it very difficult to spot mistakes. I want to do it differently, making sure the code is visible. People also use excel to do layout for reports which is stupid in my opinion. That is better done in a separate tool, so I want to build that too."}} {"origin_server_ts":1691203729472,"event_id":"$y-ZIEJh8Y4mJXHn1FKnVOlr554dKsAJpeAIIARAQI9I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> I must say, it would be nice to be able to define variables that aren't just latin alphanumeric, but eh, first class functions, YAY\n\nYou can. The system allows you to use any characters that are characters (based on unicode class) as part of variable names. Additionally, you can specify that any symbol is a \"singleChar\" symbol type, which is then treated specially in that it's always a symbol of its own, just like any built in language symbols.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> Tortus<\/a>
                    I must say, it would be nice to be able to define variables that aren't just latin alphanumeric, but eh, first class functions, YAY<\/blockquote><\/mx-reply>You can. The system allows you to use any characters that are characters (based on unicode class) as part of variable names. Additionally, you can specify that any symbol is a "singleChar" symbol type, which is then treated specially in that it's always a symbol of its own, just like any built in language symbols."},"m.relates_to":{"event_id":"$Lnc5e14acNOQCwq5CWEXEA710-SOpDiIubeDhbvLrvg","rel_type":"m.replace"},"body":"* You can. The system allows you to use any characters that are characters (based on unicode class) as part of variable names. Additionally, you can specify that any symbol is a \"singleChar\" symbol type, which is then treated specially in that it's always a symbol of its own, just like any built in language symbols.","msgtype":"m.text"}} {"origin_server_ts":1691203792995,"event_id":"$aB-ldmeWxpp4cmKNx8LAUwxwdvt2BgoZpjfL91w4N3A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"By the way, the javascript \"binary\" is less than 1 MB. I'm not sure the size matters much. ","msgtype":"m.text"}} {"origin_server_ts":1691593057894,"event_id":"$dWU36SJW6dNABsTELNHMxZTsOcr0oILuu-C53tI9A0s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I really want to work on some reference documentation for Kap.","msgtype":"m.text"}} {"origin_server_ts":1691593142979,"event_id":"$UDW-LjbKKJEf_-ZQNSySy73W5i7dPTeTeXpy69XX4JE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: you have amazing documentation for BQN. How do you manage it? I'd like to write the docs in such anway that I can integrate the content in the interpreter itself as well as the documentation. That means I need to write it in some machine readable form that I can process.","msgtype":"m.text","formatted_body":"
                    Marshall<\/a>: you have amazing documentation for BQN. How do you manage it? I'd like to write the docs in such anway that I can integrate the content in the interpreter itself as well as the documentation. That means I need to write it in some machine readable form that I can process."}} {"origin_server_ts":1691593146461,"event_id":"$SJ0Pn1nEv5_cTG9b2_4zogwQ4eD0DXn2-ti1z1TYxBQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Any suggestions? ","msgtype":"m.text"}} {"origin_server_ts":1691598671648,"event_id":"$o7WhUepPQys0UcoRUgTQsRAdeBTqxkG23UpqC1wx8wo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"What does the interpreter need to do other than display it? I'd think HTML with an off-the-shelf parser would be fine for this.","msgtype":"m.text","formatted_body":"What does the interpreter need to do other than display it? I'd think HTML with an off-the-shelf parser would be fine for this."}} {"origin_server_ts":1691598755185,"event_id":"$1A3u_B8shUWHAEHs4p34N7cw77t6FDhcZ4MGgkH3rRU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"All I can really say about writing it is that it takes forever.","msgtype":"m.text","formatted_body":"All I can really say about writing it is that it takes forever."}} {"origin_server_ts":1691598813773,"event_id":"$FR1z1gIelFKmi1UbqycHAgkijnUhG96D7bxIargRM-o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: Well, I need categories and cross-references.","msgtype":"m.text","formatted_body":"Marshall<\/a>: Well, I need categories and cross-references."}} {"origin_server_ts":1691598841480,"event_id":"$HrOp70iU-4JWuu9_jlpnzwtlNTh080-Ni55sd6S0lyc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And yes, I'm aware of the time it takes.","msgtype":"m.text"}} {"origin_server_ts":1691598867561,"event_id":"$OVZmvIR8z0O945JkfSnGPMXxB14-ijNyHd10iMHKvGI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But I have a lot of special stuff now which is not documented anywhere.","msgtype":"m.text"}} {"origin_server_ts":1691598986334,"event_id":"$f49pOAWOtYmmWPWMQ3QRXYtyZenTnh1Z-Wfrs3YnSWM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Reading `` tags in parsed HTML seems as good as anything for references. You could like to categories at the bottom, and identify those with a class or just knowing which URLs are categories.","msgtype":"m.text","formatted_body":"Reading <a><\/code> tags in parsed HTML seems as good as anything for references. You could like to categories at the bottom, and identify those with a class or just knowing which URLs are categories."}} {"origin_server_ts":1691599656307,"event_id":"$wQ0IGoMBskF1U44QoiHOQuS5J5tEZIRKapEynKD97FU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks. You're right. I probably was overthinking it.","msgtype":"m.text"}} {"origin_server_ts":1691600432326,"event_id":"$GFbUnwoLVmMXnFKmXEtqYRF1ZadYK8C6z9QP4z4AB3w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I also have a chicken and egg problem. A lot of features are half baked and not well designed. So I'm bot documenting them. But trying to document it is what makes me focus on designing the apis better.","msgtype":"m.text"}} {"origin_server_ts":1691600442302,"event_id":"$nrRnMhlzmze_F5-XqeQcdHu0FCXgFLkCTVlvHz1v0zs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I also have a chicken and egg problem. A lot of features are half baked and not well designed. So I'm not documenting them. But trying to document it is what makes me focus on designing the apis better.","msgtype":"m.text"},"m.relates_to":{"event_id":"$GFbUnwoLVmMXnFKmXEtqYRF1ZadYK8C6z9QP4z4AB3w","rel_type":"m.replace"},"body":"* I also have a chicken and egg problem. A lot of features are half baked and not well designed. So I'm not documenting them. But trying to document it is what makes me focus on designing the apis better.","msgtype":"m.text"}} {"origin_server_ts":1691600467896,"event_id":"$ppyc4Mimd8cId8rHIJa6WJJPK4R2rYLVk8N39BYNeo8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Some of the apis I've put together ate absolutely awful.","msgtype":"m.text"}} {"origin_server_ts":1691600474002,"event_id":"$ccuXnEIaw5ga-H9yL4wPK9li2uoZcgvDtmbkB7CPefs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Some of the apis I've put together are absolutely awful.","msgtype":"m.text"},"m.relates_to":{"event_id":"$ppyc4Mimd8cId8rHIJa6WJJPK4R2rYLVk8N39BYNeo8","rel_type":"m.replace"},"body":"* Some of the apis I've put together are absolutely awful.","msgtype":"m.text"}} {"origin_server_ts":1691763903538,"event_id":"$0O3ztds64NSmtdCRMhye8xbrE4tBhkOlPVDzEgAXvWI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: I took your advice and just started writing: https://kapdemo.dhsdevelopments.com/reference.html","msgtype":"m.text","formatted_body":"Marshall<\/a>: I took your advice and just started writing: https://kapdemo.dhsdevelopments.com/reference.html"}} {"origin_server_ts":1691763919269,"event_id":"$DG8P54LT9JccOQfXkjBCtH0HLdQSOMZNYFmbWNmRTPI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I guess I'll just toil away on this when I'm bored with other things.","msgtype":"m.text"}} {"origin_server_ts":1692204491016,"event_id":"$j9QX1sKGyRNaxgf_afQBnK6ANPG-Oh0zvtFokr5uvU0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I was looking at my own reference docs, and I note that surely there is a lot to say about the syntax, given that there are real differences between how Kap and APL are parsed.","msgtype":"m.text"}} {"origin_server_ts":1692204509407,"event_id":"$ONeBgQOJKhraioPaT-COFac4YAKGA9hpio7r2_2Rl6A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But since I've been looking at my own stuff for so long, I can't tell what I need to describe.","msgtype":"m.text"}} {"origin_server_ts":1692204516088,"event_id":"$7mR6PDEAJ-BW-IUj8-fAsd5hvoLT382q7X5qSepgBOg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Any advice?","msgtype":"m.text"}} {"origin_server_ts":1692204782361,"event_id":"$hxzDztF-lOlUuwrDzxFyESJS8C2hjneuYrEGr5gd39I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$0O3ztds64NSmtdCRMhye8xbrE4tBhkOlPVDzEgAXvWI"}},"format":"org.matrix.custom.html","body":"string & character syntax doesn't list ``\\\\``","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>string & character syntax doesn't list \\\\<\/code>"}} {"origin_server_ts":1692205450389,"event_id":"$1kQV1c8_qGkg0IT0OOvpYW3_ppATx0Z8JZ_5l_41gEY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh, you're right. Thanks.","msgtype":"m.text"}} {"origin_server_ts":1692205521360,"event_id":"$wNwuyeYKABjCOlnLaI3ODdzvcdvpOSfe8oc7GSTB1O8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Fixed.","msgtype":"m.text"}} {"origin_server_ts":1692206618428,"event_id":"$Gwui2ft90bVqG81YWwMn5_vOtpoxKr_iFzJ_ZVBWgY0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$ONeBgQOJKhraioPaT-COFac4YAKGA9hpio7r2_2Rl6A"}},"format":"org.matrix.custom.html","body":"there's seemingly like no general description of anything (ahead-of-time parseable as opposed to APL; lexical scope; what a parser directive even is; what's a `:something`/`something:somethingelse`; what's a namespace (mutable/immutable; presumably they can only contain other namespaces and functions, but not arrays?)); maybe also precedence information would belong somewhere; the syntax section definitely doesn't list all syntax","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>there's seemingly like no general description of anything (ahead-of-time parseable as opposed to APL; lexical scope; what a parser directive even is; what's a :something<\/code>/something:somethingelse<\/code>; what's a namespace (mutable/immutable; presumably they can only contain other namespaces and functions, but not arrays?)); maybe also precedence information would belong somewhere; the syntax section definitely doesn't list all syntax"}} {"origin_server_ts":1692206655075,"event_id":"$u1igP2be2yR257OLDXmR0CsHhd9FjNUqKzgT8he5iiI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks. That's very useful feedback.","msgtype":"m.text"}} {"origin_server_ts":1692206675251,"event_id":"$qHNmL-S_xE-KuHZvI4FkORoG_rLTfvA2RLTTR7CsLQg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm about to go to bed, but tomorrow I will write something that addresses your points.","msgtype":"m.text"}} {"origin_server_ts":1692206755633,"event_id":"$UCFjWhUf6tvMIuWkFtEQJlK6cQCmDeUn12v8QC4wryA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I thought I did document namespaces in the section about symbols. Turns out that's just a single sentence in the datatype list. Definitely not enough. I will give it its own section.","msgtype":"m.text"}} {"origin_server_ts":1692206833167,"event_id":"$_r6uP34YugZw0AnEhX9pMHxg4CuyBVbD_WqenLfgAy4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"By the way, namespaces contain symbols, and only symbols.","msgtype":"m.text"}} {"origin_server_ts":1692206925727,"event_id":"$pvCbYKNXYpKaC415BlDKgi8pPx1CDjlnRcjDZDC6SiQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(I'm guessing it's just something you haven't gotten around to documenting, but `defsyntax` is entirely missing too (incl. the fact that `if`/`when`/`while`/etc are instances of such, and not ad-hoc keywords))","msgtype":"m.text","formatted_body":"(I'm guessing it's just something you haven't gotten around to documenting, but defsyntax<\/code> is entirely missing too (incl. the fact that if<\/code>/when<\/code>/while<\/code>/etc are instances of such, and not ad-hoc keywords))"}} {"origin_server_ts":1692206933634,"event_id":"$aPk52vCakXCsQ_INB4GirbkERONhCmMiv3t662ejlrU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$_r6uP34YugZw0AnEhX9pMHxg4CuyBVbD_WqenLfgAy4"}},"format":"org.matrix.custom.html","body":"what's a `math:sin` then?","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>what's a math:sin<\/code> then?"}} {"origin_server_ts":1692206940834,"event_id":"$21hsarbqto7Ssp2FB5pi6ubi1lUKTuIvOHVl_ezLwtg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's a symbol.","msgtype":"m.text"}} {"origin_server_ts":1692206960959,"event_id":"$YpoFP2NOoq2ra3KlChfbFUdUQA-2XPBYrblLfM9679c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It's the symbol `sin` in namespace `math`.","msgtype":"m.text","formatted_body":"It's the symbol sin<\/code> in namespace math<\/code>."}} {"origin_server_ts":1692207017425,"event_id":"$GkOdeLczQYRE-hudqn8SrEIXhDSgX4dgfAgu2e00xHA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"what determines what happens when it's called?","msgtype":"m.text","formatted_body":"what determines what happens when it's called?"}} {"origin_server_ts":1692207036048,"event_id":"$ctsiDL-WM3RhYH8jxVV4UVpWaETZApOTaBatYH4vaK0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You don't call a symbol. You call functions.","msgtype":"m.text"}} {"origin_server_ts":1692207047602,"event_id":"$URb0LebeWL71jW7DWyOlZudLnqJ3KKjMlhXqqYZDvDU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Symbols are used to name things (like functions)","msgtype":"m.text"}} {"origin_server_ts":1692207050147,"event_id":"$URVTLupa64bUPrdAtbh4e5W534uE9_vwCqIJ6L4rMW0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"am I not calling `math:sin` in `math:sin 3`?","msgtype":"m.text","formatted_body":"am I not calling math:sin<\/code> in math:sin 3<\/code>?"}} {"origin_server_ts":1692207277194,"event_id":"$n18rb6i8_cIK2au_trVXgHwDacWqQyLNmPvPY4joS88","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Not directly. When the expression `math:sin 3` is parsed, the tokeniser interns a symbol in the `math` namespace, and the searches the current and parent environments for a function binding associated with that symbol (i.e. it attempts to find a lexically scoped function binding). If it doesn't find one, it searches the global function table for a function with that name, and it finds it. The result of the parser then contains a direct reference to this function.","msgtype":"m.text","formatted_body":"Not directly. When the expression math:sin 3<\/code> is parsed, the tokeniser interns a symbol in the math<\/code> namespace, and the searches the current and parent environments for a function binding associated with that symbol (i.e. it attempts to find a lexically scoped function binding). If it doesn't find one, it searches the global function table for a function with that name, and it finds it. The result of the parser then contains a direct reference to this function."}} {"origin_server_ts":1692207649124,"event_id":"$EyT6BLEoX_Oo8xpl6DV2k_zR3Znub2TTKTiXYsTwJQk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's general lexical lookup though, not anything special to `a:b`, right? That is, `math:sin` is still a function as far as its value is concerned in a context that has the Kap standard library and no custom overrides","msgtype":"m.text","formatted_body":"that's general lexical lookup though, not anything special to a:b<\/code>, right? That is, math:sin<\/code> is still a function as far as its value is concerned in a context that has the Kap standard library and no custom overrides"}} {"origin_server_ts":1692207748411,"event_id":"$fNs8lM6_V-xx8nbme1pSxBEjiSkTGFXz4HpLTUVuTfA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Right. `a:b` is just a name. Symbols are used to name everything, and its their identity that matters, not the name. You can in principle have multiple symbols with the same name (the language doesn't allow you to do that since it always interns them into a namespace), but it would be possile.","msgtype":"m.text","formatted_body":"Right. a:b<\/code> is just a name. Symbols are used to name everything, and its their identity that matters, not the name. You can in principle have multiple symbols with the same name (the language doesn't allow you to do that since it always interns them into a namespace), but it would be possile."}} {"origin_server_ts":1692207751672,"event_id":"$xZJ03sqJPiUlODFVsTqKH5uND5c2R637tEA_jVKYkyc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Right. `a:b` is just a name. Symbols are used to name everything, and its their identity that matters, not the name. You can in principle have multiple symbols with the same name (the language doesn't allow you to do that since it always interns them into a namespace), but it would be possible.","msgtype":"m.text","formatted_body":"Right. a:b<\/code> is just a name. Symbols are used to name everything, and its their identity that matters, not the name. You can in principle have multiple symbols with the same name (the language doesn't allow you to do that since it always interns them into a namespace), but it would be possible."},"m.relates_to":{"event_id":"$fNs8lM6_V-xx8nbme1pSxBEjiSkTGFXz4HpLTUVuTfA","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Right. `a:b` is just a name. Symbols are used to name everything, and its their identity that matters, not the name. You can in principle have multiple symbols with the same name (the language doesn't allow you to do that since it always interns them into a namespace), but it would be possible.","msgtype":"m.text","formatted_body":" * Right. a:b<\/code> is just a name. Symbols are used to name everything, and its their identity that matters, not the name. You can in principle have multiple symbols with the same name (the language doesn't allow you to do that since it always interns them into a namespace), but it would be possible."}} {"origin_server_ts":1692208072498,"event_id":"$U_72SNLiy7vJGi-90nnpOHI6sznNo4e5NT9yP7rxCsw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"without the language allowing such non-unique namespace entries, that's a horrifically over-complicated way to describe the behavior (and even if it allowed such, I'd still describe it in the trivial model first, and have a section saying \"but actually you can do this Weird Thing™ to break that (but don't) which has these consequences\" in some far-off corner that noone should care about)","msgtype":"m.text","formatted_body":"without the language allowing such non-unique namespace entries, that's a horrifically over-complicated way to describe the behavior (and even if it allowed such, I'd still describe it in the trivial model first, and have a section saying \"but actually you can do this Weird Thing™ to break that (but don't) which has these consequences\" in some far-off corner that noone should care about)"}} {"origin_server_ts":1692208137445,"event_id":"$kb7idwvxE5T1lyAu05jdAlX5gfJeQOFWWcBYFlYS_T0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's fair. But the problem (if you can call it a problem) is that symbols are also first-class objects in the language.","msgtype":"m.text"}} {"origin_server_ts":1692208172253,"event_id":"$SCtyfDcJGYQAPGzgyeM4-THu7TxH-w9OhXD5kOOFsAE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The most common use of first-class symbols is with keywords, but you can reference any symbols by escaping it with `'`","msgtype":"m.text","formatted_body":"The most common use of first-class symbols is with keywords, but you can reference any symbols by escaping it with '<\/code>"}} {"origin_server_ts":1692208227061,"event_id":"$MCovQDPHY5ObnCvVx_y15w96xFqNfNFL0SRMw1ArMUg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's currently quite limited in what you can do with symbols, but it will be possible to evaluate code during parsing and query the local environment and low-level stuff like that.","msgtype":"m.text"}} {"origin_server_ts":1692208464491,"event_id":"$fX5Cs9W8ddu7FT1TJOXF9UlGdby7B1IqnvpRC9NibC8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ok so the important thing is that namespaces aren't first-class things","msgtype":"m.text","formatted_body":"ok so the important thing is that namespaces aren't first-class things"}} {"origin_server_ts":1692208470731,"event_id":"$hlNEPI6sYL6fIYtL6xJonaH2VVQC_dWW0CEKuQ_hL6Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right.","msgtype":"m.text"}} {"origin_server_ts":1692208504969,"event_id":"$QcDJ8rJqQkvrrqQbuxk0nQ9VVF4SwJT_CcDfkESfx54","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you disregard the low-level stuff, you can think of it as a grouping for names.","msgtype":"m.text"}} {"origin_server_ts":1692208532771,"event_id":"$M5BdhNpXPSzvxW_o23Rw0XPn6koSgz7ylUOw_nU2lP8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So perhaps that's how it should be described, and then a later section can go into the technical details.","msgtype":"m.text"}} {"origin_server_ts":1692208562316,"event_id":"$lBInL8xqHIp-10YbaPXbVHk5IfeDR1R7n2paN6pGeCA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"if you want to really discard low-level stuff, you can think of `:` as just being another possible character in names alike `:`","msgtype":"m.text","formatted_body":"if you want to really discard low-level stuff, you can think of :<\/code> as just being another possible character in names alike :<\/code>"}} {"origin_server_ts":1692208584010,"event_id":"$kZH93lgBZ_XvWheZApcx9ShwGrLEOWaKDBVzmrSzOHA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"if you want to really discard low-level stuff, you can think of `:` as just being another possible character in names alike `:` (with some funky restrictions about no back-to-back or leading/trailing ones)","msgtype":"m.text","formatted_body":"if you want to really discard low-level stuff, you can think of :<\/code> as just being another possible character in names alike :<\/code> (with some funky restrictions about no back-to-back or leading/trailing ones)"},"m.relates_to":{"event_id":"$lBInL8xqHIp-10YbaPXbVHk5IfeDR1R7n2paN6pGeCA","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* if you want to really discard low-level stuff, you can think of `:` as just being another possible character in names alike `:` (with some funky restrictions about no back-to-back or leading/trailing ones)","msgtype":"m.text","formatted_body":"* if you want to really discard low-level stuff, you can think of :<\/code> as just being another possible character in names alike :<\/code> (with some funky restrictions about no back-to-back or leading/trailing ones)"}} {"origin_server_ts":1692208597109,"event_id":"$W8qFQZQFkmkgHKMZPO0INiuUczJAwwWJ6zIies702UY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"if you want to really discard low-level stuff, you can think of `:` as just being another possible character in names alike `_` (with some funky restrictions about no back-to-back or leading/trailing ones)","msgtype":"m.text","formatted_body":"if you want to really discard low-level stuff, you can think of :<\/code> as just being another possible character in names alike _<\/code> (with some funky restrictions about no back-to-back or leading/trailing ones)"},"m.relates_to":{"event_id":"$lBInL8xqHIp-10YbaPXbVHk5IfeDR1R7n2paN6pGeCA","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* if you want to really discard low-level stuff, you can think of `:` as just being another possible character in names alike `_` (with some funky restrictions about no back-to-back or leading/trailing ones)","msgtype":"m.text","formatted_body":"* if you want to really discard low-level stuff, you can think of :<\/code> as just being another possible character in names alike _<\/code> (with some funky restrictions about no back-to-back or leading/trailing ones)"}} {"origin_server_ts":1692208617464,"event_id":"$LzpnZ7DqitDJ0s0jJI1Cfh3HdgZkuSDivphmLGPeOhU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No, that's going a bit too far. You have the `import` directive that makes all exported symbols from a namespace available from another namespace.","msgtype":"m.text","formatted_body":"No, that's going a bit too far. You have the import<\/code> directive that makes all exported symbols from a namespace available from another namespace."}} {"origin_server_ts":1692208683249,"event_id":"$FlWX6JcEQ5S-xZgQb9JgI0KnY3kd-1yUdBZEC4QJtUs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"you could describe that as copying all definitions with some name prefix, but ok that's a bit complicate","msgtype":"m.text","formatted_body":"you could describe that as copying all definitions with some name prefix, but ok that's a bit complicate"}} {"origin_server_ts":1692208685374,"event_id":"$0FGOHMrwJKQ8y5w2yqynHrXvMdDNnYJuveYgR3xG96g","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"you could describe that as copying all definitions with some name prefix, but ok that's a bit complicated","msgtype":"m.text","formatted_body":"you could describe that as copying all definitions with some name prefix, but ok that's a bit complicated"},"m.relates_to":{"event_id":"$FlWX6JcEQ5S-xZgQb9JgI0KnY3kd-1yUdBZEC4QJtUs","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* you could describe that as copying all definitions with some name prefix, but ok that's a bit complicated","msgtype":"m.text","formatted_body":"* you could describe that as copying all definitions with some name prefix, but ok that's a bit complicated"}} {"origin_server_ts":1692208716606,"event_id":"$Cb2GavXMUzmhVZ7dHExAAeOBRD-VOn1k6iTjsAHym4E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll try to write something up tomorrow, and I'll ask you to review if you don't mind.","msgtype":"m.text"}} {"origin_server_ts":1692208781894,"event_id":"$ZdAdxIW5JI_80_FdWs4_PZATgBqveUPMhHaFl01i_dk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"About `defsyntax`, I have intentionally not documented it at the moment, because I may completely remove it and replace it with a better system (the aforementioned ability to evaluate code during parsing).","msgtype":"m.text","formatted_body":"About defsyntax<\/code>, I have intentionally not documented it at the moment, because I may completely remove it and replace it with a better system (the aforementioned ability to evaluate code during parsing)."}} {"origin_server_ts":1692281480602,"event_id":"$5qrkdWYUgrIaMpIzXYMenSXzabPaynoofAH5L0iTtt4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: I've updated the documentation now to cover some of the points you raised.","msgtype":"m.text","formatted_body":"dzaima<\/a>: I've updated the documentation now to cover some of the points you raised."}} {"origin_server_ts":1692283612303,"event_id":"$-tDKuhgpLfeRmu__YaD5sLTjvRKtj10diy7pdyCTnMA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"``@\\\\`` is still not mentioned; \"When lookup up a symbol without a namespace\" and \"Check is the symbol is\" are a broken","msgtype":"m.text","formatted_body":"@\\\\<\/code> is still not mentioned; \"When lookup up a symbol without a namespace\" and \"Check is the symbol is\" are a broken"}} {"origin_server_ts":1692284383191,"event_id":"$zh7BIMbAbHO3CLmVZr7VgM9jOSbsvdYFV2eW3nqQv2Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: thanks. Fixed.","msgtype":"m.text","formatted_body":"dzaima<\/a>: thanks. Fixed."}} {"origin_server_ts":1692358117337,"event_id":"$d06TCyeYyFTk0-_pdeRx3J_kZuEB2DH-33Ee_rBVWM0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I addition to the reference document, I started working on a new tutorial. Would anyone want to have a quick look and tell me if I'm on the right track?","msgtype":"m.text"}} {"origin_server_ts":1692358124665,"event_id":"$hcGTT8xfhYaUEzgKw9peWjQva7T2gjlZnofI7hy-tGc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://codeberg.org/loke/array/src/branch/master/docs/quick-tutorial.asciidoc","msgtype":"m.text"}} {"origin_server_ts":1692359914021,"event_id":"$meY68DWwRpzG9lTEwP9b4vdmRSGcfj6oNxVPwvpdkJQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"representing rank-0 as a box containing a 0 weird relative to the rest of the examples listing indices of each element, as a scalar has zero axis to index in; that said, an empty box would potentially be quite confusing","msgtype":"m.text","formatted_body":"representing rank-0 as a box containing a 0 weird relative to the rest of the examples listing indices of each element, as a scalar has zero axis to index in; that said, an empty box would potentially be quite confusing"}} {"origin_server_ts":1692360309020,"event_id":"$52EFiLDCUUNo0zuMHFKILkyY8pN7fCPw-e9Gp0uQ-JE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"\"Kap renders such an array in a box with an array in the corner.\" Second \"array\" should be \"arrow\" probably.","msgtype":"m.text","formatted_body":"\"Kap renders such an array in a box with an array in the corner.\" Second \"array\" should be \"arrow\" probably."}} {"origin_server_ts":1692360782049,"event_id":"$8UyELudYHkRJO_bZnJzBrh_Nsu9RC6bTyOOffiWmaVc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Indeed thabks","msgtype":"m.text"}} {"origin_server_ts":1692360797633,"event_id":"$Erc3CxEP9EB_XfRZA-2jmpb1661Tg50HZe_ryIVjz9U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Indeed. Thanks","msgtype":"m.text"},"m.relates_to":{"event_id":"$8UyELudYHkRJO_bZnJzBrh_Nsu9RC6bTyOOffiWmaVc","rel_type":"m.replace"},"body":"* Indeed. Thanks","msgtype":"m.text"}} {"origin_server_ts":1692360824147,"event_id":"$vW6Z3-jsgAYIgh9RfRxl_Bxz2NbYNwBdstSgMvB5YqU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But apart from had spelling and grammar. Would you say the approach and pace is appropriate? ","msgtype":"m.text"}} {"origin_server_ts":1692360926586,"event_id":"$Ip1aJsHt506hluj9HqOAilqmktmYAw9CAYKZMgPQeRY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Looks very good so far.","msgtype":"m.text","formatted_body":"Looks very good so far."}} {"origin_server_ts":1692361045808,"event_id":"$FXsm9AOuFDGKNBRiUTt4L285jgj40A4-uZhMJ-TwRBc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I stopped writing for today because I couldn't think of what to discuss next. Any suggestions what to talk about in the next chapter?","msgtype":"m.text"}} {"origin_server_ts":1692367920941,"event_id":"$BoCLfjiyzbF4LEop_Oh8C89s-dZH7odenb9VDjXOpC8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Finished reading. With readers new to array programming, the problem you'll have is that they understand what the functions do but not how to use them. And since you run through a lot of array building and manipulation functions before things like selection and reduction that go from array to scalar, there's not that much you can do until later in the tutorial.","msgtype":"m.text","formatted_body":"Finished reading. With readers new to array programming, the problem you'll have is that they understand what the functions do but not how to use them. And since you run through a lot of array building and manipulation functions before things like selection and reduction that go from array to scalar, there's not that much you can do until later in the tutorial."}} {"origin_server_ts":1692368018576,"event_id":"$FBV8Z1Oy9-BiEdik-iyPMol4t9RaDHfmlBj4GBne03w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I see.","msgtype":"m.text"}} {"origin_server_ts":1692368033638,"event_id":"$KXpGfo_mEdMmWfvmrSmEhCNiKYSykyoqhKstdhKnweE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So I need to mix in some interesting things.","msgtype":"m.text"}} {"origin_server_ts":1692368061805,"event_id":"$ZZiitA0EO7pqUvdVs0KYlYHgy740Fqutm5jSKb6uaRs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I was thinking of introducing the graphics feature early so people can draw stuff with array data.","msgtype":"m.text"}} {"origin_server_ts":1692368079116,"event_id":"$9cxrGcHGSWnkKvogMN5vxN8CPpT9p4DCPhRsBNrGnnQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, I need to implement it on the JS backend first.","msgtype":"m.text"}} {"origin_server_ts":1692368142168,"event_id":"$prgjhMfyMab4zWW45q-HngOQ-blkGoYFkXduZ0hyKI0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I might try moving bracket indexing earlier so you can use it for some examples. Like you could show how Reverse can actually be built from arithmetic and indexing, `v[(≢v)-1+⍳≢v]`.","msgtype":"m.text","formatted_body":"I might try moving bracket indexing earlier so you can use it for some examples. Like you could show how Reverse can actually be built from arithmetic and indexing, v[(≢v)-1+⍳≢v]<\/code>."}} {"origin_server_ts":1692368293402,"event_id":"$PpRIzqIp6Bmi6iGDviCNCVWN16D6IrX_n_x3HXwmxdQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"And a minor issue, \"On multi-dimensional arrays, the function acts on the innermost array by default\" should be \"last axis\" or something. Sounds like it's talking about nesting as is.","msgtype":"m.text","formatted_body":"And a minor issue, \"On multi-dimensional arrays, the function acts on the innermost array by default\" should be \"last axis\" or something. Sounds like it's talking about nesting as is."}} {"origin_server_ts":1692368988651,"event_id":"$tZju3licPqgCEO-uxavkurGOB_--Zrs7s3F-QOnTzmI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Good points. I will do thar","msgtype":"m.text"}} {"origin_server_ts":1692368994487,"event_id":"$OMo6jN-EQCXLvGn6XjWwspdDSAB4l5rF4HgR81hKXlI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Good points. I will do that","msgtype":"m.text"},"m.relates_to":{"event_id":"$tZju3licPqgCEO-uxavkurGOB_--Zrs7s3F-QOnTzmI","rel_type":"m.replace"},"body":"* Good points. I will do that","msgtype":"m.text"}} {"state_key":"@albs3001:matrix.org","origin_server_ts":1692374127348,"event_id":"$PiASWoo6PJ6l8hYGvd8lf90tnZg6UcvZNMN5rSCFQM0","sender":"@albs3001:matrix.org","user_id":"@albs3001:matrix.org","type":"m.room.member","content":{"displayname":"albs3001","membership":"join"}} {"origin_server_ts":1692375401537,"event_id":"$jwsGdAra9Jv2AXa35E2RuLDCT5Y968JHD6axh1HZ-9M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: It didn't say \"innermost array\". It said \"innermost axis\".","msgtype":"m.text","formatted_body":"Marshall<\/a>: It didn't say \"innermost array\". It said \"innermost axis\"."}} {"origin_server_ts":1692375419196,"event_id":"$nvcejrI1IJqoR4dI63fFIw21UhAzTAt0JX0rfjZ_N18","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I changed it to your recommendation anyway. I also changed the order of the sections. Is that better?","msgtype":"m.text"}} {"origin_server_ts":1692380219749,"event_id":"$LNOWK9Fu_GeCJTqE20vxsV01w-2ftKyLYu_5I_RvxI4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Changed from \"array\" to \"axis\" [here](https://codeberg.org/loke/array/commit/23c1368f02fcf7e09b942571796f89b06c021798), guess the version I was looking at hadn't picked up that change.","msgtype":"m.text","formatted_body":"Changed from \"array\" to \"axis\" here<\/a>, guess the version I was looking at hadn't picked up that change."}} {"origin_server_ts":1692380412841,"event_id":"$ryEvDTbfggbHWNJuvDW2DSCh7MSHJT7OFc0XaEevrZw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"My intention is to build a version of the graphics support that is compatible with the one in the java client. I can then use that to visualise simple status which may help making people interested. ","msgtype":"m.text"}} {"origin_server_ts":1692380436611,"event_id":"$F7ujIeglPnK_Vfucu8vxO9bc7Lm5UCTzCmI6IQ2gv5A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Perhaps making s graphical game of life in one line of code. ","msgtype":"m.text"}} {"origin_server_ts":1692380443629,"event_id":"$89xP7n45q2lbIG_Px6MpYlzIw3jVmwR2ZgfEPDwm_E0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Perhaps making a graphical game of life in one line of code. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$F7ujIeglPnK_Vfucu8vxO9bc7Lm5UCTzCmI6IQ2gv5A","rel_type":"m.replace"},"body":"* Perhaps making a graphical game of life in one line of code. ","msgtype":"m.text"}} {"origin_server_ts":1692380457818,"event_id":"$fK-oQGYn8L1utgC6g5DJnvpH_HeIdDM2q3Z8Y0WrN6E","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, that would be really cool.","msgtype":"m.text","formatted_body":"Yeah, that would be really cool."}} {"origin_server_ts":1692380530764,"event_id":"$_oDhW59MLm4Mszn1-CGgQ91opFqYKpnI8nuehUoH1FM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I can do it with the java client today, but being able to do it directly from a web link with the code in the link is more likely to interest kids today. 😀","msgtype":"m.text"}} {"origin_server_ts":1692380542149,"event_id":"$rS46-2iGxfLTTd1g-9xk59aRKvRKB6FkXW7l6-iepYI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"For the recent changes, I don't think changing the ordering does much on its own, but the new Reverse wording looks good.","msgtype":"m.text","formatted_body":"For the recent changes, I don't think changing the ordering does much on its own, but the new Reverse wording looks good."}} {"origin_server_ts":1692381106837,"event_id":"$sUqTxeyLmTvEH6gkPb7QV-9G9Mz-RkNZbph1ViMjX1A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Once I have described the basics, I intend to take some more advanced expressions, and preferably expressions with real usage, and explain them.","msgtype":"m.text"}} {"origin_server_ts":1692381129486,"event_id":"$hgeAqJif_dDJjqVki20XLhI8K0Tr0MnHxVMSDFWGd3o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Whatever advanced features used will be explained too.","msgtype":"m.text"}} {"origin_server_ts":1692620131193,"event_id":"$emI9ckHw9hs2I-ALQImxmZEmVAKIFBbGMY2KNDMZ3IM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I changed `gui:draw` so the monadic version draws to a default window. That way you don't have to do `gui:create` if you don't want to.","msgtype":"m.text","formatted_body":"I changed gui:draw<\/code> so the monadic version draws to a default window. That way you don't have to do gui:create<\/code> if you don't want to."}} {"origin_server_ts":1692620132217,"event_id":"$clVm-fS-CjWcB5hcEnyBT9vxIKfS_Il_WbMkRgsCvYE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#(%7Bgui%3Adraw%20%E2%8A%83%201%20%E2%8D%B5%20%E2%88%A8.%E2%88%A7%203%204%20%3D%20%2B%2F%20%2C%C2%AF1%200%201%20%E2%8A%A3%C2%AB%E2%8A%96%E2%8C%BB%C2%BB(%E2%8C%BD%C2%A8)%20%E2%8A%82%E2%8D%B5%7D%E2%8D%A3100)%20%3F50%2050%20%E2%8D%B4%202","msgtype":"m.text"}} {"origin_server_ts":1692760719434,"event_id":"$hnkS1Mipr8Fpo3QQHyalXRp87dXsgBPx-pWWafC9buw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"A silly little thing.","msgtype":"m.text"}} {"origin_server_ts":1692760720041,"event_id":"$-6zAEbEFit45mdVzGfLfhDJnAfl_ks0GC4wntXyBECI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"c ⇐ { 0.5+0.5×math:sin ⍺+⍵×⍳50 }\ni ← 0\nwhile (1) {\n r ← (i×0.01) c 0.3\n g ← (i×0.013) c 0.3\n b ← (i×0.018) c 0.3\n img ← ⊃ ,[2]/ (50 50 1 ⍴)¨ r g b\n gui:draw img\n i ← i+1\n}","msgtype":"m.text"}} {"origin_server_ts":1692760736022,"event_id":"$e4XyF1uA7F5vzmVCeY3xjFzXOkplgVZj91AkTT8rG64","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"```\nc ⇐ { 0.5+0.5×math:sin ⍺+⍵×⍳50 }\ni ← 0\nwhile (1) {\n r ← (i×0.01) c 0.3\n g ← (i×0.013) c 0.3\n b ← (i×0.018) c 0.3\n img ← ⊃ ,\\[2\\]/ (50 50 1 ⍴)¨ r g b\n gui:draw img\n i ← i+1\n}\n```","msgtype":"m.text","formatted_body":"
                    c ⇐ { 0.5+0.5×math:sin ⍺+⍵×⍳50 }\ni ← 0\nwhile (1) {\n    r ← (i×0.01) c 0.3\n    g ← (i×0.013) c 0.3\n    b ← (i×0.018) c 0.3\n    img ← ⊃ ,\\[2\\]/ (50 50 1 ⍴)¨ r g b\n    gui:draw img\n    i ← i+1\n}\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$-6zAEbEFit45mdVzGfLfhDJnAfl_ks0GC4wntXyBECI","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * ```\nc ⇐ { 0.5+0.5×math:sin ⍺+⍵×⍳50 }\ni ← 0\nwhile (1) {\n    r ← (i×0.01) c 0.3\n    g ← (i×0.013) c 0.3\n    b ← (i×0.018) c 0.3\n    img ← ⊃ ,\\[2\\]/ (50 50 1 ⍴)¨ r g b\n    gui:draw img\n    i ← i+1\n}\n```","msgtype":"m.text","formatted_body":" * 
                    c ⇐ { 0.5+0.5×math:sin ⍺+⍵×⍳50 }\ni ← 0\nwhile (1) {\n    r ← (i×0.01) c 0.3\n    g ← (i×0.013) c 0.3\n    b ← (i×0.018) c 0.3\n    img ← ⊃ ,\\[2\\]/ (50 50 1 ⍴)¨ r g b\n    gui:draw img\n    i ← i+1\n}\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1692760752837,"event_id":"$v-I8ObOLZx6dePzcaLsEo9CK6jnwEwETUhv9Q9HOzzw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"```\nc ⇐ { 0.5+0.5×math:sin ⍺+⍵×⍳50 }\ni ← 0\nwhile (1) {\n    r ← (i×0.01) c 0.3\n    g ← (i×0.013) c 0.3\n    b ← (i×0.018) c 0.3\n    img ← ⊃ ,[2]/ (50 50 1 ⍴)¨ r g b\n    gui:draw img\n    i ← i+1\n}\n```","msgtype":"m.text","formatted_body":"
                    c ⇐ { 0.5+0.5×math:sin ⍺+⍵×⍳50 }\ni ← 0\nwhile (1) {\n    r ← (i×0.01) c 0.3\n    g ← (i×0.013) c 0.3\n    b ← (i×0.018) c 0.3\n    img ← ⊃ ,[2]/ (50 50 1 ⍴)¨ r g b\n    gui:draw img\n    i ← i+1\n}\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$-6zAEbEFit45mdVzGfLfhDJnAfl_ks0GC4wntXyBECI","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * ```\nc ⇐ { 0.5+0.5×math:sin ⍺+⍵×⍳50 }\ni ← 0\nwhile (1) {\n    r ← (i×0.01) c 0.3\n    g ← (i×0.013) c 0.3\n    b ← (i×0.018) c 0.3\n    img ← ⊃ ,[2]/ (50 50 1 ⍴)¨ r g b\n    gui:draw img\n    i ← i+1\n}\n```","msgtype":"m.text","formatted_body":" * 
                    c ⇐ { 0.5+0.5×math:sin ⍺+⍵×⍳50 }\ni ← 0\nwhile (1) {\n    r ← (i×0.01) c 0.3\n    g ← (i×0.013) c 0.3\n    b ← (i×0.018) c 0.3\n    img ← ⊃ ,[2]/ (50 50 1 ⍴)¨ r g b\n    gui:draw img\n    i ← i+1\n}\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1692765139348,"event_id":"$XO52WC_UM2njuUs90IzdzDsPjieyT2k5ykIRgvR6rK4","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"looks cool!","msgtype":"m.text"}}
                    {"origin_server_ts":1692772600352,"event_id":"$UbEIqtvljwKzeba1Wl7IU219IGhBlYMjnaYv9rOQM2c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Try this:\n```\n(w h) ← 50 50\nc ⇐ {\n  p ← ⍺×5\n  (a b d e) ← ⍵\n  w h 1 ⍴ (math:sin (e×p)+d×⍳h) { 0.5+0.5×math:sin ⍺+(p×a)+b×⍵ }⌻ ⍳w\n}\ni ← 0\nwhile (1) {\n    r ← (i c 0.01   0.3   0.07  0.02)\n    g ← (i c 0.013  0.3   0.1   0.01)\n    b ← (i c 0.018  0.3   0.15  0.015)\n    img ← ⊃ ,[2]/ r g b\n    gui:draw img\n    i ← i+1\n}\n```","msgtype":"m.text","formatted_body":"

                    Try this:<\/p>\n

                    (w h) ← 50 50\nc ⇐ {\n  p ← ⍺×5\n  (a b d e) ← ⍵\n  w h 1 ⍴ (math:sin (e×p)+d×⍳h) { 0.5+0.5×math:sin ⍺+(p×a)+b×⍵ }⌻ ⍳w\n}\ni ← 0\nwhile (1) {\n    r ← (i c 0.01   0.3   0.07  0.02)\n    g ← (i c 0.013  0.3   0.1   0.01)\n    b ← (i c 0.018  0.3   0.15  0.015)\n    img ← ⊃ ,[2]/ r g b\n    gui:draw img\n    i ← i+1\n}\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1692772606094,"event_id":"$XfRcBkANGjLdmXhLc7Y2AlfXWCaIX8Gvl5UOeRXXGOo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#(w%20h)%20%E2%86%90%2050%2050%0Ac%20%E2%87%90%20%7B%0A%20%20p%20%E2%86%90%20%E2%8D%BA%C3%975%0A%20%20(a%20b%20d%20e)%20%E2%86%90%20%E2%8D%B5%0A%20%20w%20h%201%20%E2%8D%B4%20(math%3Asin%20(e%C3%97p)%2Bd%C3%97%E2%8D%B3h)%20%7B%200.5%2B0.5%C3%97math%3Asin%20%E2%8D%BA%2B(p%C3%97a)%2Bb%C3%97%E2%8D%B5%20%7D%E2%8C%BB%20%E2%8D%B3w%0A%7D%0Ai%20%E2%86%90%200%0Awhile%20(1)%20%7B%0A%20%20%20%20r%20%E2%86%90%20(i%20c%200.01%20%20%200.3%20%20%200.07%20%200.02)%0A%20%20%20%20g%20%E2%86%90%20(i%20c%200.013%20%200.3%20%20%200.1%20%20%200.01)%0A%20%20%20%20b%20%E2%86%90%20(i%20c%200.018%20%200.3%20%20%200.15%20%200.015)%0A%20%20%20%20img%20%E2%86%90%20%E2%8A%83%20%2C%5B2%5D%2F%20r%20g%20b%0A%20%20%20%20gui%3Adraw%20img%0A%20%20%20%20i%20%E2%86%90%20i%2B1%0A%7D","msgtype":"m.text"}}
                    {"origin_server_ts":1692774707951,"event_id":"$skJm-Gebovwc89hyFoG26uhnULZRGBIaKQ0S6sWTY-Q","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"nice","msgtype":"m.text"}}
                    {"origin_server_ts":1692774763627,"event_id":"$MIjyos44u_GS6fsO0N3Bkd9Zbix1mhjdWegspayrLyw","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"is \"This is some text\" a placeholder for the title","msgtype":"m.text"}}
                    {"origin_server_ts":1692774790076,"event_id":"$XIPzrga5ROnVKp1sJ9RX4_K2_j2PRdMrs-C7opo7ZPo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, it will be a way to close the graphics component","msgtype":"m.text"}}
                    {"origin_server_ts":1692774799978,"event_id":"$LI0fgppVaYRiD2tz7MjSSQcr6eXuC6uEnQXN4LQIRUI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"A title, a close button. Perhaps a minimise button as well","msgtype":"m.text"}}
                    {"origin_server_ts":1692774852495,"event_id":"$cVqnw8snuKOaDPTUnV2dKc0jCaKVJWz9YwKbS3bpFO0","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"looking forward to it!","msgtype":"m.text"}}
                    {"origin_server_ts":1692774887713,"event_id":"$mKdNgMN4MryWE9yoqkX-ncR5y1cBwnLFwe2KXfgi9hU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I just hate web development so we'll see when I can muster enough motivation to do it.","msgtype":"m.text"}}
                    {"origin_server_ts":1692896099842,"event_id":"$9GOhRvRmEW8h62gMg6KcJCUrzqVjMtmtAMBdYVmXnHg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://peertube.functional.cafe/w/1mKhWeaqiuPFgcwopZ5k5C","msgtype":"m.text"}}
                    {"origin_server_ts":1692958517233,"event_id":"$mZlFavA9sErB1lU7Iy_P9n93z9DeOiEH1B1ekxAiROE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"lol: asked fzf to find \"clone kap\"; It indeed gave `git clone https://codeberg.org/loke/array --depth=1` for the most recent entry.... but \"kap\" there is from `lo(k)e/(a)rray --de(p)th=1`","msgtype":"m.text","formatted_body":"lol: asked fzf to find \"clone kap\"; It indeed gave git clone https://codeberg.org/loke/array --depth=1<\/code> for the most recent entry.... but \"kap\" there is from lo(k)e/(a)rray --de(p)th=1<\/code>"}}
                    {"origin_server_ts":1692958729851,"event_id":"$eTcZlWYl9ucfgnJiMeygxefPbxebPTAXmB0Jtng8hzc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hah","msgtype":"m.text"}}
                    {"origin_server_ts":1692958797972,"event_id":"$lr_PwMNxaWyTw5I_uFpZIdV2A9FdUWzBGzCLmVBWtdk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"If you want to try the native version on Linux, build `./gradlew text-client:linkReleaseExecutableLinux`, and then run it with: `text-client/build/bin/linux/releaseExecutable/text-client.kexe --lib-path=array/standard-lib`","msgtype":"m.text","formatted_body":"If you want to try the native version on Linux, build ./gradlew text-client:linkReleaseExecutableLinux<\/code>, and then run it with: text-client/build/bin/linux/releaseExecutable/text-client.kexe --lib-path=array/standard-lib<\/code>"}}
                    {"origin_server_ts":1692958870007,"event_id":"$VhhhpEvQWwzpEf9sqwyrfF7vTntqaM6bHMPfK1sZhS0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I did try to build it once and it failed in some mysterious way, so I gave up (and recloned to get rid of potential garbage just now)","msgtype":"m.text","formatted_body":"I did try to build it once and it failed in some mysterious way, so I gave up (and recloned to get rid of potential garbage just now)"}}
                    {"origin_server_ts":1692958892346,"event_id":"$ZYUviDENw0eK5OfkVtHp3gFxD-245sWOwa7lEHqnXnA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You on Linux?","msgtype":"m.text"}}
                    {"origin_server_ts":1692958895781,"event_id":"$8F0IG4B_0IfRn5lVATiGQHFcuqrJ49lV-YRGvKO0bLQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yes","msgtype":"m.text","formatted_body":"yes"}}
                    {"origin_server_ts":1692958906390,"event_id":"$aOgvUsuoOAFo_3cXrU8sYUyCGl649AJT6PB2CT-i1k0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, then it should just work, as long as you have a Java 17.","msgtype":"m.text"}}
                    {"origin_server_ts":1692958919581,"event_id":"$gVpz2LkqPC4vDEOecWdwg6Z-fNpSLRvoRWvevT4iiFo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(also, of the 500MB repo, 490MB is fonts; nice)","msgtype":"m.text","formatted_body":"(also, of the 500MB repo, 490MB is fonts; nice)"}}
                    {"origin_server_ts":1692958933137,"event_id":"$rCFTf9l28krKXtupAZce_tC1llIeahE2O_Dqwl3MxE0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Wait what?","msgtype":"m.text"}}
                    {"origin_server_ts":1692958936795,"event_id":"$gCpE40M7P3lK36CIkpNXvX8VZ35je1v-eFFeue7eCO4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I never checked that.","msgtype":"m.text"}}
                    {"origin_server_ts":1692958946313,"event_id":"$Gz9uzvAOgAka0W3jN3ol8wUd3znAtOxW-cYwZkBMchc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`gui2/src/main/resources/com/dhsdevelopments/kap/gui2/fonts/ gui/src/main/resources/array/gui/fonts/`","msgtype":"m.text","formatted_body":"gui2/src/main/resources/com/dhsdevelopments/kap/gui2/fonts/ gui/src/main/resources/array/gui/fonts/<\/code>"}}
                    {"origin_server_ts":1692958970770,"event_id":"$vBqQKQe8uLyk5q-vm4kHuDDa4jBxqSSvYwKs_AudqPU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right. And they are copies of eachother.","msgtype":"m.text"}}
                    {"origin_server_ts":1692958987205,"event_id":"$iYUY9UybEetkoxUktQDFxyeb_RIgd01EyBZYgDvFSuo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I only use like... 2 of them. I will clean it up.","msgtype":"m.text"}}
                    {"origin_server_ts":1692958996251,"event_id":"$AZ3FRg_6AmWC5zzaeKutkq5I5nDzSE6cOwBVI05psAE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks for reporting.","msgtype":"m.text"}}
                    {"origin_server_ts":1692959311997,"event_id":"$A6YV5i1wLh7fiJ80pOPrFAaslu0VuxTHynGLD0i2oW0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ok [here's](https://dzaima.github.io/paste/#07VfdT9tIEH/3XzGtKoVesR0HSIqlq9pCWuUIFNFw7dtpY0@cJetdaz/Cx8P97Te7DoFyOkEBne7h8hDLuztfv5n57bi8Yrxm78vwGB/Cn6nopRW3KdOaXcIrOGNLBnG8RG24kpFqUJ6VC8gGSTfJoNftZXHWjbPd6Avt/LZ/ACdOWl4jDOWSayVrlBYmWDvNZdxKvcl6sDF1XJSwXni9lu9vxx@5ha@oySb8fvgA4U2o@QWWUKsSN8HMGR2vXkflQ2IrbgXXvrdq75dO0kqzUuA5WLywcSE4hZoLLhcnKJAZHF5g4SybChxz6S6ir5ZpS54Bg89BEvYZ1kpuQgZcFqpumOV0Gpik4MBY1TQUVXvIQKEcBS2VhSmCRmew3AT6pwCMZdYZmCkNJVrGhYmid7Cn5IxXTiM0Wp1hYSGvHI@Ob73Ar@9IowfOCYy5nKkkJHymnCy9jgkzC8jrZsor6ercO8kFHihLcbZRnefwYTIZHk1GX45eRJM5N9Cmh1wz4KRhM6TwLGrJBKwUaGC6cr42TB5F8ffvYyYrxyrM34wkqcY9wQzJR61Cn1igpw9eI@kgyZKg8QFTbKUrLOXPW9yMmD9G4LEpF9xepte4hjcgI5qRM@QaI2AqvkQJlPq1X6SxQomaWdJfkN0ETgljqkhm4VI5OnEuQXOzeBHdABRq4n90fkSH5zAjqTxN01raVHhAbrXQ6t/owntBJX7IuEwXAbzVXnkpWc2LmKKl@ksWNs/6O3m2Bd@4nYMiGI/I@SXC571NWFLb@2YjOMFQmwm0FPU5nVTOwvvJXCMrx6rwODPZCW1UzAlZCoXNKAMkyC1ngl8xD5jP3RP9R1lRtrzfO28H@du3cEz41uhtddq9TkgceqprG7rt8tDhFDu5ZhX88ayu9Ltb/yVXdvu3XSmU9Gz6QF/W/XebgYvQTqoZ8ymW3IY@hE8fRuPhfjS8KLAJ3UBFYkNFwMuaPHwZLoNEUDkkQ62VziG1dZNmvV6/uzvY2c76g@3ubrbb7Q6SIs/yrEs4MEvFhO3xDrWi9QaTeScgFPqxJVJY/ahJlK6SM7RTTUZN0uKSyFDFycpxepZ4gTo5tcTkBzZBaYjFj9Re24bBP7MRdj2KvcHO68eaGLVPMhJW9rEQlAyPkNlY7YW26233n8FGoL62ZcPiqG7Ej2Z6u/@OmZ9HjHgvOVvWyT7OmBP2WDiq4r@Z2mjXQ162th5txDcNBULsXaAxe1TKG75Kg9Ze9oxqv9L9s1bd2@49VTUrvOZX/2Th8a6P1tkOzxuN3e79OokZEmf9HcfRXKtadVNb@0u1wNX6xp19b2V752eNrPDwbobyW2O89QRNay3en8hz2unJMIePYaKY0dxHxOgvPJogAa@pLomiX@DbnIyd@1n8nIbyKo/a4dQz4UrOTwvWk2nnXjbtJES8x22KPWXXtZ9YOynxMmdpOzGnxrrZbPXvuTWlz4abGT6d0nXglzueLCU382vXpZLxFVmkAGisWDLhEDIfwkRf5mSXvi/ag2HsLRZWswJBtaxOt0KFlpgdIWxC2E1@FPNjrp9k4rjEqavuyNaKJh@haNnZxtk7soZGh@uTMycE3SM0msytCSh/vpafo2h8eufWNoauSv@etJ8LCaU8ij6ejsb7q1vJ30VZDVs7JhoAC8NamGN8NkwOA0LC5wrL@75Jsld/AQ) a cryptic error (don't remember if it's the one I got before)","msgtype":"m.text","formatted_body":"ok here's<\/a> a cryptic error (don't remember if it's the one I got before)"}}
                    {"origin_server_ts":1692959389666,"event_id":"$DL3gxDG0jnRCw8XPjD1omhhRnwcyjB5iulYgSBV9QWg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ah for the native code. You need to install editline.","msgtype":"m.text"}}
                    {"origin_server_ts":1692959400123,"event_id":"$LJeZc2T-Ke-v_KLAgNTgf88qz4Q69N7vaKsnfp7Z5hI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"On ubuntu, i think it's libedit-dev","msgtype":"m.text"}}
                    {"origin_server_ts":1692959403375,"event_id":"$6arh-oBeA71n8FuT8ik5aGAiurbxWNTynKSEjzKSjgI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`sudo apt install libedit-dev`, lets see","msgtype":"m.text","formatted_body":"sudo apt install libedit-dev<\/code>, lets see"}}
                    {"origin_server_ts":1692959407345,"event_id":"$kSES9atrVQfQd_DKLk4EyQbyqb_giZ88gtBJElXdsF0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"On Fedora it's something similar.","msgtype":"m.text"}}
                    {"origin_server_ts":1692959444428,"event_id":"$6kBTV97ua9WSn6nbF_jjLrML3bEm3e7_jeFmlVlNfeM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I didn't used to have a history editor. I implemented that on the flight to Sweden in July :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1692959484991,"event_id":"$JRdlaMZaVyfA8d8NBclWZlD4asNGLAc81-ElSwd3lm0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ok that did build","msgtype":"m.text","formatted_body":"ok that did build"}}
                    {"origin_server_ts":1692959531647,"event_id":"$mPu7CXNapltIDmqPXfG8mQCPJvCqfd-nc1bSyyuPZjA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The native version is about 8-10 times slower than the JVM version.","msgtype":"m.text"}}
                    {"origin_server_ts":1692959534701,"event_id":"$VkxIdCBmxzQ70uUCr7XDzu8_v-DAg1Al6KoCzG0S1u4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(as a random note, that previous time I tried to build it, something somewhere downloaded an entire libc for some reason; so quite funny that in the same thing that does that, it also expects some system packages)","msgtype":"m.text","formatted_body":"(as a random note, that previous time I tried to build it, something somewhere downloaded an entire libc for some reason; so quite funny that in the same thing that does that, it also expects some system packages)"}}
                    {"origin_server_ts":1692959570236,"event_id":"$1Y9EbYth55BVNj-ji4fQJWmIYoPs18rhdTARNQ_vCzo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$JRdlaMZaVyfA8d8NBclWZlD4asNGLAc81-ElSwd3lm0"}},"format":"org.matrix.custom.html","body":"and it works","msgtype":"m.text","formatted_body":" ↰ <\/a> dzaima<\/a> <\/mx-reply>and it works"}}
                    {"origin_server_ts":1692959576044,"event_id":"$mg6rbW5vHp_cn_GYVjnRF-hsDSKaBO7zpRJTaOKhg0g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hmm, it shouldn't download libc. But it does pull in some LLVM crap so perhaps it's part of that.","msgtype":"m.text"}}
                    {"origin_server_ts":1692959609596,"event_id":"$At9eWKBR4HnRWFE3qJ4jgl-6QlXKHS-2NksB3KIgMXk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The external libraries is part of my code. I link icu, jansson, libcurl and libinput.","msgtype":"m.text"}}
                    {"origin_server_ts":1692959631169,"event_id":"$VeL5CI2CVlBE2hhO5E4uE8uQuwbwc2NsmofE6qjDTpA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Probably should include some build instructions.","msgtype":"m.text"}}
                    {"origin_server_ts":1692959847293,"event_id":"$DilJUo67UmOYcydGlb7ev8T3zkcDoa_XDpkww04m1vc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"after a `./gradlew gui:run` has been run, is there some more direct way to run it again?","msgtype":"m.text","formatted_body":"after a ./gradlew gui:run<\/code> has been run, is there some more direct way to run it again?"}}
                    {"origin_server_ts":1692959999442,"event_id":"$LfsvKvdYN7Fyq9LCxnlx_w32k_NpzBQNW2qvFdfuSZs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You type it again :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1692960033115,"event_id":"$sZaH1ZcHVpGtJgEx6mfS2g4pmo1gh00g2PwxdvuPuNM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"You can also run `./gradlew gui:builtTar`","msgtype":"m.text","formatted_body":"You can also run ./gradlew gui:builtTar<\/code>"}}
                    {"origin_server_ts":1692960040411,"event_id":"$vlCarFQPmHHNlDHvgZOIcaDcKA1eVU1TN2FpOprpAxY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"You can also run `./gradlew gui:distTar`","msgtype":"m.text","formatted_body":"You can also run ./gradlew gui:distTar<\/code>"},"m.relates_to":{"event_id":"$sZaH1ZcHVpGtJgEx6mfS2g4pmo1gh00g2PwxdvuPuNM","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * You can also run `./gradlew gui:distTar`","msgtype":"m.text","formatted_body":" * You can also run ./gradlew gui:distTar<\/code>"}}
                    {"origin_server_ts":1692960060682,"event_id":"$DmWHiRyZ8I5RMwPx_oCPpsFt9nyGgQjc-wplZ7ytCp0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Or `distZip`. That creates a distribution with a startup script.","msgtype":"m.text","formatted_body":"Or distZip<\/code>. That creates a distribution with a startup script."}}
                    {"origin_server_ts":1692960086941,"event_id":"$5ZKkKL0yIi11Je1aCCQ0-mKSHAVwPTk4JPjiDWeH-ho","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, I haven't tested that one in a while so it might not find the standard library files unless you start it from the right directly.","msgtype":"m.text"}}
                    {"origin_server_ts":1692960117359,"event_id":"$VhRHliPJJynmIq3dZrGTtQ3r2cTkrC0gWNjRV9lMsfo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"alright I'll just work with `./gradlew gui:run` (want to load it into `rr` to see the assembly it runs, but the more levels of nesting a thing it's in, the more work it is to find the actual process/thread that does the thing I care about)","msgtype":"m.text","formatted_body":"alright I'll just work with ./gradlew gui:run<\/code> (want to load it into rr<\/code> to see the assembly it runs, but the more levels of nesting a thing it's in, the more work it is to find the actual process/thread that does the thing I care about)"}}
                    {"origin_server_ts":1692960200539,"event_id":"$hW0YMolR6b6wibUTcjECUXGSNcT6PrVOIuqeo7AhzqM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Well, they gui runs in the JVM, so there isn't much assembly to look at.","msgtype":"m.text"}}
                    {"origin_server_ts":1692960205370,"event_id":"$x7w5fAD18_VEAAbM-GnBCFHg7dDLYWXkFtNCmggK1S4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The native build is very straightforward.","msgtype":"m.text"}}
                    {"origin_server_ts":1692960214951,"event_id":"$7LqXw5rnCv4PEi8LguqfBcRsoUd07A3C7drKvhU7MJM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Well, the gui runs in the JVM, so there isn't much assembly to look at.","msgtype":"m.text"},"m.relates_to":{"event_id":"$hW0YMolR6b6wibUTcjECUXGSNcT6PrVOIuqeo7AhzqM","rel_type":"m.replace"},"body":" * Well, the gui runs in the JVM, so there isn't much assembly to look at.","msgtype":"m.text"}}
                    {"origin_server_ts":1692960229909,"event_id":"$cjH1364BbdfMxmXG2X21lpcl4VO1UBYJ05OEByGQFBU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"JVM is JITted though, so there will be assembly","msgtype":"m.text","formatted_body":"JVM is JITted though, so there will be assembly"}}
                    {"origin_server_ts":1692960245539,"event_id":"$2lvK5okR6JdOsNSH4IY7caKTSlQql_lL-RSEhml2GNk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh right.","msgtype":"m.text"}}
                    {"origin_server_ts":1692960266491,"event_id":"$oZFSLH8P4vIkWHgxd9kSk-ypgB_BTyTlGyEJZxokIdI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Not sure how to find that, and I have worked on Java for decades :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1692960315214,"event_id":"$uCtHAwb1Ua06uNVPVcXYbjpz8b1OJD1gB981nHS5xWw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's why I want to just load it into [rr](https://rr-project.org/) and jump to some seconds into the recording which would likely hit the slow thing, if only I could figure out the process/thread that the thing in question is","msgtype":"m.text","formatted_body":"that's why I want to just load it into rr<\/a> and jump to some seconds into the recording which would likely hit the slow thing, if only I could figure out the process/thread that the thing in question is"}}
                    {"origin_server_ts":1692960335927,"event_id":"$sljtQhr4pbx4Rox94iZcSLs1XAKLs_WXp-peYs26s8c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"When doing performance analysis of this thing I usually use JProfiler.","msgtype":"m.text"}}
                    {"origin_server_ts":1692960357507,"event_id":"$e5AcoDq4hIw9vr-pZGXCD_2VGxLlHZOpKKPqjyY8GFQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"does it give a disassembly though?","msgtype":"m.text","formatted_body":"does it give a disassembly though?"}}
                    {"origin_server_ts":1692960366356,"event_id":"$xO63PgwfpSAryFSnp-eqifiPqboRWlEMgXRFMUttJfY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Byte code level.","msgtype":"m.text"}}
                    {"origin_server_ts":1692960377356,"event_id":"$mquZg4wNUWv50GFMOKVouPFcCsnEAfZrpuNSbN_l82s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"right; I want assembly","msgtype":"m.text","formatted_body":"right; I want assembly"}}
                    {"origin_server_ts":1692960454916,"event_id":"$dwuq0yxomL6SrhtduvRzIuvfF73nPAsapo4NYnVLMWQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you find anything of interest, I'd be extremely interesting in learning about it of course.","msgtype":"m.text"}}
                    {"origin_server_ts":1692960487867,"event_id":"$DQkcdQps4hHur6mq1o2v1Sak9MctdyC4aDnhOpa_wJw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I doubt it'd be anything \"helpful\", other than general info on what jvm does","msgtype":"m.text","formatted_body":"I doubt it'd be anything \"helpful\", other than general info on what jvm does"}}
                    {"origin_server_ts":1692960496209,"event_id":"$PV-agq1tf9TnA1YygyxnQQA73oOcmPvxtMIeMF-UBqA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I doubt it'd be anything \"helpful\", other than general info on what openjdk does","msgtype":"m.text","formatted_body":"I doubt it'd be anything \"helpful\", other than general info on what openjdk does"},"m.relates_to":{"event_id":"$DQkcdQps4hHur6mq1o2v1Sak9MctdyC4aDnhOpa_wJw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* I doubt it'd be anything \"helpful\", other than general info on what openjdk does","msgtype":"m.text","formatted_body":"* I doubt it'd be anything \"helpful\", other than general info on what openjdk does"}}
                    {"origin_server_ts":1692960514704,"event_id":"$K4u6NewOryFgPp8faUVRcBPyCH0WkrEKOrG8YGrCX04","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There is one performance issue I have at the moment: All variable lookups requires a hashmap lookup. This is because the current frame pointer is stored in a thread-local variable, and it turns out trad-local lookups requires a hashmap lookup. Terible.","msgtype":"m.text"}}
                    {"origin_server_ts":1692960517267,"event_id":"$Bg4F79QbgAjCoeSDJ_5rer9yY6DhZp0Nn7RLK0LyNKY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"There is one performance issue I have at the moment: All variable lookups requires a hashmap lookup. This is because the current frame pointer is stored in a thread-local variable, and it turns out trad-local lookups requires a hashmap lookup. Terrible.","msgtype":"m.text"},"m.relates_to":{"event_id":"$K4u6NewOryFgPp8faUVRcBPyCH0WkrEKOrG8YGrCX04","rel_type":"m.replace"},"body":" * There is one performance issue I have at the moment: All variable lookups requires a hashmap lookup. This is because the current frame pointer is stored in a thread-local variable, and it turns out trad-local lookups requires a hashmap lookup. Terrible.","msgtype":"m.text"}}
                    {"origin_server_ts":1692960556030,"event_id":"$Gp9RHfAIZQK8jQMgTylfVr4ze8raOtG_4XODAImHO4Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"If I subclass `Thread` I can stuff the framepointer directly in a field, which can speed things up, but I haven't done that yet. Doing so would give me a 5% performance increase on typical code.","msgtype":"m.text","formatted_body":"If I subclass Thread<\/code> I can stuff the framepointer directly in a field, which can speed things up, but I haven't done that yet. Doing so would give me a 5% performance increase on typical code."}}
                    {"origin_server_ts":1692960582729,"event_id":"$WWoq0_gyhXOUjOweNOY2vmfBsnGaV5wY73J1tKf42iA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah threadloacals are not nice","msgtype":"m.text","formatted_body":"yeah threadloacals are not nice"}}
                    {"origin_server_ts":1692960603939,"event_id":"$S3knuQieyxguYXmloPdYLlFlqdIP5NUsvj3bzdc2xuo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"They are quite nice in Common Lisp, which is why I used them here without thought.","msgtype":"m.text"}}
                    {"origin_server_ts":1692960660283,"event_id":"$OBTzPKTe-E80NVxyBirkOeRjaFsB0tdUlk-NkqKn5m0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think binding them directly to the `Thread` instance will be fine. The alternative of explicitly passing the context everywhere that may eventually need the stack frame is both cumbersome, and actually slower in some cases (since you end up passing more variables).","msgtype":"m.text","formatted_body":"I think binding them directly to the Thread<\/code> instance will be fine. The alternative of explicitly passing the context everywhere that may eventually need the stack frame is both cumbersome, and actually slower in some cases (since you end up passing more variables)."}}
                    {"origin_server_ts":1692960664120,"event_id":"$8_NYp6CW9LBGwDn27IBanvdjMwZjM_95rsl1nTSZrrI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(ugh rr is sometimes breaking on jumping around in the replay)","msgtype":"m.text","formatted_body":"(ugh rr is sometimes breaking on jumping around in the replay)"}}
                    {"origin_server_ts":1692960708152,"event_id":"$Q8iz5ZIQya5xfshMIxAuTTiF0mmsCJRlAiopZVweC2w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The JVM tends to recompile code all the time. I suspect that can confuse debuggers?","msgtype":"m.text"}}
                    {"origin_server_ts":1692960817500,"event_id":"$Ni8k_hBnYV0OflXHHIiJW707XTLzPBRvUZZXidclKBI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that breaks software breakpoints but I'm not using them here; I think it's just rr being a bit funky (it's not doing a trivial thing, reproducibly replaying multiple threads/processes & their syscalls)","msgtype":"m.text","formatted_body":"that breaks software breakpoints but I'm not using them here; I think it's just rr being a bit funky (it's not doing a trivial thing, reproducibly replaying multiple threads/processes & their syscalls)"}}
                    {"origin_server_ts":1692960880737,"event_id":"$MufUvAXxe4N0VJAQO28AfzM3hkp0q6cLpzJQXOkucIs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(or maybe it's the trunk gdb build I just recently built; I've seen it break at least once)","msgtype":"m.text","formatted_body":"(or maybe it's the trunk gdb build I just recently built; I've seen it break at least once)"}}
                    {"origin_server_ts":1692960889866,"event_id":"$G9iDuD9-WfxGGa3k79F5_0UJIO1FMLTyKBT6hay9EC8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(or maybe it's the trunk gdb build I just recently built; I've seen it break at least once before)","msgtype":"m.text","formatted_body":"(or maybe it's the trunk gdb build I just recently built; I've seen it break at least once before)"},"m.relates_to":{"event_id":"$MufUvAXxe4N0VJAQO28AfzM3hkp0q6cLpzJQXOkucIs","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (or maybe it's the trunk gdb build I just recently built; I've seen it break at least once before)","msgtype":"m.text","formatted_body":"* (or maybe it's the trunk gdb build I just recently built; I've seen it break at least once before)"}}
                    {"origin_server_ts":1692960917104,"event_id":"$ihcmb1PgjDQk7EBk8HOqbtXeOZ5inbBeEVGv-8_xQjw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"that breaks software breakpoints but I'm not using them here; I think it's just rr being a bit funky (it's not doing a trivial thing, reproducibly replaying multiple threads/processes (though only one ever running at a time) & their syscalls)","msgtype":"m.text","formatted_body":"that breaks software breakpoints but I'm not using them here; I think it's just rr being a bit funky (it's not doing a trivial thing, reproducibly replaying multiple threads/processes (though only one ever running at a time) & their syscalls)"},"m.relates_to":{"event_id":"$Ni8k_hBnYV0OflXHHIiJW707XTLzPBRvUZZXidclKBI","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* that breaks software breakpoints but I'm not using them here; I think it's just rr being a bit funky (it's not doing a trivial thing, reproducibly replaying multiple threads/processes (though only one ever running at a time) & their syscalls)","msgtype":"m.text","formatted_body":"* that breaks software breakpoints but I'm not using them here; I think it's just rr being a bit funky (it's not doing a trivial thing, reproducibly replaying multiple threads/processes (though only one ever running at a time) & their syscalls)"}}
                    {"origin_server_ts":1692961117937,"event_id":"$yrP4KA7ewsB4e5jCysjLBio4fk3UuRa62whcN7H5tck","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"oh, it's it `exec()`ing from a non-`fork()` which for whatever reason utterly confuses rr","msgtype":"m.text","formatted_body":"oh, it's it exec()<\/code>ing from a non-fork()<\/code> which for whatever reason utterly confuses rr"}}
                    {"origin_server_ts":1692961141296,"event_id":"$AsdoKDFOdJlsCE_i0H14s4I7m73L1w9Ai_AYbKOcfmc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"oh, it's it `execve()`ing from a non-`fork()` which for whatever reason utterly confuses rr","msgtype":"m.text","formatted_body":"oh, it's it execve()<\/code>ing from a non-fork()<\/code> which for whatever reason utterly confuses rr"},"m.relates_to":{"event_id":"$yrP4KA7ewsB4e5jCysjLBio4fk3UuRa62whcN7H5tck","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* oh, it's it `execve()`ing from a non-`fork()` which for whatever reason utterly confuses rr","msgtype":"m.text","formatted_body":"* oh, it's it execve()<\/code>ing from a non-fork()<\/code> which for whatever reason utterly confuses rr"}}
                    {"origin_server_ts":1692961221388,"event_id":"$Y6MtyunDB6jCdsNlejsj3P93Wh-GJigpkwinGwDoxYI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"oh, it's it `execve()`ing from a non-`fork()` which for whatever reason utterly confuses rr (I've encountered this before)","msgtype":"m.text","formatted_body":"oh, it's it execve()<\/code>ing from a non-fork()<\/code> which for whatever reason utterly confuses rr (I've encountered this before)"},"m.relates_to":{"event_id":"$yrP4KA7ewsB4e5jCysjLBio4fk3UuRa62whcN7H5tck","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* oh, it's it `execve()`ing from a non-`fork()` which for whatever reason utterly confuses rr (I've encountered this before)","msgtype":"m.text","formatted_body":"* oh, it's it execve()<\/code>ing from a non-fork()<\/code> which for whatever reason utterly confuses rr (I've encountered this before)"}}
                    {"origin_server_ts":1692961252515,"event_id":"$i5cfioR-674gfV6oZCBQSu_dcW4E1iAVQztpgmx2xGc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"That would be the `java` executable which detects the platform and runs the appropriate version (the main reason, I think, is because some versions of java supports 32-bit as well as 64-bit and you pick which version using a commandline argument)","msgtype":"m.text","formatted_body":"That would be the java<\/code> executable which detects the platform and runs the appropriate version (the main reason, I think, is because some versions of java supports 32-bit as well as 64-bit and you pick which version using a commandline argument)"}}
                    {"origin_server_ts":1692961293518,"event_id":"$X3kn0DaC4HjtKAJeHxlOEh2x4y0punoTGh3jGEkT9qk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Can't you attach after the fact?","msgtype":"m.text"}}
                    {"origin_server_ts":1692961310076,"event_id":"$7HJe939y9N3ZwDXvvccy9kFfaeT_gmXbb_hVqwQrkl8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"rr doesn't \"attach\"","msgtype":"m.text","formatted_body":"rr doesn't \"attach\""}}
                    {"origin_server_ts":1692961346063,"event_id":"$u0n-NfD29cGMjBGfQ_jzxs43RW3VgBEadwn4fF0lbto","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"rr doesn't \"attach\"; it records a process tree explicitly invoked through it","msgtype":"m.text","formatted_body":"rr doesn't \"attach\"; it records a process tree explicitly invoked through it"},"m.relates_to":{"event_id":"$7HJe939y9N3ZwDXvvccy9kFfaeT_gmXbb_hVqwQrkl8","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* rr doesn't \"attach\"; it records a process tree explicitly invoked through it","msgtype":"m.text","formatted_body":"* rr doesn't \"attach\"; it records a process tree explicitly invoked through it"}}
                    {"origin_server_ts":1692961599203,"event_id":"$B60fJft2IEuAGBFEQXXAzaSncckgRAyidb37VLYijEE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I see. What about creating a wrapper around the actual process that is being exec'ed that starts it using rr?","msgtype":"m.text"}}
                    {"origin_server_ts":1692961614844,"event_id":"$pw5bEUqNdOGPQ25AgYCWriCAGlL-_C8WCyiaUe-xwYE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No need to trace the wrapper.","msgtype":"m.text"}}
                    {"origin_server_ts":1692961655629,"event_id":"$VJqFYRaB3dCHmQeJw6L8J1-1ZS0bRL1XT6yNMIkRR44","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"need to find that invocation then","msgtype":"m.text","formatted_body":"need to find that invocation then"}}
                    {"origin_server_ts":1692961729336,"event_id":"$knkZgAz2WHTDgDtmYeqfXL6mk2CXj6dl0p3_T_UYE_g","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"oh cool can just print the values from the execve invocation","msgtype":"m.text","formatted_body":"oh cool can just print the values from the execve invocation"}}
                    {"origin_server_ts":1692961797656,"event_id":"$-MYX-IDqCXZof1qfC55-GBKn7lNm-80DEHlqFdnxlSw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1692961802287,"event_id":"$1e4bRaQSzTHVuiyzHwcICWdX4hcjcz-NvopCznCygWI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That should work.","msgtype":"m.text"}}
                    {"origin_server_ts":1692961810621,"event_id":"$-ekGYtwOh78l7KHGY6z0nNI0zyPSLFBHXfEodE-3nKk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Probably need to set the library path as well.","msgtype":"m.text"}}
                    {"origin_server_ts":1692961868540,"event_id":"$ThWgRJcyDN8mZFMaF484RSEo2kKGOLw_T5QvE6no81g","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ok that wasn't that hard, `/usr/bin/java -Xmx64m -Xms64m -Dorg.gradle.appname=gradlew -classpath /mnt/linux2/git/array/gradle/wrapper/gradle-wrapper.jar org.gradle.wrapper.GradleWrapperMain gui:run`","msgtype":"m.text","formatted_body":"ok that wasn't that hard, /usr/bin/java -Xmx64m -Xms64m -Dorg.gradle.appname=gradlew -classpath /mnt/linux2/git/array/gradle/wrapper/gradle-wrapper.jar org.gradle.wrapper.GradleWrapperMain gui:run<\/code>"}}
                    {"origin_server_ts":1692961908005,"event_id":"$heyfMO5950BNoDg9RPX8XhtfStzf4mxY8_xLI6LcikI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"does Kap run in the same jvm instance that runs that gradle build?","msgtype":"m.text","formatted_body":"does Kap run in the same jvm instance that runs that gradle build?"}}
                    {"origin_server_ts":1692961964164,"event_id":"$FvsyrBR-RZmQ2kmkIXN2eJzfhRdtBsCUNwdKF7WxXWU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No.","msgtype":"m.text"}}
                    {"origin_server_ts":1692961975624,"event_id":"$7c06rBkWxqq7EO_MbZ7_SFcKqAUKXeNEYCQmlZ2TiPg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I know the best solution:","msgtype":"m.text"}}
                    {"origin_server_ts":1692961990639,"event_id":"$YGvW3JUeD-Oa3qdFNTCzOa6RdfY4tNGb6i3NHvBvMyo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Run the `gui:run` then do a `ps` to see what the eventual java commandline became.","msgtype":"m.text","formatted_body":"Run the gui:run<\/code> then do a ps<\/code> to see what the eventual java commandline became."}}
                    {"origin_server_ts":1692962004445,"event_id":"$6HLEnZVCahXItxeKAoJaf3ppYQhn4z6CGqY-icrEMlQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's going to be a pretty long one","msgtype":"m.text"}}
                    {"origin_server_ts":1692962069690,"event_id":"$_26ougA4OUbEIacEd9FpYkgDu4QicR6dYoAiALo0YKI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"7.4KB of a command","msgtype":"m.text","formatted_body":"7.4KB of a command"}}
                    {"origin_server_ts":1692962107086,"event_id":"$mw0KP1pLGHKRMAsz7AXSGFauZpms0kD-DewORV9XYHM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yep","msgtype":"m.text"}}
                    {"origin_server_ts":1692962164289,"event_id":"$f7pZjftTh7ySCSOpKXkFMXfiwB_IY3xe-yr93NVHq0U","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ok worked!","msgtype":"m.text","formatted_body":"ok worked!"}}
                    {"origin_server_ts":1692962185761,"event_id":"$zhZzvnMOg7RbkD4MJmDXogLjwUcu2PAGhdZY8z7uMFs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yay!","msgtype":"m.text"}}
                    {"origin_server_ts":1692962529487,"event_id":"$rXu1bqAvskltFwwKNNDovgCJtC8m5iF_aU9PThuVokk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I was hoping that there'd be a clear single syscall-less thread for the duration of the timed expression taking its time, but no this is java where there's GC happening all the time","msgtype":"m.text","formatted_body":"I was hoping that there'd be a clear single syscall-less thread for the duration of the timed expression taking its time, but no this is java where there's GC happening all the time"}}
                    {"origin_server_ts":1692962546319,"event_id":"$b8UyYEUBDVuusn-fVvIDrg2qRP5ca_6BNCT2AHoVLyw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I was hoping that there'd be a clear single syscall-less thread for the duration of the timed expression taking its time (which is the case for CBQN, but also it only has one thread), but no this is java where there's GC happening all the time","msgtype":"m.text","formatted_body":"I was hoping that there'd be a clear single syscall-less thread for the duration of the timed expression taking its time (which is the case for CBQN, but also it only has one thread), but no this is java where there's GC happening all the time"},"m.relates_to":{"event_id":"$rXu1bqAvskltFwwKNNDovgCJtC8m5iF_aU9PThuVokk","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* I was hoping that there'd be a clear single syscall-less thread for the duration of the timed expression taking its time (which is the case for CBQN, but also it only has one thread), but no this is java where there's GC happening all the time","msgtype":"m.text","formatted_body":"* I was hoping that there'd be a clear single syscall-less thread for the duration of the timed expression taking its time (which is the case for CBQN, but also it only has one thread), but no this is java where there's GC happening all the time"}}
                    {"origin_server_ts":1692962654941,"event_id":"$jLbBVDRokwJjxKBOz4GMue2yQTxjsfAIIcVHjoWoGz4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That would be mostly triggered by the UI","msgtype":"m.text"}}
                    {"origin_server_ts":1692962683521,"event_id":"$tjlzUQg83lDQjJtLIAcqGg_zLWECowFgMX_ZO_-HMcE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you run it without a UI, and evaluate using the non-boxed path, there should be very little allocations and few GC's.","msgtype":"m.text"}}
                    {"origin_server_ts":1692962925188,"event_id":"$KxXM8I9UMcnCLFgYezzW2y_YEoHxPRFUsbybTaNgyVM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"Screenshot from 2023-08-25 14-27-29.png","msgtype":"m.image","url":"mxc://matrix.org/rrxaYvNiUwkbsoSoPgFHIlMh","info":{"size":229258,"w":1599,"h":872,"mimetype":"image/png"}}}
                    {"origin_server_ts":1692962932813,"event_id":"$5LaV95kuBwUk3g2lHa9qEMGPfPLRvVs1JMqTAbY8jBs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"might be it?","msgtype":"m.text","formatted_body":"might be it?"}}
                    {"origin_server_ts":1692963012298,"event_id":"$oqqzHJyejqFxsdMFkO7zsZOI8gL1qrT6m3-UXZTCAm0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(that being a recording of `{ a←⍵ ⋄ time:measureTime { +/a } } comp ⍳1000000000` ran three times, pretty clearly visible in the timeline)","msgtype":"m.text","formatted_body":"(that being a recording of { a←⍵ ⋄ time:measureTime { +/a } } comp ⍳1000000000<\/code> ran three times, pretty clearly visible in the timeline)"}}
                    {"origin_server_ts":1692963212149,"event_id":"$h5fnQV-EBzr1w29DRloRp1dcWgpNbzm1CHOdAndstQM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hah","msgtype":"m.text"}}
                    {"origin_server_ts":1692963215159,"event_id":"$DTAF0Wchl__UQYodWJny0BUG3qd3w2552nRAvcSP5UU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now I see","msgtype":"m.text"}}
                    {"origin_server_ts":1692963257429,"event_id":"$gl1geD9U_p6J7fcmiSXgzMxJrFBpWYvjUSEnx9ZuuNc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"When collapsing the result of iota, you're actually not allocating an array. It's an optimisation. ","msgtype":"m.text"}}
                    {"origin_server_ts":1692963277330,"event_id":"$VX1Ips15911XGjDy54E0ktJuep9jWP6eg5XkR3d1iMA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"oh right you have said that that's a thing","msgtype":"m.text","formatted_body":"oh right you have said that that's a thing"}}
                    {"origin_server_ts":1692963285844,"event_id":"$ouYcTdHvUHygP1JdFVzHH7arLnCOma3Ct3sun2bE3bM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Try putting 0+ after the comp","msgtype":"m.text"}}
                    {"origin_server_ts":1692963309831,"event_id":"$veocbOweNPhU2VxUIl5freg60MRkIkBZqy1cBIr0GMU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That will force it to be the result of a calculation so it will allocate an array.","msgtype":"m.text"}}
                    {"origin_server_ts":1692963331383,"event_id":"$LZDIs6QeBAKqPIp7yvY-xo8s7UDHMUUN9METgHxHY_I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But it will be a specialised array (so no boxing)","msgtype":"m.text"}}
                    {"origin_server_ts":1692963348225,"event_id":"$meEqCNHuYNo_uPhKP79ZB4L31XAe4xAHfrVSXwqwmVQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(not that I wanted it to allocate here anyway; not that I have 8GB of free RAM either)","msgtype":"m.text","formatted_body":"(not that I wanted it to allocate here anyway; not that I have 8GB of free RAM either)"}}
                    {"origin_server_ts":1692963356532,"event_id":"$9NgCXOrH8wVXD8r-ErJeco8KWsVJ8-YdYdAxto6Z1nE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(not that I wanted it to allocate here anyway; not that I have 8GB of free RAM for it to either)","msgtype":"m.text","formatted_body":"(not that I wanted it to allocate here anyway; not that I have 8GB of free RAM for it to either)"},"m.relates_to":{"event_id":"$meEqCNHuYNo_uPhKP79ZB4L31XAe4xAHfrVSXwqwmVQ","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (not that I wanted it to allocate here anyway; not that I have 8GB of free RAM for it to either)","msgtype":"m.text","formatted_body":"* (not that I wanted it to allocate here anyway; not that I have 8GB of free RAM for it to either)"}}
                    {"origin_server_ts":1692963404399,"event_id":"$Q0BYm5iyes0svUmshDUd1gnCZK0pBhVaGydcnDaPBk0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(didn't even notice that it might here, even though I did see that intent in the `1+a` case)","msgtype":"m.text","formatted_body":"(didn't even notice that it might here, even though I did see that intent in the 1+a<\/code> case)"}}
                    {"origin_server_ts":1692963471685,"event_id":"$oN3plz9S8n4PBPI6crAkrtqMHM2T_GMxJHkYWW4s710","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right","msgtype":"m.text"}}
                    {"origin_server_ts":1692963643674,"event_id":"$2i5R3lk0KWvGLWHQPNUG_32WlTpB9mU6xIe12rewnMg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There is a virtual call to fetch the value at a given place in the array (the iota array).","msgtype":"m.text"}}
                    {"origin_server_ts":1692963659282,"event_id":"$UtwdOKsLkwdVJyGqoLOLDsUJ9rqgkJX1DuR6genzNSE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That appears to have been complete inlined.","msgtype":"m.text"}}
                    {"origin_server_ts":1692963671264,"event_id":"$8VmcouuEXokv374303AVm5PUshAwQO4jORT1iieiPe0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"That appears to have been completely inlined.","msgtype":"m.text"},"m.relates_to":{"event_id":"$UtwdOKsLkwdVJyGqoLOLDsUJ9rqgkJX1DuR6genzNSE","rel_type":"m.replace"},"body":"* That appears to have been completely inlined.","msgtype":"m.text"}}
                    {"origin_server_ts":1692964856954,"event_id":"$FPY1Z2Hh6BM8asCOodckLPZ0X9oI9SrF8ANq2B7vyJo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"([video](https://matrix.org/_matrix/media/r0/download/matrix.org/doHzzPsjGDKodvIHSWcLYQGP) of my rr gui thing because i think the timeline is cool (it's interpolation on top of interpolation so completely entirely inaccurate, but helpful and pretty nonetheless))","msgtype":"m.text","formatted_body":"(video<\/a> of my rr gui thing because i think the timeline is cool (it's interpolation on top of interpolation so completely entirely inaccurate, but helpful and pretty nonetheless))"}}
                    {"origin_server_ts":1692965063776,"event_id":"$Qkr_chwIwAd9h05pBJ1gpqgLsRdXlrc9EMW0hsK6gws","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"([video](https://matrix.org/_matrix/media/r0/download/matrix.org/doHzzPsjGDKodvIHSWcLYQGP) of that rr gui thing because i think the timeline is cool (it's interpolation on top of interpolation so completely entirely inaccurate, but helpful and pretty nonetheless))","msgtype":"m.text","formatted_body":"(video<\/a> of that rr gui thing because i think the timeline is cool (it's interpolation on top of interpolation so completely entirely inaccurate, but helpful and pretty nonetheless))"},"m.relates_to":{"event_id":"$FPY1Z2Hh6BM8asCOodckLPZ0X9oI9SrF8ANq2B7vyJo","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* ([video](https://matrix.org/_matrix/media/r0/download/matrix.org/doHzzPsjGDKodvIHSWcLYQGP) of that rr gui thing because i think the timeline is cool (it's interpolation on top of interpolation so completely entirely inaccurate, but helpful and pretty nonetheless))","msgtype":"m.text","formatted_body":"* (video<\/a> of that rr gui thing because i think the timeline is cool (it's interpolation on top of interpolation so completely entirely inaccurate, but helpful and pretty nonetheless))"}}
                    {"origin_server_ts":1692972098244,"event_id":"$AReezFr4DYaoIc8-vTGxu4rWb8nPNSICAunLQ4P6wLk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, that's pretty neat","msgtype":"m.text"}}
                    {"origin_server_ts":1692972123504,"event_id":"$tIkFGPXmq8-4HWOkrYQOnFxeCSap3HTi3dpQ9Air4uQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I now fixed a bug that prevented the application from existing properly if a graphic window had been opened.","msgtype":"m.text"}}
                    {"origin_server_ts":1693044813974,"event_id":"$odgzB3eko14oJDOMI5CrX1hzF7IddDhDulNI2_FARPk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"This is slightly slower at 2.738:\n```\n{ io:println \"Starting\" ⋄ a←⍵ ⋄ time:measureTime { +/a } } comp 0+⍳1000000000\n```\nCompare to this at 2.331:\n```\n{ io:println \"Starting\" ⋄ a←⍵ ⋄ time:measureTime { +/a } } comp ⍳1000000000\n```","msgtype":"m.text","formatted_body":"

                    This is slightly slower at 2.738:<\/p>\n

                    { io:println \"Starting\" ⋄ a←⍵ ⋄ time:measureTime { +/a } } comp 0+⍳1000000000\n<\/code><\/pre>\n

                    Compare to this at 2.331:<\/p>\n

                    { io:println \"Starting\" ⋄ a←⍵ ⋄ time:measureTime { +/a } } comp ⍳1000000000\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1693044837326,"event_id":"$QLQ79Z0WSicjAuEuQH42vthKg1-YUfhxwmab6TL0B1s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"This is slightly slower at 2.738:\n\n```\n{ io:println \"Starting\" ⋄ a←⍵ ⋄ time:measureTime { +/a } } comp 0+⍳1000000000\n```\n\nCompared to this at 2.331:\n\n```\n{ io:println \"Starting\" ⋄ a←⍵ ⋄ time:measureTime { +/a } } comp ⍳1000000000\n```","msgtype":"m.text","formatted_body":"

                    This is slightly slower at 2.738:<\/p>\n

                    { io:println \"Starting\" ⋄ a←⍵ ⋄ time:measureTime { +/a } } comp 0+⍳1000000000\n<\/code><\/pre>\n

                    Compared to this at 2.331:<\/p>\n

                    { io:println \"Starting\" ⋄ a←⍵ ⋄ time:measureTime { +/a } } comp ⍳1000000000\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$odgzB3eko14oJDOMI5CrX1hzF7IddDhDulNI2_FARPk","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * This is slightly slower at 2.738:\n\n```\n{ io:println \"Starting\" ⋄ a←⍵ ⋄ time:measureTime { +/a } } comp 0+⍳1000000000\n```\n\nCompared to this at 2.331:\n\n```\n{ io:println \"Starting\" ⋄ a←⍵ ⋄ time:measureTime { +/a } } comp ⍳1000000000\n```","msgtype":"m.text","formatted_body":" * 

                    This is slightly slower at 2.738:<\/p>\n

                    { io:println \"Starting\" ⋄ a←⍵ ⋄ time:measureTime { +/a } } comp 0+⍳1000000000\n<\/code><\/pre>\n

                    Compared to this at 2.331:<\/p>\n

                    { io:println \"Starting\" ⋄ a←⍵ ⋄ time:measureTime { +/a } } comp ⍳1000000000\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1693044863235,"event_id":"$ni1UlxYgFuXWJIrZ2MWs7U70_aMxFGUIDBXZF3zM0-Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Makes sense, since the latter doesn't require any memory accesses.","msgtype":"m.text"}}
                    {"origin_server_ts":1693044909767,"event_id":"$KijmMn0EmaX2-HhmBE2ubikI9bVWhHTBZXYXNuIfv1o","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"right; reducing memory throughput needs is a significant perf benefit of lazy evaluation","msgtype":"m.text","formatted_body":"right; reducing memory throughput needs is a significant perf benefit of lazy evaluation"}}
                    {"origin_server_ts":1693044942786,"event_id":"$iQVLj5QUlNW7Y9BzjfDcMzhlbEbFcAsHcWXxDvX77Go","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(what type is that array?)","msgtype":"m.text","formatted_body":"(what type is that array?)"}}
                    {"origin_server_ts":1693044981765,"event_id":"$gaKcQ9ejTApRvWvcRl4PYyhCWEAnPpMGgnRLl6tHU2E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What kind of type? Internal Kotlin representation type, or Kap-level specialisation type?","msgtype":"m.text"}}
                    {"origin_server_ts":1693045007283,"event_id":"$OcGdcQTGSrFY_4hco-qY3C2VcFI7JjNIkmRCef0mUbw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the type that matters for memory usag","msgtype":"m.text","formatted_body":"the type that matters for memory usag"}}
                    {"origin_server_ts":1693045008082,"event_id":"$by2piGLGAdBIPqvnFTu3D0Pl3CusHZhX_ZMSCtcfHvQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"the type that matters for memory usage","msgtype":"m.text","formatted_body":"the type that matters for memory usage"},"m.relates_to":{"event_id":"$OcGdcQTGSrFY_4hco-qY3C2VcFI7JjNIkmRCef0mUbw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* the type that matters for memory usage","msgtype":"m.text","formatted_body":"* the type that matters for memory usage"}}
                    {"origin_server_ts":1693045033398,"event_id":"$OOQxyHX4l3tJyjUREfN2AC1mbm19jFK-uBV9v0p8FMQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"the type that matters for memory usage; so kotlin, I guess","msgtype":"m.text","formatted_body":"the type that matters for memory usage; so kotlin, I guess"},"m.relates_to":{"event_id":"$OcGdcQTGSrFY_4hco-qY3C2VcFI7JjNIkmRCef0mUbw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* the type that matters for memory usage; so kotlin, I guess","msgtype":"m.text","formatted_body":"* the type that matters for memory usage; so kotlin, I guess"}}
                    {"origin_server_ts":1693045089524,"event_id":"$3b16q3WraRLQjjFcl8Y3dyAJyxGJegZEofqc8qKUiTc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Internally, the first becomes an instance of `APLArrayLong`.","msgtype":"m.text","formatted_body":"Internally, the first becomes an instance of APLArrayLong<\/code>."}}
                    {"origin_server_ts":1693045113105,"event_id":"$B8utWyD3LlmScYLMxQ7P6LSXPUXKiZN_FXObnpKz_Vk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The second remains an instance of `IotaArrayLong`","msgtype":"m.text","formatted_body":"The second remains an instance of IotaArrayLong<\/code>"}}
                    {"origin_server_ts":1693045255093,"event_id":"$WmxrW79SaCPQ_R0EboIm4QnT08eVlMIyDGWP6YMekG0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It works, because an `IotaArrayLong` always has an `elementType` set to `LONG`, and when adding a `Long` to such a specialised array, the result is a `LongArraySum2Args` (sum refers to composition, not actual sum) which is then collapsed into an `APLArrayLong`. Now, if during collapse any of the computations overflows, the entire array is promoted to `APLArrayImpl` which is the basic array of boxed values.","msgtype":"m.text","formatted_body":"It works, because an IotaArrayLong<\/code> always has an elementType<\/code> set to LONG<\/code>, and when adding a Long<\/code> to such a specialised array, the result is a LongArraySum2Args<\/code> (sum refers to composition, not actual sum) which is then collapsed into an APLArrayLong<\/code>. Now, if during collapse any of the computations overflows, the entire array is promoted to APLArrayImpl<\/code> which is the basic array of boxed values."}}
                    {"origin_server_ts":1693045296429,"event_id":"$4Nt3xTmGrAIHCaAE1UtcPzSIPQzZZpowi174gqQvY3s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ok so 8-byte integer elements, so CBQN doesn't have an equivalent","msgtype":"m.text","formatted_body":"ok so 8-byte integer elements, so CBQN doesn't have an equivalent"}}
                    {"origin_server_ts":1693045309873,"event_id":"$8cDjrlXX21AkfF3WXLtm4ekzSS7bAXcSQKo4OmhgtSA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right.","msgtype":"m.text"}}
                    {"origin_server_ts":1693045314442,"event_id":"$-VBzSHuHz6jFO2_yMC7OjOYcYCeQWvYBwzrPD12un9A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"WHat does CBQN have?","msgtype":"m.text"}}
                    {"origin_server_ts":1693045316722,"event_id":"$p560HZtuPtAQGVaP14R1uwiK8lIEf4KE_Ndgm4dw9E8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"What does CBQN have?","msgtype":"m.text"},"m.relates_to":{"event_id":"$-VBzSHuHz6jFO2_yMC7OjOYcYCeQWvYBwzrPD12un9A","rel_type":"m.replace"},"body":" * What does CBQN have?","msgtype":"m.text"}}
                    {"origin_server_ts":1693045325643,"event_id":"$ygyuXmO94s-6vrIkRjEBFa7N6Kn-eUr4CQ61i2J78bw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"bit/i8/i16/i32/f64","msgtype":"m.text","formatted_body":"bit/i8/i16/i32/f64"}}
                    {"origin_server_ts":1693045330305,"event_id":"$kHp0v2HsBC7Q3aYJOw4DbbIuAO-xVI_b0DzZMdN_uyw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ah","msgtype":"m.text"}}
                    {"origin_server_ts":1693045380815,"event_id":"$kXyrf8JShZtU0o9vYpVRZiLxbfUOkgPZxGaCxhv9f9U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have considered creating support for a 32-bit int. Before I decided to support bignums, I wanted all ints to be 64-bit, to handle the large cases, but now that both bigints and rationals are supported, it may be better to let integers default to 32-bit.","msgtype":"m.text"}}
                    {"origin_server_ts":1693045411558,"event_id":"$UdwUonUpjgo0Ets9QOWDKBFyN1tsyMSn5aJg_6wE1D8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the BQN problem with 64-bit ints is that they're not a subset of 64-bit floats","msgtype":"m.text","formatted_body":"the BQN problem with 64-bit ints is that they're not a subset of 64-bit floats"}}
                    {"origin_server_ts":1693045426182,"event_id":"$Q4USnBhkbUvGerobyyTiPfHfiPFSGLAR3S3qhZdU3eU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Every single integer in kap is 64-bit (except characters, which aren't really integers, but stored interally as a 32-bit number)","msgtype":"m.text"}}
                    {"origin_server_ts":1693045463095,"event_id":"$plV4dnl5IEFGE1RLlo-A48UmmTTDgtry8xrhRaIddIg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$UdwUonUpjgo0Ets9QOWDKBFyN1tsyMSn5aJg_6wE1D8"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> the BQN problem with 64-bit ints is that they're not a subset of 64-bit floats\n\nRight. But with rationals, that becomes less of a problem.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    the BQN problem with 64-bit ints is that they're not a subset of 64-bit floats<\/blockquote><\/mx-reply>Right. But with rationals, that becomes less of a problem."}} {"origin_server_ts":1693045482659,"event_id":"$f3pZx5k7suYC95i2M3yXA_d7mrS81npKOJZ0gGvS6Es","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"or, well, more of a problem, but a less solvable one so it's \"fine\"","msgtype":"m.text","formatted_body":"or, well, more of a problem, but a less solvable one so it's \"fine\""}} {"origin_server_ts":1693045503518,"event_id":"$mifm-BmdYknMX2dHIbC1FKBWBdQPdYU0_mVL2P03QEs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, you could say that.","msgtype":"m.text"}} {"origin_server_ts":1693045543997,"event_id":"$UajjHLOhQJSqRCna4b05aDVQS85-4ARVbQtELQ5ZvcU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you try to diminish the difference between floats and ints and have things like transparent conversion between them, then it becomes important.","msgtype":"m.text"}} {"origin_server_ts":1693045573633,"event_id":"$TAwWpUNhk8YYJD5F1NCL7pj2dRur5sTAD82gjMZi8gU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm of the opinion that floats and ints/rationals are vastly different entities, and should be kept apart unless the programmer does explicit conversion.","msgtype":"m.text"}} {"origin_server_ts":1693045605850,"event_id":"$1TJbCSXxApUDGyXoE7AERPBuXtuXNWynEbLKM2-DEtY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(now, raking the square root, for example, is considered explicit conversion in Kap)","msgtype":"m.text"}} {"origin_server_ts":1693045613057,"event_id":"$ArliekYsLKM0m3W5VzF9-VCRplRuivcwCI-zqtUrZQs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"(now, taking the square root, for example, is considered explicit conversion in Kap)","msgtype":"m.text"},"m.relates_to":{"event_id":"$1TJbCSXxApUDGyXoE7AERPBuXtuXNWynEbLKM2-DEtY","rel_type":"m.replace"},"body":" * (now, taking the square root, for example, is considered explicit conversion in Kap)","msgtype":"m.text"}} {"origin_server_ts":1693045732735,"event_id":"$ukTqKfXHLm4CfOiAb23KQ29sgnu3k36wW8Wiv2zK5yY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Is BQN considering adding bigint/rationals?","msgtype":"m.text"}} {"origin_server_ts":1693045754141,"event_id":"$Yc-l0QalLMymjMkeM8Ey2QOcTlaXcoBzVVoXTgd4ujg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"not as a native type","msgtype":"m.text","formatted_body":"not as a native type"}} {"origin_server_ts":1693046117047,"event_id":"$CyHU2oo65vmB-cTJFofMRNCKeqKTQ4XZdyZ6qwt3xV4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$4Nt3xTmGrAIHCaAE1UtcPzSIPQzZZpowi174gqQvY3s"}},"format":"org.matrix.custom.html","body":"fwiw, some somewhat-representative CBQN test (at 10% the size, but that's still larger than cache):\n```\n )r a←2e8⥊40000 # pretend this is a 1e8-item i64 array (it's an i32 one)\n )t +´a\n74.68ms\n 74e6÷1e8 # ns/8 bytes\n0.74\n```\nso ~0.7s in the same scale as yours. There'd definitely be some difference in operation for an i64 sum (you have to process the carry, whereas CBQNs i32→f64 sum does it to i64 in blocks that won't overflow the f64 result) but it should still be possible SIMD, and at 10ns/vector there's definitely the space to do so without any perf impact","msgtype":"m.text","formatted_body":"
                    ↰ <\/a> dzaima<\/a> <\/mx-reply>fwiw, some somewhat-representative CBQN test (at 10% the size, but that's still larger than cache):
                       )r a←2e8⥊40000 # pretend this is a 1e8-item i64 array (it's an i32 one)\n   )t +´a\n74.68ms\n   74e6÷1e8 # ns/8 bytes\n0.74<\/code><\/pre>so ~0.7s in the same scale as yours. There'd definitely be some difference in operation for an i64 sum (you have to process the carry, whereas CBQNs i32→f64 sum does it to i64 in blocks that won't overflow the f64 result) but it should still be possible SIMD, and at 10ns/vector there's definitely the space to do so without any perf impact"}}
                    {"origin_server_ts":1693046550227,"event_id":"$brwRA0Ybuc914_2InwCSIz5BiEHu_EEKawwRU7iJKYQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If I can get within 5× of BQN speeds, I'm generally happy.","msgtype":"m.text"}}
                    {"origin_server_ts":1693046596164,"event_id":"$4d9IXFZaPwqGllPEr_D_0f8PJMJad4bOVROuaie1vJU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"There have been a few times python of all things have been faster than kap, and then I dig in to find the bug, because such a travesty should never happen.","msgtype":"m.text"}}
                    {"origin_server_ts":1693046933488,"event_id":"$Nm_ZCatDy832fNmgISuZqre88_SJRGbxLa_nUDgHtC0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it's still far from saturating the memory load throughput limit though (assuming you don't have 4x less memory throughput than me, which should be impossible) so I don't think that necessarily explains the Kap difference between your two tests","msgtype":"m.text","formatted_body":"it's still far from saturating the memory load throughput limit though (assuming you don't have 4x less memory throughput than me, which should be impossible) so I don't think that necessarily explains the Kap difference between your two tests"}}
                    {"origin_server_ts":1693046950233,"event_id":"$Ymg_kTp9qnMvzzwI7RvNY9lVbo0huSDpE99eFmUoMhI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Woah. I decided to go back and run a profiler on this simple reducion over iota. I can tell you where some of the unexpected hotspots are:","msgtype":"m.text"}}
                    {"origin_server_ts":1693046952984,"event_id":"$YwmuZuZEGSXMsYFxoEdYenjJsGtIZLFKnn8XD5xckXM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Woah. I decided to go back and run a profiler on this simple reducion over iota. I can tell you where some of the unexpected hotspots are.","msgtype":"m.text"},"m.relates_to":{"event_id":"$Ymg_kTp9qnMvzzwI7RvNY9lVbo0huSDpE99eFmUoMhI","rel_type":"m.replace"},"body":" * Woah. I decided to go back and run a profiler on this simple reducion over iota. I can tell you where some of the unexpected hotspots are.","msgtype":"m.text"}}
                    {"origin_server_ts":1693046999299,"event_id":"$nq3gfrkqBolUjzNhyJOEZyAG20L5n_wxpEF4rbyfILU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"19% is spent in `checkInterrupted()` which simply looks at a volatile boolean so inner loops can exit if the user breaks.","msgtype":"m.text","formatted_body":"19% is spent in checkInterrupted()<\/code> which simply looks at a volatile boolean so inner loops can exit if the user breaks."}}
                    {"origin_server_ts":1693047142961,"event_id":"$hm2-yYOH_XYRsNZGTrc7g9W-xPikVModo_1Bb6fy6gs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"\"19%\" here is ~0.5ns/iteration, some 1.5-2 cycles, maybe ~3-6 instructions","msgtype":"m.text","formatted_body":"\"19%\" here is ~0.5ns/iteration, some 1.5-2 cycles, maybe ~3-6 instructions"}}
                    {"origin_server_ts":1693047467718,"event_id":"$XJIPQ-Gd9aA4C4QToeQCKR2q1qY12xh63Tdq_LKJH-w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"image.png","msgtype":"m.image","url":"mxc://dhsdevelopments.com/wrJPmVfAHVcHFkcxAVIuRGdO","info":{"xyz.amorgan.blurhash":"LAR:KO9E~W%M%1RjRjV@?aE19Yf5","size":174124,"w":1139,"h":637,"mimetype":"image/png"}}}
                    {"origin_server_ts":1693047550312,"event_id":"$KZBPrnUZoYQ_IHfj-o5bs5X696XShm8mDIiFztwV3Kw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"This is after explicitly inlining the interrupt check, and declaring the field to be `@JvmField` so access isn't done through an accessor method. Doing so removed it from the call graph (obviously) but it didn't have more than a tiny effect on runtime.","msgtype":"m.text","formatted_body":"This is after explicitly inlining the interrupt check, and declaring the field to be @JvmField<\/code> so access isn't done through an accessor method. Doing so removed it from the call graph (obviously) but it didn't have more than a tiny effect on runtime."}}
                    {"origin_server_ts":1693047821659,"event_id":"$_odp5ZKZZi1MrOeNjGkwu6d-2lTEv6h7y2PKha36GCo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"What is also really weird is how the first few runs are much faster, and then it settles at a much slower runtime. I have only two explanations: One is that the JVM optimiser makes a mistake and reoptimises with worse performance, or that the GC kicks in. However, the latter seems unlikely given that I don't really do any allocations in the computation loop, and the numbers are way too consistent once it settles at 2.4 s/iteration:\n```\nFinished run: 0: 1.670946925s\nFinished run: 1: 1.488433858s\nFinished run: 2: 2.406978135s\nFinished run: 3: 2.405486095s\nFinished run: 4: 2.409510083s\nFinished run: 5: 2.419848850s\nFinished run: 6: 2.406249463s\nFinished run: 7: 2.409001094s\nFinished run: 8: 2.403342980s\nFinished run: 9: 2.396510966s\n```","msgtype":"m.text","formatted_body":"

                    What is also really weird is how the first few runs are much faster, and then it settles at a much slower runtime. I have only two explanations: One is that the JVM optimiser makes a mistake and reoptimises with worse performance, or that the GC kicks in. However, the latter seems unlikely given that I don't really do any allocations in the computation loop, and the numbers are way too consistent once it settles at 2.4 s/iteration:<\/p>\n

                    Finished run: 0: 1.670946925s\nFinished run: 1: 1.488433858s\nFinished run: 2: 2.406978135s\nFinished run: 3: 2.405486095s\nFinished run: 4: 2.409510083s\nFinished run: 5: 2.419848850s\nFinished run: 6: 2.406249463s\nFinished run: 7: 2.409001094s\nFinished run: 8: 2.403342980s\nFinished run: 9: 2.396510966s\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1693048821430,"event_id":"$L78y-Ay3I3W4nxbGiGjNaRhgGiEnsoUvyVsklmVqh2I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Here's a version that collapses into an actual array before computing:","msgtype":"m.text"}}
                    {"origin_server_ts":1693048823247,"event_id":"$vFWxl2qoHU83o3KYNVZhax_0hpcDUuzPQZx1XnFhrfQ","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1693048850207,"event_id":"$2LzZnXu0aZCB5oVuRUTQn9XmfP32aeFj63LDBynTX2Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$vFWxl2qoHU83o3KYNVZhax_0hpcDUuzPQZx1XnFhrfQ","type":"m.room.redaction","content":{"redacts":"$vFWxl2qoHU83o3KYNVZhax_0hpcDUuzPQZx1XnFhrfQ"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                    {"origin_server_ts":1693048850207,"event_id":"$2LzZnXu0aZCB5oVuRUTQn9XmfP32aeFj63LDBynTX2Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$vFWxl2qoHU83o3KYNVZhax_0hpcDUuzPQZx1XnFhrfQ","type":"m.room.redaction","content":{"redacts":"$vFWxl2qoHU83o3KYNVZhax_0hpcDUuzPQZx1XnFhrfQ"}}
                    {"origin_server_ts":1693048953952,"event_id":"$Q4fE7lftQc0rjVb-HkRfSBFkX97HprZifGSRrbPyNZs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"image.png","msgtype":"m.image","url":"mxc://dhsdevelopments.com/tuGjKbSSxeXDbsROoIqLzIxP","info":{"xyz.amorgan.blurhash":"L8SPU.00_M~WNGWVs.o0%#Rj9FIU","size":303431,"w":1446,"h":1038,"mimetype":"image/png"}}}
                    {"origin_server_ts":1693106140803,"event_id":"$nRaZo39O-WLqhtAd69NTSuuLq95oYwnYdyxxMubX720","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"No array language has generators","msgtype":"m.text"}}
                    {"origin_server_ts":1693106218354,"event_id":"$KsmHxJmvbWiPcrIDJrr6pqlrOlmefVj0z6k896YzClE","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"I think generator is in concept close to kap's lazy evaluation","msgtype":"m.text"}}
                    {"origin_server_ts":1693106226579,"event_id":"$RYDNY0KJ_NRrmKchKjLOtlgzZxRV0iqVKtKPmWhtSpk","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"what do you think?","msgtype":"m.text"}}
                    {"origin_server_ts":1693106250724,"event_id":"$GzrlHbXNhGV4ZzOEcV3JCkPRozYESQEqKFQgHv7O8mI","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"(my thought process: iota -> index generator -> generator)","msgtype":"m.text"}}
                    {"origin_server_ts":1693108376954,"event_id":"$CIef2-Enn8YW6zsfSErti6RvHtDcJe6fy0jkLUsepfE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It is very similar to it yes","msgtype":"m.text"}}
                    {"origin_server_ts":1693108719059,"event_id":"$NhZPh8b3yMiYtg-fd-Nfb7GU_m6b1Hhl7cZGyNVNG-s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Generally generators in other languages are infinite in extent. An iota array has a distinct dimebsion.","msgtype":"m.text"}}
                    {"origin_server_ts":1693108748618,"event_id":"$pUquLi8cdoCp87Ynpo9DfZTBX_1xazkXv6Tl63EzuKY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You can greate an actual functional style generator using a closure.","msgtype":"m.text"}}
                    {"origin_server_ts":1693119914887,"event_id":"$s0kjea0HytwpASZfontyGJAtKRIDK4pbs1GZ7CIju0M","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"kap doesn't have closure now right?","msgtype":"m.text"}}
                    {"origin_server_ts":1693132824186,"event_id":"$Zrqa6Gnc82r4FT5pXdc9OaYAMu6OvItXFxBqTb3xQYo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It does. ","msgtype":"m.text"}}
                    {"origin_server_ts":1693132899419,"event_id":"$hnoFQ-Wg9m9plC2MiVXhHaD5H7KQYdD_UQhV9YgvBvI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"vylsaz: whenever you capture an environment, any variables referenced in the lexical scope are captured in the closure. ","msgtype":"m.text","formatted_body":"vylsaz<\/a>: whenever you capture an environment, any variables referenced in the lexical scope are captured in the closure. "}}
                    {"origin_server_ts":1693133101337,"event_id":"$YKP_YFZtJ8DxcEHm8rpNNCb2flCYVlJbNJx8c45aA3s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The y combinator is part of the yests here. https://codeberg.org/loke/array/src/branch/master/array/src/commonTest/kotlin/array/CustomFunctionTest.kt#L86","msgtype":"m.text"}}
                    {"origin_server_ts":1693152772455,"event_id":"$cAUAFHO-YLgWkGLIYujj2F-k_95Os_XJ1pQqdDKMhi4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"The y combinator is part of the tests here. https://codeberg.org/loke/array/src/branch/master/array/src/commonTest/kotlin/array/CustomFunctionTest.kt#L86","msgtype":"m.text"},"m.relates_to":{"event_id":"$YKP_YFZtJ8DxcEHm8rpNNCb2flCYVlJbNJx8c45aA3s","rel_type":"m.replace"},"body":" * The y combinator is part of the tests here. https://codeberg.org/loke/array/src/branch/master/array/src/commonTest/kotlin/array/CustomFunctionTest.kt#L86","msgtype":"m.text"}}
                    {"origin_server_ts":1693152793548,"event_id":"$2SJwIXsPqDNGi1VBRtp4JcJVnDT7wGMce52V4ecLN9M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Here's an [example](https://kapdemo.dhsdevelopments.com/clientweb2/#makeCounter%20%E2%87%90%20%7B%20n%E2%86%90%E2%8D%B5%20%E2%8B%84%20%CE%BB%7B%20n%E2%86%90n%2B%E2%8D%B5%20%7D%20%7D%0Ac10%20%E2%86%90%20makeCounter%2010%0Ac1000%20%E2%86%90%20makeCounter%201000%0Aio%3Aprintln%20%E2%8D%9Ec10%201%0Aio%3Aprintln%20%E2%8D%9Ec10%205%0Aio%3Aprintln%20%E2%8D%9Ec1000%201%0Aio%3Aprintln%20%E2%8D%9Ec1000%2010%0Aio%3Aprintln%20%E2%8D%9Ec10%2010%0Aio%3Aprintln%20%E2%8D%9Ec10%2010) of how lambdas can close over a variable.","msgtype":"m.text","formatted_body":"Here's an example<\/a> of how lambdas can close over a variable."}}
                    {"origin_server_ts":1693152855391,"event_id":"$MU_ttEjjK04oxHZCZdAenhgyvKcIhF2t9NvIEX_0_ig","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Of course, this [variation](https://kapdemo.dhsdevelopments.com/clientweb2/#makeCounter%20%E2%87%90%20%7B%20n%E2%86%90%E2%8D%B5%20%E2%8B%84%20%CE%BB%7B%20n%E2%86%90n%2B%E2%8D%B5%20%7D%20%7D%0Ac10%20%E2%87%90%20%E2%8D%9E(makeCounter%2010)%0Ac1000%20%E2%87%90%20%E2%8D%9E(makeCounter%201000)%0Aio%3Aprintln%20c10%201%0Aio%3Aprintln%20c10%205%0Aio%3Aprintln%20c1000%201%0Aio%3Aprintln%20c1000%2010%0Aio%3Aprintln%20c10%2010%0Aio%3Aprintln%20c10%2010) also works.","msgtype":"m.text","formatted_body":"Of course, this variation<\/a> also works."}}
                    {"origin_server_ts":1693160809198,"event_id":"$EVQfLBAHf_7N25YWBq-zGhTzbuikgKp7c_gQlhADB3k","sender":"@vylsaz:matrix.org","user_id":"@vylsaz:matrix.org","type":"m.room.message","content":{"body":"Oh I see","msgtype":"m.text"}}
                    {"origin_server_ts":1693243718112,"event_id":"$clmc2Tp1fxLhE3YVOX0HwxRWANtncE4Sv9WUjpekiyo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That drama on the other channel.","msgtype":"m.text"}}
                    {"origin_server_ts":1693245739104,"event_id":"$m7LenKNK-Kz6BkbEaI0lInOF1gLYOlsOsuA0uZXcjSQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The only reason I'm working on my project is because if the occasional interest from the community. Because of that, it would be nice if there was no drama.","msgtype":"m.text"}}
                    {"origin_server_ts":1693247889177,"event_id":"$WPhGvAUi57xdf2hCl_c_0gEPoeV21J6Bz8IFDIJTYp8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it sure would be nice to have a switch that says \"drama\" and, when you switch it off, drama stops","msgtype":"m.text","formatted_body":"it sure would be nice to have a switch that says \"drama\" and, when you switch it off, drama stops"}}
                    {"origin_server_ts":1693457845014,"event_id":"$R-pSzi-7SpgOtmrnDo2mC1e5Qq9DWSAtp0sxrgYgEF0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I've spent some time working on the array editor. You can now open the spreadsheet-style array editor, edit cells without everything breaking, load and store to/from variables, delete or insert lines and columns and you can also load Excel documents directly from the editor.","msgtype":"m.text"}}
                    {"origin_server_ts":1693833230809,"event_id":"$vKSOSH7lRpoY4IpghScrtym6fVWJLgCQeDAeav_2LfU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I added some graphical examples to the tutorial. https://kapdemo.dhsdevelopments.com/quick-tutorial.html#_visualising_arrays","msgtype":"m.text"}}
                    {"origin_server_ts":1694263630804,"event_id":"$T8n-zSlIZtS4-clbfuAORbgZQrAfTqPsiXWjXCsUq44","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I wrote a little program that converts a binary array into sextant block characters. Is this the best way to do it, or is there a neat alternative soution?","msgtype":"m.text"}}
                    {"origin_server_ts":1694263642162,"event_id":"$U0VyU0hOTu9lWDvUOD15kYeUYVhNhUO3AStYmnuHBPk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\nblockMapping ← (@\\u2590,)⍢(0x2A↓) (@\\u258C,)⍢(0x15↓) @\\uA0 , (@\\u1FB00+⍳60),@\\u2588\n\ndraw ⇐ {\n\t(2=≢⍴⍵) or throw \"Argument must be a 2-dimensional array\"\n\tv ← ((⍴⍵) + 3 2 - 3 2 | ⍴⍵) ↑ ⍵\n\tblockMapping ⊇⍨ (2⊥⌽)¨ ((¯2+≢v) ⍴ 1 0 0) ⌿ 3,⌿  ((¯1+1⊇⍴v) ⍴ 1 0) / 2,/v\n}\n```","msgtype":"m.text","formatted_body":"
                    blockMapping ← (@\\u2590,)⍢(0x2A↓) (@\\u258C,)⍢(0x15↓) @\\uA0 , (@\\u1FB00+⍳60),@\\u2588\n\ndraw ⇐ {\n\t(2=≢⍴⍵) or throw \"Argument must be a 2-dimensional array\"\n\tv ← ((⍴⍵) + 3 2 - 3 2 | ⍴⍵) ↑ ⍵\n\tblockMapping ⊇⍨ (2⊥⌽)¨ ((¯2+≢v) ⍴ 1 0 0) ⌿ 3,⌿  ((¯1+1⊇⍴v) ⍴ 1 0) / 2,/v\n}\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1694263651760,"event_id":"$TtE3xP8YawxTMP0eiI5_GLftKj0oKZ7I9fVYtr0C2b8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Especially line 5 feels very ugly.","msgtype":"m.text"}}
                    {"origin_server_ts":1694263791521,"event_id":"$6aiMWlpUtWP-bYYOCOipOVWdcGdZ_oM9NRm01q_dd-I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"doesn't that padding result in an empty column/row when the lengths evenly divide?","msgtype":"m.text","formatted_body":"doesn't that padding result in an empty column/row when the lengths evenly divide?"}}
                    {"origin_server_ts":1694263810045,"event_id":"$apCui-a6GkqUJDa-yzWXizltQutlZpYKoGeFmU58Tz0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. Correct","msgtype":"m.text"}}
                    {"origin_server_ts":1694263824271,"event_id":"$wBI9f_UrAADnmfNNSreJBC3fjiD2vYdF2-P59W0Caq0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's intentional. because the characters are 3-by-2.","msgtype":"m.text"}}
                    {"origin_server_ts":1694263843510,"event_id":"$3VpsyWMXVidziElcVt4d2_aacexj78bt46Y3eAjOwUo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I mean an entire row/column of completely empty characters","msgtype":"m.text","formatted_body":"I mean an entire row/column of completely empty characters"}}
                    {"origin_server_ts":1694263858874,"event_id":"$39lTt9vieLvmBTNhu1KJ5viZnWM2osx8fcaT39fEV6c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n0⊣(io:println⍤1) draw (L⍣120) q\n  🬈🬀 🬭🬧🬉🬆               🬂🬅🬀      🬁                 \n  🬉🬣🬎 🬄              🬞🬩     🬓🬇🬏  🬕🬁▌               \n            🬦 🬉🬄     🬂🬏    🬉🬢🬃🬇  🬁🬅                \n🬓           🬁            🬹 🬘🬂🬨🬀🬏▌  🬏             🬡 \n🬄                🬏🬏🬏       🬁 🬛🬏   🬉🬘             🬯 \n           🬞   🬦🬔  🬁🬹    🬞🬢 🬦 🬁        🬦🬀▌    🬭🬏   \n```","msgtype":"m.text","formatted_body":"
                    0⊣(io:println⍤1) draw (L⍣120) q\n  🬈🬀 🬭🬧🬉🬆               🬂🬅🬀      🬁                 \n  🬉🬣🬎 🬄              🬞🬩     🬓🬇🬏  🬕🬁▌               \n            🬦 🬉🬄     🬂🬏    🬉🬢🬃🬇  🬁🬅                \n🬓           🬁            🬹 🬘🬂🬨🬀🬏▌  🬏             🬡 \n🬄                🬏🬏🬏       🬁 🬛🬏   🬉🬘             🬯 \n           🬞   🬦🬔  🬁🬹    🬞🬢 🬦 🬁        🬦🬀▌    🬭🬏   \n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1694263867993,"event_id":"$HweByTnibDa7X7MHvff7rvkbLSUfvfZW4eBK3LYuURs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I don't know if you have the right font to see that.","msgtype":"m.text"}}
                    {"origin_server_ts":1694263900922,"event_id":"$E4JBqrT5zDZXdvxi58awglwhukW3JJsqTdCGOBvmRcc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that does have a column of empty characters on the right","msgtype":"m.text","formatted_body":"that does have a column of empty characters on the right"}}
                    {"origin_server_ts":1694263902160,"event_id":"$t4cO48DBKjME476hahVgDlPstGWrgHMKZPrhrtY9KXQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#blockMapping%20%E2%86%90%20(%40%5Cu2590%2C)%E2%8D%A2(0x2A%E2%86%93)%20(%40%5Cu258C%2C)%E2%8D%A2(0x15%E2%86%93)%20%40%5CuA0%20%2C%20(%40%5Cu1FB00%2B%E2%8D%B360)%2C%40%5Cu2588","msgtype":"m.text"}}
                    {"origin_server_ts":1694263951260,"event_id":"$b8-PK59sFcwtgxXFM-CzSY6veC7gJAe62d7JvHSX0OA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I need to adjust the array to become divisible by 3 2, since otherwise the conversion fails.","msgtype":"m.text"}}
                    {"origin_server_ts":1694263978247,"event_id":"$YPFFfm0QN815q55EF_Q5HwKtBSFnQP7hPyRSNo_7YgM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"see e.g. `{((⍴⍵) + 3 2 - 3 2 | ⍴⍵)} 300 200⍴0` which gives `300 202` even though `300 200` is fine","msgtype":"m.text","formatted_body":"see e.g. {((⍴⍵) + 3 2 - 3 2 | ⍴⍵)} 300 200⍴0<\/code> which gives 300 202<\/code> even though 300 200<\/code> is fine"}}
                    {"origin_server_ts":1694263988378,"event_id":"$EURE2L3SkS3UyGjipynW3A4a8FaQqy85ukjyl1uDcJ0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh, right.","msgtype":"m.text"}}
                    {"origin_server_ts":1694264015835,"event_id":"$cNiUQnC_FlSlVzrHqRMtEjnwz8sEwXn02ktngIOZP28","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`3 2 - 3 2 | x` → `3 2 | -x` to fix that and also make it more compact","msgtype":"m.text","formatted_body":"3 2 - 3 2 | x<\/code> → 3 2 | -x<\/code> to fix that and also make it more compact"}}
                    {"origin_server_ts":1694264024789,"event_id":"$2VvpCvBvvo_l6z3YxvCmJScRW_oCbPLWJXbD1nZJ-dM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh, nice. Thanks.","msgtype":"m.text"}}
                    {"origin_server_ts":1694264114992,"event_id":"$YQlAEWwSjTlD0BRx2XUGzkDPWnz9-32gODpKVEGBWEw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"My method of gathering the bits for each 3-by-2 block could also be improved I think?","msgtype":"m.text"}}
                    {"origin_server_ts":1694264164381,"event_id":"$wL5wq9J5CTHwRWxGPZmiK6nuYGdcvwGtXsS8V4wIYrI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(`((⍴⍵) + 3 2 | -⍴⍵)` → `(⊢ + 3 2|-)⍴⍵` with forks, but probably ugly in Kap)","msgtype":"m.text","formatted_body":"(((⍴⍵) + 3 2 | -⍴⍵)<\/code> → (⊢ + 3 2|-)⍴⍵<\/code> with forks, but probably ugly in Kap)"}}
                    {"origin_server_ts":1694264260523,"event_id":"$AAeNBKy6OuQIBfhASS7yvMJYhIi1MMTeReOMWHSmlo0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"in BQN with Group there's [this](https://mlochbaum.github.io/BQN/try.html#code=eyjijIoz4oC/MsO3y5zihpXCqOKJovCdlakp4oqU8J2VqX0gMTDigL8xMOKliuKGlTEwMA==) for the grouping, which is neat","msgtype":"m.text","formatted_body":"in BQN with Group there's this<\/a> for the grouping, which is neat"}}
                    {"origin_server_ts":1694264309825,"event_id":"$lmc2BYilNhORX7VlUQ-EW6SuCdU6nlnEAXEQvbjgYX8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"In Kap, that becomes: `+∘(3 2|-) ⍴⍵`","msgtype":"m.text","formatted_body":"In Kap, that becomes: +∘(3 2|-) ⍴⍵<\/code>"}}
                    {"origin_server_ts":1694264313686,"event_id":"$WbVAIz0YLIDMqEZeva6o-cvp8SpkEJ_Z-_OY3ixB9yg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So not bad.","msgtype":"m.text"}}
                    {"origin_server_ts":1694264348619,"event_id":"$NAXjXvdA87216V0TVJT9BQ4cog-kgG32ppQgmg3izj0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Most of the uses of fork in APL is not needed in Kap. Either regular chains or th euse of left or right hooks are generally enough.","msgtype":"m.text"}}
                    {"origin_server_ts":1694264353410,"event_id":"$TSF1nNbtTQICqwLw3PFG2h5sxUYiL6Fv5CgCmYIjdK0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Most of the uses of fork in APL is not needed in Kap. Either regular chains or the use of left or right hooks are generally enough.","msgtype":"m.text"},"m.relates_to":{"event_id":"$NAXjXvdA87216V0TVJT9BQ4cog-kgG32ppQgmg3izj0","rel_type":"m.replace"},"body":" * Most of the uses of fork in APL is not needed in Kap. Either regular chains or the use of left or right hooks are generally enough.","msgtype":"m.text"}}
                    {"origin_server_ts":1694265865575,"event_id":"$QhJcJ8ZoGzfWtcz0MczZSn2uvYFIIwfuJHsNSNSPjug","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The group feature looks really nice","msgtype":"m.text"}}
                    {"origin_server_ts":1694265868763,"event_id":"$wTsZe_xitKH14TwlwZvvda-6oS-j50wK28iDX_476cM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I need that","msgtype":"m.text"}}
                    {"origin_server_ts":1694430136738,"event_id":"$89ILgvVZze1FgLG1b1Mpllncenp2tpWrHr7pN7cWcdU","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1694504137315,"event_id":"$mCcH8yYZAFcxdTny4QHrTzYiSeavwc4nmBOPMYqtPBs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$89ILgvVZze1FgLG1b1Mpllncenp2tpWrHr7pN7cWcdU","type":"m.room.redaction","content":{"redacts":"$89ILgvVZze1FgLG1b1Mpllncenp2tpWrHr7pN7cWcdU"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                    {"origin_server_ts":1694430137141,"event_id":"$KZgt1OCFbi8p-9ETFZOS-a9hg7kzTJ_FSwnTiVss3l8","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1694504141894,"event_id":"$4pK6hy85fWAlOySYMll8AOeVVxFgkKMl2tJGi1Tyt84","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$KZgt1OCFbi8p-9ETFZOS-a9hg7kzTJ_FSwnTiVss3l8","type":"m.room.redaction","content":{"redacts":"$KZgt1OCFbi8p-9ETFZOS-a9hg7kzTJ_FSwnTiVss3l8"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                    {"origin_server_ts":1694430137323,"event_id":"$TXVLqUaV6BsilcRqXXBjlW7YIbGnQtwJMtJedrjYWOA","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1694504146570,"event_id":"$8dkd_CIq0eAki7erSarP9P-AGMsLBd0oWrP44Ll4uhc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$TXVLqUaV6BsilcRqXXBjlW7YIbGnQtwJMtJedrjYWOA","type":"m.room.redaction","content":{"redacts":"$TXVLqUaV6BsilcRqXXBjlW7YIbGnQtwJMtJedrjYWOA"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                    {"origin_server_ts":1694431777043,"event_id":"$rgyBTVV_EpF8FkxziaVRQt_W0O0oEP9tXEKTYbMBc5s","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1694504150963,"event_id":"$9bNWWU9AgyEyECewiCI7gLg7QUl8AQz7gF7dBXXGhCY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$rgyBTVV_EpF8FkxziaVRQt_W0O0oEP9tXEKTYbMBc5s","type":"m.room.redaction","content":{"redacts":"$rgyBTVV_EpF8FkxziaVRQt_W0O0oEP9tXEKTYbMBc5s"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                    {"origin_server_ts":1694431777181,"event_id":"$MC1SBTKY6o0wNylnkBh4WG7CHRM9xMPJ3Fxo52Nfzrg","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1694504155309,"event_id":"$hGmlzTgJJiTfRDQcJVhhX8w3YtxzdNXt9rfw2XQuBnM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$MC1SBTKY6o0wNylnkBh4WG7CHRM9xMPJ3Fxo52Nfzrg","type":"m.room.redaction","content":{"redacts":"$MC1SBTKY6o0wNylnkBh4WG7CHRM9xMPJ3Fxo52Nfzrg"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                    {"origin_server_ts":1694504137315,"event_id":"$mCcH8yYZAFcxdTny4QHrTzYiSeavwc4nmBOPMYqtPBs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$89ILgvVZze1FgLG1b1Mpllncenp2tpWrHr7pN7cWcdU","type":"m.room.redaction","content":{"redacts":"$89ILgvVZze1FgLG1b1Mpllncenp2tpWrHr7pN7cWcdU"}}
                    {"origin_server_ts":1694504141894,"event_id":"$4pK6hy85fWAlOySYMll8AOeVVxFgkKMl2tJGi1Tyt84","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$KZgt1OCFbi8p-9ETFZOS-a9hg7kzTJ_FSwnTiVss3l8","type":"m.room.redaction","content":{"redacts":"$KZgt1OCFbi8p-9ETFZOS-a9hg7kzTJ_FSwnTiVss3l8"}}
                    {"origin_server_ts":1694504146570,"event_id":"$8dkd_CIq0eAki7erSarP9P-AGMsLBd0oWrP44Ll4uhc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$TXVLqUaV6BsilcRqXXBjlW7YIbGnQtwJMtJedrjYWOA","type":"m.room.redaction","content":{"redacts":"$TXVLqUaV6BsilcRqXXBjlW7YIbGnQtwJMtJedrjYWOA"}}
                    {"origin_server_ts":1694504150963,"event_id":"$9bNWWU9AgyEyECewiCI7gLg7QUl8AQz7gF7dBXXGhCY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$rgyBTVV_EpF8FkxziaVRQt_W0O0oEP9tXEKTYbMBc5s","type":"m.room.redaction","content":{"redacts":"$rgyBTVV_EpF8FkxziaVRQt_W0O0oEP9tXEKTYbMBc5s"}}
                    {"origin_server_ts":1694504155309,"event_id":"$hGmlzTgJJiTfRDQcJVhhX8w3YtxzdNXt9rfw2XQuBnM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$MC1SBTKY6o0wNylnkBh4WG7CHRM9xMPJ3Fxo52Nfzrg","type":"m.room.redaction","content":{"redacts":"$MC1SBTKY6o0wNylnkBh4WG7CHRM9xMPJ3Fxo52Nfzrg"}}
                    {"origin_server_ts":1694504263339,"event_id":"$R71NpobFRlzIr3UGTiUaLLWEGonoijuxhU7xCoQO0y4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I changed the way object conversion to text works. Now it doesn't try to do any formatting at all, and printing `1 2 3` will print `123`. The only magic thing is that it will add a newline after the end of each row:\n```\n    io:println 2 3 ⍴ 9 1000 @a \"foo\"\n91000a\nfoo91000\n```","msgtype":"m.text","formatted_body":"

                    I changed the way object conversion to text works. Now it doesn't try to do any formatting at all, and printing 1 2 3<\/code> will print 123<\/code>. The only magic thing is that it will add a newline after the end of each row:<\/p>\n

                        io:println 2 3 ⍴ 9 1000 @a \"foo\"\n91000a\nfoo91000\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1694504308657,"event_id":"$XcYQgd5YpViUsfA-CRpM7_oQJjF9smdo6zrEGfxyOc4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The good thing about this is that you can do stuff like: `io:println \"Foo:\" 1 \",\" 2`","msgtype":"m.text","formatted_body":"The good thing about this is that you can do stuff like: io:println \"Foo:\" 1 \",\" 2<\/code>"}}
                    {"origin_server_ts":1694504353756,"event_id":"$B_wwVAh8AJp5FVfT8WGIUVCXH4gg7HV7SmX95cIecr0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Without having to do messy string concatenations and calls to `⍕`.","msgtype":"m.text","formatted_body":"Without having to do messy string concatenations and calls to ⍕<\/code>."}}
                    {"origin_server_ts":1694504396279,"event_id":"$tyJOKjJpgEN1xpjFLi808ggIqM4ASL4i1NVmFeqdHzk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"If one really wants to do array layout, one can always call `o3:format`.","msgtype":"m.text","formatted_body":"If one really wants to do array layout, one can always call o3:format<\/code>."}}
                    {"origin_server_ts":1694505079501,"event_id":"$g_LM_k3HeLZZAK8AiQp5xQi3HaTcqc_N39GXD6knlrs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I do need to figure out a decent IO API though. I'm not a huge fan of the `⎕TIE` stuff in APL.","msgtype":"m.text","formatted_body":"I do need to figure out a decent IO API though. I'm not a huge fan of the ⎕TIE<\/code> stuff in APL."}}
                    {"origin_server_ts":1694711910751,"event_id":"$30pvq4NgpewJefBcvOclmWwMlYEhoGweTgJJUpQUhuA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I've now implemented an interesting optimisation: When calling `.collapse()` or calling a function, there is contextual knowledge whether or not the return value will be used or just thrown away. This allows some functions to significantly optimise its behaviour by taking this knowledge into account.","msgtype":"m.text","formatted_body":"I've now implemented an interesting optimisation: When calling .collapse()<\/code> or calling a function, there is contextual knowledge whether or not the return value will be used or just thrown away. This allows some functions to significantly optimise its behaviour by taking this knowledge into account."}}
                    {"origin_server_ts":1694711956713,"event_id":"$jhcb7hZZYULZRgaGXw9t7F9tZFHhvsTijKRwta65GMQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It did complicate the code, but overall not too bad. Although I'm going to feel sorry for anyone wanting to work on the interpreter codebase. If that were to happen, I'd have to write some documentation.","msgtype":"m.text"}}
                    {"origin_server_ts":1694711992717,"event_id":"$1WbXeTItM_uRCHa-PHLmmVEa9mjss82cwpWqhXa0X-U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://codeberg.org/loke/array/commit/e6a1dc3f2b673a0daae697ed10924f889adfd37f","msgtype":"m.text"}}
                    {"origin_server_ts":1694712593245,"event_id":"$G3GnbTGefnA20NbxAVdh0Lzfxpb-Nh2bi630LdU8wj0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it is indeed a pretty useful optimization, but it does also indeed complicate things. Would be pretty useful in BQN sometimes (especially with something like `{a∾↩ 𝕩}¨ ↕10000` which could in-place-join, but actually can't because the `¨` wants to preserve all the intermediate results even if unused; but having this optimization could also be quite brittle, as adding something that doesn't preserve discardability could result in significant slowdown of unrelated code)","msgtype":"m.text","formatted_body":"it is indeed a pretty useful optimization, but it does also indeed complicate things. Would be pretty useful in BQN sometimes (especially with something like {a∾↩ 𝕩}¨ ↕10000<\/code> which could in-place-join, but actually can't because the ¨<\/code> wants to preserve all the intermediate results even if unused; but having this optimization could also be quite brittle, as adding something that doesn't preserve discardability could result in significant slowdown of unrelated code)"}}
                    {"origin_server_ts":1694712916473,"event_id":"$u9pjfLujsZ4VOh5jrOtgURiXdh1KUvNT5ShYOxBzHvs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"do you preserve discardability through tacit code? e.g. `F` in `{F∘G ⍵ ⋄ 2}`","msgtype":"m.text","formatted_body":"do you preserve discardability through tacit code? e.g. F<\/code> in {F∘G ⍵ ⋄ 2}<\/code>"}}
                    {"origin_server_ts":1694713013470,"event_id":"$CPkRTtzGknUJyh8X2tWIBAO2ohywmCdH11erz4dBApg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$G3GnbTGefnA20NbxAVdh0Lzfxpb-Nh2bi630LdU8wj0"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> it is indeed a pretty useful optimization, but it does also indeed complicate things. Would be pretty useful in BQN sometimes (especially with something like `{a∾↩ 𝕩}¨ ↕10000` which could in-place-join, but actually can't because the `¨` wants to preserve all the intermediate results even if unused; but having this optimization could also be quite brittle, as adding something that doesn't preserve discardability could result in significant slowdown of unrelated code)\n\nYes, that is true.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    it is indeed a pretty useful optimization, but it does also indeed complicate things. Would be pretty useful in BQN sometimes (especially with something like {a∾↩ 𝕩}¨ ↕10000<\/code> which could in-place-join, but actually can't because the ¨<\/code> wants to preserve all the intermediate results even if unused; but having this optimization could also be quite brittle, as adding something that doesn't preserve discardability could result in significant slowdown of unrelated code)<\/blockquote><\/mx-reply>Yes, that is true."}} {"origin_server_ts":1694713044891,"event_id":"$Oua_mN5DzR6190wJ73liHj040meAQem6LLBjhdmUSl4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's certainly something I have thought about, but dismissed due to the vast improvement in some cases.","msgtype":"m.text"}} {"origin_server_ts":1694713123642,"event_id":"$RrExg9SmZmfADiIA17YfhJD96Amyxj97SjlGuJz17jI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(though, I guess in a lazily-evaluated language you're already quite far into potential-slowdown-from-unrelated-change, so it's not actually much, if any, worse)","msgtype":"m.text","formatted_body":"(though, I guess in a lazily-evaluated language you're already quite far into potential-slowdown-from-unrelated-change, so it's not actually much, if any, worse)"}} {"origin_server_ts":1694713197619,"event_id":"$2f6J-hi2567tbqvFvNPjW3cwYdefJX0CQkLRuC8ZEf4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The most important uses of this are functions that act on its argument with some side-effect, while still returning the original argument (such as `io:print` or `gui:draw`. Until now, they always had to collapse before working on them. Now they can skip the collapse if the return value isn't needed.","msgtype":"m.text","formatted_body":"The most important uses of this are functions that act on its argument with some side-effect, while still returning the original argument (such as io:print<\/code> or gui:draw<\/code>. Until now, they always had to collapse before working on them. Now they can skip the collapse if the return value isn't needed."}} {"origin_server_ts":1694713237428,"event_id":"$3aI_fMPI5bNU9_XoDn0m5h4_zxT88tQ0G4NTGUaSyWA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(unrelatedly, the repo readme could include a link to the reference)","msgtype":"m.text","formatted_body":"(unrelatedly, the repo readme could include a link to the reference)"}} {"origin_server_ts":1694713240635,"event_id":"$GvGshkP-zacDjlzVP1YJuxSCSIka-a0G_RDU5bh1z2E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So the main thing that I save is memory. No need to allocate large arrays that will be immediately thrown away.","msgtype":"m.text"}} {"origin_server_ts":1694713254518,"event_id":"$GWJzqzdWPt_1yET77yOPmJ2lmJUn5XLNQ_eMVCwGmoM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Which reference?","msgtype":"m.text"}} {"origin_server_ts":1694713260595,"event_id":"$mteqPM4w4tpq0MtgjvCziWtQJaGYEi8CwaBJu6a7Jn8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the new one","msgtype":"m.text","formatted_body":"the new one"}} {"origin_server_ts":1694713273687,"event_id":"$tfr9jPU_aWn1zppUANHqfNSGdtusbSKpPSIQjIQyzrw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's called \"Kap reference\" and is reference.html","msgtype":"m.text","formatted_body":"that's called \"Kap reference\" and is reference.html"}} {"origin_server_ts":1694713282570,"event_id":"$_p2-d2d-1ETyMDZ4yXJlQRV0xibKG8fRTmbXYza7e-I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh right. Didn't I add that?","msgtype":"m.text"}} {"origin_server_ts":1694713292704,"event_id":"$Mb6kh2HQjTby4wCdnbwbpmu5TDsVOxoQq_M21EyeK5c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No I didn't. I only added it to the website.","msgtype":"m.text"}} {"origin_server_ts":1694713295531,"event_id":"$yYapUeCbGlGVuF7i7MaflNp10GxKaNqHxS4buztnVZg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll do it now.","msgtype":"m.text"}} {"origin_server_ts":1694713379772,"event_id":"$8LbJY9nJd__vzaNIyLrH8BtVAAyILsUeUnaooOyp090","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Done","msgtype":"m.text"}} {"origin_server_ts":1694713527723,"event_id":"$GlyfTA-XoDPpC1dRHOG9Zkxh7Wzg2W4kk-IQkiu8m8A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks for the imput.","msgtype":"m.text"}} {"origin_server_ts":1694713655081,"event_id":"$YCxdFCf0K0pLAu2YkEpTNrMqOXVF7r4hCGnHFDaeq4s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"If I remove `.` from being inner product, what should I use instead?","msgtype":"m.text","formatted_body":"If I remove .<\/code> from being inner product, what should I use instead?"}} {"origin_server_ts":1694713703065,"event_id":"$40GtUglo8QRoKBjw31SvkZ77ASISdzVspkVIQjSWrMs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"There is the symbol from the BQN character set: `\u2022`.","msgtype":"m.text","formatted_body":"There is the symbol from the BQN character set: \u2022<\/code>."}} {"state_key":"@coltim:matrix.org","origin_server_ts":1694802199210,"event_id":"$9ke3a4lqY8sobw9gU4KmcgWQWO4qgA8I-4SkNeQDREg","sender":"@coltim:matrix.org","user_id":"@coltim:matrix.org","type":"m.room.member","content":{"displayname":"coltim","membership":"join"}} {"origin_server_ts":1694884106863,"event_id":"$8Y85YnoHYIB6AwdzCgtiNdk3OcMyy-7raKbuiAqHrlo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Done, `\u2022` is not introduced as an alias for the `.` operator. The old one remains until I actually implement the new feature that needs it.","msgtype":"m.text","formatted_body":"Done, \u2022<\/code> is not introduced as an alias for the .<\/code> operator. The old one remains until I actually implement the new feature that needs it."}} {"origin_server_ts":1694884208766,"event_id":"$vWVe-BYDtuguNyfGtyeZLTUyZVQ6uhcf0VAyW9FXoUY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Done, `\u2022` is now introduced as an alias for the `.` operator. The old one remains until I actually implement the new feature that needs it.","msgtype":"m.text","formatted_body":"Done, \u2022<\/code> is now introduced as an alias for the .<\/code> operator. The old one remains until I actually implement the new feature that needs it."},"m.relates_to":{"event_id":"$8Y85YnoHYIB6AwdzCgtiNdk3OcMyy-7raKbuiAqHrlo","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Done, `\u2022` is now introduced as an alias for the `.` operator. The old one remains until I actually implement the new feature that needs it.","msgtype":"m.text","formatted_body":" * Done, \u2022<\/code> is now introduced as an alias for the .<\/code> operator. The old one remains until I actually implement the new feature that needs it."}} {"origin_server_ts":1695396386135,"event_id":"$BeGHVV7itKaTQGV0L61iigHoo_3l2SUcs-_JS9N8nJ4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Interesting. Kap is competitive with Dyalog even for fully numeric operations where Dyalog should be much, much faster. It's only a few times faster.","msgtype":"m.text"}} {"origin_server_ts":1695396413433,"event_id":"$H29s0i3Itk9b_yeVkzrZGuSTIFPN-OJtPG4bkWA0fQY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"My current test case. In Kap: `⍸˝ ⍋⍛⊇ +/1+?100000 1000 ⍴ 6`. This takes 1.9 seconds.","msgtype":"m.text","formatted_body":"My current test case. In Kap: ⍸˝ ⍋⍛⊇ +/1+?100000 1000 ⍴ 6<\/code>. This takes 1.9 seconds."}} {"origin_server_ts":1695396434622,"event_id":"$5yHkeLgHPvJVhJl0dzheWnZM6RdT8fi_bNTlJ8wGaEM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The Dyalog version: `(⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+?100000 1000 ⍴ 6`. This takes 0.827 seconds.","msgtype":"m.text","formatted_body":"The Dyalog version: (⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+?100000 1000 ⍴ 6<\/code>. This takes 0.827 seconds."}} {"origin_server_ts":1695396496371,"event_id":"$AofNbMAmr1alsV-KExJgl7vDL8I2cm5qdLbSQxUYQ1c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Bring in some function calls and Kap runs circles around Dyalog.","msgtype":"m.text"}} {"origin_server_ts":1695396531892,"event_id":"$_v4Nf79xGxLzozUU7nX3NTdJbWQDqUeSbMrdODB61wY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(but I shouldn't blame Dyalog for that, they are limited in needing to reparse on every call)","msgtype":"m.text"}} {"origin_server_ts":1695396657291,"event_id":"$FSuzXtIRT7kW_pF7MVzrKmv30LT0JfsqruNVGqAFFCM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's almost entirely monadic `?` in the Dyalog case","msgtype":"m.text","formatted_body":"that's almost entirely monadic ?<\/code> in the Dyalog case"}} {"origin_server_ts":1695396706419,"event_id":"$kDOgaEy9SNSSppREhol5kaRwB3kXWd-z-tH3zSBOeM4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In kap also, 1.1 seconds out of 1.9.","msgtype":"m.text"}} {"origin_server_ts":1695396720904,"event_id":"$xXIDgp5etYSNJ0vXLLLyqlvUBO715YuGAUVeMLq7jPs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"In kap also, 1.3 seconds out of 1.9.","msgtype":"m.text"},"m.relates_to":{"event_id":"$kDOgaEy9SNSSppREhol5kaRwB3kXWd-z-tH3zSBOeM4","rel_type":"m.replace"},"body":" * In kap also, 1.3 seconds out of 1.9.","msgtype":"m.text"}} {"origin_server_ts":1695396781569,"event_id":"$-PfyqrEzLyuzErZ-hUG1ROgO1ZpMOepXtebwtYk9Zvg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Do you have some other simple expression I can compare with?","msgtype":"m.text"}} {"origin_server_ts":1695396942419,"event_id":"$lqxIKR3SGrgGa65h8RQb4vF2Q2ddGxXd8ezEIv4Pzgg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n a←?100000 1000 ⍴ 6\n ⎕IO←0 ⋄ a←?100000 1000 ⍴ 6\n ]runtime -c \"(⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+a⊣100000 1000 ⍴ 6\" \"(⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+ ?100000 1000 ⍴ 6\"\n\n (⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+a⊣100000 1000 ⍴ 6 → 3.4E¯2 | 0% ⎕⎕\n* (⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+ ?100000 1000 ⍴ 6 → 8.7E¯1 | +2465% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕\n```","msgtype":"m.text","formatted_body":"
                          a←?100000 1000 ⍴ 6\n      ⎕IO←0 ⋄ a←?100000 1000 ⍴ 6\n      ]runtime -c "(⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+a⊣100000 1000 ⍴ 6" "(⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+ ?100000 1000 ⍴ 6"\n\n  (⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+a⊣100000 1000 ⍴ 6 → 3.4E¯2 |     0% ⎕⎕\n* (⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+ ?100000 1000 ⍴ 6 → 8.7E¯1 | +2465% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕<\/code><\/pre>"}}
                    {"origin_server_ts":1695397083373,"event_id":"$6yhG6hePKAUKEKqj5Z8MRHOcwqrzh7_U_CP2HSpI7z8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"```\n      ⎕IO←0 ⋄ a←?100000 1000 ⍴ 6\n      ]runtime -c \"(⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+a⊣100000 1000 ⍴ 6\" \"(⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+ ?100000 1000 ⍴ 6\"\n\n  (⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+a⊣100000 1000 ⍴ 6 → 3.4E¯2 |     0% ⎕⎕\n* (⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+ ?100000 1000 ⍴ 6 → 8.7E¯1 | +2465% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕\n```","msgtype":"m.text","formatted_body":"
                          ⎕IO←0 ⋄ a←?100000 1000 ⍴ 6\n      ]runtime -c "(⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+a⊣100000 1000 ⍴ 6" "(⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+ ?100000 1000 ⍴ 6"\n\n  (⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+a⊣100000 1000 ⍴ 6 → 3.4E¯2 |     0% ⎕⎕\n* (⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+ ?100000 1000 ⍴ 6 → 8.7E¯1 | +2465% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕<\/code><\/pre>"},"m.relates_to":{"event_id":"$lqxIKR3SGrgGa65h8RQb4vF2Q2ddGxXd8ezEIv4Pzgg","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* ```\n      ⎕IO←0 ⋄ a←?100000 1000 ⍴ 6\n      ]runtime -c \"(⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+a⊣100000 1000 ⍴ 6\" \"(⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+ ?100000 1000 ⍴ 6\"\n\n  (⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+a⊣100000 1000 ⍴ 6 → 3.4E¯2 |     0% ⎕⎕\n* (⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+ ?100000 1000 ⍴ 6 → 8.7E¯1 | +2465% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕\n```","msgtype":"m.text","formatted_body":"* 
                          ⎕IO←0 ⋄ a←?100000 1000 ⍴ 6\n      ]runtime -c "(⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+a⊣100000 1000 ⍴ 6" "(⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+ ?100000 1000 ⍴ 6"\n\n  (⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+a⊣100000 1000 ⍴ 6 → 3.4E¯2 |     0% ⎕⎕\n* (⍸⍣¯1) ((⊂⍋)⌷⊢) +/1+ ?100000 1000 ⍴ 6 → 8.7E¯1 | +2465% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕<\/code><\/pre>"}}
                    {"origin_server_ts":1695397139965,"event_id":"$cYPnvjUn0zAI9ztMPN1q0hNRer9QYErmqBtNf962oVk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, you're right. Now there is a much bigger difference.","msgtype":"m.text"}}
                    {"origin_server_ts":1695397178658,"event_id":"$yAvtxvQi-jxymzxcv2C1-BAVqjRUmXwZzrIgcYN6ZRU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Dyalog is now 12 times faster. That's actually more in line with what I've seen for these kinds of calculations.","msgtype":"m.text"}}
                    {"origin_server_ts":1695397259251,"event_id":"$jP5O8iCXtWuUMyQ3ucAC2-nzLiZwP5ZdmVAzx9mzKoA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think the problem is in the call to `⍋`. It doesn't have an optimised path for specialised arrays, so it boxes and unboxes every value.","msgtype":"m.text","formatted_body":"I think the problem is in the call to ⍋<\/code>. It doesn't have an optimised path for specialised arrays, so it boxes and unboxes every value."}}
                    {"origin_server_ts":1695397267564,"event_id":"$vZahcAXZVAYKYxFRRLZKW18lpVpZO9EZm0egyOXvIp8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I think the problem is in the call to `⍋`. It doesn't have an optimised path for specialised arrays, so it boxes and unboxes every value every times it's read.","msgtype":"m.text","formatted_body":"I think the problem is in the call to ⍋<\/code>. It doesn't have an optimised path for specialised arrays, so it boxes and unboxes every value every times it's read."},"m.relates_to":{"event_id":"$jP5O8iCXtWuUMyQ3ucAC2-nzLiZwP5ZdmVAzx9mzKoA","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * I think the problem is in the call to `⍋`. It doesn't have an optimised path for specialised arrays, so it boxes and unboxes every value every times it's read.","msgtype":"m.text","formatted_body":" * I think the problem is in the call to ⍋<\/code>. It doesn't have an optimised path for specialised arrays, so it boxes and unboxes every value every times it's read."}}
                    {"origin_server_ts":1695397327294,"event_id":"$_8B0wLczyBzhdtiKVC9LGPvNXFvY0zqRBlPnamzYLiE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the sorting and Indices Inverse should be completely insignificant as they only work on 0.001% the data that `+/` or `?` does","msgtype":"m.text","formatted_body":"the sorting and Indices Inverse should be completely insignificant as they only work on 0.001% the data that +/<\/code> or ?<\/code> does"}}
                    {"origin_server_ts":1695397353902,"event_id":"$aJY5rIn6CyO3Od7BjW3o0vKmyVgN0YJGco4ilv3yfJc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"the sorting and Indices Inverse should be completely insignificant as they only work on 0.1% the data that `+/` or `?` does","msgtype":"m.text","formatted_body":"the sorting and Indices Inverse should be completely insignificant as they only work on 0.1% the data that +/<\/code> or ?<\/code> does"},"m.relates_to":{"event_id":"$_8B0wLczyBzhdtiKVC9LGPvNXFvY0zqRBlPnamzYLiE","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* the sorting and Indices Inverse should be completely insignificant as they only work on 0.1% the data that `+/` or `?` does","msgtype":"m.text","formatted_body":"* the sorting and Indices Inverse should be completely insignificant as they only work on 0.1% the data that +/<\/code> or ?<\/code> does"}}
                    {"origin_server_ts":1695397410984,"event_id":"$yJIV8mKxNvsBp9-ToA0XQe2Lp6vVlKaUqk_OAjs4st4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"the sorting and Indices Inverse should be very insignificant as they only work on 0.1% the data that `+/` or `?` does","msgtype":"m.text","formatted_body":"the sorting and Indices Inverse should be very insignificant as they only work on 0.1% the data that +/<\/code> or ?<\/code> does"},"m.relates_to":{"event_id":"$_8B0wLczyBzhdtiKVC9LGPvNXFvY0zqRBlPnamzYLiE","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* the sorting and Indices Inverse should be very insignificant as they only work on 0.1% the data that `+/` or `?` does","msgtype":"m.text","formatted_body":"* the sorting and Indices Inverse should be very insignificant as they only work on 0.1% the data that +/<\/code> or ?<\/code> does"}}
                    {"origin_server_ts":1695397534683,"event_id":"$wESiyeTfcZdXGr2d8ZRb9n4avDGhFvkTc7spjOQZf5o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I did some more measuring. Adding `⍋` in front of `+/1+a` takes it from 0.371 to 0.396. Turing it into `⍋⍛⊇` takes it all the way to 0.766. It should be noted that `⊇` is also not optimised for specialised arrays so there is a lot of boxing going on.","msgtype":"m.text","formatted_body":"I did some more measuring. Adding ⍋<\/code> in front of +/1+a<\/code> takes it from 0.371 to 0.396. Turing it into ⍋⍛⊇<\/code> takes it all the way to 0.766. It should be noted that ⊇<\/code> is also not optimised for specialised arrays so there is a lot of boxing going on."}}
                    {"origin_server_ts":1695397559416,"event_id":"$BLj2lq3i3tpLOkrZxORS3FXG0BH4mv8qJvg3QtNhn6k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It unboxes both the left and right args.","msgtype":"m.text"}}
                    {"origin_server_ts":1695397619984,"event_id":"$twdAuxU6iP3-_mC2yJFOn6KzXkuKz72uds-_VSsfrNk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I don't really want to write the optimised paths for this right now though, since adds a bunch of things that can go wrong. I'd rather do that when I really need it.","msgtype":"m.text"}}
                    {"origin_server_ts":1695397662073,"event_id":"$bjiUxmCDaB_SJFHxUcxadTNJeYyFmbbRgCQEuJvXxbQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`⍋⍛⊇` there should be called on a 100000-item vector, so if that takes 370ms, that's either `⍋` or `⊇` taking 3700 nanoseconds per element, which is.. a lot","msgtype":"m.text","formatted_body":"⍋⍛⊇<\/code> there should be called on a 100000-item vector, so if that takes 370ms, that's either ⍋<\/code> or ⊇<\/code> taking 3700 nanoseconds per element, which is.. a lot"}}
                    {"origin_server_ts":1695397679762,"event_id":"$eRg3neJl7NYsZ_D8FEu6MEo2kSaLEBXtUu_WLFC6tJE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"`⍋⍛⊇` there should be called on a 100000-item vector, so if that takes 370ms, that's `⍋` and/or `⊇` taking 3700 nanoseconds per element, which is.. a lot","msgtype":"m.text","formatted_body":"⍋⍛⊇<\/code> there should be called on a 100000-item vector, so if that takes 370ms, that's ⍋<\/code> and/or ⊇<\/code> taking 3700 nanoseconds per element, which is.. a lot"},"m.relates_to":{"event_id":"$bjiUxmCDaB_SJFHxUcxadTNJeYyFmbbRgCQEuJvXxbQ","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* `⍋⍛⊇` there should be called on a 100000-item vector, so if that takes 370ms, that's `⍋` and/or `⊇` taking 3700 nanoseconds per element, which is.. a lot","msgtype":"m.text","formatted_body":"* ⍋⍛⊇<\/code> there should be called on a 100000-item vector, so if that takes 370ms, that's ⍋<\/code> and/or ⊇<\/code> taking 3700 nanoseconds per element, which is.. a lot"}}
                    {"origin_server_ts":1695397687156,"event_id":"$_jC5YAQ9zOvnbXoivS7F1HpWytdIqEz2qtjc7b9pe2I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"`⍋⍛⊇` there should be called on a 100000-item vector, so if that takes 370ms, that's `⊇` taking 3700 nanoseconds per element, which is.. a lot","msgtype":"m.text","formatted_body":"⍋⍛⊇<\/code> there should be called on a 100000-item vector, so if that takes 370ms, that's ⊇<\/code> taking 3700 nanoseconds per element, which is.. a lot"},"m.relates_to":{"event_id":"$bjiUxmCDaB_SJFHxUcxadTNJeYyFmbbRgCQEuJvXxbQ","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* `⍋⍛⊇` there should be called on a 100000-item vector, so if that takes 370ms, that's `⊇` taking 3700 nanoseconds per element, which is.. a lot","msgtype":"m.text","formatted_body":"* ⍋⍛⊇<\/code> there should be called on a 100000-item vector, so if that takes 370ms, that's ⊇<\/code> taking 3700 nanoseconds per element, which is.. a lot"}}
                    {"origin_server_ts":1695397753474,"event_id":"$YzwCVFkNKfF7U44tN3sptpPk4t83fWUBOnTENlLB_JU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"might it be that it's trying to re-materialize the `+/` result elements twice, once for `⍋`, once for `⊇`, recomputing the thing?","msgtype":"m.text","formatted_body":"might it be that it's trying to re-materialize the +/<\/code> result elements twice, once for ⍋<\/code>, once for ⊇<\/code>, recomputing the thing?"}}
                    {"origin_server_ts":1695397785330,"event_id":"$HrNeDmC2jJV7Hqx_LZXT-_ab2E1QtW5kGRbqwdKcROo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Assuming:\n```\nb ← 1000+⍳100000000\nc ← ⌽⍳100000000\n```\nThen:\n```\ntime:measureTime { c ⊇ b }\n```\nYields:\n```\nTotal time: 3.309\n```","msgtype":"m.text","formatted_body":"

                    Assuming:<\/p>\n

                    b ← 1000+⍳100000000\nc ← ⌽⍳100000000\n<\/code><\/pre>\n

                    Then:<\/p>\n

                    time:measureTime { c ⊇ b }\n<\/code><\/pre>\n

                    Yields:<\/p>\n

                    Total time: 3.309\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1695397809876,"event_id":"$HH9zq_7VryZlqtAiL0w2Em9c8wLQByPuPlI9PgkElNg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So yes, `⊇` is slow.","msgtype":"m.text","formatted_body":"So yes, ⊇<\/code> is slow."}}
                    {"origin_server_ts":1695397835259,"event_id":"$KVcE2Lqt6rgdhMbd1Uu5ENbT4bZphXwnJsuM-PusLmY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's 33ns/elt, which is magnitudes better than the 3700ns/elt observed in your previous test","msgtype":"m.text","formatted_body":"that's 33ns/elt, which is magnitudes better than the 3700ns/elt observed in your previous test"}}
                    {"origin_server_ts":1695397888827,"event_id":"$F89cmWlOtuW14lFr7f_vIyJgojLnKXGl2nVvXHWPC_4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"might it be that it's trying to re-materialize the `+/` result elements, once for `⍋`, once for `⊇`, effectively computing the sums twice?","msgtype":"m.text","formatted_body":"might it be that it's trying to re-materialize the +/<\/code> result elements, once for ⍋<\/code>, once for ⊇<\/code>, effectively computing the sums twice?"},"m.relates_to":{"event_id":"$YzwCVFkNKfF7U44tN3sptpPk4t83fWUBOnTENlLB_JU","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* might it be that it's trying to re-materialize the `+/` result elements, once for `⍋`, once for `⊇`, effectively computing the sums twice?","msgtype":"m.text","formatted_body":"* might it be that it's trying to re-materialize the +/<\/code> result elements, once for ⍋<\/code>, once for ⊇<\/code>, effectively computing the sums twice?"}}
                    {"origin_server_ts":1695397966013,"event_id":"$JpA91wXT9E1C7eI7JWyPwQp_1Hr8hojSpE4G8g_ZW10","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Seems like a lot of that time war garbage collecting too... I did it again with a new VM and the fastest run was 1.427.","msgtype":"m.text"}}
                    {"origin_server_ts":1695397972893,"event_id":"$FUuf2fFDD6lQuOcskZK58meHv7x8DgbvzvZT37B6snc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Seems like a lot of that time was garbage collecting too... I did it again with a new VM and the fastest run was 1.427.","msgtype":"m.text"},"m.relates_to":{"event_id":"$JpA91wXT9E1C7eI7JWyPwQp_1Hr8hojSpE4G8g_ZW10","rel_type":"m.replace"},"body":" * Seems like a lot of that time was garbage collecting too... I did it again with a new VM and the fastest run was 1.427.","msgtype":"m.text"}}
                    {"origin_server_ts":1695397980417,"event_id":"$ncRAE597RI5ja_xM5C7EdEJ6CHi9dU8Q-V7Rp2MfPms","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, let's see what else I can do.","msgtype":"m.text"}}
                    {"origin_server_ts":1695397984372,"event_id":"$mvuU3b5YL87y2iNA1-DXgUkh7UjzMjvn-Xbp5MV4bh4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"OK, let's see what else I can try.","msgtype":"m.text"},"m.relates_to":{"event_id":"$ncRAE597RI5ja_xM5C7EdEJ6CHi9dU8Q-V7Rp2MfPms","rel_type":"m.replace"},"body":" * OK, let's see what else I can try.","msgtype":"m.text"}}
                    {"origin_server_ts":1695398459426,"event_id":"$aqujEo2gJzf4EH_uy8o2u0eVnZxOlt96Ye_brJd5H0c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Given:\n```\nb ← ?10000000⍴2⋆30\n```\nThen:\n```\ntime:measureTime { 0⊣comp ⍋b }\n```\nTaskes: 10.079 seconds.","msgtype":"m.text","formatted_body":"

                    Given:<\/p>\n

                    b ← ?10000000⍴2⋆30\n<\/code><\/pre>\n

                    Then:<\/p>\n

                    time:measureTime { 0⊣comp ⍋b }\n<\/code><\/pre>\n

                    Taskes: 10.079 seconds.<\/p>\n"}} {"origin_server_ts":1695398471353,"event_id":"$J_HwT_c5w8flnMMnPttgPJ-ZR38Uk6q1_zvq2_pNO68","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So I do think the sort appears to be a bottleneck.","msgtype":"m.text"}} {"origin_server_ts":1695398512331,"event_id":"$iDPOHPLjk2wL5dAIl3zMsl8z3f7wPZO9SBHghsN5Jbs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"So the sort appears to be a bottleneck.","msgtype":"m.text"},"m.relates_to":{"event_id":"$J_HwT_c5w8flnMMnPttgPJ-ZR38Uk6q1_zvq2_pNO68","rel_type":"m.replace"},"body":" * So the sort appears to be a bottleneck.","msgtype":"m.text"}} {"origin_server_ts":1695398565448,"event_id":"$dUu9fODxTtP_44M-CJNBpqFyR4nJaBnPIOOBI1MNmJo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$YzwCVFkNKfF7U44tN3sptpPk4t83fWUBOnTENlLB_JU"}},"format":"org.matrix.custom.html","body":"`time:measureTime { ⍸˝ ⍋⍛⊇ +/a }` is 0.8s, `time:measureTime { b←+/a }` is 0.36s, `time:measureTime { b←+/a ⋄ ⍸˝ ⍋⍛⊇ b }` is 0.4s; so it does seem like this could be the case","msgtype":"m.text","formatted_body":" ↰ <\/a> dzaima<\/a> <\/mx-reply>time:measureTime { ⍸˝ ⍋⍛⊇ +/a }<\/code> is 0.8s, time:measureTime { b←+/a }<\/code> is 0.36s, time:measureTime { b←+/a ⋄ ⍸˝ ⍋⍛⊇ b }<\/code> is 0.4s; so it does seem like this could be the case"}} {"origin_server_ts":1695398717811,"event_id":"$vIqFHfc-AZ_3drwuPDTtzt5bWd_8-U3xBDzpQcr40QI","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1695398822717,"event_id":"$Oomh016XlBQ2Tzx4UmW34ap6J1oKfgmjluefY31pGQw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$vIqFHfc-AZ_3drwuPDTtzt5bWd_8-U3xBDzpQcr40QI","type":"m.room.redaction","content":{"redacts":"$vIqFHfc-AZ_3drwuPDTtzt5bWd_8-U3xBDzpQcr40QI"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1695398772747,"event_id":"$D2Ffxfrud5HvA0CI1OxGwIcm7wXDyB026GKmRHHQR2Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Also, the call to `.valueAt()` is the generic one which boxes the return value.","msgtype":"m.text","formatted_body":"Also, the call to .valueAt()<\/code> is the generic one which boxes the return value."}} {"origin_server_ts":1695398822717,"event_id":"$Oomh016XlBQ2Tzx4UmW34ap6J1oKfgmjluefY31pGQw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$vIqFHfc-AZ_3drwuPDTtzt5bWd_8-U3xBDzpQcr40QI","type":"m.room.redaction","content":{"redacts":"$vIqFHfc-AZ_3drwuPDTtzt5bWd_8-U3xBDzpQcr40QI"}} {"origin_server_ts":1695398847470,"event_id":"$pWZ6IYOHoM3Csp7FqVso6EUdfoaaDP2mpCe-Z9_kImk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No wait. I misread my own code.","msgtype":"m.text"}} {"origin_server_ts":1695399143787,"event_id":"$lg9MMM08TQAg5zYqXe5QKnZbRwl9R9Wql4U42VVMGLY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$J_HwT_c5w8flnMMnPttgPJ-ZR38Uk6q1_zvq2_pNO68"}},"format":"org.matrix.custom.html","body":"```\n b←+/1+?100000 1000 ⍴ 6 ⋄ time:measureTime {0⊣comp ⍋b}\nTotal time: 0.034\n```\ntesting on the actual input in question gives 34ms of time for the grade","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>

                       b←+/1+?100000 1000 ⍴ 6 ⋄ time:measureTime {0⊣comp ⍋b}\nTotal time: 0.034<\/code><\/pre>testing on the actual input in question gives 34ms of time for the grade"}}
                    {"origin_server_ts":1695399324131,"event_id":"$OIPhE6ULILgEYVxp_2LI-dnlptyXzEHSt_3uSXXzYGg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"fun:\n```\n   ≢a←1+?100000 1000⍴6\n100000\n   time:measureTime { 2 × +/a }\nTotal time: 0.246\n   time:measureTime { +⍨ +/a }\nTotal time: 0.792\n```","msgtype":"m.text","formatted_body":"fun:
                       ≢a←1+?100000 1000⍴6\n100000\n   time:measureTime { 2 × +/a }\nTotal time: 0.246\n   time:measureTime { +⍨ +/a }\nTotal time: 0.792<\/code><\/pre>"}}
                    {"origin_server_ts":1695399416353,"event_id":"$BLMzHyoW-6M09oXv82nEfYVdDDT9m5P00hgO_fk9rGc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think I know... Give me a second and let me check.","msgtype":"m.text"}}
                    {"origin_server_ts":1695400118510,"event_id":"$LECW7A3lr7162VwPNQ_l7r_d76FvmymlOYmtX0rkWhk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Do a pull and try now.","msgtype":"m.text"}}
                    {"origin_server_ts":1695400130324,"event_id":"$eJxwG6-acB6mq5vUajqfZcEVHqb2v6dSQgts6Agl6qA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It should reduce the performance difference by about 50%.","msgtype":"m.text"}}
                    {"origin_server_ts":1695400268987,"event_id":"$iFyTnL6X2mMhdYVZfgk1oxPxAbbGKKVRNinM-_XWyCk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh wait, probably not by that much. Most of the difference comes from the lazy value being evaluated twice.","msgtype":"m.text"}}
                    {"origin_server_ts":1695400282940,"event_id":"$10TsCQHRLrl43lMKoLvewJiYvP3o0hb-h8SZ-IlfYzw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"You can see that by doing `+⍨ comp +/a`.","msgtype":"m.text","formatted_body":"You can see that by doing +⍨ comp +/a<\/code>."}}
                    {"origin_server_ts":1695400307693,"event_id":"$JeTDWPg2DXmJH7RJzXj3LfHHScmh0y47eg1qibC7NnQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"right; my point being that I think the same thing is happening in `⍋⍛⊇ +/a`","msgtype":"m.text","formatted_body":"right; my point being that I think the same thing is happening in ⍋⍛⊇ +/a<\/code>"}}
                    {"origin_server_ts":1695400319698,"event_id":"$GXJjC4BNsEPM4e79Ralu-Rzme1a8fXZFwDLhAmmn6qI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm working on a way to fix this, so it will detect that a value can be reused, and will nto throw away the values in that case.","msgtype":"m.text"}}
                    {"origin_server_ts":1695400483372,"event_id":"$3rJcmew04zd6VCYcBWNG9_U5lebPbjJ8I_C5exsP7yM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$JeTDWPg2DXmJH7RJzXj3LfHHScmh0y47eg1qibC7NnQ"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> right; my point being that I think the same thing is happening in `⍋⍛⊇ +/a`\n\nRight. It does have an impact.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    right; my point being that I think the same thing is happening in ⍋⍛⊇ +/a<\/code><\/blockquote><\/mx-reply>Right. It does have an impact."}} {"origin_server_ts":1695400511675,"event_id":"$f_xV33312_ioCCymUxX-soF4oBD6JWu8JGHI1B8INDI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, this should go away once I implement that fix.","msgtype":"m.text"}} {"origin_server_ts":1695400535184,"event_id":"$jFllG7E8-lltuZjnSYbEuivcuhvuGBxFqtrETnepzOM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I still need to figure out how to do it correctly :-)","msgtype":"m.text"}} {"origin_server_ts":1695400559789,"event_id":"$xE05xlEd7dARdlQ3a07za0WFA0m47t1SNdZAgxfsz28","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$JeTDWPg2DXmJH7RJzXj3LfHHScmh0y47eg1qibC7NnQ"}},"format":"org.matrix.custom.html","body":"i.e. `time:measureTime { ⊢⍛+ +/a }` is still the 2x slower","msgtype":"m.text","formatted_body":"
                    ↰ <\/a> dzaima<\/a> <\/mx-reply>i.e. time:measureTime { ⊢⍛+ +/a }<\/code> is still the 2x slower"}} {"origin_server_ts":1695400692883,"event_id":"$aPfDcm8NvoRiyifBjeSrOS9ZBcnABgNNeFVO_JjTWuY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, because in all those cases you are passing the lazy value to two places. I could detect that and force a collapse in that case, but it's not the way it's implemented at the moment.","msgtype":"m.text"}} {"origin_server_ts":1695401056635,"event_id":"$cv-8kO5Hfns3pt8MZ-fbCjtLAg9DtC0XTBHMRiy7Zlg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"unrelatedly - `10.1*30` is formatted as a broken `1.3478489153329042e+30.0` in JS; and potentially `1e30` etc should be valid Kap number literals?","msgtype":"m.text","formatted_body":"unrelatedly - 10.1*30<\/code> is formatted as a broken 1.3478489153329042e+30.0<\/code> in JS; and potentially 1e30<\/code> etc should be valid Kap number literals?"}} {"origin_server_ts":1695401107816,"event_id":"$qCBHNSneN7d_n7iTJNFDyh58tRUTbe2ID_cBV88fl_U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No, it doesn't support 1e30. Just type `10⋆30`","msgtype":"m.text","formatted_body":"No, it doesn't support 1e30. Just type 10⋆30<\/code>"}} {"origin_server_ts":1695401210231,"event_id":"$w3eAhwxb-rkah7uUiItN4szvcx42UFAiQmIWXQi1x4E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$cv-8kO5Hfns3pt8MZ-fbCjtLAg9DtC0XTBHMRiy7Zlg"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> unrelatedly - `10.1*30` is formatted as a broken `1.3478489153329042e+30.0` in JS; and potentially `1e30` etc should be valid Kap number literals?\n\nYeah, floating point formatting falls back to the platform formatter, which is bad.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    unrelatedly - 10.1*30<\/code> is formatted as a broken 1.3478489153329042e+30.0<\/code> in JS; and potentially 1e30<\/code> etc should be valid Kap number literals?<\/blockquote><\/mx-reply>Yeah, floating point formatting falls back to the platform formatter, which is bad."}} {"origin_server_ts":1695401242052,"event_id":"$MZdZH3bQAwgNpsi5rAqWCJjJ-oYMEF95oq-2rn162yg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"note the appended `.0`","msgtype":"m.text","formatted_body":"note the appended .0<\/code>"}} {"origin_server_ts":1695401245053,"event_id":"$AfESC-8ONy5tQ1FTso6QZmi4yr_ybHwsedCwaW8dm2w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Problem is, Kotlin multiplatform doesn't provide a formatter, so I'd have to write my own if I want it to be consistent.","msgtype":"m.text"}} {"origin_server_ts":1695401270027,"event_id":"$hw5k9jax6YPq31nJV0o457qKCPaG0sa4fV8Ov7aCFqA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Or I could read the js formatted value and do some string manipulation to turn it into something consistent.","msgtype":"m.text"}} {"origin_server_ts":1695401287550,"event_id":"$UfUsi1kH58XElxQOSHWWM0KUlwtfa2iQK2KF3VQW_bg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$MZdZH3bQAwgNpsi5rAqWCJjJ-oYMEF95oq-2rn162yg"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> note the appended `.0`\n\nOh right. Yeah, that's very wrong.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    note the appended .0<\/code><\/blockquote><\/mx-reply>Oh right. Yeah, that's very wrong."}} {"origin_server_ts":1695401398229,"event_id":"$VTjU8dpm98x15hxq8OQhmxe7BgB0C2KPBOy9XYvRrYM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"for dzaima/BQN I did [this](https://github.com/dzaima/BQN/blob/ba14bcf1e1d0f90fe90906a6dd7b921460f070f6/src/BQN/types/Num.java#L129) mess, transforming an always-scientific-notation format to the custom one","msgtype":"m.text","formatted_body":"for dzaima/BQN I did
                    this<\/a> mess, transforming an always-scientific-notation format to the custom one"}} {"origin_server_ts":1695401403522,"event_id":"$xFU4Y5guSnmjMa3BLwEsoWkMYoB5nMvj9y5V_fOtTrg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's because I wanted to add .0 after the number to show it's a double. So it basically checks if it has a decimal part, and if not, it just tacks on a .0.","msgtype":"m.text"}} {"origin_server_ts":1695401445904,"event_id":"$64eXzD3Wwx1sjErXWC4gpB9svq3urZInjqewqYkkRuw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$VTjU8dpm98x15hxq8OQhmxe7BgB0C2KPBOy9XYvRrYM"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> for dzaima/BQN I did [this](https://github.com/dzaima/BQN/blob/ba14bcf1e1d0f90fe90906a6dd7b921460f070f6/src/BQN/types/Num.java#L129) mess, transforming an always-scientific-notation format to the custom one\n\nYou know, I think I'll just steal that :-)","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    for dzaima/BQN I did
                    this<\/a> mess, transforming an always-scientific-notation format to the custom one<\/blockquote><\/mx-reply>You know, I think I'll just steal that :-)"}} {"origin_server_ts":1695401448752,"event_id":"$1b0dRch5KD-7WGN2ZzvuqdaTqgQPZ--KzuffgP-LK8A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you don't mind.","msgtype":"m.text"}} {"origin_server_ts":1695401456565,"event_id":"$pgSkvYzQNh2_mca17MnjVmbfbVoequ9X0m2UCYm0cj0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"feel free to","msgtype":"m.text","formatted_body":"feel free to"}} {"origin_server_ts":1695401544408,"event_id":"$NLp90KvwwuKXgLg9kGF1r3ZbT0i-X6PlfIoANsba3kA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(it still relies on `String.format` to provide the scientific notation representation)","msgtype":"m.text","formatted_body":"(it still relies on String.format<\/code> to provide the scientific notation representation)"}} {"origin_server_ts":1695401713403,"event_id":"$OgmnGsxmA1X7Kbt0nvKzqOaHn1xuxXsdOqB0HzhBxYQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh, I see.","msgtype":"m.text"}} {"origin_server_ts":1695401717597,"event_id":"$biQgfCoQSW_cTid2rqxKGlBKcw4jKo0FE22x47gs10o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I don't have String.format.","msgtype":"m.text"}} {"origin_server_ts":1695401721058,"event_id":"$k9dvlv_9Kisj7XjzJX4LFzRLQCNhu8bt6Nk-QnEYxWQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"right","msgtype":"m.text","formatted_body":"right"}} {"origin_server_ts":1695401740706,"event_id":"$qQpi-JGYmqF2aZHSXtp8e7TInHFjo_8sMpi7Bf1h14A","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"but in JVM you do have it, and in JS, `f = a.toExponential(pp)` is close","msgtype":"m.text","formatted_body":"but in JVM you do have it, and in JS, f = a.toExponential(pp)<\/code> is close"}} {"origin_server_ts":1695401869974,"event_id":"$X4fWyMCsCBtsmhZ6tkfxYSSEsYZ79IJ1t9JKzVfOcZ4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"..except it gives `3.000e+0` instead of `3.000e+00`, so there could be some need of some adjustment","msgtype":"m.text","formatted_body":"..except it gives 3.000e+0<\/code> instead of 3.000e+00<\/code>, so there could be some need of some adjustment"}} {"origin_server_ts":1695401905798,"event_id":"$FZDkbVqSMuzZ3VCROJVoqCY9wOSuhU95l4rkBo0mJhg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"but yeah, number formatting not fun","msgtype":"m.text","formatted_body":"but yeah, number formatting not fun"}} {"origin_server_ts":1695401963201,"event_id":"$DdaMQ5XqPS9BPRMAM4Tl4e4o5ebgwFg78s3NgjuUwK8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah, and that's why I haven't done it :-)","msgtype":"m.text"}} {"origin_server_ts":1695402087532,"event_id":"$cplIe5SDV8jF57LvMRCwaLrFoTe1D4bUi8zTbpYEntQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"in CBQN I have [this](https://github.com/dzaima/CBQN/blob/develop/src/utils/ryu.c#L303-L382) mess for number formatting, using Ryu as the primary converter","msgtype":"m.text","formatted_body":"in CBQN I have this<\/a> mess for number formatting, using Ryu as the primary converter"}} {"origin_server_ts":1695402134702,"event_id":"$uzmeoPeeYTWPX9OREma2e7fYna4ARCCse3YSJzguhms","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Is that it?","msgtype":"m.text"}} {"origin_server_ts":1695402138448,"event_id":"$hYjXlvYN-1WUkY7ZrFxBQxaTaoUPgFDtESAiXMbTt8g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Am I missing something?","msgtype":"m.text"}} {"origin_server_ts":1695402150406,"event_id":"$sQnX9PZf58J6-CV5BUhXKE2uPPlPAXp2WtSyXz6VGNo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"is what it?","msgtype":"m.text","formatted_body":"is what it?"}} {"origin_server_ts":1695402182643,"event_id":"$Q48T5HHNb6PJzut9bMC7DPHV5_HHKoIcpmw8Jog_iSI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The function you marked. It's not long. Although I do note it calls out to some other functions. How much do I have to port over to Kotlin?","msgtype":"m.text"}} {"origin_server_ts":1695402209044,"event_id":"$wLflNvdmUHIMtfT5yOLduZfgU4KsN5abhBIkZKLZ-AE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"there's the `ryu/` directory","msgtype":"m.text","formatted_body":"there's the ryu/<\/code> directory"}} {"origin_server_ts":1695402216935,"event_id":"$mB35ec6ZTgge6luPRRFFhaf7fso0SEQ5uO-YkBgOuD0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Wait. What is `floating_decimal_64`?","msgtype":"m.text","formatted_body":"Wait. What is floating_decimal_64<\/code>?"}} {"origin_server_ts":1695402220799,"event_id":"$EJLO1cv0_0NPN8VaPBMEhWBLD5sLEyNt5uSRVaU8nXs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and yes the other functions there are also part of it","msgtype":"m.text","formatted_body":"and yes the other functions there are also part of it"}} {"origin_server_ts":1695402240485,"event_id":"$5KwvSBkw1Q9ZGvX77LS8uKRr30vrpHDZUy8zXubd6Xs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"and yes the other functions there are also part of it (though some parts of that file are also for number parsing)","msgtype":"m.text","formatted_body":"and yes the other functions there are also part of it (though some parts of that file are also for number parsing)"},"m.relates_to":{"event_id":"$EJLO1cv0_0NPN8VaPBMEhWBLD5sLEyNt5uSRVaU8nXs","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* and yes the other functions there are also part of it (though some parts of that file are also for number parsing)","msgtype":"m.text","formatted_body":"* and yes the other functions there are also part of it (though some parts of that file are also for number parsing)"}} {"origin_server_ts":1695402312887,"event_id":"$ZzSzSTYcKcVjggoeBkTPfu8cxFr8uHkbyq4MUh4tIZ8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and all of that is just for the max-precision case, Ryu has mostly-separate code for fixed-precision formatting that isn't yet included in CBQN","msgtype":"m.text","formatted_body":"and all of that is just for the max-precision case, Ryu has mostly-separate code for fixed-precision formatting that isn't yet included in CBQN"}} {"origin_server_ts":1695402359849,"event_id":"$kAA3M8ROpWLbThmQY9GFSYYqwadPI5-kNhBQxU9_tDQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"([ryu](https://github.com/ulfjack/ryu))","msgtype":"m.text","formatted_body":"(ryu<\/a>)"}} {"origin_server_ts":1695402500747,"event_id":"$IIP4lZ9ADChU8Oi3_JpqMi0KsPJA769Urd9LovbzI6o","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"normalizing the various platform-specific formatters should be significantly easier than porting Ryu","msgtype":"m.text","formatted_body":"normalizing the various platform-specific formatters should be significantly easier than porting Ryu"}} {"origin_server_ts":1695402714176,"event_id":"$R7xrkXZXZRHAocnGA3RI5CN63_6cQg1J3zGl_UKoe4E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. Indeed","msgtype":"m.text"}} {"origin_server_ts":1695402736995,"event_id":"$wJYNzUii6og0A2GdNwNX__SH-yiaFndRAOHPifbizhQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll definitely do that.","msgtype":"m.text"}} {"origin_server_ts":1695403242884,"event_id":"$bVf1P-CTEFM5Fu3zutzii7qilbeIs3wo6ZEZpug1LAE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I also want to design a usable and simple IO API.","msgtype":"m.text"}} {"origin_server_ts":1695403266651,"event_id":"$kc5odIOYIN3IQb2I61FNMh6orUyGovvtrBzXqDh37t8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm not a fan of the Dyalog API","msgtype":"m.text"}} {"origin_server_ts":1695403276525,"event_id":"$dYSdT83l73ghNtUldgWTOhOv0TqrsgEFgRMF_ShsK3Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And GNU APL's is the worst imaginable.","msgtype":"m.text"}} {"origin_server_ts":1695464279874,"event_id":"$EoTnk_o0coh7Q6zYFSOqt_gRZBd8ed6UzKRYwgj1C54","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: I fixed some of the double formatting issues","msgtype":"m.text","formatted_body":"dzaima<\/a>: I fixed some of the double formatting issues"}} {"origin_server_ts":1695464303952,"event_id":"$Gg_hhR4u6IEhTzpqZXZA7pDtRxfP3GjieJliNmHXYiE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It now also recognises numbers with scientific notation","msgtype":"m.text"}} {"origin_server_ts":1695464484174,"event_id":"$Ij1NWIMNG5XGz4Rq6rZR9BkgsaeG1wCCeqN7PJ9Thow","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"should accept `1e¯30` too","msgtype":"m.text","formatted_body":"should accept 1e¯30<\/code> too"}} {"origin_server_ts":1695464691201,"event_id":"$RHiwUdDrA5UDlcuIYyZVcqJOZQ0c4o3LzD0LCW3lXUc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh, right.","msgtype":"m.text"}} {"origin_server_ts":1695467409256,"event_id":"$Zir6s8w_3oP-gGZ0Mc7CApM029Xx5xNCKQNgIVkTZrE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: fixed now. I also fixed the fact that scientific notation wasn't supported for complex numbers.","msgtype":"m.text","formatted_body":"dzaima<\/a>: fixed now. I also fixed the fact that scientific notation wasn't supported for complex numbers."}} {"origin_server_ts":1696002790358,"event_id":"$j3AlDyVSL-vjIn6k0WTjvr7C80uZ39DA6F4AKQNokjI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, I've done some optimisations to sorting and pick.","msgtype":"m.text"}} {"origin_server_ts":1696002808418,"event_id":"$X_3L2Fz9sogWVmXDysntIB85rRAdaKg2w-3PPNjUbac","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It handles specialised types now in order to avoid boxing in more cases.","msgtype":"m.text"}} {"origin_server_ts":1696076352181,"event_id":"$JguiJBYn1qEXR4_s18mCtONKWtbpnE0Ea7nT4oswQC0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"All this talk about audio made me implement it as well:","msgtype":"m.text"}} {"origin_server_ts":1696076405217,"event_id":"$sI0RHfRTW7jAmRDZ9Cb72EKrMYC31uvgogD0NTJ3SoI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Here's a small [example](https://kapdemo.dhsdevelopments.com/clientweb2/#audio%3Aplay%20math%3Acos%20(math%3Api%C3%972%20%C3%97%20440.0%20%C3%97%20%E2%8D%B320000)%C3%B748000.0)","msgtype":"m.text","formatted_body":"Here's a small example<\/a>"}} {"origin_server_ts":1696079752100,"event_id":"$MCTk5kg3YVLkvdHRhb_Lsd0BqMzi51aZN913VruSxIA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It works on the JS and Linux versions. I haven't implemented support int he JVM version yet","msgtype":"m.text"}} {"origin_server_ts":1696079758231,"event_id":"$uM9PyiHJU_z4X2Xrv2qlArp_N_BNln1ulJ4W_IT0gN8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"It works on the JS and Linux versions. I haven't implemented support in the JVM version yet","msgtype":"m.text"},"m.relates_to":{"event_id":"$MCTk5kg3YVLkvdHRhb_Lsd0BqMzi51aZN913VruSxIA","rel_type":"m.replace"},"body":" * It works on the JS and Linux versions. I haven't implemented support in the JVM version yet","msgtype":"m.text"}} {"origin_server_ts":1696087921484,"event_id":"$T-m0bXFDnB-xovn8fkHeU9brj_az5vLH1NfJpDKhXJk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Would be nice to have a way to re-play the audio from previous expressions without re-evaluating. Uiua's embedded audio element is good for that although I'm not sure how it's implemented.","msgtype":"m.text","formatted_body":"Would be nice to have a way to re-play the audio from previous expressions without re-evaluating. Uiua's embedded audio element is good for that although I'm not sure how it's implemented."}} {"origin_server_ts":1696088855716,"event_id":"$nnd16LopbODlpWRlVUQBYoumgsJIZcHEdfqI80q2wQk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That would be easy actually. The sample is kept in an audio buffer object. I could add a button to replay. The problem is simply that I'm so terrible at web design. ","msgtype":"m.text"}} {"origin_server_ts":1696253008703,"event_id":"$q-rblYh3vscH0cNpNCtXGyfu13k-MvMvF__g-xw7l-s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, I've implemented the audio support in the JVM version as well.","msgtype":"m.text"}} {"origin_server_ts":1696786199140,"event_id":"$oaCKVbi7kiVJ6iViXh7Ox16JphP3vNCCHvx3tAVoeEU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I've just made the Kap engine much more complicated, including adding a new optimiser.","msgtype":"m.text"}} {"origin_server_ts":1696786233511,"event_id":"$Z_jQx1bpep0eOesM3Dh4A384Jmb_rkiOIt3JGCn0JpY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm not sure it's worth it, and I may regret it. It may be harder to test now.","msgtype":"m.text"}} {"origin_server_ts":1696789808714,"event_id":"$JbmJIufrEfD8pksj_37_GWGssi9IOddEzvAPnpQQc1s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"what kind of things does it optimize?","msgtype":"m.text","formatted_body":"what kind of things does it optimize?"}} {"origin_server_ts":1696790445635,"event_id":"$V9FXkPFZ2BdR4bwjz6s-gD9z0JJ7fz9E3duSfynpsd4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Well, it mainly sets up a framework for later optimisations, with the simplest ones being function combination. Like creating a sort function from the grade and select. ","msgtype":"m.text"}} {"origin_server_ts":1696790513048,"event_id":"$DX5fVUoA9LwiMa7GNVflHuktH_hsDf8_RhBXYuwaCf8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It also introduces the ability for a lazy value to know if its result will have depth zero. ","msgtype":"m.text"}} {"origin_server_ts":1696790540448,"event_id":"$94LQmi_z2HHhEfwDTQmciAf35tq4aAi-WDDxkjLMh44","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(I.e. if all is cells are scalar)","msgtype":"m.text"}} {"origin_server_ts":1696790626395,"event_id":"$feVpggFcz9X8wlxjzbhnDl8P3ioWCkwNNsFbofS21Sk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This means that a function like floor will be guaranteed to return an array which is specialised to integer if its argument is depth zero. ","msgtype":"m.text"}} {"origin_server_ts":1696790691975,"event_id":"$gL4VN2v-yekeofMx-Rbl7sbRZtFQBC1LUJ2-Wmx_t4Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Basicslly it knows a lot more about what the result will be before computing it. ","msgtype":"m.text"}} {"origin_server_ts":1696790707363,"event_id":"$9gN7PTXRtbzhRiN4zLnHEtHLtF7Z4n95ESoLaG-IqkA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Basically it knows a lot more about what the result will be before computing it. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$gL4VN2v-yekeofMx-Rbl7sbRZtFQBC1LUJ2-Wmx_t4Y","rel_type":"m.replace"},"body":"* Basically it knows a lot more about what the result will be before computing it. ","msgtype":"m.text"}} {"origin_server_ts":1696790736257,"event_id":"$Txk3n9gKjxT5f3tZxZK1XFdu2ZYnpj9JB06EE5Wcz4s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n ¯9223372036854775808÷¯1\n-9223372036854775808\n```\nprobably not intentional?","msgtype":"m.text","formatted_body":"
                       ¯9223372036854775808÷¯1\n-9223372036854775808<\/code><\/pre>probably not intentional?"}}
                    {"origin_server_ts":1696790883699,"event_id":"$9joFWgQcw9MBUDNHe8VHz71XXG3p2RzsZCEIsOm73nM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Sorry. I'm on the phone now and about to go to sleep. ","msgtype":"m.text"}}
                    {"origin_server_ts":1696790890550,"event_id":"$aq4VWLPv9f-bFsgK_mD2CBDc6hEwKIUX8O-UznygRUQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What is the issue with it? ","msgtype":"m.text"}}
                    {"origin_server_ts":1696790950942,"event_id":"$6J8jAXizFa9MMYSMay79zf3GKxe8GUlYLPnq71eSXWw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it should be positive (unless 64-bit wraparound is intentional)","msgtype":"m.text","formatted_body":"it should be positive (unless 64-bit wraparound is intentional)"}}
                    {"origin_server_ts":1696790999612,"event_id":"$jqdSyA1Da_9Rr8opUdceDi7vY70t7m1GB0q4rR4HeXU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and e.g. `¯9223372036854775808ׯ1` does give the positive `9223372036854775808`","msgtype":"m.text","formatted_body":"and e.g. ¯9223372036854775808ׯ1<\/code> does give the positive 9223372036854775808<\/code>"}}
                    {"origin_server_ts":1696791052276,"event_id":"$bcT7A-N5GnKYnqE-q7sM2HP2bI3VRRIxImeh0JNYeuM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"so this new optimizer is a parse-time, not runtime thing? seems like the thing it tests for is `⌊a÷b`, does it also handle `a (⌊÷) b` & similar?","msgtype":"m.text","formatted_body":"so this new optimizer is a parse-time, not runtime thing? seems like the thing it tests for is ⌊a÷b<\/code>, does it also handle a (⌊÷) b<\/code> & similar?"}}
                    {"origin_server_ts":1696791078917,"event_id":"$bOEZtEeR4OtdW5kQw4suPbl41JJQDQA9HkmOg6koeUQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, it will.","msgtype":"m.text"}}
                    {"origin_server_ts":1696791088644,"event_id":"$FQaXIBW09Z0jhT0h2xkS0_6umnqd0pl9Xg29bxzC7I8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right now it misses thar.","msgtype":"m.text"}}
                    {"origin_server_ts":1696791104253,"event_id":"$TqN0n6aUOXJhijT6SKdQshUV-hCo3-P18dXKKiwKmZg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And yes, it's parse time.","msgtype":"m.text"}}
                    {"origin_server_ts":1696791338568,"event_id":"$FWXRlwfq7Z38f2BuMCLwvE7spgNuKrRDHN4Bp1CqhTY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(also, the number formatter should probably be replacing `-`es with `¯`es)","msgtype":"m.text","formatted_body":"(also, the number formatter should probably be replacing -<\/code>es with ¯<\/code>es)"}}
                    {"origin_server_ts":1696818526303,"event_id":"$7X4v_lseHoO7aU5OnIqJ7EmxwCdwffaaYRQ7YfzO6XI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: The number formatter supports both. You can actually control it in the `io:print` function, although this syntax is not final.","msgtype":"m.text","formatted_body":"dzaima<\/a>: The number formatter supports both. You can actually control it in the io:print<\/code> function, although this syntax is not final."}}
                    {"origin_server_ts":1696818541436,"event_id":"$986coydsmd4FtXHGXLa_rg5jxK2ieNXTPhJpBVVhP4Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`:read io:print ¯3`","msgtype":"m.text","formatted_body":":read io:print ¯3<\/code>"}}
                    {"origin_server_ts":1696818821005,"event_id":"$AcjgTwY7kkp4lwEcjBiVn76VwqRloIlCUOU2t49KaBA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The left argument `:read` indicates that values should be printed in a form that can be read back as code:\n```\na ← 5+⍳3\nb ← 5 6 7 ÷ 2\n:read io:print 2 ¯1 ⍴ a,b\n```\nWill print:\n```\n2 3⍴5 6 7 (5÷2) 3 (7÷2)\n```","msgtype":"m.text","formatted_body":"

                    The left argument :read<\/code> indicates that values should be printed in a form that can be read back as code:<\/p>\n

                    a ← 5+⍳3\nb ← 5 6 7 ÷ 2\n:read io:print 2 ¯1 ⍴ a,b\n<\/code><\/pre>\n

                    Will print:<\/p>\n

                    2 3⍴5 6 7 (5÷2) 3 (7÷2)\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1696825328371,"event_id":"$Uwnev8npvNeXfc32GnzWb_UGUJgcmmtBqGFHlIpHJwk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Anyway, the bug is because there is no overflow check in this particular case. I think this is the only case where Long/Long can result in a bigint?","msgtype":"m.text"}}
                    {"origin_server_ts":1696825338268,"event_id":"$6zFg-k98Rlns2xZzLwnuuJH2tBqYb6FYLlNpkG3NL9A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have to add a specific check for this situation.","msgtype":"m.text"}}
                    {"origin_server_ts":1696826407502,"event_id":"$Y92XRkU0tORH-LjlGqrCr-Yt126HBYJP0gIX8PMGep8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: I've fixed this with a special check. Not nice, but I don't know of  a better way: https://codeberg.org/loke/array/commit/6f82505d5149dd79d56f19ce5eb8ccc8b70ecb46","msgtype":"m.text","formatted_body":"dzaima<\/a>: I've fixed this with a special check. Not nice, but I don't know of  a better way: https://codeberg.org/loke/array/commit/6f82505d5149dd79d56f19ce5eb8ccc8b70ecb46"}}
                    {"state_key":"","origin_server_ts":1696828125373,"event_id":"$FYBL6olj_6E54fopAEbZ8T9wioJI_YZGttc04xeCBVk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","prev_content":{"name":"KAP"},"type":"m.room.name","content":{"name":"Kap"},"replaces_state":"$RFQ8M5dCy04V9JA9SviuX8LPfSNH8SCnuBk4UVqDx5U"}
                    {"state_key":"","origin_server_ts":1696828125552,"event_id":"$D0fBlLM27fccxyxKuoieY7HGJ-keeQgbk9gbK5X4Bus","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","prev_content":{"org.matrix.msc3765.topic":[{"mimetype":"text/plain","body":"KAP programming language. https://codeberg.org/loke/array"}],"topic":"KAP programming language. https://codeberg.org/loke/array"},"type":"m.room.topic","content":{"org.matrix.msc3765.topic":[{"mimetype":"text/plain","body":"Kap programming language. https://codeberg.org/loke/array"}],"topic":"Kap programming language. https://codeberg.org/loke/array"},"replaces_state":"$1I68PWbv1mcnoyE6iFxgWev76VlDspvMB--qMamXoQQ"}
                    {"origin_server_ts":1696840900338,"event_id":"$ZTQaaDexRC-_prPDIJGy9eTMRIBURLwlGj-XHrjtgIU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"..huh, [apparently](https://github.com/dzaima/BQN/blob/ba14bcf1e1d0f90fe90906a6dd7b921460f070f6/src/BQN/types/callable/builtins/fns/DivBuiltin.java#L37-L39) I implemented the check wrong in dzaima/BQN (for `w÷x` it checks `x==-x`, which is `x==0 || x==Int.MIN_VALUE` not `x==0 || x==-1`). I guess for a single check it'd have to be `x == (x>>31)` but I don't actually know if that's any better than the two separate checks","msgtype":"m.text","formatted_body":"..huh, apparently<\/a> I implemented the check wrong in dzaima/BQN (for w÷x<\/code> it checks x==-x<\/code>, which is x==0 || x==Int.MIN_VALUE<\/code> not x==0 || x==-1<\/code>). I guess for a single check it'd have to be x == (x>>31)<\/code> but I don't actually know if that's any better than the two separate checks"}}
                    {"origin_server_ts":1696841568689,"event_id":"$L0bMk734gwEFLwCP1UyeaVrNKH2N2JQ3sKP8a-qM454","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(not like the perf really matters for this, considering that a division is up next; also there's the traditional `(x+1) unsigned_less_than 2` but that's more annoying to do in java; I guess you'd subtract like 2^31 from both to make it a signed comparion?)","msgtype":"m.text","formatted_body":"(not like the perf really matters for this, considering that a division is up next; also there's the traditional (x+1) unsigned_less_than 2<\/code> but that's more annoying to do in java; I guess you'd subtract like 2^31 from both to make it a signed comparion?)"}}
                    {"origin_server_ts":1696841664209,"event_id":"$FM1VfXGaV0HhQNDNPikRu-5xSQd3GVlhXeCG3jhbI40","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(for two comparisons you'd want `x==0 || w==min_value` probably, as that'd have less false positives)","msgtype":"m.text","formatted_body":"(for two comparisons you'd want x==0 || w==min_value<\/code> probably, as that'd have less false positives)"}}
                    {"origin_server_ts":1696841676394,"event_id":"$A3jM_qeXJ0EvPvqZ3mQ-2eK50ASacNoEnm0sc3Zk5XI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(for two comparisons you'd want `x==0 || w==min_value` probably, as that'd have less false positives; but again, actually that important)","msgtype":"m.text","formatted_body":"(for two comparisons you'd want x==0 || w==min_value<\/code> probably, as that'd have less false positives; but again, actually that important)"},"m.relates_to":{"event_id":"$FM1VfXGaV0HhQNDNPikRu-5xSQd3GVlhXeCG3jhbI40","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (for two comparisons you'd want `x==0 || w==min_value` probably, as that'd have less false positives; but again, actually that important)","msgtype":"m.text","formatted_body":"* (for two comparisons you'd want x==0 || w==min_value<\/code> probably, as that'd have less false positives; but again, actually that important)"}}
                    {"origin_server_ts":1696841678576,"event_id":"$n2cJu4YffXob0wTAPp95LTs2_HAylABZrLBpfHmGbvM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: It's even more heavy in Kap, since I also need to check whether it evenly divides (if not, I have to return a rational)","msgtype":"m.text","formatted_body":"dzaima<\/a>: It's even more heavy in Kap, since I also need to check whether it evenly divides (if not, I have to return a rational)"}}
                    {"origin_server_ts":1696841711666,"event_id":"$gIVu0a98mBR1oJ7W5Gb_sqm1LsFW61e5tG5zzvPx1ww","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the dzaima/BQN code I linked does that too, but at least on x86 you get division and modulo for free at the same time","msgtype":"m.text","formatted_body":"the dzaima/BQN code I linked does that too, but at least on x86 you get division and modulo for free at the same time"}}
                    {"origin_server_ts":1696841732913,"event_id":"$ZawCAow47oiq_pnU_L6Dm9zNBLi7TPxLeHXDLAOF_yY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"the dzaima/BQN code I linked does that too (except falling back to floats not rationals), but at least on x86 you get division and modulo for free at the same time","msgtype":"m.text","formatted_body":"the dzaima/BQN code I linked does that too (except falling back to floats not rationals), but at least on x86 you get division and modulo for free at the same time"},"m.relates_to":{"event_id":"$gIVu0a98mBR1oJ7W5Gb_sqm1LsFW61e5tG5zzvPx1ww","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* the dzaima/BQN code I linked does that too (except falling back to floats not rationals), but at least on x86 you get division and modulo for free at the same time","msgtype":"m.text","formatted_body":"* the dzaima/BQN code I linked does that too (except falling back to floats not rationals), but at least on x86 you get division and modulo for free at the same time"}}
                    {"origin_server_ts":1696841750518,"event_id":"$rEy7P6OWyH9hXUG2t0tHsS9RoETWJncTvtQGDdTsHG4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Here's the code: https://codeberg.org/loke/array/src/branch/master/array/src/commonMain/kotlin/array/builtins/math_functions.kt#L760","msgtype":"m.text"}}
                    {"origin_server_ts":1696841815591,"event_id":"$FP5TylklFyyLrBZeE9BeWtiIwRXVL_YU_yBECCGFARc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"You do `/` and `%` separately. I presume the compiler does some magic? Or is it on the CPU level?","msgtype":"m.text","formatted_body":"You do /<\/code> and %<\/code> separately. I presume the compiler does some magic? Or is it on the CPU level?"}}
                    {"origin_server_ts":1696841836353,"event_id":"$sclj-31NxCPHwdHuoJrRdsxtnbtgYgcOuhvr1gLBZAw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'd hope the JVM compiler would do the same.","msgtype":"m.text"}}
                    {"origin_server_ts":1696841853377,"event_id":"$ylEHO1vyv0JQ7_2qMWqQNHWw4xnBA9gvSF588fMJuGY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the compiler Should™ combine them; whether Java does, I don't know (I tried to measure it at some point, and didn't end up concluding anything)","msgtype":"m.text","formatted_body":"the compiler Should™ combine them; whether Java does, I don't know (I tried to measure it at some point, and didn't end up concluding anything)"}}
                    {"origin_server_ts":1696841860859,"event_id":"$KZTA10laxS6yeDLAFbQdwyfBv3dUqIxJ_9svi-Zkshc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"a compiler Should™ combine them; whether Java does, I don't know (I tried to measure it at some point, and didn't end up concluding anything)","msgtype":"m.text","formatted_body":"a compiler Should™ combine them; whether Java does, I don't know (I tried to measure it at some point, and didn't end up concluding anything)"},"m.relates_to":{"event_id":"$ylEHO1vyv0JQ7_2qMWqQNHWw4xnBA9gvSF588fMJuGY","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* a compiler Should™ combine them; whether Java does, I don't know (I tried to measure it at some point, and didn't end up concluding anything)","msgtype":"m.text","formatted_body":"* a compiler Should™ combine them; whether Java does, I don't know (I tried to measure it at some point, and didn't end up concluding anything)"}}
                    {"origin_server_ts":1696841938491,"event_id":"$YUPEY-atFoC8gNXv1ILHubtrYj2lAqtdX29EX131Y-I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(e.g. [here's](https://godbolt.org/z/ebfYhvzcK) gcc & clang combining them)","msgtype":"m.text","formatted_body":"(e.g. here's<\/a> gcc & clang combining them)"}}
                    {"origin_server_ts":1696842077074,"event_id":"$BacQQ2EU1w_KhkL-9MfsZBwyBLfadUJu_mJp_vM2RAk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(but even if the architecture doesn't have a merged div & modulo (ARM64 and RISC-V don't), it's trivial to also just compute the modulo from the divide by `x-y*(x/y)` which is still a lot cheaper than another divide/remainer instruction)","msgtype":"m.text","formatted_body":"(but even if the architecture doesn't have a merged div & modulo (ARM64 and RISC-V don't), it's trivial to also just compute the modulo from the divide by x-y*(x/y)<\/code> which is still a lot cheaper than another divide/remainer instruction)"}}
                    {"origin_server_ts":1696842119003,"event_id":"$djnGeY1YzbSsFbxq8A3-NPBFZ9mN3UHv8SbT3BrD2Ow","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(but even if the architecture doesn't have a merged div & modulo (RISC-V doesn't; ARM64 doesn't have a remainder instruction at all), it's trivial to also just compute the modulo from the divide by `x-y*(x/y)` which is still a lot cheaper than another divide/remainer instruction)","msgtype":"m.text","formatted_body":"(but even if the architecture doesn't have a merged div & modulo (RISC-V doesn't; ARM64 doesn't have a remainder instruction at all), it's trivial to also just compute the modulo from the divide by x-y*(x/y)<\/code> which is still a lot cheaper than another divide/remainer instruction)"},"m.relates_to":{"event_id":"$BacQQ2EU1w_KhkL-9MfsZBwyBLfadUJu_mJp_vM2RAk","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (but even if the architecture doesn't have a merged div & modulo (RISC-V doesn't; ARM64 doesn't have a remainder instruction at all), it's trivial to also just compute the modulo from the divide by `x-y*(x/y)` which is still a lot cheaper than another divide/remainer instruction)","msgtype":"m.text","formatted_body":"* (but even if the architecture doesn't have a merged div & modulo (RISC-V doesn't; ARM64 doesn't have a remainder instruction at all), it's trivial to also just compute the modulo from the divide by x-y*(x/y)<\/code> which is still a lot cheaper than another divide/remainer instruction)"}}
                    {"origin_server_ts":1696842147863,"event_id":"$PsNhCOvgONNyjedzoUfIpnbyXP3em9quvaQeJbxumyw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Do you suggest I rewrite it to compute the division, and then check by multiplication? That's easily done of course.","msgtype":"m.text"}}
                    {"origin_server_ts":1696842210748,"event_id":"$Wb_v2jnWEjEAvxrHb-Vw_8Lx-Qw6eQv-1ZA0K4T0mH4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The problem with divide is that I can't have an optimised integer path, unlike the other mathematical functions.","msgtype":"m.text"}}
                    {"origin_server_ts":1696842216680,"event_id":"$csGfKPH7-UiGtAgfK661z1tnjMCa6xvWnvQEBd93GIA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So I always need to box the result.","msgtype":"m.text"}}
                    {"origin_server_ts":1696842260368,"event_id":"$6HAd5Ez6ZzbB7IYFGIV5Gg2B8obPHGkLd57qi0HIR7Y","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$PsNhCOvgONNyjedzoUfIpnbyXP3em9quvaQeJbxumyw"}},"format":"org.matrix.custom.html","body":"it really depends on what the JVM does, which is quite annoying; the manual thing would have the best result assuming the worst of the JVM, but if the JVM is able to merge `x/y` & `x%y`, it might not be able to do so with `x-y*(x/y)`","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>it really depends on what the JVM does, which is quite annoying; the manual thing would have the best result assuming the worst of the JVM, but if the JVM is able to merge x/y<\/code> & x%y<\/code>, it might not be able to do so with x-y*(x/y)<\/code>"}}
                    {"origin_server_ts":1696842281447,"event_id":"$zdvv_eNYbL6Pao7gTyB-1HeBzfinYh2jIHs7PUP_iMI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(although the JVM is so fast that eliminating boxing often doesn't speed things up as much as you'd expect). Also, since the optimised path uses 64-bit ints, it's still slow on JS because JS doesn't have a 64-bit type.","msgtype":"m.text"}}
                    {"origin_server_ts":1696842295623,"event_id":"$9OwetZNwKEO1ICIBKCZl7UdY5O2qNgTl9QdJNFCTZwg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So the biggest performance boost is on the native Linux backend.","msgtype":"m.text"}}
                    {"origin_server_ts":1696842323730,"event_id":"$qz6Ez2fFXe4d20du3v-W03cXvD-lzrXhuY8Mhwf0Af4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$Wb_v2jnWEjEAvxrHb-Vw_8Lx-Qw6eQv-1ZA0K4T0mH4"}},"format":"org.matrix.custom.html","body":"how so? isn't it just a situation of possible overflow just like add/mul?","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>how so? isn't it just a situation of possible overflow just like add/mul?"}}
                    {"origin_server_ts":1696842333299,"event_id":"$VH03naM0K6mlxARhcvG85JEvljW2qMeigsrnSLbIW8o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The Linux version is getting better. It's getting close to only 5 times slower now.","msgtype":"m.text"}}
                    {"origin_server_ts":1696842356097,"event_id":"$2bREWl315HbhEV-FtII3BtfB5tchJUNr2dpLEkiNs5w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It only overflows to bigint, not to rational.","msgtype":"m.text"}}
                    {"origin_server_ts":1696842382686,"event_id":"$1QdunDPDfqRL3dI81OG2MURtwqR4xn73B6rVGK7aB5I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I could change that of course, but the overflow handling is written with the assumption that overflow is rare. For division, that's not the case.","msgtype":"m.text"}}
                    {"origin_server_ts":1696842414655,"event_id":"$Oe9B1esjqqzBH87LKHhUE7TicgEjHKnueYj95z9-Mfk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's because overflow handling is done through exceptions, which are zero cost in the JVM, but only when an exception is not thrown. When it's thrown, it's pretty slow.","msgtype":"m.text"}}
                    {"origin_server_ts":1696867116336,"event_id":"$hBa_4J99iOZOlFbczwY9XB9EUdPuSvTKj3vAy3s1rSo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: Question for you: I fell that I should be able to to floor/div fusing for this expression too: `⌊a⌻÷b`, which should be equivalent to `a(⌊⌻÷)b`, no?","msgtype":"m.text","formatted_body":"dzaima<\/a>: Question for you: I fell that I should be able to to floor/div fusing for this expression too: ⌊a⌻÷b<\/code>, which should be equivalent to a(⌊⌻÷)b<\/code>, no?"}}
                    {"origin_server_ts":1696867125549,"event_id":"$7Rmt1Ip3UXxXSnJrwQUgUbIq1A7e1EVj1FihI58CSDQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"dzaima: Question for you: I fell that I should be able to to floor/div fusing for this expression too: `⌊a⌻÷b`, which should be equivalent to `a⌻(⌊÷)b`, no?","msgtype":"m.text","formatted_body":"dzaima<\/a>: Question for you: I fell that I should be able to to floor/div fusing for this expression too: ⌊a⌻÷b<\/code>, which should be equivalent to a⌻(⌊÷)b<\/code>, no?"},"m.relates_to":{"event_id":"$hBa_4J99iOZOlFbczwY9XB9EUdPuSvTKj3vAy3s1rSo","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * dzaima: Question for you: I fell that I should be able to to floor/div fusing for this expression too: `⌊a⌻÷b`, which should be equivalent to `a⌻(⌊÷)b`, no?","msgtype":"m.text","formatted_body":" * dzaima<\/a>: Question for you: I fell that I should be able to to floor/div fusing for this expression too: ⌊a⌻÷b<\/code>, which should be equivalent to a⌻(⌊÷)b<\/code>, no?"}}
                    {"origin_server_ts":1696867134211,"event_id":"$JJfGEgWxzyo4mpaiDCr5j18im4UkmL_4-Uopkq0KRQ0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"dzaima: Question for you: I fell that I should be able to to floor/div fusing for this expression too: `⌊a⌻÷b`, which should be equivalent to `a(⌊÷)⌻b`, no?","msgtype":"m.text","formatted_body":"dzaima<\/a>: Question for you: I fell that I should be able to to floor/div fusing for this expression too: ⌊a⌻÷b<\/code>, which should be equivalent to a(⌊÷)⌻b<\/code>, no?"},"m.relates_to":{"event_id":"$hBa_4J99iOZOlFbczwY9XB9EUdPuSvTKj3vAy3s1rSo","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * dzaima: Question for you: I fell that I should be able to to floor/div fusing for this expression too: `⌊a⌻÷b`, which should be equivalent to `a(⌊÷)⌻b`, no?","msgtype":"m.text","formatted_body":" * dzaima<\/a>: Question for you: I fell that I should be able to to floor/div fusing for this expression too: ⌊a⌻÷b<\/code>, which should be equivalent to a(⌊÷)⌻b<\/code>, no?"}}
                    {"origin_server_ts":1696867190948,"event_id":"$QAIDXHs439o9Y5fRct8D5Qkc6_yaXerLz-jJ9fqcNKY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"That would significantly improve the implementation of `⊤`","msgtype":"m.text","formatted_body":"That would significantly improve the implementation of ⊤<\/code>"}}
                    {"origin_server_ts":1696867206562,"event_id":"$Fxp9YZ0lNG0HeT-WWM0Sxaack1hRdmvvTvC7i-OmeVU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that depends on what `⌻` is","msgtype":"m.text","formatted_body":"that depends on what ⌻<\/code> is"}}
                    {"origin_server_ts":1696867229499,"event_id":"$vFMrq2jZ3zZMWY5B3zOTekrB5rNhAJS4RMJ3SyjLIk4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"That's like `∘.÷` in APL","msgtype":"m.text","formatted_body":"That's like ∘.÷<\/code> in APL"}}
                    {"origin_server_ts":1696867259513,"event_id":"$dvZxAMV5-ndBJBjcyvK7siTksP3jvwvXmk0IjR-AfoI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"dzaima: Question for you: I fell that I should be able to to floor/div fusing for this expression too: `⌊a÷⌻b`, which should be equivalent to `a(⌊÷)⌻b`, no?","msgtype":"m.text","formatted_body":"dzaima<\/a>: Question for you: I fell that I should be able to to floor/div fusing for this expression too: ⌊a÷⌻b<\/code>, which should be equivalent to a(⌊÷)⌻b<\/code>, no?"},"m.relates_to":{"event_id":"$hBa_4J99iOZOlFbczwY9XB9EUdPuSvTKj3vAy3s1rSo","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * dzaima: Question for you: I fell that I should be able to to floor/div fusing for this expression too: `⌊a÷⌻b`, which should be equivalent to `a(⌊÷)⌻b`, no?","msgtype":"m.text","formatted_body":" * dzaima<\/a>: Question for you: I fell that I should be able to to floor/div fusing for this expression too: ⌊a÷⌻b<\/code>, which should be equivalent to a(⌊÷)⌻b<\/code>, no?"}}
                    {"origin_server_ts":1696867308487,"event_id":"$FT62kCkJYfPmh407aqJGeul20-7iaT5KbBMWCp8URvo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ah, so the original was a typo","msgtype":"m.text","formatted_body":"ah, so the original was a typo"}}
                    {"origin_server_ts":1696867408965,"event_id":"$EN7z2j2pRdfjh0maHVLpR2jWWroK7tBacA1woaVBFi8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and yeah, there are a bunch of potential ways to write a thing which does a dyadic call and then a monadic one","msgtype":"m.text","formatted_body":"and yeah, there are a bunch of potential ways to write a thing which does a dyadic call and then a monadic one"}}
                    {"origin_server_ts":1696868907073,"event_id":"$d_vD2Midgk3PL29w4ejWn1sup2MxdkWAzEeLmpPSJ-k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: OK, now `a (⌊÷) b` is optimised as well.","msgtype":"m.text","formatted_body":"dzaima<\/a>: OK, now a (⌊÷) b<\/code> is optimised as well."}}
                    {"origin_server_ts":1696868928409,"event_id":"$oGaO-SH0lgD2UAD2EYVFxUusez1PAIs3mTPeQhxqAcM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm building a framework where it's reasonably easy to add new such optimisations.","msgtype":"m.text"}}
                    {"origin_server_ts":1696868947660,"event_id":"$CYQv_8dj0LaUggUHx_ndYNXUOEtaN1K8FzcgvZpkCNg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`⌈÷` is the obvious next step, although it's much more rare.","msgtype":"m.text","formatted_body":"⌈÷<\/code> is the obvious next step, although it's much more rare."}}
                    {"origin_server_ts":1696869516292,"event_id":"$ZiTJa0XNGCyFNWEND02XVjZDGkGyGg3T-DDyaQdiZfc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Although I notice it's used in ngns implementation of quad/divide","msgtype":"m.text"}}
                    {"origin_server_ts":1696932046215,"event_id":"$XJviz7_j2W8OGLEEXoHTOrATwiVWHYRonH7jI73VxXk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Wow. That went better than expected. Runtime for my decode performance test reduced from 88 to 15 (that's almost 6 times faster) when I optimised `⌊a÷⌻b` to `a(⌊÷)⌻b`.","msgtype":"m.text","formatted_body":"Wow. That went better than expected. Runtime for my decode performance test reduced from 88 to 15 (that's almost 6 times faster) when I optimised ⌊a÷⌻b<\/code> to a(⌊÷)⌻b<\/code>."}}
                    {"origin_server_ts":1697513272411,"event_id":"$XwiAC4BldqMKQo0w_AxtdNsHkRNRZ4naZNspBOwh6gs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: How can I get rid of the clicking sound when changing note?","msgtype":"m.text","formatted_body":"Marshall<\/a>: How can I get rid of the clicking sound when changing note?"}}
                    {"origin_server_ts":1697513273065,"event_id":"$59fFLxPvo5RLdI0tVPrFis-Y1X74xypTrtQSlfDUIjw","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1697513288670,"event_id":"$icN9KPrHDkXDb4ikCPiZUhmgRi3ODQUsy1TjpD1UzTo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$59fFLxPvo5RLdI0tVPrFis-Y1X74xypTrtQSlfDUIjw","type":"m.room.redaction","content":{"redacts":"$59fFLxPvo5RLdI0tVPrFis-Y1X74xypTrtQSlfDUIjw"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                    {"origin_server_ts":1697513288670,"event_id":"$icN9KPrHDkXDb4ikCPiZUhmgRi3ODQUsy1TjpD1UzTo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$59fFLxPvo5RLdI0tVPrFis-Y1X74xypTrtQSlfDUIjw","type":"m.room.redaction","content":{"redacts":"$59fFLxPvo5RLdI0tVPrFis-Y1X74xypTrtQSlfDUIjw"}}
                    {"origin_server_ts":1697513295503,"event_id":"$mEHoiGSCtpMBHBdKsOhnwKyg7ee2ejjx9MhaitSoLPo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#audio%3Aplay%20math%3Acos%20%2C(300%2B50%C3%97%E2%8D%B35)%20%C3%97%E2%8C%BB%20(%E2%8D%B35000)%C3%B7(48000.0%C3%B7math%3Api%C3%972)","msgtype":"m.text"}}
                    {"origin_server_ts":1697523747769,"event_id":"$g-q36Idf69yX0LXLmXzOnnWk3zeIfW47mGe0pacgRMc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall, dzaima I wrote a little commentary on the difference between deriving and returning functions in the context of Kap","msgtype":"m.text","formatted_body":"Marshall<\/a>, dzaima<\/a> I wrote a little commentary on the difference between deriving and returning functions in the context of Kap"}}
                    {"origin_server_ts":1697523762617,"event_id":"$OTwqRzmpeNkUZajfYLVkUOxjoGMAL-uuo72Pj5sTjv8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Would you be willing to read it and comment as to whether it makes sense?","msgtype":"m.text"}}
                    {"origin_server_ts":1697523763193,"event_id":"$7WXMniPRh9x2l8yyPqHZ9VDykl4FC6vP5kxmzgQWJcM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://write.as/ovpivevoevqw5jut.md","msgtype":"m.text"}}
                    {"origin_server_ts":1697535668835,"event_id":"$X2qMY0jsyJdBNLKwSFwq_IhvC2t81D_uG4NrOP1gmvw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - `+/` might be, but `f/` (or, to avoid the slashes, `f¨`) most likely wouldn't be, as it has to read `f` and then make the derived function with that in mind (`f←+ ⋄ f/` and `f←× ⋄ f/` are different things). At which point the only difference is that `f/` with a function `f` is guaranteed to make a derived function, whereas calling a function may sometimes not","msgtype":"m.text","formatted_body":"haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - +/<\/code> might be, but f/<\/code> (or, to avoid the slashes, f¨<\/code>) most likely wouldn't be, as it has to read f<\/code> and then make the derived function with that in mind (f←+ ⋄ f/<\/code> and f←× ⋄ f/<\/code> are different things). At which point the only difference is that f/<\/code> with a function f<\/code> is guaranteed to make a derived function, whereas calling a function may sometimes not"}}
                    {"origin_server_ts":1697535696636,"event_id":"$jVEy-0bNreIQ7y0qSIEyS9IUpVt8jHeGAWYDHm1ZF5o","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - `+/` might be, but `f/` (or, to avoid the slashes, `f¨`) most likely wouldn't be, as it has to read `f` and then make the derived function with that in mind (`f←+ ⋄ f/` and `f←× ⋄ f/` are different things). At which point the only difference is that `f/` with a function `f` is guaranteed to make a derived function (and not even that is guaranteed in BQN), whereas calling a function may sometimes not","msgtype":"m.text","formatted_body":"haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - +/<\/code> might be, but f/<\/code> (or, to avoid the slashes, f¨<\/code>) most likely wouldn't be, as it has to read f<\/code> and then make the derived function with that in mind (f←+ ⋄ f/<\/code> and f←× ⋄ f/<\/code> are different things). At which point the only difference is that f/<\/code> with a function f<\/code> is guaranteed to make a derived function (and not even that is guaranteed in BQN), whereas calling a function may sometimes not"},"m.relates_to":{"event_id":"$X2qMY0jsyJdBNLKwSFwq_IhvC2t81D_uG4NrOP1gmvw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - `+/` might be, but `f/` (or, to avoid the slashes, `f¨`) most likely wouldn't be, as it has to read `f` and then make the derived function with that in mind (`f←+ ⋄ f/` and `f←× ⋄ f/` are different things). At which point the only difference is that `f/` with a function `f` is guaranteed to make a derived function (and not even that is guaranteed in BQN), whereas calling a function may sometimes not","msgtype":"m.text","formatted_body":"* haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - +/<\/code> might be, but f/<\/code> (or, to avoid the slashes, f¨<\/code>) most likely wouldn't be, as it has to read f<\/code> and then make the derived function with that in mind (f←+ ⋄ f/<\/code> and f←× ⋄ f/<\/code> are different things). At which point the only difference is that f/<\/code> with a function f<\/code> is guaranteed to make a derived function (and not even that is guaranteed in BQN), whereas calling a function may sometimes not"}}
                    {"origin_server_ts":1697535800131,"event_id":"$GcXZf32_ShEnie-v-gA77bwp_ZkPEReKDc-JfIGyeOk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"in BQN, feeding a modifier an operand (or, the syntax of a modifier with functions/subjects beside it), and feeding a function an argument (or, the syntax of a function followed by a subject), are exactly the same kind of thing, the only difference being the result syntactic role","msgtype":"m.text","formatted_body":"in BQN, feeding a modifier an operand (or, the syntax of a modifier with functions/subjects beside it), and feeding a function an argument (or, the syntax of a function followed by a subject), are exactly the same kind of thing, the only difference being the result syntactic role"}}
                    {"origin_server_ts":1697535818687,"event_id":"$ED-HSeFngbvXXlXpZFrHgSnFZE2l-Ugur5tJ9721oZU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"in BQN, feeding a modifier an operand (or, the syntax of a modifier with functions/subjects beside it), and feeding a function an argument (or, the syntax of a function followed by a subject), are exactly the same kind of thing, the only difference being the result syntactic role and the types that the values in question can be","msgtype":"m.text","formatted_body":"in BQN, feeding a modifier an operand (or, the syntax of a modifier with functions/subjects beside it), and feeding a function an argument (or, the syntax of a function followed by a subject), are exactly the same kind of thing, the only difference being the result syntactic role and the types that the values in question can be"},"m.relates_to":{"event_id":"$GcXZf32_ShEnie-v-gA77bwp_ZkPEReKDc-JfIGyeOk","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* in BQN, feeding a modifier an operand (or, the syntax of a modifier with functions/subjects beside it), and feeding a function an argument (or, the syntax of a function followed by a subject), are exactly the same kind of thing, the only difference being the result syntactic role and the types that the values in question can be","msgtype":"m.text","formatted_body":"* in BQN, feeding a modifier an operand (or, the syntax of a modifier with functions/subjects beside it), and feeding a function an argument (or, the syntax of a function followed by a subject), are exactly the same kind of thing, the only difference being the result syntactic role and the types that the values in question can be"}}
                    {"origin_server_ts":1697535864667,"event_id":"$1NN9-EyZcwSYTCHpOZXBiDFRg7w-UeiIeBA-X_lmnhk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"in BQN, feeding a modifier an operand (or, the syntax of a modifier with function(s)/subject(s) beside it), and feeding a function an argument (or, the syntax of a function with subject(s) subject), are exactly the same kind of thing, the only difference being the result syntactic role and the types that the values in question can be","msgtype":"m.text","formatted_body":"in BQN, feeding a modifier an operand (or, the syntax of a modifier with function(s)/subject(s) beside it), and feeding a function an argument (or, the syntax of a function with subject(s) subject), are exactly the same kind of thing, the only difference being the result syntactic role and the types that the values in question can be"},"m.relates_to":{"event_id":"$GcXZf32_ShEnie-v-gA77bwp_ZkPEReKDc-JfIGyeOk","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* in BQN, feeding a modifier an operand (or, the syntax of a modifier with function(s)/subject(s) beside it), and feeding a function an argument (or, the syntax of a function with subject(s) subject), are exactly the same kind of thing, the only difference being the result syntactic role and the types that the values in question can be","msgtype":"m.text","formatted_body":"* in BQN, feeding a modifier an operand (or, the syntax of a modifier with function(s)/subject(s) beside it), and feeding a function an argument (or, the syntax of a function with subject(s) subject), are exactly the same kind of thing, the only difference being the result syntactic role and the types that the values in question can be"}}
                    {"origin_server_ts":1697535877295,"event_id":"$U-Qbg-mvqA732FGII4YsXz2F2ut204ZJRoZFxaumzbg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"in BQN, feeding a modifier an operand (or, the syntax of a modifier with function(s)/subject(s) beside it), and feeding a function an argument (or, the syntax of a function with subject(s) beside it), are exactly the same kind of thing, the only difference being the result syntactic role and the types that the values in question can be","msgtype":"m.text","formatted_body":"in BQN, feeding a modifier an operand (or, the syntax of a modifier with function(s)/subject(s) beside it), and feeding a function an argument (or, the syntax of a function with subject(s) beside it), are exactly the same kind of thing, the only difference being the result syntactic role and the types that the values in question can be"},"m.relates_to":{"event_id":"$GcXZf32_ShEnie-v-gA77bwp_ZkPEReKDc-JfIGyeOk","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* in BQN, feeding a modifier an operand (or, the syntax of a modifier with function(s)/subject(s) beside it), and feeding a function an argument (or, the syntax of a function with subject(s) beside it), are exactly the same kind of thing, the only difference being the result syntactic role and the types that the values in question can be","msgtype":"m.text","formatted_body":"* in BQN, feeding a modifier an operand (or, the syntax of a modifier with function(s)/subject(s) beside it), and feeding a function an argument (or, the syntax of a function with subject(s) beside it), are exactly the same kind of thing, the only difference being the result syntactic role and the types that the values in question can be"}}
                    {"origin_server_ts":1697535894912,"event_id":"$x-GHJsic9ZKOnapqg656xSs_9WLOEqSf7R2t75R5vYc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"in BQN, feeding a modifier an operand (or, the syntax of a modifier with function(s)/subject(s) beside it), and feeding a function an argument (or, the syntax of a function with subject(s) beside it), can both do the same things (i.e. anything), the only difference being the result syntactic role and the types that the values in question can be","msgtype":"m.text","formatted_body":"in BQN, feeding a modifier an operand (or, the syntax of a modifier with function(s)/subject(s) beside it), and feeding a function an argument (or, the syntax of a function with subject(s) beside it), can both do the same things (i.e. anything), the only difference being the result syntactic role and the types that the values in question can be"},"m.relates_to":{"event_id":"$GcXZf32_ShEnie-v-gA77bwp_ZkPEReKDc-JfIGyeOk","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* in BQN, feeding a modifier an operand (or, the syntax of a modifier with function(s)/subject(s) beside it), and feeding a function an argument (or, the syntax of a function with subject(s) beside it), can both do the same things (i.e. anything), the only difference being the result syntactic role and the types that the values in question can be","msgtype":"m.text","formatted_body":"* in BQN, feeding a modifier an operand (or, the syntax of a modifier with function(s)/subject(s) beside it), and feeding a function an argument (or, the syntax of a function with subject(s) beside it), can both do the same things (i.e. anything), the only difference being the result syntactic role and the types that the values in question can be"}}
                    {"origin_server_ts":1697535963009,"event_id":"$XL0omvMCdUO7Up8G7GeUytnPJjLJ9c13vVhVnE0h5ZQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - `+/` might be, but `f/` (or, to avoid the slashes, `f¨`) most likely wouldn't be, as it has to read `f` and then make the derived function with that in mind (`f←+ ⋄ f/` and `f←× ⋄ f/` are different things). At which point the only difference is that `f/` with a function `f` is guaranteed to make a derived function, whereas calling a function can do arbitrary things (and BQN doesn't even guarantee these)","msgtype":"m.text","formatted_body":"haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - +/<\/code> might be, but f/<\/code> (or, to avoid the slashes, f¨<\/code>) most likely wouldn't be, as it has to read f<\/code> and then make the derived function with that in mind (f←+ ⋄ f/<\/code> and f←× ⋄ f/<\/code> are different things). At which point the only difference is that f/<\/code> with a function f<\/code> is guaranteed to make a derived function, whereas calling a function can do arbitrary things (and BQN doesn't even guarantee these)"},"m.relates_to":{"event_id":"$X2qMY0jsyJdBNLKwSFwq_IhvC2t81D_uG4NrOP1gmvw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - `+/` might be, but `f/` (or, to avoid the slashes, `f¨`) most likely wouldn't be, as it has to read `f` and then make the derived function with that in mind (`f←+ ⋄ f/` and `f←× ⋄ f/` are different things). At which point the only difference is that `f/` with a function `f` is guaranteed to make a derived function, whereas calling a function can do arbitrary things (and BQN doesn't even guarantee these)","msgtype":"m.text","formatted_body":"* haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - +/<\/code> might be, but f/<\/code> (or, to avoid the slashes, f¨<\/code>) most likely wouldn't be, as it has to read f<\/code> and then make the derived function with that in mind (f←+ ⋄ f/<\/code> and f←× ⋄ f/<\/code> are different things). At which point the only difference is that f/<\/code> with a function f<\/code> is guaranteed to make a derived function, whereas calling a function can do arbitrary things (and BQN doesn't even guarantee these)"}}
                    {"origin_server_ts":1697536011091,"event_id":"$WxOgtGUuhx-YBrMuw81fU6K9TK1JIS5khBje-dU6fRQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - `+/` might be, but `f/` (or, to avoid the slashes, `f¨`) most likely wouldn't be, as it has to read `f` and then make the derived function with that in mind (`f←+ ⋄ f/` and `f←× ⋄ f/` are different things). At which point the only difference is that `f/` with a function `f` is guaranteed to make a derived function, whereas calling a function can do arbitrary things (and BQN doesn't even guarantee these with its immediate modifiers)","msgtype":"m.text","formatted_body":"haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - +/<\/code> might be, but f/<\/code> (or, to avoid the slashes, f¨<\/code>) most likely wouldn't be, as it has to read f<\/code> and then make the derived function with that in mind (f←+ ⋄ f/<\/code> and f←× ⋄ f/<\/code> are different things). At which point the only difference is that f/<\/code> with a function f<\/code> is guaranteed to make a derived function, whereas calling a function can do arbitrary things (and BQN doesn't even guarantee these with its immediate modifiers)"},"m.relates_to":{"event_id":"$X2qMY0jsyJdBNLKwSFwq_IhvC2t81D_uG4NrOP1gmvw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - `+/` might be, but `f/` (or, to avoid the slashes, `f¨`) most likely wouldn't be, as it has to read `f` and then make the derived function with that in mind (`f←+ ⋄ f/` and `f←× ⋄ f/` are different things). At which point the only difference is that `f/` with a function `f` is guaranteed to make a derived function, whereas calling a function can do arbitrary things (and BQN doesn't even guarantee these with its immediate modifiers)","msgtype":"m.text","formatted_body":"* haven't (yet) listened to the arraycast, so can't comment much, but: deriving a function can't always be completely parse-time - +/<\/code> might be, but f/<\/code> (or, to avoid the slashes, f¨<\/code>) most likely wouldn't be, as it has to read f<\/code> and then make the derived function with that in mind (f←+ ⋄ f/<\/code> and f←× ⋄ f/<\/code> are different things). At which point the only difference is that f/<\/code> with a function f<\/code> is guaranteed to make a derived function, whereas calling a function can do arbitrary things (and BQN doesn't even guarantee these with its immediate modifiers)"}}
                    {"origin_server_ts":1697536204268,"event_id":"$e1AtmEfSHoLbHxGqhuQe2w2G06gQ4rzNetFPQc6zURQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n   F ← {\u2022Show \"hello i am arbitrary code\" ⋄ 1+𝕩}\n(function block)\n   F 2\n\"hello i am arbitrary code\"\n3\n   _m1 ← {\u2022Show \"hello i am arbitrary code\" ⋄ 1+𝔽}\n(1-modifier block)\n   ÷ _m1\n\"hello i am arbitrary code\"\n1+÷\n```","msgtype":"m.text","formatted_body":"
                       F ← {\u2022Show "hello i am arbitrary code" ⋄ 1+𝕩}\n(function block)\n   F 2\n"hello i am arbitrary code"\n3\n   _m1 ← {\u2022Show "hello i am arbitrary code" ⋄ 1+𝔽}\n(1-modifier block)\n   ÷ _m1\n"hello i am arbitrary code"\n1+÷<\/code><\/pre>"}}
                    {"origin_server_ts":1697538239436,"event_id":"$MeIo0Bhp5kaleyngLA1zlrYDq2FX4kVHbWHs18SToN0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Wait, how does line 8 know that the function should be executed and not just used as a value?","msgtype":"m.text"}}
                    {"origin_server_ts":1697538512173,"event_id":"$H_8uJdHgb4n5iqjB5iB7dDdkYjA8I_1KxdaKKtxLLXY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's what an immediate modifier block does - it's executed upon being given operands, not arguments. see [this](https://mlochbaum.github.io/BQN/try.html#code=RiDihpAgNHvwnZWX4oC/8J2Vl30g4ouEIEcg4oaQIDR78J2Vl+KAv/CdlZfigL/wnZWpfSDii4Qg4p+oRiwgRywgRyAz4p+p) (a modifier block that doesn't contain any `𝕨`/`𝕩` or a header requiring such is such an immediate block)","msgtype":"m.text","formatted_body":"that's what an immediate modifier block does - it's executed upon being given operands, not arguments. see this<\/a> (a modifier block that doesn't contain any 𝕨<\/code>/𝕩<\/code> or a header requiring such is such an immediate block)"}}
                    {"origin_server_ts":1697538530443,"event_id":"$nxZ2PJcZYiMyoq11JLrw9K4nf8XGPpe0QpF_2PK619U","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"that's what an immediate modifier block does - it's executed upon being given operands, not arguments. see [this](https://mlochbaum.github.io/BQN/try.html#code=RiDihpAgNHvwnZWX4oC/8J2Vl30KRyDihpAgNHvwnZWX4oC/8J2Vl+KAv/Cdlal9CuKfqEYsIEcsIEcgM+KfqQ==) (a modifier block that doesn't contain any `𝕨`/`𝕩` or a header requiring such is such an immediate block)","msgtype":"m.text","formatted_body":"that's what an immediate modifier block does - it's executed upon being given operands, not arguments. see this<\/a> (a modifier block that doesn't contain any 𝕨<\/code>/𝕩<\/code> or a header requiring such is such an immediate block)"},"m.relates_to":{"event_id":"$H_8uJdHgb4n5iqjB5iB7dDdkYjA8I_1KxdaKKtxLLXY","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* that's what an immediate modifier block does - it's executed upon being given operands, not arguments. see [this](https://mlochbaum.github.io/BQN/try.html#code=RiDihpAgNHvwnZWX4oC/8J2Vl30KRyDihpAgNHvwnZWX4oC/8J2Vl+KAv/Cdlal9CuKfqEYsIEcsIEcgM+KfqQ==) (a modifier block that doesn't contain any `𝕨`/`𝕩` or a header requiring such is such an immediate block)","msgtype":"m.text","formatted_body":"* that's what an immediate modifier block does - it's executed upon being given operands, not arguments. see this<\/a> (a modifier block that doesn't contain any 𝕨<\/code>/𝕩<\/code> or a header requiring such is such an immediate block)"}}
                    {"origin_server_ts":1697538734697,"event_id":"$RWKY42fAJKhUBpX7K4BVNm0CTK2HTATvx4X6hKaHy5o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: I don't fully understand that one. How would you rewrite my example, basically `foo ⇐ { x←⍵ ⋄ λ{x+⍵} } ⋄ (foo 2) (foo 3)`, in BQN?","msgtype":"m.text","formatted_body":"dzaima<\/a>: I don't fully understand that one. How would you rewrite my example, basically foo ⇐ { x←⍵ ⋄ λ{x+⍵} } ⋄ (foo 2) (foo 3)<\/code>, in BQN?"}}
                    {"origin_server_ts":1697538773515,"event_id":"$DQKqH0MGbs4aVh6Xo9IuBvlDGdwA-IuavIFqXbZNLGs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's just `Foo ← {v←𝕩 ⋄ {v+𝕩}} ⋄ ⟨Foo 2, Foo 3⟩`","msgtype":"m.text","formatted_body":"that's just Foo ← {v←𝕩 ⋄ {v+𝕩}} ⋄ ⟨Foo 2, Foo 3⟩<\/code>"}}
                    {"origin_server_ts":1697538940316,"event_id":"$GZD6O2yF7omNbm3UaDGY9cwBOw_I1DI1HS2nYvAqNVk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Assuming the result of that expression has been assigned to `x`, How do I call the function in `0 ⊏ x`?","msgtype":"m.text","formatted_body":"Assuming the result of that expression has been assigned to x<\/code>, How do I call the function in 0 ⊏ x<\/code>?"}}
                    {"origin_server_ts":1697538985374,"event_id":"$023vXJ8UQF1KvNzrXMQ0W08Tx1vK1rs2V5XWpbyGtpc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(`0 ⊑ x`, otherwise the result will be enclosed) there are a couple options, e.g. `g ← 0⊑x ⋄ G 123` or `{𝕏 123} 0⊑x`","msgtype":"m.text","formatted_body":"(0 ⊑ x<\/code>, otherwise the result will be enclosed) there are a couple options, e.g. g ← 0⊑x ⋄ G 123<\/code> or {𝕏 123} 0⊑x<\/code>"}}
                    {"origin_server_ts":1697539138351,"event_id":"$0UkYC9Ih5p6-DlpjcQIcX-auhJ9FEOESeNSCvChDPX8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh I see","msgtype":"m.text"}}
                    {"origin_server_ts":1697539143669,"event_id":"$R3DQLd49Vd22aIqUzIkMqnYLPyLp6mit09Dv18pImxY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks, now it's clear.","msgtype":"m.text"}}
                    {"origin_server_ts":1697539181372,"event_id":"$S6l1gXlrJBxbk3VQjXbkMt6LU77M4m1dKiAxucHpVfU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'm not overly proud of my `⍞` syntax for function application, but I don't know a better way.","msgtype":"m.text","formatted_body":"I'm not overly proud of my ⍞<\/code> syntax for function application, but I don't know a better way."}}
                    {"origin_server_ts":1697539195954,"event_id":"$NZelt_wGdM-JRHVemOq9XPFe6wDzUnvB3PQ_62vn7xk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(another fun one: `⊢∘(0⊑x) 123` - that's the same as `g←0⊑x ⋄ ⊢∘g 123`, which is the same as `g←0⊑x ⋄ ⊢∘G 123` which is trivially equivalent to `g←0⊑x ⋄ G 123`)","msgtype":"m.text","formatted_body":"(another fun one: ⊢∘(0⊑x) 123<\/code> - that's the same as g←0⊑x ⋄ ⊢∘g 123<\/code>, which is the same as g←0⊑x ⋄ ⊢∘G 123<\/code> which is trivially equivalent to g←0⊑x ⋄ G 123<\/code>)"}}
                    {"origin_server_ts":1697539307120,"event_id":"$NgTxt9dn8LuExScEzCnSnWnO2QR8yLYBWKxJ6QYyoTg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh wow","msgtype":"m.text"}}
                    {"origin_server_ts":1697539352338,"event_id":"$LH0O505M4fU5NhnCXNyLXLob4Dv8u9B2Hup-K52qYe0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"on the modifier/operator/deriving thing - another way to phrase it might be that `(÷x)` is as \"parse-time\" as `(F¨)` - both can be parsed to some extent (former - a function call, latter - a deriving operation), but the resulting value is still dependent on runtime properties","msgtype":"m.text","formatted_body":"on the modifier/operator/deriving thing - another way to phrase it might be that (÷x)<\/code> is as \"parse-time\" as (F¨)<\/code> - both can be parsed to some extent (former - a function call, latter - a deriving operation), but the resulting value is still dependent on runtime properties"}}
                    {"origin_server_ts":1697539366257,"event_id":"$fHsFEVlARoreAkYJ7Tql_pJrn2p1Ko1pR4WfrxPhxX8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"on the modifier/operator/deriving thing - another way to phrase it might be that `(÷x)` is as \"parse-time\" as `(F¨)` - both can be parsed to some extent (former - a function call, latter - a deriving operation), but the resulting value is still dependent on runtime values","msgtype":"m.text","formatted_body":"on the modifier/operator/deriving thing - another way to phrase it might be that (÷x)<\/code> is as \"parse-time\" as (F¨)<\/code> - both can be parsed to some extent (former - a function call, latter - a deriving operation), but the resulting value is still dependent on runtime values"},"m.relates_to":{"event_id":"$LH0O505M4fU5NhnCXNyLXLob4Dv8u9B2Hup-K52qYe0","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* on the modifier/operator/deriving thing - another way to phrase it might be that `(÷x)` is as \"parse-time\" as `(F¨)` - both can be parsed to some extent (former - a function call, latter - a deriving operation), but the resulting value is still dependent on runtime values","msgtype":"m.text","formatted_body":"* on the modifier/operator/deriving thing - another way to phrase it might be that (÷x)<\/code> is as \"parse-time\" as (F¨)<\/code> - both can be parsed to some extent (former - a function call, latter - a deriving operation), but the resulting value is still dependent on runtime values"}}
                    {"origin_server_ts":1697539450827,"event_id":"$QLPjSSByP7aD4U77ShdzkRc2TjNgcLWO80PGGIje4xw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: Sure, and many optimisations in compilers is all about moving things to parse/compilation time from runtime.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Sure, and many optimisations in compilers is all about moving things to parse/compilation time from runtime."}}
                    {"origin_server_ts":1697539494992,"event_id":"$Qtb-j4UNBo879x7DNjSZpPhnhrUoGIZPJGi8T0amfng","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I wanted to limit the discussion to cover only what was discussed in the episode.","msgtype":"m.text"}}
                    {"origin_server_ts":1697539534733,"event_id":"$tGOqp3Eh9enorP4nIhAKxqoZnLjRrrc7N6q1wSKYx78","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`+/` is as \"entirely parse-time\" as `÷4`","msgtype":"m.text","formatted_body":"+/<\/code> is as \"entirely parse-time\" as ÷4<\/code>"}}
                    {"origin_server_ts":1697539547356,"event_id":"$mTP-n0IsRcq3rQpIYrxBjQ-TA_eYciR8Gp_jdEYulbo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"`+/` is as \"entirely/compilation parse-time\" as `÷4`","msgtype":"m.text","formatted_body":"+/<\/code> is as \"entirely/compilation parse-time\" as ÷4<\/code>"},"m.relates_to":{"event_id":"$tGOqp3Eh9enorP4nIhAKxqoZnLjRrrc7N6q1wSKYx78","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* `+/` is as \"entirely/compilation parse-time\" as `÷4`","msgtype":"m.text","formatted_body":"* +/<\/code> is as \"entirely/compilation parse-time\" as ÷4<\/code>"}}
                    {"origin_server_ts":1697539550860,"event_id":"$W5J_dcllnjZ3BCGkVVczhfie7MQpLQp6JLpbEjxqais","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"`+/` is as \"entirely/compilation parse-time\" as `÷2`","msgtype":"m.text","formatted_body":"+/<\/code> is as \"entirely/compilation parse-time\" as ÷2<\/code>"},"m.relates_to":{"event_id":"$tGOqp3Eh9enorP4nIhAKxqoZnLjRrrc7N6q1wSKYx78","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* `+/` is as \"entirely/compilation parse-time\" as `÷2`","msgtype":"m.text","formatted_body":"* +/<\/code> is as \"entirely/compilation parse-time\" as ÷2<\/code>"}}
                    {"origin_server_ts":1697539562841,"event_id":"$aGVM9EZN5uMl1QhSvjWrM68rBklll5vw_r6ezjXXG3w","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"`+/` is as \"entirely parse/compilation-time\" as `÷2`","msgtype":"m.text","formatted_body":"+/<\/code> is as \"entirely parse/compilation-time\" as ÷2<\/code>"},"m.relates_to":{"event_id":"$tGOqp3Eh9enorP4nIhAKxqoZnLjRrrc7N6q1wSKYx78","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* `+/` is as \"entirely parse/compilation-time\" as `÷2`","msgtype":"m.text","formatted_body":"* +/<\/code> is as \"entirely parse/compilation-time\" as ÷2<\/code>"}}
                    {"origin_server_ts":1697540407775,"event_id":"$-ENyBKHmzqLS8WNY8WAJb5OjK3gJ-mpTQCn17nA4py0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Sure, but the parse phase yields two different things. The former is a function instance and the other is an expression. ","msgtype":"m.text"}}
                    {"origin_server_ts":1697540498376,"event_id":"$IJzqNqYPKzFzfgFhaBPuC3XnbdCk46hgoeHKXeFxdIY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Jyst to clarify. I'm talking about different syntactic elements oon the level of the parser, rather than datatypes.","msgtype":"m.text"}}
                    {"origin_server_ts":1697540508623,"event_id":"$qVWAGlpscoLK_6WmQHcrdAWg8qlsEJirYsOVjOS_uGg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Jyst to clarify. I'm talking about different syntactic elements on the level of the parser, rather than datatypes.","msgtype":"m.text"},"m.relates_to":{"event_id":"$IJzqNqYPKzFzfgFhaBPuC3XnbdCk46hgoeHKXeFxdIY","rel_type":"m.replace"},"body":"* Jyst to clarify. I'm talking about different syntactic elements on the level of the parser, rather than datatypes.","msgtype":"m.text"}}
                    {"origin_server_ts":1697540511531,"event_id":"$z8yvLpUS0KL2cFQZ_iq_WlTCmylV21x7ZmyEJheD7mo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`÷2` could be compiled to `0.5`, in which case it would be just a value instance","msgtype":"m.text","formatted_body":"÷2<\/code> could be compiled to 0.5<\/code>, in which case it would be just a value instance"}}
                    {"origin_server_ts":1697540651297,"event_id":"$CpWVDEYDHLedRyM-FSVU-jtKtcw2l52KQeOmpO142Ww","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the simple way to compile `+/` is to \"load /; load ÷; derive function\". The simple way to compile `÷2` is to \"load 2; load ÷; call function\". The optimized way to compile `+/` is to \"load +/\". The optimized way to compile `÷2` is to \"load 0.5\"","msgtype":"m.text","formatted_body":"the simple way to compile +/<\/code> is to \"load /; load ÷; derive function\". The simple way to compile ÷2<\/code> is to \"load 2; load ÷; call function\". The optimized way to compile +/<\/code> is to \"load +/\". The optimized way to compile ÷2<\/code> is to \"load 0.5\""}}
                    {"origin_server_ts":1697540680840,"event_id":"$FDuzHiZJZy1034OasY-Jq9tB-2YvM7UdmYvPNQznQa8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"the simple way to compile `+/` is to \"load `/`; load `÷`; derive function\". The simple way to compile `÷2` is to \"load `2`; load `÷`; call function\". The optimized way to compile `+/` is to \"load `+/`\". The optimized way to compile `÷2` is to \"load `0.5`\".","msgtype":"m.text","formatted_body":"the simple way to compile +/<\/code> is to \"load /<\/code>; load ÷<\/code>; derive function\". The simple way to compile ÷2<\/code> is to \"load 2<\/code>; load ÷<\/code>; call function\". The optimized way to compile +/<\/code> is to \"load +/<\/code>\". The optimized way to compile ÷2<\/code> is to \"load 0.5<\/code>\"."},"m.relates_to":{"event_id":"$CpWVDEYDHLedRyM-FSVU-jtKtcw2l52KQeOmpO142Ww","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* the simple way to compile `+/` is to \"load `/`; load `÷`; derive function\". The simple way to compile `÷2` is to \"load `2`; load `÷`; call function\". The optimized way to compile `+/` is to \"load `+/`\". The optimized way to compile `÷2` is to \"load `0.5`\".","msgtype":"m.text","formatted_body":"* the simple way to compile +/<\/code> is to \"load /<\/code>; load ÷<\/code>; derive function\". The simple way to compile ÷2<\/code> is to \"load 2<\/code>; load ÷<\/code>; call function\". The optimized way to compile +/<\/code> is to \"load +/<\/code>\". The optimized way to compile ÷2<\/code> is to \"load 0.5<\/code>\"."}}
                    {"origin_server_ts":1697540706249,"event_id":"$s4a2jsZbBpg_Ss9RhaO9f9YnqKHo7vUY-AIqUagl0_8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"the simple way to compile `+/` is to \"load `/`; load `+`; derive function\". The simple way to compile `÷2` is to \"load `2`; load `÷`; call function\". The optimized way to compile `+/` is to \"load `+/`\". The optimized way to compile `÷2` is to \"load `0.5`\".","msgtype":"m.text","formatted_body":"the simple way to compile +/<\/code> is to \"load /<\/code>; load +<\/code>; derive function\". The simple way to compile ÷2<\/code> is to \"load 2<\/code>; load ÷<\/code>; call function\". The optimized way to compile +/<\/code> is to \"load +/<\/code>\". The optimized way to compile ÷2<\/code> is to \"load 0.5<\/code>\"."},"m.relates_to":{"event_id":"$CpWVDEYDHLedRyM-FSVU-jtKtcw2l52KQeOmpO142Ww","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* the simple way to compile `+/` is to \"load `/`; load `+`; derive function\". The simple way to compile `÷2` is to \"load `2`; load `÷`; call function\". The optimized way to compile `+/` is to \"load `+/`\". The optimized way to compile `÷2` is to \"load `0.5`\".","msgtype":"m.text","formatted_body":"* the simple way to compile +/<\/code> is to \"load /<\/code>; load +<\/code>; derive function\". The simple way to compile ÷2<\/code> is to \"load 2<\/code>; load ÷<\/code>; call function\". The optimized way to compile +/<\/code> is to \"load +/<\/code>\". The optimized way to compile ÷2<\/code> is to \"load 0.5<\/code>\"."}}
                    {"origin_server_ts":1697540917289,"event_id":"$skRnwGrdqXAU7jKTGnC6YfPOV0UMI-mE0w3HNr_xojg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"there's nothing different between those at the parse/compile level - in the general case you need code to generate the result at runtime, but sometimes you can constant-fold the result at compile-time","msgtype":"m.text","formatted_body":"there's nothing different between those at the parse/compile level - in the general case you need code to generate the result at runtime, but sometimes you can constant-fold the result at compile-time"}}
                    {"origin_server_ts":1697542897731,"event_id":"$oo4Uvc18x0hZI4o8kpMWi5w09AlUXlghUv2UMjtJQYw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$z8yvLpUS0KL2cFQZ_iq_WlTCmylV21x7ZmyEJheD7mo"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> `÷2` could be compiled to `0.5`, in which case it would be just a value instance\n\nValues are expressions ","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    ÷2<\/code> could be compiled to 0.5<\/code>, in which case it would be just a value instance<\/blockquote><\/mx-reply>Values are expressions"}} {"origin_server_ts":1697542909043,"event_id":"$zeFBPc2qwYeivdZlfF31uY3hgk2vlQnPigjZmM4bw4g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The difference is semantic. ","msgtype":"m.text"}} {"origin_server_ts":1697543090105,"event_id":"$T2HPctAlHL50sBPF1_dbHg67H9rGSu1NYK-YUVQiseo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"is `+/` not an expression...?","msgtype":"m.text","formatted_body":"is +/<\/code> not an expression...?"}} {"origin_server_ts":1697543103087,"event_id":"$PlaHkydamz7nMbu2xrVF7kAUOBejpddz8ZNllM3j9g0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No. It's a bare function. ","msgtype":"m.text"}} {"origin_server_ts":1697543117337,"event_id":"$mD_g_3b4EA9NEVshMKmIwcjxJBrSwcfK2pjDeo0YvJw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Prefix it with a lambda abd it becomes an expression. ","msgtype":"m.text"}} {"origin_server_ts":1697543133294,"event_id":"$qP5jV8d9vtnBt8WXCzuYfgiL4SQYWa5aUBtpSbl-Y5M","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"is `((÷2)+⊢)/` an expression?","msgtype":"m.text","formatted_body":"is ((÷2)+⊢)/<\/code> an expression?"}} {"origin_server_ts":1697543227775,"event_id":"$hWxMY4VkaSHbENw33gXWGDDiTpszw04K3WPeqfFeXH4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No. It's also a bare function ","msgtype":"m.text"}} {"origin_server_ts":1697543265656,"event_id":"$woUxkq36QxBKAeLM0T7H0bfmViN21H8l6HGX0DhLBr8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'd definitely absolutely call `+/` and `((÷2)+⊢)/` expressions, just whose result is a function role, not subject","msgtype":"m.text","formatted_body":"I'd definitely absolutely call +/<\/code> and ((÷2)+⊢)/<\/code> expressions, just whose result is a function role, not subject"}} {"origin_server_ts":1697543267185,"event_id":"$9z8bkMM4T_mhSA9Lt3RWkp8WOySxNFQz6B2B8hC8mLQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Basically an expression is anything that can go to the right of the left arrow","msgtype":"m.text"}} {"origin_server_ts":1697543283884,"event_id":"$4q61h6JXoFq7pcpULCY93cDhy13982A539Ygbxj8fVU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Functions are things that go to the right of a double left arrow","msgtype":"m.text"}} {"origin_server_ts":1697543293507,"event_id":"$_6AftVffKXVUeMkxqIHvOt0PwHa7WC5BqsEsmR2P7EA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"well, that's KAP","msgtype":"m.text","formatted_body":"well, that's KAP"}} {"origin_server_ts":1697543296293,"event_id":"$wgGvIfVcz_fSrV46HL3VhI_9__tf5pEDTy8mMsax6V8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"well, that's Kap","msgtype":"m.text","formatted_body":"well, that's Kap"},"m.relates_to":{"event_id":"$_6AftVffKXVUeMkxqIHvOt0PwHa7WC5BqsEsmR2P7EA","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* well, that's Kap","msgtype":"m.text","formatted_body":"* well, that's Kap"}} {"origin_server_ts":1697543337570,"event_id":"$pfHzlYAFh1ieL4vw6kQUj2x0In51ZF6vNodgwY_bF1M","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"in dzaima/APL, `{+/ ⋄ f←+/ ⋄ ⍵+1} 2` is a fully legal block that doesn't end up using the `+/`es for anything, and returns `2+1`","msgtype":"m.text","formatted_body":"in dzaima/APL, {+/ ⋄ f←+/ ⋄ ⍵+1} 2<\/code> is a fully legal block that doesn't end up using the +/<\/code>es for anything, and returns 2+1<\/code>"}} {"origin_server_ts":1697543352818,"event_id":"$-Q1wYFXLaRcvUKSEA9xPD7jF6C8v2LxcRYoCHPx-xn0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Indeed. In apl the difference is very fuzzy. In kap it's cery clear.","msgtype":"m.text"}} {"origin_server_ts":1697543406100,"event_id":"$JHfBX-IBk_Hj_P3RpFv0ti_SKPjXPR5beWpSoX_s8V8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"in a Dyalog APL tradfn, you can also have a statement of an uninvoked `+/` just fine","msgtype":"m.text","formatted_body":"in a Dyalog APL tradfn, you can also have a statement of an uninvoked +/<\/code> just fine"}} {"origin_server_ts":1697543412749,"event_id":"$J4IyHJusQSVCtR-Hz9VMUOoJxtfPbmN9UcL_n7Q0Whc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That expression is an expression in kap too. The 2 to the right of the thing is what makes it into an expression. It also doesn't use the +/","msgtype":"m.text"}} {"origin_server_ts":1697543423662,"event_id":"$oyAbM0qX1fdu9892aCfKwU52I7ailyr9Jct7zlJg-EM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"is a function pointer in C an expression?","msgtype":"m.text","formatted_body":"is a function pointer in C an expression?"}} {"origin_server_ts":1697543430760,"event_id":"$GJvB3urLAVMaKT24aDFo8mHX7WKnMZppxz22X6H5Vm8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"is reading a variable of a function pointer in C an expression?","msgtype":"m.text","formatted_body":"is reading a variable of a function pointer in C an expression?"},"m.relates_to":{"event_id":"$oyAbM0qX1fdu9892aCfKwU52I7ailyr9Jct7zlJg-EM","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* is reading a variable of a function pointer in C an expression?","msgtype":"m.text","formatted_body":"* is reading a variable of a function pointer in C an expression?"}} {"origin_server_ts":1697543434626,"event_id":"$uXYQqV38G3asCyhY7FPbI-0xvsudaTUgd5OIZnPtAng","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Although the left arrow need to be a double left arrow","msgtype":"m.text"}} {"origin_server_ts":1697543489708,"event_id":"$lZKMo0P27HoJnEUvgsbaS_jaULynw_NHZqltybjJ-ZI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"fwiw, [BQN](https://mlochbaum.github.io/BQN/spec/grammar.html) pretty clearly defines function role things as expressions (`EXPR = subExpr | FuncExpr | _m1Expr | _m2Expr_`)","msgtype":"m.text","formatted_body":"fwiw,
                    BQN<\/a> pretty clearly defines function role things as expressions (EXPR = subExpr | FuncExpr | _m1Expr | _m2Expr_<\/code>)"}} {"origin_server_ts":1697543522662,"event_id":"$DwLiouz4eGpp8Bd2vWvNFjWdrmWqAOu8RBsoLH5D5Y8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I could in principle have chosen to make the the left arrow do syntactically different things depending on if the thing to the right is ancompile time function or expression but that would have made the syntax confusing. ","msgtype":"m.text"}} {"origin_server_ts":1697543550559,"event_id":"$MXzTDnce2eKB0Gce3qA9A8eiXgsKWavrpxRYQewEHTk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. BQN is much more clear.","msgtype":"m.text"}} {"origin_server_ts":1697543553780,"event_id":"$n_UKjEajxEA1c1ejorQtPjac2tHjv_65grvc79TUmNw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`+/` and `÷2` are certainly different classes of \"thing\", but that difference needn't be in whether it's an \"expression\"","msgtype":"m.text","formatted_body":"+/<\/code> and ÷2<\/code> are certainly different classes of \"thing\", but that difference needn't be in whether it's an \"expression\""}} {"origin_server_ts":1697543562117,"event_id":"$dtLce66BMiTZTYreFLACraiJbycHsFeN9rtFrS-wP3U","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"`+/` and `÷2` are certainly different classes of \"thing\" to some extent, but that difference needn't be in whether it's an \"expression\"","msgtype":"m.text","formatted_body":"+/<\/code> and ÷2<\/code> are certainly different classes of \"thing\" to some extent, but that difference needn't be in whether it's an \"expression\""},"m.relates_to":{"event_id":"$n_UKjEajxEA1c1ejorQtPjac2tHjv_65grvc79TUmNw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* `+/` and `÷2` are certainly different classes of \"thing\" to some extent, but that difference needn't be in whether it's an \"expression\"","msgtype":"m.text","formatted_body":"* +/<\/code> and ÷2<\/code> are certainly different classes of \"thing\" to some extent, but that difference needn't be in whether it's an \"expression\""}} {"origin_server_ts":1697543631717,"event_id":"$KvZpYBF4XTyT_BgSt-8r9YhWrjG_2qS1afEbGVw9-1Q","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[wikipedia of \"expression\"](https://en.wikipedia.org/wiki/Expression_(computer_science)) - \"an expression is a syntactic entity in a programming language that may be evaluated to determine its value\" - `((÷2)+⊢)/` is a syntactic entity, in a programming language, which can be evaluated, and which then gets a determined value","msgtype":"m.text","formatted_body":"wikipedia of \"expression\"<\/a>) - \"an expression is a syntactic entity in a programming language that may be evaluated to determine its value\" - ((÷2)+⊢)/<\/code> is a syntactic entity, in a programming language, which can be evaluated, and which then gets a determined value"}} {"origin_server_ts":1697543674899,"event_id":"$3GL1warJ2FdhXn-_-XAe5_yXIntALhpl-8y1ap9LEds","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"[wikipedia of \"expression\"](https://en.wikipedia.org/wiki/Expression_(computer_science%29) - \"an expression is a syntactic entity in a programming language that may be evaluated to determine its value\" - `((÷2)+⊢)/` is a syntactic entity, in a programming language, which can be evaluated, and which then gets a determined value","msgtype":"m.text","formatted_body":"wikipedia of \"expression\"<\/a> - \"an expression is a syntactic entity in a programming language that may be evaluated to determine its value\" - ((÷2)+⊢)/<\/code> is a syntactic entity, in a programming language, which can be evaluated, and which then gets a determined value"},"m.relates_to":{"event_id":"$KvZpYBF4XTyT_BgSt-8r9YhWrjG_2qS1afEbGVw9-1Q","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* [wikipedia of \"expression\"](https://en.wikipedia.org/wiki/Expression_(computer_science%29) - \"an expression is a syntactic entity in a programming language that may be evaluated to determine its value\" - `((÷2)+⊢)/` is a syntactic entity, in a programming language, which can be evaluated, and which then gets a determined value","msgtype":"m.text","formatted_body":"* wikipedia of \"expression\"<\/a> - \"an expression is a syntactic entity in a programming language that may be evaluated to determine its value\" - ((÷2)+⊢)/<\/code> is a syntactic entity, in a programming language, which can be evaluated, and which then gets a determined value"}} {"origin_server_ts":1697543705304,"event_id":"$qIXTmBWHzC7keFHZxykgRG9w3vuaJqVZveTnbh_Y2j8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In apl, the definition of calue is somewhat imprecise. I'd say that at least a value should be something you can put in an array, which is not the case in apl.","msgtype":"m.text"}} {"origin_server_ts":1697543732311,"event_id":"$OlGHu5kiyZPZS9bF4WHHgkrF0DwZdjtjkJt4QI42kVg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I suppose you could exclude function role things from being expressions in Kap, but then anything you conclude from that would apply to just Kap and not APL in general","msgtype":"m.text","formatted_body":"I suppose you could exclude function role things from being expressions in Kap, but then anything you conclude from that would apply to just Kap and not APL in general"}} {"origin_server_ts":1697543768462,"event_id":"$oktRjpJzPyvWopFaPx9V3Rn7KZPAs-NTjqfaSXHFpZQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In kap, that thing on its ownnis definitely not an expression by that definition. It's a syntactic construct but it cannot be evaluated on its own (if you try it's a parse error)","msgtype":"m.text"}} {"origin_server_ts":1697543829916,"event_id":"$Zqd3NLR_vAAc3GI-wgf07QXW5bk-Khl3J-cq42kKem4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$qIXTmBWHzC7keFHZxykgRG9w3vuaJqVZveTnbh_Y2j8"}},"format":"org.matrix.custom.html","body":"in traditional APL, the name reserved for something that can be put in an array is just \"an array\" (and numbers and characters are arrays). But yes, \"value\" isn't really defined in the context of APL","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>in traditional APL, the name reserved for something that can be put in an array is just \"an array\" (and numbers and characters are arrays). But yes, \"value\" isn't really defined in the context of APL"}} {"origin_server_ts":1697543835988,"event_id":"$9mPhy1gsM66GyBnMZXCoefde0zx_iK6SZTXGCoDOu5w","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"in traditional APL, the name reserved for something that can be put in an array is just \"an array\" (and numbers and characters are arrays). But yes, \"value\" isn't really defined in the general context of APL","msgtype":"m.text","formatted_body":"in traditional APL, the name reserved for something that can be put in an array is just \"an array\" (and numbers and characters are arrays). But yes, \"value\" isn't really defined in the general context of APL"},"m.relates_to":{"event_id":"$Zqd3NLR_vAAc3GI-wgf07QXW5bk-Khl3J-cq42kKem4","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* in traditional APL, the name reserved for something that can be put in an array is just \"an array\" (and numbers and characters are arrays). But yes, \"value\" isn't really defined in the general context of APL","msgtype":"m.text","formatted_body":"* in traditional APL, the name reserved for something that can be put in an array is just \"an array\" (and numbers and characters are arrays). But yes, \"value\" isn't really defined in the general context of APL"}} {"origin_server_ts":1697543870774,"event_id":"$OldNd-KF8dPAdrvgW-k5cqlmcAdwl6jI8B0m-WtWR_U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'd say the only reason it's not an error in apl is because of special syntax magic. Whatever comes out of a bare function isn't a real value, and kap could have added similar magic to make it behave exactly the same. Internally it still wouldn't be real values.","msgtype":"m.text"}} {"origin_server_ts":1697543884035,"event_id":"$yNKnZH7Jp5hqS9QZ_xtRGIPrermy9ZUDSLpCb7QzUX4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[apl wiki](https://aplwiki.com/wiki/Array) - \"but in array programming \"value\" more commonly means anything that can be given a name (by assignment or function definition), which would also include functions and operators.\"","msgtype":"m.text","formatted_body":"apl wiki<\/a> - \"but in array programming \"value\" more commonly means anything that can be given a name (by assignment or function definition), which would also include functions and operators.\""}} {"origin_server_ts":1697543911887,"event_id":"$bEGe9lN2p6cT3mgz3DVohtFqn06JEIJvlBtxyVnkC00","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$Zqd3NLR_vAAc3GI-wgf07QXW5bk-Khl3J-cq42kKem4"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> in traditional APL, the name reserved for something that can be put in an array is just \"an array\" (and numbers and characters are arrays). But yes, \"value\" isn't really defined in the general context of APL\n\nRight. What's lacking is a scalar array that is a function. That's really all the lambda syntax in kap adds.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    in traditional APL, the name reserved for something that can be put in an array is just \"an array\" (and numbers and characters are arrays). But yes, \"value\" isn't really defined in the general context of APL<\/blockquote><\/mx-reply>Right. What's lacking is a scalar array that is a function. That's really all the lambda syntax in kap adds."}} {"origin_server_ts":1697543948214,"event_id":"$JbC3B5PbODnJj4gEh0AWCF-xC03bRR_bqlb0ioEnNAY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It also restricts some special behaviour in apl where it pretends that functions are values sometimes, because I believe it confuses more than it helps.","msgtype":"m.text"}} {"origin_server_ts":1697544107417,"event_id":"$oj6bLJMs9F47i12Y7dJcmq5B9KiuNajVh5b0CHZajNA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$OldNd-KF8dPAdrvgW-k5cqlmcAdwl6jI8B0m-WtWR_U"}},"format":"org.matrix.custom.html","body":"in the case of (non-Kap) APL, it's not really magic at all - e.g. `(f←÷) 5` does `f←÷` while returning `÷ 5`, and you want to allow `f←÷ ⋄ f 5`, and thus that statement of `f←÷`, which is of function role, needs to be discarable as a statement","msgtype":"m.text","formatted_body":"
                    ↰ <\/a> loke<\/a> <\/mx-reply>in the case of (non-Kap) APL, it's not really magic at all - e.g. (f←÷) 5<\/code> does f←÷<\/code> while returning ÷ 5<\/code>, and you want to allow f←÷ ⋄ f 5<\/code>, and thus that statement of f←÷<\/code>, which is of function role, needs to be discarable as a statement"}} {"origin_server_ts":1697544181530,"event_id":"$v3TT4cKsaRmIbYZwpkKGGBEdFaJW67zVZPntFzkzNo0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"in the case of (non-Kap) APL, it's not really magic at all - e.g. `(f←÷) 5` does `f←÷` while returning `÷ 5`, and you want to allow `f←÷ ⋄ f 5`, and thus that statement of `f←÷`, which is of function role, needs to be discardable as a statement","msgtype":"m.text","formatted_body":"in the case of (non-Kap) APL, it's not really magic at all - e.g. (f←÷) 5<\/code> does f←÷<\/code> while returning ÷ 5<\/code>, and you want to allow f←÷ ⋄ f 5<\/code>, and thus that statement of f←÷<\/code>, which is of function role, needs to be discardable as a statement"},"m.relates_to":{"event_id":"$oj6bLJMs9F47i12Y7dJcmq5B9KiuNajVh5b0CHZajNA","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* in the case of (non-Kap) APL, it's not really magic at all - e.g. `(f←÷) 5` does `f←÷` while returning `÷ 5`, and you want to allow `f←÷ ⋄ f 5`, and thus that statement of `f←÷`, which is of function role, needs to be discardable as a statement","msgtype":"m.text","formatted_body":"* in the case of (non-Kap) APL, it's not really magic at all - e.g. (f←÷) 5<\/code> does f←÷<\/code> while returning ÷ 5<\/code>, and you want to allow f←÷ ⋄ f 5<\/code>, and thus that statement of f←÷<\/code>, which is of function role, needs to be discardable as a statement"}} {"origin_server_ts":1697544515840,"event_id":"$tjo2399hQiKjR69sQQowtHBbfyIFnt0pGrMWTVVC9Ak","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$7WXMniPRh9x2l8yyPqHZ9VDykl4FC6vP5kxmzgQWJcM"}},"format":"org.matrix.custom.html","body":"> 01:46:48 [ML] \n> \n> If it was too short, just don't say anything. ","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>
                    01:46:48 [ML]

                    If it was too short, just don't say anything. <\/blockquote>"}} {"origin_server_ts":1697544518085,"event_id":"$DYgR6HKBZeH4kwWlw93clFeaZ5bix9m6GFraGJDTDuo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and it's really not at all a \"special syntax magic\" to just say \"a statement can discard any valid thing\" where \"valid thing\" is a thing you can put in parentheses and have it be a valid thing of some sort, and your parser should definitely have the ability to trivially parse such","msgtype":"m.text","formatted_body":"and it's really not at all a \"special syntax magic\" to just say \"a statement can discard any valid thing\" where \"valid thing\" is a thing you can put in parentheses and have it be a valid thing of some sort, and your parser should definitely have the ability to trivially parse such"}} {"origin_server_ts":1697544616278,"event_id":"$cnretscp-NtEWOLX1zXedrDroB2X3BGjlTSiL_mqnNU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"and it's really not \"special syntax magic\" to say \"a statement can discard any valid thing\" where \"valid thing\" is a thing you can put in parentheses and have it be a valid thing of some sort, and your parser should definitely have the ability to trivially parse such","msgtype":"m.text","formatted_body":"and it's really not \"special syntax magic\" to say \"a statement can discard any valid thing\" where \"valid thing\" is a thing you can put in parentheses and have it be a valid thing of some sort, and your parser should definitely have the ability to trivially parse such"},"m.relates_to":{"event_id":"$DYgR6HKBZeH4kwWlw93clFeaZ5bix9m6GFraGJDTDuo","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* and it's really not \"special syntax magic\" to say \"a statement can discard any valid thing\" where \"valid thing\" is a thing you can put in parentheses and have it be a valid thing of some sort, and your parser should definitely have the ability to trivially parse such","msgtype":"m.text","formatted_body":"* and it's really not \"special syntax magic\" to say \"a statement can discard any valid thing\" where \"valid thing\" is a thing you can put in parentheses and have it be a valid thing of some sort, and your parser should definitely have the ability to trivially parse such"}} {"origin_server_ts":1697544886851,"event_id":"$giUiRlk5YB-6NuTNxMNUO1qpQhW2p_BDmFq5l-jjCrQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(dzaima/APL takes that probably too far, having `3 ≡ {+/ ⋄ ← ⋄ +← ⋄ [1] ⋄ ⍵+1} 2`)","msgtype":"m.text","formatted_body":"(dzaima/APL takes that probably too far, having 3 ≡ {+/ ⋄ ← ⋄ +← ⋄ [1] ⋄ ⍵+1} 2<\/code>)"}} {"origin_server_ts":1697545121088,"event_id":"$ncpbJA_ZWog_PZ2ABwJPWROmU4Q_D2js0IDO7gCw2-g","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"What I was saying at one point is that making a derived function is a special case of application: the immediate modifier `{𝔽¨}` always has the same result as the deferred modifier `¨`, so the only way to distinguish them is by inspecting the actual modifiers.","msgtype":"m.text","formatted_body":"What I was saying at one point is that making a derived function is a special case of application: the immediate modifier {𝔽¨}<\/code> always has the same result as the deferred modifier ¨<\/code>, so the only way to distinguish them is by inspecting the actual modifiers."}} {"origin_server_ts":1697545173565,"event_id":"$_0KVV_MU8IeBN4Xf287JZUaG1rto_bESahxwPUoHHlk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$tjo2399hQiKjR69sQQowtHBbfyIFnt0pGrMWTVVC9Ak"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> \n\nWhay do you mean by too short?","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    01:46:48 [ML]

                    If it was too short, just don't say anything. <\/blockquote><\/blockquote><\/mx-reply>Whay do you mean by too short?"}} {"origin_server_ts":1697545229784,"event_id":"$Tg6JfgTSYYYTuhlj3SGE0c1mEwSdSq4X5Eizp4t9RQA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"That was after Conor said to tell us if the podcast was too long. Your intro paragraphs are not following instructions!!","msgtype":"m.text","formatted_body":"That was after Conor said to tell us if the podcast was too long. Your intro paragraphs are not following instructions!!"}} {"origin_server_ts":1697545247566,"event_id":"$f8T4rxdAoUrByatEQ0SZgXQpYp3-lh-G3h3Ow6LIaI0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ah I see","msgtype":"m.text"}} {"origin_server_ts":1697545284593,"event_id":"$kHL5Wwrp8vvX9P1UgT7lA6rpWhNREl-kpclSSFUmXVM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I didn't hear (well didn't listen perhaps) to that part.","msgtype":"m.text"}} {"origin_server_ts":1697545449399,"event_id":"$QNh3LRV170lLZ_fY1_5WpFeLgnejkAmv5uMW6rEA7o4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$ncpbJA_ZWog_PZ2ABwJPWROmU4Q_D2js0IDO7gCw2-g"}},"format":"org.matrix.custom.html","body":"`\u2022Decompose` gives support for taking apart derived functions, so the language knows what they are (the formatter does too), but that's kind of at a different level from evaluation.","msgtype":"m.text","formatted_body":"
                    ↰ <\/a> Marshall<\/a> <\/mx-reply>\u2022Decompose<\/code> gives support for taking apart derived functions, so the language knows what they are (the formatter does too), but that's kind of at a different level from evaluation."}} {"origin_server_ts":1697545493905,"event_id":"$GDxGiMJUpYKSWkatiNn_bdWYY6TpCeW6Vpe1RwLrQvw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right, because BQN does allow you to work with functions as first class objects.","msgtype":"m.text"}} {"origin_server_ts":1697545601224,"event_id":"$ZWEK5u2mIsaI0O7hQts_GnrTVjqhTOGXXZjI4Yq74XI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I feel that hyperators are only a thing because you don't have first class functions, and your comments on the podcasts suggested the same, yes?","msgtype":"m.text"}} {"origin_server_ts":1697545609605,"event_id":"$g2nyS3vSdsk8fDzOWFVLmsbHf4O3WfbVbpsz-BMp9ik","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I feel that hyperators are only a thing because you don't have first class functions, and your comments on the podcast suggested the same, yes?","msgtype":"m.text"},"m.relates_to":{"event_id":"$ZWEK5u2mIsaI0O7hQts_GnrTVjqhTOGXXZjI4Yq74XI","rel_type":"m.replace"},"body":"* I feel that hyperators are only a thing because you don't have first class functions, and your comments on the podcast suggested the same, yes?","msgtype":"m.text"}} {"origin_server_ts":1697545738908,"event_id":"$GuuGotnDW2t8RTZ5Cq-yqtciTXnEnBNqT5aXw--K2rk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"You could argue that the syntax is still useful, but I think that's pretty weak.","msgtype":"m.text","formatted_body":"You could argue that the syntax is still useful, but I think that's pretty weak."}} {"origin_server_ts":1697545922218,"event_id":"$8Ja-bJLJOxmVsAB6usfZeyB2utkyNbadPZI6h1PIiOE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$ZWEK5u2mIsaI0O7hQts_GnrTVjqhTOGXXZjI4Yq74XI"}},"format":"org.matrix.custom.html","body":"operators too aren't needed if there are first-class functions, so the only difference in the need of operators and hyperators is how frequently they may be useful, which is very much dependent on the code style of the specific user","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>operators too aren't needed if there are first-class functions, so the only difference in the need of operators and hyperators is how frequently they may be useful, which is very much dependent on the code style of the specific user"}} {"origin_server_ts":1697551098871,"event_id":"$NzVSPG0oD1vs0TZQDzoMFWV-aCxLthslV_Y4ZzwD-2w","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$XwiAC4BldqMKQo0w_AxtdNsHkRNRZ4naZNspBOwh6gs"}},"format":"org.matrix.custom.html","body":"The traditional way is to make the phase continuous by making a big phase _difference_ array and then summing. You also probably want `sin` so it doesn't start on a click.\n```\naudio:play math:sin +\\ 5000 / (300+50×⍳5) ÷ (48000.0÷math:pi×2)\n```","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>The traditional way is to make the phase continuous by making a big phase difference<\/i> array and then summing. You also probably want sin<\/code> so it doesn't start on a click.
                    audio:play math:sin +\\ 5000 / (300+50×⍳5) ÷ (48000.0÷math:pi×2)<\/code><\/pre>"}}
                    {"origin_server_ts":1697551304855,"event_id":"$Y1Cc4c8vnPuWH9A9evIvAygptoq4EkJrEd9UIgJg1j0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"If you don't have just a stream of notes (maybe variable number of notes, or some weird effect that has to be applied to whole notes), fading in and out over maybe 300 samples is okay.","msgtype":"m.text","formatted_body":"If you don't have just a stream of notes (maybe variable number of notes, or some weird effect that has to be applied to whole notes), fading in and out over maybe 300 samples is okay."}}
                    {"origin_server_ts":1697551353732,"event_id":"$Zac0f5loGkWJqBmUBWRWZZKVXMugnx3cbNHyFGNpbqU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"That sounds less connected, so you could overlap the fades to make it more legato, but I don't know any way to make the code for that not ugly.","msgtype":"m.text","formatted_body":"That sounds less connected, so you could overlap the fades to make it more legato, but I don't know any way to make the code for that not ugly."}}
                    {"origin_server_ts":1697552810703,"event_id":"$Mbu55II21qVWz1GvlqY1inTnkU8kxIKdaEaMCM2j8A8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$7WXMniPRh9x2l8yyPqHZ9VDykl4FC6vP5kxmzgQWJcM"}},"format":"org.matrix.custom.html","body":"From the description \"it's only when the derived function is actually called that the inner expression is evaluated\" I'd expect the following to show `0` (using the new `b` value) but it gives `10`. Doesn't this mean some computation is happening when `⍞(b[0])` is performed?\n```\n∇ foo (a) { λ{⍵×a} }\nb ← (foo 2) (foo 3)\nf ⇐ ⍞(b[0])\nb ← (foo 0) (foo 1)\nf 5\n```","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>From the description \"it's only when the derived function is actually called that the inner expression is evaluated\" I'd expect the following to show 0<\/code> (using the new b<\/code> value) but it gives 10<\/code>. Doesn't this mean some computation is happening when ⍞(b[0])<\/code> is performed?
                    ∇ foo (a) { λ{⍵×a} }\nb ← (foo 2) (foo 3)\nf ⇐ ⍞(b[0])\nb ← (foo 0) (foo 1)\nf 5<\/code><\/pre>"}}
                    {"origin_server_ts":1697552845128,"event_id":"$UfnqzCTewKnzrh2R6iJPGff8ctuSdRH9RjITQzU6GWM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"In Dyalog this would shadow `b`, but I can also do it with `{b ← (foo 0) (foo 1)}0` for the second assignment, which clearly can't create a new top-level variable but still changes `b`.","msgtype":"m.text","formatted_body":"In Dyalog this would shadow b<\/code>, but I can also do it with {b ← (foo 0) (foo 1)}0<\/code> for the second assignment, which clearly can't create a new top-level variable but still changes b<\/code>."}}
                    {"origin_server_ts":1697555119656,"event_id":"$WQYUAlXcZ7Ximr8YlbuPatb6I2hx1_KAd8TCyWS5Ct4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. My explanation is incorrect. ","msgtype":"m.text"}}
                    {"origin_server_ts":1697555145016,"event_id":"$Q2YRZWjOEDnXeKq9TBcle-ZVFAkdiqgYnOXLMVAgzI0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Of course b[0] is reolved when that code is excutes","msgtype":"m.text"}}
                    {"origin_server_ts":1697555150582,"event_id":"$WD-nWATggYA5V-DeJdyA2cMuY5X4GeS3fFKuzoQVP54","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Of course b[0] is reolved when that code is excuted","msgtype":"m.text"},"m.relates_to":{"event_id":"$Q2YRZWjOEDnXeKq9TBcle-ZVFAkdiqgYnOXLMVAgzI0","rel_type":"m.replace"},"body":"* Of course b[0] is reolved when that code is excuted","msgtype":"m.text"}}
                    {"origin_server_ts":1697555324033,"event_id":"$orzvdk7FT0dedf8X6MmNJ4qZOBCMOt4YjtChoq_OETk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n∇ foo (a) { λ{⍵×a} }\nb ← (foo 2) (foo 3)\nf ⇐ {⍞(b[0]) ⍵}\nb ← (foo 0) (foo 1)\nf 5\n```","msgtype":"m.text","formatted_body":"
                    ∇ foo (a) { λ{⍵×a} }\nb ← (foo 2) (foo 3)\nf ⇐ {⍞(b[0]) ⍵}\nb ← (foo 0) (foo 1)\nf 5\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1697555328038,"event_id":"$3yILJ_toTAc_UrIYkoXYN-4tedgY2ksiaOJrmkB7zWA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This would do what you want.","msgtype":"m.text"}}
                    {"origin_server_ts":1697555359370,"event_id":"$64dXxFtX61WjnhPo8nKiDMFbAVFZOjKXBQ2bmLnJ9zI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Of course b\\[0\\] is resolved when that code is excuted","msgtype":"m.text","formatted_body":"Of course b[0] is resolved when that code is excuted"},"m.relates_to":{"event_id":"$Q2YRZWjOEDnXeKq9TBcle-ZVFAkdiqgYnOXLMVAgzI0","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * Of course b\\[0\\] is resolved when that code is excuted","msgtype":"m.text","formatted_body":" * Of course b[0] is resolved when that code is excuted"}}
                    {"origin_server_ts":1697555444754,"event_id":"$vY-yR8iqrtQdbLjWjiv5ELjKMRAxfgYK1vnauywpuTM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Basically what happens is that during parse time, `⍞(b[0])` generates a function which references an internal anonymous variable. At the same time, it generates code that evaluates the expression `b[0]` and writes that value to the anonymous variable.","msgtype":"m.text","formatted_body":"Basically what happens is that during parse time, ⍞(b[0])<\/code> generates a function which references an internal anonymous variable. At the same time, it generates code that evaluates the expression b[0]<\/code> and writes that value to the anonymous variable."}}
                    {"origin_server_ts":1697555587026,"event_id":"$KVwrJKsTzkIa_lOBFk08fN6t-DUBTTCmgZDWPs97NQA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you want the messy details, this is the code that creates the variable reference in the apply call: https://codeberg.org/loke/array/src/branch/master/array/src/commonMain/kotlin/array/instr.kt#L148","msgtype":"m.text"}}
                    {"origin_server_ts":1697555600606,"event_id":"$VKOhaDbCzfwcDru9duwXDg2XemKQ_Cbp1Kr_ZUAXIhM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Is that observable though? It just seems like an implementation detail. Does it matter than one part \"generates a function\" and another \"generates code\"?","msgtype":"m.text","formatted_body":"Is that observable though? It just seems like an implementation detail. Does it matter than one part \"generates a function\" and another \"generates code\"?"}}
                    {"origin_server_ts":1697555625544,"event_id":"$VovQzAVyIMb-zO65qcCQRpT-It4etxfcQJ5lvhrz_VQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Not directly observable, unless you use the API to look at the generated code.","msgtype":"m.text"}}
                    {"origin_server_ts":1697555685975,"event_id":"$4l84Rq3THDEBBsBc9uFAVMvencnzazP3FaMa4chtuk4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"From a programmers point of view, the expression `b[0]` is evaluated at the place it occurs in the code, resolves to a lambda reference, which is then turned an actual function using the apply symbol.","msgtype":"m.text","formatted_body":"From a programmers point of view, the expression b[0]<\/code> is evaluated at the place it occurs in the code, resolves to a lambda reference, which is then turned an actual function using the apply symbol."}}
                    {"origin_server_ts":1697555890576,"event_id":"$KnVt72DADj4lzrG-SdyZjFfjldpVw3b3CFY77rp8bFE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Another way to explain it is that you need `{ ... }` to capture an lexical binding. In your initial example, there were no braces so the binding wasn't captured and instead evaluated right there and then.","msgtype":"m.text","formatted_body":"Another way to explain it is that you need { ... }<\/code> to capture an lexical binding. In your initial example, there were no braces so the binding wasn't captured and instead evaluated right there and then."}}
                    {"origin_server_ts":1697555924883,"event_id":"$KxvRI_qFClEeYx2cYlhQWUkJLKhcRD3obNTNUdaXUtQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(now that's not 100% true, dynamic assignment captures a binding even without braces, but that stuff is special)","msgtype":"m.text"}}
                    {"origin_server_ts":1697556026970,"event_id":"$bzELXeWxoRV4dFvhL_HDoiVAZ7jIpmtgIcLHwgGVFS0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Dyanmic assignment is very special:\n```\n    a ← 10\n10\n    b ← 20\n20\n    c dynamicequal a + b\n30\n    d dynamicequal c × 100\n3000\n    d\n3000\n    a←30\n30\n    d\n5000\n```","msgtype":"m.text","formatted_body":"

                    Dyanmic assignment is very special:<\/p>\n

                        a ← 10\n10\n    b ← 20\n20\n    c dynamicequal a + b\n30\n    d dynamicequal c × 100\n3000\n    d\n3000\n    a←30\n30\n    d\n5000\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1697556104180,"event_id":"$QW6dqsGm8qwv976o0_gY147QiTdOOhboO45CCXfJG5c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(it tracks changes and only reevaluates when needed)","msgtype":"m.text"}}
                    {"origin_server_ts":1697556303366,"event_id":"$548pECtQq5Sw-ncX0mWU91N8qm4pH1OjQaUE90U1E4I","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The way I think about tacit code is just that it's a kind of evaluation where functions are the objects being manipulated. And like Enclose is a function that doesn't really do anything with its argument, an operator that derives a function is a tacit manipulation that just sticks things together.","msgtype":"m.text","formatted_body":"The way I think about tacit code is just that it's a kind of evaluation where functions are the objects being manipulated. And like Enclose is a function that doesn't really do anything with its argument, an operator that derives a function is a tacit manipulation that just sticks things together."}}
                    {"origin_server_ts":1697556383502,"event_id":"$r4Nnx8MRhFtIkeJ3qvVL0I-QfhouR4qTnSSs_coGcKA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$vY-yR8iqrtQdbLjWjiv5ELjKMRAxfgYK1vnauywpuTM"}},"format":"org.matrix.custom.html","body":"oh yay, finally realized that not only is that a very funky & weird way to do it, it's also broken:\n```\nfns ← ⍬ ⋄ i←0 ⋄ while (i<2) { fns ← fns,λ(⍞(i⊃(λ+) (λ÷))) ⋄ i←i+1 } ⋄ {⍞⍵ 4}¨ fns\n```","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>oh yay, finally realized that not only is that a very funky & weird way to do it, it's also broken:
                    fns ← ⍬ ⋄ i←0 ⋄ while (i<2) { fns ← fns,λ(⍞(i⊃(λ+) (λ÷))) ⋄ i←i+1 } ⋄ {⍞⍵ 4}¨ fns<\/code><\/pre>"}}
                    {"origin_server_ts":1697556393893,"event_id":"$hFzD9TZNv658uNT2Gama759yIOVnEMFhL_3PNKACfuw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"oh yay, finally realized that not only is that a very funky & weird way to do it, it's also broken:\n```\nfns ← ⍬\ni ← 0\nwhile (i<2) {\n  fns ← fns , λ(⍞(i ⊃ (λ+) (λ÷)))\n  i ← i+1\n}\n{⍞⍵ 4}¨ fns\n```","msgtype":"m.text","formatted_body":"oh yay, finally realized that not only is that a very funky & weird way to do it, it's also broken:
                    fns ← ⍬\ni ← 0\nwhile (i<2) {\n  fns ← fns , λ(⍞(i ⊃ (λ+) (λ÷)))\n  i ← i+1\n}\n{⍞⍵ 4}¨ fns<\/code><\/pre>"},"m.relates_to":{"event_id":"$r4Nnx8MRhFtIkeJ3qvVL0I-QfhouR4qTnSSs_coGcKA","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* oh yay, finally realized that not only is that a very funky & weird way to do it, it's also broken:\n```\nfns ← ⍬\ni ← 0\nwhile (i<2) {\n  fns ← fns , λ(⍞(i ⊃ (λ+) (λ÷)))\n  i ← i+1\n}\n{⍞⍵ 4}¨ fns\n```","msgtype":"m.text","formatted_body":"* oh yay, finally realized that not only is that a very funky & weird way to do it, it's also broken:
                    fns ← ⍬\ni ← 0\nwhile (i<2) {\n  fns ← fns , λ(⍞(i ⊃ (λ+) (λ÷)))\n  i ← i+1\n}\n{⍞⍵ 4}¨ fns<\/code><\/pre>"}}
                    {"origin_server_ts":1697556551186,"event_id":"$luOM5Vo7fziE4Iejq2MP3CwrWCgZQ-t-_ijzJhksbSs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"returns `(÷4) (÷4)`, while removing the `λ(⍞(...))`, which should clearly be a no-op, results in it returning `4 (÷4)`","msgtype":"m.text","formatted_body":"returns (÷4) (÷4)<\/code>, while removing the λ(⍞(...))<\/code>, which should clearly be a no-op, results in it returning 4 (÷4)<\/code>"}}
                    {"origin_server_ts":1697557010640,"event_id":"$54YXiwfMihXQVp0Gw3MFfF1DR9x4m1fwoAnWE_6MQi4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the hack of using an anonymous variable works as long as any part of the code is executed at most once, but if that's not the case, to do it properly you do just necessarily need some heap-allocated location for the value, and the function to reference that","msgtype":"m.text","formatted_body":"the hack of using an anonymous variable works as long as any part of the code is executed at most once, but if that's not the case, to do it properly you do just necessarily need some heap-allocated location for the value, and the function to reference that"}}
                    {"origin_server_ts":1697557045279,"event_id":"$6B7s0vO7Y14VWKE6efhKWzvz4qYtbqhzbj1qz0e9XMg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"the hack of using an anonymous variable works as long as any part of the code is executed at most once, but if that's not the case, to do it properly you do just necessarily need some heap-allocated location for the value that can be repeatedly allocated","msgtype":"m.text","formatted_body":"the hack of using an anonymous variable works as long as any part of the code is executed at most once, but if that's not the case, to do it properly you do just necessarily need some heap-allocated location for the value that can be repeatedly allocated"},"m.relates_to":{"event_id":"$54YXiwfMihXQVp0Gw3MFfF1DR9x4m1fwoAnWE_6MQi4","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* the hack of using an anonymous variable works as long as any part of the code is executed at most once, but if that's not the case, to do it properly you do just necessarily need some heap-allocated location for the value that can be repeatedly allocated","msgtype":"m.text","formatted_body":"* the hack of using an anonymous variable works as long as any part of the code is executed at most once, but if that's not the case, to do it properly you do just necessarily need some heap-allocated location for the value that can be repeatedly allocated"}}
                    {"origin_server_ts":1697557284987,"event_id":"$Ipjji0ZMxXcFq-S8qFqallG5yapxXW3Xx1ezWXT9lmQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[perhaps more interesting of a demonstration](https://dzaima.github.io/paste/#0S8szUHjUNkHhUe8arkwwy4CrPCMzJ1VBI9PG0EBToZpLQSEtDyxzbrfGo955GhpGNZmaCo@6mhU0zu3W1QSRh7dramoCFWamAbUp2CpA9QEF8q0KijLzSnLyFJSKU0tKMvPSgaYZKIEl06B2p@UBubVcKKqBFoGkDQ1AwmBVmdqGXLUA#APL) - sets `fn0` just once, and then prints calling it a bunch of times, but the printed value differs even though no code that touches `fn0` (or, for that matter, anything explictly existing) runs","msgtype":"m.text","formatted_body":"perhaps more interesting of a demonstration<\/a> - sets fn0<\/code> just once, and then prints calling it a bunch of times, but the printed value differs even though no code that touches fn0<\/code> (or, for that matter, anything explictly existing) runs"}}
                    {"origin_server_ts":1697557916805,"event_id":"$F0DVSFihDuY9Cj3qRf5IxihpP_aFKDaCdgEz4qmZ_0k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: thanks for this. Let me look at it after I fed the cats.","msgtype":"m.text","formatted_body":"dzaima<\/a>: thanks for this. Let me look at it after I fed the cats."}}
                    {"origin_server_ts":1697558272916,"event_id":"$QOY6KKUmB8asCMFaXEK_noabJiWgyMzS1TfSag-m6bU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$Ipjji0ZMxXcFq-S8qFqallG5yapxXW3Xx1ezWXT9lmQ"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> [perhaps more interesting of a demonstration](https://dzaima.github.io/paste/#0S8szUHjUNkHhUe8arkwwy4CrPCMzJ1VBI9PG0EBToZpLQSEtDyxzbrfGo955GhpGNZmaCo@6mhU0zu3W1QSRh7dramoCFWamAbUp2CpA9QEF8q0KijLzSnLyFJSKU0tKMvPSgaYZKIEl06B2p@UBubVcKKqBFoGkDQ1AwmBVmdqGXLUA#APL) - sets `fn0` just once, and then prints calling it a bunch of times, but the printed value differs even though no code that touches `fn0` (or, for that matter, anything explictly existing) runs\n\nI haven't looked at the actual generated code yet, but looking at your example I think what happens is that you capture the binding in the body of the while.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    perhaps more interesting of a demonstration<\/a> - sets fn0<\/code> just once, and then prints calling it a bunch of times, but the printed value differs even though no code that touches fn0<\/code> (or, for that matter, anything explictly existing) runs<\/blockquote><\/mx-reply>I haven't looked at the actual generated code yet, but looking at your example I think what happens is that you capture the binding in the body of the while."}} {"origin_server_ts":1697558305344,"event_id":"$DlT6-Dza51jJVdojuofM0JdFA0wXcS71AagyB0i-oTo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah, there's only one \"anonymous variable\" but it's attempted to be used by multiple functions","msgtype":"m.text","formatted_body":"yeah, there's only one \"anonymous variable\" but it's attempted to be used by multiple functions"}} {"origin_server_ts":1697558316359,"event_id":"$tIc6L4zotDJWJ5_VZL2Pw-ogJPCb53INJsR1ELWK2_g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And that would be because of how the syntax extension works (the body is a lambda expression) ","msgtype":"m.text"}} {"origin_server_ts":1697558329057,"event_id":"$oy7EeNN2S4xkXHwNZ8AzRElaKF2h4tO6MJwY9p2ZBAc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"there's only one \"anonymous variable\" but it's attempted to be used by multiple functions","msgtype":"m.text","formatted_body":"there's only one \"anonymous variable\" but it's attempted to be used by multiple functions"},"m.relates_to":{"event_id":"$DlT6-Dza51jJVdojuofM0JdFA0wXcS71AagyB0i-oTo","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* there's only one \"anonymous variable\" but it's attempted to be used by multiple functions","msgtype":"m.text","formatted_body":"* there's only one \"anonymous variable\" but it's attempted to be used by multiple functions"}} {"origin_server_ts":1697558351382,"event_id":"$RC2b5jJrZ5mNN0l-s7ydFsvXHpgs9MewHXBtsDxJvaQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"there's only one \"anonymous variable\" but it's attempted to be used by multiple uses of the same `⍞` in the same scope","msgtype":"m.text","formatted_body":"there's only one \"anonymous variable\" but it's attempted to be used by multiple uses of the same ⍞<\/code> in the same scope"},"m.relates_to":{"event_id":"$DlT6-Dza51jJVdojuofM0JdFA0wXcS71AagyB0i-oTo","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* there's only one \"anonymous variable\" but it's attempted to be used by multiple uses of the same `⍞` in the same scope","msgtype":"m.text","formatted_body":"* there's only one \"anonymous variable\" but it's attempted to be used by multiple uses of the same ⍞<\/code> in the same scope"}} {"origin_server_ts":1697558417368,"event_id":"$_pFr8vi6osFw0eyPVUFj4uKjyyvG-hh-DmUSGBHzmH8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Not entirely sure. I'll have to analyse the parsed code and the allocated environments. The stuff tgat comes out of syntax extensions is really messy. But I somehow don't think you'll be able to get weird results without them. ","msgtype":"m.text"}} {"origin_server_ts":1697558430809,"event_id":"$15mkbs1qNGkPfry84tLmnpEDJ7qsd6IwicTAktNVF2s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"(At least of my hypothesis is correct) ","msgtype":"m.text"}} {"origin_server_ts":1697558436044,"event_id":"$lm9EscBP76okp5nLyzFIPFRTPn3-FFgEanWb9G3BQ6I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"(At least if my hypothesis is correct) ","msgtype":"m.text"},"m.relates_to":{"event_id":"$15mkbs1qNGkPfry84tLmnpEDJ7qsd6IwicTAktNVF2s","rel_type":"m.replace"},"body":"* (At least if my hypothesis is correct) ","msgtype":"m.text"}} {"origin_server_ts":1697558539301,"event_id":"$OiWQyLFtzuRcvTcBpln5NEENFcxx9jPIjv1cFjGF5OI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the problem is the usage of an anonymous variable in an extising scope to hold data, instead of making a new allocation. If the scope doesn't change and the anonymous variable is written to twice, the old value will be gone even though code may still refer to it","msgtype":"m.text","formatted_body":"the problem is the usage of an anonymous variable in an extising scope to hold data, instead of making a new allocation. If the scope doesn't change and the anonymous variable is written to twice, the old value will be gone even though code may still refer to it"}} {"origin_server_ts":1697558569140,"event_id":"$kmWydgoUGA9ZjS0P8gSKhmUA56caUXqat3LhnSXjMIk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"the problem is the usage of an anonymous variable in an extising scope to hold data, instead of making a new allocation. If the scope doesn't change and the anonymous variable is written to again by `⍞`, the old value will be gone even though it might still be referred to","msgtype":"m.text","formatted_body":"the problem is the usage of an anonymous variable in an extising scope to hold data, instead of making a new allocation. If the scope doesn't change and the anonymous variable is written to again by ⍞<\/code>, the old value will be gone even though it might still be referred to"},"m.relates_to":{"event_id":"$OiWQyLFtzuRcvTcBpln5NEENFcxx9jPIjv1cFjGF5OI","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* the problem is the usage of an anonymous variable in an extising scope to hold data, instead of making a new allocation. If the scope doesn't change and the anonymous variable is written to again by `⍞`, the old value will be gone even though it might still be referred to","msgtype":"m.text","formatted_body":"* the problem is the usage of an anonymous variable in an extising scope to hold data, instead of making a new allocation. If the scope doesn't change and the anonymous variable is written to again by ⍞<\/code>, the old value will be gone even though it might still be referred to"}} {"origin_server_ts":1697560363592,"event_id":"$vuOGh6pMhkG6yRnkANeeSRMDbImJ6yfC1toL3eg5HMI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Actually, no. I don't think so.","msgtype":"m.text"}} {"origin_server_ts":1697560414434,"event_id":"$nTt3RxX8OZyevNNNXXI-Wl0V59bn2Hf5FI-0mXCUyOE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No wait...","msgtype":"m.text"}} {"origin_server_ts":1697560417079,"event_id":"$gLNUhIb_CDZbwm20KfgeSGKi9MaXmz2YnleM-SH43B0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Let me look.","msgtype":"m.text"}} {"origin_server_ts":1697560593853,"event_id":"$76LtEQo4HHRQNgoWofjeOF4l5XMHrnPfCB4IYb5dlIY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh now I see what you were saying.","msgtype":"m.text"}} {"origin_server_ts":1697560648026,"event_id":"$m7ae09t5IChnHafFRQokbPt3VTD1MBwMlkSX6-JQmz8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think I know where this was introduced.","msgtype":"m.text"}} {"origin_server_ts":1697561560795,"event_id":"$z-449SrdZvGgg0J7UCpzRp_h-9QV3bG-cOUpJfiysNY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: OK, the different invocations happens in different stack frames, so the anonymous variable is actually different.","msgtype":"m.text","formatted_body":"dzaima<\/a>: OK, the different invocations happens in different stack frames, so the anonymous variable is actually different."}} {"origin_server_ts":1697561564759,"event_id":"$B8mgpEO-oj7qyKe3Dn06chDEFjWxaS48ZkNZSkGSUn0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's not where the issue is.","msgtype":"m.text"}} {"origin_server_ts":1697561586595,"event_id":"$0ES0B0yF4LNjFievERMmXsLBvRiHAcZMOhyBooM4ADI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I wonder if it allocates it in the wrong frame... Let's see.","msgtype":"m.text"}} {"origin_server_ts":1697561874545,"event_id":"$3NpykDfQAdPC3_FzdyS4dTurCtvXqFCrf3bZ4wsm_Z4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, I've taken your example code wholesale and integrated it in my testcases.","msgtype":"m.text"}} {"origin_server_ts":1697561880865,"event_id":"$EjqcVswn_kLzwchhAvS_Mh3AH26BboocQYmzv7_0ylY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll see if I can fix it tomorrow.","msgtype":"m.text"}} {"origin_server_ts":1697563098883,"event_id":"$qVy-ES-DMGCdxF6753WNMBR_DnikJswdbAZPAW5laJQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: I think I may have fixed it.","msgtype":"m.text","formatted_body":"dzaima<\/a>: I think I may have fixed it."}} {"origin_server_ts":1697563107591,"event_id":"$-dXjoz6GvJl3i-LuDW3ICcKmv6mY7mZPrRbQb5gtf_c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Would you care to test again?","msgtype":"m.text"}} {"origin_server_ts":1697563125654,"event_id":"$oZAkeEJrHWOaY3LeVctdGxz5rJdNOR4rdzf75wb-TqU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://codeberg.org/loke/array/commit/9ca0900f61be6a7b6016378afd0471ce447de7d3","msgtype":"m.text"}} {"origin_server_ts":1697563191574,"event_id":"$SqQw0xTt4JhYw16yHfnYm7cqMciFf3a06Tq8DLkH_Gc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"At least part of the problem was that it didn't in fact allocate a new stack frame which caused the anonymous variable to be reused like you said. It was a bug in the syntax definition.","msgtype":"m.text"}} {"origin_server_ts":1697563502584,"event_id":"$XiaYMpJocP9DQTTYr3VmObZN6xehXogDzOq2c0W_8z8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"so is `:nfunction` in a `defsyntax` a thing that's intended to invoke essentially undefined behavior if invoked twice?","msgtype":"m.text","formatted_body":"so is :nfunction<\/code> in a defsyntax<\/code> a thing that's intended to invoke essentially undefined behavior if invoked twice?"}} {"origin_server_ts":1697563546753,"event_id":"$zngJ_TR_J1KrCQbZNez3ViEg1_vLZclQee1AOCVoSzw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's intended to create a function without allocating a stack frame.","msgtype":"m.text"}} {"origin_server_ts":1697563583961,"event_id":"$htxgL-BKwYwqzqS4xIzCzIQhNeGPkOzfsNZX36vRMtk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I mean, a function without creating a dedicated environment (which translates to no stack frame during evaluation).","msgtype":"m.text"}} {"origin_server_ts":1697563625971,"event_id":"$Jqo8-68rUIVC3LqIetFqZcorpBxz_B9_kNOZC1s8D0s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's not been very well tested, and the whole idea is probably flawed. It's been in there since the first iteration of custom syntax, which was implemented before the huge rewrite of the entire scope system.","msgtype":"m.text"}} {"origin_server_ts":1697563655936,"event_id":"$z4ZYsEtr4miTqqC5v8ZcbX5a1ogj9vI-iAZdPrwBjy4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"nfunctions are still used the the clause part of a `while` loop, so it's possible you can break stuff there.","msgtype":"m.text","formatted_body":"nfunctions are still used the the clause part of a while<\/code> loop, so it's possible you can break stuff there."}} {"origin_server_ts":1697563674913,"event_id":"$CYZjdRd5M98KJFKVqn3ANCZ1cXmObWks5ft9BJiPmAI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The general idea is this:","msgtype":"m.text"}} {"origin_server_ts":1697563807645,"event_id":"$REOuGtR9gThx3jObip-q7oFsh0gd4TjWfR_RAzTIJhU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\nwhile(a ← 0) { io:println \"x\" }\nio:println a\n```\nIf the clause (the assignment to `a`) was not an nfunction, then `a` would live in its own scope, and the println later would result in a \"variable not assigned\"","msgtype":"m.text","formatted_body":"
                    while(a ← 0) { io:println \"x\" }\nio:println a\n<\/code><\/pre>\n

                    If the clause (the assignment to a<\/code>) was not an nfunction, then a<\/code> would live in its own scope, and the println later would result in a \"variable not assigned\"<\/p>\n"}} {"origin_server_ts":1697563858813,"event_id":"$rNRc54RuO7ZSpecXD7hiipuRi2kJn3z_U5v9zYWxDkY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think the problem happens when you have a custom syntax definition that evaluates an nfunction more than once.","msgtype":"m.text"}} {"origin_server_ts":1697564537055,"event_id":"$ZhoRHTXRVbPKhlrLUF7Am0HmHa2Jtyy07oLpqVO6VKg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"indeed you can just move the entire body to the condition, e.g. [this](https://dzaima.github.io/paste/#0S8szUHjUNkHhUe8arkwwy4CrPCMzJ1VBg0tBIS0PLHRut8aj3nkaGkY1mZoKj7qaFTTO7dbVBJGHt2tqagIVZqYpaGQq2CoYaCpUA7lAgXyrgqLMvJKcPAWl4tSSksy8dKBpBkpgyTSopWl5QG4tF4pqoEUgaUMDkDBYVaa2IYhtAxQCmq5QCwA#APL)","msgtype":"m.text","formatted_body":"indeed you can just move the entire body to the condition, e.g. this<\/a>"}} {"origin_server_ts":1697564778157,"event_id":"$L3Iatq62Z1jhnkXk7Aab5hcovEVtoacvobPpDqQsdk4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks. ","msgtype":"m.text"}} {"origin_server_ts":1697564805963,"event_id":"$vnlUwS4BjGJDRzvre2IuQLXX9AyE-5MGjVnskto3WdE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I really appreciate this. These are his I wouldn't find myself","msgtype":"m.text"}} {"origin_server_ts":1697564851713,"event_id":"$dwuVLLAiQ3by1pD75daorxodsBAlAbPnx1c5_QUxvT0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I really appreciate this. These are things I wouldn't find myself","msgtype":"m.text"},"m.relates_to":{"event_id":"$vnlUwS4BjGJDRzvre2IuQLXX9AyE-5MGjVnskto3WdE","rel_type":"m.replace"},"body":"* I really appreciate this. These are things I wouldn't find myself","msgtype":"m.text"}} {"state_key":"@semperos:matrix.fedibird.com","origin_server_ts":1697651844907,"event_id":"$ubmqpjbcv5Wkk6Ke2CRXkwHdmf5MTFyIUQsDdoYIZWQ","sender":"@semperos:matrix.fedibird.com","user_id":"@semperos:matrix.fedibird.com","type":"m.room.member","content":{"avatar_url":null,"displayname":"semperos","membership":"join"},"age_ts":1697651845294} {"origin_server_ts":1698284610509,"event_id":"$QpGhsXMZY95Ig9AeILOKfxJZV3CPJVeWMFiCC2x6Leo","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"loke: https://x.com/code_report/status/1717353444183285951\n\nYou know what to do 😀","msgtype":"m.text","formatted_body":"

                    loke<\/a>: https://x.com/code_report/status/1717353444183285951<\/p>\n

                    You know what to do 😀<\/p>\n"}} {"origin_server_ts":1698284754629,"event_id":"$TFB_O5bDFN3okFjuf8Bkq-vqLw7BiEADvhwz2GkPXTg","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I don't know if you've thought about sort primitives, but I think Adám has mentioned he would like monadic ≤ and ≥ (as each element in sorted array is ≤ the previous element)","msgtype":"m.text"}} {"origin_server_ts":1698286656085,"event_id":"$urm9rmyRdGphAM_0CUpO9HlIEAZVZJBWfz7Ur-Ksb54","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. I have planned this.","msgtype":"m.text"}} {"origin_server_ts":1698286668624,"event_id":"$dkYmTqacOK_f1grDpXK2K4fu9cFDmwdT_jsS4tvpnOQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Although I was going to use monaadic and and or.","msgtype":"m.text"}} {"origin_server_ts":1698287122512,"event_id":"$PfXfYJOJXN8EPlTAQyihtemn5bC4rhr3-HUKbM-iw6A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"A pity he's not using Mastodon. :-)","msgtype":"m.text"}} {"origin_server_ts":1698287229510,"event_id":"$JzK3VbY_FE1SNE3k7VezzqdhcDfnDidcdIQf0Otmics","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I was thinking, `∧ 10 1 2` would be a regular sort, but you could also sort by axis, so you'd sort rows using `∧[0]` or sort columns: `∧[1]`.","msgtype":"m.text","formatted_body":"I was thinking, ∧ 10 1 2<\/code> would be a regular sort, but you could also sort by axis, so you'd sort rows using ∧[0]<\/code> or sort columns: ∧[1]<\/code>."}} {"origin_server_ts":1698287239013,"event_id":"$3Se7_COHhf1m4q1l_nCd8f6o6yfnA9LoHOl6fSRMAxw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$dkYmTqacOK_f1grDpXK2K4fu9cFDmwdT_jsS4tvpnOQ"}},"format":"org.matrix.custom.html","body":"Yeah, I've found the visual connection between `∧∨` and `⍋⍒` very helpful and have found Adam's arguments for `≤≥` unconvincing enough that now I can't even remember what they are...","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>Yeah, I've found the visual connection between ∧∨<\/code> and ⍋⍒<\/code> very helpful and have found Adam's arguments for ≤≥<\/code> unconvincing enough that now I can't even remember what they are..."}} {"origin_server_ts":1698287284504,"event_id":"$8oULZ-FXRA_jKftca24oCrn0WzhyRzUJKHBRpLNS7q4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'm pretty sure the argument is that `≤` and `≥` highlights that after sorting, the corresponding relation will hold.","msgtype":"m.text","formatted_body":"I'm pretty sure the argument is that ≤<\/code> and ≥<\/code> highlights that after sorting, the corresponding relation will hold."}} {"origin_server_ts":1698287312424,"event_id":"$cWVdwzNCDL7DA4LLCDgG2FulT7V9RkYxwBpfi2Rem-g","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://matrix.org/LDbYQDGXrwERlKYeEKZpbegY","info":{"xyz.amorgan.blurhash":"L45}mu?dxd%5-;j]Rkj]%4s=n.nn","size":61932,"w":737,"h":473,"mimetype":"image/png"}}} {"origin_server_ts":1698287330608,"event_id":"$IkgnXza3A8SwbtjiqTeqOKYJIoSQeR__anZhbOUEloA","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$PfXfYJOJXN8EPlTAQyihtemn5bC4rhr3-HUKbM-iw6A"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> A pity he's not using Mastodon. :-)\n\nHe said he's going to join","msgtype":"m.text","formatted_body":"

                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    A pity he's not using Mastodon. :-)<\/blockquote><\/mx-reply>He said he's going to join"}} {"origin_server_ts":1698287332539,"event_id":"$9Y6PYyTIOHSGdHWUIY7EvxPJUaLAt-hl-wgE7H-m52E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think it's also because they settled on using `∧` and `∨` for increase/decrease rank. Kap uses monadic `<` and `>` for those.","msgtype":"m.text","formatted_body":"I think it's also because they settled on using ∧<\/code> and ∨<\/code> for increase/decrease rank. Kap uses monadic <<\/code> and ><\/code> for those."}} {"origin_server_ts":1698287402702,"event_id":"$ML3BO84BUfu3gc5qAK-ylrahhwZK-KpPXqqw8kWO6fM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The question is: Should monadic `∧[1]` interpret the axis number like the rank operator, or should it specify an axis?","msgtype":"m.text","formatted_body":"The question is: Should monadic ∧[1]<\/code> interpret the axis number like the rank operator, or should it specify an axis?"}} {"origin_server_ts":1698287414955,"event_id":"$mVgpSR7oUJMXVZ2Tv2Z1PlXVPRzafN9EJ1GppxEbifc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Interpreting it like the rank operator makes more sense, I think.","msgtype":"m.text"}} {"origin_server_ts":1698287609707,"event_id":"$LHK-nm-3JLQYfkHJHKA-oeo17seuBgo2v1wuRJD3ZVI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yes, I don't think sorting along an axis (that is, sorting the subarrays orthogonal to that axis) is wanted often. A thing you might want is to sort each column of an array, but this would be very strange for `∧[1]`, and you can do it with ranked sort plus transposes.","msgtype":"m.text","formatted_body":"Yes, I don't think sorting along an axis (that is, sorting the subarrays orthogonal to that axis) is wanted often. A thing you might want is to sort each column of an array, but this would be very strange for ∧[1]<\/code>, and you can do it with ranked sort plus transposes."}} {"origin_server_ts":1698287825009,"event_id":"$EoV6XFz-G_4isgqvjxrsDAdF5HniyKaBraY_C-cMmBI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: thanks a lot. That's what I was leaning towards.","msgtype":"m.text","formatted_body":"
                    Marshall<\/a>: thanks a lot. That's what I was leaning towards."}} {"origin_server_ts":1698287826996,"event_id":"$DLnXxxGPi6ZUowMDj07XvUc48H9YqYsbuvNvqGnsPPw","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1698287855890,"event_id":"$SbU3sRRBEYVc-9_FxSFhvcQT_iSKvGSuZWspaFzZwOQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$DLnXxxGPi6ZUowMDj07XvUc48H9YqYsbuvNvqGnsPPw","type":"m.room.redaction","content":{"redacts":"$DLnXxxGPi6ZUowMDj07XvUc48H9YqYsbuvNvqGnsPPw"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1698287851996,"event_id":"$vrNktY3Gd4QuIFeVj8TnUvwQ6Z9OvHBolK7PNAjaesE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll implement it today. I've been thinking about it for a while, and now that it's been mentioned I'll do it.","msgtype":"m.text"}} {"origin_server_ts":1698287855890,"event_id":"$SbU3sRRBEYVc-9_FxSFhvcQT_iSKvGSuZWspaFzZwOQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$DLnXxxGPi6ZUowMDj07XvUc48H9YqYsbuvNvqGnsPPw","type":"m.room.redaction","content":{"redacts":"$DLnXxxGPi6ZUowMDj07XvUc48H9YqYsbuvNvqGnsPPw"}} {"origin_server_ts":1698288004152,"event_id":"$rcW3bttx_8EYkZ0kn0p-pLCN9z-okN3iUVDFCzscCN0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: also, I think since there is a general agreement that major rank layout is the way to do, a properly formatted array would have the appropriate axis order.","msgtype":"m.text","formatted_body":"Marshall<\/a>: also, I think since there is a general agreement that major rank layout is the way to do, a properly formatted array would have the appropriate axis order."}} {"origin_server_ts":1698292486069,"event_id":"$T-Dcg1f0ua97IpEXU1AJuFj2N91ycSd-Ujx7uBv527o","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Do you have somewhere I could download a pre-built linux binary of Kap? I'd like to play with the language. I don't really need advanced gui features... just something I can use in my terminal, eg. write scripts in vim and feed them to Kap. Is that possible at the moment?","msgtype":"m.text"}} {"origin_server_ts":1698292706420,"event_id":"$oVWXn9eXnqzO5vO6QT7dFdXtsmvue2L6D5DE2NDjGCs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"elcar0: I don't have that, because packaging for Linux is a bit messy","msgtype":"m.text","formatted_body":"elcar0<\/a>: I don't have that, because packaging for Linux is a bit messy"}} {"origin_server_ts":1698292717027,"event_id":"$BQpcBZVggw8g0sEqIDDcINMWOZPv48Ktj7uFS7wA3vY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Did you try building it yourself?","msgtype":"m.text"}} {"origin_server_ts":1698292738704,"event_id":"$jMiH7kBu5HQX4UyR_gTXdGI5sYLwcrYvIUOW041GADo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What distribution do you use?","msgtype":"m.text"}} {"origin_server_ts":1698292801085,"event_id":"$LpQOm0Zb_1lRvmplYkhui4y88plAj4pMo0mm75_p2gI","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"eehhh... I didn't want to bother with installing Java. I can do it, I just... didn't want to :D","msgtype":"m.text"}} {"origin_server_ts":1698292814894,"event_id":"$riea092wbVcjuQANmjI_nidVo_mlwiNTJ5Bu1og0cnA","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'm using ubuntu","msgtype":"m.text"}} {"origin_server_ts":1698292871366,"event_id":"$vi1nwTaVmLUM0ctw1YjOxblFaDDUWu8GmsKBvoYoc04","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, let me see if I can create something for you.","msgtype":"m.text"}} {"origin_server_ts":1698292916521,"event_id":"$uivkowqPs82coZ4uDHY_jZHCK3MbFxhN_DGySKPKnkY","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Thanks. ","msgtype":"m.text"}} {"origin_server_ts":1698296370301,"event_id":"$kRvZbkpU9FBP0eFUvzsS8S_M98ZqVHMTIumM3N2yKpg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"elcar0: try https://kapdemo.dhsdevelopments.com/kap.tar.gz","msgtype":"m.text","formatted_body":"elcar0<\/a>: try https://kapdemo.dhsdevelopments.com/kap.tar.gz"}} {"origin_server_ts":1698296541569,"event_id":"$iuqztw7GkERdLTmTwUEV9zwnHF3y-NT-43WcZXi5LLk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I built it for debian-12, which should be ubuntu compatible I think.","msgtype":"m.text"}} {"origin_server_ts":1698296601867,"event_id":"$Gs9UkzvjrX-NWaCEk8orhOr14RbriYjRYJDRW8ZGeqo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Assuming you have the relevant libraries installed, it should be as easy as running `./text-client.kexe --lib-path=standard-lib`","msgtype":"m.text","formatted_body":"Assuming you have the relevant libraries installed, it should be as easy as running ./text-client.kexe --lib-path=standard-lib<\/code>"}} {"origin_server_ts":1698296722942,"event_id":"$yVtp5sMihbNUltSP9tKRrPbdFOkUr2RWbN7VEWAesyM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"elcar0: if you just want to run scripts, you can do that using `--load=foo.kap --no-repl`","msgtype":"m.text","formatted_body":"elcar0<\/a>: if you just want to run scripts, you can do that using --load=foo.kap --no-repl<\/code>"}} {"origin_server_ts":1698296790559,"event_id":"$obETf7m9mF00raPUGwcpyvgnmcISy3R7Y_u8lrSJNQQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Note that the native version is quite a bit slower than the JVM version (about 5-10 times)","msgtype":"m.text"}} {"origin_server_ts":1698296935897,"event_id":"$dOjXchyN5Jwy5-Kvk8xqAzxqbi736-Hjvuad-9vfdA4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"These are the libraries I needed to install on Debian in order to build it. You probably need the non-devel versions of these libraries: `libicu-dev libcurl4-openssl-dev libjansson-dev libgmp-dev libedit-dev libasound2-dev`.","msgtype":"m.text","formatted_body":"These are the libraries I needed to install on Debian in order to build it. You probably need the non-devel versions of these libraries: libicu-dev libcurl4-openssl-dev libjansson-dev libgmp-dev libedit-dev libasound2-dev<\/code>."}} {"origin_server_ts":1698316106310,"event_id":"$Zq6wT-HgBPDP0U-66xYPCiuyqcH_0vb57OvBConYLOA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's completed: https://functional.cafe/@loke/111300816806122694","msgtype":"m.text"}} {"origin_server_ts":1698316123539,"event_id":"$XjBPsU74UgADkkARzM2xAdKFEEIkggBClMJkIa_guuo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: is the implementation aligned with how you thought of it?","msgtype":"m.text","formatted_body":"Marshall<\/a>: is the implementation aligned with how you thought of it?"}} {"origin_server_ts":1698370010117,"event_id":"$cIv9n4IhRDiBbtJ2Lkq6oBCmJwvWtfC2g7cpxJLeFzc","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'm running Kap!\n\nI know I made a point about not wanting to install java, but I figured I'll need to if I want to stay on top of changes to Kap.","msgtype":"m.text"}} {"origin_server_ts":1698370105477,"event_id":"$ILPmDQGiL6KjEe5g3koJx5HHCJC9U4VN4Wh4m3tV1IQ","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"APL has long time been in 3rd place for me behind J and BQN... something about APL just doesn't click with me... so I dunno how much I'll use Kap, but _feel_ I'm more likely to use it over Dyalog. We'll see.","msgtype":"m.text","formatted_body":"APL has long time been in 3rd place for me behind J and BQN... something about APL just doesn't click with me... so I dunno how much I'll use Kap, but feel<\/em> I'm more likely to use it over Dyalog. We'll see."}} {"origin_server_ts":1698370575013,"event_id":"$CQO_Xmvy1Sz3qeDQ9t2FLLzDfprzFfUmgAvUXocmcwk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's why there are many languages. 😃","msgtype":"m.text"}} {"origin_server_ts":1698370721109,"event_id":"$P4GXkN9WmzDrY-FR44QTF82nAKcdyUSgt5HZRLFDyzs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But please let me know any thoughts you have. It's helpful. Especially if you only play with it occasionally. Hearing the view of someone who isn't deep into it is very useful ","msgtype":"m.text"}} {"origin_server_ts":1698370980290,"event_id":"$31N3cVWtCBDcU9fzktHokUfkHoBcwiAq0xq1ywPpH1o","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I'm sure I'll be asking questions. I've looked over the docs and the APL differences, but some things still catch me, like `2 = 1 2 3` works, but not `\"b\" = \"abc\"`. Do I just use `⍷` instead, or am I missing something","msgtype":"m.text","formatted_body":"I'm sure I'll be asking questions. I've looked over the docs and the APL differences, but some things still catch me, like 2 = 1 2 3<\/code> works, but not \"b\" = \"abc\"<\/code>. Do I just use ⍷<\/code> instead, or am I missing something"}} {"origin_server_ts":1698371044787,"event_id":"$XIWD4SrrWC146vLjc02sirv4n5BHwUTVC5uXIFA7eEw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ah, I should make that more clear.","msgtype":"m.text"}} {"origin_server_ts":1698371059017,"event_id":"$QtbuXCvTMfFWkQw6tz6wEkGP-ysdK_NgPn9bpTs7bK0","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"oh, `@b` works","msgtype":"m.text","formatted_body":"oh, @b<\/code> works"}} {"origin_server_ts":1698371087266,"event_id":"$fdadjHLLPP5YRaSxe--QlfhLuxIXUhiPFmCkd08R4e0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"In APL, 'a' is a character, while '', 'ab', 'abc' are arrays. I consider that inconsistent. ","msgtype":"m.text"}} {"origin_server_ts":1698371094644,"event_id":"$rz3YWAgnFnC_wCVroDyii_uBP7PRtP3-Xbuvg_ZH0d4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ah. So you figured it out.","msgtype":"m.text"}} {"origin_server_ts":1698371127173,"event_id":"$b3f2Yn3cpidXw1ovHabXfM9S3YmLEDti7aa7JDEQZCc","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"yeah, makes sense. In fact I initially tried `'b' = \"abc\"` before I remember your char syntax","msgtype":"m.text","formatted_body":"yeah, makes sense. In fact I initially tried 'b' = \"abc\"<\/code> before I remember your char syntax"}} {"origin_server_ts":1698371170777,"event_id":"$wWKhZkpDYVvu-Ae9o_kt5mfk4H6TmFlIPCiFy2RtDaU","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"so space char is just `@ `","msgtype":"m.text","formatted_body":"so space char is just @ <\/code>"}} {"origin_server_ts":1698371175005,"event_id":"$cyl0BAYT1LliOp70OOjJ1GgxRRDMI_4cjC6k2zm2-Z8","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"so space char is just `@ `?","msgtype":"m.text","formatted_body":"so space char is just @ <\/code>?"},"m.relates_to":{"event_id":"$wWKhZkpDYVvu-Ae9o_kt5mfk4H6TmFlIPCiFy2RtDaU","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * so space char is just `@ `?","msgtype":"m.text","formatted_body":" * so space char is just @ <\/code>?"}} {"origin_server_ts":1698371232051,"event_id":"$QwK52ABRja4aUwRvKrbPAWrQgm48XFFX7T4vWiAlCwg","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"sorry... it's in the docs","msgtype":"m.text"}} {"origin_server_ts":1698371244642,"event_id":"$GI9buYt-eirV52HdmmQaXMoSuQnW6dIGIVhOqRE4oms","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"`@\\s`","msgtype":"m.text","formatted_body":"@\\s<\/code>"}} {"origin_server_ts":1698371607046,"event_id":"$-Syd4g7fLzH6k87QOFkjY_ZGjcEoE4PGqdqK5qzzy14","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"so `⊆` and `⊂` are essentially swapped from what Dyalog does, correct?\n\nKap for APL'ers mentions `⊂` but not `⊆`.","msgtype":"m.text","formatted_body":"

                    so ⊆<\/code> and ⊂<\/code> are essentially swapped from what Dyalog does, correct?<\/p>\n

                    Kap for APL'ers mentions ⊂<\/code> but not ⊆<\/code>.<\/p>\n"}} {"origin_server_ts":1698373479314,"event_id":"$sipZX_098Ma7sGFNjXq4MOMwz0oeglCD8vZg-Pos-9E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. Pretty much. And the docs are indeed incomplete. ","msgtype":"m.text"}} {"origin_server_ts":1698373489917,"event_id":"$0riU2sti6TlQhRPa1OJK1Hug0hImIjcDNBFQ5rVO3LI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll update it later. Maybe today.","msgtype":"m.text"}} {"origin_server_ts":1698373603823,"event_id":"$ZhRRXo7jck2KEHdTYixX1cUdGjxiPBKug0iZ5YJ6w6o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$wWKhZkpDYVvu-Ae9o_kt5mfk4H6TmFlIPCiFy2RtDaU"}},"format":"org.matrix.custom.html","body":"> <@elcar0:matrix.org> so space char is just `@ `?\n\nAs you noted, this does indeed work, but @\\s was added because it's terribly confusing. ","msgtype":"m.text","formatted_body":"

                    In reply to<\/a> @elcar0:matrix.org<\/a>
                    so space char is just @ <\/code>?<\/blockquote><\/mx-reply>As you noted, this does indeed work, but @\\s was added because it's terribly confusing."}} {"origin_server_ts":1698374073389,"event_id":"$yC-0_BLafdGOlC5PdO_mTpbmAkwOxQErRsjj67harC8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Basically, `⊂` is as per APL2. Then `⊆` is Dyalog's version of the same symbol.","msgtype":"m.text","formatted_body":"Basically, ⊂<\/code> is as per APL2. Then ⊆<\/code> is Dyalog's version of the same symbol."}} {"origin_server_ts":1698406869139,"event_id":"$rcqUgVpc-pIMjwUjrFXzXMeDCxBR6TovCul2BtnRx4Y","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$XjBPsU74UgADkkARzM2xAdKFEEIkggBClMJkIa_guuo"}},"format":"org.matrix.custom.html","body":"Oops, missed looking at this. I had thought `∧[1]` would be `∧⍤¯1` from your description. I really don't like implicit ravelling so I'm not so sure about your version, but I don't think other options are really better.","msgtype":"m.text","formatted_body":"
                    ↰ <\/a> loke<\/a> <\/mx-reply>Oops, missed looking at this. I had thought ∧[1]<\/code> would be ∧⍤¯1<\/code> from your description. I really don't like implicit ravelling so I'm not so sure about your version, but I don't think other options are really better."}} {"origin_server_ts":1698409615026,"event_id":"$wxrz-0_W2kzUVTHnCCM-Znu7EHQN0OUnjSrbu6_r5CA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Wait, your rank -1 suggestion would just sort each row independently? ","msgtype":"m.text"}} {"origin_server_ts":1698409809885,"event_id":"$DvKQEwcdKx3Mk5Q7O2msRjnIUVfsb_wpcV5AMLKju_4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"For the rank 3 array it'd be each matrix, but that's the basic idea.","msgtype":"m.text","formatted_body":"For the rank 3 array it'd be each matrix, but that's the basic idea."}} {"origin_server_ts":1698449439648,"event_id":"$BDerAxfbEWDgRaFX80KtZ_Udzkj6XwEO3M90iSrH04c","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"loke: I'm doing AOC 2015.02 and had a question. Does rank operator not bind tight enough? I was parsing the input and sorting the \"rows\", and after reading them in, doing Disclose first avoids the dreaded double-each, but it ends up being longer because I had to parenthesis the rank-1 sort\n\nhttps://kapdemo.dhsdevelopments.com/clientweb2/#in%20%E2%86%90%20%40x%20((~%E2%8D%B7)%C2%AB%E2%8A%82%C2%BB%E2%8A%A2)%C2%A8%20%224x23x21%22%20%2222x29x19%22%20%2211x4x11%22%20%228x10x5%22%0Aa%20%E2%86%90%20%E2%8D%89%E2%8A%83%E2%88%A7%C2%A8%E2%8D%8E%C2%A8%C2%A8%20%20%20in%0Ab%20%E2%86%90%20%E2%8D%89(%E2%88%A7%E2%8D%A41)%E2%8D%8E%C2%A8%E2%8A%83%20in%0Aa%E2%8D%AA%3Cb","msgtype":"m.text","formatted_body":"

                    loke<\/a>: I'm doing AOC 2015.02 and had a question. Does rank operator not bind tight enough? I was parsing the input and sorting the \"rows\", and after reading them in, doing Disclose first avoids the dreaded double-each, but it ends up being longer because I had to parenthesis the rank-1 sort<\/p>\n

                    https://kapdemo.dhsdevelopments.com/clientweb2/#in%20%E2%86%90%20%40x%20((~%E2%8D%B7)%C2%AB%E2%8A%82%C2%BB%E2%8A%A2)%C2%A8%20%224x23x21%22%20%2222x29x19%22%20%2211x4x11%22%20%228x10x5%22%0Aa%20%E2%86%90%20%E2%8D%89%E2%8A%83%E2%88%A7%C2%A8%E2%8D%8E%C2%A8%C2%A8%20%20%20in%0Ab%20%E2%86%90%20%E2%8D%89(%E2%88%A7%E2%8D%A41)%E2%8D%8E%C2%A8%E2%8A%83%20in%0Aa%E2%8D%AA%3Cb<\/p>\n"}} {"origin_server_ts":1698449494395,"event_id":"$ZvnhxtAIN7N3ikclgsb2U6UXYokCysMxurpz9gYNxsk","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Coming from J and BQN, I have no working model of how to use function axes, so maybe there's a better way using that. Any thoughts/tips?","msgtype":"m.text"}} {"origin_server_ts":1698449763071,"event_id":"$mUJ_zOMwStH-7j8R75eHVgGQR72OzpyjATN73XgTX4U","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Coming from J and BQN, I have no working model of how to use function axis, so maybe there's a better way using that. Any thoughts/tips?","msgtype":"m.text"},"m.relates_to":{"event_id":"$ZvnhxtAIN7N3ikclgsb2U6UXYokCysMxurpz9gYNxsk","rel_type":"m.replace"},"m.mentions":{},"body":" * Coming from J and BQN, I have no working model of how to use function axis, so maybe there's a better way using that. Any thoughts/tips?","msgtype":"m.text"}} {"origin_server_ts":1698467991946,"event_id":"$E2hDHkBqX7eLuas2zoly16qBi100c4hNrDiReaKSu9I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have to look at what the actual problem is, but if you want to sort each row independently then using the rank operator is what you den to do. ","msgtype":"m.text"}} {"origin_server_ts":1698468014744,"event_id":"$iHfkobcTbfViDvqhBtjwl9OAJo5_u_o2qh2-4wqISkE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm take a closer look when I get in front of the computer. ","msgtype":"m.text"}} {"origin_server_ts":1698468603775,"event_id":"$cGLe3CUWSnpRA6_cuuxbT-Q7KkimvmrHvbPPaTcEg-k","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Yeah, It's just a rank-1 sort... but I was wondering why I need to parenthesize the entire sort expression `(∧⍤1)`\nIn APL i just do `(⊂∘⍋⌷⊢)⍤¯1`... yes, there are parens, but they are around the function only, not the rank operator and rank as well\n\nI wondered if this is a precedence issue with `⍤`, or perhaps some Kap semantics I was misunderstanding","msgtype":"m.text","formatted_body":"

                    Yeah, It's just a rank-1 sort... but I was wondering why I need to parenthesize the entire sort expression (∧⍤1)<\/code>
                    In APL i just do (⊂∘⍋⌷⊢)⍤¯1<\/code>... yes, there are parens, but they are around the function only, not the rank operator and rank as well<\/p>\n

                    I wondered if this is a precedence issue with ⍤<\/code>, or perhaps some Kap semantics I was misunderstanding<\/p>\n"}} {"origin_server_ts":1698468993429,"event_id":"$HuBX8Nk6jHStS-kIMaQSD-RYKGGCEcBFXobcqIfqMhw","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"For example, in APL Extended, `∧⍤1⍎¨↑ in` works","msgtype":"m.text","formatted_body":"For example, in APL Extended, ∧⍤1⍎¨↑ in<\/code> works"}} {"origin_server_ts":1698469409944,"event_id":"$O4BYFQ-2B39gNd2CBlJ3mh3OdezwPLPRFh2klh-6lBI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Actually it's explained in the documentation. The problem is with operators that accept values as arguments rather than functions. They always need to be parenthesised. There are two of those: rank and power.","msgtype":"m.text"}} {"origin_server_ts":1698469484324,"event_id":"$8La6iMm7yhDm1E1DQrYF3Te-Oy8yguvixXOLwv1FtEc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I Actually considered changing it such that the value arguments come inside of square brackets instead as I believe that to be more clear. But I haven't settled in that yet. ","msgtype":"m.text"}} {"origin_server_ts":1698469494488,"event_id":"$EgqYO0B72wpDtodJuuh7_le4wsI6tbZkOg3QZciy7gc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I Actually considered changing it such that the value arguments come inside of square brackets instead as I believe that to be more clear. But I haven't settled on that yet. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$8La6iMm7yhDm1E1DQrYF3Te-Oy8yguvixXOLwv1FtEc","rel_type":"m.replace"},"body":"* I Actually considered changing it such that the value arguments come inside of square brackets instead as I believe that to be more clear. But I haven't settled on that yet. ","msgtype":"m.text"}} {"origin_server_ts":1698469501053,"event_id":"$sApHSsvRaVL-K55yAxvG9_XJOT2SkOWNf_-01E5GTKU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I actually considered changing it such that the value arguments come inside of square brackets instead as I believe that to be more clear. But I haven't settled on that yet. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$8La6iMm7yhDm1E1DQrYF3Te-Oy8yguvixXOLwv1FtEc","rel_type":"m.replace"},"body":"* I actually considered changing it such that the value arguments come inside of square brackets instead as I believe that to be more clear. But I haven't settled on that yet. ","msgtype":"m.text"}} {"origin_server_ts":1698469589065,"event_id":"$lNITs2XYcm_gFyQObO8Nq8IceH6LGK9ah-J1FYiVBfk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Here is the section in the documentation that I was thinking of: https://kapdemo.dhsdevelopments.com/kap-comparison.html#_parsing_operators","msgtype":"m.text"}} {"origin_server_ts":1698474563534,"event_id":"$nF61uqSjW6FsNTfj8GLmlSgX9cq-BS8vkfokr2cRkOQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"elcar0: Now, if you are morbidly interested in the underlying reason, it can be found on [this](https://codeberg.org/loke/array/src/branch/master/array/src/commonMain/kotlin/array/op.kt#L91) line of code. After it finds the rank operator, it parses another value with strong right binding, which means that the APL trick of doing `A⍤1⊢2` will simply parse `1⊢2` as the argument to the operator, and you'll end up with a bare function rather than a call.","msgtype":"m.text","formatted_body":"elcar0<\/a>: Now, if you are morbidly interested in the underlying reason, it can be found on this<\/a> line of code. After it finds the rank operator, it parses another value with strong right binding, which means that the APL trick of doing A⍤1⊢2<\/code> will simply parse 1⊢2<\/code> as the argument to the operator, and you'll end up with a bare function rather than a call."}} {"origin_server_ts":1698477590670,"event_id":"$ylFNgUpZNDF5MUAf7c0UNteG5lTORhUH2bCq1CB920M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I noticed that I never documented the return function. I've added it to the reference and the kap for aplers documents.","msgtype":"m.text"}} {"origin_server_ts":1698477783739,"event_id":"$aTK5zfWFnXbutnGX7TzTUAqm-a5vpyFPVPv1l8nlCY8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Well, there was a very brief description in the reference, but I expanded on it.","msgtype":"m.text"}} {"origin_server_ts":1698477973300,"event_id":"$pstVqMUPDppWVl3sH4_iwG1kdpDpz_lQkogPQYblzRs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/reference.html#_return_from_a_function","msgtype":"m.text"}} {"origin_server_ts":1698481868301,"event_id":"$Xo2D8GCmStzVoFqLMFarBgu6ghcOBw_xzt0pGA5IHxI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"elcar0: OK, I took a quick look at your code. My first comment: Your definition of `in` is better written as such:\n```\nin ← (@x≠)⍛⊂¨ \"3x23x21\" \"22x29x19\" \"11x4x11\" \"8x10x5\"\n```","msgtype":"m.text","formatted_body":"

                    elcar0<\/a>: OK, I took a quick look at your code. My first comment: Your definition of in<\/code> is better written as such:<\/p>\n

                    in ← (@x≠)⍛⊂¨ \"3x23x21\" \"22x29x19\" \"11x4x11\" \"8x10x5\"\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1698482136733,"event_id":"$u8dQ4eTUmgX1pE6ggKCYyJLDrkpuQywKpKBD6uAMsqM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The definition of `a` seems simple enough, although I'd probably write it as:\n```\na ← ⍉⊃(∧⍎¨)¨ in\n```\nThat's just for clarity though. It's ever so slightly more performant, but nothing that should matter.","msgtype":"m.text","formatted_body":"

                    The definition of a<\/code> seems simple enough, although I'd probably write it as:<\/p>\n

                    a ← ⍉⊃(∧⍎¨)¨ in\n<\/code><\/pre>\n

                    That's just for clarity though. It's ever so slightly more performant, but nothing that should matter.<\/p>\n"}} {"origin_server_ts":1698482354596,"event_id":"$_-ToRHOLUlWRNrpnIfdR63ecRHDqWgkGMPJb6Ry1Wi4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The `b` version obviously works too, but I think `a` is more clear.","msgtype":"m.text","formatted_body":"The b<\/code> version obviously works too, but I think a<\/code> is more clear."}} {"origin_server_ts":1698482477798,"event_id":"$kx0H9peoGY-4TKNtPRPnFc-aXu4BLfx4LbgLi-n0UaM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: I note that if I implement under for `>`, then the following: `∧⍢>` would be equivalent to `∧[1]`.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I note that if I implement under for ><\/code>, then the following: ∧⍢><\/code> would be equivalent to ∧[1]<\/code>."}} {"origin_server_ts":1698482517103,"event_id":"$IZDP_LkDdH27Vqp1XHbmV3HNYajbLxh83Vr5K3kcLms","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"And there you would have your usecase for monadic `>` :-)","msgtype":"m.text","formatted_body":"And there you would have your usecase for monadic ><\/code> :-)"}} {"origin_server_ts":1698483084949,"event_id":"$fHe4Y9TfnOIoyXM0zP-b1frufbTe5DI6u565AKphMRc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"elcar0: I do wonder why you bother sorting the dimensions in the first place though? The result with be the same no matter what order you calculate them.","msgtype":"m.text","formatted_body":"elcar0<\/a>: I do wonder why you bother sorting the dimensions in the first place though? The result with be the same no matter what order you calculate them."}} {"origin_server_ts":1698506565169,"event_id":"$kwmX9vLOPdLIitxPbi6n-CVeFOJZ0dOLuuM2L0ZmDHc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"elcar0: I think the solution to the second program should be: `(×⍨⌊/)«+»(2××/) ⊃ ⍎¨¨ (@x≠)⍛⊂¨`","msgtype":"m.text","formatted_body":"elcar0<\/a>: I think the solution to the second program should be: (×⍨⌊/)«+»(2××/) ⊃ ⍎¨¨ (@x≠)⍛⊂¨<\/code>"}} {"origin_server_ts":1698506578692,"event_id":"$k1bZyWT-h2rFsEldN4M8WszSUaE5JzhdUNVrUHeQL1M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"elcar0: I think the solution to the second problem should be: `(×⍨⌊/)«+»(2××/) ⊃ ⍎¨¨ (@x≠)⍛⊂¨`","msgtype":"m.text","formatted_body":"elcar0<\/a>: I think the solution to the second problem should be: (×⍨⌊/)«+»(2××/) ⊃ ⍎¨¨ (@x≠)⍛⊂¨<\/code>"},"m.relates_to":{"event_id":"$kwmX9vLOPdLIitxPbi6n-CVeFOJZ0dOLuuM2L0ZmDHc","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * elcar0: I think the solution to the second problem should be: `(×⍨⌊/)«+»(2××/) ⊃ ⍎¨¨ (@x≠)⍛⊂¨`","msgtype":"m.text","formatted_body":" * elcar0<\/a>: I think the solution to the second problem should be: (×⍨⌊/)«+»(2××/) ⊃ ⍎¨¨ (@x≠)⍛⊂¨<\/code>"}} {"origin_server_ts":1698506648991,"event_id":"$rJQPESBsIQhhd9aIrK9aPSaUtRDaAhRw3cEV7TRVhXc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"elcar0: I think the solution to the second problem should be: `(×⍨⌊/)«+»(6××/) ⊃ ⍎¨¨ (@x≠)⍛⊂¨`","msgtype":"m.text","formatted_body":"elcar0<\/a>: I think the solution to the second problem should be: (×⍨⌊/)«+»(6××/) ⊃ ⍎¨¨ (@x≠)⍛⊂¨<\/code>"},"m.relates_to":{"event_id":"$kwmX9vLOPdLIitxPbi6n-CVeFOJZ0dOLuuM2L0ZmDHc","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":" * elcar0: I think the solution to the second problem should be: `(×⍨⌊/)«+»(6××/) ⊃ ⍎¨¨ (@x≠)⍛⊂¨`","msgtype":"m.text","formatted_body":" * elcar0<\/a>: I think the solution to the second problem should be: (×⍨⌊/)«+»(6××/) ⊃ ⍎¨¨ (@x≠)⍛⊂¨<\/code>"}} {"origin_server_ts":1698517077240,"event_id":"$f4NVTfwmPy7QYuovCvgkUQIrSORB8gAVpV5ixjiEAVs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Actually no, I'm multiplying all the numbers, instead of pairs.","msgtype":"m.text"}} {"origin_server_ts":1698562206174,"event_id":"$eUDC5a-fe55IAlBY8BgTSAB9YBIBxWKtPOqRfQBA1f0","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Does Kap have infinity?","msgtype":"m.text"}} {"origin_server_ts":1698563236304,"event_id":"$s_YQx_DXHFbZsP2HLyPmrGCCEf-MOvNWeJu-e5Ku0N0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"elcar0: For floats, yes.","msgtype":"m.text","formatted_body":"elcar0<\/a>: For floats, yes."}} {"origin_server_ts":1698563304578,"event_id":"$NzVxJ8j9YFAuh15pp_VDwwippRzEx4PHFMG-qLF0Ruk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Although, there is a special case when you do `1.0÷0` which gives you 0.","msgtype":"m.text","formatted_body":"Although, there is a special case when you do 1.0÷0<\/code> which gives you 0."}} {"origin_server_ts":1698563351756,"event_id":"$K2gwukiMDEhj0j0UvxCoIMojl4hGc-Y6KpDhtWFhgDg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So creating a +Inf isn't easy.","msgtype":"m.text"}} {"origin_server_ts":1698563357147,"event_id":"$lgyHUH34Io9VADYwPPkbY4EKBjcmYmAHr01jC-FHEvo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I should probably remove that special case.","msgtype":"m.text"}} {"origin_server_ts":1698563401466,"event_id":"$vAaww7aH0tK6L54wTUQzt85qofpkKDS9uHSNVqjJaR0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The question, however, then becomes: Should I still special case for rationals? And if, so, i it a good idea that the numeric behaviour is so vastly different between floats and rationals?","msgtype":"m.text"}} {"origin_server_ts":1698563542349,"event_id":"$XQv01bNQ5boBQMK3PgUlKXf-Q-NdIj7JJLXv9uvI9aY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Anyway, if you want an infinity you can express is as: `×⍨1e300`.","msgtype":"m.text","formatted_body":"Anyway, if you want an infinity you can express is as: ×⍨1e300<\/code>."}} {"origin_server_ts":1698563573089,"event_id":"$MLhy-gL5Px_FSEDmFlC3DpLP4gPNc1YYLwNkAVzrE28","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I want to removed the special casing on division, but then division by zero for rationals should probably be an error.","msgtype":"m.text"}} {"origin_server_ts":1698563602032,"event_id":"$YE2NTQE_LSV2X9qJsgE-jDvqATQlX0XI-QoKu0tjJHs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'd like the opinion of Marshall here since he's the mathematician.","msgtype":"m.text","formatted_body":"I'd like the opinion of Marshall<\/a> here since he's the mathematician."}} {"origin_server_ts":1698580764526,"event_id":"$bKK8RXeOU7334E07o6jlgTmxzv89-xWOGNsOET3JWoU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"J seems to support a rational-typed infinity. I don't see anything obviously wrong with it as it's just 1/0.","msgtype":"m.text","formatted_body":"J seems to support a rational-typed infinity. I don't see anything obviously wrong with it as it's just 1/0."}} {"origin_server_ts":1698583191768,"event_id":"$UWyN2QKZIygPI6Bb1ghfy04WjeIMvpXFhBqR4rQCwmc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: that's an interesting thought. But wouldn't there be some issues? Without special treatment, +inf - 2 would be -inf.","msgtype":"m.text","formatted_body":"Marshall<\/a>: that's an interesting thought. But wouldn't there be some issues? Without special treatment, +inf - 2 would be -inf."}} {"origin_server_ts":1698583418658,"event_id":"$cwDvNb9A6exgVX_4ONCl_ifXwXkgccDu1q7AAzRN1eE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"how so? `1/0 - 2/1` → `(1*1)/(0*1) - (2*0)/(1*0)` → `(1*1 - 2*0) / (1*0)` → `(1 - 0) / 0` → `1/0`","msgtype":"m.text","formatted_body":"how so? 1/0 - 2/1<\/code> → (1*1)/(0*1) - (2*0)/(1*0)<\/code> → (1*1 - 2*0) / (1*0)<\/code> → (1 - 0) / 0<\/code> → 1/0<\/code>"}} {"origin_server_ts":1698583940173,"event_id":"$NgjSU0sgERuPSVGM1rs23NE0udl7-s2xVQQK4GaYO64","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ok there are some weird things, `1/0 + 1/¯1` ends up at `¯1/0` by that, but that's only problematic if the denominator is ever allowed to be negative; and `1/0 + 1/2` ends up at `2/0` though that's just a question of simplification","msgtype":"m.text","formatted_body":"ok there are some weird things, 1/0 + 1/¯1<\/code> ends up at ¯1/0<\/code> by that, but that's only problematic if the denominator is ever allowed to be negative; and 1/0 + 1/2<\/code> ends up at 2/0<\/code> though that's just a question of simplification"}} {"origin_server_ts":1698586555876,"event_id":"$0hu3Yyi3JeC0PN1gv-40mf4oP8XbeXjZU2TORpHlpCc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Fair enough. ","msgtype":"m.text"}} {"origin_server_ts":1698586581688,"event_id":"$uPsVeEUABh59_KHpo6nMV2B0P8RKusCWmukSRT34VGU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But the other problem is that I'm calling into gmp in the native version, which don't support it I think.","msgtype":"m.text"}} {"origin_server_ts":1698586708229,"event_id":"$C1Y_9VrSIxrnJkkQZ8rmOcEVBdw3QQr0UokuaYPDXuk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah, that'd be the more annoying limitation","msgtype":"m.text","formatted_body":"yeah, that'd be the more annoying limitation"}} {"origin_server_ts":1698586772621,"event_id":"$dDhlWDgpmIq6ozFtoS8d2YkrnnNV7K77-CeuY9zL9yc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(oh and then there's also like `1/0 - 1/0`; and it seems even `1/0 + 1/0` breaks to `0/0` without special-casing)","msgtype":"m.text","formatted_body":"(oh and then there's also like 1/0 - 1/0<\/code>; and it seems even 1/0 + 1/0<\/code> breaks to 0/0<\/code> without special-casing)"}} {"state_key":"@thinpott:matrix.org","origin_server_ts":1698589614577,"event_id":"$pLJwkY1rop4fAizmFHXKZL6E3SOCjiTfwaibVq4rk4A","sender":"@thinpott:matrix.org","user_id":"@thinpott:matrix.org","type":"m.room.member","content":{"displayname":"Tian Ying","membership":"join"}} {"origin_server_ts":1698590020418,"event_id":"$gEova_Be-xgq4wBm_7dKXQ_M-V72mrgDU7EJjKsdV9E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thinking about it some more, I'm not sure I want to define infinity for rational numbers. Perhaps there is a paper on that, but it's probably over my head","msgtype":"m.text"}} {"origin_server_ts":1699119107705,"event_id":"$tlo_EXYSlhgQXaevyjSaqJN-GY5zs_dbcyZJg1qmaaU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I was working on some real kap code (rather than small examples) and I realised that it's time to tackle the issue of parallelism outside the `∥` operator which is mainly a performance thing. I needed an async primitive, since that's the only way I can get such operations to work on the js backend.","msgtype":"m.text","formatted_body":"I was working on some real kap code (rather than small examples) and I realised that it's time to tackle the issue of parallelism outside the ∥<\/code> operator which is mainly a performance thing. I needed an async primitive, since that's the only way I can get such operations to work on the js backend."}} {"origin_server_ts":1699119115150,"event_id":"$v68kvRf83fSYpnQi06iwBbd8IXH2rgeBDWL3c6D3qdw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So my first prototype looks like this:","msgtype":"m.text"}} {"origin_server_ts":1699119182383,"event_id":"$JCtooPLArRc607qm7BElsaEFo8wpVgQQxwcYvMJA7WE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\nx FN0 callAsync FN1 y\n```\nThis calls `x FN1 y` in some way so as to not block the main execution. Eventually `FN0` will be called with the result. Individual functions must support async, or you'll get an error.","msgtype":"m.text","formatted_body":"

                    x FN0 callAsync FN1 y\n<\/code><\/pre>\n

                    This calls x FN1 y<\/code> in some way so as to not block the main execution. Eventually FN0<\/code> will be called with the result. Individual functions must support async, or you'll get an error.<\/p>\n"}} {"origin_server_ts":1699119214143,"event_id":"$GjVkZe_GxhJm7QKkr54wInbnnFIijvVRNulhOXck1xM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So you can do an async http request and print the result using: `io:print callAsync io:httpRequest \"https://.../\"`","msgtype":"m.text","formatted_body":"So you can do an async http request and print the result using: io:print callAsync io:httpRequest \"https://.../\"<\/code>"}} {"origin_server_ts":1699119250157,"event_id":"$Xc8OqkfO8gs9M5C-rlXRtGfsoA_jl74MfWmEoHJGiY4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm not sure this is ideal, but it does solve my immediate problem of having long-running HTTP queries.","msgtype":"m.text"}} {"origin_server_ts":1699179685686,"event_id":"$qaOdXXX8S4jcaZb1qhvNWQlbNbckohoBJmzpmxgWOys","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: I have a design dilemma. A sequence of values separated by ; is an n-tuple. The beauty of this is that bracket index receives a si gle argument and there is no special magic whrn dealing with mumti-dimensional arrays.","msgtype":"m.text","formatted_body":"dzaima<\/a>: I have a design dilemma. A sequence of values separated by ; is an n-tuple. The beauty of this is that bracket index receives a si gle argument and there is no special magic whrn dealing with mumti-dimensional arrays."}} {"origin_server_ts":1699179780102,"event_id":"$HB5HkGFQdwrCTpN3zP0XqJreXPRkTX4oN9C-iRe1RpI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"However, in order to allow empty axes, there is a magic null value. It's the same as zilde, in that it has the same dimensions and the same behaviour. However, it can be treated specially if needed (which is what bracket indexing does)","msgtype":"m.text"}} {"origin_server_ts":1699179824178,"event_id":"$qIt1PP25z1IdHWgfHe6lhz82nhPNAZb9Dal1-ecNoGc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm considering exposing this special null value and making it more visible, since there are a few other occasions where I have needed it.","msgtype":"m.text"}} {"origin_server_ts":1699179855295,"event_id":"$DuQ1s6vIVGRMTdEa0UAdq-qBctN9QerxgEisaFUynB4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm wondering anyone has given any thought to null values and apl.","msgtype":"m.text"}} {"origin_server_ts":1699179881792,"event_id":"$oR5rgwWI-SwQKLLR3DRwv8bBcaf6qQrv6oeJIy0lQso","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: are you aware of papers on the topic perhaps?","msgtype":"m.text","formatted_body":"Marshall<\/a>: are you aware of papers on the topic perhaps?"}} {"origin_server_ts":1699180063945,"event_id":"$YEpNLyF003Gj7FySUKUMa-o3wibnyNfhVGOilKkAr5c","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'd think that an empty tuple shouldn't be `⍬`-like, as non-empty tuples are all rank 0 afaict","msgtype":"m.text","formatted_body":"I'd think that an empty tuple shouldn't be ⍬<\/code>-like, as non-empty tuples are all rank 0 afaict"}} {"origin_server_ts":1699180108836,"event_id":"$qCiTITlmhR82mmKdPyBAbsPTZs1KhH_SZ413xky_Pgw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I'd think that an empty tuple shouldn't be `⍬`-like, as non-empty tuples are all rank 0 in Kap afaict","msgtype":"m.text","formatted_body":"I'd think that an empty tuple shouldn't be ⍬<\/code>-like, as non-empty tuples are all rank 0 in Kap afaict"},"m.relates_to":{"event_id":"$YEpNLyF003Gj7FySUKUMa-o3wibnyNfhVGOilKkAr5c","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* I'd think that an empty tuple shouldn't be `⍬`-like, as non-empty tuples are all rank 0 in Kap afaict","msgtype":"m.text","formatted_body":"* I'd think that an empty tuple shouldn't be ⍬<\/code>-like, as non-empty tuples are all rank 0 in Kap afaict"}} {"origin_server_ts":1699180221179,"event_id":"$yU4meza8KsghBpCcI-wvwFRvyHmVPtWL4dNK-GuNkro","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and when it's just another rank-0 depth-0 thing, you can freely make it whatever you want without disturbing the array model","msgtype":"m.text","formatted_body":"and when it's just another rank-0 depth-0 thing, you can freely make it whatever you want without disturbing the array model"}} {"origin_server_ts":1699180284788,"event_id":"$rc6b0zJb6MtboB3A4sN136-BWL0o8gWQkJO-sfc41Xw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"e.g. Dyalog has `⎕NULL` which is is a rank-0 depth-0 thing","msgtype":"m.text","formatted_body":"e.g. Dyalog has ⎕NULL<\/code> which is is a rank-0 depth-0 thing"}} {"origin_server_ts":1699180357017,"event_id":"$2VPx7s5X-lx3Wo4GWPs5HAu_ozIXLJ-eM8LjivH2pAs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$YEpNLyF003Gj7FySUKUMa-o3wibnyNfhVGOilKkAr5c"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> I'd think that an empty tuple shouldn't be `⍬`-like, as non-empty tuples are all rank 0 in Kap afaict\n\nSorry. I think I didn't explain well. The following is a 3-tuple where the second element is the special null: `1;;2`","msgtype":"m.text","formatted_body":"

                    In reply to<\/a> @dzaima:matrix.org<\/a>
                    I'd think that an empty tuple shouldn't be ⍬<\/code>-like, as non-empty tuples are all rank 0 in Kap afaict<\/blockquote><\/mx-reply>Sorry. I think I didn't explain well. The following is a 3-tuple where the second element is the special null: 1;;2<\/code>"}} {"origin_server_ts":1699180395649,"event_id":"$Vz3V3fNOGadSEbjPBMrt7x_Hbh5OHgqGr9Vsh2tbJU8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What I'm thinking about isnto introduce a symbol (or name, maybe \"null\"?) tgat represents this value.","msgtype":"m.text"}} {"origin_server_ts":1699180397332,"event_id":"$eGaLUglJZTstQRxQC_7QyGtrnwho_hZiTkXieEZB70I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ah; well, my latter two messages still stand","msgtype":"m.text","formatted_body":"ah; well, my latter two messages still stand"}} {"origin_server_ts":1699180658618,"event_id":"$kxbJdcv-supuUCos_eWgvLzahloCRkHP_80DV8nEagc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ah got it","msgtype":"m.text"}} {"origin_server_ts":1699180671271,"event_id":"$FrBr5lbR2Gu--36btMg1w7K0EClh2_q6_MrS2GNQqmM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So basicqlly null would be a scalar value.","msgtype":"m.text"}} {"origin_server_ts":1699180703627,"event_id":"$CC1Nyi7oN8kTvN5Wc-McmHGLWT-NVoBPvjzd1wg7c6I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Makes sense, but should null be false? Currently, 0 is false and everything else is true.","msgtype":"m.text"}} {"origin_server_ts":1699180860033,"event_id":"$mIUw1ptRdZAUorbsydv3bNHYP1P_-qmzxvaDcebA3cA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"you could certainly make it be","msgtype":"m.text","formatted_body":"you could certainly make it be"}} {"origin_server_ts":1699180973830,"event_id":"$fC5XKJN_eGMLicqLieOSwIQw30CqZ0N5-T_C0kW0wZk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(you'd of course be opening up the possibility of misusing a truthiness check as an is-null check and have that fail on the non-null value `0`)","msgtype":"m.text","formatted_body":"(you'd of course be opening up the possibility of misusing a truthiness check as an is-null check and have that fail on the non-null value 0<\/code>)"}} {"origin_server_ts":1699186364318,"event_id":"$272cKBaSCADeCniaWwCwJ9_FEeaPfPA5qK0UWlSEwoc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's true. Null for false works in Lisp because 0 is true, but that's obviously not an option in an apl.","msgtype":"m.text"}} {"origin_server_ts":1699186541121,"event_id":"$a9AIvQAKPwBGSzev2DszATYoCj2L6s-mu0dIxQJbhKU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Another question, what is the actual meaning of the quad symbol? Is it just a part of a name like any other, and it's just by convention used for system names?","msgtype":"m.text"}} {"origin_server_ts":1699186884131,"event_id":"$6bIZmJ1f4PXY2-A6Ukk5VqyAh-xPnNirTPO_WiHp0JY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"doesn't really work for `⎕IO←n` or similar","msgtype":"m.text","formatted_body":"doesn't really work for ⎕IO←n<\/code> or similar"}} {"origin_server_ts":1699187227272,"event_id":"$ZMI8GZnEaxwe4KS8ydfsG4nYaRXdoSVNFlQYw8EBtTE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"but really the meaning is just what you choose to define it to be","msgtype":"m.text","formatted_body":"but really the meaning is just what you choose to define it to be"}} {"origin_server_ts":1699187293870,"event_id":"$FLUBS_k3ndlPHki_GzSr8Ffn84IMMppTkuYj8SqHi-o","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Arguably the null you want is more like `⍳∞`. It doesn't shorten itself based on conformability (which is what A Programming Language had) but filters out the invalid indices.","msgtype":"m.text","formatted_body":"Arguably the null you want is more like ⍳∞<\/code>. It doesn't shorten itself based on conformability (which is what A Programming Language had) but filters out the invalid indices."}} {"origin_server_ts":1699187344400,"event_id":"$M0J4AWJsid6DPeYDcTgu50Qvn_rUGk3R4qANpZKdaIU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Would also make some sense to use the function `⊢`.","msgtype":"m.text","formatted_body":"Would also make some sense to use the function ⊢<\/code>."}} {"origin_server_ts":1699189168062,"event_id":"$zjLjDkJ8vPQZBrYgDnS34BA3lwQZysq9X8A9Sh75r8M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"How would thar function be used?","msgtype":"m.text"}} {"origin_server_ts":1699189322444,"event_id":"$6sxC1RPU2rqhZELwpqFbzOnGWDbHgBvUU6GiwxMT804","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Rather than use a \"magic\" null value, use the function. This is if you want it to be something the programmer can easily create and pass to indexing.","msgtype":"m.text","formatted_body":"Rather than use a \"magic\" null value, use the function. This is if you want it to be something the programmer can easily create and pass to indexing."}} {"origin_server_ts":1699191920083,"event_id":"$BDGMli32tE_YKeye1QGtgo5ZFmbztcK-GaMlJwJZw78","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I was going to let the symbol `null` evaluate to the null value.","msgtype":"m.text","formatted_body":"I was going to let the symbol null<\/code> evaluate to the null value."}} {"origin_server_ts":1699206128577,"event_id":"$WkxviaPGipmr0237IkgFvm4pgK-pCeJM6M4w6Ubrgsk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"OK, I have implemented the basics now","msgtype":"m.text"}} {"origin_server_ts":1699429149719,"event_id":"$TMwqNltZFJ2yBLEtn-i5DE54YP27ZhFZv8UNqR2GBLw","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1699429176614,"event_id":"$BddxZx71nvAzajgX53R_HdY3sR_ZkSrPPnGhPI1bZ94","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$TMwqNltZFJ2yBLEtn-i5DE54YP27ZhFZv8UNqR2GBLw","type":"m.room.redaction","content":{"redacts":"$TMwqNltZFJ2yBLEtn-i5DE54YP27ZhFZv8UNqR2GBLw"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1699429172311,"event_id":"$KNrZPtADv-5JfqTIzI47h62_swczdRc6M7avFgICLUg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I've been doing financial calculations with Kap. Does that make it a real array language now? :-)","msgtype":"m.text"}} {"origin_server_ts":1699429176614,"event_id":"$BddxZx71nvAzajgX53R_HdY3sR_ZkSrPPnGhPI1bZ94","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$TMwqNltZFJ2yBLEtn-i5DE54YP27ZhFZv8UNqR2GBLw","type":"m.room.redaction","content":{"redacts":"$TMwqNltZFJ2yBLEtn-i5DE54YP27ZhFZv8UNqR2GBLw"}} {"origin_server_ts":1699430929935,"event_id":"$HxwBzYVR1x6Aax3gno-04moKWRmtRQKQ0oZj31qiB3Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Design question: When destructuring a tuple, and the list of variables doesn't match the list length, what should happen? I.e. what should be the value of `c` after doing this: `(a;b;c) ← (1;2)`","msgtype":"m.text","formatted_body":"Design question: When destructuring a tuple, and the list of variables doesn't match the list length, what should happen? I.e. what should be the value of c<\/code> after doing this: (a;b;c) ← (1;2)<\/code>"}} {"origin_server_ts":1699430946975,"event_id":"$rSWxRzPUsPZlLLWnH7s5K9ItaHxULxSKhSPF0nmt93M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Currently, I raise an error, but an alternative would be to assign it `null`.","msgtype":"m.text","formatted_body":"Currently, I raise an error, but an alternative would be to assign it null<\/code>."}} {"origin_server_ts":1699430966220,"event_id":"$FQur4k41mqcme4AT2-0pymRgGP4I621d9lNG6JADC1c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Likewise, should this be allowed (3 being dropped): `(a;b) ← (1;2;3)`","msgtype":"m.text","formatted_body":"Likewise, should this be allowed (3 being dropped): (a;b) ← (1;2;3)<\/code>"}} {"origin_server_ts":1699430990931,"event_id":"$GS8LGrH0uce48Mgzd2ZCjnxq1yF6va7_S2MDZXZmxhI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: I have a feeling you'll have some strong opinions here.","msgtype":"m.text","formatted_body":"
                    dzaima<\/a>: I have a feeling you'll have some strong opinions here."}} {"origin_server_ts":1699435661305,"event_id":"$sCJu4XWVVyHvIxeWkd8ag4OV4AcqTeV79srtlhQY2PQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$GS8LGrH0uce48Mgzd2ZCjnxq1yF6va7_S2MDZXZmxhI"}},"format":"org.matrix.custom.html","body":"eh, these are weird non-array things whose like main purpose is managing multiple arguments or something, so if padding for with nulls seems useful for that, I don't have much of a counter-argument","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>eh, these are weird non-array things whose like main purpose is managing multiple arguments or something, so if padding for with nulls seems useful for that, I don't have much of a counter-argument"}} {"origin_server_ts":1699436071771,"event_id":"$xrkM97RH2ABOcowLK9lR1jwdyZ6Mr4_QQ4JML0l6Es8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: thanks","msgtype":"m.text","formatted_body":"dzaima<\/a>: thanks"}} {"origin_server_ts":1699436089778,"event_id":"$orB9dYumXIUFhWOh-1lkh7Hyb916pcg5Re_rsfuwkfU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: The same questions are valid for destructuring regular arrays as well.","msgtype":"m.text","formatted_body":"dzaima<\/a>: The same questions are valid for destructuring regular arrays as well."}} {"origin_server_ts":1699436109638,"event_id":"$NAOZR6c5EsmsInGfgQVb_Qyi0KhSO2AgDW3MYm4B3N8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Would you be in favour of having the same behaviour there?","msgtype":"m.text"}} {"origin_server_ts":1699436122480,"event_id":"$pheTHFqwbayiFgnQWo3tr77Z62ZA13YR2k-2YuH2W6M","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$orB9dYumXIUFhWOh-1lkh7Hyb916pcg5Re_rsfuwkfU"}},"format":"org.matrix.custom.html","body":"yes but then there are counter-arguments about arrays being used for other things than unpacking arguments","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>yes but then there are counter-arguments about arrays being used for other things than unpacking arguments"}} {"origin_server_ts":1699436180866,"event_id":"$psp0kxfr5lDpXgsI9WCjbTiAUdjfj6XlggQrnIznlbI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Right, and even though I don't really agree with it, there may be some people arguing that `c` should be `1` after calling `(a b c) ← (1 2)`","msgtype":"m.text","formatted_body":"Right, and even though I don't really agree with it, there may be some people arguing that c<\/code> should be 1<\/code> after calling (a b c) ← (1 2)<\/code>"}} {"origin_server_ts":1699528490497,"event_id":"$wnTsaBX5nQ5yAQEnJDY-d2KQ10vHd9W9tP5EpPpjYx0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"My grouping code ended up being:\n```\n\ta ← (⊂⍤1) orig\n\tax ← (keyLength↑)¨ a\n\tbx ← (keyLength↑)¨ b\n\tindex ← (⊂ax) ⍳∘⊂¨ bx\n\tnewBitmap ← index=≢ax\n\torig ← ⊃ (((~newBitmap)/index) {(~newBitmap)/b}⍢⊇ a) , newBitmap/b\n```","msgtype":"m.text","formatted_body":"

                    My grouping code ended up being:<\/p>\n

                    \ta ← (⊂⍤1) orig\n\tax ← (keyLength↑)¨ a\n\tbx ← (keyLength↑)¨ b\n\tindex ← (⊂ax) ⍳∘⊂¨ bx\n\tnewBitmap ← index=≢ax\n\torig ← ⊃ (((~newBitmap)/index) {(~newBitmap)/b}⍢⊇ a) , newBitmap/b\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1699528534304,"event_id":"$9lJPLoLR_INqWBD1Gs6yIfuGE3D_0Q9RoRdJmYXKyP8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"This is not great.","msgtype":"m.text"}}
                    {"origin_server_ts":1699798463381,"event_id":"$gOEMp4Jo0AqHcO-4Zu-83m2sPMcTQn4ui_aB2imC3Wo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I've been working on this. https://peertube.functional.cafe/w/fMTTx1UQkva1QcAfGGKDQz","msgtype":"m.text"}}
                    {"origin_server_ts":1700323994904,"event_id":"$XYQgbVSRVGBRr93xQLXn_SP2nZKh-XDMkNepVjgyE7E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Another video: https://peertube.functional.cafe/w/6MQySAaRL9LRcARBK2HxS3","msgtype":"m.text"}}
                    {"origin_server_ts":1700909719405,"event_id":"$Ad7Pp9ahMSWQROZ6J_ChQW7FjHbRBOP5XfCTsLx1UdE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: Marshall: I have a dilemma. As I mentioned earlier, Kap supports assigning makes to positions along an axis. I'm fixing a big where the names aren't preserved correctly when you extract a new array using bracket indexing.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Marshall<\/a>: I have a dilemma. As I mentioned earlier, Kap supports assigning makes to positions along an axis. I'm fixing a big where the names aren't preserved correctly when you extract a new array using bracket indexing."}}
                    {"origin_server_ts":1700909756893,"event_id":"$Wz6hz0fYOlamGmAVJstz9VYaxM1BTYy3xp3R7v6Un2A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The proper result from a regular index like foo[1;2 3 4] is obvious. ","msgtype":"m.text"}}
                    {"origin_server_ts":1700909799544,"event_id":"$kpz5rwRaxwAa8hkg4jGRJBFDplC4jYWVxpmj5lfB328","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"dzaima: Marshall: I have a dilemma. As I mentioned earlier, Kap supports assigning names to positions along an axis. I'm fixing a big where the names aren't preserved correctly when you extract a new array using bracket indexing.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Marshall<\/a>: I have a dilemma. As I mentioned earlier, Kap supports assigning names to positions along an axis. I'm fixing a big where the names aren't preserved correctly when you extract a new array using bracket indexing."},"m.relates_to":{"event_id":"$Ad7Pp9ahMSWQROZ6J_ChQW7FjHbRBOP5XfCTsLx1UdE","rel_type":"m.replace"},"body":"* dzaima: Marshall: I have a dilemma. As I mentioned earlier, Kap supports assigning names to positions along an axis. I'm fixing a big where the names aren't preserved correctly when you extract a new array using bracket indexing.","msgtype":"m.text"}}
                    {"origin_server_ts":1700909840853,"event_id":"$M7KKPGt5ZE9cWTA5ecVkvGPkeK0piTPuGq9qjsO1eDw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But is there even a proper way to do it if any of the axis indexes has a tank greater than 1?","msgtype":"m.text"}}
                    {"origin_server_ts":1700909847039,"event_id":"$XyBVNlJYS23N1ohwYEi4M9jmXZ3IjVXb2sq3R3KHI5c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"But is there even a proper way to do it if any of the axis indexes has a rank greater than 1?","msgtype":"m.text"},"m.relates_to":{"event_id":"$M7KKPGt5ZE9cWTA5ecVkvGPkeK0piTPuGq9qjsO1eDw","rel_type":"m.replace"},"body":"* But is there even a proper way to do it if any of the axis indexes has a rank greater than 1?","msgtype":"m.text"}}
                    {"origin_server_ts":1700909952443,"event_id":"$5xaFRhNOCrslkxYcGuU-gSeP3WiTYa2o1hCCf_-1ebk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Imagine if `foo` is a 3-dimensional array. is there even a proper way to assign labels to the values along the two resulting axes that you get when doing `foo[1 ; 2 2 ⍴ 1 2 3 4 ; 5]`","msgtype":"m.text","formatted_body":"Imagine if foo<\/code> is a 3-dimensional array. is there even a proper way to assign labels to the values along the two resulting axes that you get when doing foo[1 ; 2 2 ⍴ 1 2 3 4 ; 5]<\/code>"}}
                    {"origin_server_ts":1700911942393,"event_id":"$-6tx7HBfbdnJAWUYoJ9fU8x8FAl_5zcNOJJ-7uhWKNo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the obvious answer is to have two equally-named axis, and not much else (and this presumably isn't fine). Another idea would be transferring the names from the axis of the `2 2 ⍴ 1 2 3 4` but can't do that without special-casing the rank-1 case (unless something funky like that the first axis comes from the indexed array and the rest come from the indices, which is probably not particularly useful)","msgtype":"m.text","formatted_body":"the obvious answer is to have two equally-named axis, and not much else (and this presumably isn't fine). Another idea would be transferring the names from the axis of the 2 2 ⍴ 1 2 3 4<\/code> but can't do that without special-casing the rank-1 case (unless something funky like that the first axis comes from the indexed array and the rest come from the indices, which is probably not particularly useful)"}}
                    {"origin_server_ts":1700912891651,"event_id":"$_wi7CtYoO673Po8WvU97-7gRyqrOjtXIQ_NDDe1o610","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"the obvious answer is to have two equally-named axis, and not much else (and this presumably isn't fine). Another idea would be transferring the names from the axis of the `2 2 ⍴ 1 2 3 4` but can't do that without special-casing the rank-1 case (unless something funky like that the first axis name comes from the indexed array and the rest come from the indices, which is probably not particularly useful)","msgtype":"m.text","formatted_body":"the obvious answer is to have two equally-named axis, and not much else (and this presumably isn't fine). Another idea would be transferring the names from the axis of the 2 2 ⍴ 1 2 3 4<\/code> but can't do that without special-casing the rank-1 case (unless something funky like that the first axis name comes from the indexed array and the rest come from the indices, which is probably not particularly useful)"},"m.relates_to":{"event_id":"$-6tx7HBfbdnJAWUYoJ9fU8x8FAl_5zcNOJJ-7uhWKNo","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* the obvious answer is to have two equally-named axis, and not much else (and this presumably isn't fine). Another idea would be transferring the names from the axis of the `2 2 ⍴ 1 2 3 4` but can't do that without special-casing the rank-1 case (unless something funky like that the first axis name comes from the indexed array and the rest come from the indices, which is probably not particularly useful)","msgtype":"m.text","formatted_body":"* the obvious answer is to have two equally-named axis, and not much else (and this presumably isn't fine). Another idea would be transferring the names from the axis of the 2 2 ⍴ 1 2 3 4<\/code> but can't do that without special-casing the rank-1 case (unless something funky like that the first axis name comes from the indexed array and the rest come from the indices, which is probably not particularly useful)"}}
                    {"origin_server_ts":1700915174115,"event_id":"$fWDTM9g7ds5uG7cxcRu1dt8sXTsouwsminT5cPSxh2Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: ah, but these are not names of axes, but names of positions along an axis. ","msgtype":"m.text","formatted_body":"dzaima<\/a>: ah, but these are not names of axes, but names of positions along an axis. "}}
                    {"origin_server_ts":1700915296379,"event_id":"$AdDHW5KIgeugmgniKrIahemPVSdLWmf1s36ene9XwOY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ah","msgtype":"m.text","formatted_body":"ah"}}
                    {"origin_server_ts":1700915352990,"event_id":"$Jn8vfESnTjAWeKR7TkTPFm3D39HR3h9cQugU8awBJxU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"so the problem is that with `2 2 ⍴ 1 2 3 4` you'd want the names to transfer to a combination of positions across two axes","msgtype":"m.text","formatted_body":"so the problem is that with 2 2 ⍴ 1 2 3 4<\/code> you'd want the names to transfer to a combination of positions across two axes"}}
                    {"origin_server_ts":1700915549413,"event_id":"$s2LVj1IWjI4mwEix3WfZic8G4BDTvLJkPhBP_0h6J0E","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think you can still do the thing of copying the names from the indices array? but really no way of merging that with rank 1 then","msgtype":"m.text","formatted_body":"I think you can still do the thing of copying the names from the indices array? but really no way of merging that with rank 1 then"}}
                    {"origin_server_ts":1700915587433,"event_id":"$aop8hXUZRZNKMfaL-ECj4oV_ZB2Ipbl1NpSo7grnW2s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"but this does just seem like a limitation of naming positions along axes separately","msgtype":"m.text","formatted_body":"but this does just seem like a limitation of naming positions along axes separately"}}
                    {"origin_server_ts":1700917725865,"event_id":"$hZ0jfgcjQ6SAhf6rf6Ds-kYY_Dk3PObGQ0lrDjqVXIQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: Well, kinda.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Well, kinda."}}
                    {"origin_server_ts":1700917741489,"event_id":"$7kwIt0Og6e1qtBdbTJTjcFUeuE11T6ospWu92rRAwIM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"But if you call it a problem, that suggests there is a solution?","msgtype":"m.text"}}
                    {"origin_server_ts":1700917800974,"event_id":"$O-JGtCjR6Hadus4kEhzDm5CgFCmj01ODZ5PvSNDJUik","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"you could add the ability to name combinations of positions across multiple axes :)","msgtype":"m.text","formatted_body":"you could add the ability to name combinations of positions across multiple axes :)"}}
                    {"origin_server_ts":1700918138305,"event_id":"$l8zthW36U7oPf9xW_PkwCAjALM2XDvHC4pmVzAhen2I","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`foo[2 2 ⍴ 1 2 3 4]` is the same as `2 2 ⍴ foo[1 2 3 4]`, yeah? So I think it's basically the same as asking whether you should try to preserve labels across a reshape, and I'd probably say no there.","msgtype":"m.text","formatted_body":"foo[2 2 ⍴ 1 2 3 4]<\/code> is the same as 2 2 ⍴ foo[1 2 3 4]<\/code>, yeah? So I think it's basically the same as asking whether you should try to preserve labels across a reshape, and I'd probably say no there."}}
                    {"origin_server_ts":1700918256354,"event_id":"$FyP1bkPZMoP0SKYroTM530nYJ_LVLdw_I-zOMzB0b28","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"There's a question of what to do with `foo[bar]` when both arrays have labels. Probably `bar` should win because the result's domain is the same as `bar`, not `foo`?","msgtype":"m.text","formatted_body":"There's a question of what to do with foo[bar]<\/code> when both arrays have labels. Probably bar<\/code> should win because the result's domain is the same as bar<\/code>, not foo<\/code>?"}}
                    {"origin_server_ts":1700920900653,"event_id":"$FQVVUdtURn1BQMoUzZXLgNvH4AHw9jRs9oCr0sA6uaY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: That's a great question, and something I didn't consider.","msgtype":"m.text","formatted_body":"Marshall<\/a>: That's a great question, and something I didn't consider."}}
                    {"origin_server_ts":1700920947423,"event_id":"$VkGKkA_9nWQAIMJ4GITh0dvd1rmlyFMXXLEqsB-eInY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I just implemented the fix, and right now I chose to simply not carry over labels if the source position has more than one dimension.","msgtype":"m.text"}}
                    {"origin_server_ts":1700920971901,"event_id":"$U4gba96uNpHq2WfRzIpkl9IcUWCeWiFYhHdOONzD3rg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The idea of using the labels of the index isn't bad at all, but perhaps a but unpredictable.","msgtype":"m.text"}}
                    {"origin_server_ts":1700921263837,"event_id":"$4VTEFicCBPoeuF3ohDL1Hd3pgZby61l7mQ_FIhNfhq8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, at least lookup works now:","msgtype":"m.text"}}
                    {"origin_server_ts":1700921264517,"event_id":"$KXGej3x01vFqnzUbV1JzFsORDRfSBAayegrAQgbjfYw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#a%20%E2%86%90%20%3F2%204%20%E2%8D%B4%2010%0Aa%20%E2%86%90%20%22Jan%22%20%22Feb%22%20%22Mar%22%20%22Apr%22%20labels%5B1%5D%20a%0Aa%20%E2%86%90%20%22Foo%22%20%22Bar%22%20labels%5B0%5D%20a%0Achart%3Abar%20a%5B%3B3%202%201%5D","msgtype":"m.text"}}
                    {"origin_server_ts":1700922216766,"event_id":"$VKYnDYghpd5UcSzf7ddArYqhWGKNC3HdxoRB9S-M_KI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I was also thinking of allowing the use of symbols (rather than strings) as labels. This would allow lookup by name instead of index. Something like:\n```\nfoo ← :a :b labels 10 11\nfoo[:a]\n```\nWould return `10`.","msgtype":"m.text","formatted_body":"

                    I was also thinking of allowing the use of symbols (rather than strings) as labels. This would allow lookup by name instead of index. Something like:<\/p>\n

                    foo ← :a :b labels 10 11\nfoo[:a]\n<\/code><\/pre>\n

                    Would return 10<\/code>.<\/p>\n"}} {"origin_server_ts":1700922260603,"event_id":"$3Vodn3t3-fhuMpayg73NPwM9jLcdHH_bgmuE5MnDg0I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I don't know how useful that is though. One could always recreate it manually using the monadic `labels`.","msgtype":"m.text","formatted_body":"I don't know how useful that is though. One could always recreate it manually using the monadic labels<\/code>."}} {"origin_server_ts":1700922317644,"event_id":"$tEVcfEHxd2yusdGK8ehYG7H5NoFCG0tTiSeKUSvd60I","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"What are symbols used for now?","msgtype":"m.text","formatted_body":"What are symbols used for now?"}} {"origin_server_ts":1700922345342,"event_id":"$8qr6ExrBMb1YhBrehmYB5WOSLMCCHPWijOXmiz9-aY4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Typically as efficient keys in maps.","msgtype":"m.text"}} {"origin_server_ts":1700922525010,"event_id":"$9Dkj0gAj2NYINc6ZdLSaerJDFLrGwbQUJjRi4pspueg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Better question, why should the type of labels be restricted at all? Stuff that wants to display them can just format.","msgtype":"m.text","formatted_body":"Better question, why should the type of labels be restricted at all? Stuff that wants to display them can just format."}} {"origin_server_ts":1700922609748,"event_id":"$lEAUXrtDfxxTzanzit0GUztnnTMGzX6Fz96h22R9Gcg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"That's a really good question to which I don't have an answer.","msgtype":"m.text"}} {"origin_server_ts":1700923090861,"event_id":"$98K2qQ3v8umcnfuGIwzhkMtZo3xObRK3PBgZmLHRLT4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's basically historical reasons. The labels are simply implemented as a list of lists of strings, and they are computed on demand (because recomputing the labels is sometimes expensive so it's not easy to predict when the labels evaluation will happen.","msgtype":"m.text"}} {"origin_server_ts":1700934493814,"event_id":"$KjaXu7-kY9jH94Ovu3DpQofIQsh_JSYEtLt99yAjHrs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$9Dkj0gAj2NYINc6ZdLSaerJDFLrGwbQUJjRi4pspueg"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Better question, why should the type of labels be restricted at all? Stuff that wants to display them can just format.\n\nIf labels were not restricted, can you think of anything useful that could be done with them?","msgtype":"m.text","formatted_body":"

                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Better question, why should the type of labels be restricted at all? Stuff that wants to display them can just format.<\/blockquote><\/mx-reply>If labels were not restricted, can you think of anything useful that could be done with them?"}} {"origin_server_ts":1700935611459,"event_id":"$gv2buamgvbdbyhO8P-57ZGjAKIrpEzmPy3TeZHUV8ac","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Numeric makes sense to indicate an array that corresponds to a subset of another one. You can label it with indices for the larger array.","msgtype":"m.text","formatted_body":"Numeric makes sense to indicate an array that corresponds to a subset of another one. You can label it with indices for the larger array."}} {"origin_server_ts":1701680081548,"event_id":"$-zioHiIZ84oo6J5d8MqI5V1cqXRVZ2b2jdY9m2EScwg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Interesting. I'm using Apache commons math for the rational number implementation in the JVM version. The native version uses GMP.","msgtype":"m.text"}} {"origin_server_ts":1701680113430,"event_id":"$hwGCztelqHJ6uqH-LPHDrtTlGNlOIwWbst1Nj9X822M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"For any computation involving rationals, the native version outperforms the JVM version of Kap by 10 times, and it all comes down to GMP being so much faster tan commons math.","msgtype":"m.text"}} {"origin_server_ts":1701680151994,"event_id":"$2Hon2B6lTNne8oHfGB6JTFtwsXKGJxuj5xJivhuvH5s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"(for regular code without rationals, the JVM version is 4-10 times faster than the native version)","msgtype":"m.text"}} {"origin_server_ts":1701680178641,"event_id":"$LvvhJrvMi78b6yxmrDHWIgEA6zkNiS9r8K1aA6iBaXM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Is there a high performance numeric library for the JVM?","msgtype":"m.text"}} {"origin_server_ts":1701680370570,"event_id":"$cBjpn-c5esh15VbuZ6Z0XBm8IovluTDhO4dTkAwJctY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$hwGCztelqHJ6uqH-LPHDrtTlGNlOIwWbst1Nj9X822M"}},"format":"org.matrix.custom.html","body":"makes sense, GMP has hand-coded assembly (I think) whereas `BigInteger` is just Java code","msgtype":"m.text","formatted_body":"
                    ↰ <\/a> loke<\/a> <\/mx-reply>makes sense, GMP has hand-coded assembly (I think) whereas BigInteger<\/code> is just Java code"}} {"origin_server_ts":1701680835672,"event_id":"$0lfMjn-qnAHjMVlELHLcD4ukU44NHO3tEHcmHACZ8gs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"For any computation involving rationals, the native version outperforms the JVM version of Kap by 10 times, and it all comes down to GMP being so much faster than commons math.","msgtype":"m.text"},"m.relates_to":{"event_id":"$hwGCztelqHJ6uqH-LPHDrtTlGNlOIwWbst1Nj9X822M","rel_type":"m.replace"},"m.mentions":{},"body":" * For any computation involving rationals, the native version outperforms the JVM version of Kap by 10 times, and it all comes down to GMP being so much faster than commons math.","msgtype":"m.text"}} {"origin_server_ts":1701681404546,"event_id":"$lZUh2cM8dxHy2plkutTcwXdmqHCB-zJAy7lg-Gort7I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: I'm tempted to write a JNI interface to GMP because the difference is so huge.","msgtype":"m.text","formatted_body":"dzaima<\/a>: I'm tempted to write a JNI interface to GMP because the difference is so huge."}} {"origin_server_ts":1701681425238,"event_id":"$VdHNNnBt_QM_qZeS6LsjfFSi0GVIuszM-1IssEQxWZI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It'll make the codebase even less manageable though.","msgtype":"m.text"}} {"origin_server_ts":1701681623017,"event_id":"$A_dp6iGyMIZEZsN9ddCdebXlODWVBZaoNDeIKA6DsCg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I discovered how bad it was when I used this to show how the estimation for e converges:\n```\nchart:line {⍵⋆⍨1+÷⍵} ⍳1000\n```\nIt's noticeably slow on the JVM, but pretty much instantaneous on linux.","msgtype":"m.text","formatted_body":"

                    I discovered how bad it was when I used this to show how the estimation for e converges:<\/p>\n

                    chart:line {⍵⋆⍨1+÷⍵} ⍳1000\n<\/code><\/pre>\n

                    It's noticeably slow on the JVM, but pretty much instantaneous on linux.<\/p>\n"}} {"origin_server_ts":1701682022652,"event_id":"$4lD3WvFimDflI4fCjaqjBSJUtYnU1E0KKUmgUMQRe44","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"(and yes, I know doing it using floating point is fine in this case)","msgtype":"m.text"}} {"origin_server_ts":1701694063850,"event_id":"$nt9eAG6Z_a7JYg2tSSUXx1dVkGKd2Rz6gRuBg9Ax4Y4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Any way to make this solution nicer?","msgtype":"m.text"}} {"origin_server_ts":1701694064757,"event_id":"$_0vbA_40wYe0qU5O8jE9j4FlC3bnOQIP1591gOnp9Y4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://codeberg.org/loke/advent-of-code-kap/src/branch/master/advent-of-code-2023/part03.kap","msgtype":"m.text"}} {"origin_server_ts":1702049326594,"event_id":"$-FQ7sw3uYs8WJb-qWfPWcVDNNbYJf3lj_fC5bIOrUEg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org","@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: Marshall I was talking to someone on Mastodon who wanted to do a tally in Kap. Turns out my implementation of Key doesn't make that super easy.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Marshall<\/a> I was talking to someone on Mastodon who wanted to do a tally in Kap. Turns out my implementation of Key doesn't make that super easy."}} {"origin_server_ts":1702049352897,"event_id":"$TBOO7bTnniXNnMAw8J5AtadNBbmKch0MrVoV3ocn04c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"So the question is, can any of you come up with a shorter version than this one? `⊢«,»(⍪+⌿≡⌻)∘∪`","msgtype":"m.text","formatted_body":"So the question is, can any of you come up with a shorter version than this one? ⊢«,»(⍪+⌿≡⌻)∘∪<\/code>"}} {"origin_server_ts":1702049367794,"event_id":"$eJ7AsG5M2cqslwwYbJCV-dmlFvWJpNdPgUgAtkxf8jI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"A real tacit monster, I'd say.","msgtype":"m.text"}} {"origin_server_ts":1702049630160,"event_id":"$bD_mZSzqYd_oc4to5ZY8O2zVhH3tNnfJRg1BlvTolzY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://functional.cafe/@loke/111545484336682320","msgtype":"m.text"}} {"origin_server_ts":1702049933593,"event_id":"$bdTkexwCl-WMDZ-PMwICboLEsxqXbCIX-BSfx6OMLFQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`∪⍛(⍸˝∧⍳)` gets the counts, so `∪⍛(⊣«,»(⍪⍸˝∧⍳))` is another solution.","msgtype":"m.text","formatted_body":"∪⍛(⍸˝∧⍳)<\/code> gets the counts, so ∪⍛(⊣«,»(⍪⍸˝∧⍳))<\/code> is another solution."}} {"origin_server_ts":1702050404254,"event_id":"$9Am4IR-Bk7diKSDDNtDNmWY17e96SsqAMU2AXDCc7pY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Assembling it all into an array at once doesn't always make sense: I remember Jay complaining that it's inconvenient that Dyalog forces this output format. I might write `u←∪⍵ ⋄ c←⍸˝∧u⍳⍵` in actual code.","msgtype":"m.text","formatted_body":"Assembling it all into an array at once doesn't always make sense: I remember Jay complaining that it's inconvenient that Dyalog forces this output format. I might write u←∪⍵ ⋄ c←⍸˝∧u⍳⍵<\/code> in actual code."}} {"origin_server_ts":1702050559217,"event_id":"$b3cpRI_sEE6qkOB-5XjomL5T0mSZBMYbK0DTzD_w1c4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh nice. Thanks. ","msgtype":"m.text"}} {"origin_server_ts":1702120387068,"event_id":"$_LdaeUNPkpP3qxTViH9CeSYlBmOjCG7pVXI2dGY58FI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: in the latest array cast, conor mentioned he looked at the kap source code wanting to make a change but failed. I have been thinking about writing a blog post about the interpreter architecture, and this may be a good opportunity to do this. You don't happen to know what change he was looking to make? I could use it as an example in the post. ","msgtype":"m.text","formatted_body":"Marshall<\/a>: in the latest array cast, conor mentioned he looked at the kap source code wanting to make a change but failed. I have been thinking about writing a blog post about the interpreter architecture, and this may be a good opportunity to do this. You don't happen to know what change he was looking to make? I could use it as an example in the post. "}} {"origin_server_ts":1702125129970,"event_id":"$40DnKUdWIVMj9vZjGiviLIX9a4PW2GF0yKy6w1Ha078","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Nope, first I'd heard of it. I can ask him on the Array Cast slack if you'd like.","msgtype":"m.text","formatted_body":"Nope, first I'd heard of it. I can ask him on the Array Cast slack if you'd like."}} {"origin_server_ts":1702125513420,"event_id":"$eNhe9znVSGbidUvRGAA3WVr_PrNESnkvESjOVAiti3Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You missed it on the show? 😀","msgtype":"m.text"}} {"origin_server_ts":1702125527330,"event_id":"$oOUlouRt_EOXLbjTMWFcm9SNVwnFTTcqxyihqvYNnEE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks, that would be nice","msgtype":"m.text"}} {"origin_server_ts":1702126013171,"event_id":"$JMkNkL3NWrj-uyjjDycKAN7EO8Tst9GooleYUycpSI4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Asked, I'll let you know what he says!","msgtype":"m.text","formatted_body":"Asked, I'll let you know what he says!"}} {"origin_server_ts":1702126026333,"event_id":"$czQcslRSUkzqtgOMW35vZhLkazdWB2IyeRKGfqKA_GU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(I meant the mention on the show was the first I'd heard of it)","msgtype":"m.text","formatted_body":"(I meant the mention on the show was the first I'd heard of it)"}} {"origin_server_ts":1702126617228,"event_id":"$VtQlREBZ803sXBmoE1CynQue8mlwM9BDUVf2GbUCx3s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ah I see. Thanks.","msgtype":"m.text"}} {"origin_server_ts":1702163105358,"event_id":"$c1pO_n6YdiJegR_FZrRQHg8EFlRjxZkGr659QYA1Msw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"From Conor: \"I tried to add sort primitives to the language. I looked at the grade functions and thought it would be pretty simple based on that but yea... like i said i only dedicated 10 minutes to trying to figured it out.\"","msgtype":"m.text","formatted_body":"From Conor: \"I tried to add sort primitives to the language. I looked at the grade functions and thought it would be pretty simple based on that but yea... like i said i only dedicated 10 minutes to trying to figured it out.\""}} {"origin_server_ts":1702211136062,"event_id":"$phbDGwtE8MYQwG8lwrbmxVDSOAZWwdN0BTi_pQoWRso","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: I didn't write a blog post. I'm not sure where to begin. I'll still do it later.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I didn't write a blog post. I'm not sure where to begin. I'll still do it later."}} {"origin_server_ts":1702211140463,"event_id":"$Nxgs1E-Pvptgtka2XOZ580z-X2ABo_zYpBhlobhpZP0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But I made a video","msgtype":"m.text"}} {"origin_server_ts":1702211142800,"event_id":"$wgILpGvKVa44vt49HloN8sBxU5rl1Syr3Sy_ZtzFdQw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://peertube.functional.cafe/w/7GBnSf9iejt81JZECT6GY8","msgtype":"m.text"}} {"origin_server_ts":1702277333080,"event_id":"$XpbEUjqfGlIjATQznBqFPy-1uIrFmsvlOWCwjLTxE-8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: by the way, if he wants to see the actual implementation of sort that I did after I learned he was looking for it, here's the commit: https://codeberg.org/loke/array/commit/ca636987094f7d266fd4bcaf142353f863745c37","msgtype":"m.text","formatted_body":"Marshall<\/a>: by the way, if he wants to see the actual implementation of sort that I did after I learned he was looking for it, here's the commit: https://codeberg.org/loke/array/commit/ca636987094f7d266fd4bcaf142353f863745c37"}} {"origin_server_ts":1702284136294,"event_id":"$Dz5hpnvpOj68qoSjbmqCI_W4na9hYmBHg0vTgQeZ2g8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I rewrote the examples page using asciidoc, so now it looks better: https://kapdemo.dhsdevelopments.com/examples.html","msgtype":"m.text"}} {"origin_server_ts":1702400170391,"event_id":"$rE1z0Up8HGw6RDQyy85P5nTr_BlRknLg_R5Up2N_104","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Now I have been working on creating a wrapper around the main `Engine` object that can be used by the parser instead of the regular engine, with the difference that it will not persist any changes during parsing. The parsed result cannot be run, of course, because the engine state will not match what the parser created, but the parse errors can be used to get realtime syntax highlighting.","msgtype":"m.text","formatted_body":"Now I have been working on creating a wrapper around the main Engine<\/code> object that can be used by the parser instead of the regular engine, with the difference that it will not persist any changes during parsing. The parsed result cannot be run, of course, because the engine state will not match what the parser created, but the parse errors can be used to get realtime syntax highlighting."}} {"origin_server_ts":1702400223721,"event_id":"$L_nSCjfTQZUuzOqPcU8eOcI98kRisFeqvZ5kgCgwBoU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"So the highlighter will use the actual engine that is active in the REPL. Hopefully this will mean that if you have an expression like `foo bar test` in the code, they'","msgtype":"m.text","formatted_body":"So the highlighter will use the actual engine that is active in the REPL. Hopefully this will mean that if you have an expression like foo bar test<\/code> in the code, they'"}} {"origin_server_ts":1702400253533,"event_id":"$VK9GqpGwOD9wXfKfWG1GkthbizhDkaOyMTikXISas9w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"So the highlighter will use the actual engine that is active in the REPL. Hopefully this will mean that if you have an expression like `foo bar test` in the code, they're all highlighted as variables, but if you declare the function `bar` in the REPL, the highlighting will change on the fly to mark `bar` as a function.","msgtype":"m.text","formatted_body":"So the highlighter will use the actual engine that is active in the REPL. Hopefully this will mean that if you have an expression like foo bar test<\/code> in the code, they're all highlighted as variables, but if you declare the function bar<\/code> in the REPL, the highlighting will change on the fly to mark bar<\/code> as a function."},"m.relates_to":{"event_id":"$L_nSCjfTQZUuzOqPcU8eOcI98kRisFeqvZ5kgCgwBoU","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * So the highlighter will use the actual engine that is active in the REPL. Hopefully this will mean that if you have an expression like `foo bar test` in the code, they're all highlighted as variables, but if you declare the function `bar` in the REPL, the highlighting will change on the fly to mark `bar` as a function.","msgtype":"m.text","formatted_body":" * So the highlighter will use the actual engine that is active in the REPL. Hopefully this will mean that if you have an expression like foo bar test<\/code> in the code, they're all highlighted as variables, but if you declare the function bar<\/code> in the REPL, the highlighting will change on the fly to mark bar<\/code> as a function."}} {"origin_server_ts":1702400387458,"event_id":"$AZylCEDqHSjG5dERUMCDj9rx4eJ1acVpOYU9k5UK960","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"We'll see how this goes. I'm not overly impressed with the code. It would be so much simpler if I could just use a clean `Engine` instance for each reparsing, but then existing declarations wouldn't be available, resulting in warnings when there should be none (like if you type `foo⌻` and the parser doesn't know `foo` was declared as a function)","msgtype":"m.text","formatted_body":"We'll see how this goes. I'm not overly impressed with the code. It would be so much simpler if I could just use a clean Engine<\/code> instance for each reparsing, but then existing declarations wouldn't be available, resulting in warnings when there should be none (like if you type foo⌻<\/code> and the parser doesn't know foo<\/code> was declared as a function)"}} {"origin_server_ts":1702640187907,"event_id":"$liqI3aXrSNkRZX1LS2frmH5Nn-192FDQlvQXydYxPRk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ok, the work behild all of the above is dropped. Instead I have now implemented a way to create a light weight copy of an Engine that can be used for parsing without affecting the state of the original. Most work that went into it was to rework how symbols are intended so that I can copy the namespaces in a way that works but also doesn't interfere with the original. ","msgtype":"m.text"}} {"origin_server_ts":1702987026786,"event_id":"$bWFkeIEFq6TzocuoKRSbhofGajYcCivIZmTzk9c3VCY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Ok, the work behind all of the above is dropped. Instead I have now implemented a way to create a light weight copy of an Engine that can be used for parsing without affecting the state of the original. Most work that went into it was to rework how symbols are intended so that I can copy the namespaces in a way that works but also doesn't interfere with the original. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$liqI3aXrSNkRZX1LS2frmH5Nn-192FDQlvQXydYxPRk","rel_type":"m.replace"},"body":"* Ok, the work behind all of the above is dropped. Instead I have now implemented a way to create a light weight copy of an Engine that can be used for parsing without affecting the state of the original. Most work that went into it was to rework how symbols are intended so that I can copy the namespaces in a way that works but also doesn't interfere with the original. ","msgtype":"m.text"}} {"origin_server_ts":1703231829328,"event_id":"$D-QQNeQczS9_gux2GcJN6xOEAsR4QbHG2hM6PKNTooc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The configuration option to change the prefix key now works in the jvm ui\n","msgtype":"m.text"}} {"origin_server_ts":1703328593224,"event_id":"$3A3yWZASHeuLzlLmsqj0yvLWA3BrXIe4zM45dCuspL8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I updated the documentation for the SQL API: https://kapdemo.dhsdevelopments.com/reference.html#_sql","msgtype":"m.text"}} {"origin_server_ts":1703444156565,"event_id":"$QuMqJzFvaZDQq389l28dL4HtrnNrDim5OeOVwR8Ats8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Should I spend time implementing commandline editing and an integrated input method for the text-based JVM client?","msgtype":"m.text"}} {"origin_server_ts":1703547949119,"event_id":"$IWNswTXaY3ppaZSFN3fFGuxrQyVD63dR31eH3q58Sbc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"commandline editing?","msgtype":"m.text"}} {"origin_server_ts":1703547969566,"event_id":"$bfuoIXnljQqdmfV_Psqh6s3B-LvtpozAEFJNT3hZXk8","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Are you talking about integrated input for the gui, or do you mean the actual repl","msgtype":"m.text"}} {"origin_server_ts":1703549082321,"event_id":"$rgG7qpB1hdaMy3zAX-S7AtBqeSbd9M1C38ZQze7MHrA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm talking about the separate text based client. Not the native one, but the jvm one.","msgtype":"m.text"}} {"origin_server_ts":1703549103414,"event_id":"$hDBAsBT6h_tJsXJMDtka1jn_TWlloHi8XKSVQOTuUGA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Currently that one doesn't have any input editing at all","msgtype":"m.text"}} {"origin_server_ts":1703581370152,"event_id":"$qooAXqsLjJJXTBXxSffFaqBUbKnpkpBcIjIFwe3PDfE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I added some error highlighting to the web client.","msgtype":"m.text"}} {"origin_server_ts":1703943658736,"event_id":"$6BS5K8QQcO2mW9YsND2RSrT2GBgnVeqHmsltseh_Fa4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The bignum library part of kap can now be compiled to wasm. That's the first step towards getting all of it compiled to wasm.","msgtype":"m.text"}} {"origin_server_ts":1703943670655,"event_id":"$t35781t9OwU4CxlkS2ZCUUqmX2Jm2fOT4mqnb-zO0p8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"That'll hopefully atleast double the performance of the js engine.","msgtype":"m.text"}} {"origin_server_ts":1703953601303,"event_id":"$wX7ISxGOY-B_8IwewpdcMpRMYLNWguZzcl5W2VDq8DY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, that was easy. The core engine now compiles on wasm.","msgtype":"m.text"}} {"state_key":"@sienet_ja_lsd:matrix.org","origin_server_ts":1704001639306,"event_id":"$HeQl-H1en8RDn91qB89IZnHnRUrrCOPdpSUqjRSAtcE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/zuexapBaptVcYOnwYDBzuWIR","displayname":"sienet_ja_LSD","membership":"join"}} {"origin_server_ts":1704001670024,"event_id":"$0ajquhLV5xVp8__BzOTXVFhn0WtvJVOfZarPgOuWAWc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"hi, trying to build KAP with gradle and running into this error, Exception in thread \"main\" java.lang.Error: /tmp/2369786987876923812.c:1:10: fatal error: 'jansson.h' file not found\n","msgtype":"m.text"}} {"origin_server_ts":1704002090121,"event_id":"$3vyt_MJMupNvWsBxqZQtwhfHtqmRmbWIZnu23-ikrBY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ok found a package with apt-get but now getting an error, ../array/src/linuxMain/kotlin/array/http-linux.kt:80:48 Unresolved reference 'CURLH_HEADER'.","msgtype":"m.text"}} {"origin_server_ts":1704002102790,"event_id":"$W1ulQA9VOQz33JrQJDTkkSpI1wGEakdhKmUuUhNTvDU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I have curl installed","msgtype":"m.text"}} {"origin_server_ts":1704003323105,"event_id":"$RgzP5AL9TuI8m1pmh7xRJp1Ss--Yuoc85h4ZF23le18","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"sienet_ja_LSD: you need to install libcurl-devel.","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: you need to install libcurl-devel."}} {"origin_server_ts":1704003333739,"event_id":"$gG2R48N7DXsycBpiRjk4vS1MQYmkzGTg5kdA2vdBudU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What distribution are you using? ","msgtype":"m.text"}} {"origin_server_ts":1704013505024,"event_id":"$kbB0Wm7f4p7ZQI1Sbm57Wpb2imkW66mk61NLQwvbsuM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'm using pop_os","msgtype":"m.text"}} {"origin_server_ts":1704013505501,"event_id":"$16f0Rah97TbMDyqAfNWBgz9YQqjImqzmAWNWn92u9Mg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'm gonna try installing it","msgtype":"m.text"}} {"origin_server_ts":1704013562169,"event_id":"$n_A283Z-P0nyBm8AS8YKheToq_88SgvZwbBYWmELsfw","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"hmm","msgtype":"m.text"}} {"origin_server_ts":1704013564023,"event_id":"$OD9ScRKz03QsXh91X5chMrCYahNrRplsq91pMe_Ssy4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"libcurl4-openssl-dev is already the newest version (7.81.0-1ubuntu1.15).","msgtype":"m.text"}} {"origin_server_ts":1704013573137,"event_id":"$1eoddCW0owRx90JHspRQGTpHLdH4myCcVCDSv1BOAII","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"it's not recognizing it","msgtype":"m.text"}} {"origin_server_ts":1704013866316,"event_id":"$EFe1h4wbsQDfId5Dk4_7UEkp28jvEJcD-x0h8HXyIRc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: can you check if libcurl.so is present in `/usr/lib/x86_64-linux-gnu` or `/usr/lib64`?","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: can you check if libcurl.so is present in /usr/lib/x86_64-linux-gnu<\/code> or /usr/lib64<\/code>?"}} {"origin_server_ts":1704013878142,"event_id":"$nTVEPvjnO5SZT_fIg9TTK3l-i8aa4uLCNDrYr5U0S2s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: can you check if` libcurl.so` is present in `/usr/lib/x86_64-linux-gnu` or `/usr/lib64`?","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: can you check if libcurl.so<\/code> is present in /usr/lib/x86_64-linux-gnu<\/code> or /usr/lib64<\/code>?"},"m.relates_to":{"event_id":"$EFe1h4wbsQDfId5Dk4_7UEkp28jvEJcD-x0h8HXyIRc","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * sienet_ja_LSD: can you check if` libcurl.so` is present in `/usr/lib/x86_64-linux-gnu` or `/usr/lib64`?","msgtype":"m.text","formatted_body":" * sienet_ja_LSD<\/a>: can you check if libcurl.so<\/code> is present in /usr/lib/x86_64-linux-gnu<\/code> or /usr/lib64<\/code>?"}} {"origin_server_ts":1704013890138,"event_id":"$lzViJkPwhjtJQHs1kxdR-x8zTKctt1WwEBRcZLHEVbs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: can you check if the file `libcurl.so` is present in `/usr/lib/x86_64-linux-gnu` or `/usr/lib64`?","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: can you check if the file libcurl.so<\/code> is present in /usr/lib/x86_64-linux-gnu<\/code> or /usr/lib64<\/code>?"},"m.relates_to":{"event_id":"$EFe1h4wbsQDfId5Dk4_7UEkp28jvEJcD-x0h8HXyIRc","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * sienet_ja_LSD: can you check if the file `libcurl.so` is present in `/usr/lib/x86_64-linux-gnu` or `/usr/lib64`?","msgtype":"m.text","formatted_body":" * sienet_ja_LSD<\/a>: can you check if the file libcurl.so<\/code> is present in /usr/lib/x86_64-linux-gnu<\/code> or /usr/lib64<\/code>?"}} {"origin_server_ts":1704013931991,"event_id":"$KE2gRqWIkQ0jOtitzDHiSfRj9Zq-pXldnm1_sQaafk0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"If not, do you have any other files with `curl` in the name in any of those directories? And if not, do you have it anywhere else?","msgtype":"m.text","formatted_body":"If not, do you have any other files with curl<\/code> in the name in any of those directories? And if not, do you have it anywhere else?"}} {"origin_server_ts":1704013974270,"event_id":"$EEnRUPYjWjxyjWIGxOHTXB_X5l30yj-rDzgSfkExOWo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"You should have it in any of the directories listed in `/etc/ld.so.conf` or any of the files it includes.","msgtype":"m.text","formatted_body":"You should have it in any of the directories listed in /etc/ld.so.conf<\/code> or any of the files it includes."}} {"origin_server_ts":1704014526090,"event_id":"$XW90X08Rb_D0LfZK7sqdktV1gJgfKT3Tgn2XjaaBwo8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$EFe1h4wbsQDfId5Dk4_7UEkp28jvEJcD-x0h8HXyIRc"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> sienet_ja_LSD: can you check if the file `libcurl.so` is present in `/usr/lib/x86_64-linux-gnu` or `/usr/lib64`?\n\nyeah I have it there /usr/lib/x86_64-linux-gnu/libcurl.so.4\n","msgtype":"m.text","formatted_body":"

                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    sienet_ja_LSD<\/a>: can you check if the file libcurl.so<\/code> is present in /usr/lib/x86_64-linux-gnu<\/code> or /usr/lib64<\/code>?<\/blockquote><\/mx-reply>yeah I have it there /usr/lib/x86_64-linux-gnu/libcurl.so.4"}} {"origin_server_ts":1704014586264,"event_id":"$WdaprTZNDzMNiMjQfCD1FdEQJkkPMVitJqdNGyR9nSE","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1704014638356,"event_id":"$dEbkUDXU59yTBziM5XwnlGht7QcAG6PZYWc40oqf_zc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$WdaprTZNDzMNiMjQfCD1FdEQJkkPMVitJqdNGyR9nSE","type":"m.room.redaction","content":{"redacts":"$WdaprTZNDzMNiMjQfCD1FdEQJkkPMVitJqdNGyR9nSE"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1704014615516,"event_id":"$kU8La2d9wfs8dRsVRB1vAIAgYubkcr1ZsTs6rwIelIE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"find: \u2018/usr/include/*curl*\u2019: No such file or directory","msgtype":"m.text","formatted_body":"find: \u2018/usr/include/curl<\/em>\u2019: No such file or directory"}} {"origin_server_ts":1704014623324,"event_id":"$NrVM6-uhZmU1FhRGYrHDoEjuVB21ha1xgzXRn5OLgCk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Or sorry","msgtype":"m.text"}} {"origin_server_ts":1704014633843,"event_id":"$iCqDryHGCSySruGqtxQdaEUhPFhemeeIEfXaErg6HFk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I mean: `find /usr/include -name \\*curl\\*`","msgtype":"m.text","formatted_body":"I mean: find /usr/include -name \\*curl\\*<\/code>"}} {"origin_server_ts":1704014638356,"event_id":"$dEbkUDXU59yTBziM5XwnlGht7QcAG6PZYWc40oqf_zc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$WdaprTZNDzMNiMjQfCD1FdEQJkkPMVitJqdNGyR9nSE","type":"m.room.redaction","content":{"redacts":"$WdaprTZNDzMNiMjQfCD1FdEQJkkPMVitJqdNGyR9nSE"}} {"origin_server_ts":1704014649041,"event_id":"$nXLAbGpuVsWnG-nHk3bRXUudv1E8nh_uVCthgl0YI_0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"usr/include/x86_64-linux-gnu/curl\n/usr/include/x86_64-linux-gnu/curl/curlver.h\n/usr/include/x86_64-linux-gnu/curl/curl.h\n","msgtype":"m.text"}} {"origin_server_ts":1704014656059,"event_id":"$BfrV3TKPbm1eOPIO5J58D1Accef_S_C09AaHQk_-hjs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Ah OK","msgtype":"m.text"}} {"origin_server_ts":1704014716100,"event_id":"$HcDVa5s_SP3Ga0ef5eEAXyeuDDol5LMH1xuWHF5ow60","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Can you try changing `array/src/nativeInterop/cinterop/libcurl.def` and add `-I/usr/include/curl` to the `compilerOpts.linux`?","msgtype":"m.text","formatted_body":"Can you try changing array/src/nativeInterop/cinterop/libcurl.def<\/code> and add -I/usr/include/curl<\/code> to the compilerOpts.linux<\/code>?"}} {"origin_server_ts":1704015273313,"event_id":"$BdbLLOKQPnsD1P9xqPxmI5fExQxtgaTDGgV0JJxhvVk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"hmm, it doesn't seem to work. I added it and did gradlew clean but still getting the same error","msgtype":"m.text"}} {"origin_server_ts":1704015465110,"event_id":"$WVmuWW055Fl4bQ7rsrlYcqVWIe4q8ksUX0zZsHhOPsU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Can you share the error log?","msgtype":"m.text"}} {"origin_server_ts":1704015795690,"event_id":"$F9WikyxYS0HOW2fEiVVOHUsqfxj-ijD7gHkT1y5nzdk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yeah sure","msgtype":"m.text"}} {"origin_server_ts":1704015985193,"event_id":"$LV_Ma9y8Nwfanc3l8VCL_oUwQa7-otCXEtbIgFkJnhw","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1704016121822,"event_id":"$u6iMEvCR2wogdK89XSO6Fy7DFsxm9LJXFA4_PT47vBk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","unsigned":{"age":19333310259},"redacts":"$LV_Ma9y8Nwfanc3l8VCL_oUwQa7-otCXEtbIgFkJnhw","type":"m.room.redaction","content":{"redacts":"$LV_Ma9y8Nwfanc3l8VCL_oUwQa7-otCXEtbIgFkJnhw"},"age":19333310259},"sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{}} {"origin_server_ts":1704016077523,"event_id":"$WrXQs3f2CKQEEC7YJSWu8KiOBDrciDYAxUV0N3Nx4rM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"lol did it work","msgtype":"m.text"}} {"origin_server_ts":1704016085132,"event_id":"$Edv3fKx4czP-KZZGBhSnUZOBKt4FXq90SYfAEiUs0jk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I can't see build failed in the log","msgtype":"m.text"}} {"origin_server_ts":1704016121822,"event_id":"$u6iMEvCR2wogdK89XSO6Fy7DFsxm9LJXFA4_PT47vBk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","redacts":"$LV_Ma9y8Nwfanc3l8VCL_oUwQa7-otCXEtbIgFkJnhw","type":"m.room.redaction","content":{"redacts":"$LV_Ma9y8Nwfanc3l8VCL_oUwQa7-otCXEtbIgFkJnhw"}} {"origin_server_ts":1704016153910,"event_id":"$yo0q4w5-ePwL3fkKzHFWz_Gd3XVdICBZI1lPtStfyTw","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1704017770658,"event_id":"$SfPxkK6wIvStCchSlptluFr3deqTn3glZbsD4QXetP4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","unsigned":{"age":19331661423},"redacts":"$yo0q4w5-ePwL3fkKzHFWz_Gd3XVdICBZI1lPtStfyTw","type":"m.room.redaction","content":{"redacts":"$yo0q4w5-ePwL3fkKzHFWz_Gd3XVdICBZI1lPtStfyTw"},"age":19331661423},"sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{}} {"origin_server_ts":1704016157993,"event_id":"$Qj3bgdIUB31BCJMFnfDfUwWzrhdVUAG7b1dEGTxA7Og","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ok now there ","msgtype":"m.text"}} {"origin_server_ts":1704016334065,"event_id":"$kTAUFPNfohLU5oij2d5Twuz1tYEYKOHwGcQreoF3BbQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm out at the moment. I'll check shortly.","msgtype":"m.text"}} {"origin_server_ts":1704016867682,"event_id":"$VIph0FHStjdpyCGTfL0QKZsgW1cXQZgUbpk4DMH7O1s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ah I think I know.","msgtype":"m.text"}} {"origin_server_ts":1704016887491,"event_id":"$93yqnXVRt2RGnfrrUcOH_zXbWlJBfcgtMgpSr9hDPg8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You need curl 8","msgtype":"m.text"}} {"origin_server_ts":1704016949311,"event_id":"$1PyqLDa2iy_XIi-TvLR2QOkQ0bPrCfeUa3WjOxHlkKQ","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I need to build it from sources? the latest I have is 7.*","msgtype":"m.text"}} {"origin_server_ts":1704016990310,"event_id":"$NfgFmCi_gY7ZftZXLO8t2v_Ed77NkmuAkSxRSgO5Xj8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Are you using an old os?","msgtype":"m.text"}} {"origin_server_ts":1704017007158,"event_id":"$-4lBkwMGgRajGBerqmPtQoJNiSYwIBLAX_W4mq1pWV4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Because curl 8 is available everywhere, or at least I thought so.","msgtype":"m.text"}} {"origin_server_ts":1704017028786,"event_id":"$LEHPSVTpiu8QLXM30BD88V7fpwBSOnXzRsA8wuGJO1Y","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"this is about as fresh as I can apt-get, kernel version is 6.6.*","msgtype":"m.text"}} {"origin_server_ts":1704017101132,"event_id":"$A962dZb72M3bEB5RaPyhjpFoSVhuy7859OInwx51ZrM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Strange. If curl 7 is commo then I should probably find out how to access headers without the API I use. Surely it was possible to do it in 7 as well. The API is probably different. ","msgtype":"m.text"}} {"origin_server_ts":1704017111633,"event_id":"$Oydlv3CtCvqMNW4lEHdiMQcnwYHyHox1-HTFmeTqABU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Strange. If curl 7 is common then I should probably find out how to access headers without the API I use. Surely it was possible to do it in 7 as well. The API is probably different. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$A962dZb72M3bEB5RaPyhjpFoSVhuy7859OInwx51ZrM","rel_type":"m.replace"},"body":"* Strange. If curl 7 is common then I should probably find out how to access headers without the API I use. Surely it was possible to do it in 7 as well. The API is probably different. ","msgtype":"m.text"}} {"origin_server_ts":1704017143514,"event_id":"$lkjP-pqsoHBv8BIu0cTPF-08mQ4pGMvop5OiF2FYulc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You could always build curl 8 and then build using it by changing the paths in the def file.","msgtype":"m.text"}} {"origin_server_ts":1704017222844,"event_id":"$r3qELVA38JuR1TaomBCIfc58h9PK79vAjbI1O_2ZBMo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The native version is a big problematic for a few other reasons thar has to do with how the Kotlin native compiler works.","msgtype":"m.text"}} {"origin_server_ts":1704017290548,"event_id":"$oKD9ryqADSrCw4VDnzU67PvGxrS4OBcTHf4yGTGjU-4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye ok I'll try building ver8","msgtype":"m.text"}} {"origin_server_ts":1704017770658,"event_id":"$SfPxkK6wIvStCchSlptluFr3deqTn3glZbsD4QXetP4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","redacts":"$yo0q4w5-ePwL3fkKzHFWz_Gd3XVdICBZI1lPtStfyTw","type":"m.room.redaction","content":{"redacts":"$yo0q4w5-ePwL3fkKzHFWz_Gd3XVdICBZI1lPtStfyTw"}} {"origin_server_ts":1704020370663,"event_id":"$yqJQuMZvX3xkMMvU21atwMPwojoE8Gt_3IWV10daqDQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"If you have build issues on `keyboard-input.kt` you may want to do a `git pull` to get the latest fix.","msgtype":"m.text","formatted_body":"If you have build issues on keyboard-input.kt<\/code> you may want to do a git pull<\/code> to get the latest fix."}} {"origin_server_ts":1704020551609,"event_id":"$ZDyXGsorJmOc3WRRunXqX3StNigavx4HNYjVwRcWIi0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$yqJQuMZvX3xkMMvU21atwMPwojoE8Gt_3IWV10daqDQ","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1704023095231,"event_id":"$y3U6kGfRhNKLQQvceeTbVFj0GpPeSQwbR5VVQdxRx5I","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"running the gui with gradle seems to work without problems, except that the keyboard won't work. I open it up and click a symbol (eg. ⍴), it prints out send '⍴' to window to console, but the character won't show up in GUI. I have to use the web client to type, which kind of defeats the purpose :D but anyway other than that it seems to work","msgtype":"m.text"}} {"origin_server_ts":1704027740373,"event_id":"$R9-7yU1MczCEVrv9Xc9jDLx11aYCrU-UzJqoqHRDClY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Clicking doesn't work at the moment. But you should be able to type using either the meta key or using the prefix (default is backquote).","msgtype":"m.text"}} {"origin_server_ts":1704027745697,"event_id":"$gGZRiHDI2u-1vIpsomZCpklKhzXq-TMInT2bJIOn9rk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Don't these methods work? ","msgtype":"m.text"}} {"origin_server_ts":1704027842129,"event_id":"$sAxTOpjsXnHQLjWyLJ1WnYb6ViocniW6Cll5CmhKhPM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"let's try","msgtype":"m.text"}} {"origin_server_ts":1704027895262,"event_id":"$B7qcHLUAMJgpIAf4mZs65nerAH1gQ7rVJlrOvswZXdM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"hmm no, although I'm not sure which button is my meta key","msgtype":"m.text"}} {"origin_server_ts":1704028006754,"event_id":"$99U9BewZNP0c6nzu1tojXATTW2VSIfavKVxZq9tGUyg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"online backquote-r gives rho, but with gui it gives `r","msgtype":"m.text"}} {"origin_server_ts":1704028410080,"event_id":"$MGrKqW4_3oTtRfnYsjMhD_MzQ-hRA1Su3OvACI8DiEg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Hmm... Weird.","msgtype":"m.text"}} {"origin_server_ts":1704028419995,"event_id":"$E5UdjSlISC-RYxvrOAs8uTOIsowu2RNZ21Sm0SvzbME","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Can you open the settings screen and manually set the prefix key?","msgtype":"m.text"}} {"origin_server_ts":1704028515189,"event_id":"$WKJDCi3uPHVhoVT2t_CmjFNaXWO-dXYjn65gSmgVgO4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"What keyboard language do you use?","msgtype":"m.text"}} {"origin_server_ts":1704028572173,"event_id":"$UrgyNNGFzUjNz4GjuBvC80_-Xfbe5J6xUz498jS90tM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"language is finnish","msgtype":"m.text"}} {"origin_server_ts":1704028625350,"event_id":"$XZpXR4H7B4zXGtABFNeP6Eu0NXVMnuIVmeVaxtbbcQY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yeah now it works, had to reset it manually","msgtype":"m.text"}} {"origin_server_ts":1704028715686,"event_id":"$_SeU0aIe7BvYa2NdNW5t08w9ou7rZ2psb4Wd1HNV_rQ","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"nice nice","msgtype":"m.text"}} {"origin_server_ts":1704029362604,"event_id":"$CvQrHUIs4JexTEOGGoKUkj91ajk5YOy6-f0cb3B7IVc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, I have just committed a fix that explains this when starting the application.","msgtype":"m.text"}} {"origin_server_ts":1704029402981,"event_id":"$vb0OprXmNbVro4goOb9EqHymnQsK7P_VlJ1uumm1QUA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Finnish is the same as Swedish keyboard, and I think the prefix handling gets confused when the prefix key is invoked using Antgr.","msgtype":"m.text"}} {"origin_server_ts":1704029405703,"event_id":"$4v_G2w6yc4M_KdWnpRVvVU6J7IMHR-ZCY98e39hIkOc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Finnish is the same as Swedish keyboard, and I think the prefix handling gets confused when the prefix key is invoked using Altgr.","msgtype":"m.text"},"m.relates_to":{"event_id":"$vb0OprXmNbVro4goOb9EqHymnQsK7P_VlJ1uumm1QUA","rel_type":"m.replace"},"m.mentions":{},"body":" * Finnish is the same as Swedish keyboard, and I think the prefix handling gets confused when the prefix key is invoked using Altgr.","msgtype":"m.text"}} {"origin_server_ts":1704029418860,"event_id":"$5BlUyENDwIOblmS_EIaYs1IuRqOcmxZRHwJ04G5dyJ8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Finnish is the same as Swedish keyboard, and I think the prefix handling gets confused when the prefix key is invoked using a dead key.","msgtype":"m.text"},"m.relates_to":{"event_id":"$vb0OprXmNbVro4goOb9EqHymnQsK7P_VlJ1uumm1QUA","rel_type":"m.replace"},"m.mentions":{},"body":" * Finnish is the same as Swedish keyboard, and I think the prefix handling gets confused when the prefix key is invoked using a dead key.","msgtype":"m.text"}} {"origin_server_ts":1704031438641,"event_id":"$UUap494TiNtMyI5RC7hg2Eq67Mbr8-1tF0ZgyeJlx38","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$vb0OprXmNbVro4goOb9EqHymnQsK7P_VlJ1uumm1QUA","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1704031472460,"event_id":"$hPE2yqtHR8WtbHM1J6IYtl7Et4EHih7rpccoi6Cz-Qg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"thanks, waiting for the virtual keyboard functionality","msgtype":"m.text"}} {"origin_server_ts":1704031480983,"event_id":"$QakI3_v4fQzK_U3mRFEaymQFN3Du3zINZOrqalpebEY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":":D","msgtype":"m.text"}} {"origin_server_ts":1704031612698,"event_id":"$2kJmPmpTbS94JYgLpnm9bpwMcuPo3nNSaIfQyPyGau0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I'll see if I can figure out how to best make them clickable. The problem is that the keyboard is in a separate window, so when the button handler is called, the wrong window is selected.","msgtype":"m.text"}} {"origin_server_ts":1704031624060,"event_id":"$nbpJpFGB1NP0NBvWeewNbTuFFfpR_4p3Dr5VVLpQSow","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I'll have to create a language bar and put it on top of the screen instead.","msgtype":"m.text"}} {"origin_server_ts":1704031673446,"event_id":"$24-tmA8nLszijVxMzhG0kOMrh-kO34si1zz-eTQr17g","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye I'm used to using that with other GUIs, like the website version or tryapl","msgtype":"m.text"}} {"origin_server_ts":1704031694175,"event_id":"$c1JlvECZkdplPZ3Bt1QfP19eOKzDPvBexGnozx7NxSY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"easy to find them there","msgtype":"m.text"}} {"origin_server_ts":1704033078821,"event_id":"$6cps6wpGjQwAWlQm0K1rSPq-J3Yiaf3XebuPsOYD-ow","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$-4lBkwMGgRajGBerqmPtQoJNiSYwIBLAX_W4mq1pWV4"}},"format":"org.matrix.custom.html","body":"I'm on up-to-date Linux Mint, curl 7.81.0. I don't think it makes sense to assume things released only 9 months ago are anywhere close to everywhere, needs to be at least a couple years if not decades :)","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>I'm on up-to-date Linux Mint, curl 7.81.0. I don't think it makes sense to assume things released only 9 months ago are anywhere close to everywhere, needs to be at least a couple years if not decades :)"}} {"origin_server_ts":1704033156011,"event_id":"$y_Dd7BRKdDOTxARKhqPetOKX1xTK2vFUAQDt6tERewo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: fair. However, there is a bigger problem with the linux version, and is that the Kotlin native compiler doesn't support the latest glibc, so if you try to build on Fedora 39, it'll fail.","msgtype":"m.text","formatted_body":"dzaima<\/a>: fair. However, there is a bigger problem with the linux version, and is that the Kotlin native compiler doesn't support the latest glibc, so if you try to build on Fedora 39, it'll fail."}} {"origin_server_ts":1704033164130,"event_id":"$My-fmiwdmwJoW0YZsPhYkFP6JwNBHzSAno1zPNBVrKU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"And there is currently no good solution to that.","msgtype":"m.text"}} {"origin_server_ts":1704033205295,"event_id":"$jbPRsD2e-ZgBgSr3qamC5ZU42WWTZLCnVXAANa02lsE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"So I am going to have recommend against using the linux version until the kotlin compilers are fixed.","msgtype":"m.text"}} {"origin_server_ts":1704170465029,"event_id":"$kyuBpoyFgqH4mclVoeUURb1VLD4_iN47q8OTDwSsptc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, I've actually managed to fix the linking issues with newer glibc versions now.","msgtype":"m.text"}} {"origin_server_ts":1704170512752,"event_id":"$tyNwjgrkFj-z0kV7PpCxk8gqZP6oGIZcZ56ez7WmvJ8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I would love to be able to support older versions of libcurl, but I cannot figure out how to access HTTP headers without those functions. Surely it was possible in older libcurl, but I can't find any information about it.","msgtype":"m.text"}} {"origin_server_ts":1704170516911,"event_id":"$ntUxoIMmneXkAYqrwUlWYnnuDJ1F-Cn9mjwx7ykf6jA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: any ideas?","msgtype":"m.text","formatted_body":"dzaima<\/a>: any ideas?"}} {"origin_server_ts":1704208493631,"event_id":"$rE6H21DSN2pqVk80f47tNzaWGeMjv7RY7PnSdC39qW4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"https://curl.se/libcurl/c/CURLOPT_HEADERFUNCTION.html perhaps?","msgtype":"m.text","formatted_body":"https://curl.se/libcurl/c/CURLOPT_HEADERFUNCTION.html perhaps?"}} {"origin_server_ts":1704209325752,"event_id":"$2LxinY2WxVGAOZuywMr3hqP2fVducr7rQQFFPbvu78A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: thanks. Reading this makes it clear why they introduced the new function.","msgtype":"m.text","formatted_body":"dzaima<\/a>: thanks. Reading this makes it clear why they introduced the new function."}} {"origin_server_ts":1704212054410,"event_id":"$31OXVbkNsGIP2zWogOD6tDUdvBoUF2XwhxApnXdOknw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org","@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: sienet_ja_LSD I think I've fixed it now. It should be possible to compile with older libcurl","msgtype":"m.text","formatted_body":"dzaima<\/a>: sienet_ja_LSD<\/a> I think I've fixed it now. It should be possible to compile with older libcurl"}} {"origin_server_ts":1704265249490,"event_id":"$SFSMDbXfudyPK24Jb_LNovqqMr1Nb6DIu8kPP9yDjuE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$31OXVbkNsGIP2zWogOD6tDUdvBoUF2XwhxApnXdOknw","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1704265272225,"event_id":"$1NT0sREcrJx1KD2Pi7oVuAgMKbhfFBBEqtHt7Vopogo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"nice, I'll try it out","msgtype":"m.text"}} {"origin_server_ts":1704265532452,"event_id":"$LFLvFzfQ5fUKt0tzHfT00nsj-lkwmNQ2EUhpdRIfTYg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ok next one :D Exception in thread \"main\" java.lang.Error: /tmp/13569423597168541533.c:1:10: fatal error: 'histedit.h' file not found","msgtype":"m.text"}} {"origin_server_ts":1704265588806,"event_id":"$Vu-mgakr22mRVoexSfRTymbChn23qgwzVKZDvC4My2g","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"found libasound2-dev so that went ok, but maybe a list of dependencies would help so that I could just apt-get those","msgtype":"m.text"}} {"origin_server_ts":1704267002651,"event_id":"$Mtl4GdYuyKuOCNhDU2ZQYhmqD8ggzR-1ARuFexATuCo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"You need to install libedit-dev, or editline-dev","msgtype":"m.text"}} {"origin_server_ts":1704267007669,"event_id":"$Vqhgc4lk2Pd3H9jmn-oBGAC_ssZ0fW2ITSzoNngclHk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Don't remember which one :-)","msgtype":"m.text"}} {"origin_server_ts":1704267288767,"event_id":"$CnJMhzfVKSDxmvZPKJkC3vJB8yJoic_GsmKeBN5W2f0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"libedit-dev worked, and it built it succesfully","msgtype":"m.text"}} {"origin_server_ts":1704267313068,"event_id":"$VbsSXWVpsMJQcUgYeABC8eRxg5U2QUBWvF6Lb-SPQLw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Nice.","msgtype":"m.text"}} {"origin_server_ts":1704267314836,"event_id":"$11Q-1hDZ3rmNtMXciN3U_z0QM-qut0tdn1arKQf2SVw","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"now trying it out, it is expecting standard-lib.kap but cannot find it. how do I tell it where to look?","msgtype":"m.text"}} {"origin_server_ts":1704267337566,"event_id":"$Jzgvj4N08hOfPG-V-NVRjQ40SDbrhbqfJEtNoQ51Xww","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The exact commandline entry is included in the README","msgtype":"m.text"}} {"origin_server_ts":1704267343307,"event_id":"$f8Tzua20OGLYFJStydK3iOPFzchlHuDnIr8-T6-RKh0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ah ok ","msgtype":"m.text"}} {"origin_server_ts":1704267346006,"event_id":"$iV8g-K1aBv3PnJKo2elXZ0XVjQEXbqbaXhfaUZVCcnI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"You usie `--lib-path=/path`","msgtype":"m.text","formatted_body":"You usie --lib-path=/path<\/code>"}} {"origin_server_ts":1704267364257,"event_id":"$p8YgmDYxv5t4g0V1wLZGqe4Nm56Rina1le4SiDDRiX8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I've been considering creating an official debian package for this.","msgtype":"m.text"}} {"origin_server_ts":1704267433272,"event_id":"$SAfJgmjg1xh7TenuCvqDHSqsVWEgGM2CbmLs-ipHbwc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye it works now","msgtype":"m.text"}} {"origin_server_ts":1704267435764,"event_id":"$nb911uwBy1aZsIe1D0KluJ-mGpaSztA3gJQG9v22WeI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"If you want to change the prefix key for the native Linux version, you have to do it in the libedit config file.","msgtype":"m.text"}} {"origin_server_ts":1704267465208,"event_id":"$dKyDEzw76u7FQclsyNMDJgL2qJTScpyVsPBWuawCiPs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Try the curl integration. Run this from the REPL: `io:httpRequest \"https://www.google.com/`","msgtype":"m.text","formatted_body":"Try the curl integration. Run this from the REPL: io:httpRequest \"https://www.google.com/<\/code>"}} {"origin_server_ts":1704267467681,"event_id":"$FwKs6I3cPbBxjHERzzp_-EkvBEUVnvFGDB47LiknC9c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Try the curl integration. Run this from the REPL: `io:httpRequest \"https://www.google.com/\"`","msgtype":"m.text","formatted_body":"Try the curl integration. Run this from the REPL: io:httpRequest \"https://www.google.com/\"<\/code>"},"m.relates_to":{"event_id":"$dKyDEzw76u7FQclsyNMDJgL2qJTScpyVsPBWuawCiPs","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Try the curl integration. Run this from the REPL: `io:httpRequest \"https://www.google.com/\"`","msgtype":"m.text","formatted_body":" * Try the curl integration. Run this from the REPL: io:httpRequest \"https://www.google.com/\"<\/code>"}} {"origin_server_ts":1704267500155,"event_id":"$vbny3vu2tMw-maMnZ7RFOp5C0KUtKmbUo4pAj0Nwgws","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aa yeah here we go :D ","msgtype":"m.text"}} {"origin_server_ts":1704267571288,"event_id":"$2HT19Y2lkwdMo0kdqeiTOBQGxYpWpLX2nHXQAvCbjIw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Specifically, check if the headers are read properly. Do this:\n```\n(code ; data ; headers) ← io:httpRequest \"https://www.google.com/\"\nmapToArray headers\n```","msgtype":"m.text","formatted_body":"

                    Specifically, check if the headers are read properly. Do this:<\/p>\n

                    (code ; data ; headers) ← io:httpRequest \"https://www.google.com/\"\nmapToArray headers\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1704267664933,"event_id":"$7BTLJVCiBUjw2v95SF5NShUE79ee7tWO1U9HwL3_Rwo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"working great","msgtype":"m.text"}}
                    {"origin_server_ts":1704267672771,"event_id":"$AueXWF-EMMPurIPss34oYNnjQaYAOfdKp6j36mC_nIs","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"so many cool features here","msgtype":"m.text"}}
                    {"origin_server_ts":1704267680372,"event_id":"$KR9N7DUYV5cg9lE2NEvuPCBM5jfROUN8ssXnyNzTQug","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Great. The old header API in libcurl was a nightmare. :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1704267705983,"event_id":"$hWGXK0tK0cLKSH5QWErhIANRWsH8Cr-AH-kcOs8d5ng","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"especially sound and graphics, got my attention because there's lots of demoscene potential","msgtype":"m.text"}}
                    {"origin_server_ts":1704267806261,"event_id":"$Qf_Ssjy8nKiN9-DsVyhtyfJFQIGC76KsQyAYmIYZ_UA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"a nice way to build fame is to send some wild compo prods to various demo parties, they don't have to be super fancy but such that they demonstrate some features","msgtype":"m.text"}}
                    {"origin_server_ts":1704268208220,"event_id":"$suvT-TxRIO6Z3Ul5bFFhW80R7dsR2VBeGE99U5361vs","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"but there's all kinds of other directions for the system, KAP could replace statistical packages like R (would need some plotting routines to display data)","msgtype":"m.text"}}
                    {"origin_server_ts":1704268220293,"event_id":"$ccYAUcGXDGK8XndW9hSz3dM0w2-U1TamaQwVPpp34-0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I've built integration with one of the major financial trading systems that a third of the large banks use :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1704268252109,"event_id":"$i8A5La_Fdimvyf3Sq2HGTHZbjBmYTRfuHBnqSfL_IAg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"nice nice ","msgtype":"m.text"}}
                    {"origin_server_ts":1704268284434,"event_id":"$77iywty2EUnxl8zETB7ayW85_kUzwDuQ31gMYYHDr5A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Plotting? Like this?","msgtype":"m.text"}}
                    {"origin_server_ts":1704268285601,"event_id":"$aGMgx7RWYrwgHDyjh4QRdMEIZreJOeG35gcqmRaRmog","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Abar%205%203%20%E2%8D%B4%204%202%203%205%202%202%201%202%20%2010%209%201%208%204%203%209","msgtype":"m.text"}}
                    {"origin_server_ts":1704268304069,"event_id":"$fKkqTFTn72hWKkeIqxiU2v4mbBn4cYZqyuxm7uQ6ezU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yeah like that :D ","msgtype":"m.text"}}
                    {"origin_server_ts":1704268369600,"event_id":"$P8KtAmNYMAXPOMOCyrubbEVsXVUDFSi-YXcTBdZ2mQ8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"can it do  a scatter plot? ","msgtype":"m.text"}}
                    {"origin_server_ts":1704268399222,"event_id":"$XX4SdUhQWn_U8vj0Gu8LIk-FeVHmUceGhdPhvEw6sY0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"The examples page has [this graphical code](https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Abar%205%203%20%E2%8D%B4%204%202%203%205%202%202%201%202%20%2010%209%201%208%204%203%209)","msgtype":"m.text","formatted_body":"The examples page has this graphical code<\/a>"}}
                    {"origin_server_ts":1704268414022,"event_id":"$ApRkPDEwNliqPtqKeNXZO1f0EdkXtKyok0XI4BKZQGI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: No. But I will add it this weekend :-)","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: No. But I will add it this weekend :-)"}}
                    {"origin_server_ts":1704268434904,"event_id":"$5wwFNHDGKNXtp3qZ5Pku2DVAso1-hdIkT315V_tfJtc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"My plan is to work a bit on the charting stuff then. I'll also add 3D charts.","msgtype":"m.text"}}
                    {"origin_server_ts":1704268460029,"event_id":"$nx0b9_mY9U4JszZSbyn1ueUu0EoOiyMMjbYsCxkUAV0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$5wwFNHDGKNXtp3qZ5Pku2DVAso1-hdIkT315V_tfJtc","rel_type":"m.annotation","key":"😎"}}}
                    {"origin_server_ts":1704268506372,"event_id":"$C0B3FIJ-U6d5Hi3mMbh2-cIRzTZal-kUlTb1kqu40mc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"looking forward to it :) ","msgtype":"m.text"}}
                    {"origin_server_ts":1704268682128,"event_id":"$phtj101w5X9xXXpuK5onzMmVGn_QmUPrrT98b5df6tw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's incredibly helpful if you play around with this, because I need input.","msgtype":"m.text"}}
                    {"origin_server_ts":1704268729946,"event_id":"$Gg0AquLc3iRZZcVGD_X7WGl7REUysrwvDLwIJfH87Lk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"If there is a feature you need, let me know. I'll be happy to add it.","msgtype":"m.text"}}
                    {"origin_server_ts":1704268774448,"event_id":"$06wJyMvphLBQaK5rTp4TD90DKZbPuJZ06Gq4nYsjzDI","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye, it looks promising","msgtype":"m.text"}}
                    {"origin_server_ts":1704269736500,"event_id":"$TYpajJRzQMacAnnVdMmbQKC8lrZBWd2h6dNOMYET8Ag","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Thanks a lot for your time on this.","msgtype":"m.text"}}
                    {"origin_server_ts":1704269809106,"event_id":"$iNkc-5A5Wswtjrj102WWzRRk7OGfTlA-2hOm0ctUW-U","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"my pleasure","msgtype":"m.text"}}
                    {"origin_server_ts":1704291854108,"event_id":"$36aQK_i9AZNsglVjz41AwOCA0_eXXUk-LD_rXRZiEBA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: I have implemented scatter charts for you now.","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: I have implemented scatter charts for you now."}}
                    {"origin_server_ts":1704291882588,"event_id":"$enFgXyqmAIUPIVbyppfQOwUMyEnt49809s14NWQbdww","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"wow thanks","msgtype":"m.text"}}
                    {"origin_server_ts":1704291884412,"event_id":"$V4_PyY9gDv9WiU37rA9r6kHLAxIPQhMLIbL4cvcrLQs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: Please see the documentation here: https://kapdemo.dhsdevelopments.com/reference.html#_xy_charting_functions","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: Please see the documentation here: https://kapdemo.dhsdevelopments.com/reference.html#_xy_charting_functions"}}
                    {"origin_server_ts":1704291917837,"event_id":"$TviQd68vSQ4OtWjO5gIkgjPQ87qKyURCJmjY6ftkHoc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$V4_PyY9gDv9WiU37rA9r6kHLAxIPQhMLIbL4cvcrLQs","rel_type":"m.annotation","key":"🙏"}}}
                    {"origin_server_ts":1704291922517,"event_id":"$scdgzJbd0GHqM9CFtTGBSB7u2jUa71B9xvuya6X2UT0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's not implemented in the web client yet.","msgtype":"m.text"}}
                    {"origin_server_ts":1704291926016,"event_id":"$v3Zjc_5ZFyEZb_AAPnb31cThYZnuIILNiOQ1uNEwq-M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Only the Java client.","msgtype":"m.text"}}
                    {"origin_server_ts":1704291940375,"event_id":"$qPN-s-j_yMEwohJiL6uSc14h_UVU-5TTf099OLpictQ","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye that's what I'm using","msgtype":"m.text"}}
                    {"origin_server_ts":1704291946018,"event_id":"$p9MwgkJ_UAchakf8E6HFZLksx7C5awD2ufzTLHtzxIU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The charting libraries I used in JS vs. Javafx are completely different, so they need different code.","msgtype":"m.text"}}
                    {"origin_server_ts":1704292024489,"event_id":"$_C9znDveakp6GioKDuc3C8isc83H1je5_KnjVpguRzM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"can KAP do something with Java's base library? is it possible to create Java objects?","msgtype":"m.text"}}
                    {"origin_server_ts":1704292038107,"event_id":"$6assvVuteWyGP6WfaxNSVrJWCjVnNYuCfjAKEAkKoag","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yes, but the API to do it is painful, and not complete.","msgtype":"m.text"}}
                    {"origin_server_ts":1704292057081,"event_id":"$YlPrR3yTb81XQw9MNmFwJrt2LdNJ6hS2Axp5s0Ojts8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye","msgtype":"m.text"}}
                    {"origin_server_ts":1704292060671,"event_id":"$juzmZpVa7W9D0njy9muaMLZm7QtENw7yXINrOUEk15U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Hang on, I have some examples.","msgtype":"m.text"}}
                    {"origin_server_ts":1704292112509,"event_id":"$GCMBnGvY2M7E2bub9eS-bBkhPCunVubgyApGTf_7_0Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Here is an example from the testcases that instantiates a class and calls a method: https://codeberg.org/loke/array/src/branch/master/array/src/jvmTest/kotlin/array/jvmmod/MethodCallsTest.kt#L47","msgtype":"m.text"}}
                    {"origin_server_ts":1704292146809,"event_id":"$9YkgyEVI-YVg2qqV6wj4E5Jb6-DjfeE4sGoXXGbHpEk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$GCMBnGvY2M7E2bub9eS-bBkhPCunVubgyApGTf_7_0Y","rel_type":"m.annotation","key":"😎"}}}
                    {"origin_server_ts":1704292174939,"event_id":"$g4jKQTTeTi4q0JYI5-Yd07HqIFBe_cSEsQ-7C9AM70w","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"that looks right about how I would think it might look like :D ","msgtype":"m.text"}}
                    {"origin_server_ts":1704292181113,"event_id":"$Q_rdEqedzSMez23GmLpRY2dgJ7-BGQAa10HQX-vFiQM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I mean it's Java","msgtype":"m.text"}}
                    {"origin_server_ts":1704292194213,"event_id":"$3lf_p8WRBXNbcl99xjfAN2mIrvf6jZnXMR0DtKsf17E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's a very thin layer on top of the standard java reflection API.","msgtype":"m.text"}}
                    {"origin_server_ts":1704292243662,"event_id":"$qUL1CrdBkGS-e4A8nvXuzhl9IvBJXoGIziD1b6bspDI","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"but it's already a lot if it works","msgtype":"m.text"}}
                    {"origin_server_ts":1704292283708,"event_id":"$t42HmOHC-gChdE4PY1F-gA0xDsTCYbEgQZzvnpSW1Fs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"For basic stuff, yes it works. For more complicates stuff, it needs more work. You can't call back into Kap from Java for example.","msgtype":"m.text"}}
                    {"origin_server_ts":1704292318070,"event_id":"$4RWURLD9hL8-oUmtxnOpGRRzUACqijmWmyJzrjtw6Z4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"But if you create a dedicated class in Java that acts as the glue between Kap and whatever you want to do in Java, it should work.","msgtype":"m.text"}}
                    {"origin_server_ts":1704292355827,"event_id":"$rE21ij3kqOyjwr3Al4-7Tu9nHq1l8YaIXTxziyplw4Y","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"how do you tell it where to look for class files?","msgtype":"m.text"}}
                    {"origin_server_ts":1704292371566,"event_id":"$aJt4W30WjX-sTDR201D4Mgb72-7GOARlAEYBjRB5EwU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"There is also a way to add modules to Kap that automatically register itself into the Kap engine, so you can drop a jar file in the classpath that gives you new functions.","msgtype":"m.text"}}
                    {"origin_server_ts":1704292422397,"event_id":"$NBZzsT2ywbyMcVfVduhWGiC2PggWHvbmrMA0T6mqfMM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ok, classpath","msgtype":"m.text"}}
                    {"origin_server_ts":1704292475814,"event_id":"$Y8mlI_zgdQqFqmyXTxjH7kdVBDddRBpNFF2fcOdG-HE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"You can set the environment variable `KAP_JVM_OPTS` to add a `-classpath` argument.","msgtype":"m.text","formatted_body":"You can set the environment variable KAP_JVM_OPTS<\/code> to add a -classpath<\/code> argument."}}
                    {"origin_server_ts":1704292553072,"event_id":"$e4F4p7bW08Gvt8KiSH_-SgHKIYZuj815IiUhKZCMdkQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"It uses ServiceLoader so all you have to do is to register an instance of `KapModule`, and it will be instantiated automatically when the engine is created.","msgtype":"m.text","formatted_body":"It uses ServiceLoader so all you have to do is to register an instance of KapModule<\/code>, and it will be instantiated automatically when the engine is created."}}
                    {"origin_server_ts":1704292571787,"event_id":"$KJJ_jfW0PcIbmgwcJyPgUPaMFvC4aJHMMUDr15dShcE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":":)","msgtype":"m.text"}}
                    {"origin_server_ts":1704292641818,"event_id":"$hq3P5fEn6iPKIZCuyxmL-0JI-wwx9_rlTfO2bMmoOao","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Basically the jar file should contain a file `META-INF/services/array.KapModule`, and the file should contain the name of a class that implements that interface.","msgtype":"m.text","formatted_body":"Basically the jar file should contain a file META-INF/services/array.KapModule<\/code>, and the file should contain the name of a class that implements that interface."}}
                    {"origin_server_ts":1704292691885,"event_id":"$07ZlMcAzwwwM5FgUGiZYirZBX5iUuEsYUDLP7TNE7SQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"This stuff is quite advanced though, and you'd need to know the internal Kap API's very well in order to be able to use it. But it's very flexible.","msgtype":"m.text"}}
                    {"origin_server_ts":1704292744435,"event_id":"$UjdGlLEFNsTs8v2l5XkHFIWcyPIp4I6asbDG4YN-h18","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"But if all you want to do is to add a class you can refer to from the jvm API, then there is no need to deal with the serviceloader stuff. Just add the file to the classpath and you should be able to access it without any further work.","msgtype":"m.text"}}
                    {"origin_server_ts":1704293755956,"event_id":"$zZ3vUnO_u2N97hFyEmfa9IqH8Jj8btDZsfFOAkkbMRU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$hq3P5fEn6iPKIZCuyxmL-0JI-wwx9_rlTfO2bMmoOao","rel_type":"m.annotation","key":"😎"}}}
                    {"origin_server_ts":1704293761022,"event_id":"$TN57LkcsCT17SQT8ozcoz_FLiOmDzYBhXKmBMhL4EOk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$UjdGlLEFNsTs8v2l5XkHFIWcyPIp4I6asbDG4YN-h18","rel_type":"m.annotation","key":"🙏"}}}
                    {"origin_server_ts":1704294250082,"event_id":"$PxzBMYTjqHnbXLkG0tVpsq_V2tECETPiAQJYxrEc0ak","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Do let me know if anything is needed, I'll implement it :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1704303465059,"event_id":"$KrJtl_Js04iKEObOeBxnQvU_v7SYQoqwWyKeX9HDnBA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, I've now implemented scatter charts in the web client as well","msgtype":"m.text"}}
                    {"origin_server_ts":1704304629161,"event_id":"$0R-UUX4MMO9IzlwRauQfLBSkcm0NtmqVuXSe0anQO88","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$KrJtl_Js04iKEObOeBxnQvU_v7SYQoqwWyKeX9HDnBA","rel_type":"m.annotation","key":"😎"}}}
                    {"origin_server_ts":1704304765864,"event_id":"$kZ_Vs3NkLkIWBM5XWPQ7ZIVolsNN5w7baIq-spZNXmI","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yeah, seems to work :)","msgtype":"m.text"}}
                    {"origin_server_ts":1704304819350,"event_id":"$ioH54iAspWYU8JPpzJWgg7eIu6RGhxRuyFUhWuU2kMs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I took the opportunity to rewrite the code that computes the dataset for display, which should improve the performance of rendering charts as well.","msgtype":"m.text"}}
                    {"origin_server_ts":1704304853965,"event_id":"$kRUaT6jugNiB9mQUqKAUWs3w5DkGeHzAEkQCeHIcTcU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"No idea if it's noticeable though. In any case, it no longer passes a json encoded string from the webworker, but actual materialised JS objects.","msgtype":"m.text"}}
                    {"origin_server_ts":1704304938783,"event_id":"$kZ9fmtvodfs2iwnOaDVKqMpDMfPgSiFHdfP-LE_-h6g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, a bar chart with 100k entries is still slow :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1704304951346,"event_id":"$39_oKUfp0_-4FgngXjMAC7FPUQ6XJBneT--GIQtovx8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"`chart:bar ?100000⍴10000000`","msgtype":"m.text","formatted_body":"chart:bar ?100000⍴10000000<\/code>"}}
                    {"origin_server_ts":1704304953179,"event_id":"$9nLMLdUadlAJqCl5dBmBFxFI-5Zn4jaz0xNazqPMFZg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"lol","msgtype":"m.text"}}
                    {"origin_server_ts":1704304974139,"event_id":"$DDJ4mPa3wMDxiQJIMWLsUaikY8kIHrtuF4G31QHF0X0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"reminds me of these GIS maps I once tried","msgtype":"m.text"}}
                    {"origin_server_ts":1704305010351,"event_id":"$4IYsxya29VHwnGIEjPm4qZwjnHtMi-kKDVtT_RY6XOU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Hah. Firefox manages to render it. Chromium just falls over. It's the charting library's fault though.","msgtype":"m.text"}}
                    {"origin_server_ts":1704305116430,"event_id":"$UT8kESSIHEiRSB9uHkylhs6HF6nlgSkm_dQJCjdmIfI","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"is that like a 119MB object :o","msgtype":"m.text"}}
                    {"origin_server_ts":1704305130233,"event_id":"$H3Ks0R4Ym8s8kqpQeXHqPRWYQVWblv_dBZq5qRU1vrg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"You checked the JS debugger?","msgtype":"m.text"}}
                    {"origin_server_ts":1704305134955,"event_id":"$YomfwIVSi85LA--NcUrmjWZMf0BXLx5ATfPKUlDg-0w","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye","msgtype":"m.text"}}
                    {"origin_server_ts":1704305145839,"event_id":"$X_KHCj5h0cASsXDkL7OkGN9Wsp6X9pfqWcrT7pbwDGI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I haven't looked at that :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1704305202443,"event_id":"$REG8zaspmbBtytCFn5PXQAGDOPI6vNVkSEuRiyI2lyo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://matrix.org/UPAQngkORYhtoHGugqQvKOQX","info":{"xyz.amorgan.blurhash":"L9D.ID00008f%hpKWIR8VyT1x^xa","size":17607,"w":617,"h":238,"mimetype":"image/png"}}}
                    {"origin_server_ts":1704305233037,"event_id":"$yCoFAJu5nL8k7GRjfw9f5pLyJOKcDvpVvfafI0Judrs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, that's probably one of the internal objects in the chart library","msgtype":"m.text"}}
                    {"origin_server_ts":1704305338468,"event_id":"$wnSSY1bjWRzFIO8PWV2TYwm6xuBCcY8012JvUrUKItw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Anyway, time for me to go to sleep. Please report any issues :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1704305359451,"event_id":"$ciDdaJBlOc89xTwtrWv3mR6OYSclde2vYzhGMrwmZ2c","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"night, sure thing","msgtype":"m.text"}}
                    {"origin_server_ts":1704376785097,"event_id":"$5hHRFT33t7rcGfx47yGeRHSb5VVIMwjQhhFynn4T4Eg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"There. I have finally fixed the implementation of `?` to be compatible with APL.","msgtype":"m.text","formatted_body":"There. I have finally fixed the implementation of ?<\/code> to be compatible with APL."}}
                    {"origin_server_ts":1704376785696,"event_id":"$X3LYy07nfORR4OO-BDOmYBp3PvbyrBlCHoQ4jBE7SXA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://codeberg.org/loke/array/commit/f2b28d100493a7c59f6ecc35146e234bad53e5e8","msgtype":"m.text"}}
                    {"origin_server_ts":1704380214874,"event_id":"$-fHAioAdMoESU9qFAsIaaU3EPVMmkVI1ZBF-57HYV_Y","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$5hHRFT33t7rcGfx47yGeRHSb5VVIMwjQhhFynn4T4Eg","rel_type":"m.annotation","key":"😎"}}}
                    {"origin_server_ts":1704465487549,"event_id":"$uuRCa-AW5dqhtIWcM4sQ47K4uR2SpoBEE26Q71qLeS0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: If you check out the latest version, I've added a language bar to the gui client","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: If you check out the latest version, I've added a language bar to the gui client"}}
                    {"origin_server_ts":1704465784332,"event_id":"$QJAsg1LndW1keHCErl81IEejQ5PwIXFEWis3d_8RXiE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"Oh! Awesome, thats helping out a ton","msgtype":"m.text"}}
                    {"origin_server_ts":1704465830892,"event_id":"$JQKsIYE48yjnu9KZLxpOs0cfDEMdYKXAbXjAC-Hlu_I","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"Features keep building up....","msgtype":"m.text"}}
                    {"origin_server_ts":1704467274318,"event_id":"$4PXmLNlOmjuoD9W74ClEfNj0ca-J_4t1capCwqfe5OI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Not sure what to add next. 😃","msgtype":"m.text"}}
                    {"origin_server_ts":1704470717672,"event_id":"$MEe2mleGVexL8vPd2AOHrcp3ndl_xhWpwuf_7OejlMs","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"What about http server?","msgtype":"m.text"}}
                    {"origin_server_ts":1704470794510,"event_id":"$5X2r0dP7e1wPvpFNka9XRoqO9LZtagQhZcEpV4fNJWA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"Of course you could just drop a jar file and use that, it is possibly a better way anyway. But a package system could be fun","msgtype":"m.text"}}
                    {"origin_server_ts":1704470876337,"event_id":"$pAkxKoAtOhT11BmaAtjLshgwX_i8Mww-A83RxeCbBO0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"With a simple line it would fetch a http server package and you could use KAP as your preferred replacement for React","msgtype":"m.text"}}
                    {"origin_server_ts":1704470939752,"event_id":"$BBnxcrwLBGYdocNj-b_Z37R8C30shcGqPiXNefukc9I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What would you do with a http server? Make a rest service served by kap code?","msgtype":"m.text"}}
                    {"origin_server_ts":1704470952009,"event_id":"$0E83SwvlnVM7MsdxRRUTfWxAXFCha_k9BKM8cJOrvi0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's certainly possible. ","msgtype":"m.text"}}
                    {"origin_server_ts":1704471085768,"event_id":"$N2Vl18F5v3e6QgJlQd1qfJPv-J6vij0VYoOouRdtU7U","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"Yeah","msgtype":"m.text"}}
                    {"origin_server_ts":1704471147762,"event_id":"$FDPKXcWs-LH3dzXgDKWPSFkYGlY6_3w0Vqb3Hxy1gXU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"I was looking at some APL source code by jurgen that featured Gnu APL responding to http requests, but you had to use cgi","msgtype":"m.text"}}
                    {"origin_server_ts":1704471182184,"event_id":"$Gd-BabBeLOlV8Yys4H7kWCB5L84yFldettcXBegfoOs","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It served a simple webpage ","msgtype":"m.text","formatted_body":"It served a simple webpage"}}
                    {"origin_server_ts":1704476589236,"event_id":"$fdjoNoaDxTsuAnD6Q4BuwpKgyM6fkyDDpUPXGdOx3Ww","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Sure. It's certainly possible, but I just don't know how useful it would be to serve html. Creating rest endpoints may be more useful.","msgtype":"m.text"}}
                    {"origin_server_ts":1704477400763,"event_id":"$ulj6Wn89pXQxKl-QssYCJLJDAwvwQq5k_QiJq86HrU4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, added the language bar to the source editor too.","msgtype":"m.text"}}
                    {"origin_server_ts":1704477438041,"event_id":"$YEdjJqj2fvDWszh_UU4pEW5l39BduuNrOCB5QNQwnNo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: what would you use the a http server for? I can easily implement it, but I'd need to know what you want to do with it.","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: what would you use the a http server for? I can easily implement it, but I'd need to know what you want to do with it."}}
                    {"origin_server_ts":1704477724569,"event_id":"$XbGCoCpuxOoiYyQ-L81ogFV6IIqQuVukKMhGVGZsoZk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"You don't have to of course, but I was thinking in terms of having a KAP application use database (as theres an SQL connection) and then if you cannot call KAP from other Java applications, it would be useful to have a http server. But of course you don't need it if you just do something with the data and update database and serve html from something else that accesses the same database","msgtype":"m.text"}}
                    {"origin_server_ts":1704477781378,"event_id":"$lwEJAJ7CrgdMxZn6dcLvTYZkjwTXrmK3S2AVUaw9d4A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I mean, sure. It's not a use case I ever thought of (since I consider it to be more of an interactive tool), but it's not difficult to do.","msgtype":"m.text"}}
                    {"origin_server_ts":1704477803262,"event_id":"$vf5GdZWJp-d-7vOgFFP2jOzKPYbqCq--BGBxLi8Yzqo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I'd wait until I have a proper threading API though, since a single-threaded web server isn't very useful.","msgtype":"m.text"}}
                    {"origin_server_ts":1704477826676,"event_id":"$AtpzCqjztg-P0pLakZ67kC0kzC6jQPeKYoaOJBrmWjo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"When I work with Kap, usually end up exporting the output to CSV or Excel :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1704477834140,"event_id":"$lk1i_3pwu40Vv6pCx16-80wbyhQkqqug708olqVWk84","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"I was thinking KAP more as a replacement of A+","msgtype":"m.text"}}
                    {"origin_server_ts":1704477858646,"event_id":"$caRN5FWgoEps1ln9hjkiNqVf_BRsyCded3_q2iQ414I","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"They have sll kinds of fancy graphical user interfaces there","msgtype":"m.text"}}
                    {"origin_server_ts":1704477859018,"event_id":"$F7CE3fCe0L7SUXwtGIQ9umAZ32Gr_afEw0ffHa8VcYk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I only briefly looked at A+, many years ago before I really understood APL. How was it used?","msgtype":"m.text"}}
                    {"origin_server_ts":1704477877940,"event_id":"$d-MIXuHjWmI3Mi3pVN1zKKKA-qcZDhLlhhfeyjuBmRg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"It is used in banks to do finance","msgtype":"m.text"}}
                    {"origin_server_ts":1704477912310,"event_id":"$a1yh6d8j07n82TVO0PA2RlGKhkQAvxWuusfTGjakhFI","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"It was Morgan Stanley's system that Arthur Whitney developed before K and Q","msgtype":"m.text"}}
                    {"origin_server_ts":1704478047227,"event_id":"$kVa6XJdxXlomRfCR1KKWyAWlJemkMwVnffZQ3v-sWn0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, my plans for the reporting tool is to be able to do live graphical views of data. I've actually already gotten that to work when integrates with a trading system, and having it update financial positions in realtime.","msgtype":"m.text"}}
                    {"origin_server_ts":1704478062015,"event_id":"$9sVvI7akTBznhM-qO2aDXvmG1eWYC8e1y_XOjcFfzvk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Yeah, my plans for the reporting tool is to be able to do live graphical views of data. I've actually already gotten that to work when integrated with a trading system, and having it update financial positions in realtime.","msgtype":"m.text"},"m.relates_to":{"event_id":"$kVa6XJdxXlomRfCR1KKWyAWlJemkMwVnffZQ3v-sWn0","rel_type":"m.replace"},"m.mentions":{},"body":" * Yeah, my plans for the reporting tool is to be able to do live graphical views of data. I've actually already gotten that to work when integrated with a trading system, and having it update financial positions in realtime.","msgtype":"m.text"}}
                    {"origin_server_ts":1704478176695,"event_id":"$F9z4QUL7_er0g4taz9IroiF_FWBOz69SFP63GiMl0kE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$kVa6XJdxXlomRfCR1KKWyAWlJemkMwVnffZQ3v-sWn0","rel_type":"m.annotation","key":"😎"}}}
                    {"origin_server_ts":1704478254944,"event_id":"$jlPuQwP6shkezEWHvqmePus2B4II-vsfama8aN4mA54","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"Yeah thats the use case I was thinking of first","msgtype":"m.text"}}
                    {"origin_server_ts":1704478309820,"event_id":"$-iR1l0L4rnvAjs-D4r6Y5oUSoDntkM42y9wsxEUtb74","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"If there's real time updates, then it can do animation, which means demos 👽","msgtype":"m.text"}}
                    {"origin_server_ts":1704478617676,"event_id":"$Xe6cvwcSlJA2l2e-n9Ay6FCPpSTsvRSLRFUlKOKW5GM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"There may be something interesting here: https://peertube.functional.cafe/w/6MQySAaRL9LRcARBK2HxS3","msgtype":"m.text"}}
                    {"origin_server_ts":1704478698975,"event_id":"$jP8HE4zX3ZI9mpQJXU8vfwWRx85uXAP_C2iI1dA62Is","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"And this (this is the first prototype, it's much better now): https://peertube.functional.cafe/w/fMTTx1UQkva1QcAfGGKDQz","msgtype":"m.text"}}
                    {"origin_server_ts":1704478888132,"event_id":"$-eGJDuKJAIHwFEEL6TNGv1ZNQb2vCDX-WfZ2s483QSA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$jP8HE4zX3ZI9mpQJXU8vfwWRx85uXAP_C2iI1dA62Is","rel_type":"m.annotation","key":"😎"}}}
                    {"origin_server_ts":1704478956052,"event_id":"$-slUrOME-eSaU4EnOCNtcOUF2-cjnEVARdOUUK2qS9c","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"That makes me think that KAP could replace R even more","msgtype":"m.text"}}
                    {"origin_server_ts":1704479001767,"event_id":"$xlcSj3kzUTWa1yppuoCqXti9W3l2K3Qgl7hPThR862A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It needs more statistics functions though.","msgtype":"m.text"}}
                    {"origin_server_ts":1704479069234,"event_id":"$q9q_lcSqllXvA9znzTKI7i4N0wy-6fjZJ4ZnI7HuERw","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"Yeah, getting there","msgtype":"m.text"}}
                    {"origin_server_ts":1704527159826,"event_id":"$SJo5b5doDM9BuQt02D-FkK9QNNCCsK1AjOy6Z149yEA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Do you think a live connection with Libreoffice Calc would be useful?","msgtype":"m.text"}}
                    {"origin_server_ts":1704527189046,"event_id":"$ALz7rlAR08yPWYTe6K51R8aa5SZifIJeaz9wo1GmYNM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I could do Office 365 too.","msgtype":"m.text"}}
                    {"origin_server_ts":1704543579570,"event_id":"$NY2lD0GIWxX445mrYgjp79hiphJL8-ohYFRIJZilecU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"that would be something at least :D would need some kind of documentation as to how it would work","msgtype":"m.text"}}
                    {"origin_server_ts":1704543593735,"event_id":"$ykWbR1TrdlK6kYVAMdEYXjaastsFXA6u2VhLU_7_OLo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"an article on medium.com ","msgtype":"m.text"}}
                    {"origin_server_ts":1704544246754,"event_id":"$-Ww1Dt76PtpyY0QHButMlUMcBzgVfPXq0nP6i54_05A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I've been looking at the Libreoffice API today.","msgtype":"m.text"}}
                    {"origin_server_ts":1704544290209,"event_id":"$jCBoWoS-iXScH3oQ3QpyXwF6l8eaO5mlKq67AjnNEFc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's incredibly powerful, and I hate to say it, but it appears harder to gget going than when using the OLE API in MS Office.","msgtype":"m.text"}}
                    {"origin_server_ts":1704544306177,"event_id":"$FK6L2VLxubXbltsOLQN83S7J6EK25fZh3qIFdPz7W7A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I really, really, hate microsoft, so this isn't easy to admit :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1704544319700,"event_id":"$bnkYfPALByeLxybO92o7s1B63hLeXvUe9NBTgeLd-8U","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye :D ","msgtype":"m.text"}}
                    {"origin_server_ts":1704544334278,"event_id":"$gYGg0KcNPKaz3T0RrOfJTO__U7z8gRq_iFUiHLYMtbs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"It's incredibly powerful, and I hate to say it, but it appears harder to get going than when using the OLE API in MS Office.","msgtype":"m.text"},"m.relates_to":{"event_id":"$jCBoWoS-iXScH3oQ3QpyXwF6l8eaO5mlKq67AjnNEFc","rel_type":"m.replace"},"m.mentions":{},"body":" * It's incredibly powerful, and I hate to say it, but it appears harder to get going than when using the OLE API in MS Office.","msgtype":"m.text"}}
                    {"origin_server_ts":1704544354101,"event_id":"$clzln3UjLVlL0pNGmC4dQbdNy1LCm62JKuN4y7OY-WA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I like libreoffice so I would use that one","msgtype":"m.text"}}
                    {"origin_server_ts":1704544380320,"event_id":"$ZA-nX-NSMdBP4jP2u_OBCyqBMg79vcJYpnKqD9r_ppo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"writing documents with LaTeX anyway","msgtype":"m.text"}}
                    {"origin_server_ts":1704547470628,"event_id":"$yT_Lso_Tw-Lw85MVpr3-32362cDUhZX3_9Y5oMFWyOg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Woah... I actually managed to get a connection to the libreoffice instance now... Perhaps it's easier than I thought.","msgtype":"m.text"}}
                    {"origin_server_ts":1704547493302,"event_id":"$ILWyiyv3Gp93GPO2-6qajuXq2l001e9CMCK793WX-OM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I skipped 99% of the steps mentioned in the tutorial and it just works out of the box :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1704547868321,"event_id":"$DG0bNOtrg5SAV2gSUwV6eicWbiUsjhe58OtDBykKHes","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, that's funny... Or not, depending on your definition of enjoyment.","msgtype":"m.text"}}
                    {"origin_server_ts":1704547887595,"event_id":"$PWpJczBl6rSv2aSHkk4AfrIpQMX-g8T0WTU4g8b1SQw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I managed to connect to the libreoffice instance, it opened aspreadsheet and then this happened:\n```\nCE> Unspecified Application Error\nCE> \nCE> \nCE> Fatal exception: Signal 6\nCE> Stack:\nCE> /usr/lib64/libreoffice/program/libuno_sal.so.3(+0x41d58)[0x7f6589e1ed58]\nCE> /usr/lib64/libreoffice/program/libuno_sal.so.3(+0x41f62)[0x7f6589e1ef62]\nCE> /lib64/libc.so.6(+0x3e9a0)[0x7f6589b219a0]\nCE> /lib64/libc.so.6(+0x90834)[0x7f6589b73834]\nCE> /lib64/libc.so.6(raise+0x1e)[0x7f6589b218ee]\nCE> /lib64/libc.so.6(abort+0xdf)[0x7f6589b098ff]\nCE> /usr/lib64/libreoffice/program/libvcllo.so(+0x35f819)[0x7f6585d5f819]\nCE> /usr/lib64/libreoffice/program/libsofficeapp.so(+0x3f692)[0x7f6589d2f692]\nCE> /usr/lib64/libreoffice/program/libvcllo.so(+0x76bd3d)[0x7f658616bd3d]\nCE> /usr/lib64/libreoffice/program/libuno_sal.so.3(+0x41e9a)[0x7f6589e1ee9a]\nCE> /lib64/libc.so.6(+0x3e9a0)[0x7f6589b219a0]\nCE> /lib64/libQt5Core.so.5(_ZNK17QVariantAnimation10keyValueAtEd+0x10)[0x7f6572ce00f0]\nCE> /lib64/libQt5Core.so.5(_ZNK17QVariantAnimation8endValueEv+0x2c)[0x7f6572ce01ac]\nCE> /lib64/libQt5Widgets.so.5(+0x2a952c)[0x7f65726a952c]\nCE> /lib64/libQt5Widgets.so.5(+0x2e9c80)[0x7f65726e9c80]\nCE> /lib64/libQt5Widgets.so.5(+0x31b323)[0x7f657271b323]\nCE> /lib64/libQt5Widgets.so.5(+0x3210eb)[0x7f65727210eb]\nCE> /lib64/libQt5Widgets.so.5(_ZN14QLayoutPrivate8doResizeEv+0x139)[0x7f65725cf5f9]\nCE> /lib64/libQt5Widgets.so.5(_ZN7QLayout8activateEv+0x107)[0x7f65725d0b07]\nCE> /lib64/libQt5Widgets.so.5(_ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent+0x6a)[0x7f65725aeb5a]\nCE> /lib64/libQt5Core.so.5(_ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent+0x128)[0x7f6572eb4598]\nCE> /lib64/libQt5Core.so.5(_ZN23QCoreApplicationPrivate16sendPostedEventsEP7QObjectiP11QThreadData+0x185)[0x7f6572eb7a45]\nCE> /lib64/libQt5Core.so.5(+0x306fef)[0x7f6572f06fef]\nCE> /lib64/libglib-2.0.so.0(+0x5be5c)[0x7f65827f6e5c]\nCE> /lib64/libglib-2.0.so.0(+0xb6f18)[0x7f6582851f18]\nCE> /lib64/libglib-2.0.so.0(g_main_context_iteration+0x33)[0x7f65827f4ad3]\nCE> /lib64/libQt5Core.so.5(_ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE+0x69)[0x7f6572f06ad9]\nCE> /usr/lib64/libreoffice/program/libvclplug_qt5lo.so(_ZN10QtInstance9ImplYieldEbb+0xab)[0x7f6572bc313b]\nCE> /usr/lib64/libreoffice/program/libvclplug_qt5lo.so(_ZN10QtInstance7DoYieldEbb+0xae)[0x7f6572bc322e]\nCE> /usr/lib64/libreoffice/program/libvcllo.so(+0x75c78c)[0x7f658615c78c]\nCE> /usr/lib64/libreoffice/program/libvcllo.so(_ZN11Application7ExecuteEv+0x75)[0x7f658615c945]\nCE> /usr/lib64/libreoffice/program/libsofficeapp.so(+0x4575c)[0x7f6589d3575c]\nCE> /usr/lib64/libreoffice/program/libvcllo.so(_Z10ImplSVMainv+0x36a)[0x7f658616f22a]\nCE> /usr/lib64/libreoffice/program/libsofficeapp.so(soffice_main+0x138)[0x7f6589d4f348]\nCE> /usr/lib64/libreoffice/program/soffice.bin(+0x10c7)[0x560185c3d0c7]\nCE> /lib64/libc.so.6(+0x2814a)[0x7f6589b0b14a]\nCE> /lib64/libc.so.6(__libc_start_main+0x8b)[0x7f6589b0b20b]\nCE> /usr/lib64/libreoffice/program/soffice.bin(+0x1105)[0x560185c3d105]\n```","msgtype":"m.text","formatted_body":"

                    I managed to connect to the libreoffice instance, it opened aspreadsheet and then this happened:<\/p>\n

                    CE> Unspecified Application Error\nCE> \nCE> \nCE> Fatal exception: Signal 6\nCE> Stack:\nCE> /usr/lib64/libreoffice/program/libuno_sal.so.3(+0x41d58)[0x7f6589e1ed58]\nCE> /usr/lib64/libreoffice/program/libuno_sal.so.3(+0x41f62)[0x7f6589e1ef62]\nCE> /lib64/libc.so.6(+0x3e9a0)[0x7f6589b219a0]\nCE> /lib64/libc.so.6(+0x90834)[0x7f6589b73834]\nCE> /lib64/libc.so.6(raise+0x1e)[0x7f6589b218ee]\nCE> /lib64/libc.so.6(abort+0xdf)[0x7f6589b098ff]\nCE> /usr/lib64/libreoffice/program/libvcllo.so(+0x35f819)[0x7f6585d5f819]\nCE> /usr/lib64/libreoffice/program/libsofficeapp.so(+0x3f692)[0x7f6589d2f692]\nCE> /usr/lib64/libreoffice/program/libvcllo.so(+0x76bd3d)[0x7f658616bd3d]\nCE> /usr/lib64/libreoffice/program/libuno_sal.so.3(+0x41e9a)[0x7f6589e1ee9a]\nCE> /lib64/libc.so.6(+0x3e9a0)[0x7f6589b219a0]\nCE> /lib64/libQt5Core.so.5(_ZNK17QVariantAnimation10keyValueAtEd+0x10)[0x7f6572ce00f0]\nCE> /lib64/libQt5Core.so.5(_ZNK17QVariantAnimation8endValueEv+0x2c)[0x7f6572ce01ac]\nCE> /lib64/libQt5Widgets.so.5(+0x2a952c)[0x7f65726a952c]\nCE> /lib64/libQt5Widgets.so.5(+0x2e9c80)[0x7f65726e9c80]\nCE> /lib64/libQt5Widgets.so.5(+0x31b323)[0x7f657271b323]\nCE> /lib64/libQt5Widgets.so.5(+0x3210eb)[0x7f65727210eb]\nCE> /lib64/libQt5Widgets.so.5(_ZN14QLayoutPrivate8doResizeEv+0x139)[0x7f65725cf5f9]\nCE> /lib64/libQt5Widgets.so.5(_ZN7QLayout8activateEv+0x107)[0x7f65725d0b07]\nCE> /lib64/libQt5Widgets.so.5(_ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent+0x6a)[0x7f65725aeb5a]\nCE> /lib64/libQt5Core.so.5(_ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent+0x128)[0x7f6572eb4598]\nCE> /lib64/libQt5Core.so.5(_ZN23QCoreApplicationPrivate16sendPostedEventsEP7QObjectiP11QThreadData+0x185)[0x7f6572eb7a45]\nCE> /lib64/libQt5Core.so.5(+0x306fef)[0x7f6572f06fef]\nCE> /lib64/libglib-2.0.so.0(+0x5be5c)[0x7f65827f6e5c]\nCE> /lib64/libglib-2.0.so.0(+0xb6f18)[0x7f6582851f18]\nCE> /lib64/libglib-2.0.so.0(g_main_context_iteration+0x33)[0x7f65827f4ad3]\nCE> /lib64/libQt5Core.so.5(_ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE+0x69)[0x7f6572f06ad9]\nCE> /usr/lib64/libreoffice/program/libvclplug_qt5lo.so(_ZN10QtInstance9ImplYieldEbb+0xab)[0x7f6572bc313b]\nCE> /usr/lib64/libreoffice/program/libvclplug_qt5lo.so(_ZN10QtInstance7DoYieldEbb+0xae)[0x7f6572bc322e]\nCE> /usr/lib64/libreoffice/program/libvcllo.so(+0x75c78c)[0x7f658615c78c]\nCE> /usr/lib64/libreoffice/program/libvcllo.so(_ZN11Application7ExecuteEv+0x75)[0x7f658615c945]\nCE> /usr/lib64/libreoffice/program/libsofficeapp.so(+0x4575c)[0x7f6589d3575c]\nCE> /usr/lib64/libreoffice/program/libvcllo.so(_Z10ImplSVMainv+0x36a)[0x7f658616f22a]\nCE> /usr/lib64/libreoffice/program/libsofficeapp.so(soffice_main+0x138)[0x7f6589d4f348]\nCE> /usr/lib64/libreoffice/program/soffice.bin(+0x10c7)[0x560185c3d0c7]\nCE> /lib64/libc.so.6(+0x2814a)[0x7f6589b0b14a]\nCE> /lib64/libc.so.6(__libc_start_main+0x8b)[0x7f6589b0b20b]\nCE> /usr/lib64/libreoffice/program/soffice.bin(+0x1105)[0x560185c3d105]\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1704548378585,"event_id":"$TJVZg42mPQKgRW9abHm_4G3SaB0qcrdp3lrYZm0FQCc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$PWpJczBl6rSv2aSHkk4AfrIpQMX-g8T0WTU4g8b1SQw","rel_type":"m.annotation","key":"😭"}}}
                    {"origin_server_ts":1704548387303,"event_id":"$ACfVR17YHFvxvz-IMul87aINWky7XVfD5AyDqjww2g0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"breaking down :o ","msgtype":"m.text"}}
                    {"origin_server_ts":1704548421367,"event_id":"$A1hWpA5lb_5KR8ehgD5HU2t4BA9qv9jsTQWW3-Ek7KM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"maybe skipping the steps caused that","msgtype":"m.text"}}
                    {"origin_server_ts":1704550102833,"event_id":"$EUnKgFP8l5JN04OZmtld-P4SLUd-yduP6E6YV9vf1Wg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Possibly, unless I missed something. All that extra work was about setting up the development environment to run their example code.","msgtype":"m.text"}}
                    {"origin_server_ts":1704617354519,"event_id":"$AW0tmPOj63SoZ4_tFups-mrrthPvjdh6KmUaA-zMfME","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Ohh... It works now.","msgtype":"m.text"}}
                    {"origin_server_ts":1704617763508,"event_id":"$nhWFTjnAhlabTwHCfBg85okOMBR6eMMvlFkrG9vG5UY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The API is painful to use though.","msgtype":"m.text"}}
                    {"origin_server_ts":1704816163719,"event_id":"$Cw8k-Ro86Qc6DzxIIm2sotQ6pBcE6yzWNGPRV9uA-x8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, now I implemented something I should have done long ago: Drag&drop and pasting of both excel and also libreoffice documents works in the array editor.","msgtype":"m.text"}}
                    {"origin_server_ts":1704816263001,"event_id":"$oHyEDbRseuzFQHwmfGWjoXTSmL3P1pTtStYtiXpXDMc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I realised that libreoffice creates a literal ODS document and put it on the cut buffer when pasting, so all I had to do was to use the opendocument library to pasre it, and now it preserves all datatypes instead of me having to do heuristics when parsing the HTML version of the content.","msgtype":"m.text"}}
                    {"origin_server_ts":1704816295366,"event_id":"$m91_WU5DMhxSIO1-aKur6LNTjYOwTkSmAIlP_KzPblg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$Cw8k-Ro86Qc6DzxIIm2sotQ6pBcE6yzWNGPRV9uA-x8","rel_type":"m.annotation","key":"😎"}}}
                    {"origin_server_ts":1704816359264,"event_id":"$2Ic5yKk7unzyckj6rg72iNmsoCxqRYhldrj3mk5xpvQ","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"how does manipulating the data work?","msgtype":"m.text"}}
                    {"origin_server_ts":1704816393722,"event_id":"$dhVDbW3te2hIT-KScEwQV0vWZEua0lrr4y7uZm0m6RY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I consider it hugely important that it be easy to get data in and out of the tool. I guess this came from my struggles with this back when I used GNU APL a lot. Its IO capabilities are quite difficult to work with.","msgtype":"m.text"}}
                    {"origin_server_ts":1704816444546,"event_id":"$QYsyt9xjdsw85EyOtM62LGKA9ozP_imXqGfAQuULibQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's like a spreadsheet. Open the array editor and choose File->Open","msgtype":"m.text"}}
                    {"origin_server_ts":1704816456891,"event_id":"$cdL14dzdpT07KY4kwMCaiRyGJhMuNIMT8cFAOcfkcM4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Then you can open CSV, Libreoffice or Excel files from there.","msgtype":"m.text"}}
                    {"origin_server_ts":1704816468676,"event_id":"$KvQFu4HeKKsa-c_OIkCzHlIB8yCK-IydTNeyyblQhlA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"You can also drag the files into the editor.","msgtype":"m.text"}}
                    {"origin_server_ts":1704816490928,"event_id":"$twH5ZcNbI_KvO4sqVJDA5abrchR63IvI3L-IRLbxYdI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Then you can type a variable name in the box on top and press \"put\" which stores the array in a variable with that name.","msgtype":"m.text"}}
                    {"origin_server_ts":1704816509910,"event_id":"$_5TYTx05TuaMV80alo1WecRwMkLdnlyGAs-_C5mr_oY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ah ok","msgtype":"m.text"}}
                    {"origin_server_ts":1704816514579,"event_id":"$FP8d6anS9Pt6N2sOe1j1HHF0hQf6bazywDtcAuKhlts","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"need to try it out","msgtype":"m.text"}}
                    {"origin_server_ts":1704816513929,"event_id":"$pqWT4agcA-kKHptpUUTEMbylgwkKdJf81nEvDYViBoM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"You can also right-click on an array result in the repl and select \"open array editor\"","msgtype":"m.text"}}
                    {"origin_server_ts":1704816537633,"event_id":"$wALjdgrOlQpssDcn4NYYu_KpWEBhCGB1e_SezONybv8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It even works with higher-dimension arrays (you can pick which layer to edit in the selector on top)","msgtype":"m.text"}}
                    {"origin_server_ts":1704816585019,"event_id":"$jFBST3ARPnXj2WX4hlSz1wtkcG2trmXOxkXekomlKR0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"This is a very early video when the feature was new: https://peertube.functional.cafe/w/qYxcS7PuXMgMASC8WgoJbb","msgtype":"m.text"}}
                    {"origin_server_ts":1704816594016,"event_id":"$zKcLzN0hzhDjnGA3Cz-mYujswAF-KkqN34btSB0rvP0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's better now.","msgtype":"m.text"}}
                    {"origin_server_ts":1704816690669,"event_id":"$-d6hjbNQdf5iKF1wjSyDrSTLpcYmF-hNMowI0wM6Tzw","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ok so you select the cells first and then perform an operation on them","msgtype":"m.text"}}
                    {"origin_server_ts":1704816715606,"event_id":"$lEMP06PM2IiY1ADgje0tVXIAMtiENCWrkTxOR-j8lGU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Roght","msgtype":"m.text"}}
                    {"origin_server_ts":1704816722844,"event_id":"$HH3mXBeRmM4NI565e_2ccp-cwKbi_AL9OBkJkV6S1Xo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Right","msgtype":"m.text"},"m.relates_to":{"event_id":"$lEMP06PM2IiY1ADgje0tVXIAMtiENCWrkTxOR-j8lGU","rel_type":"m.replace"},"body":"* Right","msgtype":"m.text"}}
                    {"origin_server_ts":1704816753595,"event_id":"$j7wvTl2um_2qEJVx3Hd2p-gFaBMjQlVQ2SPpx5DDD9k","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"how about if you are writing a function yourself, can you refer table rows or columns in that? or do you just write the function to that selection box","msgtype":"m.text"}}
                    {"origin_server_ts":1704816787417,"event_id":"$bNcxF64d2ve3z1kDusEClZVatsgTHIiEj-P-y-_w1dQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You can't put functions in cells","msgtype":"m.text"}}
                    {"origin_server_ts":1704816844135,"event_id":"$MhxgeEDp1xqu0Z3gF0z15bIQHRSAFnADfenGodRZILg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ok well how about a linear regression with some data you have in a spreadsheet? ","msgtype":"m.text"}}
                    {"origin_server_ts":1704816891167,"event_id":"$4JRud536RyU9m36VnPurkMQ3A9HJSgdLEQ20CcP2cIY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's still an apl","msgtype":"m.text"}}
                    {"origin_server_ts":1704816911785,"event_id":"$RwB_J0uMOU9iHx0Il0Og66K3w5ctRzHFG9ZSzU1FlFw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You are supposed to do those things in the language 😀","msgtype":"m.text"}}
                    {"origin_server_ts":1704816920437,"event_id":"$O3jGZH_mlppoALNaaKzOnWEAw9VkL3XeZeYcKn0cjJ4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"oh yeah the \"put\" thing","msgtype":"m.text"}}
                    {"origin_server_ts":1704816935591,"event_id":"$tmpPndAZ8CDxVQ_FH_y_R9c_cXsLplu9O5JXGCoTn2E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But you can of course feed the interpreter with data from a spreadsheet ","msgtype":"m.text"}}
                    {"origin_server_ts":1704816954537,"event_id":"$rfHjNMf3bWG5_IWrYPS9ZSCYx_svC6ze5cwtp085q7Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I also want to add support for realtime links","msgtype":"m.text"}}
                    {"origin_server_ts":1704817037883,"event_id":"$iGFjVNmTZlEYgoq3MV1zGgocWfkllTscGdzNSeSCl-U","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye I found some econometric paper that did a linear regression with APL, could try it out with that","msgtype":"m.text"}}
                    {"origin_server_ts":1704819329904,"event_id":"$Ny2vnjpfYGzbMBl-HhjzIeLOYUE__42gpR_NykCgr0w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: perhaps it should be possible to add Kap function to a menu, or the toolbar, in the array editor.","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: perhaps it should be possible to add Kap function to a menu, or the toolbar, in the array editor."}}
                    {"origin_server_ts":1704819355079,"event_id":"$RTaxOaJQmyraNQD1O0_s8UtINlQQHMliGE2bk_XWLYs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Then you can write your LR function once, and add it to the toolbar. Then you can run it by clicking on a button.","msgtype":"m.text"}}
                    {"origin_server_ts":1704819363015,"event_id":"$rc5Wej89E-rxLxNgI1qmSr46-ReFFR3h0w_dbCpZS20","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: perhaps it should be possible to add a Kap function to a menu, or the toolbar, in the array editor.","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: perhaps it should be possible to add a Kap function to a menu, or the toolbar, in the array editor."},"m.relates_to":{"event_id":"$Ny2vnjpfYGzbMBl-HhjzIeLOYUE__42gpR_NykCgr0w","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * sienet_ja_LSD: perhaps it should be possible to add a Kap function to a menu, or the toolbar, in the array editor.","msgtype":"m.text","formatted_body":" * sienet_ja_LSD<\/a>: perhaps it should be possible to add a Kap function to a menu, or the toolbar, in the array editor."}}
                    {"origin_server_ts":1704842073544,"event_id":"$6CvLQDmFDdqj3ja5xZgFiCOtWLK57xCOE6TKGXm2_0I","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"loke  I am having trouble messaging you","msgtype":"m.text","formatted_body":"loke<\/a>  I am having trouble messaging you"}}
                    {"origin_server_ts":1704842899857,"event_id":"$toYLVI_8v2xVGdlgVmilYW6GNKsnCAeNDIMzdcfVHxM","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"nevermind","msgtype":"m.text"}}
                    {"origin_server_ts":1704842901205,"event_id":"$yuYkiPEoZmi0tCOY_DpqLhOwlDNyLAdAB1jjmYdbLQU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"it is ok","msgtype":"m.text"}}
                    {"origin_server_ts":1704842965491,"event_id":"$As1DGts5EAhnEDC4_aaY_cjahUeKzGlfs3t6uijaIxA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I saw it.","msgtype":"m.text"}}
                    {"origin_server_ts":1704842974142,"event_id":"$a5ifxXLG86u2rFZPWN_P5fkkq4F6QN-y5tpgLpF85DU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I was asleep 😀","msgtype":"m.text"}}
                    {"origin_server_ts":1704843080457,"event_id":"$QAb75ZlWdFvcZ5p7dYTfuOyq1C1fx6l-4Wmg3O7eS3U","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"You slept very little!","msgtype":"m.text"}}
                    {"origin_server_ts":1704843088293,"event_id":"$UMLdDdhs96NaTlwl3Zqwbno9mTlm3UmfKdBFJExlfWw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I know.","msgtype":"m.text"}}
                    {"origin_server_ts":1704843090593,"event_id":"$Ozx21zv_v5QoQutDwL6vAR8Ukphf6Q3AAxpmacwGqz8","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"but I'm happy to say that it works","msgtype":"m.text"}}
                    {"origin_server_ts":1704843096837,"event_id":"$uaVPJ70NOVwikuW8V9_19W7gVr6Y9TwkC-s_204h7Fg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"please get the rest you need if you can","msgtype":"m.text"}}
                    {"origin_server_ts":1704843109843,"event_id":"$1gDkAa81TN2PAa7gwJtEzYQboOpOm5X2KxI_Kmuibqg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I had to drive my kid to school because it's raining very heavily","msgtype":"m.text"}}
                    {"origin_server_ts":1704843119193,"event_id":"$_F63jIXnG1q_Wrm4L9SvLOyK3_Da2Ovc611NuWfQzmI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"parenting!","msgtype":"m.text"}}
                    {"origin_server_ts":1704843138946,"event_id":"$c1HOddyiW_vHT5wAeM9nwLkA7FprG7gIRFA1meZE4Kc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"helping your child escape the rain? parenting level 1000","msgtype":"m.text"}}
                    {"origin_server_ts":1704843180808,"event_id":"$eHAb3096CwxwaL9mKTpWq6QRYOYN6qULato10Ciu-UE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"since you're here, were you able to write a formatting function in the standard library?","msgtype":"m.text"}}
                    {"origin_server_ts":1704843251869,"event_id":"$UV5b3wB-CcqgxUAC0U0EouhpwIqoOlLCsB3tRQX001A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What do you mean?","msgtype":"m.text"}}
                    {"origin_server_ts":1704843264563,"event_id":"$MpEcleYGwUatucr24V70AzguLFfr4UjSwEg4ahFvkSE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The default one is in the standard library ","msgtype":"m.text"}}
                    {"origin_server_ts":1704843280675,"event_id":"$7VqsvEIDSdkX_UrTYURjeKK7qvz_AnPHzvtC9t6bwuE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"well, io:println is able to print all sorts of types, but I mean a pretty-printer","msgtype":"m.text"}}
                    {"origin_server_ts":1704843298348,"event_id":"$vxvyoeBDwAQdOKznZo4cLqiWDolDN4cv5BN-LOnCP-8","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"cuz atm io:println just prints lists as one contiguous list of numbers","msgtype":"m.text"}}
                    {"origin_server_ts":1704843310823,"event_id":"$Xd5TaRDPZXYjlGujjUxexSdq9UdLar--TR42UFHC3aE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"pretty printer/boxer I guess that would be called","msgtype":"m.text"}}
                    {"origin_server_ts":1704843333820,"event_id":"$1eGYt_agYgy1uB0CE6JxcTqNVCSuhUyFB-oj5rRaBzg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"if not, I'll probably be able to try to write one (as I do owe you from last time)","msgtype":"m.text"}}
                    {"origin_server_ts":1704843491564,"event_id":"$XOuNYlvbb-zqRvMwJLqk2-5Qq9qVsTADxyF6zQ-1Md8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You can use: io:print o3:format x","msgtype":"m.text"}}
                    {"origin_server_ts":1704843519295,"event_id":"$4uE_OzcjVGFuSqcLq3Ai85uUTOOPQyS4jf2dRyoavaw","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"o3??","msgtype":"m.text"}}
                    {"origin_server_ts":1704843525322,"event_id":"$QCrXGPW8AtWMxfR5nFOjJolO4OxPaJFtUQlA1w5eJNk","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"that's an interesting namespace name","msgtype":"m.text"}}
                    {"origin_server_ts":1704843531250,"event_id":"$4kY4a16r_ql1IilaTFwwYpTxPUC0YOzcmzVK8DZBexs","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"but it works well","msgtype":"m.text"}}
                    {"origin_server_ts":1704843533709,"event_id":"$jpYWqlcjCfVNbt1ZlneR9jtmbK1qeHnBPGoFxFiTlnI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"triple thumbs up","msgtype":"m.text"}}
                    {"origin_server_ts":1704843542120,"event_id":"$jSDH-5gKqKr5eFNtazyH-6uhJC4BNbTdb2EmkcCnH9U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It means it's my third attempt of writing one","msgtype":"m.text"}}
                    {"origin_server_ts":1704843547750,"event_id":"$Vs5zJnAqwQQjrTgkFvYfA2-aSO74_AsHM0B8RQLyBvA","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"XD","msgtype":"m.text"}}
                    {"origin_server_ts":1704843557428,"event_id":"$oS1FLp3CDKSZ4308vKW6KK0ppfiOKSwkTNz-1QwRr8Y","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Where is the empty space rn","msgtype":"m.text"}}
                    {"origin_server_ts":1704843559668,"event_id":"$hCq5IEYw4w-5zERMxnX1K3YOD7wxjYMRvLYX1xKP5Dc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"like","msgtype":"m.text"}}
                    {"origin_server_ts":1704843565911,"event_id":"$V8JRBDE4aXPJPBFfxIv_xl4jkDcs7UT5zbxAvzhMLus","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"where can development be continuing I mean","msgtype":"m.text"}}
                    {"origin_server_ts":1704843595321,"event_id":"$Q3IcLFSLFQh-L1MkCzBnKHpceEi4mRgVNaclY2hWh00","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'm gonna practice some KAP and hopefully make it my primary, maybe even in place of BQN if I get good enough at it","msgtype":"m.text"}}
                    {"origin_server_ts":1704844273925,"event_id":"$-3bjpQiA-zUAKQ3Y4kWIobOvcMVUesOZS2EIca0WW0c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The standard library needs a lot more work. The io api needs to be expanded. There is also need for a networking api beyond the http stuff.","msgtype":"m.text"}}
                    {"origin_server_ts":1704844300745,"event_id":"$w-8OVsqrRt3QtCgq6QBKLOAtWBs6UwrAmAyXIWyCPE4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm also working on an object system modeled on CLOS","msgtype":"m.text"}}
                    {"origin_server_ts":1704844306261,"event_id":"$qEyeWFIJ5yUMtgVHdLcBqNWh7o2EalgEHHNSTZvH62U","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"CLOS?","msgtype":"m.text"}}
                    {"origin_server_ts":1704844309501,"event_id":"$W1hP59w4_MbTcj4g1iR2iuO9at2rZTfLv5BeVb4o_MI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"dang","msgtype":"m.text"}}
                    {"origin_server_ts":1704844316866,"event_id":"$NXWhspARF3Dw7TW-AJYO2L6Q4JzUSjWQ_oK2mx8l5iU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Common lisp object system","msgtype":"m.text"}}
                    {"origin_server_ts":1704844320409,"event_id":"$7c0L05gn-BrzBCoJWLRHuqoM5tJ8smegoKLlO24RRYw","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I look forward to that","msgtype":"m.text"}}
                    {"origin_server_ts":1704844332894,"event_id":"$uOqaPpm3sLAOKwyYi3p6IWHdZquhDJPWvilplEa4Hdg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yeah, I don't know enough about CLOS tho","msgtype":"m.text"}}
                    {"origin_server_ts":1704844336447,"event_id":"$L8p-mbWaLtJLPtAdh5lnFIRUBj39xo7VpjaltvFFjag","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'll be down to learn it!","msgtype":"m.text"}}
                    {"origin_server_ts":1704844346359,"event_id":"$02PHHOqldds9c3RcrWRtgjyAZ9XKGp9ipkUF8z8V8Co","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"anyway, I'll take a look at what's in the standard library","msgtype":"m.text"}}
                    {"origin_server_ts":1704844350728,"event_id":"$Y-l-gx0oAP3ND4N34lEW4cTHmDbCeeV9YziBsrkSuAw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I need better graphics support too","msgtype":"m.text"}}
                    {"origin_server_ts":1704844378751,"event_id":"$umC6ZmTOyhtFoQ32aCUfGos3XBFFUTvkoxQK0zJre-4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Not much so far. There is SQL, some regexp and some other things. ","msgtype":"m.text"}}
                    {"origin_server_ts":1704844381042,"event_id":"$eJ2i2FWV22OSjRRE3zMTLOUTrhLink2e-yVxbGuICwE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"is the kap std in a separate repo?","msgtype":"m.text"}}
                    {"origin_server_ts":1704844386011,"event_id":"$jVoCmPtviWsFBB7xVmBMsXBJHACekLa9vif354hZvJw","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"also wdym by graphics support","msgtype":"m.text"}}
                    {"origin_server_ts":1704844395582,"event_id":"$xh_hG1hLEKaw1BtDeeAKtZXSjS1cPcnz55tL37KJkwQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No. It's baked into the system. ","msgtype":"m.text"}}
                    {"origin_server_ts":1704844410467,"event_id":"$nPWtp-zJJ58gEZciUsBSU_1nuG868l4PaGGUdF97ElA","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"oh, like straight into the interpreter","msgtype":"m.text"}}
                    {"origin_server_ts":1704844412446,"event_id":"$psUlhxGzBOtsgoQo6jJOfTyIzMQPDT_UpARFNm2MwSI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"fair","msgtype":"m.text"}}
                    {"origin_server_ts":1704844419202,"event_id":"$Wgb33OrH14NHlARw7jL9TkM3MT81hqRrNZhS0vy8p6I","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'll take a look at it, ","msgtype":"m.text"}}
                    {"origin_server_ts":1704844425251,"event_id":"$I4edMpCx10GVVRgvu-AXEXHACJuTcxuvAYrpvfu8q0k","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yeah, I'll take a look at it","msgtype":"m.text"}}
                    {"origin_server_ts":1704844434859,"event_id":"$bsSCJECRXK_DYA28DuLba5Y8bletEao9KXU2Rw4QVMQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"probably it's going to be quite opaque until I figure out KAP in general lol","msgtype":"m.text"}}
                    {"origin_server_ts":1704844486706,"event_id":"$CtENHyYUUF3hpvi4UXRSwMRVFFZTI2PQtNbn79bHWz4","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Thanks for the pointers","msgtype":"m.text"}}
                    {"origin_server_ts":1704844490499,"event_id":"$UO-tHw0-2mNqYBkiPrEnsvfOKNa5WmxQxTJmXOcwQnc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"haha get it pointers haha that's funny","msgtype":"m.text"}}
                    {"origin_server_ts":1704884559912,"event_id":"$WdI5dNDLEfgtrQ_rQ16pjXKDdbCLzavkJx58YEcA1DE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$Ny2vnjpfYGzbMBl-HhjzIeLOYUE__42gpR_NykCgr0w","rel_type":"m.annotation","key":"👍"}}}
                    {"origin_server_ts":1704884687850,"event_id":"$ihr3Pf0KZzK-1mkNTGC5EDbZVBX_YZeiHBqhyzAth04","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$UO-tHw0-2mNqYBkiPrEnsvfOKNa5WmxQxTJmXOcwQnc","rel_type":"m.annotation","key":"😄"}}}
                    {"origin_server_ts":1704903701627,"event_id":"$AQmRL4rnC-aVpAorqkLBXzv7LWGvLDqbKJ_cvx7Iig4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I fixed something I should I have done long ago. When you do a select from a database table, it sets the column labels of the result:\n```\n    c sql:update \"insert into foo (id, name, size) values (1, 'abc', 25)\"\n1\n    c sql:update \"insert into foo (id, name, size) values (2, 'test', 10)\"\n1\n    c sql:update \"insert into foo (id, name, size) values (3, 'a string', 1000)\"\n1\n    c sql:query \"select * from foo\"\n┌──┬──────────┬────┐\n│id│      name│size│\n├→─┴──────────┴────┤\n↓ 1      \"abc\"   25│\n│ 2     \"test\"   10│\n│ 3 \"a string\" 1000│\n└──────────────────┘\n> c sql:query \"select * from foo\"\n```","msgtype":"m.text","formatted_body":"

                    I fixed something I should I have done long ago. When you do a select from a database table, it sets the column labels of the result:<\/p>\n

                        c sql:update \"insert into foo (id, name, size) values (1, 'abc', 25)\"\n1\n    c sql:update \"insert into foo (id, name, size) values (2, 'test', 10)\"\n1\n    c sql:update \"insert into foo (id, name, size) values (3, 'a string', 1000)\"\n1\n    c sql:query \"select * from foo\"\n┌──┬──────────┬────┐\n│id│      name│size│\n├→─┴──────────┴────┤\n↓ 1      \"abc\"   25│\n│ 2     \"test\"   10│\n│ 3 \"a string\" 1000│\n└──────────────────┘\n> c sql:query \"select * from foo\"\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1704903774079,"event_id":"$-P6g_TSYCMz6bGPKiu8UuZtGsWPQq2KEapbmn7Iri_4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I fixed something I should I have done long ago. When you do a select from a database table, it sets the column labels of the result:\n\n```\n    c sql:update \"insert into foo (id, name, size) values (1, 'abc', 25)\"\n1\n    c sql:update \"insert into foo (id, name, size) values (2, 'test', 10)\"\n1\n    c sql:update \"insert into foo (id, name, size) values (3, 'a string', 1000)\"\n1\n    c sql:query \"select * from foo\"\n┌──┬──────────┬────┐\n│id│      name│size│\n├→─┴──────────┴────┤\n↓ 1      \"abc\"   25│\n│ 2     \"test\"   10│\n│ 3 \"a string\" 1000│\n└──────────────────┘\n```","msgtype":"m.text","formatted_body":"

                    I fixed something I should I have done long ago. When you do a select from a database table, it sets the column labels of the result:<\/p>\n

                        c sql:update \"insert into foo (id, name, size) values (1, 'abc', 25)\"\n1\n    c sql:update \"insert into foo (id, name, size) values (2, 'test', 10)\"\n1\n    c sql:update \"insert into foo (id, name, size) values (3, 'a string', 1000)\"\n1\n    c sql:query \"select * from foo\"\n┌──┬──────────┬────┐\n│id│      name│size│\n├→─┴──────────┴────┤\n↓ 1      \"abc\"   25│\n│ 2     \"test\"   10│\n│ 3 \"a string\" 1000│\n└──────────────────┘\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$AQmRL4rnC-aVpAorqkLBXzv7LWGvLDqbKJ_cvx7Iig4","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * I fixed something I should I have done long ago. When you do a select from a database table, it sets the column labels of the result:\n\n```\n    c sql:update \"insert into foo (id, name, size) values (1, 'abc', 25)\"\n1\n    c sql:update \"insert into foo (id, name, size) values (2, 'test', 10)\"\n1\n    c sql:update \"insert into foo (id, name, size) values (3, 'a string', 1000)\"\n1\n    c sql:query \"select * from foo\"\n┌──┬──────────┬────┐\n│id│      name│size│\n├→─┴──────────┴────┤\n↓ 1      \"abc\"   25│\n│ 2     \"test\"   10│\n│ 3 \"a string\" 1000│\n└──────────────────┘\n```","msgtype":"m.text","formatted_body":" * 

                    I fixed something I should I have done long ago. When you do a select from a database table, it sets the column labels of the result:<\/p>\n

                        c sql:update \"insert into foo (id, name, size) values (1, 'abc', 25)\"\n1\n    c sql:update \"insert into foo (id, name, size) values (2, 'test', 10)\"\n1\n    c sql:update \"insert into foo (id, name, size) values (3, 'a string', 1000)\"\n1\n    c sql:query \"select * from foo\"\n┌──┬──────────┬────┐\n│id│      name│size│\n├→─┴──────────┴────┤\n↓ 1      \"abc\"   25│\n│ 2     \"test\"   10│\n│ 3 \"a string\" 1000│\n└──────────────────┘\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1704904173276,"event_id":"$UdaLcx1sXP4GgZfeXFhPtGDbKrZm-x9pRtcJ-2Lrprg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$AQmRL4rnC-aVpAorqkLBXzv7LWGvLDqbKJ_cvx7Iig4","rel_type":"m.annotation","key":"🤩"}}}
                    {"origin_server_ts":1704904197470,"event_id":"$HIJ7sDXGb6vxRvsb7C2j44KLSi3mdNs-wgAigXFRpVU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"That SQL feature is awesome, like it","msgtype":"m.text"}}
                    {"origin_server_ts":1704904971860,"event_id":"$8rGnK-5YylmIxdpERHoYXUA1-dCmxMgbtED49nhRhmo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"if you like SQL, then look at this:\n```\n    s ← c sql:prepare \"insert into foo (userId, name) values (?, ?)\"\nkap:internal\n    s sql:updatePrepared 3 2 ⍴ 10 \"abc\" 20 \"def\" 30 \"ghi\"\n┌→────┐\n│1 1 1│\n└─────┘\n    c sql:query \"select * from foo order by userId\"\n┌──────┬────────┐\n│userId│    name│\n├→─────┴────────┤\n↓     1  \"blaha\"│\n│     2  \"aaaaa\"│\n│     3 \"bbbbbb\"│\n│    10    \"abc\"│\n│    20    \"def\"│\n│    30    \"ghi\"│\n└───────────────┘\n```","msgtype":"m.text","formatted_body":"

                    if you like SQL, then look at this:<\/p>\n

                        s ← c sql:prepare \"insert into foo (userId, name) values (?, ?)\"\nkap:internal\n    s sql:updatePrepared 3 2 ⍴ 10 \"abc\" 20 \"def\" 30 \"ghi\"\n┌→────┐\n│1 1 1│\n└─────┘\n    c sql:query \"select * from foo order by userId\"\n┌──────┬────────┐\n│userId│    name│\n├→─────┴────────┤\n↓     1  \"blaha\"│\n│     2  \"aaaaa\"│\n│     3 \"bbbbbb\"│\n│    10    \"abc\"│\n│    20    \"def\"│\n│    30    \"ghi\"│\n└───────────────┘\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1704910892810,"event_id":"$MCBEjyiRu-xEyBm2pAHN3E1SxpOT_nzPdnO1rm1Cz6U","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$8rGnK-5YylmIxdpERHoYXUA1-dCmxMgbtED49nhRhmo","rel_type":"m.annotation","key":"😎"}}}
                    {"origin_server_ts":1704910902339,"event_id":"$MWCk_IeS0CZ5F6dAv3R2Gf_Id6ebuXS1cPY8jzZUek8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"Nice nice","msgtype":"m.text"}}
                    {"origin_server_ts":1704930184931,"event_id":"$fdxIMSAsc44g3cIeikaOrZzuQDH6uOIsOcAJTCqH-DQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"does `∇` to recurse work in kap?","msgtype":"m.text","formatted_body":"does ∇<\/code> to recurse work in kap?"}}
                    {"origin_server_ts":1704930212437,"event_id":"$_kwxi-uIuPxFBu6FQv-s5S82cfaAs3WGb07Mkbc_tTg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"oh wait it's ⍓","msgtype":"m.text"}}
                    {"origin_server_ts":1704930225574,"event_id":"$B6_rI52z6JeN8E3oHjWCLW1fZPvx5lESUzc5YqBtGaE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"wait it's not?","msgtype":"m.text"}}
                    {"origin_server_ts":1704932141887,"event_id":"$Bmua9GixtAl0jk0a8gDyQ3sId1AdtxiiEiuAaKYnqpc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"also, is `⍠` implemented as a guard?","msgtype":"m.text","formatted_body":"also, is ⍠<\/code> implemented as a guard?"}}
                    {"origin_server_ts":1704932161913,"event_id":"$-_ZuMmuKahA8b-kGWZ1Mjt5aKRFnuLXB3dfbaCK67BI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"also what is `∥`","msgtype":"m.text","formatted_body":"also what is ∥<\/code>"}}
                    {"origin_server_ts":1704932340796,"event_id":"$-Hd0f8f-rmINRkpxIitZIuvpCGV8PBZsyGxe20287xQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"oh, I guess it's not, but that would be... nice?","msgtype":"m.text"}}
                    {"origin_server_ts":1704932348200,"event_id":"$mGCGK7voMN2eWYXphJUODXrvdOeYMcwa5LGVTAOSXG8","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I guess? idk why wasn't it implemented as such?","msgtype":"m.text"}}
                    {"origin_server_ts":1704935954460,"event_id":"$ma8enLNB2L5RAqQBMRg8YzGVj0Dq_wKAX-TprbMBze4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$_kwxi-uIuPxFBu6FQv-s5S82cfaAs3WGb07Mkbc_tTg"}},"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> oh wait it's ⍓\n\nIt is. But it doesn't work due to a bug. ","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @tortus:matrix.org<\/a>
                    oh wait it's ⍓<\/blockquote><\/mx-reply>It is. But it doesn't work due to a bug."}} {"origin_server_ts":1704935998648,"event_id":"$j7nauJLnqs8jrf-ld8sDeNrDZjKxrK30HUKdbqU7L2I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$-_ZuMmuKahA8b-kGWZ1Mjt5aKRFnuLXB3dfbaCK67BI"}},"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> also what is `∥`\n\nIt's the parallel operator. It only works with each right now. You can see it in action here. ","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @tortus:matrix.org<\/a>
                    also what is ∥<\/code><\/blockquote><\/mx-reply>It's the parallel operator. It only works with each right now. You can see it in action here."}} {"origin_server_ts":1704936299147,"event_id":"$8ATGJe3wMSNjJX_xixtC1NENS-xm07Ujh7avh3i2nho","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://peertube.functional.cafe/w/kgMRbHxp2JtsjksHwBjW9C","msgtype":"m.text"}} {"origin_server_ts":1704936643060,"event_id":"$QTsyAQhkYX8vthhmi6scfSf_2my5cd3ILCMeBgr9C8A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You don't have the same guard behaviour as dyalog but you can use dyadic return.","msgtype":"m.text"}} {"origin_server_ts":1704936645540,"event_id":"$01KnvvdHgm1SQo5JVXBzQeIJ-YupnUVlixhdsXpc0LA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/reference.html#_return_from_a_function","msgtype":"m.text"}} {"origin_server_ts":1704936938074,"event_id":"$qqDBd0kOElIXLDHR_fcYDDo1M5B9IcTNSrLCv7fq6aI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"As fir recurse. It isn't really a bug. It's an issue with scoping. It's hard to define the behaviour such that the lexical scoping rules still make sense.","msgtype":"m.text"}} {"origin_server_ts":1704938830513,"event_id":"$x3ebyVExRQ4I8P6qQFWtSzIbBRoc_SgWJbL4vZUn1U8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"As for recurse. It isn't really a bug. It's an issue with scoping. It's hard to define the behaviour such that the lexical scoping rules still make sense.","msgtype":"m.text"},"m.relates_to":{"event_id":"$qqDBd0kOElIXLDHR_fcYDDo1M5B9IcTNSrLCv7fq6aI","rel_type":"m.replace"},"body":"* As for recurse. It isn't really a bug. It's an issue with scoping. It's hard to define the behaviour such that the lexical scoping rules still make sense.","msgtype":"m.text"}} {"origin_server_ts":1704980071904,"event_id":"$OsUHSZHZ1qTyGYBII_7oZhMyJEkADJ3HkNEWqgTtZB4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"OK, now I've added another optimisation: Lazy arrays can now track if their result only contains boolean values. This allows for things like `∧/` being optimised.","msgtype":"m.text","formatted_body":"OK, now I've added another optimisation: Lazy arrays can now track if their result only contains boolean values. This allows for things like ∧/<\/code> being optimised."}} {"origin_server_ts":1704980148555,"event_id":"$gNZJBcQX3cHQXx2fAsgUuoaOvD4ELvLxeNLMwe0D5cI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"So basically, `∧/ foo¨ bar` can terminate early, and not run `foo` on the remaining elements if one of them returns 0.","msgtype":"m.text","formatted_body":"So basically, ∧/ foo¨ bar<\/code> can terminate early, and not run foo<\/code> on the remaining elements if one of them returns 0."}} {"origin_server_ts":1704980186786,"event_id":"$uhATAzMLbcXFdwCo3_DC_IsOArDRUeGj3v3hbpYw4n4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"(it is assumed that `foo` is a function and `bar` is an array of depth 0)","msgtype":"m.text","formatted_body":"(it is assumed that foo<\/code> is a function and bar<\/code> is an array of depth 0)"}} {"origin_server_ts":1704982543616,"event_id":"$6SxG1fFMQXGhZ5QioWDc6nueOvPe911n3MtSlRVSgYA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I just realised that I had not implemented `=∵`, which is of course bitwise xnor.","msgtype":"m.text","formatted_body":"I just realised that I had not implemented =∵<\/code>, which is of course bitwise xnor."}} {"origin_server_ts":1704982609333,"event_id":"$WqCudv1V1AINI2dfEhMjXIVfEo14UDcG16E0ywXAcKI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I can't say I've ever needed it, but it was a natural thing to add. Am I missing any bitwise operations? https://kapdemo.dhsdevelopments.com/reference.html#_derive_bitwise","msgtype":"m.text"}} {"origin_server_ts":1704982679741,"event_id":"$NiR6fiQ9xSiC6R3wibvSWcbNU2gkvNDsTQPx6z1BA6g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Wait, should `⊢∵` and `⊣∵` be implemented too?","msgtype":"m.text","formatted_body":"Wait, should ⊢∵<\/code> and ⊣∵<\/code> be implemented too?"}} {"origin_server_ts":1704984005783,"event_id":"$xSLjWhQzu6rK7catq8wcTYEpGuQJhfaES53zainYpNQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: Is there a way in which `⍠` could be nicer than the use of dyadic return?","msgtype":"m.text","formatted_body":"
                    Tortus<\/a>: Is there a way in which ⍠<\/code> could be nicer than the use of dyadic return?"}} {"origin_server_ts":1705080481477,"event_id":"$Gn8QKAWKMTgQD4mePxqQrohX0jUt-zOQU2NCxEQRVLk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, I've now implemented optimised reduction on boolean arrays.","msgtype":"m.text"}} {"origin_server_ts":1705082396993,"event_id":"$7z4r6SBfnyb7xIze3sm7rsx0JXRlCN6gdAt8gQQY9yM","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$ma8enLNB2L5RAqQBMRg8YzGVj0Dq_wKAX-TprbMBze4"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> It is. But it doesn't work due to a bug.\n\nHm 🤔","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    It is. But it doesn't work due to a bug.<\/blockquote><\/mx-reply>Hm 🤔"}} {"origin_server_ts":1705082437419,"event_id":"$R1m1jnMT83GyIa_hLkLmVoSAhY8UdgWkiOby_ae0Xak","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$NiR6fiQ9xSiC6R3wibvSWcbNU2gkvNDsTQPx6z1BA6g"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Wait, should `⊢∵` and `⊣∵` be implemented too?\n\nto get the least-significant/most-significant bits? That would be my first intuition about that operator","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    Wait, should ⊢∵<\/code> and ⊣∵<\/code> be implemented too?<\/blockquote><\/mx-reply>to get the least-significant/most-significant bits? That would be my first intuition about that operator"}} {"origin_server_ts":1705082524596,"event_id":"$ekGCAtuIJkF3XZVKrfUH24nG0nsDrmjdXAWs2bxAwnA","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$xSLjWhQzu6rK7catq8wcTYEpGuQJhfaES53zainYpNQ"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Tortus: Is there a way in which `⍠` could be nicer than the use of dyadic return?\n\nI think dyadic return serves fine, and that leaves `⍠` blank for my potential uses so that's nice actually","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    Tortus<\/a>: Is there a way in which ⍠<\/code> could be nicer than the use of dyadic return?<\/blockquote><\/mx-reply>I think dyadic return serves fine, and that leaves ⍠<\/code> blank for my potential uses so that's nice actually"}} {"origin_server_ts":1705082530877,"event_id":"$cI8r0OFS0V5kBDqdW_FF_lWgm5PLvLqF9RYb1rgzNjo","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I didnt' realize dyadic return was a thing really","msgtype":"m.text"}} {"origin_server_ts":1705082588764,"event_id":"$T4ewvLIXVDrYjOxCtkfAJ7fdLVqWYEshPZbUuQUV9bs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: there are 16 different boolean operations, and `⊣∵` would result in the left argument always being returned. In fact, it'd be exactly the same as regular `⊣`","msgtype":"m.text","formatted_body":"Tortus<\/a>: there are 16 different boolean operations, and ⊣∵<\/code> would result in the left argument always being returned. In fact, it'd be exactly the same as regular ⊣<\/code>"}} {"origin_server_ts":1705082628269,"event_id":"$_aB14W_OGLG9NIfNf0Vd50npL1P7yI2cULx9vhQbjHM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"A prototype implementation exists now.","msgtype":"m.text"}} {"origin_server_ts":1705082643923,"event_id":"$0v5xPR3PHe4QvLRLc-xbxLKC-E7Wkbyc0HfsVwIkmts","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"is your intention to make every function `∵`-able?","msgtype":"m.text","formatted_body":"is your intention to make every function ∵<\/code>-able?"}} {"origin_server_ts":1705082864996,"event_id":"$OJzaYR6CRMaqYs-VhVnhW0LRY5Lm0NIWuznM_yxL1Ws","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: No. But for completeness sake, the 16 boolean functions should be available. Right now, you can do and, or, xor, nor, nand and xnor.","msgtype":"m.text","formatted_body":"Tortus<\/a>: No. But for completeness sake, the 16 boolean functions should be available. Right now, you can do and, or, xor, nor, nand and xnor."}} {"origin_server_ts":1705082878464,"event_id":"$iVuD1BJBYkmZqWTBZ871hqe-62Dui9ZeQvtnwP0U2AQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"which 16 boolean functions?","msgtype":"m.text"}} {"origin_server_ts":1705082908158,"event_id":"$YvN4RcBM-qfUirhSwr694YBcrF-VuUmYFTdF4GSpFCE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The Common Lisp documentation lists them here: http://clhs.lisp.se/Body/f_boole.htm","msgtype":"m.text"}} {"origin_server_ts":1705082954970,"event_id":"$phMST0QFVoF4dMBxHZ7Hkw-1gyGAjB-Vkh7bC4POh68","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Oh I see","msgtype":"m.text"}} {"origin_server_ts":1705082959401,"event_id":"$4Qm5x9E2rd8i7MllzssHI5SgpirjGfAyMeob3OUfPbg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"well, I don't see why not","msgtype":"m.text"}} {"origin_server_ts":1705082977103,"event_id":"$GXMvi4wuakRZEIBOF_9iG6hVAHA0cgAYMO6TCGK4DRk","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"although there's not really a point to doing `⊢∵` because it's the same as `⊢`","msgtype":"m.text","formatted_body":"although there's not really a point to doing ⊢∵<\/code> because it's the same as ⊢<\/code>"}} {"origin_server_ts":1705083003207,"event_id":"$_B6ICGKyi_JzCUq9qr4lLWEkNleSzYXA-Sohi-1wHeU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I don't see why implementing `⊢∵` = `⊢` would be anything problematic","msgtype":"m.text","formatted_body":"I don't see why implementing ⊢∵<\/code> = ⊢<\/code> would be anything problematic"}} {"origin_server_ts":1705083017397,"event_id":"$dTdKqhGtq6nfIngSjR1ijXh62ISZY422GawuDUFfLeM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"It makes sense that `≠∵` is xor, because that's what it does on integers 0 and 1. However, which function behaves like andc2?","msgtype":"m.text","formatted_body":"It makes sense that ≠∵<\/code> is xor, because that's what it does on integers 0 and 1. However, which function behaves like andc2?"}} {"origin_server_ts":1705083034449,"event_id":"$tEKkcOG8dItf_wmeQAQ1vaOVS8f1LW7bW0siCWRRLuw","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"so like `⍺∧~⍵`","msgtype":"m.text","formatted_body":"so like ⍺∧~⍵<\/code>"}} {"origin_server_ts":1705083044284,"event_id":"$6a23Rl4VDh6uF7NR5508ctFiAeq-Baz5ccQfdvVeXt0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"uhmmm","msgtype":"m.text"}} {"origin_server_ts":1705083043932,"event_id":"$_gGXVWCs2kmQ34UvQDhwIjMyFHFPzWarIJxpG_iltjE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah","msgtype":"m.text"}} {"origin_server_ts":1705083067481,"event_id":"$0WouDgFWopV16EQ7xfwCMzKYahdok0E24MuwKn67oAU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"lemme see a table for this rq","msgtype":"m.text"}} {"origin_server_ts":1705083121295,"event_id":"$3NIvr7iUFxZ6jk7E6h926lneVMlNFxu8NyCrZ0uOFkk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Wait... `<∵` and `>∵`","msgtype":"m.text","formatted_body":"Wait... <∵<\/code> and >∵<\/code>"}} {"origin_server_ts":1705083131339,"event_id":"$6GX1mR9bDg0YWqJjRLVR-PP_izVaqAs09rbILK6w3FI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"And greater/less than equal","msgtype":"m.text"}} {"origin_server_ts":1705083134538,"event_id":"$UqU7JVN1-cKHCIqbencTjOFQE3-HF97LABbApE0bC60","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah","msgtype":"m.text"}} {"origin_server_ts":1705083140080,"event_id":"$NhbYkjuU5AQJ0XaDbHA2eHcgf4fFsWmDdB7xG9HkYbc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"that actually sounds right","msgtype":"m.text"}} {"origin_server_ts":1705083158542,"event_id":"$s8lnrCrMROqLEDMFPP8YOFKutWoffXxhz9VeU49cbnI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Is there anything else? If there is I can't really seem to see one","msgtype":"m.text"}} {"origin_server_ts":1705083176260,"event_id":"$TbKtq3ogIjbGIId5EsKdGtHVXSP-BZMW-8UB-Lx37rs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"There is 'always 0' and 'always 1'.","msgtype":"m.text"}} {"origin_server_ts":1705083185052,"event_id":"$Avk8XQje8sGcx59Jc5aS4pBKlH1CV5UTUvkynB3omJs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Kinda pointless though.","msgtype":"m.text"}} {"origin_server_ts":1705083197611,"event_id":"$TeRO3HGQ6-6_-30cPx5u8LJSbPMStUqtaNtKalCb1nY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"You can write it as `{0}`","msgtype":"m.text","formatted_body":"You can write it as {0}<\/code>"}} {"origin_server_ts":1705083211490,"event_id":"$aTtBBcQoEXMZu2UK6DKB8CGsZ8uWfD2JMr6RlavDqQI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"🤔","msgtype":"m.text"}} {"origin_server_ts":1705083224611,"event_id":"$9jv4hxnMq-2aUUiMu33TaQnervFEtSIHqbbfB18DWOI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"But is it possible to declare `0` as a boolean value *internally*","msgtype":"m.text","formatted_body":"But is it possible to declare 0<\/code> as a boolean value internally<\/em>"}} {"origin_server_ts":1705083245634,"event_id":"$pyuUfJFJjHtdkurVawur4udghqWomp2NX8ftPHGw0LU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Well, the bitwise operations act on integers.","msgtype":"m.text"}} {"origin_server_ts":1705083266060,"event_id":"$OU4TTiDCLTJOfzSPYsqIfbiQR1miOndLttnkvW60B8w","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Oh right, so I guess that doesn't make much sense","msgtype":"m.text"}} {"origin_server_ts":1705083280961,"event_id":"$XCKSkJvjyxKZLtHaNWI7xzSrE7-NiZJe7E38YJPtNxc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Well, actually I guess the `always-one` can't really be `{1}`","msgtype":"m.text","formatted_body":"Well, actually I guess the always-one<\/code> can't really be {1}<\/code>"}} {"origin_server_ts":1705083304319,"event_id":"$8N71CxA4a0zE0KDPLkvTv-H4Ig-7qGMwlwmhdlAbWiQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Right. It has to be `{¯1}`","msgtype":"m.text","formatted_body":"Right. It has to be {¯1}<\/code>"}} {"origin_server_ts":1705083320715,"event_id":"$rOMzXNc5jloq6vadsyw6jIlKirnb0p9vH7jLU83CMs4","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yeah... for an ... yes","msgtype":"m.text"}} {"origin_server_ts":1705083321508,"event_id":"$Pll6Vy51cu_QF_htF8uNHvAtmaysyZIj-R-tvOLqFQg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"That's the result of `~∵ 0`","msgtype":"m.text","formatted_body":"That's the result of ~∵ 0<\/code>"}} {"origin_server_ts":1705083328379,"event_id":"$sOIx5GcZbtmA03P_KPsdACLuSdEI8QQQiGWwujIUXvo","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yaya","msgtype":"m.text"}} {"origin_server_ts":1705083343592,"event_id":"$4MsgDTZxuLXBC2LQ0gvSrjOLv3g8B9ct8fD07ceaUy0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yes that makes sense","msgtype":"m.text"}} {"origin_server_ts":1705083375701,"event_id":"$eFGg1kQ_-HB2a7i7WMojhsAZs-q2E_A45NKxrdIf9AM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"You can see use of the bitwise functions int he UTF-8 encoder: https://codeberg.org/loke/array/src/branch/master/array/standard-lib/io.kap#L3","msgtype":"m.text"}} {"origin_server_ts":1705083397400,"event_id":"$andImnoFxOZY-nquyRC06FZtXCTAj54ajxna_JREV-c","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I feel like I've seen this before","msgtype":"m.text"}} {"origin_server_ts":1705083411492,"event_id":"$bZNDXYiUID0Qek0nUsEJLG-lVaIb5olZrTQlgqBbe7g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's a port of the standard algorithm defined in the Unicode spec.","msgtype":"m.text"}} {"origin_server_ts":1705083422480,"event_id":"$zr34w4qVSuZtATh71M8F6AMitgyf7jjPLMxzwiHxV0A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"So you surely have seen a version of it.","msgtype":"m.text"}} {"origin_server_ts":1705083435567,"event_id":"$5bRa_2-Ici3YUk1vaybcEYlVEW3jkxVXPq27iyCa1a8","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"is it possible to define a boolean number as in `0bxxxxxxx`","msgtype":"m.text","formatted_body":"is it possible to define a boolean number as in 0bxxxxxxx<\/code>"}} {"origin_server_ts":1705083440230,"event_id":"$sHmbD70MQbLSZuslJ-XYmmpYPFn4bC0txopM_ZCKhZk","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"errr","msgtype":"m.text"}} {"origin_server_ts":1705083442352,"event_id":"$XYYYrTj7CIpHZSPnSP3TmmAtUS0nwQ8Go_h5_SHxMzk","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"sorry","msgtype":"m.text"}} {"origin_server_ts":1705083449397,"event_id":"$W9j6PCReqoS2374YaXJ2NGSC4ZLZW--6lUbDV0Dd9Uc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I mean is it possible to use *binary notation*","msgtype":"m.text","formatted_body":"I mean is it possible to use binary notation<\/em>"}} {"origin_server_ts":1705083450219,"event_id":"$RzaK-MF1BmRjArjUgqmVA_t22t_8OMA_3RIcz2APKEg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yes, I could add that.","msgtype":"m.text"}} {"origin_server_ts":1705083462111,"event_id":"$-nzGNbrYYFK0TbPNN_XLwKwLfRjCa0xly732APL1jUg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"It only support hex with `0x` right now.","msgtype":"m.text","formatted_body":"It only support hex with 0x<\/code> right now."}} {"origin_server_ts":1705083465874,"event_id":"$jHQPYTXFdmbbIMPmacp-BEzjzjJtTZRgreqwYs1mbZA","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"That and hex could come in useful when interfacing with the bitwises","msgtype":"m.text"}} {"origin_server_ts":1705083466742,"event_id":"$AWdO_Kynyd-GZEYtcSQg1RJIvUt24A1wVVLE1wgCalY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"But `0b` makes sense.","msgtype":"m.text","formatted_body":"But 0b<\/code> makes sense."}} {"origin_server_ts":1705083478849,"event_id":"$syDf1dIKZnDMdQrzLJ5O8KdZSZvVL6HibwmIPn3VYEw","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"more a QOL change than anything","msgtype":"m.text"}} {"origin_server_ts":1705083486562,"event_id":"$8-8B3E3XR6DRPTGoPJXvgdm-3XKwk_V9moPZ6lpQQMM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Sure. I'll add it.","msgtype":"m.text"}} {"origin_server_ts":1705083496009,"event_id":"$RzskThFlMxc6YSlUBPWwcJ8mq4kZLTrGp8iq0UUemVg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"awesome 👍️","msgtype":"m.text"}} {"origin_server_ts":1705083506936,"event_id":"$14IZZJ7Dqdbyu7n60BhteNlYiIXFUSmlXnmm_wA481Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I'll do it tomorrow. Time to go to sleep.","msgtype":"m.text"}} {"origin_server_ts":1705083508034,"event_id":"$RzuLBgaLJtv3v9mLpBL_aIpjQLtpIk9UNgdCkfEFLnA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think `⊢∵` would actually be `⊢¨`, for example `3 4 5 ⊢∵ 2` would return `2 2 2`.","msgtype":"m.text","formatted_body":"I think ⊢∵<\/code> would actually be ⊢¨<\/code>, for example 3 4 5 ⊢∵ 2<\/code> would return 2 2 2<\/code>."}} {"origin_server_ts":1705083543084,"event_id":"$YRn__wV3ozvRSzu0wmo_nepHS-vVifbE78gHmGumrVQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The fact that `⊢` alone isn't pervasive is a reason not to support it, but not a very compelling one.","msgtype":"m.text","formatted_body":"The fact that ⊢<\/code> alone isn't pervasive is a reason not to support it, but not a very compelling one."}} {"origin_server_ts":1705083543536,"event_id":"$3uVAa_SDH0sjm204F7otUK40WEx6vgvQEbm0LAoU_hI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: Oh, damn it, you're right :_)","msgtype":"m.text","formatted_body":"Marshall<\/a>: Oh, damn it, you're right :_)"}} {"origin_server_ts":1705083546736,"event_id":"$EyF2DltEO_zLnfrVkP01MBSxD_0yh-22zQ1jnfuqIo4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: Oh, damn it, you're right :-)","msgtype":"m.text","formatted_body":"Marshall<\/a>: Oh, damn it, you're right :-)"},"m.relates_to":{"event_id":"$3uVAa_SDH0sjm204F7otUK40WEx6vgvQEbm0LAoU_hI","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Marshall: Oh, damn it, you're right :-)","msgtype":"m.text","formatted_body":" * Marshall<\/a>: Oh, damn it, you're right :-)"}} {"origin_server_ts":1705083564659,"event_id":"$3c4fDQ8U2wUSMRBhWrDowfTU5BNPANqoikemxv6aliU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"That makes a lot of sense I agree","msgtype":"m.text"}} {"origin_server_ts":1705083725859,"event_id":"$JFFRYkzw3UrM7g2R2tv66xwv_lBDwuXpxqMlcPxiGiE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Well, needs full pervasion instead of `¨` really, since `∵` does handle nested arguments.","msgtype":"m.text","formatted_body":"Well, needs full pervasion instead of ¨<\/code> really, since ∵<\/code> does handle nested arguments."}} {"origin_server_ts":1705083756131,"event_id":"$n4EZFL8jI8NjQtPC3JuiuxGc8ZbIN6P4IaamHA2csEc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yes, the bitwise functions are regular scalar functions.","msgtype":"m.text"}} {"origin_server_ts":1705084040151,"event_id":"$3K1h7ThK_-tT7r-tts4FnOzWYcVzeqBvkXhwze7EOU0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Mind I ask where I can find any resources regarding the java/jar interop","msgtype":"m.text"}} {"origin_server_ts":1705084043293,"event_id":"$nv_blE9zShentman4yFrw8tGqaxIltbPn8RjmdBaGnQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"with kap","msgtype":"m.text"}} {"origin_server_ts":1705084054518,"event_id":"$ENQRrr9gJrFKIIF-IJXYaB8_aEncyfncBGlF8lJbY6c","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"and/or any JS interop if there is any","msgtype":"m.text"}} {"origin_server_ts":1705084814367,"event_id":"$3kaYRxmee4r8R_gO_vKC7-cuvfGDhXiiWpyYZPdI-S8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"You can find this if you scroll up: Here is an example from the testcases that instantiates a class and calls a method: https://codeberg.org/loke/array/src/branch/master/array/src/jvmTest/kotlin/array/jvmmod/MethodCallsTest.kt#L47","msgtype":"m.text"}} {"origin_server_ts":1705085058852,"event_id":"$-m1CLf2-oUIsqa3vrKEiVtAufbj4MUTsOT5RFaJ9TRM","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ooh awesome, thank you!","msgtype":"m.text"}} {"origin_server_ts":1705085339063,"event_id":"$Ye5JNZtGtzwC5XF9HUyMvsHrBWN4q9wuRA5oLWDzEeA","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"can only certain symbols be used as variables?","msgtype":"m.text"}} {"origin_server_ts":1705085391911,"event_id":"$35U4wXs9lWOO8j6gh7nNn9xAr0R2ymXfRpi-60-0Z2k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"OK, I implemented support for the `0b` syntax: https://codeberg.org/loke/array/commit/d4566d3522588c8fa2878bb5e0aa74d461de60d6","msgtype":"m.text","formatted_body":"OK, I implemented support for the 0b<\/code> syntax: https://codeberg.org/loke/array/commit/d4566d3522588c8fa2878bb5e0aa74d461de60d6"}} {"origin_server_ts":1705085433327,"event_id":"$cJFA1pPG214-L_IiUqE-gI8lOrwAQhTDxnb8bZUA9nI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$3K1h7ThK_-tT7r-tts4FnOzWYcVzeqBvkXhwze7EOU0"}},"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> Mind I ask where I can find any resources regarding the java/jar interop\n\nThere are no resources yet, because I haven't finished building the full API","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @tortus:matrix.org<\/a>
                    Mind I ask where I can find any resources regarding the java/jar interop<\/blockquote><\/mx-reply>There are no resources yet, because I haven't finished building the full API"}} {"origin_server_ts":1705085439578,"event_id":"$WB0CjGlOkkEb2aSpSoEjEknsIvrnNPGHys0wqyHHLxk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I'll likely change a lot.","msgtype":"m.text"}} {"origin_server_ts":1705085465125,"event_id":"$a-TW9jWFGzO9bxcQ9Z3I2Uf6y8kR--fG6hgPEW9U_pM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$Ye5JNZtGtzwC5XF9HUyMvsHrBWN4q9wuRA5oLWDzEeA"}},"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> can only certain symbols be used as variables?\n\nMost symbols can be used.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @tortus:matrix.org<\/a>
                    can only certain symbols be used as variables?<\/blockquote><\/mx-reply>Most symbols can be used."}} {"origin_server_ts":1705085762480,"event_id":"$wSrKMCceXJu7L17qF55LWvMMm-FERrVc7priYwYdQfw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"And now the JS client is updated: https://kapdemo.dhsdevelopments.com/clientweb2/#1234%20%2B%200b1101%20%2B%200x1F","msgtype":"m.text"}} {"origin_server_ts":1705093858519,"event_id":"$qtOT_R1VdnMWN2IZ5YdTkhdHKFC-gdBFdTgLeHJoUKY","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$35U4wXs9lWOO8j6gh7nNn9xAr0R2ymXfRpi-60-0Z2k"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> OK, I implemented support for the `0b` syntax: https://codeberg.org/loke/array/commit/d4566d3522588c8fa2878bb5e0aa74d461de60d6\n\nawesome!","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    OK, I implemented support for the 0b<\/code> syntax: https://codeberg.org/loke/array/commit/d4566d3522588c8fa2878bb5e0aa74d461de60d6<\/blockquote><\/mx-reply>awesome!"}} {"origin_server_ts":1705093870934,"event_id":"$aDzkfIdTdjENqkNyE9CS-WLADbxR-7yuJaeIz-BoiIM","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$a-TW9jWFGzO9bxcQ9Z3I2Uf6y8kR--fG6hgPEW9U_pM"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Most symbols can be used.\n\nI'm trying to define a `⍰` function but it no worky","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    Most symbols can be used.<\/blockquote><\/mx-reply>I'm trying to define a ⍰<\/code> function but it no worky"}} {"origin_server_ts":1705113484428,"event_id":"$D39It4jLuvPGkog2TL498qG_VStWl5SGzEN77fVN7fo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Tortus: show me what you did","msgtype":"m.text","formatted_body":"
                    Tortus<\/a>: show me what you did"}} {"origin_server_ts":1705116848634,"event_id":"$7jVVJVUT6MQ-WWuCqizooWZL6TymgNmkrQK4iRr6GP4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll show an example soon after I get in front of the computer. ","msgtype":"m.text"}} {"origin_server_ts":1705131686835,"event_id":"$bsfxpO0RK00zIzg7N5Y_tZ_jMog2XOLZEe5j-uvcLjo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: Ah, I see. The symbol in question isn't allowed by default since it's not in the \"letter\" Unicode class. You have to explicitly declare it as a valid symbol before using it as such. Here's a working example:","msgtype":"m.text","formatted_body":"Tortus<\/a>: Ah, I see. The symbol in question isn't allowed by default since it's not in the \"letter\" Unicode class. You have to explicitly declare it as a valid symbol before using it as such. Here's a working example:"}} {"origin_server_ts":1705131727118,"event_id":"$-a91zg-hM_Y__WLukwNmSZBryhhR5z4aWCso1hwDW4s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"```\ndeclare(:singleCharExported \"⍰\")\n∇ x ⍰ y {\n io:println \"x=\" x\n io:println \"y=\" y\n x+y\n}\n10 ⍰ 20\n```","msgtype":"m.text","formatted_body":"
                    declare(:singleCharExported \"⍰\")\n∇ x ⍰ y {\n    io:println \"x=\" x\n    io:println \"y=\" y\n    x+y\n}\n10 ⍰ 20\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1705140353345,"event_id":"$pp1X54GbkRdHIZgCXzGPGl41ZUFT4-pNPfT9v_xgOgU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$-a91zg-hM_Y__WLukwNmSZBryhhR5z4aWCso1hwDW4s","rel_type":"m.annotation","key":"🙏"}}}
                    {"origin_server_ts":1705174436819,"event_id":"$PsJmrLP1QkIuRNqlx4-AYe94wwo637dicsPUVkV-vJc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://matrix.org/TLUnNXlzIXIXsixpYZfLjNLi","info":{"xyz.amorgan.blurhash":"L2SY{q00_3_300%M%M9F9GIUaz%M","size":170583,"w":775,"h":508,"mimetype":"image/png"}}}
                    {"origin_server_ts":1705174443500,"event_id":"$SlJVpiYr5Mt5O6WtRMB8VOvlofpK1xK_DJLtJQpO0Z4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"how would you do this in KAP?","msgtype":"m.text"}}
                    {"origin_server_ts":1705214482342,"event_id":"$jZ0zXH5PwxVeth5tVuDYtW_NyCUmTuetj842CuOILmQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Well, the easiest way is to use ∪. ","msgtype":"m.text"}}
                    {"origin_server_ts":1705214496418,"event_id":"$0QeMRu4O-sbgcjIN3HD4ETmJd-f3w61CwqVio4whOho","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But the methods\n described in the document works too. ","msgtype":"m.text"}}
                    {"origin_server_ts":1705214504844,"event_id":"$92kqPRhdY2hufL6QjomQhFWRtvRYSuHhZAnMo1Gi3_k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"But the method described in the document works too. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$0QeMRu4O-sbgcjIN3HD4ETmJd-f3w61CwqVio4whOho","rel_type":"m.replace"},"body":"* But the method described in the document works too. ","msgtype":"m.text"}}
                    {"origin_server_ts":1705214518779,"event_id":"$-HMHeEy9augIiI4_MYid-xZ2HJ_T78Jhg_FNhgtHlIc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"sienet_ja_LSD: did you have problems using it? ","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: did you have problems using it? "}}
                    {"origin_server_ts":1705221509239,"event_id":"$2qtVzZ24y0c_4Av_dlfjWbpvcKgpXjU7OBxfhzmKVOo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yes, it gives an error if you type it as it is","msgtype":"m.text"}}
                    {"origin_server_ts":1705221513281,"event_id":"$FNhkbxhNGwcYfp1H4HyF0_9JCiIgd-BZIw8lK1UAzMk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"different ranks","msgtype":"m.text"}}
                    {"origin_server_ts":1705221921094,"event_id":"$IpLrnRS9l3RlrdWklzphwel8k4cfGSi0NexX9RWV6xI","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"starting from NV←\"JIM\" \"JOHN\" \"JIM\" \"DIETER\" \"PIER\" \"JIM\" you get","msgtype":"m.text"}}
                    {"origin_server_ts":1705221950463,"event_id":"$g2onN618hT7AD6a2Rx4l-qity5MMzpGWP65V4MGjP08","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Screenshot from 2024-01-14 10-45-06.png","msgtype":"m.image","url":"mxc://matrix.org/AtntBwIdFUwLeZoMrvLCsnTi","info":{"xyz.amorgan.blurhash":"L0T9L#0000008Z4-Mw%M4TD%bvxb","size":45617,"w":1014,"h":848,"mimetype":"image/png"}}}
                    {"origin_server_ts":1705222035817,"event_id":"$Wqr069t04sg7zby7uIe-uPlRGCpbBU7CfEtiLsTdgSI","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"so ⍴ left side is 6 but ⍴ right side is 1 6","msgtype":"m.text"}}
                    {"origin_server_ts":1705223296919,"event_id":"$4gOpOGiRzD_qYw2cO-kwLMDS9SFb_X52-Ds77b7wUKk","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$-a91zg-hM_Y__WLukwNmSZBryhhR5z4aWCso1hwDW4s","rel_type":"m.annotation","key":"🙏"}}}
                    {"origin_server_ts":1705223311067,"event_id":"$XJnF-M6U0YV2jIpwu0Kdcu_LsqVXP9-vbK5qqBKJCos","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$-a91zg-hM_Y__WLukwNmSZBryhhR5z4aWCso1hwDW4s"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> ```\n> declare(:singleCharExported \"⍰\")\n> ∇ x ⍰ y {\n>     io:println \"x=\" x\n>     io:println \"y=\" y\n>     x+y\n> }\n> 10 ⍰ 20\n> ```\n\nI understand, thanks. What if I don't want this symbol *exposed* by the namespace though?","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    declare(:singleCharExported \"⍰\")\n∇ x ⍰ y {\n    io:println \"x=\" x\n    io:println \"y=\" y\n    x+y\n}\n10 ⍰ 20\n<\/code><\/pre>\n<\/blockquote><\/mx-reply>I understand, thanks. What if I don't want this symbol exposed<\/em> by the namespace though?"}}
                    {"origin_server_ts":1705223334392,"event_id":"$2QbINV0-J9QRSxwDRjmGAc3rN0tVFxRgNpWS1nydpTI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"would it be possible to export it WITHOUT actually exposing it to the namespace functions","msgtype":"m.text"}}
                    {"origin_server_ts":1705223726553,"event_id":"$q5CPtQ8AsrBD59I8muHAoWVZiJcIaP2D4xk8R6rnjLU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Also, `⍓` is not in the documentation","msgtype":"m.text","formatted_body":"Also, ⍓<\/code> is not in the documentation"}}
                    {"origin_server_ts":1705227995728,"event_id":"$ijW0GXfwlmr42ufr8-vdKTDii3woIYccHnwhkSJ414E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Correct. But that'sbecause it doesn't work at the moment. ","msgtype":"m.text"}}
                    {"origin_server_ts":1705228011178,"event_id":"$ueh3u80lMyKYcQQbR_rRS9E-N_LpLSFWIbEALJErx9U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll take a KPMG at the problem Sharon though. ","msgtype":"m.text"}}
                    {"origin_server_ts":1705228029677,"event_id":"$-bbUUJwpfVcDM3N62i7kmteC4GXj8tRL7ih1AeVXasg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I'll take a look at the problem again though. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$ueh3u80lMyKYcQQbR_rRS9E-N_LpLSFWIbEALJErx9U","rel_type":"m.replace"},"body":"* I'll take a look at the problem again though. ","msgtype":"m.text"}}
                    {"origin_server_ts":1705230166427,"event_id":"$N2OAsmsYzwGd6pIO_fEajmtJVaAE5L8WPoNB3h-qdv4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Correct. But that's because it doesn't work at the moment. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$ijW0GXfwlmr42ufr8-vdKTDii3woIYccHnwhkSJ414E","rel_type":"m.replace"},"m.mentions":{},"body":" * Correct. But that's because it doesn't work at the moment. ","msgtype":"m.text"}}
                    {"origin_server_ts":1705230395989,"event_id":"$ZhaxquEtx3Tgtyd6S9VGzyD7Lgpt0VNvJaIooyKW11M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"OK, I checked what was going on. It's because of the behaviour of monadic `⍳`. In Dyalog, there is a special case when the right argument is an array.","msgtype":"m.text","formatted_body":"OK, I checked what was going on. It's because of the behaviour of monadic ⍳<\/code>. In Dyalog, there is a special case when the right argument is an array."}}
                    {"origin_server_ts":1705230461848,"event_id":"$x43Un4p0-RqU9D4j-bc3VM3uZPigsHNut-TgTyqQ36c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"In old APL, the right argument had to be a single integer, or an array containing a single integer. Then they added support for creating multi-dimensional arrays using an array as argument, so you can do stuff like `⍳ 3 3 3`","msgtype":"m.text","formatted_body":"In old APL, the right argument had to be a single integer, or an array containing a single integer. Then they added support for creating multi-dimensional arrays using an array as argument, so you can do stuff like ⍳ 3 3 3<\/code>"}}
                    {"origin_server_ts":1705230499701,"event_id":"$bo58x52Mupta-VCur9-AUKDzLNCf7hUv2xe17gU577Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I think that for compatibility, they kept the old behaviour when you pass a 1-element array as argument.","msgtype":"m.text"}}
                    {"origin_server_ts":1705230555170,"event_id":"$iEuxEHBEy7tDSL0ploihc8cOKx7gMKEQ0QfSpNwzwCk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"That's a log-winded way of saying that you can use this instead: `{ ((⍵⍳⍵)=⍳≢⍵)/⍵ }`. You'd use the same function in moden Dyalog too.","msgtype":"m.text","formatted_body":"That's a log-winded way of saying that you can use this instead: { ((⍵⍳⍵)=⍳≢⍵)/⍵ }<\/code>. You'd use the same function in moden Dyalog too."}}
                    {"origin_server_ts":1705230560082,"event_id":"$bXu_Tjt7asNwIhB-1ZPFHsPgpC7kfnd9v9ZhfluU4J4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"That's a log-winded way of saying that you can use this instead: `{ ((⍵⍳⍵)=⍳≢⍵)/⍵ }`. You'd use the same function in modern Dyalog too.","msgtype":"m.text","formatted_body":"That's a log-winded way of saying that you can use this instead: { ((⍵⍳⍵)=⍳≢⍵)/⍵ }<\/code>. You'd use the same function in modern Dyalog too."},"m.relates_to":{"event_id":"$iEuxEHBEy7tDSL0ploihc8cOKx7gMKEQ0QfSpNwzwCk","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * That's a log-winded way of saying that you can use this instead: `{ ((⍵⍳⍵)=⍳≢⍵)/⍵ }`. You'd use the same function in modern Dyalog too.","msgtype":"m.text","formatted_body":" * That's a log-winded way of saying that you can use this instead: { ((⍵⍳⍵)=⍳≢⍵)/⍵ }<\/code>. You'd use the same function in modern Dyalog too."}}
                    {"origin_server_ts":1705230795616,"event_id":"$8XrQkZPxIo3jYUsJZsGzKYNPgezgDvSjJQeLWhEAfm0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"To be clear, the logical and consistent way to handle monadic `⍳` with a single-element array as argument is what Kap is doing. However, this particular behaviour is not very useful, even though it's consistent. So perhaps Kap should do the same thing as Dyalog here.","msgtype":"m.text","formatted_body":"To be clear, the logical and consistent way to handle monadic ⍳<\/code> with a single-element array as argument is what Kap is doing. However, this particular behaviour is not very useful, even though it's consistent. So perhaps Kap should do the same thing as Dyalog here."}}
                    {"origin_server_ts":1705233696596,"event_id":"$Mt7yI_hnGc2p5x0IXVr67enxoakWStuMItSbVKqWBnw","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$ZhaxquEtx3Tgtyd6S9VGzyD7Lgpt0VNvJaIooyKW11M","rel_type":"m.annotation","key":"🙏"}}}
                    {"origin_server_ts":1705233715753,"event_id":"$k5QeqHNePCspXxMc8c60J0POuuvIfeNIUQ56OXdg4qU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$iEuxEHBEy7tDSL0ploihc8cOKx7gMKEQ0QfSpNwzwCk","rel_type":"m.annotation","key":"🙏"}}}
                    {"origin_server_ts":1705233967178,"event_id":"$bvEbm67kP3CykQ3yTc22zMcqNzVtPNZm08OyOV7kljk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"thanks, that explains a lot","msgtype":"m.text"}}
                    {"origin_server_ts":1705233997820,"event_id":"$GTIci-4siBqmPg82-EtJigrssYbzuuVTcmVjOyAOSzg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I was checking out some examples to see how KAP differs from APL","msgtype":"m.text"}}
                    {"origin_server_ts":1705234030611,"event_id":"$Hv32JNcKUshLepWbWpfN3-fzpYk6jDUuWg1XDR5RAfc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"might come across some more","msgtype":"m.text"}}
                    {"origin_server_ts":1705234089258,"event_id":"$E7vCjjrgadihVTcR4CVbU6W77v5SBKHQETO71unfN3w","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"I was checking out some examples to see how KAP differs from APL2/Dyalog (that screenshot was from APL2 at a glance)","msgtype":"m.text"},"m.relates_to":{"event_id":"$GTIci-4siBqmPg82-EtJigrssYbzuuVTcmVjOyAOSzg","rel_type":"m.replace"},"m.mentions":{},"body":" * I was checking out some examples to see how KAP differs from APL2/Dyalog (that screenshot was from APL2 at a glance)","msgtype":"m.text"}}
                    {"origin_server_ts":1705234390700,"event_id":"$fxZgKBnLz5wB8t14RaA3b-CK9ifybFw1JeSr1kskqZM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, this is useful. The fact that it's somewhat compatible with other APL's could backfire on me a bit since there may be an expectation that it's (or supposed to be) fully compatible.","msgtype":"m.text"}}
                    {"origin_server_ts":1705234423010,"event_id":"$K4pBy-h7Yz-ZnY_0oFuGFscewM_yQZplPFO7hO8Uj64","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"well it's not a problem as long as differences are documented somewhere","msgtype":"m.text"}}
                    {"origin_server_ts":1705234484096,"event_id":"$lzS3TqS-11eOGJ2-Nn06OR4wLjteJYGgVD8uQnsVB24","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"that might turn out to be a daunting task to go through everything by hand :D ","msgtype":"m.text"}}
                    {"origin_server_ts":1705234566280,"event_id":"$2N17h_niBhw-qYPCKTHD0JGoAZRA_FAgLVy9CpQlBbc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Yeah, but even if I document the differences, people still need to read the docs. And even if they do, it may not be immediately obvious what the implications are. If I had documented the difference between Kap and Dyalog when doing `⍳,2`, would you have figured this out?","msgtype":"m.text","formatted_body":"Yeah, but even if I document the differences, people still need to read the docs. And even if they do, it may not be immediately obvious what the implications are. If I had documented the difference between Kap and Dyalog when doing ⍳,2<\/code>, would you have figured this out?"}}
                    {"origin_server_ts":1705234597795,"event_id":"$isvoyzU3vWcIpm6g2XjFbaZfXwkN96R0Jbdd8ojOaOg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye","msgtype":"m.text"}}
                    {"origin_server_ts":1705234644562,"event_id":"$Mx_FhBOh4aMAKsq_rLtQSvipRKT86h4tFKu2gxizzdQ","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"basically you just need to try it out in KAP to see how it works out","msgtype":"m.text"}}
                    {"state_key":"@tosh22:matrix.org","origin_server_ts":1705251646287,"event_id":"$egNZpjg8bSwggjwNFDe0Ss15P3UG0V5sTXzBcJL_JWQ","sender":"@tosh22:matrix.org","user_id":"@tosh22:matrix.org","type":"m.room.member","content":{"displayname":"Thomas Schranz","membership":"join"}}
                    {"state_key":"@tosh22:matrix.org","origin_server_ts":1705252412950,"event_id":"$LWbjZJLw-P96d4fl9YtPFWySbkuneFAeHkkkeHP6HBg","sender":"@tosh22:matrix.org","user_id":"@tosh22:matrix.org","prev_content":{"displayname":"Thomas Schranz","membership":"join"},"type":"m.room.member","content":{"displayname":"tosh","membership":"join"},"replaces_state":"$egNZpjg8bSwggjwNFDe0Ss15P3UG0V5sTXzBcJL_JWQ"}
                    {"state_key":"@tosh22:matrix.org","origin_server_ts":1705252487305,"event_id":"$4jRurXrN3ceuV6XKMP-az3Lbf9eqM3RUZkm-x0upuso","sender":"@tosh22:matrix.org","user_id":"@tosh22:matrix.org","prev_content":{"displayname":"tosh","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/FRsCUzmhmogcxwfUStTyLYow","displayname":"tosh","membership":"join"},"replaces_state":"$LWbjZJLw-P96d4fl9YtPFWySbkuneFAeHkkkeHP6HBg"}
                    {"origin_server_ts":1705342617206,"event_id":"$hCCVtqui0EWDeIdC2pV9fn2whmVp6TOQS-7nOvuZIg8","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$iEuxEHBEy7tDSL0ploihc8cOKx7gMKEQ0QfSpNwzwCk"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> That's a log-winded way of saying that you can use this instead: `{ ((⍵⍳⍵)=⍳≢⍵)/⍵ }`. You'd use the same function in modern Dyalog too.\n\nwait what","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    That's a log-winded way of saying that you can use this instead: { ((⍵⍳⍵)=⍳≢⍵)/⍵ }<\/code>. You'd use the same function in modern Dyalog too.<\/blockquote><\/mx-reply>wait what"}} {"origin_server_ts":1705342707740,"event_id":"$Tqp99pKHtWXTSmbF1Ch-2jYfoUBsWFOF2WOQa4aypls","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Oh, nevermind, this is to do with sienet's question","msgtype":"m.text"}} {"origin_server_ts":1705342727970,"event_id":"$pEi3X0aqAVVHBiRB8oodE7BF20pWBGfel8uX1b-x4Q8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yes, indeed","msgtype":"m.text"}} {"origin_server_ts":1705342791849,"event_id":"$56C8VL0A3A2MWm7kfiqLwnAuA6bA9E3eWk4tenMhZwo","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"does `:singleCharExported` export that char to the interface of the namespace","msgtype":"m.text","formatted_body":"does :singleCharExported<\/code> export that char to the interface of the namespace"}} {"origin_server_ts":1705342836027,"event_id":"$q33DjvJV2BZB9UFdyZKKrke7Q6fTp_a-yN8MXzsN_ow","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"so that something like `namespace:⍰` would not be a thing","msgtype":"m.text","formatted_body":"so that something like namespace:⍰<\/code> would not be a thing"}} {"origin_server_ts":1705342879182,"event_id":"$JcnnPNK9FWG-_hlrPmduTWDqjdFnf4qCyqVbwDlBsBo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: Well... :-)","msgtype":"m.text","formatted_body":"
                    Tortus<\/a>: Well... :-)"}} {"origin_server_ts":1705342917565,"event_id":"$fz_Nz9rnQaJTd33oCTQ55WwzJ8QySNkVx65rqMe-Ah8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The semantics of single char functions is inconsistent and might need rework. The property of \"single char\" is global.","msgtype":"m.text"}} {"origin_server_ts":1705342970778,"event_id":"$eCwSaMBcMPgBEQ91dlHK_sPSynz4uYov-QtFWE7oIpk","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"But is the function *actually accessible* from the outside","msgtype":"m.text","formatted_body":"But is the function actually accessible<\/em> from the outside"}} {"origin_server_ts":1705342988042,"event_id":"$e-YXESp9VhONz0rYy5i-QuX_k0mEcTsEQr3X8FockAE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"like let's say I include that file, would I be able to access it ","msgtype":"m.text"}} {"origin_server_ts":1705342996264,"event_id":"$kRpYsUw9mjedeJcouJtVQu3VmAVWkQ9tPd_-0v0hORk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: yes, but only if you export it separately, and then important that namespace from the receiver.","msgtype":"m.text","formatted_body":"Tortus<\/a>: yes, but only if you export it separately, and then important that namespace from the receiver."}} {"origin_server_ts":1705343048801,"event_id":"$4vMP6Ee2LpCN-Kf5XbCnCIRwceTLneA8QfIZWRkq6u4","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"so `:exportSingleChar` doesn't actually export it ","msgtype":"m.text","formatted_body":"so :exportSingleChar<\/code> doesn't actually export it"}} {"origin_server_ts":1705343054641,"event_id":"$p1r1AEX_qfM7qZD_-YCloDwN-p0Br940lHFj0M4Dqoc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"despite the name","msgtype":"m.text"}} {"origin_server_ts":1705343070678,"event_id":"$LMUniJSBYAFv21siCPEepi1X9Kg2YWItLj0Ax_FjjNk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, it doesn't.","msgtype":"m.text"}} {"origin_server_ts":1705343089950,"event_id":"$ILAVW7amC4FMU4DXLYcuOuyWCEbpEGTzvziU4AlvzAI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"🫠","msgtype":"m.text"}} {"origin_server_ts":1705343098842,"event_id":"$n8ny3rmTNTEZxy5YscEBBOmGfyUEhB_l8Yrp_CGKvJQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"that's good though","msgtype":"m.text"}} {"origin_server_ts":1705343109278,"event_id":"$90yPiEsfK0nT2R-hGECDifz0Cu7kyUHck0hyO4_JNKg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"let's keep that behaviour yes","msgtype":"m.text"}} {"origin_server_ts":1705343119014,"event_id":"$n0LTp--IM9ys6gwtUQAzlAJdZYE2cC_4yy7b7MEjqeo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"There used to be two declarations, `:singleChar` and `:singleCharExported`, but there were some issues with that.","msgtype":"m.text","formatted_body":"There used to be two declarations, :singleChar<\/code> and :singleCharExported<\/code>, but there were some issues with that."}} {"origin_server_ts":1705343265646,"event_id":"$0CTYLGoxaKALOlEQtPUooHhC_2Xae7__igTtWmlHXWE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It probably needs rework, but it needs to be designed first.","msgtype":"m.text"}} {"origin_server_ts":1705343287044,"event_id":"$4y5PwtvlONWz1tsuJEQ863OrY7vSYcbsMcBjDwkh7vI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"So what was the difference between `:singleChar` and `singleCharExported`","msgtype":"m.text","formatted_body":"So what was the difference between :singleChar<\/code> and singleCharExported<\/code>"}} {"origin_server_ts":1705343302592,"event_id":"$_NdsiFx8VDpmsh9n_TJ-9EDIzUBVDtEh25Ma8DHd1es","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"One was exported and the other not.","msgtype":"m.text"}} {"origin_server_ts":1705343318349,"event_id":"$t5IC-ikDioY9qDyBezPUxag6Q-t23JSmGZjPQ0BPS5Y","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"but nowadays, `:singleCharExported` is NOT exported?","msgtype":"m.text","formatted_body":"but nowadays, :singleCharExported<\/code> is NOT exported?"}} {"origin_server_ts":1705343328877,"event_id":"$6RBbj-_hMo-gDX2n4hagg7OSl1VH2HNJbJayOImoD9A","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"and `:singleChar` is not a valid symbol?","msgtype":"m.text","formatted_body":"and :singleChar<\/code> is not a valid symbol?"}} {"origin_server_ts":1705343341264,"event_id":"$RAPN0vaRT_WOui6pdPws3_VUz0gKUpFAQTK1yCRrfZc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I was going to say it was exported, but I just checked the code and no, it isn't.","msgtype":"m.text"}} {"origin_server_ts":1705343347534,"event_id":"$WED1_9Ggowld7WjbjkGuyXU5rbBuVrVEPj54fhb4ecU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"That's probably a bug.","msgtype":"m.text"}} {"origin_server_ts":1705343353456,"event_id":"$x3Cvz985Z7SEM_2E04vYJ9eSXhpIrRFwwIowZ6Ak3YE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"No, wait...","msgtype":"m.text"}} {"origin_server_ts":1705343360682,"event_id":"$LWZcSbvwesEqC0Jr3PjueCs-P1YAQuoSwiAtixTKnck","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It must be exported, or it wouldn't work.","msgtype":"m.text"}} {"origin_server_ts":1705343386016,"event_id":"$m1kaPlolrPK1N0b-Wk9zzgfpx6dMCGI-KQagi3sdIpk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I wrote the code long ago, so let me check again.","msgtype":"m.text"}} {"origin_server_ts":1705343422435,"event_id":"$2vbYS2-LYzBotxrBMEGdUB5xkkFnRxQaPyYV4isCdPA","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"🤔","msgtype":"m.text"}} {"origin_server_ts":1705343436371,"event_id":"$IQGWLWkOBFWQS58rfJDRTyU5zCqt6EN3iNeWMSkY3yE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Why do we want it exported?","msgtype":"m.text"}} {"origin_server_ts":1705343447304,"event_id":"$GPc0NchnFnGg4hMtvfNQLKMfs1yUD0u_sQ8BnvhN2mc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Wouldn't it be better to split the functionality into two distinct things","msgtype":"m.text"}} {"origin_server_ts":1705343467295,"event_id":"$gdjk7noqSVKtu1CMFYmoOmu0E8c5AzfsnDP8UHcV0p0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"so that we have the ability to declare a function as a `:singleChar` and NOT export it?","msgtype":"m.text","formatted_body":"so that we have the ability to declare a function as a :singleChar<\/code> and NOT export it?"}} {"origin_server_ts":1705343489421,"event_id":"$B764zmdVfdUXCUv6mgrYWkBtUZAEBBv5MGhP558FBeU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"All this just to say I wanna make a `⍰` idiom but others might not like it so I don't want them to see my shoddy work","msgtype":"m.text","formatted_body":"All this just to say I wanna make a ⍰<\/code> idiom but others might not like it so I don't want them to see my shoddy work"}} {"origin_server_ts":1705343604258,"event_id":"$5uwljvShul8PlEPYMhEldR4aOeoYSaT6MIb9hJV9nK8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I just did a git annotate on the singleChar stuff, and it was written in 2020","msgtype":"m.text"}} {"origin_server_ts":1705343611172,"event_id":"$3Qyv-r37-jrlsegTKdEiyk_XXNlO02uckd-kRXeiDOc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"This needs to be cleaned up.","msgtype":"m.text"}} {"origin_server_ts":1705343730596,"event_id":"$gIETRJb4enh_2SzJWSKCSKnzSPS44NbuWH6ahZRU_8A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Ah, OK. I was right. `:singleCharExported` doesn't export.","msgtype":"m.text","formatted_body":"Ah, OK. I was right. :singleCharExported<\/code> doesn't export."}} {"origin_server_ts":1705343778686,"event_id":"$VejEeKDj3AkDxCFJFAE2kcZLArZKn4IWE3BQoYyi_cY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"It appears you need to add a `declare(:export \"s\")` as well.","msgtype":"m.text","formatted_body":"It appears you need to add a declare(:export \"s\")<\/code> as well."}} {"origin_server_ts":1705343786163,"event_id":"$hFjTIluU7ofUwkr2fYdoJKUs_GZKDd58qSwOwDpJjbw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"It appears you need to add a `declare(:export s)` as well.","msgtype":"m.text","formatted_body":"It appears you need to add a declare(:export s)<\/code> as well."},"m.relates_to":{"event_id":"$VejEeKDj3AkDxCFJFAE2kcZLArZKn4IWE3BQoYyi_cY","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * It appears you need to add a `declare(:export s)` as well.","msgtype":"m.text","formatted_body":" * It appears you need to add a declare(:export s)<\/code> as well."}} {"origin_server_ts":1705343798835,"event_id":"$ywJN6dW6iYFqTTu2A_AeySqUVC8vTy-Yz7shHxuBhYI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"names 🫠","msgtype":"m.text"}} {"origin_server_ts":1705343897087,"event_id":"$za7AZ0j5XuA66-JCq3gF6NHeBllkcxwULYH0GbLWmRE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Well, thank you for clarifying for me; I'd of course suggest the name be changed to `:singleChar` but I mean, whatever","msgtype":"m.text","formatted_body":"Well, thank you for clarifying for me; I'd of course suggest the name be changed to :singleChar<\/code> but I mean, whatever"}} {"origin_server_ts":1705343916306,"event_id":"$y9UflrZxmDytlivYJW2Ctv0L161sJuPW7eeEBmg_KgY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, definitely. :-)","msgtype":"m.text"}} {"origin_server_ts":1705343919673,"event_id":"$FDopG5NmGcGerVoQtgKs9SGphNgAbV5EOf2Rehq616U","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Do you know anything about the `⍓` bug?","msgtype":"m.text","formatted_body":"Do you know anything about the ⍓<\/code> bug?"}} {"origin_server_ts":1705343940150,"event_id":"$5RP_-lpBQvuy_DWfpRHL8x_ZL4-UK4acW4DaoYWvswc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"The fact that I'm relegated to closed form is kinda ","msgtype":"m.text"}} {"origin_server_ts":1705343946779,"event_id":"$fLYBHik7KXio9nRBjLMJPIxx9Bv-VATymLZ9NPa88I0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"really really really really really irritating me","msgtype":"m.text"}} {"origin_server_ts":1705343966137,"event_id":"$7r_5qfvfnC1mNgcTg5tRnWVhtlyxWvLyzIKYomUFUew","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, there is a problem with allocating a new lexical context when you're already in the same one.","msgtype":"m.text"}} {"origin_server_ts":1705343988111,"event_id":"$s3TLVVOqSf6Bfu2jzYy6nn2KvIYwHoHA7kriSyBbgfg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's probably the most complicated part of the interpreter.","msgtype":"m.text"}} {"origin_server_ts":1705344070582,"event_id":"$1Ee2quf024RYWEw04-_0zi895uG1aNwQ60-GcM72hM0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I see 🤔","msgtype":"m.text"}} {"origin_server_ts":1705344111955,"event_id":"$51iuH8WRxlIdgzCtSrL_syOmugeAndnchd5YIEOqwG4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Basically, you end up trying to create a new stack frame with an environment when you're in that environment already.","msgtype":"m.text"}} {"origin_server_ts":1705344141133,"event_id":"$cClVbYeiSVQyboBH55b6ZgamdPTu8Vun27XsgD7C-Rs","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"reminds me a bit of TCO","msgtype":"m.text"}} {"origin_server_ts":1705344144565,"event_id":"$UBPaclSCvqC1Gabxu0U8nYaBglP54K--th63UbIGpeA","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"but TCO when you don't want TCO","msgtype":"m.text"}} {"origin_server_ts":1705344156581,"event_id":"$VJrVM1O9ypYaIHZ4cOQ9BMaIzW75R163a2HVVTMuz9U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"If it was TCO it'd be easy.","msgtype":"m.text"}} {"origin_server_ts":1705344166804,"event_id":"$bxehoE6nAeWylGa8JFZ0Hs8hO92MT2AaaHzh_dfqHNI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Then I could just lift that into a loop.","msgtype":"m.text"}} {"origin_server_ts":1705344189272,"event_id":"$BjIvq-3OC-1_K7U7adxTdgEozDkUbA4xpFXWyfB9vug","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"True","msgtype":"m.text"}} {"origin_server_ts":1705344225872,"event_id":"$f7UIthN4VqofuwuC5OR5GgedRcnqSFnTciQ-DQs6iuo","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Do you know what it's trying to do, or do you just know it doesn't work","msgtype":"m.text"}} {"origin_server_ts":1705344311624,"event_id":"$X8-8ShHcOboRzl6lcTkXJZ086BJUN7pYaq-qSCdB8aM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It used to work, but then I completely rewrote the way stack frames are allocated, and the approach I took didn't work anymore.","msgtype":"m.text"}} {"origin_server_ts":1705344328713,"event_id":"$elFmn10kjuKxUEVuDcRCnB0rwKzhgunUcZp0HZ1MjTU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It works as long as you don't expect local variables to work :-)","msgtype":"m.text"}} {"origin_server_ts":1705344389313,"event_id":"$zxBdIlCaI4Ov7pywSb-gVNBjpzKvfiJ6U0NseFJbIAc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"LOL ouch","msgtype":"m.text"}} {"origin_server_ts":1705344419353,"event_id":"$HysvmLcnGIIf8HXDmYs2M1XJ9-cbYg2SwgGFaRLAVok","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Where is it implemented? (if there's a singular place I can look in the interpreter code)","msgtype":"m.text"}} {"origin_server_ts":1705344456949,"event_id":"$FPcxUXai70OQGY57A3MZjgPCOLg9K58tQmlGY32I2iE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Essentially, what happens is that when you do the recursive call, renative stack frame references fail. Consider this:\n```\ne←1 ⋄ { b←⍵+e ⋄ ⍓ b } }\n```\nAnd ignore the fact that this will be an infinite loop.","msgtype":"m.text","formatted_body":"

                    Essentially, what happens is that when you do the recursive call, renative stack frame references fail. Consider this:<\/p>\n

                    e←1 ⋄ { b←⍵+e ⋄ ⍓ b } }\n<\/code><\/pre>\n

                    And ignore the fact that this will be an infinite loop.<\/p>\n"}} {"origin_server_ts":1705344518033,"event_id":"$YrLkHaJ5le9YdA14VRoKZ_epQjTa5w6TWysNCvxEMA4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"When happens is that the second call into the inner dfn will now refer to the parent stack frame (because that's what it found during parsing, the reference to `e` is a relative stack reference saying that the value can be found one frame above.","msgtype":"m.text","formatted_body":"When happens is that the second call into the inner dfn will now refer to the parent stack frame (because that's what it found during parsing, the reference to e<\/code> is a relative stack reference saying that the value can be found one frame above."}} {"origin_server_ts":1705344570366,"event_id":"$KidP8Xmdn46HPFLUX_u8qqwt8X2bT9e3sGVES1lYS34","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"So, the inner dfn must now be marked as an \"escaping\" frame. Escaping frames copy their references into the local stack frame in case a closure is created.","msgtype":"m.text"}} {"origin_server_ts":1705344631427,"event_id":"$DQRuSZzZAKh5XCI0538Z-F_NqSdP_5p4cU55se5vdJ4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I can't remember the details, but the issue had to do with how the parent stack frame is copied when then recursive call is made.","msgtype":"m.text"}} {"origin_server_ts":1705344690045,"event_id":"$uDqfKu1WOkYiVf1BhjcTtd0cL56DyFLWR_hEYaipw-A","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I guess the local stack frame isn't an exact copy of the local stack frame","msgtype":"m.text"}} {"origin_server_ts":1705344719807,"event_id":"$OmWoZuRwozt9M7ud6jBigTby7IgzuSjA3Mmkw7INCC0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"OH hmmmm this actually makes sense I think I see","msgtype":"m.text"}} {"origin_server_ts":1705344750687,"event_id":"$rF7M_dD1A0YwpxMEerde6AXRrnu3KneYm7SPJChCu04","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"oh loke is there supposed to be a `{` at the front","msgtype":"m.text","formatted_body":"oh loke is there supposed to be a {<\/code> at the front"}} {"origin_server_ts":1705344809580,"event_id":"$HT4TBxh0zUjOjd_5EuQnuw-6tLpwchl8oMS1qq51Oaw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"If you really want to subject yourself to understanding the gritty details of all of this, you can take a look here. This is the function that processes a dfn: https://codeberg.org/loke/array/src/branch/master/array/src/commonMain/kotlin/array/parser.kt#L987","msgtype":"m.text"}} {"origin_server_ts":1705344826783,"event_id":"$CbgLD5fusBVGcXLCZ4MawQTYKOc5aY9VJtB6BNz7IfY","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"THANK YOU","msgtype":"m.text"}} {"origin_server_ts":1705344843876,"event_id":"$2Lw_udQDX5zjyzzXC7eSTDTHYJyqp5pu5mcMSpdoH1c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$rF7M_dD1A0YwpxMEerde6AXRrnu3KneYm7SPJChCu04"}},"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> oh loke is there supposed to be a `{` at the front\n\nYes, there was","msgtype":"m.text","formatted_body":"

                    In reply to<\/a> @tortus:matrix.org<\/a>
                    oh loke is there supposed to be a {<\/code> at the front<\/blockquote><\/mx-reply>Yes, there was"}} {"origin_server_ts":1705344846336,"event_id":"$Pxw3gHyhf80HDcMOfK8vSiOkMYPAL4YvOX-G4kLo2Kw","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"k time to learn kotlin","msgtype":"m.text"}} {"origin_server_ts":1705344854980,"event_id":"$jGFGq8ps53UDm2Ns35PK1QeQjuKjdyykpzvROrbFyEI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$2Lw_udQDX5zjyzzXC7eSTDTHYJyqp5pu5mcMSpdoH1c"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Yes, there was\n\nkk awesome","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    Yes, there was<\/blockquote><\/mx-reply>kk awesome"}} {"origin_server_ts":1705344891981,"event_id":"$UDrl0OcNaMPXhG2Fyu24bVw0KbgbIOxfn4R5zRzOeiI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Imma look at the code and take 5ever to understand it while you get bored one day and solve it without me knowing, only for me to look back at what you did and be like oh lord you're a god","msgtype":"m.text"}} {"origin_server_ts":1705344910923,"event_id":"$FbYLnsZqRekIvOiLatel1b3gaduapeTLvJTTitzkxRU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Well have fun. :-)","msgtype":"m.text"}} {"origin_server_ts":1705344912397,"event_id":"$dmuGVsTrlaUqU0iscq4RZVGqiBQ-jSSnoaKomQS3LOs","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"thanks for all the guidance loke","msgtype":"m.text"}} {"origin_server_ts":1705344965678,"event_id":"$biMb8mk4he8JzM9nnFARPIrRSN6UzG75oM59GBDPBmY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Just so you know, an `Environment` is basically a stack frame, but during the parse step. When you run the code, a stack frame is allocated for the corresponding environment.","msgtype":"m.text","formatted_body":"Just so you know, an Environment<\/code> is basically a stack frame, but during the parse step. When you run the code, a stack frame is allocated for the corresponding environment."}} {"origin_server_ts":1705345059213,"event_id":"$TedYZ8pTmWcRZJ5v3q6TCLCQaoHHOr5lbndkkAClDto","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Gotcha","msgtype":"m.text"}} {"origin_server_ts":1705345085967,"event_id":"$6IsSe_XPIGdWfZOo9pADTkFd9rhVKXcCQPP_HFO1Kh0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The environment holds a map of all the local variables declared, but the actual layout of the stack frame is only decided later, after parsing is done. After the code is parsed, the compiler goes through all the environments are rewrites any references to parent stack frames, if the local frame can escape. This happens here: https://codeberg.org/loke/array/src/branch/master/array/src/commonMain/kotlin/array/closures.kt#L47","msgtype":"m.text"}} {"origin_server_ts":1705345090591,"event_id":"$65c0aO4l5Nl7UKbdEFEZBnpnG23UiwAjCqlRLqULm4E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Anyway","msgtype":"m.text"}} {"origin_server_ts":1705345092430,"event_id":"$3tPJmZD7MspYmeq9UyXAoVNg1ayY7elA0ixUUGoymkY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Time to sleep","msgtype":"m.text"}} {"origin_server_ts":1705346148187,"event_id":"$dPX5cm-bpRtY2eVbkt0flM3VK1pDQslEw3Ymb1QYbpY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks for asking the questions by the way. Even though I don't expect you to be able to fix this stuff, simply forcing me to explain it helps me visualise the problem.","msgtype":"m.text"}} {"origin_server_ts":1705346891611,"event_id":"$A4OK9JBcbsDHxLG-irGIg9uEudc_hvNK7GVkNpYstzI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$dPX5cm-bpRtY2eVbkt0flM3VK1pDQslEw3Ymb1QYbpY"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Thanks for asking the questions by the way. Even though I don't expect you to be able to fix this stuff, simply forcing me to explain it helps me visualise the problem.\n\nunintentional rubberduckying FTW","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    Thanks for asking the questions by the way. Even though I don't expect you to be able to fix this stuff, simply forcing me to explain it helps me visualise the problem.<\/blockquote><\/mx-reply>unintentional rubberduckying FTW"}} {"origin_server_ts":1705427339171,"event_id":"$DrHGQ4QDGfpich7VZfbjoCGdr0JwZ5tEZQ1ZsmQU7Bg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"How can I type a backtick in the repl","msgtype":"m.text"}} {"origin_server_ts":1705427435074,"event_id":"$DfCDN9ni9mg8JjDl9zAJxY2oWCVyql87EpdCSSfZAs8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: backquote followed by space.","msgtype":"m.text","formatted_body":"
                    Tortus<\/a>: backquote followed by space."}} {"origin_server_ts":1705427465459,"event_id":"$xGB5M1QuuQsS0sJis1yneOhK2TjhZuf-LGXHvJ2uODk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The character you set as prefix char can be typed by typing the prefix and space.","msgtype":"m.text"}} {"origin_server_ts":1705427527408,"event_id":"$JTsQkW3XI6fnWAjSSzcbD_QTdjaWxX0z0mN3rJjZSuw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The web UI says so in the welcome screen. Perhaps the JVM ui should do the same.","msgtype":"m.text"}} {"origin_server_ts":1705428738848,"event_id":"$g5WqXvQZODRRre55s9pXyVxtSCSoDfybkdZfdmgScPg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Well I think it's just a knowledge thing","msgtype":"m.text"}} {"origin_server_ts":1705428763476,"event_id":"$6XNGyOHyAF2JWIkKHI0qAEVm1RCu2UrkT6cm831s9YY","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"It should be in some documentation but no need to add unnecessary things to, say, the repl","msgtype":"m.text"}} {"origin_server_ts":1705430483577,"event_id":"$LJUuSjiozv7fteHgAzb91Abw6p8S-v322rpkS6EG_2c","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Also Loke","msgtype":"m.text"}} {"origin_server_ts":1705430491225,"event_id":"$Wg-wRqjRu3GWPxX8v4DW9lv235hmEhVOhRUQZvQRWCg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"mind I ask where OUTER_CALL_SYMBOL actually gets used","msgtype":"m.text"}} {"origin_server_ts":1705430514011,"event_id":"$g1mnnhvzlWToozg25IHJGa48dKYVE257lvotUwd5G-Q","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'm trying to look around in the code for the location where references are set, and where the environment is copied to the new stack frame","msgtype":"m.text"}} {"origin_server_ts":1705445427736,"event_id":"$LfsmDM6BLslaDibwFS5c1vMssm3jVv6NF3zTNjvZXL8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's not usd.","msgtype":"m.text"}} {"origin_server_ts":1705445439060,"event_id":"$Hoa90o6Ekc7X_5e9P0WdebHvPXA2FoiwnTjZkHJvO_0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"It's not used.","msgtype":"m.text"},"m.relates_to":{"event_id":"$LfsmDM6BLslaDibwFS5c1vMssm3jVv6NF3zTNjvZXL8","rel_type":"m.replace"},"body":"* It's not used.","msgtype":"m.text"}} {"origin_server_ts":1705445652368,"event_id":"$tAd989vShj-XUVgPpm7Tan2qvOwq5p9MC4YptMGgNik","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It was used back when this functionality worked. But since it was disabled, it's not referenced anymore ","msgtype":"m.text"}} {"origin_server_ts":1705461596971,"event_id":"$Fs92MHBSwP6E5DtF9dcUjz_0da4aBbs53JKj7fxGlP0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Tortus: If you want to see the commit where the old implementation was removed, it's here: bf7bb1bd4f7a4ba26800422e64294b2c4199f7cf","msgtype":"m.text","formatted_body":"Tortus<\/a>: If you want to see the commit where the old implementation was removed, it's here: bf7bb1bd4f7a4ba26800422e64294b2c4199f7cf"}} {"origin_server_ts":1705461651960,"event_id":"$jqbDEeviCCnXF0FM0Lm8M8Vb8tG_bIVIRT1Bq9opHiY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://codeberg.org/loke/array/commit/bf7bb1bd4f7a4ba26800422e64294b2c4199f7cf","msgtype":"m.text"}} {"origin_server_ts":1705464797177,"event_id":"$nlv7brrW19VnmoeRYPE6yRAf8HyNdSVhFTTIVTATEhQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I see","msgtype":"m.text"}} {"origin_server_ts":1705465346078,"event_id":"$A_aMMJ5lekZqvqevpE-yEFm04_Z55ax3CNSw7vI6LS4","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I kinda wanna make a clone with the buggy implementation in just so I can see what's going on","msgtype":"m.text"}} {"origin_server_ts":1705465403371,"event_id":"$Il05ufgc20Y9vs2AQSDNsp6f7stRrASxvz52ldpoQ4o","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"... if I wanna make a dent I'm gonna have to understand on a much deeper level how the KAP interpreter works... amn't I...","msgtype":"m.text"}} {"origin_server_ts":1705467026420,"event_id":"$S_BOOptMXJkjimVlYKJmdhLQd2800cD8OFp2LJi_m70","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Tortus: You can try reversing that patch and you'll see what happens.","msgtype":"m.text","formatted_body":"Tortus<\/a>: You can try reversing that patch and you'll see what happens."}} {"origin_server_ts":1705467460636,"event_id":"$IaWjzyO8pigNOV8mWRshABp9HHPihsfLA5qI97udiHg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The work leading up to this change was about a week's worth of work that was probably the most headache-inducing effort I've ever suffered through, leading up this this absolutely massive merge: https://codeberg.org/loke/array/commit/5b78071a2b68fe5888ad60b0fd91ab3298f74626","msgtype":"m.text"}} {"origin_server_ts":1705470973861,"event_id":"$fgLSKWrcQwjp6tiFofEPZoyM8o2NLOlLKvR_9uiCTXQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Seems the codebase has changed a lot since then, I will do more reading","msgtype":"m.text"}} {"origin_server_ts":1705470997051,"event_id":"$6GR_gQ79VixJ4wqZ3QO1aG2iSvUzE_EI_gXze231sfU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It has, although the particular fix can probably be re-merged.","msgtype":"m.text"}} {"origin_server_ts":1705471007178,"event_id":"$-aKL9tjp8Ye44JTFPsFwJXgN49DU8hbInoTEX2POsI8","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"which fix","msgtype":"m.text"}} {"origin_server_ts":1705471022635,"event_id":"$nJamdvIh-o4406JwNLVLJpH-pXJ2KjoaxBEPhAtkhVc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"bf7bb1bd4f7a4ba26800422e64294b2c4199f7cf","msgtype":"m.text"}} {"origin_server_ts":1705471032975,"event_id":"$nGJjgyK-TG0tcIfwZlhhcilRaA52umoZH7Ul2xGbch0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Oh the one I was looking at","msgtype":"m.text"}} {"origin_server_ts":1705471048780,"event_id":"$RG-zz-qsew-8EGdFX5SQww3PIxHanv2xMjWu9MDy-Io","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Well, I need to find a day where I'm a bit more motivated because... lots of manual labour and looking at types","msgtype":"m.text"}} {"origin_server_ts":1705471095577,"event_id":"$QCxsGV4UrFj54pWcEC7AwfqbMO4RbNSKDCsBEd3P1Xk","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"It shouldn't be THAT much work though, I'm just lazy 🫠","msgtype":"m.text"}} {"origin_server_ts":1705471095665,"event_id":"$egUquBtEXOV8SLqP5hupWGxuslBIVqE1IMEZUAWczOc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I hope you're loading it into IDEA. You're going to need the code browsing features if you want to follow the code flow.","msgtype":"m.text"}} {"origin_server_ts":1705471110226,"event_id":"$biOlzFLj8ERWR1CqnFHxwcSAmji08NeSp3kAJPMSJUY","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"No, I just raw dog a lot of these things","msgtype":"m.text"}} {"origin_server_ts":1705471145112,"event_id":"$y0BBOcM21upxUrhQraacmp2N4C7VIZcOao2RDhT-YS4","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I probably am gonna regret it for a codebase of this size, but honestly I think that's something I'd like to learn the \"hard\" way if that makes sense","msgtype":"m.text"}} {"origin_server_ts":1705471168309,"event_id":"$nvvKFgP4RYJ19jXtjzI0Tr7t6WXMyLzOHAjtkfnsml0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"but thank you for your advice, I shall keep it in mind","msgtype":"m.text"}} {"origin_server_ts":1705475711597,"event_id":"$2kWOR476wTNEg-xl4rgfE9z5gptFMqGTh5oeIOK5-64","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Being able to go to a stymbol and pressing Alt-f7 to show every place where that symbol is used is a real time-saver.","msgtype":"m.text"}} {"origin_server_ts":1705475755313,"event_id":"$XbWMJNPxBCzgwdOjB_z3KdGkSuEb8VyqpZuaOSQRFs8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Especially in Kotlin where a lot of the typing is implicit, so just searching for a name doesn't necessarily give you all the places where it's used.","msgtype":"m.text"}} {"origin_server_ts":1705515548718,"event_id":"$nhb7spE8akkILd92BriWX4S62vmQxpzylNUqjhbYjaQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"gotcha","msgtype":"m.text"}} {"origin_server_ts":1705617553634,"event_id":"$i7Avd5DaZgZfwOswKd3c3owCkVpqcm8P0yywWK16nlc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"btw. explanations in the IDE for \u2022 and ⌻ need to be swapped, they don't correspond to website's HTML reference","msgtype":"m.text"}} {"origin_server_ts":1705633222084,"event_id":"$HIW-g1c1132AB24V7xS6aOVJP8o4BkPEy9vGBKyWC6w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"sienet_ja_LSD: oops, you are indeed correct. I will fix it.","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: oops, you are indeed correct. I will fix it."}} {"origin_server_ts":1705672021388,"event_id":"$tAhMmkjnm14k-Vhkc6wscnD98apaiIYTLQUGnBAeEww","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$HIW-g1c1132AB24V7xS6aOVJP8o4BkPEy9vGBKyWC6w","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1705675948473,"event_id":"$eNdFX6AU9EZjeOvC1nyPEKRVNhw5tlp_TR-WXG6rIh8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: Fixed","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: Fixed"}} {"origin_server_ts":1705675977980,"event_id":"$Grc5nyF0teJIMlwsJuw-ML8JaRSAEbyWQd5B5ok1JBw","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$eNdFX6AU9EZjeOvC1nyPEKRVNhw5tlp_TR-WXG6rIh8","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1705675985161,"event_id":"$nCaRkAmpD6WXs9GGKMu8Tcr7TN4HFJXQok0n7OCKDMM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"thx, pulling it ","msgtype":"m.text"}} {"origin_server_ts":1705677925192,"event_id":"$Q7Is5KJJP9W3M87ae4uM1BnXO5TodNpZ07gyNgQPJNE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's literally just two strings being swapped :-)","msgtype":"m.text"}} {"origin_server_ts":1705677976847,"event_id":"$yugCrPFSbTwBs4Zd2ds7bwVkAUGaMn9Z6Nwt67qZL60","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Yesterday I implemented inverse `√`, although that's probably one of the least interesting features.","msgtype":"m.text","formatted_body":"Yesterday I implemented inverse √<\/code>, although that's probably one of the least interesting features."}} {"origin_server_ts":1705856445940,"event_id":"$LDvO9YFquXncheWSYZXWy6zzOiGiQcZ9fPskns8ryTo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"does KAP have (goto type of) labels for branching? thinking about legacy APL code and how to rewrite it in KAP","msgtype":"m.text"}} {"origin_server_ts":1705856994566,"event_id":"$dGTthFdxYMv7hzTqCayYNhDoN1LaLZcffKcKXG6Rojw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: No, it doesn't. You could build a custom syntax extension to support it though. It'd look something like:\n```\ntagbody {\n 1 {...}\n 2 {...}\n 3 {... goto 1 }\n}","msgtype":"m.text","formatted_body":"

                    sienet_ja_LSD<\/a>: No, it doesn't. You could build a custom syntax extension to support it though. It'd look something like:<\/p>\n

                    tagbody {\n  1 {...}\n  2 {...}\n  3 {... goto 1 }\n}\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1705857031253,"event_id":"$pysVUV93_aUMNYppUfAv7DAQzHx7OAAzCdFdWo3NfeE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$dGTthFdxYMv7hzTqCayYNhDoN1LaLZcffKcKXG6Rojw","rel_type":"m.annotation","key":"🙏"}}}
                    {"origin_server_ts":1705857045913,"event_id":"$RZNRrtU314X2PZikULlrcIC554zh0s6B7XPXneoMeJo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I think the necessary features exist that would allow you to build this as a syntax extension.","msgtype":"m.text"}}
                    {"origin_server_ts":1705857334064,"event_id":"$Z8bE20380g_HadBBa8bwDaNMmlO0A4Bwpap7uiaurxo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I think with some creative use of custom syntax and try/catch, one should be able to do it. Labels wouldn't be limited to numbers, but any value in fact.","msgtype":"m.text"}}
                    {"origin_server_ts":1705857344991,"event_id":"$41oeY3_BYih-bF4BueELalX-tOWinqvhPscbkhjri98","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Perhaps I will build it if I'm bored :-)","msgtype":"m.text"}}
                    {"origin_server_ts":1705857496102,"event_id":"$M2p1IlUgomgUdYPr-kPvE0Wz2cBl5S08Bk1kcw5hjF4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I mean those old APL routines branch a lot with goto to different directions, I'm thinking of some sort of way to untangle that branching. would I need to write each line of APL as its own function block and then wrap the if/else structures around them? ","msgtype":"m.text"}}
                    {"origin_server_ts":1705857528594,"event_id":"$8MZ9Zz66T4aFVi27ZwkYj5l9bEHaBH_2Qid7FIArCAA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"No, that would not be necessary. Only the jump targets would be needed.","msgtype":"m.text"}}
                    {"origin_server_ts":1705857552197,"event_id":"$5bRhZAOSTCmE6z67A3nEGJghTEZB6H_vCOuCN78UjdY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye","msgtype":"m.text"}}
                    {"origin_server_ts":1705895823470,"event_id":"$3OdRsssbcrCeT1tSLnOk1HUbSY614ZGX_BYCwhl89uo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"sienet_ja_LSD:  OK, I implemented it in plain Kap without any language changes","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>:  OK, I implemented it in plain Kap without any language changes"}}
                    {"origin_server_ts":1705895830822,"event_id":"$iSuQsoGtqp4iTYwI9LqZNbF4bMz1V59AMCiYfxu2pE0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Here's what you can do:","msgtype":"m.text"}}
                    {"origin_server_ts":1705895838697,"event_id":"$11f9BGLmyyhoiTiIjVtkeHqjb4rdcQC4mU_arNoiR0o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\ntagbody { \n    (1)    { io:println \"a\" ⋄ go :foo }\n    (2)    { io:println \"b\" ⋄ go 4 }\n    (:foo) { io:println \"c\" ⋄ go 2 }\n    (4)    { io:println \"last line\" }\n}\n```","msgtype":"m.text","formatted_body":"
                    tagbody { \n    (1)    { io:println \"a\" ⋄ go :foo }\n    (2)    { io:println \"b\" ⋄ go 4 }\n    (:foo) { io:println \"c\" ⋄ go 2 }\n    (4)    { io:println \"last line\" }\n}\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1705895882558,"event_id":"$38sAAtkcTrud9tQjLeOLCHFLevwM54qkj2bYB7DA2_E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Here's the implementation:\n```\ndefsyntaxsub tagbodyInner (:value tag :nfunction statement :optional (:special :newline)) {\n\ttag statement\n}\n\ndefsyntax tagbody (:special :openBrace :optional (:special :newline) :repeat (entryList tagbodyInner) :special :closeBrace) {\n\ti ← 0\n\n\twhile (i<≢entryList) {\n\t\t(tag entry) ← ⊃entryList[i]\n\t\t{ ⍞entry null ⋄ i ← i+1 } catch 1 2 ⍴ 'go λ{i ← 1 ⍳⍨ (⍺≡↑)¨ entryList}\n\t}\n}\n\n∇ go (tag) {\n\t'go throw tag\n}\n```","msgtype":"m.text","formatted_body":"

                    Here's the implementation:<\/p>\n

                    defsyntaxsub tagbodyInner (:value tag :nfunction statement :optional (:special :newline)) {\n\ttag statement\n}\n\ndefsyntax tagbody (:special :openBrace :optional (:special :newline) :repeat (entryList tagbodyInner) :special :closeBrace) {\n\ti ← 0\n\n\twhile (i<≢entryList) {\n\t\t(tag entry) ← ⊃entryList[i]\n\t\t{ ⍞entry null ⋄ i ← i+1 } catch 1 2 ⍴ 'go λ{i ← 1 ⍳⍨ (⍺≡↑)¨ entryList}\n\t}\n}\n\n∇ go (tag) {\n\t'go throw tag\n}\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1705926832680,"event_id":"$zQlDtm39_D2AzYQpXpV7KGYmjOmNuIFnGDWCg4JIxco","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$38sAAtkcTrud9tQjLeOLCHFLevwM54qkj2bYB7DA2_E","rel_type":"m.annotation","key":"🙏"}}}
                    {"origin_server_ts":1705926861307,"event_id":"$MtEGkwVetMU85r0zOvUt3uCNFXNt1YR5Ey-p88TFCgg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"Thank you, it's very helpful","msgtype":"m.text"}}
                    {"origin_server_ts":1705957910920,"event_id":"$Zzr86FkEU9z2-PIJCCUxjbPVD1g2N1RBVrVrGuM_lTY","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"WHOA YOU CAN DEFINE NEW SYNTAX???","msgtype":"m.text"}}
                    {"origin_server_ts":1705957915672,"event_id":"$Zw0eMdSlUuSrNiasIPViHBwbSejvWx9W1ob-5yvtsm8","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"that's COOL","msgtype":"m.text"}}
                    {"origin_server_ts":1705979795135,"event_id":"$qxR_F9pNxy7SAEXSa83QntUdOGaLK-bEGWjbLRqznik","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Tortus: yes. That's how the flow control statements are implemented. They're just custom syntax defined in the standard lib","msgtype":"m.text","formatted_body":"Tortus<\/a>: yes. That's how the flow control statements are implemented. They're just custom syntax defined in the standard lib"}}
                    {"state_key":"@plumenator:matrix.org","origin_server_ts":1705985421016,"event_id":"$0fsXDvDL58T7qh4ezvXAPj9OckywpVcWCe4glGX84y4","sender":"@plumenator:matrix.org","user_id":"@plumenator:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/iFWlsxJRYergotuMOZoxqAEQ","displayname":"plumenator","membership":"join"}}
                    {"origin_server_ts":1706095930138,"event_id":"$togZbc4YYKjGJITaItSrsT9-1zT-ZGsFMSs6Nl7tWEA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$11f9BGLmyyhoiTiIjVtkeHqjb4rdcQC4mU_arNoiR0o"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> ```\n> tagbody { \n>     (1)    { io:println \"a\" ⋄ go :foo }\n>     (2)    { io:println \"b\" ⋄ go 4 }\n>     (:foo) { io:println \"c\" ⋄ go 2 }\n>     (4)    { io:println \"last line\" }\n> }\n> ```\n\ntrying this out gives an error at the first encounter of 'go', Error at: 2:31: Variable not assigned: default:go","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                    tagbody { \n    (1)    { io:println \"a\" ⋄ go :foo }\n    (2)    { io:println \"b\" ⋄ go 4 }\n    (:foo) { io:println \"c\" ⋄ go 2 }\n    (4)    { io:println \"last line\" }\n}\n<\/code><\/pre>\n<\/blockquote><\/mx-reply>trying this out gives an error at the first encounter of 'go', Error at: 2:31: Variable not assigned: default:go"}}
                    {"origin_server_ts":1706095949809,"event_id":"$4hAO-NWkheGQp_8jBrhT5JJBFbWcRGwMFEWN7rT3ntk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"it prints a though","msgtype":"m.text"}}
                    {"origin_server_ts":1706096013152,"event_id":"$rpao1OmwRQZNftOPpywwuy2uf6gdCb-qe4sWIcj5ZZM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"running the defsyntax prints 'default:tagbody' but using it does not work","msgtype":"m.text"}}
                    {"origin_server_ts":1706097645413,"event_id":"$QQMETE3lEVyzedtpHa3EijquUZN9194YTBPWFW69JSk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You need to run the defsynax and the function definition furst","msgtype":"m.text"}}
                    {"origin_server_ts":1706097654274,"event_id":"$yexBI2AgIdxblJe9HJH0KvRN_foW9el1_rXB8j0vqgs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"You need to run the defsynax and the function definition first","msgtype":"m.text"},"m.relates_to":{"event_id":"$QQMETE3lEVyzedtpHa3EijquUZN9194YTBPWFW69JSk","rel_type":"m.replace"},"body":"* You need to run the defsynax and the function definition first","msgtype":"m.text"}}
                    {"origin_server_ts":1706097768593,"event_id":"$oYaOzmaAhQzoaZwapFPHRbBedy7mn_VqXWdC-TXmP4Q","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I did, it prints 'default:tagbody'","msgtype":"m.text"}}
                    {"origin_server_ts":1706098595517,"event_id":"$RsxbZU_O4jpal_47XrZ2Jke8I1TpPVM3BA9H163PcZc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right. That's the definition ","msgtype":"m.text"}}
                    {"origin_server_ts":1706098626754,"event_id":"$SffoQoU3CePdh5BKAZh-7E3A1vvYjMQTpiYg9Ou5wLo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh wait. My ordering was all wrong","msgtype":"m.text"}}
                    {"origin_server_ts":1706098644352,"event_id":"$7LUHp7xsTiR_yQgyNTjEGKkoyTisyO8dFbh3105fzPI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You need the go definition first, then the defsyntax","msgtype":"m.text"}}
                    {"origin_server_ts":1706098651080,"event_id":"$iM_tF5fJMHtRM-vGvUgm0K3POu53ohh1aLuGxU5V9qk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Then you can run it","msgtype":"m.text"}}
                    {"origin_server_ts":1706098733216,"event_id":"$1iQsMmyZY8qqVpwBukFMggCrN3sfHDg7oc7sqchQmEs","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"if I swap the order of defsyntax and defsyntaxstub I still get the same error","msgtype":"m.text"}}
                    {"origin_server_ts":1706098749586,"event_id":"$H6J6uHdpFcSIBTFRpOMHczE26pLKIjidvDJsnhbEhPY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"if I swap the order of defsyntax and defsyntaxsub I still get the same error","msgtype":"m.text"},"m.relates_to":{"event_id":"$1iQsMmyZY8qqVpwBukFMggCrN3sfHDg7oc7sqchQmEs","rel_type":"m.replace"},"m.mentions":{},"body":" * if I swap the order of defsyntax and defsyntaxsub I still get the same error","msgtype":"m.text"}}
                    {"origin_server_ts":1706098815736,"event_id":"$Bh1hHhtbIybaEYM_W2OC3y4IDslu9JcD9WQWZVTMilM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"actually swapping the order gives me an error saying that syntax sub rule does not exist","msgtype":"m.text"}}
                    {"origin_server_ts":1706098826303,"event_id":"$Jhs46uA74BgLBG0nVDCIuOIRm-poHCYpiB-AHQfKG70","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"so defsyntaxsub first","msgtype":"m.text"}}
                    {"origin_server_ts":1706098916607,"event_id":"$F9lSyFm47Q2aFQiNKSmaTYUrUs2f1sRrL5Mq1Jp9DvU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"but I'm stuck wwith the variable not assigned error","msgtype":"m.text"}}
                    {"origin_server_ts":1706098927748,"event_id":"$oETi6MV9luq_Zc_DAYZRrG12pZs4-Quab-0fCsC92VU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"but I'm stuck with the variable not assigned error","msgtype":"m.text"},"m.relates_to":{"event_id":"$F9lSyFm47Q2aFQiNKSmaTYUrUs2f1sRrL5Mq1Jp9DvU","rel_type":"m.replace"},"m.mentions":{},"body":" * but I'm stuck with the variable not assigned error","msgtype":"m.text"}}
                    {"origin_server_ts":1706100116646,"event_id":"$sPMnOjIubAqXJruJUFsEP5N3xAbQKSbWY-kYM_D1IF0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The order should be:","msgtype":"m.text"}}
                    {"origin_server_ts":1706100140765,"event_id":"$h99fO5_NS9kP1RLf7qpWpFjJOUBlYjnyyIyDR51t2O0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Define the go function, defsyntaxsub, defsyntax","msgtype":"m.text"}}
                    {"origin_server_ts":1706101699072,"event_id":"$oFHV_F4_Ebs9ynELUJTbNaTt4l3EourUZjOKVT5SkV4","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1706101756217,"event_id":"$K8rWO3fSJ0_STWOO73rzXSfN76KDXPjjDEJIeYQokKA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","unsigned":{"age":17247666437},"redacts":"$oFHV_F4_Ebs9ynELUJTbNaTt4l3EourUZjOKVT5SkV4","type":"m.room.redaction","content":{"redacts":"$oFHV_F4_Ebs9ynELUJTbNaTt4l3EourUZjOKVT5SkV4"},"age":17247666437},"sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{}}
                    {"origin_server_ts":1706101756217,"event_id":"$K8rWO3fSJ0_STWOO73rzXSfN76KDXPjjDEJIeYQokKA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","redacts":"$oFHV_F4_Ebs9ynELUJTbNaTt4l3EourUZjOKVT5SkV4","type":"m.room.redaction","content":{"redacts":"$oFHV_F4_Ebs9ynELUJTbNaTt4l3EourUZjOKVT5SkV4"}}
                    {"origin_server_ts":1706101772521,"event_id":"$JzIa_0T9OoUmTt6MiTK4EEkvbPHHT5ILKduubpNiFrk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye ","msgtype":"m.text"}}
                    {"origin_server_ts":1706106996247,"event_id":"$sU4CB_panOebyaYOVxutEI_k1M9d8uWcRKNGfBYbuq8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Did it work? ","msgtype":"m.text"}}
                    {"origin_server_ts":1706113602075,"event_id":"$W0y-akXWGqQitnZSfAKFf7BGkIfICfjO5DgZ4btr0Ng","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"well I didn't define any particular go function myself :D so no ","msgtype":"m.text"}}
                    {"origin_server_ts":1706114576600,"event_id":"$WGcOdLboG5-D_Pf0bVVOxaq_R8-KrvaWnI1bzZ4tJ1k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The go function just looks like this.","msgtype":"m.text"}}
                    {"origin_server_ts":1706114579039,"event_id":"$smrnLbu7E7eAurET17ITAlVlOrHIIrZlEfSt9t6xvoE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"∇ go (tag) { 'go throw tag } ","msgtype":"m.text"}}
                    {"origin_server_ts":1706114602071,"event_id":"$0mWLXFvZTybctehldBL6N3utCXLnqnCjIX13X8ueoSg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You need to run that first. ","msgtype":"m.text"}}
                    {"origin_server_ts":1706114731469,"event_id":"$YqmDUvY7uDC89-4thEYT2zg81pGiiDXk3zhJWMz96SE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye now it works! thank you","msgtype":"m.text"}}
                    {"origin_server_ts":1706174133770,"event_id":"$WAbTmvzUgIiUP_FBbvkBcPKetwsSwnzcelOi_ZJ6LoA","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1706174224055,"event_id":"$zVSSHSwbpSBfjTbnJsDq8UY1rO1LSLq6ei5KehIRNww","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$WAbTmvzUgIiUP_FBbvkBcPKetwsSwnzcelOi_ZJ6LoA","type":"m.room.redaction","content":{"redacts":"$WAbTmvzUgIiUP_FBbvkBcPKetwsSwnzcelOi_ZJ6LoA"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                    {"origin_server_ts":1706174224055,"event_id":"$zVSSHSwbpSBfjTbnJsDq8UY1rO1LSLq6ei5KehIRNww","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$WAbTmvzUgIiUP_FBbvkBcPKetwsSwnzcelOi_ZJ6LoA","type":"m.room.redaction","content":{"redacts":"$WAbTmvzUgIiUP_FBbvkBcPKetwsSwnzcelOi_ZJ6LoA"}}
                    {"origin_server_ts":1706300579241,"event_id":"$dFMT_u7YeHk87Aiugjntm36pbohS64g3yIFL1qo2QRk","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Is there a way to destructure an array nicely in KAP","msgtype":"m.text"}}
                    {"origin_server_ts":1706300710516,"event_id":"$XCOGaLGOq_wTzj81IwrQ7Uzlrgb6Dfq77GwzuhlbX3g","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`(a b c)←⍳3` seems to work.","msgtype":"m.text","formatted_body":"(a b c)←⍳3<\/code> seems to work."}}
                    {"origin_server_ts":1706301773904,"event_id":"$HBJaw2g98OBXVzsYrmQs9RFfW-FupKRGPxmy7VTti6Q","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Hm","msgtype":"m.text"}}
                    {"origin_server_ts":1706301775981,"event_id":"$_tOKCE-X_OaeOJ7ooGWuOkhcA2xk3JJS8Ft3vvIp6Zg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Thank you","msgtype":"m.text"}}
                    {"origin_server_ts":1706301781225,"event_id":"$FsktGgWz_oGe0SnQbNX2oztVYMpKCYrE7CNrWD8S47A","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I must have forgotten brackets","msgtype":"m.text"}}
                    {"origin_server_ts":1706302081566,"event_id":"$qqrX0GvMkRGaHI_FpEFPH1rJaj2jGvn2zhCaP_ru2pc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Dyalog doesn't use them, but it's ambiguous because `a b←c` can be either destructuring or modified assignment if `b` is a function.","msgtype":"m.text","formatted_body":"Dyalog doesn't use them, but it's ambiguous because a b←c<\/code> can be either destructuring or modified assignment if b<\/code> is a function."}}
                    {"origin_server_ts":1706302137799,"event_id":"$3fK5O8netqxWzVojZhkT4TRrMVeQZLAGqhvbL2w2qfg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The error message \"Can only assign to a single variable\" could definitely stand to say something about parens.","msgtype":"m.text","formatted_body":"The error message \"Can only assign to a single variable\" could definitely stand to say something about parens."}}
                    {"origin_server_ts":1706302424024,"event_id":"$g2Doma_mZbBv2utWTsEcKMkdiC7PTUX2ahpzYxKa-b4","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I see","msgtype":"m.text"}}
                    {"origin_server_ts":1706302426972,"event_id":"$N0NOyTPqbQTbKDezR5hUbIOJcntFIicClGTD6sgkkfU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Thank you for the help!!!","msgtype":"m.text"}}
                    {"origin_server_ts":1706304025747,"event_id":"$VpWCHr9z3Fi7KL-LhcsqIky8T0aSh15gXewXpaRg--8","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"something doesn't feel right about this:","msgtype":"m.text"}}
                    {"origin_server_ts":1706304026749,"event_id":"$8FFSr7q925hOGKhJwcrZxeoj1f03TpfMpA1-9RykjIQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"```","msgtype":"m.text","formatted_body":"
                    <\/code><\/pre>\n"}}
                    {"origin_server_ts":1706304030179,"event_id":"$7EJASmAnj6Ga4q2pktUlZgON6Oawa91qvSZrIwZPpIM","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"err how do I","msgtype":"m.text"}}
                    {"origin_server_ts":1706304033217,"event_id":"$nRUuIWr1Oh0wobNX_eTqSML507Nr86aX75i4AQNDpyg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"```\n b(+.×)⌹b\n┌→─────────────────────┐\n↓               1.0 0.0│\n│3.6666666666666665 1.0│\n└──────────────────────┘\n```","msgtype":"m.text","formatted_body":"
                     b(+.×)⌹b\n┌→─────────────────────┐\n↓               1.0 0.0│\n│3.6666666666666665 1.0│\n└──────────────────────┘\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1706304035532,"event_id":"$qR5IEYa9qvPpFnZn_izMdP9_oU_6VqsB1EocqtvnuM0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"there we go","msgtype":"m.text"}}
                    {"origin_server_ts":1706304042787,"event_id":"$-j86dpiYfT5uD8_ht3w7eJnU4bT9zflHs2v0KpcNVoE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"something's up with this","msgtype":"m.text"}}
                    {"origin_server_ts":1706304111049,"event_id":"$nDLXOgA5DprDBieCM3ViXWNB0uKSxX27cL92VMWtzso","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"yeaaaaahhhhh uhhhhhhhhh `⌹` is just straight up wrong I believe","msgtype":"m.text","formatted_body":"yeaaaaahhhhh uhhhhhhhhh ⌹<\/code> is just straight up wrong I believe"}}
                    {"origin_server_ts":1706304174017,"event_id":"$wMoVQHwfoOuZXFXPbELa_LlzCAGYSnJnCk_wqTn-DTA","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"`b←2 2⍴⍳4`, then `⌹b` gives ```\n┌→─────────────────────┐\n↓0.3333333333333333 0.5│\n│               1.0 0.0│\n└──────────────────────┘\n```\nwhen it should be \n```\n¯1.5 0.5\n1.0 0.0\n```\nI believe.","msgtype":"m.text","formatted_body":"

                    b←2 2⍴⍳4<\/code>, then ⌹b<\/code> gives ```
                    ┌→─────────────────────┐
                    ↓0.3333333333333333 0.5│
                    │ 1.0 0.0│
                    └──────────────────────┘<\/p>\n

                    when it should be \n<\/code><\/pre>\n

                    ¯1.5 0.5
                    1.0 0.0<\/p>\n

                    I believe.\n<\/code><\/pre>\n"}}
                    {"origin_server_ts":1706304184192,"event_id":"$5uYhC82oe-9CDedsNsSfIy6zwgwktRKQB3GnbX-LiIo","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"oh this stupid matrix formatter HWATEVER","msgtype":"m.text"}}
                    {"origin_server_ts":1706304194441,"event_id":"$-1dXe2Es_wSeiaITGWXf7mBUJJkvsm03Ef4_a1ixB_E","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"does this at least seem making sense","msgtype":"m.text"}}
                    {"origin_server_ts":1706304574658,"event_id":"$lUEm7DPIUxQhfmz1hmGxMmdFCiY4F6G7A33nBZTB_9Q","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, looks like a bug. Maybe a mistake in pivoting?","msgtype":"m.text","formatted_body":"Yeah, looks like a bug. Maybe a mistake in pivoting?"}}
                    {"origin_server_ts":1706304604095,"event_id":"$YaeAufNYiy050Xaj7oep_ElPRFVLkUUVWEzXnITpgu4","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Do you understand how the matrix inverse algorithm works?","msgtype":"m.text"}}
                    {"origin_server_ts":1706304606465,"event_id":"$nGoL2aQb49hbDOvzqdTbwelWpxtwlJa3hkXavir5aZg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"or what it's called?","msgtype":"m.text"}}
                    {"origin_server_ts":1706304616425,"event_id":"$5aJ0mAMAh_ZsMpiparkwvUwXC5eKVphGeEl6ioeezDY","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'd like to try to make a fix cuz I NEED it to work","msgtype":"m.text"}}
                    {"origin_server_ts":1706304618795,"event_id":"$un0mEI821MHFCU6tXv5xL0XLSdyr1ZBjfuQy9LiqAQY","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"like soon","msgtype":"m.text"}}
                    {"origin_server_ts":1706304639045,"event_id":"$ZG-uDzJLZx7Z_OBQrJO_eFZaO1zoLUtYhcOjRtSwiTg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"otherwise I gotta go over to BQN where matrix mults and divs are like 10x longer","msgtype":"m.text"}}
                    {"origin_server_ts":1706304655126,"event_id":"$Jsc06TUl3i_dc6Z9YCZY9e_A17Zq_dtSJrQJywsO1JY","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"no shade meant, BQN is better than KAP at other things","msgtype":"m.text"}}
                    {"origin_server_ts":1706304668195,"event_id":"$pN8C32C47JDxiztoYtnjQtiHpWAQcI4A3cGX6oEe_Gw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I haven't looked at KAP's, but I can check.","msgtype":"m.text","formatted_body":"I haven't looked at KAP's, but I can check."}}
                    {"origin_server_ts":1706304681502,"event_id":"$2Z3ZvfxSYXpmxPqMhyXG7yhiipBvOyuo6Dbzl85rxhw","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"If you want I can send it here","msgtype":"m.text"}}
                    {"origin_server_ts":1706304689086,"event_id":"$EWukZ5LO0ziiYplgaF6getaSTLc9V05lME0Gilyrl4s","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"it's in the standard lib at `math-kap.kap`","msgtype":"m.text","formatted_body":"it's in the standard lib at math-kap.kap<\/code>"}}
                    {"origin_server_ts":1706304912878,"event_id":"$1j1lTonRbStjr5syAqOE_RInNZyyRPfaEg-XiW3dnww","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh, this implementation just has no pivoting.","msgtype":"m.text","formatted_body":"Oh, this implementation just has no pivoting."}}
                    {"origin_server_ts":1706304973567,"event_id":"$4w_bQ_2URi9o5eeRPhTpOA3SVW7SdXQjWsqYcLItjak","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"what's pivoting","msgtype":"m.text"}}
                    {"origin_server_ts":1706305006101,"event_id":"$QXfwf8ZmyR77BfT7CainveNiraXZ4hMkMfUWV1AEq5Y","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"nvm I'll google it","msgtype":"m.text"}}
                    {"origin_server_ts":1706305006947,"event_id":"$ebT33GNIPvWhbvKfauEb1dO_npRoc2Zr317_wmMapc4","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"sorry","msgtype":"m.text"}}
                    {"origin_server_ts":1706305067414,"event_id":"$z6JTlcQz-vRPLQ_RjaXCyQTUfbMC9VnPijvUa8bqgL8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Wait, is `Rinv` the inverse function? I don't see it defined as monadic `⌹`.","msgtype":"m.text","formatted_body":"Wait, is Rinv<\/code> the inverse function? I don't see it defined as monadic ⌹<\/code>."}}
                    {"origin_server_ts":1706305092290,"event_id":"$99tfDq9970SavRCYrWs1Kxr50mEuN2w0qxc3KGamZCs","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"No, `⌹` is the inverse function","msgtype":"m.text","formatted_body":"No, ⌹<\/code> is the inverse function"}}
                    {"origin_server_ts":1706305110760,"event_id":"$KE_5ZgEn6MtDnU3IlDtR8grV3RLy8VATtBiQjI6bcT4","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"monadic `⌹` is defined  as like","msgtype":"m.text","formatted_body":"monadic ⌹<\/code> is defined  as like"}}
                    {"origin_server_ts":1706305123084,"event_id":"$RZUM87sihMtsI6vWZW5gpz_QpXxZmCHEif7hOtDTwWU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"well, it's all defined in one function that checks if `⍺` is locally bound","msgtype":"m.text","formatted_body":"well, it's all defined in one function that checks if ⍺<\/code> is locally bound"}}
                    {"origin_server_ts":1706305135488,"event_id":"$y7MXt61wVWin6cRzhn63ZlFXZguJZNR4_iival9YTDE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Monadic `⌹` is the latter half of that functino","msgtype":"m.text","formatted_body":"Monadic ⌹<\/code> is the latter half of that functino"}}
                    {"origin_server_ts":1706305148584,"event_id":"$AFrzROjacVkGgFEm6fxufyOm1MObGGw1NIbbSeYG96w","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Ah, I see. But it is using `Rinv`.","msgtype":"m.text","formatted_body":"Ah, I see. But it is using Rinv<\/code>."}}
                    {"origin_server_ts":1706305187896,"event_id":"$CPR52dFYLVUrPUXgEy077VRkTDK2pccLw9cMKJc8XdI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, it's for sure using tht","msgtype":"m.text"}}
                    {"origin_server_ts":1706305189389,"event_id":"$Drt7rV3pF_zEB7BuoAbu5i2a9EuX015ImNtubzM6pVk","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Yeah, it's for sure using that","msgtype":"m.text"},"m.relates_to":{"event_id":"$CPR52dFYLVUrPUXgEy077VRkTDK2pccLw9cMKJc8XdI","rel_type":"m.replace"},"m.mentions":{},"body":" * Yeah, it's for sure using that","msgtype":"m.text"}}
                    {"origin_server_ts":1706305237153,"event_id":"$5zV6-IlCicp4JA6jLhWSAQOEmhgCyLImEne8ehP8_fo","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Based on the function name, I assume it's using QR decomposition,","msgtype":"m.text"}}
                    {"origin_server_ts":1706305255048,"event_id":"$sJQcUvV-0EY1six_xg3fLOGM3YIefgMz67CD9BsZXN0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"then we can calculate using transpose Q and `triangular inverse` using `Rinv`","msgtype":"m.text","formatted_body":"then we can calculate using transpose Q and triangular inverse<\/code> using Rinv<\/code>"}}
                    {"origin_server_ts":1706305272305,"event_id":"$e4-QGdKuvm75dPkhVHAyJFhlXIRq-mgZhe52VOPJ-VY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, just figured that out. And neither of those need pivoting.","msgtype":"m.text","formatted_body":"Yeah, just figured that out. And neither of those need pivoting."}}
                    {"origin_server_ts":1706305310380,"event_id":"$7PoZBKU4lnRdjjSFQP4bbLTeHqYlo298_KiG1SRlvSQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think that's the same as the matrix.bqn algorithm.","msgtype":"m.text","formatted_body":"I think that's the same as the matrix.bqn algorithm."}}
                    {"origin_server_ts":1706305339849,"event_id":"$AOEYSnhuzZvMD4DkMFrh5H1t_7DNG7-sVopI1pahUA0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"That's fair","msgtype":"m.text"}}
                    {"origin_server_ts":1706305494279,"event_id":"$s3pkNemTQSUpXPTykBsKMmdg7hX1MJbV_wyks9i01qc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"yeah, `Rinv` is wrong","msgtype":"m.text","formatted_body":"yeah, Rinv<\/code> is wrong"}}
                    {"origin_server_ts":1706306434047,"event_id":"$GdcCABCTJ_EfybkUrIVl4bsWdkQTal4iqX09sGanD2k","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"currently trying to look for an algorithm to easily invert an upper triangular","msgtype":"m.text"}}
                    {"origin_server_ts":1706307063604,"event_id":"$AuUMSPzzR-FidgiuhAPwXRhczw4oAJe0cpPkxV3rxr8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"BQN's is [here](https://github.com/mlochbaum/bqn-libs/blob/master/matrix.bqn#L20-L31), somewhat complicated by handling both lower and upper.","msgtype":"m.text","formatted_body":"BQN's is here<\/a>, somewhat complicated by handling both lower and upper."}}
                    {"origin_server_ts":1706307073769,"event_id":"$gwr4nfOCn_3H_hKC7-JJ3JdiJOAZyt9ZPKF7YowCBXw","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Gonna see if back substitution is doable","msgtype":"m.text"}}
                    {"origin_server_ts":1706307089986,"event_id":"$LhD_Ta6oIkn04xFW5A7dxCMJGiukBIAA3pm02QF6Zig","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$AuUMSPzzR-FidgiuhAPwXRhczw4oAJe0cpPkxV3rxr8"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> BQN's is [here](https://github.com/mlochbaum/bqn-libs/blob/master/matrix.bqn#L20-L31), somewhat complicated by handling both lower and upper.\n\nVery beautiful, and thank you","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    BQN's is
                    here<\/a>, somewhat complicated by handling both lower and upper.<\/blockquote><\/mx-reply>Very beautiful, and thank you"}} {"origin_server_ts":1706307107667,"event_id":"$T_ogjZTQ9I4fiwYB9rH_gJijLh7sRAmYiKcP8D7Ifug","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"I have to do some math on the parts to see what the algorithm will be","msgtype":"m.text"}} {"origin_server_ts":1706307324123,"event_id":"$rlMHXmvuFimuOaO4DFuDsW0Y7_Kpd6IM3tpewmTv-lQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I don't see any differences from `Rinv` though. Last line is the only part that's not a straightforward translation, since BQN makes a block of 0s where Kap overtakes.","msgtype":"m.text","formatted_body":"I don't see any differences from Rinv<\/code> though. Last line is the only part that's not a straightforward translation, since BQN makes a block of 0s where Kap overtakes."}} {"origin_server_ts":1706307379370,"event_id":"$uhDd018i3YroSqLqHJYcM3hdQAgwJzYWbj473HJ3is0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Both of these are surely translated from [Roger's](https://code.jsoftware.com/wiki/Essays/QR_Decomposition), by the way.","msgtype":"m.text","formatted_body":"Both of these are surely translated from Roger's<\/a>, by the way."}} {"origin_server_ts":1706307520848,"event_id":"$IcWJHF3Bmm9Jk0bE9_VUqE4R4HlH4C5LPKBQj7HoQHY","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Well if that\u2019s the case I just wonder if BQN and KAP give the same results for the Rinv function","msgtype":"m.text"}} {"origin_server_ts":1706307543480,"event_id":"$I9mz9fhzYwicL0dvY4NxGybdiGof2ryFoY81yN2ARbI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"If they don\u2019t then that\u2019s expected but if they do, it would confuse me greatly. ","msgtype":"m.text","formatted_body":"If they don\u2019t then that\u2019s expected but if they do, it would confuse me greatly."}} {"origin_server_ts":1706307560593,"event_id":"$Lx9Di8nBharaYzV4_HmbuxYKOcPOZn0skczB7YQdlpA","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"I also just so happen to be unable to read J","msgtype":"m.text"}} {"origin_server_ts":1706307619356,"event_id":"$2U6cG4rccgiVeBRaWWC-juk8rN5ySwzTBDoHC7FbJ5Q","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Doesn't look like it: upper right corner is 1/3 in Kap and ¯1.5 in BQN if I did it right (input is `2 2⍴2 3 0 1`).","msgtype":"m.text","formatted_body":"Doesn't look like it: upper right corner is 1/3 in Kap and ¯1.5 in BQN if I did it right (input is 2 2⍴2 3 0 1<\/code>)."}} {"origin_server_ts":1706307696375,"event_id":"$5Eej1HtiEDyj3r6v-QMxCxd0LwEBiCnBbuXMOlcmIq4","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Yeah","msgtype":"m.text"}} {"origin_server_ts":1706307702333,"event_id":"$WU2YY5qo1Tk6xq20njqTgBw_KFix-KY0QlV5eLwpXQU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Well lets see\u2026 ","msgtype":"m.text","formatted_body":"Well lets see\u2026"}} {"origin_server_ts":1706307728032,"event_id":"$jvmQqfCAMM16XSYBDabpWMcAY91VJhxQtcnqlWSf73M","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"There must be something wrong with the last line then","msgtype":"m.text"}} {"origin_server_ts":1706307913426,"event_id":"$ecoj3S_MW1KoIoFuW6O1ztTm1DXCvemdPq-P_fjANcQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"What function are you comparing to on the BQN side, marshall?","msgtype":"m.text"}} {"origin_server_ts":1706307956800,"event_id":"$GN7N3MV2pBw6hm6kdoXNqi7LAEX1KpgkZJkKsvT1Ujk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'm just printing out intermediate results from `Inverse`, but I think `uTri.Inverse` will work too.","msgtype":"m.text","formatted_body":"I'm just printing out intermediate results from Inverse<\/code>, but I think uTri.Inverse<\/code> will work too."}} {"origin_server_ts":1706307983552,"event_id":"$X5jdC5lvQKB6Tp15Zm7NpQ0hP7hXpVmW2LhZDebgKv8","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Oh I see it","msgtype":"m.text"}} {"origin_server_ts":1706308123285,"event_id":"$P-AGQVg1euvpyLi8auy8zT-f4lpYzCfghZhdzwgXTgs","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Time to read bqn primitives cuz i forgot what bowtie does","msgtype":"m.text"}} {"origin_server_ts":1706308147740,"event_id":"$bdU8-BEEbqL93IIUmE7j2dDR0FPMPUrEt6Iu1YbHPVw","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$P-AGQVg1euvpyLi8auy8zT-f4lpYzCfghZhdzwgXTgs","rel_type":"m.annotation","key":"😅"}}} {"origin_server_ts":1706308175773,"event_id":"$qRyIpaLJKOEIGzoMKT0Ysb5goxH3dKzY8GA3Iq_i_44","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$P-AGQVg1euvpyLi8auy8zT-f4lpYzCfghZhdzwgXTgs","rel_type":"m.annotation","key":"😅"}}} {"origin_server_ts":1706308248520,"event_id":"$5Zig5iwuOCbCrfm7YyWaJQ97RhW9yd7JxSEQwX2KQoI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Trying to put `io:println` in the middle of `Rinv` in the web client but it doesn't print anything. Does it just not work there?","msgtype":"m.text","formatted_body":"Trying to put io:println<\/code> in the middle of Rinv<\/code> in the web client but it doesn't print anything. Does it just not work there?"}} {"origin_server_ts":1706308320024,"event_id":"$1d_1b36lSsnX5pcLd3MPlYYBrQgUrdXeNNe38pvoxh8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh wait, it just goes into the `if (n = 1)` branch. What?","msgtype":"m.text","formatted_body":"Oh wait, it just goes into the if (n = 1)<\/code> branch. What?"}} {"origin_server_ts":1706308542237,"event_id":"$gTCwVY15sWQAtDQ_AxoStnnMb1UVgPYR3DAMe5Dkw9s","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Well, defining `n ← ≢B` instead of `n ← 1↑⍴B` works. Or `n ← ↑⍴B`.","msgtype":"m.text","formatted_body":"Well, defining n ← ≢B<\/code> instead of n ← 1↑⍴B<\/code> works. Or n ← ↑⍴B<\/code>."}} {"origin_server_ts":1706308563424,"event_id":"$i4TSCY6h_ugXaHbTCgZONSJcdZObjDVeYkztR9rReB4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So `if` treats `,0` as truthy.","msgtype":"m.text","formatted_body":"So if<\/code> treats ,0<\/code> as truthy."}} {"origin_server_ts":1706308565273,"event_id":"$022D88lYQYSAvoIqNyyBAs88NecFXyImUU6PXyisXxc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Oh it\u2019s the uh","msgtype":"m.text"}} {"origin_server_ts":1706308570833,"event_id":"$Fak1psUD79IPFgu5sCbKbJj0Cc_PAR2yNWEiZFGdL9w","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Yeah conditional","msgtype":"m.text"}} {"origin_server_ts":1706308587737,"event_id":"$fxoYxbgqcwbzWrS6g6eM9fzfNexb1-jZXLBtH1vyRcM","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Yeah. Is that a big","msgtype":"m.text"}} {"origin_server_ts":1706308589303,"event_id":"$Gb-JamF-0QUgmpixVgIloG_kEljsTSLPcIP5_oFv2OM","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Bug","msgtype":"m.text"}} {"origin_server_ts":1706308614079,"event_id":"$eQXv85KJmMXtWJ_XFOA5YCchH0PGdSxrQ85RFQT45aU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Does the whole inverse function just work if thats fixed","msgtype":"m.text"}} {"origin_server_ts":1706308616326,"event_id":"$CgX6Xip1Vp87oEw1ZruqCnY8PC2UKjnMLU4TyM8b4a4","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Hm","msgtype":"m.text"}} {"origin_server_ts":1706308779028,"event_id":"$X8x5W1eSftlvsb4ab0OhK7DosKyNdcEaOg7FnOvK8Mw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"And `QR` uses `(⍴B)[1]` which is a scalar so it should avoid this problem.","msgtype":"m.text","formatted_body":"And QR<\/code> uses (⍴B)[1]<\/code> which is a scalar so it should avoid this problem."}} {"origin_server_ts":1706308784488,"event_id":"$ilOhE1IELgE4DJB4u24wV5JflT-pH6hHeQM90W8XInA","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"After some quick bus testing it still seems broken ish but its so nice knowing the bug","msgtype":"m.text"}} {"origin_server_ts":1706308802490,"event_id":"$0qjOV-R7rryaHHvcMwwKmRHT3Yuk7w7y5HWDERLkMB0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Tfw ur so poor u do ur software development on the bus","msgtype":"m.text"}} {"origin_server_ts":1706308903597,"event_id":"$vykgQr3wrKTkAtkO5xxB4gAwW1gycWO2WyenuHtRApU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Aaaa my tests are null and void","msgtype":"m.text"}} {"origin_server_ts":1706308913246,"event_id":"$IsbPcQ2jEdpYcIG8x4jANnB_NDYe2aA2WbAq1yVGlGs","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"I used a non invertible matrix by mistaek","msgtype":"m.text"}} {"origin_server_ts":1706308959641,"event_id":"$1MgViUV2AjLcFACFvFBIvkzRd8hp8fZ8kZD57MTf1sg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"By the way, I think pretty much all the time for these algorithms is taken up by the matrix product. So if you replace `MP` in matrix.bqn with a call to some BLAS implementation it should end up much faster. Although I'd very much understand not wanting to work with BLAS.","msgtype":"m.text","formatted_body":"By the way, I think pretty much all the time for these algorithms is taken up by the matrix product. So if you replace MP<\/code> in matrix.bqn with a call to some BLAS implementation it should end up much faster. Although I'd very much understand not wanting to work with BLAS."}} {"origin_server_ts":1706308989596,"event_id":"$NaWwJv-00E3aAB-UGuwcRrvpyi0ljPJioMfuhsTzUm8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Although Kap is presumably at least a little slower when it doesn't skip half its matrix products.","msgtype":"m.text","formatted_body":"Although Kap is presumably at least a little slower when it doesn't skip half its matrix products."}} {"origin_server_ts":1706309182572,"event_id":"$y2P55PNnBAi4QggOjAqUek-_9xgnBaHTlMdFjnGtC1w","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"I see","msgtype":"m.text"}} {"origin_server_ts":1706309208272,"event_id":"$_0MzQ0z66H6f38APspd8qdy_wyyE-NQ0uJ-fsjEYRhU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Well correctness before speed","msgtype":"m.text"}} {"origin_server_ts":1706310552028,"event_id":"$SKAQfHgLlnNw5RPC9V6-5H4QT5FAqje7-XuE7JRJ9LE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$5Zig5iwuOCbCrfm7YyWaJQ97RhW9yd7JxSEQwX2KQoI"}},"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Trying to put `io:println` in the middle of `Rinv` in the web client but it doesn't print anything. Does it just not work there?\n\nthey're in the kap namespace, so kap:Rinv","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Trying to put io:println<\/code> in the middle of Rinv<\/code> in the web client but it doesn't print anything. Does it just not work there?<\/blockquote><\/mx-reply>they're in the kap namespace, so kap:Rinv"}} {"origin_server_ts":1706310684633,"event_id":"$8ZI7yr8LO7jn7UWgFAfxAgEkbPpBidwyJNdLPOfWNF8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Well I had just copied the definition. But `io:println` works fine; the problem was that whole section of code was never run.","msgtype":"m.text","formatted_body":"Well I had just copied the definition. But io:println<\/code> works fine; the problem was that whole section of code was never run."}} {"origin_server_ts":1706310890895,"event_id":"$9NQ6si0GGy2Afa1jtUZHoaCKyno_RCNvwwrP1-6HiXk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye I couldn't get it to work even if I replaced n ← 1↑⍴B with n ← ≢B ","msgtype":"m.text"}} {"origin_server_ts":1706322962577,"event_id":"$qNL8S72TEGlthWnyV3V2_0dzzVHrZbXHRBiKtOGxaVg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$8ZI7yr8LO7jn7UWgFAfxAgEkbPpBidwyJNdLPOfWNF8"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Well I had just copied the definition. But `io:println` works fine; the problem was that whole section of code was never run.\n\nI just woke up. Sorry about this. The implementation is based on the one from ngn","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Well I had just copied the definition. But io:println<\/code> works fine; the problem was that whole section of code was never run.<\/blockquote><\/mx-reply>I just woke up. Sorry about this. The implementation is based on the one from ngn"}} {"origin_server_ts":1706323206586,"event_id":"$Rlu8LTGLhHYRaKHuNZwEblLnyC57qz2UXejPWa7nDWA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Is the `if (,0)` behavior intentional though?","msgtype":"m.text","formatted_body":"Is the if (,0)<\/code> behavior intentional though?"}} {"origin_server_ts":1706323307664,"event_id":"$xzaTnkBzl_LZU9bg28KVhyv8LzBoXm0h5urOAn0nGS4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. Anything except 0 is true. ","msgtype":"m.text"}} {"origin_server_ts":1706323346350,"event_id":"$XAVHm0VhSpWlxnJvw0WQONMMmet2Ve3FiEH5YiCrRYA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It didn't used to be though, so perhaps that triggered a bug in the implementation that wasn't picked up by a test case. ","msgtype":"m.text"}} {"origin_server_ts":1706323419948,"event_id":"$ygPL1JciHlCUzWcobTLPjvz23IOwGWz22-LlRqD8FCA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"That would make sense. I'd require the condition to be boolean, personally.","msgtype":"m.text","formatted_body":"That would make sense. I'd require the condition to be boolean, personally."}} {"origin_server_ts":1706323559499,"event_id":"$c-bATPeFItFgMlJO1nESDi4lx5QGR9Sj1CKPLcVTfWE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You mean error on anything not 0 or 1?","msgtype":"m.text"}} {"origin_server_ts":1706323660711,"event_id":"$Rr_VoddGe4CVZSa1SduuBQKZYcGv0NPjYBDzoIUl18E","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yes. That's just about what Dyalog guards do (\"Boolean singleton value required\").","msgtype":"m.text","formatted_body":"Yes. That's just about what Dyalog guards do (\"Boolean singleton value required\")."}} {"origin_server_ts":1706326904171,"event_id":"$JARuEnjsPB5T4YvEENe5BGypXCo4AFGADEQnRo1upt0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That would be acceptable I think.","msgtype":"m.text"}} {"origin_server_ts":1706327001141,"event_id":"$ds_RG4BS002zGdlpmvh-lt7ZQNPG8eMVt3DPe1l0SLg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: do you have a testcase for the matrix division bug so I can inlcude it in the tests? The fix is just to compare to the first element instead of the array?","msgtype":"m.text","formatted_body":"
                    Marshall<\/a>: do you have a testcase for the matrix division bug so I can inlcude it in the tests? The fix is just to compare to the first element instead of the array?"}} {"origin_server_ts":1706354113507,"event_id":"$fLOuVWCAlNBcYIialuRLxNOPhfmFh9xbP2fyEnfAKmQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"I feel like it would be a great disservice to force the function to error like that in all cases, I wonder if there\u2019s some way that the universal coverage could be kept?","msgtype":"m.text"}} {"origin_server_ts":1706354154704,"event_id":"$DvEsC8p04gfGEMZ9wO4XYO7tcxhHfp1xV81peWMxMq0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"I completely see good reasons for the erroring but at the same time, having anything be passable into the condition seems ULTRA convenient","msgtype":"m.text"}} {"origin_server_ts":1706358607222,"event_id":"$438uDtgj87jTvU8scWFqJIWgs6uQ0hOB6trjiSaskZw","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"dyalog computes ⌹3 3⍴1 2 3 4 15 16 7 18 9 correctly but KAP gives you something different","msgtype":"m.text"}} {"origin_server_ts":1706358682878,"event_id":"$6tgIVNSTpbt--pfycnDP2nEwX0ZgIQGvkYFAgbyd8tY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks. I'll fix it.","msgtype":"m.text"}} {"origin_server_ts":1706361950228,"event_id":"$CR-MFU029485W2PTQe1pevjchPmLDAxIvCHo-TdoHbE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: OK, fixed.","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: OK, fixed."}} {"origin_server_ts":1706361972385,"event_id":"$JenljeiuS7D1t4bLYPjx2d5O3DaPDm5gQISr5mApz1g","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"nice nice, pulling it","msgtype":"m.text"}} {"origin_server_ts":1706362291168,"event_id":"$v_QLfnpjbHCLucj9BRfJv-WMuzULkbDIiHxCBUiCt1I","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye seems to work","msgtype":"m.text"}} {"origin_server_ts":1706362327575,"event_id":"$kxDBb-4rvzPxrmzdtgAODufn-Gzm9Hr_Fzdm3bYKMyM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"(checked with mathworks for reference)","msgtype":"m.text"}} {"origin_server_ts":1706421321396,"event_id":"$-SBKS04H8xzafmczdYm2fVIv1rlzkFoNCuTr6ap2buk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Question: Should this be the default rendering of rationals in the web ui?","msgtype":"m.text"}} {"origin_server_ts":1706421322110,"event_id":"$XubdV87DOKv2LaG_JvChrqwg9YODg32rOPoxIKLB6js","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#o3%3AtypeToFormatter%20%E2%86%90%20o3%3AtypeToFormatter%20mapPut%20'kap%3Arational%20%CE%BB%7B%20%3C%20(%E2%8D%95math%3Anumerator%20%E2%8D%B5)%20%2C%20%40%5Cu2044%20%2C%20(%E2%8D%95math%3Adenominator%20%E2%8D%B5)%20%7D%0A(1%2B%E2%8D%B330)%C3%B72","msgtype":"m.text"}} {"origin_server_ts":1706421375482,"event_id":"$qEX_HblgLsdfEPkz1ZkhcLmtG-pt4VL5rmTYY8nBs6A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It looks pretty good int he browser, as well as when rendered in the standard UI of a lot of Linux applications. However, it may not always render perfectly everywhere else.","msgtype":"m.text"}} {"origin_server_ts":1706421402025,"event_id":"$FAjYdlarTEyDf-yYB5wni2w8Eokk4vqJOukBgMF8CGM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's up to whatever draws the characters to make U+2044 draw properly.","msgtype":"m.text"}} {"origin_server_ts":1706421481180,"event_id":"$F3OR1dskxCxSimOzsWMPE2FdIPmp9wItuSRQ3CgCh54","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$DvEsC8p04gfGEMZ9wO4XYO7tcxhHfp1xV81peWMxMq0"}},"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> I completely see good reasons for the erroring but at the same time, having anything be passable into the condition seems ULTRA convenient\n\nThat's my thought as well, and that comes from Lisp where NIL is false and everything else is true.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @tortus:matrix.org<\/a>
                    I completely see good reasons for the erroring but at the same time, having anything be passable into the condition seems ULTRA convenient<\/blockquote><\/mx-reply>That's my thought as well, and that comes from Lisp where NIL is false and everything else is true."}} {"origin_server_ts":1706421655720,"event_id":"$OPAe_Z1QLauH7dqzvQGRhIx0yB2M_hse-uez4IlsbDo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Konsole with whatever font I'm using looks a bit weird:","msgtype":"m.text"}} {"origin_server_ts":1706421657041,"event_id":"$RERaC1iPE1dgRcyg7M_fOYJmUR7I1j701fCK3rSedIQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://dhsdevelopments.com/eQTfWfKUBSGnZSWDrCEVdlkB","info":{"xyz.amorgan.blurhash":"L5S6Pm000000~qM_WBxu%MM{oext","size":8355,"w":638,"h":153,"mimetype":"image/png"}}} {"origin_server_ts":1706421851626,"event_id":"$onEjmLT0sGbjTNo4WAl0cM-Gvbwm60D8YrMS3Hjw0dE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Mate terminal looks even worse:","msgtype":"m.text"}} {"origin_server_ts":1706421852489,"event_id":"$NRL7QNruF2CeiwXYfJXd95kxCGTFCctgqzHZ3kbkFIg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://dhsdevelopments.com/sThQTlINUvBTnbfklqWJkEMl","info":{"xyz.amorgan.blurhash":"L7SF;LIBM{t7~qD%Rjt7xuIUWBt7","size":5509,"w":413,"h":99,"mimetype":"image/png"}}} {"origin_server_ts":1706421887256,"event_id":"$fG8IWuQ5MMfgEf00LeRWUXa3JEWos_fCj7sfICvIWTk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"It looks pretty good in the browser, as well as when rendered in the standard UI of a lot of Linux applications. However, it may not always render perfectly everywhere else.","msgtype":"m.text"},"m.relates_to":{"event_id":"$qEX_HblgLsdfEPkz1ZkhcLmtG-pt4VL5rmTYY8nBs6A","rel_type":"m.replace"},"m.mentions":{},"body":" * It looks pretty good in the browser, as well as when rendered in the standard UI of a lot of Linux applications. However, it may not always render perfectly everywhere else.","msgtype":"m.text"}} {"origin_server_ts":1706437925535,"event_id":"$8E7Ayr9GQYzLA1Kqa2Ag_Wx8_M2dUOqFzZLCv0OABro","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"for web that seems to work fine","msgtype":"m.text"}} {"origin_server_ts":1706441939070,"event_id":"$sZBaKBxf9X22uiXb3eJJj1npS_wIgNMzFc_zuGrLLOU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"sienet_ja_LSD: yes. But everywhere else it's hit and miss.","msgtype":"m.text","formatted_body":"
                    sienet_ja_LSD<\/a>: yes. But everywhere else it's hit and miss."}} {"origin_server_ts":1706442072281,"event_id":"$yVwRNSPDARpEaCEJuKfNuYNMbcOpbBqTaLxAhfXIzIc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"if you want to have two separate codebases or sets of configurations.... ","msgtype":"m.text"}} {"origin_server_ts":1706442131873,"event_id":"$l8lX5GYhyYbxRgrQevbyP3uCZwDa2VlCmSnDgfSzsK4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"but since web is already its own target why not","msgtype":"m.text"}} {"origin_server_ts":1706443417477,"event_id":"$lWDWJGhKoSh09t7kAm9MQsHnplxcozSZ7UoT69OreVU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Sure. I could make it dependent on backend.","msgtype":"m.text"}} {"origin_server_ts":1706443465016,"event_id":"$GVUrZu8MTqjH1XG0pTAmi3OcAsL1J82Naq61rULZZRo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Or I could make it more easily configurable and set it to default.","msgtype":"m.text"}} {"origin_server_ts":1706443532813,"event_id":"$kGU4d8QyGKSq7yIyGscGadrfXCE9YsvJcC0Yx4YUiq0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Is the fraction slash style definitely an improvement? ","msgtype":"m.text"}} {"origin_server_ts":1706443565925,"event_id":"$Mq1CosNu23rSJEhHgqf0CgBhF1zz14aLoNmNDqay4us","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"some people prefer to see decimals, but imho yes","msgtype":"m.text"}} {"origin_server_ts":1706443591602,"event_id":"$PU3mSQ2swC0qwI2eg3ZHk9joY_nF8h4GxxajfEFU-t4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"if you can do something akin to quad to turn it on and off","msgtype":"m.text"}} {"origin_server_ts":1706444962635,"event_id":"$bJIYDN9Diw-_CrUIQoab2xuJ09klrMX1U3z63glFLzg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You can't represent a fractional number using decimals.","msgtype":"m.text"}} {"origin_server_ts":1706445003188,"event_id":"$UHeA2yIwznf4EJJOYqU4VMPFVxJkXoZIKphM5WkPsCs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Well, you can with some but not all","msgtype":"m.text"}} {"origin_server_ts":1706445014124,"event_id":"$zreSsNR46jRm5zFxGaKYDK1VYgMsYvnw6X5_jnrgcfk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"sure, sure","msgtype":"m.text"}} {"origin_server_ts":1706445038299,"event_id":"$2E73I8F1feEv33As3zt98PQoK1kYydt8eYokJWhS7kA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"it looks good in the web client so yeah","msgtype":"m.text"}} {"origin_server_ts":1706530294020,"event_id":"$5MrrNUEhjVZBRm0KgiRINC_rUQ_cKm09L8LpAE0qwB8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: does bqn have axis labels or something similar? ","msgtype":"m.text","formatted_body":"Marshall<\/a>: does bqn have axis labels or something similar? "}} {"origin_server_ts":1706534698144,"event_id":"$-uDsUuEVNXW1EkGohxtqV274v2C6SVQ1Tm1jpjj_5RM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No, nothing like that at all. You'd store labels in a separate list I suppose.","msgtype":"m.text","formatted_body":"No, nothing like that at all. You'd store labels in a separate list I suppose."}} {"origin_server_ts":1706537923086,"event_id":"$_-jiAgHUCqhghWhwWmWJD4riwVXn8i4tnosm4bkr5so","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: I have a convenience function I call `cols` that gives me the columns with the given labels (useful when working on CSV or Excel data that was imported with headers). The definition is like so: `{ ⍉(⊂⍺ ⍳⍨ labels ⍵) ⌷ ⍉⍵ }`","msgtype":"m.text","formatted_body":"Marshall<\/a>: I have a convenience function I call cols<\/code> that gives me the columns with the given labels (useful when working on CSV or Excel data that was imported with headers). The definition is like so: { ⍉(⊂⍺ ⍳⍨ labels ⍵) ⌷ ⍉⍵ }<\/code>"}} {"origin_server_ts":1706537976510,"event_id":"$vNKzEmEyxlZ_VgHr7-k3pTgC2k0t6KRqOQQpFhG2sF8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Ideally it should be part of the standard library, or, the same functionality could be had by overloading `⊇` and `⌷` for string arguments. The latter feels a bit ugly, but the former requires a better name.","msgtype":"m.text","formatted_body":"Ideally it should be part of the standard library, or, the same functionality could be had by overloading ⊇<\/code> and ⌷<\/code> for string arguments. The latter feels a bit ugly, but the former requires a better name."}} {"origin_server_ts":1706551930538,"event_id":"$4bUj2l3erHJHNcHkguZ3rLfVuSBeiMb-FNryOJ37DXo","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"label_columns ?","msgtype":"m.text"}} {"origin_server_ts":1706552243210,"event_id":"$Rne41kjwrYXLquOwrR0WWYT8e15TLzQnIpjRJ6p3Fus","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"As much as I'm not a huge fan of the ever persistent searvh for brevity, this is one case where I would like the syntax to be brief.","msgtype":"m.text"}} {"origin_server_ts":1706553314073,"event_id":"$y2eHM13YEPMWv7_Q7cXvpwon8o0uYoN2DNbtV7_MmaM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"As much as I'm not a huge fan of the ever persistent search for brevity, this is one case where I would like the syntax to be brief.","msgtype":"m.text"},"m.relates_to":{"event_id":"$Rne41kjwrYXLquOwrR0WWYT8e15TLzQnIpjRJ6p3Fus","rel_type":"m.replace"},"body":"* As much as I'm not a huge fan of the ever persistent search for brevity, this is one case where I would like the syntax to be brief.","msgtype":"m.text"}} {"origin_server_ts":1706554226272,"event_id":"$a-1lzzjnyrNCGCF8O1bT_sjZPslOL1GYB087DUdQwtw","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"But in this case the brevity comes at the cost of clarity I believe","msgtype":"m.text"}} {"origin_server_ts":1706554251745,"event_id":"$926471POynu82v7VC8vnZY6uG_Eb3rNveqNkcxmWJQQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"The use case is specific enough that you would need some kind of context","msgtype":"m.text"}} {"origin_server_ts":1706554275248,"event_id":"$_FLT67prnPnFyDsvhfjufs0cgDlrPGi42ERNZ5nK16c","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"CSV_labels maybe?","msgtype":"m.text"}} {"origin_server_ts":1706973547305,"event_id":"$pAVgpGHOlc4HM7qSBK9gzaB8LZhzIPbmSmdt-OcN-X0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, I just removed my custom implementation of complex arithmetic and moved to Kotlin maths.","msgtype":"m.text"}} {"origin_server_ts":1706973548748,"event_id":"$zSJokfPguC_XZ23LsBKjEjgbujs7jwWE9wR2GxLaR5o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"OK, I just removed my custom implementation of complex arithmetic and moved to Kotlin math.","msgtype":"m.text"},"m.relates_to":{"event_id":"$pAVgpGHOlc4HM7qSBK9gzaB8LZhzIPbmSmdt-OcN-X0","rel_type":"m.replace"},"m.mentions":{},"body":" * OK, I just removed my custom implementation of complex arithmetic and moved to Kotlin math.","msgtype":"m.text"}} {"origin_server_ts":1706973566774,"event_id":"$EiLbui2HcEpW1RIZP174s5BRoU6vU3pTBKsB_Bt5TVw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"This also means that all the trig functions are now implemented, with proper support for complex numbers.","msgtype":"m.text"}} {"origin_server_ts":1706973624945,"event_id":"$cMvzADsNp8sA5-XBYUuytSQWV07Orthet6KYu7-YSno","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"(previously, I didn't support complex numbers for the arc-functions, and the hyperbolic ones weren't implemented at all)","msgtype":"m.text"}} {"origin_server_ts":1706977359942,"event_id":"$BRNkC85fiMXGJFlzTViNvpxnNr6Tsz2Tkr_XyfeI8EA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$pAVgpGHOlc4HM7qSBK9gzaB8LZhzIPbmSmdt-OcN-X0","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1706979518013,"event_id":"$jzmlagXY_GXcn6d0F-6HtuCrm2yeGjPGLjgaluWY-8g","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"going to listen to this tonight https://www.arraycast.com/episodes/episode72-kap","msgtype":"m.text"}} {"origin_server_ts":1706980262120,"event_id":"$MnTjzRfyDxpDMpXrayJ5RlPvss7tuju9whwcDe5fyKs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: :-)","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: :-)"}} {"origin_server_ts":1706980890624,"event_id":"$4LCnVVyCPr6uCd1BPQzDwx1c6BOxiI9fqfEKpW9f1Ys","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1706980892685,"event_id":"$g6vhUAWIiUZaj6mnlVa8b8MTYVmu59WMPsnY8dJ0AsM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$4LCnVVyCPr6uCd1BPQzDwx1c6BOxiI9fqfEKpW9f1Ys","type":"m.room.redaction","content":{"redacts":"$4LCnVVyCPr6uCd1BPQzDwx1c6BOxiI9fqfEKpW9f1Ys"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.reaction","content":{}} {"origin_server_ts":1706980892685,"event_id":"$g6vhUAWIiUZaj6mnlVa8b8MTYVmu59WMPsnY8dJ0AsM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$4LCnVVyCPr6uCd1BPQzDwx1c6BOxiI9fqfEKpW9f1Ys","type":"m.room.redaction","content":{"redacts":"$4LCnVVyCPr6uCd1BPQzDwx1c6BOxiI9fqfEKpW9f1Ys"}} {"origin_server_ts":1706980894023,"event_id":"$iF2WPHEwNYrzP58y4MHklctvq8U7VnhOTdtRQubcMrU","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1706980895647,"event_id":"$3Z-7GpIDeffMnp7jv6MCup15uT6VPrAEFpICY-GI8U8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$iF2WPHEwNYrzP58y4MHklctvq8U7VnhOTdtRQubcMrU","type":"m.room.redaction","content":{"redacts":"$iF2WPHEwNYrzP58y4MHklctvq8U7VnhOTdtRQubcMrU"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.reaction","content":{}} {"origin_server_ts":1706980895647,"event_id":"$3Z-7GpIDeffMnp7jv6MCup15uT6VPrAEFpICY-GI8U8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$iF2WPHEwNYrzP58y4MHklctvq8U7VnhOTdtRQubcMrU","type":"m.room.redaction","content":{"redacts":"$iF2WPHEwNYrzP58y4MHklctvq8U7VnhOTdtRQubcMrU"}} {"origin_server_ts":1707113656876,"event_id":"$0g6yWaFJHKtgrqblYntTTMpgj7Y5lV8cPUbd7RkIwfY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"that 3D plot thing is cool, apparently you can use Java's ScriptEngine to use javascript, which means you can use that plotly thing or even d3.js https://github.com/tritibo/d3java","msgtype":"m.text"}} {"origin_server_ts":1707113671117,"event_id":"$iCPqHdGYB2Glw3s97F1kJs9MiPEqLHqJGsdQAGBc1-c","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'm not sure how easy it is to do it in kotlin tho","msgtype":"m.text"}} {"origin_server_ts":1707113711768,"event_id":"$Rp38pS9HlVirEwB5zrvjlvZcegT8Zk_A3FvHcncMnzo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"(was just thinking about graphics features in the gui app)","msgtype":"m.text"}} {"origin_server_ts":1707122301503,"event_id":"$GD7WONHQHQaEbZw3ieqcwCibz7kXt43e-a86WOAXfN0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: I will add support for that in the Java version as well.","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: I will add support for that in the Java version as well."}} {"origin_server_ts":1707122319349,"event_id":"$8Iap1jA9Ao5yvaJQg7glTHfGqttBeUqySP7YxFOflg0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I just haven't decided what framework to use (or if I spend time writing my own). I'd rather not use JS.","msgtype":"m.text"}} {"origin_server_ts":1707122562232,"event_id":"$H_InmxYpp0VRnZW72OBnzljlGR-9wtBaznydUQbcfVU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"jzy3d seems like a candidate","msgtype":"m.text"}} {"origin_server_ts":1707124686332,"event_id":"$jhD3HB6G3rkgR836ijheVyrJSAiuTH0coUzi7D035eU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"nice nice","msgtype":"m.text"}} {"origin_server_ts":1707136129493,"event_id":"$y666XMfHH2nJMkOBLTcBl7wPfjXoe5IpbGoqPOWGxL0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"if you're using some library for one type of chart, better use the same one for all. so plotly for all types of charts. apparently you can do everything with it (bar, scatter etc.)","msgtype":"m.text"}} {"origin_server_ts":1707136490628,"event_id":"$MZXM2Quckxw_U5c-NdTGIAYTGnCdICTtB3HwJ5unVa4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yeah. You're right. I use the current one simply because it's a standard component in javafx","msgtype":"m.text"}} {"origin_server_ts":1707141837443,"event_id":"$cTB9-0WYO7BjkkjK9RBBN7CuWcqw7H82Gg50SB3l6YM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://dhsdevelopments.com/EvASzUBbCiwwdfRzkAvNrODv","info":{"xyz.amorgan.blurhash":"L1RV|TRO9a_30LIU-oxa_39ZIoD%","size":119420,"thumbnail_info":{"size":100876,"w":713,"h":600,"mimetype":"image/png"},"w":1202,"h":1011,"mimetype":"image/png","thumbnail_url":"mxc://dhsdevelopments.com/rnwhGcFSvaeSXuoFNEMpAGiI"}}} {"origin_server_ts":1707152043615,"event_id":"$4RuTwNg_89Gz0w5kKMQXyZMpeG__OAxEgvLESOVzOiU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$cTB9-0WYO7BjkkjK9RBBN7CuWcqw7H82Gg50SB3l6YM","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1707152176214,"event_id":"$jl7TzJFP_MInnBTVGzGWMONdxFBsZZtCPtwSCwJt_18","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aww yeah now we're talking","msgtype":"m.text"}} {"origin_server_ts":1707178767370,"event_id":"$IVCwBQhALujFgjw_Kvya71isRPVtqye2ijaz-8HR_tQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Minor error: in the [Key doc](https://kapdemo.dhsdevelopments.com/reference.html#_key), `\"xzcv\"` should be removed.","msgtype":"m.text","formatted_body":"Minor error: in the Key doc<\/a>, \"xzcv\"<\/code> should be removed."}} {"origin_server_ts":1707179548337,"event_id":"$ARc_gqFHXgbwL1IyuO5MRpgkdbKZQwYRhanFrY21C9w","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Also `⫽` should be called Replicate rather than Select, surely?","msgtype":"m.text","formatted_body":"Also ⫽<\/code> should be called Replicate rather than Select, surely?"}} {"origin_server_ts":1707181703629,"event_id":"$V_ZKOxzD8r3N7IkdQUjPt1ciZzmNy6jUp5RcJY3vBK0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"There's a header \"Monadic: Increase rank\" under `>` that should be \"Decrease rank\".","msgtype":"m.text","formatted_body":"There's a header \"Monadic: Increase rank\" under ><\/code> that should be \"Decrease rank\"."}} {"origin_server_ts":1707189016659,"event_id":"$gqT3NW3kY9xEaywygYGd7ZpWxvePxlF9eiTmPFblK6o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: thanks a lot for your feedback :-) You are absolutely right on all counts and I will fix it today.","msgtype":"m.text","formatted_body":"Marshall<\/a>: thanks a lot for your feedback :-) You are absolutely right on all counts and I will fix it today."}} {"origin_server_ts":1707190007454,"event_id":"$5Q2DVh9j6oCQIONnYKlsUqOAkdrarwuYmd5DWFOSnGc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: done","msgtype":"m.text","formatted_body":"Marshall<\/a>: done"}} {"origin_server_ts":1707275314604,"event_id":"$4-y1x1x8GnqYRsMq_CR8kL8KqQMavO2mRs38Mij1kx0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Wound up cleaning it up a bit so [here](https://kapdemo.dhsdevelopments.com/clientweb2/#N%20%E2%86%90%204%0AA%20%E2%86%90%20(4%20%C3%97%20N*2)%20%2B%20(12%20%C3%97%20N)%20-%203%0AB%20%E2%86%90%2032%20%C3%97%20(N%20%2B%203)%0A%0Aadd%20%E2%87%90%20%7B%0A%20%20%20%20(x1%20y1)%20%E2%86%90%20%E2%8D%BA%0A%20%20%20%20(x2%20y2)%20%E2%86%90%20%E2%8D%B5%0A%20%20%20%20xs%20%E2%86%90%20x1%20%2B%20x2%0A%20%20%20%20s%20%E2%86%90%20((xs%20%C3%97%20x1%2BA)%20%2B%20(x2%C3%97x2)%20%2B%20B)%20%C3%B7%20(y1%20%2B%20y2)%0A%20%20%20%20x3%20%E2%86%90%20(s%20%C3%97%20s)%20-%20A%20%2B%20xs%0A%20%20%20%20y3%20%E2%86%90%20y1%20%2B%20s%20%C3%97%20(x3%20-%20x1)%0A%20%20%20%20x3%20(-y3)%0A%7D%0A%0Aabc%20%E2%87%90%20%7B%0A%20%20%20%20(x%20y)%20%E2%86%90%20%E2%8D%B5%0A%20%20%20%20xn%20%E2%86%90%20x%20-%20na%20%E2%86%90%208%20%C3%97%20N%2B3%0A%20%20%20%20(xn%20-%20y)(xn%20%2B%20y)(na%20%2B%202%C3%97x%C3%97N%2B2)%0A%7D%0A%0Ascale%20%E2%87%90%20%7B%0A%20%20%20%20n%20%E2%86%90%20%E2%8D%B5%20%C3%97%20d%20%E2%86%90%20%C3%B7%201%20math%3Agcd%20%E2%8D%B5%0A%20%20%20%20s%20%E2%86%90%20%E2%8C%8A%20(n%20%C3%97%20(1%E2%8C%BDd)%20%C3%97%20(%C2%AF1%E2%8C%BDd))%20%C3%B7%20(math%3Agcd%2F%20d)*2%0A%20%20%20%20%E2%8C%8A%20s%20%C3%B7%20(math%3Agcd%2Fs)%20%C3%97%20%C3%97%E2%86%91s%0A%7D%0A%0A(a%20b%20c)%20%E2%86%90%20scale%20abc%20(add%E2%8D%A8%E2%8D%A33)%E2%8D%9Badd%20%C2%AF4%2028%0A(a%C3%B7b%2Bc)%20%2B%20(b%C3%B7c%2Ba)%20%2B%20(c%C3%B7a%2Bb))'s the code to compute a solution with positive integers to `4 = (a÷b+c) + (b÷c+a) + (c÷a+b)` that kelas said couldn't be translated to APL. Still no idea what it does really.","msgtype":"m.text","formatted_body":"Wound up cleaning it up a bit so here<\/a>'s the code to compute a solution with positive integers to 4 = (a÷b+c) + (b÷c+a) + (c÷a+b)<\/code> that kelas said couldn't be translated to APL. Still no idea what it does really."}} {"origin_server_ts":1707275414715,"event_id":"$BBzxhnhZmQfcz9FgcDWjl3hTAVm69oRXjZfp30y_1sk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I couldn't find a nice way to do the argument destructuring, although I tried a few ways. `((x1 y1)(x2 y2)) ← ⍺ ⍵` isn't allowed. And I tried converting to tradfn-style functions, which apparently doesn't allow array destructuring. When I switched to lists it choked on the global `B`.","msgtype":"m.text","formatted_body":"I couldn't find a nice way to do the argument destructuring, although I tried a few ways. ((x1 y1)(x2 y2)) ← ⍺ ⍵<\/code> isn't allowed. And I tried converting to tradfn-style functions, which apparently doesn't allow array destructuring. When I switched to lists it choked on the global B<\/code>."}} {"origin_server_ts":1707275571885,"event_id":"$lrlTL9Ppnu4oNPMw4xJuxNxodlx_IS7IGhp9nXJKtRo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Also, changing `(add⍨⍣3)⍛add` to `add⍛(add⍨⍣3)` fails, which I don't understand.","msgtype":"m.text","formatted_body":"Also, changing (add⍨⍣3)⍛add<\/code> to add⍛(add⍨⍣3)<\/code> fails, which I don't understand."}} {"origin_server_ts":1707275643338,"event_id":"$V6SJWC7HNyLwpeqbvr36RcPTEAKC_8hq5tZurEVEIfY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Same for `add⍨⍣3⍛add`. Doesn't parsing proceed from left to right?","msgtype":"m.text","formatted_body":"Same for add⍨⍣3⍛add<\/code>. Doesn't parsing proceed from left to right?"}} {"origin_server_ts":1707278700313,"event_id":"$ofUSh4GOBfb1tj0eIDo4d0NitciHIZbXWc9H22qXhic","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: thanks for this. I will have to break it down and explain each point in order. However, I'm at work at the moment so it'll be a few hours. :-)","msgtype":"m.text","formatted_body":"Marshall<\/a>: thanks for this. I will have to break it down and explain each point in order. However, I'm at work at the moment so it'll be a few hours. :-)"}} {"origin_server_ts":1707278779348,"event_id":"$ng0hu-Ey0JGzSCrCXbFWloIWJm4Cu_nuvV2Daeoxj0I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Just a quick answer to your first question though: Variable destructuring only works on one level at the moment. So `(a b) ← ...` works, but `((a b) (c d)) ← ...` does not.","msgtype":"m.text","formatted_body":"Just a quick answer to your first question though: Variable destructuring only works on one level at the moment. So (a b) ← ...<\/code> works, but ((a b) (c d)) ← ...<\/code> does not."}} {"origin_server_ts":1707278818146,"event_id":"$kqyvDSosNCvrNLgpIbAikgOVf4FDykNxW6p--u7Ciik","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I was working on a general destructuring feature that would allow you to destructure everything, but it's not been merged yet.","msgtype":"m.text"}} {"origin_server_ts":1707278966947,"event_id":"$m1DqOwv6cDzDEnw4f0ciY_tOOdFUpTcWfZ3z2qtwPK4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh, and the problems with the power operator is actually explained in the refdocs. Operators that accept a value right argument (`⍤` and `⍣`) needs parens around the entire expression: `(A⍣N) x` This is true even when they are used as components in a train (except, of course, when being assigned, like so: `A ⇐ +⍣8`).","msgtype":"m.text","formatted_body":"Oh, and the problems with the power operator is actually explained in the refdocs. Operators that accept a value right argument (⍤<\/code> and ⍣<\/code>) needs parens around the entire expression: (A⍣N) x<\/code> This is true even when they are used as components in a train (except, of course, when being assigned, like so: A ⇐ +⍣8<\/code>)."}} {"origin_server_ts":1707280447336,"event_id":"$BWGYcW7qfIAiivOxl5GSZ1WeiulkVksyeqlZm1mB6X8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$BBzxhnhZmQfcz9FgcDWjl3hTAVm69oRXjZfp30y_1sk"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> I couldn't find a nice way to do the argument destructuring, although I tried a few ways. `((x1 y1)(x2 y2)) ← ⍺ ⍵` isn't allowed. And I tried converting to tradfn-style functions, which apparently doesn't allow array destructuring. When I switched to lists it choked on the global `B`.\n\nThe best I can think of at the moment is `(x1 y1)←⍺ ⋄ (x2 y2)←⍵` or perhaps `(x1 y1 x2 y2) ← ⍺,⍵`. Clearly I need to get recursive destructuring working.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    I couldn't find a nice way to do the argument destructuring, although I tried a few ways. ((x1 y1)(x2 y2)) ← ⍺ ⍵<\/code> isn't allowed. And I tried converting to tradfn-style functions, which apparently doesn't allow array destructuring. When I switched to lists it choked on the global B<\/code>.<\/blockquote><\/mx-reply>The best I can think of at the moment is (x1 y1)←⍺ ⋄ (x2 y2)←⍵<\/code> or perhaps (x1 y1 x2 y2) ← ⍺,⍵<\/code>. Clearly I need to get recursive destructuring working."}} {"origin_server_ts":1707280776441,"event_id":"$LbPpWgcnojJ18iUuPRvDt0Ku1Foy45Zy1Uzg3zIcRxY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$lrlTL9Ppnu4oNPMw4xJuxNxodlx_IS7IGhp9nXJKtRo"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Also, changing `(add⍨⍣3)⍛add` to `add⍛(add⍨⍣3)` fails, which I don't understand.\n\nThis can be boiled down to `add⍛+ ¯4 28` failing, right? This is because it calls `add` monadically, but it expects a left argument.","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Also, changing (add⍨⍣3)⍛add<\/code> to add⍛(add⍨⍣3)<\/code> fails, which I don't understand.<\/blockquote><\/mx-reply>This can be boiled down to add⍛+ ¯4 28<\/code> failing, right? This is because it calls add<\/code> monadically, but it expects a left argument."}} {"origin_server_ts":1707281552810,"event_id":"$vAe_N-NZK9XAWuzoqUM6yNtK6dv1PYI6m8YwH34lDZc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$V6SJWC7HNyLwpeqbvr36RcPTEAKC_8hq5tZurEVEIfY"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Same for `add⍨⍣3⍛add`. Doesn't parsing proceed from left to right?\n\nAnd for this, it does indeed proceed from left to right, but here's what happens:\n1. `add` (is a function), recurse down and check for operators:\n2. `⍨`, is a monadic operator, check for nexty operator\n3. `⍣`, is a dyadic operator with potential right value argument, read the right argument by recursing into the `parseValue` function\n4. `3`, this a a value so push on to the left argument list\n5. `⍛`, an operator in an unexpected context so raise an error","msgtype":"m.text","formatted_body":"
                    In reply to<\/a> @mlochbaum:matrix.org<\/a>
                    Same for add⍨⍣3⍛add<\/code>. Doesn't parsing proceed from left to right?<\/blockquote><\/mx-reply>

                    And for this, it does indeed proceed from left to right, but here's what happens:<\/p>\n

                      \n
                    1. add<\/code> (is a function), recurse down and check for operators:<\/li>\n
                    2. ⍨<\/code>, is a monadic operator, check for nexty operator<\/li>\n
                    3. ⍣<\/code>, is a dyadic operator with potential right value argument, read the right argument by recursing into the parseValue<\/code> function<\/li>\n
                    4. 3<\/code>, this a a value so push on to the left argument list<\/li>\n
                    5. ⍛<\/code>, an operator in an unexpected context so raise an error<\/li>\n<\/ol>\n"}} {"state_key":"@suhr:matrix.org","origin_server_ts":1707287339683,"event_id":"$mFNTMOMl9bpoHGtMa3T9w2glnPMO6YvQ37bZmGsfKFI","sender":"@suhr:matrix.org","user_id":"@suhr:matrix.org","prev_content":{"displayname":"suhr","membership":"join"},"type":"m.room.member","content":{"membership":"leave"},"replaces_state":"$eibXyNckVn8VJyma4xVKE2TYTCQ9NR0E1tKvl4Er-o0"} {"origin_server_ts":1707304307126,"event_id":"$JUe4zqioR51QfIQhLFPpHMwhVRxTwpua0VlDxUJwx9k","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$4-y1x1x8GnqYRsMq_CR8kL8KqQMavO2mRs38Mij1kx0","rel_type":"m.annotation","key":"😎"}}} {"origin_server_ts":1707308353121,"event_id":"$D0zclK7gTJ8DEu3Njun-PkEW0QjVd-M45slQqVyMecY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`add⍛(add⍨⍣3)` was just completely wrong code, should have been `add∘(add⍨⍣3)`, oops.","msgtype":"m.text","formatted_body":"add⍛(add⍨⍣3)<\/code> was just completely wrong code, should have been add∘(add⍨⍣3)<\/code>, oops."}} {"origin_server_ts":1707309820901,"event_id":"$b0-P4rPJLk9ay2LUX8yCm9NAi73rTyf5VU_xg2HtzMQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. That makes more sense. ","msgtype":"m.text"}} {"origin_server_ts":1707309916406,"event_id":"$t05BqeUoJp1X-iTg5-iPEE7EI6Rmp-wA171mKEODyeA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll take another look at recursive destructuring a bit later. I can't remember what it was, but there was some technical reason I couldn't easily do it using the current design, and I have to check it again to remember what it was. ","msgtype":"m.text"}} {"origin_server_ts":1707318776620,"event_id":"$1GyGo70VauHCyiOno7yaehyUVt9o-H9rLcfQJwUh8Dg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: I just fixed the nested restructuring assignment. It works with any nesting of arrays and n-tuples now ([commit](https://codeberg.org/loke/array/commit/279c8e193b935b0ffbb2e76abf0d4316f35c77dd))","msgtype":"m.text","formatted_body":"Marshall<\/a>: I just fixed the nested restructuring assignment. It works with any nesting of arrays and n-tuples now (commit<\/a>)"}} {"origin_server_ts":1707318949203,"event_id":"$rCiJnjIdor0dNy-zAtZ-qUxhx2epYlo12XP1kygEKyo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: I just fixed the nested destructuring assignment. It works with any nesting of arrays and n-tuples now ([commit](https://codeberg.org/loke/array/commit/279c8e193b935b0ffbb2e76abf0d4316f35c77dd))","msgtype":"m.text","formatted_body":"Marshall<\/a>: I just fixed the nested destructuring assignment. It works with any nesting of arrays and n-tuples now (commit<\/a>)"},"m.relates_to":{"event_id":"$1GyGo70VauHCyiOno7yaehyUVt9o-H9rLcfQJwUh8Dg","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Marshall: I just fixed the nested destructuring assignment. It works with any nesting of arrays and n-tuples now ([commit](https://codeberg.org/loke/array/commit/279c8e193b935b0ffbb2e76abf0d4316f35c77dd))","msgtype":"m.text","formatted_body":" * Marshall<\/a>: I just fixed the nested destructuring assignment. It works with any nesting of arrays and n-tuples now (commit<\/a>)"}} {"origin_server_ts":1707319152468,"event_id":"$UZCjEY4CYweIrQ87qpKQaalvIFaHaSAhfUmJDv-i1zs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Nice! Not that I need it, just out of curiosity: how/when does the online interpreter update?","msgtype":"m.text","formatted_body":"Nice! Not that I need it, just out of curiosity: how/when does the online interpreter update?"}} {"origin_server_ts":1707319198923,"event_id":"$WUk9KvQV7HEGn35jWeyr4R8rCO0uDg7Jg-vGAfd331g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: pretty much every time I commit a change (I request the push manually). It takes about 15 minutes for the full build and update, so the website should be updated at any time now.","msgtype":"m.text","formatted_body":"Marshall<\/a>: pretty much every time I commit a change (I request the push manually). It takes about 15 minutes for the full build and update, so the website should be updated at any time now."}} {"origin_server_ts":1707319209044,"event_id":"$jRLr12ZTGASAPpn7C5mqa13LqAchNWP9BxEEsX9oJwk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I probably should add a timestamp to the website.","msgtype":"m.text"}} {"origin_server_ts":1707319257303,"event_id":"$NVnLgGoGmw7DZjW8sgJ6YE7ETpQMq3fVTgcE6THh70Y","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh, that's a neat idea.","msgtype":"m.text","formatted_body":"Oh, that's a neat idea."}} {"origin_server_ts":1707319268389,"event_id":"$K0x8SW9Gi2V49Mffj2bXWTMOT8eaSgvsGQTMdnsCxok","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I considered making it completely automatic, but there are times I don't want to push the update to the site.","msgtype":"m.text"}} {"origin_server_ts":1707319667883,"event_id":"$YCjn08DwC4AaW9t-67D-kpRI8GGbyfxs6YchHY4TFZo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, it's been updated now: https://kapdemo.dhsdevelopments.com/clientweb2/#(a%20b%20(c%20%3B%20d))%20%E2%86%90%20(10%2020%20(30%3B40))%0Aa%20b%20c%20d","msgtype":"m.text"}} {"origin_server_ts":1707319824745,"event_id":"$aNBC-zvc37nzpGFY0Ho98bYJS7Irv0rCAfHIWtG02rQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"And `(a b ; c d)` is allowed, nice.","msgtype":"m.text","formatted_body":"And (a b ; c d)<\/code> is allowed, nice."}} {"origin_server_ts":1707320566682,"event_id":"$98OVz5mtLV93Ko7jTGfePqiOZTm8mwP-T3JmR6wXaLY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. It should allow any combination of those. It's generic so I could add other types of destruction as well.","msgtype":"m.text"}} {"origin_server_ts":1707320592531,"event_id":"$RHfcD2cUQDbye74ostwsr4Jlc5jFWk9DO4xOcOl4N8s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Including matching and whatnot. Need a good syntax for it though.","msgtype":"m.text"}} {"origin_server_ts":1707320698026,"event_id":"$jBNCv1TU_zoxr4ZZugMHbuIXw-IhN4vqLgXx1dswxHE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Specifically I meant it doesn't require `((a b) ; (c d))`: list elements are treated differently from the overall assignment target.","msgtype":"m.text","formatted_body":"Specifically I meant it doesn't require ((a b) ; (c d))<\/code>: list elements are treated differently from the overall assignment target."}} {"origin_server_ts":1707323267034,"event_id":"$XRubK8akIPC34BUtSvKRhCd6te7e7RkRsYVk2S0wcGg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh I see. It's because a b is different from (a b). The former is a stranded array and the other is an explicit array.","msgtype":"m.text"}} {"origin_server_ts":1707323294830,"event_id":"$GFJWwdrh_6WW81ZMlu9o3OISxxBuOiGkA8WkI-klXXw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But now that I've changed how destructuring works, I could make them behave the same when assigning.","msgtype":"m.text"}} {"origin_server_ts":1707323300432,"event_id":"$tOF6JB-lGxu1G9Z4lWN4WSVWwgYjGSJCEh0yorYepS4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Should I do thart?","msgtype":"m.text"}} {"origin_server_ts":1707323307953,"event_id":"$icV5n4EwEhbZ_jUWkDGU2i617fAjLS14kjZawU9ZtSY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Should I do that?","msgtype":"m.text"},"m.relates_to":{"event_id":"$tOF6JB-lGxu1G9Z4lWN4WSVWwgYjGSJCEh0yorYepS4","rel_type":"m.replace"},"body":"* Should I do that?","msgtype":"m.text"}} {"origin_server_ts":1707323468261,"event_id":"$CI54EufvE8QJJxyVmqnEJO8hXjMkqrTDvQF100pnIDU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think the way it works now is the best, although I could see the argument for requiring parens. If you're thinking `a b ← 0 1`, definitely don't.","msgtype":"m.text","formatted_body":"I think the way it works now is the best, although I could see the argument for requiring parens. If you're thinking a b ← 0 1<\/code>, definitely don't."}} {"origin_server_ts":1707325256261,"event_id":"$kjp6P19lVavpUmUG6ocJj4fZ1F0-0JV7RkrowEnR8kc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Would it make sense to allow destructuring enclose?","msgtype":"m.text"}} {"origin_server_ts":1707325322462,"event_id":"$pF5pEvkYS4b0Shu2E1rw0YxwNXbflgBONTaJj_SdtHI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: that is, assignment to (⊂a) would disclose the argument before assigning. ","msgtype":"m.text","formatted_body":"Marshall<\/a>: that is, assignment to (⊂a) would disclose the argument before assigning. "}} {"origin_server_ts":1707327814742,"event_id":"$DtjV-NO6Os2RkhkOdn6Tzc5xgeQRym16TNXiiF4MNxM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$pF5pEvkYS4b0Shu2E1rw0YxwNXbflgBONTaJj_SdtHI"}},"format":"org.matrix.custom.html","body":"that could be useful, but with the syntax of a `⊂` call I don't know if I'd call it destructuring","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>that could be useful, but with the syntax of a ⊂<\/code> call I don't know if I'd call it destructuring"}} {"origin_server_ts":1707329446203,"event_id":"$5BTA-76q9vOZPz01_CoqM3WdJ4PMI2eDI6o7lKg8k9Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I could do some matching too... Like `(:foo a) ← :foo 10` working, but `(:foo a) ← :bar 10` raising an error.","msgtype":"m.text","formatted_body":"I could do some matching too... Like (:foo a) ← :foo 10<\/code> working, but (:foo a) ← :bar 10<\/code> raising an error."}} {"origin_server_ts":1707329485131,"event_id":"$01Nm2n35jYwTWYRrzANUUXkBdi93NFeU68bzuWpF6xg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"That's something you often do in Erlang, although I'm not sure how useful that would be in an apl, especially one that has exceptions. :-)","msgtype":"m.text"}} {"origin_server_ts":1707329808621,"event_id":"$PkUMvc_L5nZfyEtfJzoGLoFrIJFQ4YYQLSdBeP4KlPQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:\n```\nfoo ← somethingsomething\nmatch {\n { (\"foo\" a b) ← foo ⋄ doSomething a b }\n { (x (y;z) \"bar\") ⋄ doAnotherThing x y z}\n}\n```","msgtype":"m.text","formatted_body":"

                      Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:<\/p>\n

                      foo ← somethingsomething\nmatch {\n  { (\"foo\" a b) ← foo ⋄ doSomething a b }\n  { (x (y;z) \"bar\") ⋄   doAnotherThing x y z}\n}\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1707329834200,"event_id":"$1Csoa5GczR7_iESA1Rcck7yg4pEKWLykE6DHqQyOfyQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:\n\n```\nfoo ← somethingsomething\nmatch {\n  { (\"foo\" a b) ← foo ⋄ doSomething a b }\n  { (x (y;z) \"bar\") ← foo  ⋄   doAnotherThing x y z}\n}\n```","msgtype":"m.text","formatted_body":"

                      Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:<\/p>\n

                      foo ← somethingsomething\nmatch {\n  { (\"foo\" a b) ← foo ⋄ doSomething a b }\n  { (x (y;z) \"bar\") ← foo  ⋄   doAnotherThing x y z}\n}\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$PkUMvc_L5nZfyEtfJzoGLoFrIJFQ4YYQLSdBeP4KlPQ","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:\n\n```\nfoo ← somethingsomething\nmatch {\n  { (\"foo\" a b) ← foo ⋄ doSomething a b }\n  { (x (y;z) \"bar\") ← foo  ⋄   doAnotherThing x y z}\n}\n```","msgtype":"m.text","formatted_body":" * 

                      Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:<\/p>\n

                      foo ← somethingsomething\nmatch {\n  { (\"foo\" a b) ← foo ⋄ doSomething a b }\n  { (x (y;z) \"bar\") ← foo  ⋄   doAnotherThing x y z}\n}\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1707329842280,"event_id":"$8hkmgmDhhzwtGp_YI42qOTQUJ4p406sGSYaqVkbJC5s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:\n\n```\nfoo ← somethingsomething\nmatch {\n  { (\"foo\" a b) ← foo ⋄ doSomething a b }\n  { (x (y;z) \"bar\") ← foo ⋄ doAnotherThing x y z}\n}\n```","msgtype":"m.text","formatted_body":"

                      Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:<\/p>\n

                      foo ← somethingsomething\nmatch {\n  { (\"foo\" a b) ← foo ⋄ doSomething a b }\n  { (x (y;z) \"bar\") ← foo ⋄ doAnotherThing x y z}\n}\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$PkUMvc_L5nZfyEtfJzoGLoFrIJFQ4YYQLSdBeP4KlPQ","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:\n\n```\nfoo ← somethingsomething\nmatch {\n  { (\"foo\" a b) ← foo ⋄ doSomething a b }\n  { (x (y;z) \"bar\") ← foo ⋄ doAnotherThing x y z}\n}\n```","msgtype":"m.text","formatted_body":" * 

                      Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:<\/p>\n

                      foo ← somethingsomething\nmatch {\n  { (\"foo\" a b) ← foo ⋄ doSomething a b }\n  { (x (y;z) \"bar\") ← foo ⋄ doAnotherThing x y z}\n}\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1707329849482,"event_id":"$wYvGvsri-vgPdATHt7IYTBqBkYy560bPq2FDGvgIreI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:\n\n```\nfoo ← somethingsomething\nmatch {\n  { (\"foo\" a b) ← foo ⋄ doSomething a b }\n  { (x (y;z) \"bar\") ← foo ⋄ doAnotherThing x y z }\n}\n```","msgtype":"m.text","formatted_body":"

                      Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:<\/p>\n

                      foo ← somethingsomething\nmatch {\n  { (\"foo\" a b) ← foo ⋄ doSomething a b }\n  { (x (y;z) \"bar\") ← foo ⋄ doAnotherThing x y z }\n}\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$PkUMvc_L5nZfyEtfJzoGLoFrIJFQ4YYQLSdBeP4KlPQ","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:\n\n```\nfoo ← somethingsomething\nmatch {\n  { (\"foo\" a b) ← foo ⋄ doSomething a b }\n  { (x (y;z) \"bar\") ← foo ⋄ doAnotherThing x y z }\n}\n```","msgtype":"m.text","formatted_body":" * 

                      Oh wait... If I do that, and use a dedicated exception type for mismatch, I could implement a pattern matcher entirely in userspace as a syntax extension. It would look something like this:<\/p>\n

                      foo ← somethingsomething\nmatch {\n  { (\"foo\" a b) ← foo ⋄ doSomething a b }\n  { (x (y;z) \"bar\") ← foo ⋄ doAnotherThing x y z }\n}\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1707329927431,"event_id":"$CE4sQWZRh0e590DRYYPTFGiJQvUrP82hFcoHzWuKDj0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"If I wanted to avoid the explicit assignment in each entry, I'd have to implement it in the interpreter level, since the syntax extensions are not expressive enough to do that.","msgtype":"m.text"}}
                      {"origin_server_ts":1707330268153,"event_id":"$ZjLInswlRrXVMz40GnK8fRHUcw2fG80KD47jbqx5R2s","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"can I force decimal numbers with some command?","msgtype":"m.text"}}
                      {"origin_server_ts":1707330337490,"event_id":"$vcUWI8DicAuA__Avi4S4FMX7XhJajWgAov90z_wwPQo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: You mean convert from rational to floating point?","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: You mean convert from rational to floating point?"}}
                      {"origin_server_ts":1707330349497,"event_id":"$rpfgJKgQ97jzAaB8EFw6WzOeHInNfCEA3GZ--0VdCiI","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yeah","msgtype":"m.text"}}
                      {"origin_server_ts":1707330399489,"event_id":"$Gk0T0Q3R8U_aQH9RaLpgCZSwenyny-ckdEWQshOygNM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: Just add 0.0. I usually just type `0.0 + whatever`.","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: Just add 0.0. I usually just type 0.0 + whatever<\/code>."}}
                      {"origin_server_ts":1707330407218,"event_id":"$LLkDt7CuXQwwZ2Dzb2fmbzZ-oBStVWYiZkGV_rLQAfg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"You can cut it down to `0.+`","msgtype":"m.text","formatted_body":"You can cut it down to 0.+<\/code>"}}
                      {"origin_server_ts":1707330408355,"event_id":"$7QQxX5NgDxT_BG2rRo69_3ZCp5GbvPaZM3RZMiEm20I","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ah ok","msgtype":"m.text"}}
                      {"origin_server_ts":1707330417053,"event_id":"$6OAQ9qdY-5HdzPmSKm6sKPdqP0iXK8uo2fmTuZ0DQnI","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$Gk0T0Q3R8U_aQH9RaLpgCZSwenyny-ckdEWQshOygNM","rel_type":"m.annotation","key":"🙏"}}}
                      {"origin_server_ts":1707330461086,"event_id":"$uG7-W5I1tfn_ADLMrpRtfX8j1UC5YVmzwh8i8O-uG9o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Or, you can simply use a floating point number anywhere (2.0 instead of 2 for example) and that floating point value will propagate all the way, which may be nicer.","msgtype":"m.text"}}
                      {"origin_server_ts":1707330482250,"event_id":"$Z56zj62N6npbcQtGJfvVg6ThJnHtd0SqykjUSc_7gy8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"hmm I'll try","msgtype":"m.text"}}
                      {"origin_server_ts":1707330508530,"event_id":"$dFOl7i2ygnh8VJZy75xnBge9se63HfWiBM7tn2Vdcfw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Basically, whenever a rational number and a floating point number is used in a computation, it's always performed as floating point.","msgtype":"m.text"}}
                      {"origin_server_ts":1707330534625,"event_id":"$1eIUa-jyrk-jQiqybrQtSUyktUOM97AryfQisEIue2c","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye ok, thanks","msgtype":"m.text"}}
                      {"origin_server_ts":1707330644040,"event_id":"$bpG2E4m8wHWxkpUncX-8GDA2mTwCOtoXbUhEhqRp4_s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"interesting how you went that direction while I went the other for dzaima/APL/BQN, of making mixed-float-bigint operations always perform bigint ones. I suppose rationals make that less simple of a decision as, while integer floats can be always nicely converted to bigints, non-integer floats won't convert nicely to a rational. And also making the bignum type more prominent encourages its interaction with the float type to be less error-y","msgtype":"m.text","formatted_body":"interesting how you went that direction while I went the other for dzaima/APL/BQN, of making mixed-float-bigint operations always perform bigint ones. I suppose rationals make that less simple of a decision as, while integer floats can be always nicely converted to bigints, non-integer floats won't convert nicely to a rational. And also making the bignum type more prominent encourages its interaction with the float type to be less error-y"}}
                      {"origin_server_ts":1707330682845,"event_id":"$RC8CtcHGl80TKpmykj8obsj8ZoYcN5nJz7xKfQ-KriY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"interesting how you went that direction while I went the other for dzaima/APL/BQN, of making mixed-float-bigint operations always perform bigint ones. I suppose rationals make that less simple of a decision as, while integer floats can be always nicely converted to bigints, non-integer floats usually won't convert to a nice rational. And also making the bignum type more prominent encourages its interaction with the float type to be less error-y","msgtype":"m.text","formatted_body":"interesting how you went that direction while I went the other for dzaima/APL/BQN, of making mixed-float-bigint operations always perform bigint ones. I suppose rationals make that less simple of a decision as, while integer floats can be always nicely converted to bigints, non-integer floats usually won't convert to a nice rational. And also making the bignum type more prominent encourages its interaction with the float type to be less error-y"},"m.relates_to":{"event_id":"$bpG2E4m8wHWxkpUncX-8GDA2mTwCOtoXbUhEhqRp4_s","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* interesting how you went that direction while I went the other for dzaima/APL/BQN, of making mixed-float-bigint operations always perform bigint ones. I suppose rationals make that less simple of a decision as, while integer floats can be always nicely converted to bigints, non-integer floats usually won't convert to a nice rational. And also making the bignum type more prominent encourages its interaction with the float type to be less error-y","msgtype":"m.text","formatted_body":"* interesting how you went that direction while I went the other for dzaima/APL/BQN, of making mixed-float-bigint operations always perform bigint ones. I suppose rationals make that less simple of a decision as, while integer floats can be always nicely converted to bigints, non-integer floats usually won't convert to a nice rational. And also making the bignum type more prominent encourages its interaction with the float type to be less error-y"}}
                      {"origin_server_ts":1707330823954,"event_id":"$g-v3ZzRLvGh-Q-buEdHB8WjKcflxIgE3KdVUbuA11T4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: Initially I was just going add bigint, but as you noted, there are issues with that that made the semantics weird. I expressly didn't want the bigints to live in their own corner like in Java or JS.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Initially I was just going add bigint, but as you noted, there are issues with that that made the semantics weird. I expressly didn't want the bigints to live in their own corner like in Java or JS."}}
                      {"origin_server_ts":1707330872392,"event_id":"$EZpchIrJ9OtAiovyIcC8iR-ZmlYjswfjjCxO_vny58E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"So the only way to make division play nicely with bigints was to introduce rationals. The rest is just the Common Lisp semantics taken outright, with the exception that I don't support complex rationals.","msgtype":"m.text"}}
                      {"origin_server_ts":1707330973473,"event_id":"$Cw36sV0B8To4ElrGZTYlUj7X-Y4niQmVbVQJJFmORLo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"One justification for this model is that floating point numbers are inexact, which means that it's really not a valid operation to convert a floating point number to rational (CL has the two functions `RATIONAL` and `RATIONALIZE` that can do it explicitly, but the fact that there are two different ones with slightly different semantics suggests it's not trivial)","msgtype":"m.text","formatted_body":"One justification for this model is that floating point numbers are inexact, which means that it's really not a valid operation to convert a floating point number to rational (CL has the two functions RATIONAL<\/code> and RATIONALIZE<\/code> that can do it explicitly, but the fact that there are two different ones with slightly different semantics suggests it's not trivial)"}}
                      {"origin_server_ts":1707330992241,"event_id":"$Y04R_DZihFTHEgTAAZfRec_WBnn_u-SKSszldWVcD70","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://lisp-docs.github.io/cl-language-reference/chap-12/bc-c-dictionary/rational_rationalize_function","msgtype":"m.text"}}
                      {"origin_server_ts":1707331041378,"event_id":"$lkBk5d7nZAYL5g7XmOT6RyDiE1U-2zWxtUnjTW1M0KM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I want to implement these functions in Kap too, but I don't have a good implementation to base it on.","msgtype":"m.text"}}
                      {"origin_server_ts":1707331558288,"event_id":"$bQ2U_WfPDltI33ciE4Opho5fLnw5dwsA2pzM3blxzCw","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"btw how to get the real and imaginationary parts from a complex number? ","msgtype":"m.text"}}
                      {"origin_server_ts":1707331573149,"event_id":"$rWr3hBj6_RV7Mi4flbh3rwk647n2zuVr-Vx3G-vLA-4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"btw how to get the real and imaginary parts from a complex number? ","msgtype":"m.text"},"m.relates_to":{"event_id":"$bQ2U_WfPDltI33ciE4Opho5fLnw5dwsA2pzM3blxzCw","rel_type":"m.replace"},"m.mentions":{},"body":" * btw how to get the real and imaginary parts from a complex number? ","msgtype":"m.text"}}
                      {"origin_server_ts":1707331592766,"event_id":"$wzmQF5IzLgq3Fz39k8mJGepb4X2VJCIZ_QqZe__-BPY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: Hah... Well... :-)","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: Hah... Well... :-)"}}
                      {"origin_server_ts":1707331656930,"event_id":"$RzNWVaPMLtYPc4FqtGORqDSxdV3chpi76HIu6_C7KXo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"```\nimagpart ⇐ 2÷⍨-∘+","msgtype":"m.text","formatted_body":"
                      imagpart ⇐ 2÷⍨-∘+\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1707331701925,"event_id":"$y9fYnHgpNJmSwWUhQLOd1MtumMdUkGzgp7WaVA14fRA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"And to the get real part:","msgtype":"m.text"}}
                      {"origin_server_ts":1707331704534,"event_id":"$8qVPuUCVdL-soSvn-3w2IfLnjkAThCmgRBO6CeiGuvo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"```\nrealpart ⇐ -∘imagpart\n```","msgtype":"m.text","formatted_body":"
                      realpart ⇐ -∘imagpart\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1707331717909,"event_id":"$fDoQz-06dCg462uqaTl7nrTrgo-SVm8OLj5xFGToVXY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"thanks :D ","msgtype":"m.text"}}
                      {"origin_server_ts":1707331736405,"event_id":"$AZfIavUXvyhniyI4YIqC6ZeagLYr8K3XSYOqtUYoz6U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, it's a bit ugly. I need to add functions for this.","msgtype":"m.text"}}
                      {"origin_server_ts":1707360039447,"event_id":"$C3MiEWSR-ySyvAy2EvTQ9FR9fpFWwNmuBjMRF1mD1So","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: Slightly different way where the two versions has some nice symmetry:\n```\nrealpart ⇐ 2÷⍨+∘+\n```","msgtype":"m.text","formatted_body":"

                      sienet_ja_LSD<\/a>: Slightly different way where the two versions has some nice symmetry:<\/p>\n

                      realpart ⇐ 2÷⍨+∘+\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1707360091289,"event_id":"$C36YYQz3NqboVFsSm68bQZqK5ldNFMG7waQXz8o0IIQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: You can also define realpart in exactly the same way as imagpart, but with one character difference. It gives the two versions some nice symmetry:\n\n```\nrealpart ⇐ 2÷⍨+∘+\n```","msgtype":"m.text","formatted_body":"

                      sienet_ja_LSD<\/a>: You can also define realpart in exactly the same way as imagpart, but with one character difference. It gives the two versions some nice symmetry:<\/p>\n

                      realpart ⇐ 2÷⍨+∘+\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$C3MiEWSR-ySyvAy2EvTQ9FR9fpFWwNmuBjMRF1mD1So","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * sienet_ja_LSD: You can also define realpart in exactly the same way as imagpart, but with one character difference. It gives the two versions some nice symmetry:\n\n```\nrealpart ⇐ 2÷⍨+∘+\n```","msgtype":"m.text","formatted_body":" * 

                      sienet_ja_LSD<\/a>: You can also define realpart in exactly the same way as imagpart, but with one character difference. It gives the two versions some nice symmetry:<\/p>\n

                      realpart ⇐ 2÷⍨+∘+\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1707363257502,"event_id":"$RHpy1ZOsQ7Vi9Qd4fvcLxt5UCahHE1sdUZlMyBT-_tI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"\nMarshall I don't know anything about hyperbolic trig functions, and I just realised that there are certain real inputs to acosh that result in complex results (this causes a failure in kap as the function is defined to be a double-to-double).","msgtype":"m.text","formatted_body":"Marshall<\/a> I don't know anything about hyperbolic trig functions, and I just realised that there are certain real inputs to acosh that result in complex results (this causes a failure in kap as the function is defined to be a double-to-double)."}}
                      {"origin_server_ts":1707363308951,"event_id":"$1izCehAdllZ-sHhMXyqY415MgzAkMy1TMB8szKADsRE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Do you know which of the trig functions can return complex results for real input, and what the limits are so I can fix this without always performing a complex operation (which is slower than the real one).","msgtype":"m.text"}}
                      {"origin_server_ts":1707396023828,"event_id":"$B2_keuS-DlVeMZw4MpulBrcaxyMkBcjAGTVZHmJODhs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"All the forward functions should stay real. The hyperbolic ones can be defined in terms of `*x` and `*-x`. But if the range doesn't hit all the reals then there will be a complex inverse. That's asin, acos, acosh, atanh. Also APL's `0○`, but you're probably not counting that one.","msgtype":"m.text","formatted_body":"All the forward functions should stay real. The hyperbolic ones can be defined in terms of *x<\/code> and *-x<\/code>. But if the range doesn't hit all the reals then there will be a complex inverse. That's asin, acos, acosh, atanh. Also APL's 0○<\/code>, but you're probably not counting that one."}}
                      {"origin_server_ts":1707396155037,"event_id":"$64mwl8G5MXKtXdahIGRhefnyvZe1EXGLHO-5jUHJLtQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Checking on argument `¯2` finds them all, as it happens.","msgtype":"m.text","formatted_body":"Checking on argument ¯2<\/code> finds them all, as it happens."}}
                      {"origin_server_ts":1707396798980,"event_id":"$A0OFLqgERZKt_Yv0s1T1GAc5QzosFtPjqTzhNHzQ8g8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: I note that asinh appears to give me complex results for any input less than 1.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I note that asinh appears to give me complex results for any input less than 1."}}
                      {"origin_server_ts":1707396811135,"event_id":"$TEWnfMgnKIZKw9CiOMKj9pDYxdXN7ocq9yRi0KItTr8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"While acosh always returns reals.","msgtype":"m.text"}}
                      {"origin_server_ts":1707396814604,"event_id":"$gjIwQwGIScbh8gy3xWYKy71YUe09vpsv62u1-T7SgAk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Is this correct?","msgtype":"m.text"}}
                      {"origin_server_ts":1707396965534,"event_id":"$gyVbXnHyPFjyPKv6tR4Fviufl0VsjpjdpblM3orkY0U","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No, that's backwards. cosh is symmetric with its lowest point at 1, so acosh can't have a real result on an argument smaller than that.","msgtype":"m.text","formatted_body":"No, that's backwards. cosh is symmetric with its lowest point at 1, so acosh can't have a real result on an argument smaller than that."}}
                      {"origin_server_ts":1707397066970,"event_id":"$QjOslZaA8mf4Ze5f308qfAYjniXUDT7D-pHQ2r9XArM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Hmm, the opposite then?","msgtype":"m.text"}}
                      {"origin_server_ts":1707397087954,"event_id":"$WTc2vMk_D1dZ93th4IFAgWMBVgy1AWsJb6hI6hib444","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"acosh being the one retorning complex for arguments < 1","msgtype":"m.text"}}
                      {"origin_server_ts":1707397117961,"event_id":"$cUoey032nem_FyqwKT028yHbzlsYSSaYp_OJEy9l0g4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah.","msgtype":"m.text","formatted_body":"Yeah."}}
                      {"origin_server_ts":1707397461930,"event_id":"$f1ig7vlM53GLujEwVTd9kP0CpO4c0Z7jgguyOPZ9ZvA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, thanks.","msgtype":"m.text"}}
                      {"origin_server_ts":1707397475426,"event_id":"$ingVAsPPAuemQFsW9a5IbNxFZwIfsdsOZ-1NWPgZuQ4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"And atanh is always real, right?","msgtype":"m.text"}}
                      {"origin_server_ts":1707397670637,"event_id":"$pyQMmpvKBcB7diMpdn3ZThdM1Dk235qdTuIpywdEKFM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No? Tanh range is from -1 to 1.","msgtype":"m.text","formatted_body":"No? Tanh range is from -1 to 1."}}
                      {"origin_server_ts":1707398424147,"event_id":"$GZpmuxq07CkD2M3iTyfwrjE4Eb-HEWfuC-QA4ka_Os8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Oh, thanks.","msgtype":"m.text"}}
                      {"origin_server_ts":1707398459742,"event_id":"$0hujHlLg3jgq8GoqnYuaIJo0lEFJk7XcQWn0C8z9a60","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Would you be willing to give me a list of inputs for these functions (both real and complex) that I can add to my testcases that would capture the main edge cases?","msgtype":"m.text"}}
                      {"origin_server_ts":1707398517598,"event_id":"$3JLI25YUfmztmX8O2J4PfNocwYJ2k4M7LFMIDCc9K68","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`¯2` was already mentioned","msgtype":"m.text","formatted_body":"¯2<\/code> was already mentioned"}}
                      {"origin_server_ts":1707398583033,"event_id":"$9tlQRT9kNBkDGiVCp6guUsRV806D0_G2I33lJ9Jct2w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"For acosh?","msgtype":"m.text"}}
                      {"origin_server_ts":1707398589702,"event_id":"$bXf8ElFoEncHK3jPSnWvwpQpPbQ2PpA-RtgLa6ghHsY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"for all","msgtype":"m.text","formatted_body":"for all"}}
                      {"origin_server_ts":1707398627624,"event_id":"$TBSjURPHK9Vq3O8Pe58o2fNzR9aLkOIATzChZDEnpcI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`(,∘-⍨ 1 2 3 5 6 7)○¯2` in Dyalog","msgtype":"m.text","formatted_body":"(,∘-⍨ 1 2 3 5 6 7)○¯2<\/code> in Dyalog"}}
                      {"origin_server_ts":1707400526449,"event_id":"$icQjW604UP5gZuwPrw141MlnE9Sb4rQn15TxdZTrMxA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: Since I know nothing about hyperbolic functions, I need to know what went wrong here. I run `acosh` on `¯123456.6543`.","msgtype":"m.text","formatted_body":"Marshall<\/a>: Since I know nothing about hyperbolic functions, I need to know what went wrong here. I run acosh<\/code> on ¯123456.6543<\/code>."}}
                      {"origin_server_ts":1707400553837,"event_id":"$bEzhFjGGmCCB3FffwX2wSRHOvAJFriwqXA7tYjL_usw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Dyalog returns `12.41679258J3.141592654`","msgtype":"m.text","formatted_body":"Dyalog returns 12.41679258J3.141592654<\/code>"}}
                      {"origin_server_ts":1707400585270,"event_id":"$VaqW_77PC6-iIpSOXlj23TjQr2KCJY8pRW_PiAobfO4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"But my complex library I'm using gives me `-12.41679258J3.141592654`","msgtype":"m.text","formatted_body":"But my complex library I'm using gives me -12.41679258J3.141592654<\/code>"}}
                      {"origin_server_ts":1707400597246,"event_id":"$ueTB8xDlxViEro894L0W3Ta06bLXjcF5VdNM8_yNjoo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: Or maybe you know?","msgtype":"m.text","formatted_body":"dzaima<\/a>: Or maybe you know?"}}
                      {"origin_server_ts":1707400604302,"event_id":"$m6qMKlf65VgtIFtSQpNW7jClQMy72WoPdutZB5Pxa00","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Are both of these valid results?","msgtype":"m.text"}}
                      {"origin_server_ts":1707400650058,"event_id":"$GJVM1usCfcEg3U56Pj-80ryB7XEVdGVk2jTOvoP3Ud0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Hmm... they appear to be","msgtype":"m.text"}}
                      {"origin_server_ts":1707400651955,"event_id":"$z1rdZ7y9LAysqNAsuT0lXAl7Ec2AmD0tT_vnGlQyNmQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n      6○¯12.41679258J3.141592654\n¯123456.6547J0.00005064276631\n      6○12.41679258J3.141592654\n¯123456.6547J¯0.00005064276631\n```\nso seems both are valid","msgtype":"m.text","formatted_body":"
                            6○¯12.41679258J3.141592654\n¯123456.6547J0.00005064276631\n      6○12.41679258J3.141592654\n¯123456.6547J¯0.00005064276631<\/code><\/pre>so seems both are valid"}}
                      {"state_key":"@hestheman101:matrix.org","origin_server_ts":1707400816455,"event_id":"$AhrTgH-q31c0Uzr_ONwGv_EsrQnUEcEIgGNeiC_l6vM","sender":"@hestheman101:matrix.org","user_id":"@hestheman101:matrix.org","type":"m.room.member","content":{"displayname":"fritz kuechli","membership":"join"}}
                      {"origin_server_ts":1707401698758,"event_id":"$C-JA_gOutq4BlE0VCBDBZP1HFOPgv8h1rKpAY7nTeD8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, follows from cosh(-x) = cosh(x) and cosh(x+2πi) = cosh(x).","msgtype":"m.text","formatted_body":"Yeah, follows from cosh(-x) = cosh(x) and cosh(x+2πi) = cosh(x)."}}
                      {"origin_server_ts":1707403346872,"event_id":"$AA0V7CwGGwThwsfMm9f3yQ5w4Tt31kgYiDw3zWqc6fw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I moved from my own custom complex field implementation to a third-party maths library. This library is very much alpha quality (by their own admission). Perhaps I shouldn't since complex power was broken in it :-)","msgtype":"m.text"}}
                      {"origin_server_ts":1707404092836,"event_id":"$ybIVeKfN45xSeqPDM3CI3Ld7BENAm_K97UI0WyfBi88","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, the updated trig functions are now in the web client. I hope it works correctly.","msgtype":"m.text"}}
                      {"state_key":"@semperos:matrix.fedibird.com","origin_server_ts":1707406983216,"event_id":"$ngrTBRdXG98WDZz-mAlk7aYggwKFSsEDzRJreNS0sP8","sender":"@semperos:matrix.fedibird.com","user_id":"@semperos:matrix.fedibird.com","prev_content":{"avatar_url":null,"displayname":"semperos","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.fedibird.com/foujiQodMZaHbUWyhXogsWge","displayname":"semperos","membership":"join"},"replaces_state":"$ubmqpjbcv5Wkk6Ke2CRXkwHdmf5MTFyIUQsDdoYIZWQ"}
                      {"origin_server_ts":1707477865625,"event_id":"$NWLLVIfT8yO_WPrtHESZwmf6ddvdZmsHcoKHvmWMcSY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$ybIVeKfN45xSeqPDM3CI3Ld7BENAm_K97UI0WyfBi88","rel_type":"m.annotation","key":"🙏"}}}
                      {"origin_server_ts":1707573420532,"event_id":"$rw8LPU8gajBBT4kXezSUaR1xZyOVCqijOUs5wMgQ42U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: I need your help. Sorry about this.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I need your help. Sorry about this."}}
                      {"origin_server_ts":1707573449617,"event_id":"$7NLvgXKAIXwoMhhBDISBVKPocx5VhT2aETLuisBN6hk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I was fixing some bugs in the implementation of member, and I wrote this test case:","msgtype":"m.text"}}
                      {"origin_server_ts":1707573452644,"event_id":"$puL-e6ySCPBNxPvPta7UFtZy6snZKyCVgIis-anBSM0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"```\n3.0 20752587082923246000.0 30752587082923246000.0 2000.0 ∊ 1 2 20752587082923246 × 1000\n```","msgtype":"m.text","formatted_body":"
                      3.0 20752587082923246000.0 30752587082923246000.0 2000.0 ∊ 1 2 20752587082923246 × 1000\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1707573463095,"event_id":"$5__sY_FFwcVW8nc9BccLALcVF_x5lijWFgZgTY_A6R4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"It should return `0 1 0 1`.","msgtype":"m.text","formatted_body":"It should return 0 1 0 1<\/code>."}}
                      {"origin_server_ts":1707573501123,"event_id":"$VjvItKfq9XI6wvB6JbEREsAdYA-PC_v37eLZ5SC3ZyU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It runs perfectly fine on the JVM implementation, but fails on Linux and JS. The second value is 0 (and also the last one, I think)","msgtype":"m.text"}}
                      {"origin_server_ts":1707573553957,"event_id":"$MOah2OLQRUBdQNc2AV4lEKDjhL1tKK4XoJN3H6fvvNU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"This must be some kind of floating point rounding issue.","msgtype":"m.text"}}
                      {"origin_server_ts":1707573716052,"event_id":"$3zoeUAS2Rza63un9d9lzwW3GjNSvUd6vz4i9R1ypMcc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"So the issue is that I convert the double to a bigint and then compare against the bigint, this means that this conversion is not exact in GMP.","msgtype":"m.text"}}
                      {"origin_server_ts":1707573728606,"event_id":"$a0mw3x4fd3-qh_p30ZmXyfm0dchyzPdD3BWRj_zK0gE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"So the question is: How can I do an exact double-to-bigint conversion?","msgtype":"m.text"}}
                      {"origin_server_ts":1707573828529,"event_id":"$g04juFAXp5KYBnbUiiGOmQNQoPfARXFJo7ETeeeNslw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"extract mantissa, multiply by 2^exponent with whatever necessary adjustments (+ subnormal mess)","msgtype":"m.text","formatted_body":"extract mantissa, multiply by 2^exponent with whatever necessary adjustments (+ subnormal mess)"}}
                      {"origin_server_ts":1707574044492,"event_id":"$1D9CcFDWC2k0pkkAfo0Dg-PDvYhASxKPX8mildnEnXY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(on the JS interpreter I get an `empty` result for that even; need to `⊢¨` the right arg to get any result at all)","msgtype":"m.text","formatted_body":"(on the JS interpreter I get an empty<\/code> result for that even; need to ⊢¨<\/code> the right arg to get any result at all)"}}
                      {"origin_server_ts":1707574054038,"event_id":"$aqEf_8cGAXObmmiSALYfefB-cdi5LNjrYuXUkp5GJFY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(on the JS interpreter I get an `empty` result for that expression even; need to `⊢¨` the right arg to get any result at all)","msgtype":"m.text","formatted_body":"(on the JS interpreter I get an empty<\/code> result for that expression even; need to ⊢¨<\/code> the right arg to get any result at all)"},"m.relates_to":{"event_id":"$1D9CcFDWC2k0pkkAfo0Dg-PDvYhASxKPX8mildnEnXY","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (on the JS interpreter I get an `empty` result for that expression even; need to `⊢¨` the right arg to get any result at all)","msgtype":"m.text","formatted_body":"* (on the JS interpreter I get an empty<\/code> result for that expression even; need to ⊢¨<\/code> the right arg to get any result at all)"}}
                      {"origin_server_ts":1707574109302,"event_id":"$7QP3bPULkUhGjXw_-0v3cRiBvZQiCO1_E3l2oa_ubk4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I see. I can try that.","msgtype":"m.text"}}
                      {"origin_server_ts":1707574148720,"event_id":"$e2pW-CBWrtZGycMgPcoBYaEI1b9UJIwyAHIhwolq-1s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I would like to understand what's going on here though. So I wrote a simpler test case. I run the following: `0.0+0x5000000000000000`.","msgtype":"m.text","formatted_body":"I would like to understand what's going on here though. So I wrote a simpler test case. I run the following: 0.0+0x5000000000000000<\/code>."}}
                      {"origin_server_ts":1707574155363,"event_id":"$tf0ZWxthSO7bCYdkR1sroseR8cw5ZcPbZA_ExBRUKDk","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1707574221179,"event_id":"$aSyCXNSxKCyZzOwhmNukaW5ynZk8fT2ADw4tn4xveuA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$tf0ZWxthSO7bCYdkR1sroseR8cw5ZcPbZA_ExBRUKDk","type":"m.room.redaction","content":{"redacts":"$tf0ZWxthSO7bCYdkR1sroseR8cw5ZcPbZA_ExBRUKDk"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                      {"origin_server_ts":1707574196168,"event_id":"$XcXGKWaW_JLzWXOtGMzLP4oJiBpeFvSgNq8nOb5m52E","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1707574216633,"event_id":"$0H-WIFrEcJghn9b4950tRH8e6930mIfTr4M2MImmnDk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$XcXGKWaW_JLzWXOtGMzLP4oJiBpeFvSgNq8nOb5m52E","type":"m.room.redaction","content":{"redacts":"$XcXGKWaW_JLzWXOtGMzLP4oJiBpeFvSgNq8nOb5m52E"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                      {"origin_server_ts":1707574216633,"event_id":"$0H-WIFrEcJghn9b4950tRH8e6930mIfTr4M2MImmnDk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$XcXGKWaW_JLzWXOtGMzLP4oJiBpeFvSgNq8nOb5m52E","type":"m.room.redaction","content":{"redacts":"$XcXGKWaW_JLzWXOtGMzLP4oJiBpeFvSgNq8nOb5m52E"}}
                      {"origin_server_ts":1707574221179,"event_id":"$aSyCXNSxKCyZzOwhmNukaW5ynZk8fT2ADw4tn4xveuA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$tf0ZWxthSO7bCYdkR1sroseR8cw5ZcPbZA_ExBRUKDk","type":"m.room.redaction","content":{"redacts":"$tf0ZWxthSO7bCYdkR1sroseR8cw5ZcPbZA_ExBRUKDk"}}
                      {"origin_server_ts":1707574251167,"event_id":"$uMx9sMB2zjqJrMUSl0pFLTGhG_t5qEfIDjKLotISrpE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"This gives me: `5764607523034235000.0`","msgtype":"m.text","formatted_body":"This gives me: 5764607523034235000.0<\/code>"}}
                      {"origin_server_ts":1707574284897,"event_id":"$9qCTQtznwD2qZzCDfZxzEakGiWM4Pdto0GstLGP2B1c","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[`20752587082923246000.0` is exactly `20752587082923245568`](https://tio.run/##S9ZNzknMS///XzkzLzmnNCVVwaa4JCUzXy/Djiszr0QhNzEzT0NToZqLs6AIyE/TUFLVMzQwSFPSUTAyMDc1MrUwN7AwsjQyNjIxMzAw0DPQtOaq/f8fAA)","msgtype":"m.text","formatted_body":"20752587082923246000.0<\/code> is exactly 20752587082923245568<\/code><\/a>"}}
                      {"origin_server_ts":1707574319450,"event_id":"$pHLOgA8xO05Hg_GnNbWy0J1j9DGCiomnHQD9lYHBmhw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"So I would expect that converting this back into an integer would give me that value (but as an int). But it doesn't, it gives me: `5764607523034234880`, which actually happens to be my original value.","msgtype":"m.text","formatted_body":"So I would expect that converting this back into an integer would give me that value (but as an int). But it doesn't, it gives me: 5764607523034234880<\/code>, which actually happens to be my original value."}}
                      {"origin_server_ts":1707574409282,"event_id":"$-NrT6iI7Et4vxdkVWIgJCnIqrPMff44bs3_3U15bQ7s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"From that I take it that `5764607523034234880` is a more accurate representation of the floating point value, so why does it print it like that? Is it trying to get the nearest power of 10 within the precision of the double?","msgtype":"m.text","formatted_body":"From that I take it that 5764607523034234880<\/code> is a more accurate representation of the floating point value, so why does it print it like that? Is it trying to get the nearest power of 10 within the precision of the double?"}}
                      {"origin_server_ts":1707574461089,"event_id":"$fn7v8t2XUWTz655TYoh8B4h-keeySHbCROOu6AkApdc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"you'll have to ask your number formatter why it formats a number a certain way","msgtype":"m.text","formatted_body":"you'll have to ask your number formatter why it formats a number a certain way"}}
                      {"origin_server_ts":1707574487856,"event_id":"$DGraAgCCBngsY4ilfA_dDEto7kxEn04D7nxqmAPqVOg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I guess.","msgtype":"m.text"}}
                      {"origin_server_ts":1707574490448,"event_id":"$iocoIupANLzpd96VA-KAvJKZU-zQCtrcZYF9YxBM4Dk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(and yes `(float64)5764607523034235000.0` is exactly `5764607523034234880`)","msgtype":"m.text","formatted_body":"(and yes (float64)5764607523034235000.0<\/code> is exactly 5764607523034234880<\/code>)"}}
                      {"origin_server_ts":1707574599413,"event_id":"$syWDWTrcEDfLjUN24jZ8G7986PeKpf6Ln66mQWYMP50","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`(float64)(1.0/3)` is exactly `0.333333333333333314829616256247390992939472198486328125`, number formatters usually just trim it to the minimum number of digits necessary for the number to parse back to the source. Whether that should happen for non-fractional digits will depend","msgtype":"m.text","formatted_body":"(float64)(1.0/3)<\/code> is exactly 0.333333333333333314829616256247390992939472198486328125<\/code>, number formatters usually just trim it to the minimum number of digits necessary for the number to parse back to the source. Whether that should happen for non-fractional digits will depend"}}
                      {"origin_server_ts":1707574617205,"event_id":"$H7nSNN79OVSQ7iEIXC5_jWftI4SJSHe4FeRws4nNq6M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: Oh I see... So the behaviour of Linux and JS was expected, but JVM differs. Turns out that I do something different there:","msgtype":"m.text","formatted_body":"dzaima<\/a>: Oh I see... So the behaviour of Linux and JS was expected, but JVM differs. Turns out that I do something different there:"}}
                      {"origin_server_ts":1707574655273,"event_id":"$B0PpkmuEfdPB-toYpTUzJmNzUllnr6xG-rx2bN47VcE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"On the JVM, when I want to convert `5764607523034235000.0` into a bigint, I do this: `value.toBigDecimal().toBigInteger()`. This results in: `5764607523034234900`/","msgtype":"m.text","formatted_body":"On the JVM, when I want to convert 5764607523034235000.0<\/code> into a bigint, I do this: value.toBigDecimal().toBigInteger()<\/code>. This results in: 5764607523034234900<\/code>/"}}
                      {"origin_server_ts":1707574656862,"event_id":"$lG8EE6hGfSslFt7Kh4XE_fVB30xLFMej1w2Xjh8Ua3o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"On the JVM, when I want to convert `5764607523034235000.0` into a bigint, I do this: `value.toBigDecimal().toBigInteger()`. This results in: `5764607523034234900`.","msgtype":"m.text","formatted_body":"On the JVM, when I want to convert 5764607523034235000.0<\/code> into a bigint, I do this: value.toBigDecimal().toBigInteger()<\/code>. This results in: 5764607523034234900<\/code>."},"m.relates_to":{"event_id":"$B0PpkmuEfdPB-toYpTUzJmNzUllnr6xG-rx2bN47VcE","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * On the JVM, when I want to convert `5764607523034235000.0` into a bigint, I do this: `value.toBigDecimal().toBigInteger()`. This results in: `5764607523034234900`.","msgtype":"m.text","formatted_body":" * On the JVM, when I want to convert 5764607523034235000.0<\/code> into a bigint, I do this: value.toBigDecimal().toBigInteger()<\/code>. This results in: 5764607523034234900<\/code>."}}
                      {"origin_server_ts":1707574751052,"event_id":"$lotQWqKIwd1-kMR8RNY4sV9KwFgXM1xKhOwnKg2dKNE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[ah lol](https://github.com/JetBrains/kotlin/blob/0938b46726b9c6938df309098316ce741815bb55/libraries/stdlib/jvm/src/kotlin/util/BigDecimals.kt#L127)","msgtype":"m.text","formatted_body":"ah lol<\/a>"}}
                      {"origin_server_ts":1707574843892,"event_id":"$AIvELEbXk6Nu6vla53QQBZ1Grc9QEqMcuS_33OMQ52Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Oh... my...","msgtype":"m.text"}}
                      {"origin_server_ts":1707574849265,"event_id":"$-q3-tWqD2svbFUyy0fPYDKlG9LM5BkZLy72zJ8uBQ7s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I did not realise that.","msgtype":"m.text"}}
                      {"origin_server_ts":1707574866417,"event_id":"$3OVSuW-pm704QKMAo-Qi_vp1P30Aj2sEJuL21eGdELI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I suppose they want `0.1` (aka `0.1000000000000000055511151231257827021181583404541015625`) to become `1/10` and not `3602879701896397/36028797018963968`?","msgtype":"m.text","formatted_body":"I suppose they want 0.1<\/code> (aka 0.1000000000000000055511151231257827021181583404541015625<\/code>) to become 1/10<\/code> and not 3602879701896397/36028797018963968<\/code>?"}}
                      {"origin_server_ts":1707574931337,"event_id":"$waf0xVaiHKXS9SCNbJv--BLrd_Mj8AGEPrKfUBuoHNc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"What the actual... I changed the code to do: `BigInt(BigDecimal(value))`. And guess what, tests pass.","msgtype":"m.text","formatted_body":"What the actual... I changed the code to do: BigInt(BigDecimal(value))<\/code>. And guess what, tests pass."}}
                      {"origin_server_ts":1707574946316,"event_id":"$2CR0-QdMvyn4zveOpM9dE6QQYrq2MvFgt3Axh6K-HNg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"What the actual... I changed the code to do: `BigDecimal(value).toBigInteger()`. And guess what, tests pass.","msgtype":"m.text","formatted_body":"What the actual... I changed the code to do: BigDecimal(value).toBigInteger()<\/code>. And guess what, tests pass."},"m.relates_to":{"event_id":"$waf0xVaiHKXS9SCNbJv--BLrd_Mj8AGEPrKfUBuoHNc","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * What the actual... I changed the code to do: `BigDecimal(value).toBigInteger()`. And guess what, tests pass.","msgtype":"m.text","formatted_body":" * What the actual... I changed the code to do: BigDecimal(value).toBigInteger()<\/code>. And guess what, tests pass."}}
                      {"origin_server_ts":1707574987907,"event_id":"$0KTH0Xo2mJDarH_fnA9RwUAl3kAXi43zSNYVW6aafFU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[java does the correct thing](https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#BigDecimal-double-)","msgtype":"m.text","formatted_body":"java does the correct thing<\/a>"}}
                      {"origin_server_ts":1707575003249,"event_id":"$b6S6E6bQS4ZKlKUUnooLtShrQpRMaVx2L684T-Lzfk0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Indeed.","msgtype":"m.text"}}
                      {"origin_server_ts":1707575401882,"event_id":"$BU8YAnDg7zOi7VtURETMWpG6fyZWKXTrF1We4NoyAT0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Thank you. It would have taken me way longer to solve this without your help.","msgtype":"m.text"}}
                      {"origin_server_ts":1707591897676,"event_id":"$U8ocGpcMo42bilkzLsx7uxFkaN5PvYhZIAahQ9OsJmQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now for redesigning the implementation so that I can challenge Dyalog on performance. At least in certain circumstances. ","msgtype":"m.text"}}
                      {"origin_server_ts":1707591986325,"event_id":"$i2qoOEiOqIl5c1PXr1PRQ2gKTEpTmbci05z8nW6kc2Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: by the way, do you have a good implementation of a double to rational routine? ","msgtype":"m.text","formatted_body":"dzaima<\/a>: by the way, do you have a good implementation of a double to rational routine? "}}
                      {"origin_server_ts":1707593573893,"event_id":"$OXJ7Nm5x4ErmmbB-lmUKeIPVHJh6xUQiHPjXpXzl1iw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I haven't written one","msgtype":"m.text","formatted_body":"I haven't written one"}}
                      {"origin_server_ts":1707600762924,"event_id":"$CIzB8lXU2imEZIXUQ3X-HgYijFF5N7K2nWZAtPiD758","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$U8ocGpcMo42bilkzLsx7uxFkaN5PvYhZIAahQ9OsJmQ","rel_type":"m.annotation","key":"😎"}}}
                      {"origin_server_ts":1707647100786,"event_id":"$TZNWNTpk37Ih1vRpkrP-F2MQLBjGGH_l4UX78HcvpTk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"will there be a KAP jupyter kernel? would that be hard to implement? ","msgtype":"m.text"}}
                      {"origin_server_ts":1707649787572,"event_id":"$md_GJgvC-DWkjpkHT7Qjqbn_Sk0AVCefVbhYgzu4_ss","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: I have no idea. Jypiter is a python thing, I don't think I've ever used python.","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: I have no idea. Jypiter is a python thing, I don't think I've ever used python."}}
                      {"origin_server_ts":1707650284646,"event_id":"$5_G9UNj-fyeV45t4ww_20-kA945HUrpPY4suVcT0m5Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"But unless the framework is bad, it shouldn't be very hard. Why don't you give it a try?","msgtype":"m.text"}}
                      {"origin_server_ts":1707651132569,"event_id":"$x4LVIg_aWLEh084c7zl4hWufNFwrt5pMoID0uA1-QYM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I don't know anything about kotlin development, but it seems like you could probly add it as a kotlin-jupyter library https://github.com/Kotlin/kotlin-jupyter/tree/master/docs","msgtype":"m.text"}}
                      {"origin_server_ts":1707651222295,"event_id":"$VtYOUfST6A4f2GB6mUMSwol6aRJ2Y3ZaP-vxWqF_7gM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: No, that appears to be for running kotlin code in the thing.","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: No, that appears to be for running kotlin code in the thing."}}
                      {"origin_server_ts":1707651272300,"event_id":"$HpcDnUZ8QyCCL4AO5zgVTvuH08kYBgnxJyH-LPTXHQA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Kotlin shouldn't even be involved here. I think it communicates with the engine using some protocol. Whatever that protocol it, it should be easy to implement on the Kap side. I'd need to know what to do though.","msgtype":"m.text"}}
                      {"origin_server_ts":1707651379012,"event_id":"$cYn08FC2yNVp30CPrip1z1XSqqJo8tGEVCum028hGbw","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye ok, might be complex. but the dyalog kernel just communicates with running dyalog server https://github.com/Dyalog/dyalog-jupyter-kernel/blob/master/dyalog_kernel/kernel.py","msgtype":"m.text"}}
                      {"origin_server_ts":1707651399089,"event_id":"$TI_3Ah2QC0EU1xwzfgoC0RsaQW0Lwo23aRQnMLoN2CU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Right.","msgtype":"m.text"}}
                      {"origin_server_ts":1707651417871,"event_id":"$qiINt3jfc8BNX0DzXZ0X3pkMdq5Zm22212r_NzPyVJo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I've planned to implement a kap server for a while now (I'll need one for Emacs integration).","msgtype":"m.text"}}
                      {"origin_server_ts":1707651470442,"event_id":"$ZaqQvWCubPf6kbqyoy2XKMxn34eWXwBG3vHgSWi_oMU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye so would need to wait at least for the server before can into jupyter","msgtype":"m.text"}}
                      {"origin_server_ts":1707651509760,"event_id":"$7gJEnB4F0YJ-HhQLZN31QYgwuD9-svC5jmRDo5pIxQU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Well, I'll implement the server if you want. Just tell me what features you need to build the integration.","msgtype":"m.text"}}
                      {"origin_server_ts":1707651672596,"event_id":"$6AUemDyFZ6K-cUpujWNJVEdgurVHkEspHxNRi9MfCn4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$7gJEnB4F0YJ-HhQLZN31QYgwuD9-svC5jmRDo5pIxQU","rel_type":"m.annotation","key":"🙏"}}}
                      {"origin_server_ts":1707651703568,"event_id":"$ZsBXxlUAvkIkb4whKOGhHwLICs63vUS0-hY-xGc1QpM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I'm presuming you want to pass expressions for evaluation, but the question is how results should be returned.","msgtype":"m.text"}}
                      {"origin_server_ts":1707651718856,"event_id":"$NjPCwpugd99JgJDbENjcYc7ulY1jzGIwcBNaDUJHs1w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Strings? Some kind of datastructre describing the content?","msgtype":"m.text"}}
                      {"origin_server_ts":1707651746847,"event_id":"$PB7ZXLJKVMq0xUDRlXfHjNoN8R7GKbtIljeoxkBVFao","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"All of those are trivial in fact.","msgtype":"m.text"}}
                      {"origin_server_ts":1707746489720,"event_id":"$-OIWOg66mOw5C2SeBHvmqlkAKk48kr1w8bdNRqFVpfw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I have a problem. Hashmaps are not consistent with equality right now. It's because 1.0 and 1 does not hash to the same value. For integer valued doubles, this is reasonably easy to fix, but I also ned 1/2 to has to the same value as 0.5. Is there an efficient way to do this?","msgtype":"m.text"}}
                      {"origin_server_ts":1707746684856,"event_id":"$eyeZTQryJh1rn3RgjlmmICNrkOvtmrtzs472qQ6eWdE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I have a problem. Hashmaps are not consistent with equality right now. It's because 1.0 and 1 does not hash to the same value. For integer valued doubles, this is reasonably easy to fix, but I also need 1/2 to has to the same value as 0.5. Is there an efficient way to do this?","msgtype":"m.text"},"m.relates_to":{"event_id":"$-OIWOg66mOw5C2SeBHvmqlkAKk48kr1w8bdNRqFVpfw","rel_type":"m.replace"},"body":"* I have a problem. Hashmaps are not consistent with equality right now. It's because 1.0 and 1 does not hash to the same value. For integer valued doubles, this is reasonably easy to fix, but I also need 1/2 to has to the same value as 0.5. Is there an efficient way to do this?","msgtype":"m.text"}}
                      {"origin_server_ts":1707746692307,"event_id":"$ddg59A02K3EfNuPuxCaWGQ7X-_SvkhF_bOC1OjRbKig","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I have a problem. Hashmaps are not consistent with equality right now. It's because 1.0 and 1 does not hash to the same value. For integer valued doubles, this is reasonably easy to fix, but I also need 1/2 to hash to the same value as 0.5. Is there an efficient way to do this?","msgtype":"m.text"},"m.relates_to":{"event_id":"$-OIWOg66mOw5C2SeBHvmqlkAKk48kr1w8bdNRqFVpfw","rel_type":"m.replace"},"body":"* I have a problem. Hashmaps are not consistent with equality right now. It's because 1.0 and 1 does not hash to the same value. For integer valued doubles, this is reasonably easy to fix, but I also need 1/2 to hash to the same value as 0.5. Is there an efficient way to do this?","msgtype":"m.text"}}
                      {"origin_server_ts":1707746731535,"event_id":"$h-fGyb6cr_3MOiYjO4BI0irtG_VdaOe27NKe3ezlgKQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I guess I could coerce the value to doiuble before hashing.","msgtype":"m.text"}}
                      {"origin_server_ts":1707746805546,"event_id":"$9f2mO9-cVbKA628vpUBBRPOwoF3cZphmtTZamg2QsDg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That wouuld cause very large bigints to always hash to the same value though ","msgtype":"m.text"}}
                      {"origin_server_ts":1707746946113,"event_id":"$wB3Hm6g-Bb-xMJXqVOW_yZhNT7KajBNKJ1lAMFBjRdQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"there's \"if denominator is a power of two and numerator is less than 2^53, hash as double\". But even then there are collisions possible around subnormals (or just large/small denominator exponents in general if not limited to whatever range floats have)","msgtype":"m.text","formatted_body":"there's "if denominator is a power of two and numerator is less than 2^53, hash as double". But even then there are collisions possible around subnormals (or just large/small denominator exponents in general if not limited to whatever range floats have)"}}
                      {"origin_server_ts":1707747117083,"event_id":"$Ea5zxq0Soa2D_HitXJThSKS4iY8c2V9xikDjs00t_F8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"oh, obvious thing - `float64(r) == r? hash(float64(r)) : hash(r)`","msgtype":"m.text","formatted_body":"oh, obvious thing - float64(r) == r? hash(float64(r)) : hash(r)<\/code>"}}
                      {"origin_server_ts":1707747361306,"event_id":"$K7CzKM0sctPDv5FDsMmef8fp3Mi_e7E7-wLlXe_eR_I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh right","msgtype":"m.text"}}
                      {"origin_server_ts":1707747367431,"event_id":"$fCqSWXGOfd4g23EIDcO_Oe1gGf302sDUPEpXL733yac","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks that makes sense","msgtype":"m.text"}}
                      {"origin_server_ts":1707748502904,"event_id":"$GGujirXB2_KSWhqS9qArCzxh4-boFCq1kKU0Pe33ZZM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hmm. Equality with doubles is complicated. Regular = between rational and double converts to double before comparing, to be consistent with the semantics of scalar operations.","msgtype":"m.text"}}
                      {"origin_server_ts":1707751037720,"event_id":"$YzZZ7M2n9u3dywddHwFe2_G0bO9jNqyZ80o8-1_T564","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"huh. [well that's fun](https://kapdemo.dhsdevelopments.com/clientweb2/#a%E2%86%9010*20%20%E2%8B%84%20b%E2%86%90a%2B0.0%20%E2%8B%84%20c%E2%86%90a%2B1%20%E2%8B%84%20(a%3Db)%20(b%3Dc)%20(a%3Dc))","msgtype":"m.text","formatted_body":"huh. well that's fun<\/a>"}}
                      {"origin_server_ts":1707755643800,"event_id":"$p52pNDX1OAymrDZ6-g4Z0iaHwoePiLA4ADdWHDYblsM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Wait what. That looks like a bug.","msgtype":"m.text"}}
                      {"origin_server_ts":1707755711274,"event_id":"$N6__lzKpUwq8k4uGph9eWyiOsXhOjCbecJYVNclQZik","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that last comparison is comparing a bigint with bigint so 0 is expected","msgtype":"m.text","formatted_body":"that last comparison is comparing a bigint with bigint so 0 is expected"}}
                      {"origin_server_ts":1707755739572,"event_id":"$Bcml5fs3fUypM0LOw_WPLSRn2MVwNlcgFyxXk3ciUv4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Wait. I was checking on the phone. I'm at the computer now.","msgtype":"m.text"}}
                      {"origin_server_ts":1707755788812,"event_id":"$sv48sR3MEbBDiyPX37d8Kop3yxPADv9nKh63qqyJn6I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yes, you're right. The first two comparisons are double comparisons, while the last is pure bigint like you said.","msgtype":"m.text"}}
                      {"origin_server_ts":1707756282060,"event_id":"$QgHx0pRxYYs0iMj_MiX02gGYa9vDM57RHzRk4UqNsYE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and thus your `=` is non-transitive","msgtype":"m.text","formatted_body":"and thus your =<\/code> is non-transitive"}}
                      {"origin_server_ts":1707756292109,"event_id":"$C6hxXJKxpAbdIjUoqY9Fr51y8FQcs4Ui5JE5XrfkCLM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Correct. Tha","msgtype":"m.text"}}
                      {"origin_server_ts":1707756297931,"event_id":"$KOtQfiNlceT14WTTrMypoJROEBjE_qZ6deLRw1rIry0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Correct. That's a problem.","msgtype":"m.text"},"m.relates_to":{"event_id":"$C6hxXJKxpAbdIjUoqY9Fr51y8FQcs4Ui5JE5XrfkCLM","rel_type":"m.replace"},"m.mentions":{},"body":" * Correct. That's a problem.","msgtype":"m.text"}}
                      {"origin_server_ts":1707756322407,"event_id":"$gV--sisRMpZWVZM3Ia3wxdKeYDhzsao0qpIpiFEV-bE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"To be fair, this it the same in C :-)","msgtype":"m.text"}}
                      {"origin_server_ts":1707756362872,"event_id":"$g-or8Gg2U8nUHjNMH0a6uoaBKRqk8JOfJGBxMrrBMfw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ha","msgtype":"m.text","formatted_body":"ha"}}
                      {"origin_server_ts":1707756870339,"event_id":"$FlvKV06rFooaP9fyRiwB2EDE8dI_TUnDZjlTZLf2T8Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"A more interesting question is how to handle comparisons. You could argue that `(1÷3)<(1÷3.0)` should be 1?","msgtype":"m.text","formatted_body":"A more interesting question is how to handle comparisons. You could argue that (1÷3)<(1÷3.0)<\/code> should be 1?"}}
                      {"origin_server_ts":1707756969009,"event_id":"$UX98k2V14-HSeGchlCbQ5hv286xOABurEltWXRVv6CM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"not any more or less than you can argue that `(1÷3)=(1÷3.0)` should be zero imo","msgtype":"m.text","formatted_body":"not any more or less than you can argue that (1÷3)=(1÷3.0)<\/code> should be zero imo"}}
                      {"origin_server_ts":1707756983288,"event_id":"$37IOvytKVzCZSF6iwRnPwsnjLa07ZzO8qQFbKnjfzbY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah. You're right.","msgtype":"m.text"}}
                      {"origin_server_ts":1707808533812,"event_id":"$TF19XhyiEVREdiL-i3fyARgQb6o-AwiUfYsezWKetuU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: actually, the more I think about this, the more I'm starting to wonder if those semantics are actually any good. In CL, the following is false: `(> (/ 1.0 3.0) (/ 1 3))`.","msgtype":"m.text","formatted_body":"dzaima<\/a>: actually, the more I think about this, the more I'm starting to wonder if those semantics are actually any good. In CL, the following is false: (> (/ 1.0 3.0) (/ 1 3))<\/code>."}}
                      {"origin_server_ts":1707808555731,"event_id":"$OjvlVkyzQ3-G2EudgXA8nA0oh3-w-DZI9HFUJjxUons","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"However, this is true `(= 1.0 1)`","msgtype":"m.text","formatted_body":"However, this is true (= 1.0 1)<\/code>"}}
                      {"origin_server_ts":1707808575461,"event_id":"$9arUot-HTx5_wLbXysD_StNBA1ohyfNuXbw3X9ppKCY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I think Kap should do the same.","msgtype":"m.text"}}
                      {"origin_server_ts":1707858340521,"event_id":"$E-rV-DCIKsmCtdXsj53BxJRaFAQqsctO_ficogESLcU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Wouldn\u2019t it depend on which way it\u2019s easier to change semantics?","msgtype":"m.text"}}
                      {"origin_server_ts":1707858437054,"event_id":"$aWPEAWrK_HPxvanaTzubM5exZHc5uVpmAWJB8yMXafo","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"So if it\u2019s easier to convert types then it would be better to have decimals and integer comparison equal to 0 but if it\u2019s easier to check what type it is separately then better to have it equal to 1","msgtype":"m.text"}}
                      {"origin_server_ts":1708097788488,"event_id":"$31RG_aRjVrX12XAggUFeX7cg2HXLkZ3cuRBUnOqy-_M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ok, I've reworked the equality stuff. The ordering of numbers are now consistent. And it's also consistent with the total ordering you get by tge grade functions. ","msgtype":"m.text"}}
                      {"origin_server_ts":1708097799202,"event_id":"$QCJDE2lBgXW-nrkKdi_7R4w7Kn0dAi-211aFm6qxUSs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"At least I think it works now. ","msgtype":"m.text"}}
                      {"origin_server_ts":1708104835282,"event_id":"$sShYCSpDiNekf8VuGXMVIOUFirXRGr48-OnnYmPc6r8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$31RG_aRjVrX12XAggUFeX7cg2HXLkZ3cuRBUnOqy-_M","rel_type":"m.annotation","key":"👍"}}}
                      {"origin_server_ts":1708106801230,"event_id":"$mXoP_lf5eAvG2zYWFq87nj26uBysNlPjGReYsGEM2HE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: help :-)","msgtype":"m.text","formatted_body":"dzaima<\/a>: help :-)"}}
                      {"origin_server_ts":1708106811052,"event_id":"$0_d-DPPCuRy3CE6RHOye94XTCrckB03cYq6EJ9-97pE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Also Marshall ?","msgtype":"m.text","formatted_body":"Also Marshall<\/a> ?"}}
                      {"origin_server_ts":1708106866885,"event_id":"$IVO1iRaCmX4oFEkSL09LIeCr4L_7CA2TB4y11ICcSVg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"hello yes i exist","msgtype":"m.text","formatted_body":"hello yes i exist"}}
                      {"origin_server_ts":1708106869989,"event_id":"$ajMXIEe9vEWb8ioenGo_5u5SNMgSlfuUfHhyMX4e2FU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I implemented this function to create an exact rational from a double: https://codeberg.org/loke/array/src/branch/master/mpbignum/src/commonMain/kotlin/com/dhsdevelopments/mpbignum/bigint-rational.kt#L63","msgtype":"m.text"}}
                      {"origin_server_ts":1708106880087,"event_id":"$Wq7wdw7C7stCPbjkx1Hg9DeiZ4o5hx3V1V6brJ0L1hM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"However, it's broken and I need help figuring out why.","msgtype":"m.text"}}
                      {"origin_server_ts":1708106905803,"event_id":"$sPkZjBdQX2BLE_yND3ucloAjZceo6V4OnUNZ-UCIIKc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"The rationalise function is exposed via `math:toRational`, and I get this:","msgtype":"m.text","formatted_body":"The rationalise function is exposed via math:toRational<\/code>, and I get this:"}}
                      {"origin_server_ts":1708106950397,"event_id":"$PD71zL7tLarPKhPoXNPGBfvTBpwFWZ4kWZOHoLilJFQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I call this `math:toRational 1e200` which gives me a rational, but adding 0.0 gives me `2.888781490313463e+168` which is clearly wrong.","msgtype":"m.text","formatted_body":"I call this math:toRational 1e200<\/code> which gives me a rational, but adding 0.0 gives me 2.888781490313463e+168<\/code> which is clearly wrong."}}
                      {"origin_server_ts":1708106958245,"event_id":"$WBvlrj6L1-HvKm4FxMZXDeXc9Q_cBCrjHPJicsQQVxw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"My implementation works for small doubles though.","msgtype":"m.text"}}
                      {"origin_server_ts":1708106975054,"event_id":"$ySaBaN6Fl6OrshzNy9hSfo_zFI2caXruHXeflJczTI0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Any idea?","msgtype":"m.text"}}
                      {"origin_server_ts":1708107043813,"event_id":"$_uXoSKoqaubSAFNoBZtYxI1qMoy6_hNv3mn3BnT8_fE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`Rational.make(BigIntConstants.TWO.pow(eAdjusted), BigInt.of(m * s))` can't be right, can it? Everything should be in the numerator.","msgtype":"m.text","formatted_body":"Rational.make(BigIntConstants.TWO.pow(eAdjusted), BigInt.of(m * s))<\/code> can't be right, can it? Everything should be in the numerator."}}
                      {"origin_server_ts":1708107099681,"event_id":"$48FZ5P7Gs_vA6hst-fjAHBJPZkGD5P0aJp9DiMM3RV8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"right, denumerator should never ever be anything other than a power of two","msgtype":"m.text","formatted_body":"right, denumerator should never ever be anything other than a power of two"}}
                      {"origin_server_ts":1708107235186,"event_id":"$IE5sk3vCEHQieL5qM-UgmARHLp8QvxgQfyt1hh2XIUw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"right, denominator should never ever be anything other than a power of two","msgtype":"m.text","formatted_body":"right, denominator should never ever be anything other than a power of two"},"m.relates_to":{"event_id":"$48FZ5P7Gs_vA6hst-fjAHBJPZkGD5P0aJp9DiMM3RV8","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* right, denominator should never ever be anything other than a power of two","msgtype":"m.text","formatted_body":"* right, denominator should never ever be anything other than a power of two"}}
                      {"origin_server_ts":1708107276855,"event_id":"$vqrOsZusLQCJLLEC79r7Zk5RkzXGaJrnEi88Y008XBw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Hmm","msgtype":"m.text"}}
                      {"origin_server_ts":1708107278163,"event_id":"$-JlkiG4V97EhPjtNrf1-uZUjAEGSOuCSEEwyB2jaRPM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"there you just want to multiply the two parts, making an integer (i.e. denominator `1`)","msgtype":"m.text","formatted_body":"there you just want to multiply the two parts, making an integer (i.e. denominator 1<\/code>)"}}
                      {"origin_server_ts":1708107323769,"event_id":"$pHqTz6bhU4ucTno76f5sAsMCBKyRtv4jrsjF6Y-Vm1Q","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`1e200` is an exact integer even if it isn't exactly 10^200","msgtype":"m.text","formatted_body":"1e200<\/code> is an exact integer even if it isn't exactly 10^200"}}
                      {"origin_server_ts":1708107360460,"event_id":"$xUpj-5nmc8QhNFywDrYJx-LtAdNxRnwVgM9KlNpbi5c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Oh right.","msgtype":"m.text"}}
                      {"origin_server_ts":1708107361726,"event_id":"$qRmq73LQqLImCONpuYYiEP1Y7Qmo5IzU3tSmn0HcsXU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"`Rational.make(BigIntConstants.TWO.pow(eAdjusted) * BigInt.of(m * s), BigIntConstants.ONE)`","msgtype":"m.text","formatted_body":"Rational.make(BigIntConstants.TWO.pow(eAdjusted) * BigInt.of(m * s), BigIntConstants.ONE)<\/code>"}}
                      {"origin_server_ts":1708107655213,"event_id":"$YyhxHyzr6YY6BCVJNPmJiTbOgSrwqyO9Dw9Qq1EiRDY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, fixed. Thanks.","msgtype":"m.text"}}
                      {"origin_server_ts":1708107749031,"event_id":"$ThKGWI7gAgG5Ok8n7bp_Z3q72Vpqc8X1unhZel39Gvs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Although in the interpreter it shouldn't generate a rational but a bigint, since those are faster.","msgtype":"m.text"}}
                      {"origin_server_ts":1708107863823,"event_id":"$aSQLf1sOHVmU7SyBcRDWI6kAapsANv3IiLNELuUvK08","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://codeberg.org/loke/array/commit/9b6dab385cf636c1ee6a27916a86050c423336ea","msgtype":"m.text"}}
                      {"origin_server_ts":1708107888769,"event_id":"$fZ-w5ufKJXDZ3kS3k7oEsnFVspbmMZ3oHbPSYT1R4k8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Thanks for the help.","msgtype":"m.text"}}
                      {"origin_server_ts":1708107890917,"event_id":"$jhnYsu7drKLj8voLWAQss4y-7IEsdlql0HDtV4tpDws","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"For small integers (less than ~2^52) to turn into ints you'd want to check the denominator afterwards anyway.","msgtype":"m.text","formatted_body":"For small integers (less than ~2^52) to turn into ints you'd want to check the denominator afterwards anyway."}}
                      {"origin_server_ts":1708107921480,"event_id":"$XOhgp6gHSiNCrP2kCUydT1bx5nDI0UoJJ68MHxCnwLQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, I'll make an optimised version of this thing that knows about kap types.","msgtype":"m.text"}}
                      {"origin_server_ts":1708108004161,"event_id":"$gENZSbBv4UmUd-hKXB8Yl0X7UNLWqqHSvwUOm4uLJ7Q","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"should be approximately equivalent to just do an `if (denominator is 1) convert back to bigint`","msgtype":"m.text","formatted_body":"should be approximately equivalent to just do an if (denominator is 1) convert back to bigint<\/code>"}}
                      {"origin_server_ts":1708108021750,"event_id":"$ooGvkd2oroHI2bhdvdv4UGDBG3muy5hxAP-7LILByRE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"When you compare an integer with a non-integer double it now does a rational conversion before comparing. That could be slow, and probably needs an optimised path.","msgtype":"m.text"}}
                      {"origin_server_ts":1708108024687,"event_id":"$-kHWWJ1fbv7N6AFaGjkCC2HwrtoR3P-3AxXte4cUo6E","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"should be equivalent to just do an `if (denominator is 1) convert back to bigint`, and hopefully about as efficient","msgtype":"m.text","formatted_body":"should be equivalent to just do an if (denominator is 1) convert back to bigint<\/code>, and hopefully about as efficient"},"m.relates_to":{"event_id":"$gENZSbBv4UmUd-hKXB8Yl0X7UNLWqqHSvwUOm4uLJ7Q","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* should be equivalent to just do an `if (denominator is 1) convert back to bigint`, and hopefully about as efficient","msgtype":"m.text","formatted_body":"* should be equivalent to just do an if (denominator is 1) convert back to bigint<\/code>, and hopefully about as efficient"}}
                      {"origin_server_ts":1708108056550,"event_id":"$3yegY-1Jl-tetaaNHHamMlEhWlu34QBTf0ABdO15vNE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$gENZSbBv4UmUd-hKXB8Yl0X7UNLWqqHSvwUOm4uLJ7Q"}},"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> should be equivalent to just do an `if (denominator is 1) convert back to bigint`, and hopefully about as efficient\n\nYeah, the comparison function does this already and never actually calls `rationalise()` in those cases.","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @dzaima:matrix.org<\/a>
                      should be equivalent to just do an if (denominator is 1) convert back to bigint<\/code>, and hopefully about as efficient<\/blockquote><\/mx-reply>Yeah, the comparison function does this already and never actually calls rationalise()<\/code> in those cases."}} {"origin_server_ts":1708108058389,"event_id":"$8rNtgizWj8qAq1iQVP1RS332jMzPun8DDIn2Wu_RACo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"should be equivalent to just do an `if (denominator is 1) convert back to bigint` afterwards, and hopefully about as efficient if the rational impl is any good","msgtype":"m.text","formatted_body":"should be equivalent to just do an if (denominator is 1) convert back to bigint<\/code> afterwards, and hopefully about as efficient if the rational impl is any good"},"m.relates_to":{"event_id":"$gENZSbBv4UmUd-hKXB8Yl0X7UNLWqqHSvwUOm4uLJ7Q","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* should be equivalent to just do an `if (denominator is 1) convert back to bigint` afterwards, and hopefully about as efficient if the rational impl is any good","msgtype":"m.text","formatted_body":"* should be equivalent to just do an if (denominator is 1) convert back to bigint<\/code> afterwards, and hopefully about as efficient if the rational impl is any good"}} {"origin_server_ts":1708108065093,"event_id":"$1MAn_WLzhIPoNuR31hUqvZ1ZRkLG_oRQumGtmkoCBLY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"But it does call it for non-integers.","msgtype":"m.text"}} {"origin_server_ts":1708108129269,"event_id":"$OZTb9eFMy4_n3QvwLcIB0Vhsh8hiAk4xA57NpOrI6K8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"What I mean is that small ints go through the division case anyway, like 3.0 will end up as (3*2^51)/(2^51) or something like that. But yes, you could check whether it's an integer before conversion.","msgtype":"m.text","formatted_body":"What I mean is that small ints go through the division case anyway, like 3.0 will end up as (3*2^51)/(2^51) or something like that. But yes, you could check whether it's an integer before conversion."}} {"origin_server_ts":1708108139133,"event_id":"$2L9dE0hhqriBEgkDAVODWW2GHgecpilTHt8SAMqSCKE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://codeberg.org/loke/array/src/branch/master/array/src/commonMain/kotlin/array/number.kt#L147","msgtype":"m.text"}} {"origin_server_ts":1708280094031,"event_id":"$mesMzg0KwtVL46C4oZjaU2lkRhAnYEp8F6YPuA8Y6So","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"So I watched a presentation from the dyalog conference where they were talking about the performance of `∊`. As best as I can tell, the very basic implementation of this function in kap is in the same ballpark in terms of performance as dyalog.","msgtype":"m.text","formatted_body":"So I watched a presentation from the dyalog conference where they were talking about the performance of ∊<\/code>. As best as I can tell, the very basic implementation of this function in kap is in the same ballpark in terms of performance as dyalog."}} {"origin_server_ts":1708280118451,"event_id":"$fgfRAl6gXrKelTb2WmFVubhOIc6vfXTsJwfqKoR51iE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$mesMzg0KwtVL46C4oZjaU2lkRhAnYEp8F6YPuA8Y6So","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1708280152630,"event_id":"$Cd3xPqcZvgzQwVgGMQ-hHR9-BtkHX8By7q_SkO5Z6CI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"In some cases, it's even faster, but most of the time being a few times slower, which is perfectly acceptable to me.","msgtype":"m.text"}} {"origin_server_ts":1708280205278,"event_id":"$I-3ev9cn9CDgFK8j-ZI_WrgVCBMBLX_mqOAUBaXDiBg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Dyalog 18.2 doesn't include the vector algorithms from 18.0, and even in 18.0, some optimizations for `∊` were disabled in an update.","msgtype":"m.text","formatted_body":"Dyalog 18.2 doesn't include the vector algorithms from 18.0, and even in 18.0, some optimizations for ∊<\/code> were disabled in an update."}} {"origin_server_ts":1708280211609,"event_id":"$Ufz7MbvFTj4npeypCb76LF4FmimnObIYu81rV_BHqsI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I'm really confused about dyalog performance. In some cases, it's ridiculously fast, but others, that seems they should be very trivial, it's really slow.","msgtype":"m.text"}} {"origin_server_ts":1708280414498,"event_id":"$t1YXgaoLBniiK1-RaAMT2ih3gGKil83DXyDai09eZSE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: sure, but there are some pretty obvious optimisations they simply don't seem to do. If I read the graphs correctly (from the presentation), runtime changes depending on the size of the right argument, when it contains \"random integers in [0,1]\". That's a boolean array, and all you have to do is to check if it contains any 0's or 1's, and then the matching should be constant time.","msgtype":"m.text","formatted_body":"
                      Marshall<\/a>: sure, but there are some pretty obvious optimisations they simply don't seem to do. If I read the graphs correctly (from the presentation), runtime changes depending on the size of the right argument, when it contains \"random integers in [0,1]\". That's a boolean array, and all you have to do is to check if it contains any 0's or 1's, and then the matching should be constant time."}} {"origin_server_ts":1708280459430,"event_id":"$UA03KCelSXx2UlP9t3kCQcFdR4NgyytKuR0Ak9Xeejk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"This one specifically: https://youtu.be/9Xj6hW3VtEk?si=oY00h002Z10zuQK-&t=239","msgtype":"m.text"}} {"origin_server_ts":1708280539207,"event_id":"$Z48N0VxzIAxQTDYDlzIom-SZHsyutRDClSWvX2TxtNY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yes, I'm fairly sure this benchmarks against the butchered 18.0.","msgtype":"m.text","formatted_body":"Yes, I'm fairly sure this benchmarks against the butchered 18.0."}} {"origin_server_ts":1708280566561,"event_id":"$0TA72fGeNiDgHoRZtea5upJQ9iNytnKgHOTwynS_ZIU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: it's for both. He explains that in the beginning.","msgtype":"m.text","formatted_body":"Marshall<\/a>: it's for both. He explains that in the beginning."}} {"origin_server_ts":1708280640109,"event_id":"$PX7c2RHEiZ3Poz2J1A_lKcDVTarPhdGUKbLwhMdkGzY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Both what? I mean the update to version 18.0, which happened while it was the current version, rather than 18.0 as released.","msgtype":"m.text","formatted_body":"Both what? I mean the update to version 18.0, which happened while it was the current version, rather than 18.0 as released."}} {"origin_server_ts":1708280702243,"event_id":"$O0E1So_vr9yXdzPvf09Vj3-dqfPTHJznLOZegzRqB4c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"All his graphs are for the original 18.0 release (the fast one) and the slow release (the patched one, labelled 19.0 in his slides)","msgtype":"m.text"}} {"origin_server_ts":1708280730059,"event_id":"$oLaYuGKFSBD92VDwjHEPIqBO0PWbmE0gZMzCCThDEBs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No, there were silent revisions to 18.0.","msgtype":"m.text","formatted_body":"No, there were silent revisions to 18.0."}} {"origin_server_ts":1708280767136,"event_id":"$68TRO-gU5OOy8T2rBeQlXXOBuhjPR2Gj6knucfzTSKM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Sometimes new algorithms in 18.0 fully covered previous special cases, which I was then able to remove. With these disabled, the interpreter falls back to the absolutely generic case, which can be slower than 17.1.","msgtype":"m.text","formatted_body":"Sometimes new algorithms in 18.0 fully covered previous special cases, which I was then able to remove. With these disabled, the interpreter falls back to the absolutely generic case, which can be slower than 17.1."}} {"origin_server_ts":1708280778445,"event_id":"$fV-aqwufqDAmz0uxfuP2oTcxfACJjhrCuo9s1GH6ukw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yes, but if I understand the beginning of his speech, he said that the left one is the fast one (before removal of the optimisations), and the right one is the slow one (after removal)","msgtype":"m.text"}} {"origin_server_ts":1708280901246,"event_id":"$-r5IaITL2X-8E0q5tpiiVOYYNa_5-ayeUFdPya5lqYg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$UA03KCelSXx2UlP9t3kCQcFdR4NgyytKuR0Ak9Xeejk"}},"format":"org.matrix.custom.html","body":"The right argument is `Y`, which is on the vectical axis, along which the runtime does not change (and shouldn't change assuming `Y` is such that short-circuiting the search is possible; and time aross `X` varies as that's the size of the output)","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>The right argument is Y<\/code>, which is on the vectical axis, along which the runtime does not change (and shouldn't change assuming Y<\/code> is such that short-circuiting the search is possible; and time aross X<\/code> varies as that's the size of the output)"}} {"origin_server_ts":1708280908266,"event_id":"$MvpIbbtmGfEyxaaO0qfDK67SFdxNUxURY94EtGIrSaI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think you're interpreting wrong. I don't think Karta has ever acknowledged these revisions (which may have happened before he joined) and I'm not sure he's aware of them.","msgtype":"m.text","formatted_body":"I think you're interpreting wrong. I don't think Karta has ever acknowledged these revisions (which may have happened before he joined) and I'm not sure he's aware of them."}} {"origin_server_ts":1708280955066,"event_id":"$eQODYG8fOC1ErDC8_oAneIR4eUuERU3vVtFaS983Xvw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: Could you listen to the beginning of the talk and tell me if I misunderstood?","msgtype":"m.text","formatted_body":"Marshall<\/a>: Could you listen to the beginning of the talk and tell me if I misunderstood?"}} {"origin_server_ts":1708281015341,"event_id":"$z1Wpz2b-lARCXNVvNmHLVFG-76p9l_k-AhzCOEirshg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I just did, it sounds to me like he only talks about 18.0 versus 18.2?","msgtype":"m.text","formatted_body":"I just did, it sounds to me like he only talks about 18.0 versus 18.2?"}} {"origin_server_ts":1708281062442,"event_id":"$jtWCZ1t4atY72VTI-qenlN3ChVMFgEtYB10aDFEaYFU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I don't remembered which measurements exactly, but I've measured against the development version of 18.0 I had from when I left Dyalog and found in some cases that his 18.0 measurements were much slower.","msgtype":"m.text","formatted_body":"I don't remembered which measurements exactly, but I've measured against the development version of 18.0 I had from when I left Dyalog and found in some cases that his 18.0 measurements were much slower."}} {"origin_server_ts":1708281157540,"event_id":"$wCRc2GfcCxZbUAH_vV1oeWxtZMcyAhz90Giici8fxNE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Thanks.","msgtype":"m.text"}} {"origin_server_ts":1708281239199,"event_id":"$ReJS4fTclh0m600cOOaqctH0juyDHjFoUWtbHgcgvcA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I think as long as I'm not more than 10x slower than dyalog, I'm pretty happy.","msgtype":"m.text"}} {"origin_server_ts":1708281692453,"event_id":"$gsAHICHs5WUBhEkxPkc9WWnjwWq0-rj05V46G3t4PQk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[This](https://chat.stackexchange.com/transcript/52405?m=60543140#60543140) looks to be when I found out about 18.0 revisions; nearly 100x slower for a case of `∊`.","msgtype":"m.text","formatted_body":"This<\/a> looks to be when I found out about 18.0 revisions; nearly 100x slower for a case of ∊<\/code>."}} {"origin_server_ts":1708282211916,"event_id":"$E8KsLhxS4o8_BJrAzYQbkHx4S4CPZ3AOMqMsHtewTUE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"When was this? The title says feb but there is no year","msgtype":"m.text"}} {"origin_server_ts":1708282264257,"event_id":"$VGtiV175KmTRts_yM72mrFUDrq00bkP2DiPx4UIYgYo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It's at the top right: Feb 28, 2022.","msgtype":"m.text","formatted_body":"It's at the top right: Feb 28, 2022."}} {"origin_server_ts":1708282291472,"event_id":"$fbSslFRGLtzt4irWCZXwSUg9HH33cbCE6cSjeAOOPxU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"don't see any place that doesn't mention the year even","msgtype":"m.text","formatted_body":"don't see any place that doesn't mention the year even"}} {"origin_server_ts":1708304302510,"event_id":"$cPnH4DEre3z2aAVamPW5oo5OJKCTbRPJ9BiI10bproo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Maybe it's not visible on mobile. ","msgtype":"m.text"}} {"origin_server_ts":1708304310982,"event_id":"$sUwHyjhTmfnQzZpUflyJbhtLYi1tfmcpEzsyj0O7CCI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"1000001227.jpg","msgtype":"m.image","url":"mxc://dhsdevelopments.com/iGsYvBiLfvRMJXviyhvawRWN","info":{"size":171523,"w":1080,"h":2340,"mimetype":"image/jpeg"}}} {"origin_server_ts":1708351849219,"event_id":"$59hQnHG3qYD7uwN5tYFVFHpPrmSSwBgZCi0kCF6SFR4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ah, mobile. yeah does look like there's no full date on mobile anywhere somehow (closest I can find is the URL if clicking prev/next day)","msgtype":"m.text","formatted_body":"ah, mobile. yeah does look like there's no full date on mobile anywhere somehow (closest I can find is the URL if clicking prev/next day)"}} {"origin_server_ts":1708351877735,"event_id":"$ijUi_DS_0wmqKlPGi7Nn8JkQIWF7GFaGSqclJxEEH3w","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"ah, mobile. yeah does look like there's no full date on mobile anywhere somehow (closest I can find is the URL of the prev/next day buttons)","msgtype":"m.text","formatted_body":"ah, mobile. yeah does look like there's no full date on mobile anywhere somehow (closest I can find is the URL of the prev/next day buttons)"},"m.relates_to":{"event_id":"$59hQnHG3qYD7uwN5tYFVFHpPrmSSwBgZCi0kCF6SFR4","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* ah, mobile. yeah does look like there's no full date on mobile anywhere somehow (closest I can find is the URL of the prev/next day buttons)","msgtype":"m.text","formatted_body":"* ah, mobile. yeah does look like there's no full date on mobile anywhere somehow (closest I can find is the URL of the prev/next day buttons)"}} {"origin_server_ts":1708415904251,"event_id":"$UPoK6zZZ2u_iTnVsSBFWqh6MBGKt4qLs5cZiQlzEIqg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"If I have a list of numbers (horizontal axis labels) which are floating point, what's the best way to figure out how many digits to keep? Let's say the numbers are `0.01234 0.023456 0.03456`, here I want to abberivate them to `0.01 0.02 0.03`.","msgtype":"m.text","formatted_body":"If I have a list of numbers (horizontal axis labels) which are floating point, what's the best way to figure out how many digits to keep? Let's say the numbers are 0.01234 0.023456 0.03456<\/code>, here I want to abberivate them to 0.01 0.02 0.03<\/code>."}} {"origin_server_ts":1708415925036,"event_id":"$I0EhTdhAWQt0FGqtTL3A0G_8MfUSBKKxk-1d_KsPvGI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The reason I need this is to deal with the axis labels in this case:","msgtype":"m.text"}} {"origin_server_ts":1708415925785,"event_id":"$qu3mgAUKh0uY-SEPgxWE_9rpiL-XDmb7TR5c8V_nqfw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#0%2010%20graph%3Aplot%20%CE%BBmath%3Asin","msgtype":"m.text"}} {"origin_server_ts":1708420867381,"event_id":"$AqEo9_2CYrAnkueHl4ZTaPMiw38jSQGs2DAF1tq751w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I guess what I'm looking for is an algorithm that gives me the smallest number of decimals I need to include to differentiate a set of floating point numbers.","msgtype":"m.text"}} {"origin_server_ts":1708420888528,"event_id":"$yDuVW02VWNDymiQLfS4JdOpEDwXjy4purKBac5YAPlk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Or maybe I cal do rational arithmetic here, since i already have implemented a rational number library.","msgtype":"m.text"}} {"origin_server_ts":1708434358072,"event_id":"$J0aGKr-o4b2dhRBp_z5dP3fOKAbGPaTYo8kTnMz-DfA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"There's a maximum based on `⌊/¯2-/∧labels`. The basic idea would be if you can distinguish that number from 0, then you can distinguish any two numbers. But that's not exactly accurate with round-to-nearest. I think what you want to do is require the test value to be rounded down.","msgtype":"m.text","formatted_body":"There's a maximum based on ⌊/¯2-/∧labels<\/code>. The basic idea would be if you can distinguish that number from 0, then you can distinguish any two numbers. But that's not exactly accurate with round-to-nearest. I think what you want to do is require the test value to be rounded down."}} {"origin_server_ts":1708439392830,"event_id":"$d7fVhA4RKG1vOVmz5uc62uODDrADsZYDxMRFEXTr-Xw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: rounded down to what?","msgtype":"m.text","formatted_body":"Marshall<\/a>: rounded down to what?"}} {"origin_server_ts":1708439403262,"event_id":"$zt8c17-ONuI0Hlc0jNnaH9QMugMZkZWZZmiSVbt2Nr0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Some more hacking by the way:","msgtype":"m.text"}} {"origin_server_ts":1708439405707,"event_id":"$Ngd4lcOmqqewjbS1LJJdvnyShbmHzPO5u6dt3hiYgpM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://dhsdevelopments.com/MLOsPmztluIeRXrerWCobdxZ","info":{"xyz.amorgan.blurhash":"LCQvwR00xuxu9Gt7t7ja~qxuRjWB","size":305869,"w":1352,"h":1288,"mimetype":"image/png"}}} {"origin_server_ts":1708439852536,"event_id":"$pdHwettAZywrkIg2847qp5BNtQHHP5vcvwuebbVDbq0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"As in, you want `⌊(10*k)×⌊/¯2-/∧labels` to be nonzero.","msgtype":"m.text","formatted_body":"As in, you want ⌊(10*k)×⌊/¯2-/∧labels<\/code> to be nonzero."}} {"origin_server_ts":1708439981072,"event_id":"$s01AnsZA0ljGJm_aTQXvpKDQJ1ugrxp5Ky72ZYfceXI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So, `1≤(10*k)×⌊/¯2-/∧labels` or `k≥10⍟÷⌊/¯2-/∧labels`.","msgtype":"m.text","formatted_body":"So, 1≤(10*k)×⌊/¯2-/∧labels<\/code> or k≥10⍟÷⌊/¯2-/∧labels<\/code>."}} {"origin_server_ts":1708440577400,"event_id":"$IPc5dy0SyP8jzC-PLvQVS3aLqTBggKdSNc8DQeDS3XM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"for a graph with fixed-spacing labels it'd probably make more sense to determine the digits to show from that directly, instead of recomputing from labels after the fact (i.e. if you've already decided to put a label at every exactly 0.2 step (presumably computed with some base-10 logic already) you already have the answer; and if you don't do that, you probably should, graphs are more readable if the deltas are some nice `10^n*(1 or 2 or 4 or 5)`)","msgtype":"m.text","formatted_body":"for a graph with fixed-spacing labels it'd probably make more sense to determine the digits to show from that directly, instead of recomputing from labels after the fact (i.e. if you've already decided to put a label at every exactly 0.2 step (presumably computed with some base-10 logic already) you already have the answer; and if you don't do that, you probably should, graphs are more readable if the deltas are some nice 10^n*(1 or 2 or 4 or 5)<\/code>)"}} {"origin_server_ts":1708440678454,"event_id":"$lMJkhmEegIsws_zA5I1PKbGXwc2EuzuI28BoVCJy5VM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"for a graph with fixed-spacing labels it'd probably make more sense to determine the digits to show from that directly, instead of recomputing from labels after the fact (i.e. if you've already decided to put a label at every exactly 0.2 step (presumably computed with some base-10 logic already) you already have the answer; and if you don't do that, you probably should, graphs are more readable if the deltas are some nice \n10^n*(1 or 2 or 5))","msgtype":"m.text","formatted_body":"for a graph with fixed-spacing labels it'd probably make more sense to determine the digits to show from that directly, instead of recomputing from labels after the fact (i.e. if you've already decided to put a label at every exactly 0.2 step (presumably computed with some base-10 logic already) you already have the answer; and if you don't do that, you probably should, graphs are more readable if the deltas are some nice
                      10^n*(1 or 2 or 5))"},"m.relates_to":{"event_id":"$IPc5dy0SyP8jzC-PLvQVS3aLqTBggKdSNc8DQeDS3XM","rel_type":"m.replace"},"body":"* for a graph with fixed-spacing labels it'd probably make more sense to determine the digits to show from that directly, instead of recomputing from labels after the fact (i.e. if you've already decided to put a label at every exactly 0.2 step (presumably computed with some base-10 logic already) you already have the answer; and if you don't do that, you probably should, graphs are more readable if the deltas are some nice \n10^n*(1 or 2 or 5))","msgtype":"m.text"}} {"origin_server_ts":1708440691239,"event_id":"$1roTwy3S0uCOizQUhFO4a1kd7qGnXwjcOf_2Ogq2J-c","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"for a graph with fixed-spacing labels it'd probably make more sense to determine the digits to show from that directly, instead of recomputing from labels after the fact (i.e. if you've already decided to put a label at every exactly 0.2 step (presumably computed with some base-10 logic already) you already have the answer; and if you don't do that, you probably should, graphs are more readable if the deltas are some nice `10^n*(1 or 2 or 5)`)","msgtype":"m.text","formatted_body":"for a graph with fixed-spacing labels it'd probably make more sense to determine the digits to show from that directly, instead of recomputing from labels after the fact (i.e. if you've already decided to put a label at every exactly 0.2 step (presumably computed with some base-10 logic already) you already have the answer; and if you don't do that, you probably should, graphs are more readable if the deltas are some nice 10^n*(1 or 2 or 5)<\/code>)"},"m.relates_to":{"event_id":"$IPc5dy0SyP8jzC-PLvQVS3aLqTBggKdSNc8DQeDS3XM","rel_type":"m.replace"},"body":"* for a graph with fixed-spacing labels it'd probably make more sense to determine the digits to show from that directly, instead of recomputing from labels after the fact (i.e. if you've already decided to put a label at every exactly 0.2 step (presumably computed with some base-10 logic already) you already have the answer; and if you don't do that, you probably should, graphs are more readable if the deltas are some nice `10^n*(1 or 2 or 5)`)","msgtype":"m.text"}} {"origin_server_ts":1708440971176,"event_id":"$DLYlJFlWwaHHX-XZRq47dF-jKyLHzYkfVQhEA0q21Rc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"there's also the question of like `1000.00001 1000.00002 graph:plot λmath:sin` where that prefix `1000.0000` is effectively useless but still consumes space on each label. Graphs are hard.","msgtype":"m.text","formatted_body":"there's also the question of like 1000.00001 1000.00002 graph:plot λmath:sin<\/code> where that prefix 1000.0000<\/code> is effectively useless but still consumes space on each label. Graphs are hard."}} {"origin_server_ts":1708444127276,"event_id":"$tm9BzPr5U__XZBso1w7P0g-ZsXnTwIdXKoyvuVwFLyI","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$zt8c17-ONuI0Hlc0jNnaH9QMugMZkZWZZmiSVbt2Nr0","rel_type":"m.annotation","key":"👍"}}} {"origin_server_ts":1708449757883,"event_id":"$_gwDfTUNmFgLzH4Wi5jviQmj3M3BipWG7pIzDRgvSKc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Actually, in this case, the labels are displayed by the chart library. If I wrote my own, I could use one of the existing algorithms that can do this really well, but here I just feel all the labels as strings and the library picks the ones to display.","msgtype":"m.text"}} {"origin_server_ts":1708450011345,"event_id":"$K-eRXESenKfXgHmk34KDju25zxARRwKvn9O2UIb0dnI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"so you give it a label for each number and the library displays Some™ of those semi-arbitrarily? Then the precise cutoff point doesn't even really matter, if you generated `1000÷⍨⍳1000` and rounded those to 3 places but the library displays just 7, you'd necessarily still get like `0 0.166 0.333 0.499 0.666 0.832 0.999`","msgtype":"m.text","formatted_body":"so you give it a label for each number and the library displays Some™ of those semi-arbitrarily? Then the precise cutoff point doesn't even really matter, if you generated 1000÷⍨⍳1000<\/code> and rounded those to 3 places but the library displays just 7, you'd necessarily still get like 0 0.166 0.333 0.499 0.666 0.832 0.999<\/code>"}} {"origin_server_ts":1708450049756,"event_id":"$8i5B2aeCl3_xLyM4mvQb0_oqQa0OnCoYLY8nVAFvTdY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"so you give it a label for each number and the library displays Some™ of those semi-arbitrarily? Then the precise cutoff point doesn't even really matter, e.g. if you generated `1000÷⍨⍳1000` and rounded those to 3 places but the library displays just 7, you'd necessarily still get like `0 0.166 0.333 0.499 0.666 0.832 0.999`","msgtype":"m.text","formatted_body":"so you give it a label for each number and the library displays Some™ of those semi-arbitrarily? Then the precise cutoff point doesn't even really matter, e.g. if you generated 1000÷⍨⍳1000<\/code> and rounded those to 3 places but the library displays just 7, you'd necessarily still get like 0 0.166 0.333 0.499 0.666 0.832 0.999<\/code>"},"m.relates_to":{"event_id":"$K-eRXESenKfXgHmk34KDju25zxARRwKvn9O2UIb0dnI","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* so you give it a label for each number and the library displays Some™ of those semi-arbitrarily? Then the precise cutoff point doesn't even really matter, e.g. if you generated `1000÷⍨⍳1000` and rounded those to 3 places but the library displays just 7, you'd necessarily still get like `0 0.166 0.333 0.499 0.666 0.832 0.999`","msgtype":"m.text","formatted_body":"* so you give it a label for each number and the library displays Some™ of those semi-arbitrarily? Then the precise cutoff point doesn't even really matter, e.g. if you generated 1000÷⍨⍳1000<\/code> and rounded those to 3 places but the library displays just 7, you'd necessarily still get like 0 0.166 0.333 0.499 0.666 0.832 0.999<\/code>"}} {"origin_server_ts":1708450107192,"event_id":"$zBCiX67kHN4aIS-HNXYTPiAFuOARJWVkojsbYGpG4ls","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: yes. But the more I think about it, the more certain I'm getting that there must be a way to override this behaviour.","msgtype":"m.text","formatted_body":"
                      dzaima<\/a>: yes. But the more I think about it, the more certain I'm getting that there must be a way to override this behaviour."}} {"origin_server_ts":1708450119033,"event_id":"$CdNJpYN41BD0xHugwQyMaEGnFTUCIMXOF8qi2qsTxqw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's way too excessive to pass hundreds of labels that aren't used.","msgtype":"m.text"}} {"origin_server_ts":1708450143071,"event_id":"$U_JO9e04Z4LC-XOqQr94dHs6uE86sUxQNx5mcx3jeDM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I will read the documentation later. :-)","msgtype":"m.text"}} {"origin_server_ts":1708562583471,"event_id":"$sEIuJYqcx8TTCkg3KbK0DbxqAUi9LPq5J1brN40klow","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Kap has emerged as the clear winner in [this feature comparison matrix](https://aplwiki.com/wiki/Comparison_of_APL_dialects#Language_features)!","msgtype":"m.text","formatted_body":"Kap has emerged as the clear winner in this feature comparison matrix<\/a>!"}} {"origin_server_ts":1708567063022,"event_id":"$E-t10lcUpt7g9batDrBf7UMQqSx6dteHgXKhkOSkgrc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yay. :-)","msgtype":"m.text"}} {"origin_server_ts":1708572971152,"event_id":"$-S075oHRS81p3fKOr1FQeQRleJ4icBzMZAl4AOGXbTE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The table says that GNU APL has bigints, that's not correct I think.","msgtype":"m.text"}} {"origin_server_ts":1708572985440,"event_id":"$I4CNtOaB8VhKp3AwJQF6_bMfpu35LntjwWv-j_HCQcs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Unless it was implemented recently and I'm not aware of this.","msgtype":"m.text"}} {"origin_server_ts":1708589379612,"event_id":"$D4CTYDPJ85y0jZfTsKu0YHuuJROnnCcj9LuT6B2E5nI","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$sEIuJYqcx8TTCkg3KbK0DbxqAUi9LPq5J1brN40klow","rel_type":"m.annotation","key":"😎"}}} {"origin_server_ts":1708602930592,"event_id":"$AQepB8D2Yk9HO45P74rjT43lXCL9_FYfL6uJW5U6TfA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I took that from the infobox on the GNU page, which says it has rationals. I guess that comes from [this section](https://www.gnu.org/software/apl/apl.html#Section-2_002e13), which has much weaker support than I realized.","msgtype":"m.text","formatted_body":"I took that from the infobox on the GNU page, which says it has rationals. I guess that comes from this section<\/a>, which has much weaker support than I realized."}} {"origin_server_ts":1708603772220,"event_id":"$ShfMB7Ne7O_TVyc6vYjUYY74BVxEEGiQkIQWLqwLpXk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"> However, if the result is outside the guaranteed range but still within the 64-bit integer range, e.g. between 9200000000000000000 and 9223372036854775807 (exclusive), then GNU APL gives no guarantees as to whether the result will be a 64-bit integer or a 64-bit floating point (with the resulting loss of precision). This decision is usually function-specific and driven by performance considerations.","msgtype":"m.text","formatted_body":"
                      However, if the result is outside the guaranteed range but still within the 64-bit integer range, e.g. between 9200000000000000000 and 9223372036854775807 (exclusive), then GNU APL gives no guarantees as to whether the result will be a 64-bit integer or a 64-bit floating point (with the resulting loss of precision). This decision is usually function-specific and driven by performance considerations.<\/blockquote>"}} {"origin_server_ts":1708603793910,"event_id":"$qYyOBLc3v0Khlm5lu7JAcnK_sjOsgZoFrHXRltiem7U","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"How is it that all the slowest implementations excuse themselves by constant reference to performance?","msgtype":"m.text","formatted_body":"How is it that all the slowest implementations excuse themselves by constant reference to performance?"}} {"origin_server_ts":1708606539196,"event_id":"$_gmiPEdOrBwHyC_2sUjp-Uivy1x0CoDFNXE5x7-Qc1s","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Also ISO seems pretty clear about not allowing differently-rounding types at all, would think this sort of thing should be disclosed by a dialect claiming to be standard-compliant:\n> A given number, such as a *counting-number*, may have several hardware representations. Except for their effect on system resources, these representations should be indistinguishable to a *conforming-program*.","msgtype":"m.text","formatted_body":"Also ISO seems pretty clear about not allowing differently-rounding types at all, would think this sort of thing should be disclosed by a dialect claiming to be standard-compliant:
                      A given number, such as a counting-number<\/b>, may have several hardware representations. Except for their effect on system resources, these representations should be indistinguishable to a conforming-program<\/b>.<\/blockquote>"}} {"origin_server_ts":1708613012519,"event_id":"$yY7TDIvmbocm41aCnolC44XKJc9GyRswkJ1jPlP4hxs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. The implementation of rationals was essentially a failed experiment. I had been discussing the rational numbers with him before it was implemented, and then when it was done I was surprised to see that it was implemented without bigints.","msgtype":"m.text"}} {"origin_server_ts":1708613128413,"event_id":"$j1-11a7xpc4aCdLAh31r7lG7gRN5j60JXkoqqwQ9LdI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But it became clear that rationals are kind of useless without bigints\n","msgtype":"m.text"}} {"origin_server_ts":1708613134608,"event_id":"$G9o-2a_VJ4y1INlwMNSZ8z1hOnhVC8sCKtrkXDOD6VQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"But it became clear that rationals are kind of useless without bigints.\n","msgtype":"m.text"},"m.relates_to":{"event_id":"$j1-11a7xpc4aCdLAh31r7lG7gRN5j60JXkoqqwQ9LdI","rel_type":"m.replace"},"body":"* But it became clear that rationals are kind of useless without bigints.\n","msgtype":"m.text"}} {"origin_server_ts":1708616324414,"event_id":"$Utp3D2VgAAWtH0DO4-SK391PuAGtCxAUzdM4xhoho5Y","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://matrix.org/ZTLBAKLCfeCpGcFptrVmlnTh","info":{"xyz.amorgan.blurhash":"L0S$ov00DjH[0000-qV[}e~q0J00","size":51717,"w":856,"h":450,"mimetype":"image/png"}}} {"origin_server_ts":1708616325673,"event_id":"$jN5FTUK59oOOf1MCpF4jRQGff3KTnk-2wBwzMVfbZTg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"this is a bug? ","msgtype":"m.text"}} {"origin_server_ts":1708616453883,"event_id":"$Sb9fmkvHgWEXKTfY1tYSEagwY5seuB_mDseOc6REjFM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ah you need to use parenthesis to enclose the negative numbers","msgtype":"m.text"}} {"origin_server_ts":1708616524487,"event_id":"$Qxgl4_je4sRgYWpZdOmDwa6TNbkGWSWDltS7x6Bhp-c","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"or `¯`","msgtype":"m.text","formatted_body":"or ¯<\/code>"}} {"origin_server_ts":1708616536224,"event_id":"$4KRORkbhn6_Jwoah0n6mtU0CypM8d8xOV9evgQCN9DY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye","msgtype":"m.text"}} {"origin_server_ts":1708616541338,"event_id":"$X9An9Dun-F5Zjz9pDpjsq4lW1gyp4ITyjnwkJFCHzV8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes. Just like any APL.","msgtype":"m.text"}} {"origin_server_ts":1708764722582,"event_id":"$HCw0Z3l-l5xJUpSCwFUjo1p-ywDUiA7OCFSM6VWokNg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Improved the formatting a little: https://kapdemo.dhsdevelopments.com/clientweb2/#0%2010%20graph%3Aplot%20%CE%BBmath%3Asin%20%CE%BB(3%C3%B7%E2%8D%A8math%3Acos)","msgtype":"m.text"}} {"origin_server_ts":1708794645154,"event_id":"$kafGkuf2yLK6eZrvVMrGPpR2Lcmw-JINeuqkoIviw5E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I need to implement compile-time evaluation (for supporting things like Lisp-like macros and compile-time conditions). I would like all compile-time constructs to be be identifiable, unlike the current special constructs which just has magic names. I have a few options, but since i Have no sense of æsthetics I have no idea what it should look like.","msgtype":"m.text"}} {"origin_server_ts":1708794689164,"event_id":"$Kt9I6l25BAP0OP70cWZjO8hnO8A9IqKJ-yvXhi2ccLI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I have been thinking about prefixing all the compile-time operations with `⎕`, since I don't use that from APL anyway. There is also `○` which is likewise not used.","msgtype":"m.text","formatted_body":"I have been thinking about prefixing all the compile-time operations with ⎕<\/code>, since I don't use that from APL anyway. There is also ○<\/code> which is likewise not used."}} {"origin_server_ts":1708794721835,"event_id":"$5d6VJxHjQkAe4LQgLNYuxmsVCI1wtdAv2H-RIc3BtMc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"There is also the single ASCII character that is not assigned, `#`, which would be in line with how it works in both C and Common Lisp.","msgtype":"m.text","formatted_body":"There is also the single ASCII character that is not assigned, #<\/code>, which would be in line with how it works in both C and Common Lisp."}} {"origin_server_ts":1708794808441,"event_id":"$mib5dEilCTM5Fhn24oSrfNn-rvQNaH3L9OAbZ4yXVrM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"This will allow me to do things like:\n```\n⎕if (:linux ≡ sysparam 'arch)\n∇ linuxOnlyFunction {\n}\n⎕endif\n```","msgtype":"m.text","formatted_body":"

                      This will allow me to do things like:<\/p>\n

                      ⎕if (:linux ≡ sysparam 'arch)\n∇ linuxOnlyFunction {\n}\n⎕endif\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1708794814048,"event_id":"$aLjsNtFBGMez5JWcuiCJcNNXhjlnOM1bIaK8-ZnrioI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"This will allow me to do things like:\n\n```\n⎕if (:linux ≡ sysparam 'arch)\n∇ linuxOnlyFunction {\n    .....\n}\n⎕endif\n```","msgtype":"m.text","formatted_body":"

                      This will allow me to do things like:<\/p>\n

                      ⎕if (:linux ≡ sysparam 'arch)\n∇ linuxOnlyFunction {\n    .....\n}\n⎕endif\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$mib5dEilCTM5Fhn24oSrfNn-rvQNaH3L9OAbZ4yXVrM","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * This will allow me to do things like:\n\n```\n⎕if (:linux ≡ sysparam 'arch)\n∇ linuxOnlyFunction {\n    .....\n}\n⎕endif\n```","msgtype":"m.text","formatted_body":" * 

                      This will allow me to do things like:<\/p>\n

                      ⎕if (:linux ≡ sysparam 'arch)\n∇ linuxOnlyFunction {\n    .....\n}\n⎕endif\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1708794823218,"event_id":"$75gW3WMaS6NRu4N7M4R-mi6Nevs8-7W9AfKntpDMvhE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Are Lisp macros actually tied into a notion of separate compile time and runtime? What can a compile-time condition do that a normal one can't?","msgtype":"m.text","formatted_body":"Are Lisp macros actually tied into a notion of separate compile time and runtime? What can a compile-time condition do that a normal one can't?"}}
                      {"origin_server_ts":1708794877927,"event_id":"$_UMFZNwBzFhEUtQjAkLsZrhzW_hZgg48mgA_vbDR8t8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: In Lisp, they are indeed. A macro in Lisp is a function that is evaluated at compile time and generates code.","msgtype":"m.text","formatted_body":"Marshall<\/a>: In Lisp, they are indeed. A macro in Lisp is a function that is evaluated at compile time and generates code."}}
                      {"origin_server_ts":1708794939316,"event_id":"$RO0F-6m_Y89sMZQnxGVQ66FWEPDWYuU8FGqy10mbpxQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"The CL specification defined three different phases where evaluation can take place, load, compile and evaluate. So you can do stuff like:\n```\n(eval-when (compile-toplevel)\n  ...)\n```","msgtype":"m.text","formatted_body":"

                      The CL specification defined three different phases where evaluation can take place, load, compile and evaluate. So you can do stuff like:<\/p>\n

                      (eval-when (compile-toplevel)\n  ...)\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1708794951840,"event_id":"$it6A-evixTgH35kEN0TdUwQlZit9PfAbZ5OQOqIrg0E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The code is then evaluated when this part of the code is compiled.","msgtype":"m.text"}}
                      {"origin_server_ts":1708947580073,"event_id":"$z5ehF853qhqCnrB2l23KKr7TBRGMkWuiAH39mu3au3w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I've been working on a blog post. There are a lot of TODO in there, but I'd still love some feedback.","msgtype":"m.text"}}
                      {"origin_server_ts":1708947604684,"event_id":"$h422t_5Jyfj5gqwsVDKjKlzroUi_C-F8uCAza_YgM7s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Here's the draft. Don't share anywhere yet, since it'll change a lot. https://write.as/5oz3jyk00lkujfwd.md","msgtype":"m.text"}}
                      {"origin_server_ts":1708990537710,"event_id":"$96mqqBIOpbxBvqNeWX57ZjjmaQZqAGbfS-6OH3PAV4M","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$z5ehF853qhqCnrB2l23KKr7TBRGMkWuiAH39mu3au3w"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> I've been working on a blog post. There are a lot of TODO in there, but I'd still love some feedback.\n\nmaybe a paragraph or two about the language itself. or if the website this article appears talks about the language, then embedding some links to a page that introduces the language and its benefits and how they relate to spreadsheets. I can follow the trail of thought when talking about spreadsheets and their downsides, but then I sort of lose the plot when Kap is mentioned, because it's not clear are we talking about a spreadsheet tool or an actual programming language that is supposed to replace/complement spreadsheet work","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                      I've been working on a blog post. There are a lot of TODO in there, but I'd still love some feedback.<\/blockquote><\/mx-reply>maybe a paragraph or two about the language itself. or if the website this article appears talks about the language, then embedding some links to a page that introduces the language and its benefits and how they relate to spreadsheets. I can follow the trail of thought when talking about spreadsheets and their downsides, but then I sort of lose the plot when Kap is mentioned, because it's not clear are we talking about a spreadsheet tool or an actual programming language that is supposed to replace/complement spreadsheet work"}} {"origin_server_ts":1708998975824,"event_id":"$EpAUSgsJiAAbltAA867ysS_9vT868p_uBf6lWGyBvlg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Good point. Indeed it is get the same feeling. I do need to expand that. ","msgtype":"m.text"}} {"origin_server_ts":1709011605926,"event_id":"$QwizrGbI85HOVld2YCCuzJKgJXoAkmAYhy7bwmQMOC4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Good point. Indeed I get the same feeling. I do need to expand that. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$EpAUSgsJiAAbltAA867ysS_9vT868p_uBf6lWGyBvlg","rel_type":"m.replace"},"m.mentions":{},"body":" * Good point. Indeed I get the same feeling. I do need to expand that. ","msgtype":"m.text"}} {"origin_server_ts":1709011621827,"event_id":"$5KCFTnWTmj4lmLpAHL4F2E2EELj0Wte6nMxwFIpIv3c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I've updated it a bit now to take the feedback into account.","msgtype":"m.text"}} {"origin_server_ts":1709023551675,"event_id":"$uf_oCT6U4Vqsq51_rVcIaIIqfw6pIr71NbdR6TGZOIk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$5KCFTnWTmj4lmLpAHL4F2E2EELj0Wte6nMxwFIpIv3c","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1709053263459,"event_id":"$1iTs1ZAnpy0M1k5UCL5xT4NsMitcT0VaAb0IBMO8O7c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I've published it. https://blog.dhsdevelopments.com/array-languages-vs","msgtype":"m.text"}} {"origin_server_ts":1709057060325,"event_id":"$LhHL3pZ7OhQfWDXpxLvdOdOVc1mZdLUni12ahuo48fE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"looks cool!","msgtype":"m.text"}} {"state_key":"@kafka64:matrix.org","origin_server_ts":1709150476182,"event_id":"$qCD8b3-taV6oLfURh075qONvvJHrLlqBZyb0KbFVriw","sender":"@kafka64:matrix.org","user_id":"@kafka64:matrix.org","type":"m.room.member","content":{"displayname":"kyoung","membership":"join"}} {"origin_server_ts":1709210509838,"event_id":"$deQd2efcdpN8oI6w5Dyghgg-5XURsmeyLDcSfys3y3Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: Before I make a fool out of myself, can you explain a performance discrepancy I can see.","msgtype":"m.text","formatted_body":"
                      Marshall<\/a>: Before I make a fool out of myself, can you explain a performance discrepancy I can see."}} {"origin_server_ts":1709210558404,"event_id":"$SQtLXX_tQwpMDAmRDBIbaCuba62IJej6TRS7DH7pnTc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"So I loaded `/usr/share/dict/linux.words` into an array of strings in Kap and Dyalog. The resulting array is 479826 elements long (the number of words in the file).","msgtype":"m.text","formatted_body":"So I loaded /usr/share/dict/linux.words<\/code> into an array of strings in Kap and Dyalog. The resulting array is 479826 elements long (the number of words in the file)."}} {"origin_server_ts":1709210587525,"event_id":"$0kwDw0zgqI5wSTHsTRTIPyHq7wLpc83i8Ph2Y8CsQL0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I then sort it using `∧` in Kap and it takes 76 ms. I do the same on Dyalog (same machine) and it's 204 ms.","msgtype":"m.text","formatted_body":"I then sort it using ∧<\/code> in Kap and it takes 76 ms. I do the same on Dyalog (same machine) and it's 204 ms."}} {"origin_server_ts":1709210614616,"event_id":"$zQdL1t7aMNr8tLcrvsbjSs9IUCssS9GwblWl_MG-Zxs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I refuse to believe that Kap is inherently 3 times faster as sorting strings than Dyalog, so there is a problem with my measurement.","msgtype":"m.text"}} {"origin_server_ts":1709210641009,"event_id":"$HNR0en9VjIC8OZcLbJwL1laNwfVpDhxSoCbfnwHO6n4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"In dyalog I run `]runtime \"lines[⍋lines]\"` to benchmark.","msgtype":"m.text","formatted_body":"In dyalog I run ]runtime \"lines[⍋lines]\"<\/code> to benchmark."}} {"origin_server_ts":1709210679057,"event_id":"$8mogBeeJR0nsy1yMaeaYk8GIpDtDLlHYhjOVOO-0i2g","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh, you want to use a sorting idiom, such as the function `{⍵[⍋⍵]}`.","msgtype":"m.text","formatted_body":"Oh, you want to use a sorting idiom, such as the function {⍵[⍋⍵]}<\/code>."}} {"origin_server_ts":1709210721162,"event_id":"$tNdt4e34WyJBkGEJs_E7NyZvvR-FdowLc6AgVv65CH4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I tried with`]runtime \"{⍵[⍋⍵]} lines\"`. That took 206 ms.","msgtype":"m.text","formatted_body":"I tried with]runtime \"{⍵[⍋⍵]} lines\"<\/code>. That took 206 ms."}} {"origin_server_ts":1709210726136,"event_id":"$Zv4hx9ShKJSDwe_LYZgg7w4i4LLeCJDh0TTJ53FOiWs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I tried with `]runtime \"{⍵[⍋⍵]} lines\"`. That took 206 ms.","msgtype":"m.text","formatted_body":"I tried with ]runtime \"{⍵[⍋⍵]} lines\"<\/code>. That took 206 ms."},"m.relates_to":{"event_id":"$tNdt4e34WyJBkGEJs_E7NyZvvR-FdowLc6AgVv65CH4","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * I tried with `]runtime \"{⍵[⍋⍵]} lines\"`. That took 206 ms.","msgtype":"m.text","formatted_body":" * I tried with ]runtime \"{⍵[⍋⍵]} lines\"<\/code>. That took 206 ms."}} {"origin_server_ts":1709210749123,"event_id":"$g2IEp9PqwwF7Pzn0RXLxOQUul85CiGKb9CcuzCmgfOk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Dyalog is pretty poor with strings generally, so that doesn't seem terribly surprising.","msgtype":"m.text","formatted_body":"Dyalog is pretty poor with strings generally, so that doesn't seem terribly surprising."}} {"origin_server_ts":1709210764649,"event_id":"$oNkrp7_8kjbpNsnGgeN3UKI3bNH2wcysZH_WetbGNEk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"But why is it so bad at it?","msgtype":"m.text"}} {"origin_server_ts":1709210778403,"event_id":"$ibqSwKdsZ4ZnOFHpRxnRYim5h05M3V6RWty_gml1Jk8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I haven't even implemented by string optimisation code that I have been planning.","msgtype":"m.text"}} {"origin_server_ts":1709210791284,"event_id":"$lF01LXRzG6fqLcXGCam2fzHHnG1u9MQCNXHhxfrjSbM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[18.0 performance notes](https://www.dyalog.com/dyalog-versions/180/performance.htm) say \"Simple vectors of complex numbers and decimal floats, as well as mixed or nested vectors, are now sorted using Timsort. Timsort is 20% to 2x faster even on random arrays...\" and this has presumably been reverted.","msgtype":"m.text","formatted_body":"18.0 performance notes<\/a> say \"Simple vectors of complex numbers and decimal floats, as well as mixed or nested vectors, are now sorted using Timsort. Timsort is 20% to 2x faster even on random arrays...\" and this has presumably been reverted."}} {"origin_server_ts":1709210842407,"event_id":"$9BmVYJ38nEOs9cG-apNnyWHoifHnmeoQxHFWRrvTKGY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Its comparison probably has to waste time defending against all sorts of strange array types too.","msgtype":"m.text","formatted_body":"Its comparison probably has to waste time defending against all sorts of strange array types too."}} {"origin_server_ts":1709210853322,"event_id":"$hPs6OyryGVvVJnlcxbCtvRUgjDNj4EK6HaaPusCdw5k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Oh wait. The array of strings is obviously already almost-sorted. I need to shuffle it first to make it fair.","msgtype":"m.text"}} {"origin_server_ts":1709211024111,"event_id":"$n9BnnI3ouadBXdjl_kAJiShze5sBeHAxdwXn4zlhLoo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Oh interesting. After shuffling, the time was the same in Dyalog, but much slower in Kap. About 600 ms.","msgtype":"m.text"}} {"origin_server_ts":1709211167566,"event_id":"$vU6ZiEvOUjfikYqd-0FBmCBzI6L8nP_d_2ZfIoiGnTA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It ends up using the default JVM sort implementation. It appears to be extremely fast for almost-sorted lists.","msgtype":"m.text"}} {"origin_server_ts":1709211202743,"event_id":"$l8a899-oi-3JEi63p7b5uKxPMoZvTKC1aQwIcLbvshI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"That's why it beat Dyalog. On completely random lists it's about 3 times slower, which is consistent with Kap performance compared to Dyalog in general.","msgtype":"m.text"}} {"origin_server_ts":1709211260451,"event_id":"$vWtyGM0dDVNe-WoR7-ak2c7xg3WFX7U1yJsfF_7qOGg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, JVM should be on Timsort, unless they've moved to Powersort or something which is not a big difference.","msgtype":"m.text","formatted_body":"Yeah, JVM should be on Timsort, unless they've moved to Powersort or something which is not a big difference."}} {"origin_server_ts":1709211337087,"event_id":"$6EI2xFUic9KCfSEwi6B8K3jcNPZ9i-L8kVdIjT4cf7U","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Can you time BQN? Should just be `∧\u2022_timed \u2022rand.Deal∘≠⊸⊏ \u2022file.Lines ...`, where `\u2022rand.Deal∘≠⊸⊏` does the shuffling.","msgtype":"m.text","formatted_body":"Can you time BQN? Should just be ∧\u2022_timed \u2022rand.Deal∘≠⊸⊏ \u2022file.Lines ...<\/code>, where \u2022rand.Deal∘≠⊸⊏<\/code> does the shuffling."}} {"origin_server_ts":1709211386874,"event_id":"$P4Ti5hVzghycPd91b89IJ0gGBtvBAfrivhGD8KcfbCw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Apparently it uses DualPivotQuicksort for integer arrays (which is what I'm using, I'm doing a sort on an array of indexes)","msgtype":"m.text"}} {"origin_server_ts":1709211430623,"event_id":"$HqEB7isytVwn0J7gusUTFhDRVrFfGssTOwObKaVarEU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Huh, where do the indexes come from?","msgtype":"m.text","formatted_body":"Huh, where do the indexes come from?"}} {"origin_server_ts":1709211432797,"event_id":"$eKIPjPQ0vlW8Zk2RWeIhGIIgjBONQD0WnI9DlZ9p7d8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Which version? I don't think I've ever built BQN","msgtype":"m.text"}} {"origin_server_ts":1709211445608,"event_id":"$WqFUyss7htN5KwQSIogKzpgm-sCJ7VXHPOaAuIp2MQI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"on my system with a 104334-line `/usr/share/dict/words` I get 59ms on Dyalog, 78ms on CBQN, 114ms on dzaima/BQN","msgtype":"m.text","formatted_body":"on my system with a 104334-line /usr/share/dict/words<\/code> I get 59ms on Dyalog, 78ms on CBQN, 114ms on dzaima/BQN"}} {"origin_server_ts":1709211477361,"event_id":"$ot1SD_ysI_3XWiAZsniiEyOvc6KWq7ynQDHh3Aq4PDI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"That's unshuffled?","msgtype":"m.text","formatted_body":"That's unshuffled?"}} {"origin_server_ts":1709211495534,"event_id":"$U7yYPoUcyBCgQcs0G18HCBZQxqcMyRk-cdGnLuFtVBs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's shuffled (note the line count being ~5x smaller)","msgtype":"m.text","formatted_body":"that's shuffled (note the line count being ~5x smaller)"}} {"origin_server_ts":1709211504618,"event_id":"$5I6Wx7ecT3NG1hN-uE8yw8su8EZqr25rUIeUFve9yjo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"that's shuffled (note the line count being ~5x smaller than loke's)","msgtype":"m.text","formatted_body":"that's shuffled (note the line count being ~5x smaller than loke's)"},"m.relates_to":{"event_id":"$U7yYPoUcyBCgQcs0G18HCBZQxqcMyRk-cdGnLuFtVBs","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* that's shuffled (note the line count being ~5x smaller than loke's)","msgtype":"m.text","formatted_body":"* that's shuffled (note the line count being ~5x smaller than loke's)"}} {"origin_server_ts":1709211553725,"event_id":"$kQzxkaWthbw4fPA61dOBSCxMjIedhJq6pc9-6FK04Ss","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The CBQN sorting code hasn't changed in forever so any version's fine. If you clone and run `make o3n` it'll build from master which is the latest release.","msgtype":"m.text","formatted_body":"The CBQN sorting code hasn't changed in forever so any version's fine. If you clone and run make o3n<\/code> it'll build from master which is the latest release."}} {"origin_server_ts":1709211644326,"event_id":"$hCusDi7QZKsG5EjntQemmbP6zXymv3FjNQ7SO8ZgPOU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$HqEB7isytVwn0J7gusUTFhDRVrFfGssTOwObKaVarEU"}},"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Huh, where do the indexes come from?\n\nI create an `IntArray` which is basically an iota of the length of the array, then I sort it using a comparator that looks up the corresponding object and performs a Kap `cmp` operation on both. The resulting array is an array of indexes that represent the sorted list. It's all done here: https://codeberg.org/loke/array/src/branch/master/array/src/commonMain/kotlin/array/builtins/sort.kt#L205","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @mlochbaum:matrix.org<\/a>
                      Huh, where do the indexes come from?<\/blockquote><\/mx-reply>I create an IntArray<\/code> which is basically an iota of the length of the array, then I sort it using a comparator that looks up the corresponding object and performs a Kap cmp<\/code> operation on both. The resulting array is an array of indexes that represent the sorted list. It's all done here: https://codeberg.org/loke/array/src/branch/master/array/src/commonMain/kotlin/array/builtins/sort.kt#L205"}} {"origin_server_ts":1709211656872,"event_id":"$P6AnTQuWvShOgomHetXs97HlhB2okADNAvvM8VmvLYI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"If you have a better suggestion how to do it, please let me know.","msgtype":"m.text"}} {"origin_server_ts":1709211668476,"event_id":"$BTnIJLm-YxfqTK1YVqA1BUIfq81l7osuXEC_ps2FoZ4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima/BQNs `∧x` uses `Arrays.sort` on a `Value[]` directly","msgtype":"m.text","formatted_body":"dzaima/BQNs ∧x<\/code> uses Arrays.sort<\/code> on a Value[]<\/code> directly"}} {"origin_server_ts":1709211727096,"event_id":"$yODoULzK8cmDNKmUF8_PmRMSglrVhX7SgSIWwpWGnlM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: Yeah, I can't really do that because kap arrays are abstracted.","msgtype":"m.text","formatted_body":"
                      dzaima<\/a>: Yeah, I can't really do that because kap arrays are abstracted."}} {"origin_server_ts":1709211758368,"event_id":"$nWXlgEXLME1k3Q0UQvBWRN77qZwQHDmfNJwqu2TbyIA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Actually, thinking about it, the real reason I can't it because I sort by major axis.","msgtype":"m.text"}} {"origin_server_ts":1709211779659,"event_id":"$HrIlkHQ4IpZZZ7HYlAwPIabp3udCmrlvWt774uf_4wQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima/BQN converts it to a nested list for rank>1","msgtype":"m.text","formatted_body":"dzaima/BQN converts it to a nested list for rank>1"}} {"origin_server_ts":1709211787582,"event_id":"$OMES5ZAWMcP4P3nGq19n2kkTxBNoIf6V3tSQlsAVW7I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"dzaima/BQN converts it to a nested list for rank>1 (and fwiw so does CBQN)","msgtype":"m.text","formatted_body":"dzaima/BQN converts it to a nested list for rank>1 (and fwiw so does CBQN)"},"m.relates_to":{"event_id":"$HrIlkHQ4IpZZZ7HYlAwPIabp3udCmrlvWt774uf_4wQ","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* dzaima/BQN converts it to a nested list for rank>1 (and fwiw so does CBQN)","msgtype":"m.text","formatted_body":"* dzaima/BQN converts it to a nested list for rank>1 (and fwiw so does CBQN)"}} {"origin_server_ts":1709211814737,"event_id":"$gfcU5mmonLq1ycIbAfA_WSfQp64b_FzV2qqugYDLrLk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh, are you sure it uses `DualPivotQuicksort` even with a custom comparator? I didn't think it was really designed for that.","msgtype":"m.text","formatted_body":"Oh, are you sure it uses DualPivotQuicksort<\/code> even with a custom comparator? I didn't think it was really designed for that."}} {"origin_server_ts":1709211816635,"event_id":"$XRiwx-SbCWsXq-7lRvQdX6enUvFnJknrV4kypEu85Pc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"```\n ∧\u2022_timed \u2022rand.Deal∘≠⊸⊏ \u2022file.Lines \"/usr/share/dict/linux.words\"\n0.28791758500000003\n```","msgtype":"m.text","formatted_body":"
                         ∧\u2022_timed \u2022rand.Deal∘≠⊸⊏ \u2022file.Lines \"/usr/share/dict/linux.words\"\n0.28791758500000003\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1709211832821,"event_id":"$92gqcPPeYVay5aO2cQ7yKQh2uyFhNhHnX6-eZBwWo94","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: What's the unit of that number?","msgtype":"m.text","formatted_body":"Marshall<\/a>: What's the unit of that number?"}}
                      {"origin_server_ts":1709211836614,"event_id":"$auZagZdGJwMsXuzXOG4F370_1bgEcY_Tw1XSga3AUh8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"seconds","msgtype":"m.text","formatted_body":"seconds"}}
                      {"origin_server_ts":1709211882034,"event_id":"$exUWj1VkLJL89GQU-BPDwypu634lpRIoIGgLUwKarRQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"So 287 ms?","msgtype":"m.text"}}
                      {"origin_server_ts":1709211895304,"event_id":"$3cfVRCAqa2OPkYAYk919dobvZ1UbeyW2ZLbsYt9tiWk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah; could add a left argument to `\u2022_timed` (i.e. at the very start of the expression) of like 5 to average a couple runs","msgtype":"m.text","formatted_body":"yeah; could add a left argument to \u2022_timed<\/code> (i.e. at the very start of the expression) of like 5 to average a couple runs"}}
                      {"origin_server_ts":1709211899815,"event_id":"$Z_Cj5olRsqKEc2AjiKgVz4hedEnW5ISPu7ET_rjWf38","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$gfcU5mmonLq1ycIbAfA_WSfQp64b_FzV2qqugYDLrLk"}},"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Oh, are you sure it uses `DualPivotQuicksort` even with a custom comparator? I didn't think it was really designed for that.\n\nI'm not 100% sure. Let me check.","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @mlochbaum:matrix.org<\/a>
                      Oh, are you sure it uses DualPivotQuicksort<\/code> even with a custom comparator? I didn't think it was really designed for that.<\/blockquote><\/mx-reply>I'm not 100% sure. Let me check."}} {"origin_server_ts":1709211948650,"event_id":"$7SbhCUZPEXDOnQaOwqT3jQdqOgQT1zn0Pigv14VpvzU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'd have thought our string comparison was faster than Dyalog's. Guess not, and we're probably doing less comparisons meaning the difference is worse than it looks like.","msgtype":"m.text","formatted_body":"I'd have thought our string comparison was faster than Dyalog's. Guess not, and we're probably doing less comparisons meaning the difference is worse than it looks like."}} {"origin_server_ts":1709211984776,"event_id":"$TxUiqLrZb-wIDR3_5kQ9dECTSn6R4CL4pxd1xGOm41c","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"CBQNs three-way comparison is extremely basic, all scalar. Is Dyalog's somehow worse?","msgtype":"m.text","formatted_body":"CBQNs three-way comparison is extremely basic, all scalar. Is Dyalog's somehow worse?"}} {"origin_server_ts":1709211993411,"event_id":"$dLjkwBud47f_tLNikMAqc_YPoJ4Evdx2cJxniepkHyc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: You're right. When I pass in a comparator it uses timsort.","msgtype":"m.text","formatted_body":"
                      Marshall<\/a>: You're right. When I pass in a comparator it uses timsort."}} {"origin_server_ts":1709212080395,"event_id":"$eheyJzDa79cmI-QI3viD4Bt5u7GtQBNhSBVLpf-Od5Y","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"No, Dyalog's inner loops should be fine (not sure if they're vectorized though). I was just thinking more per-string overhead.","msgtype":"m.text","formatted_body":"No, Dyalog's inner loops should be fine (not sure if they're vectorized though). I was just thinking more per-string overhead."}} {"origin_server_ts":1709212134134,"event_id":"$p-mDhUP2g-EHEn_lpBQi3P63ckBG7xeJRz7SixAQUGM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The TAO code was written by Roger, so you know there's some attention to speed.","msgtype":"m.text","formatted_body":"The TAO code was written by Roger, so you know there's some attention to speed."}} {"origin_server_ts":1709212216891,"event_id":"$b56hQfQox5pLgEzb2I2fqafuayt6WB2daPwGsGUWx2A","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(That's [total array ordering](https://aplwiki.com/wiki/Total_array_ordering))","msgtype":"m.text","formatted_body":"(That's total array ordering<\/a>)"}} {"origin_server_ts":1709212251221,"event_id":"$NTsK0N9qVYSMrbCQFuMPQS5iEX1XziX2v7jguqQULvE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"CBQNs three-way comparison is extremely basic with no specialization, all scalar. Is Dyalog's somehow worse?","msgtype":"m.text","formatted_body":"CBQNs three-way comparison is extremely basic with no specialization, all scalar. Is Dyalog's somehow worse?"},"m.relates_to":{"event_id":"$TxUiqLrZb-wIDR3_5kQ9dECTSn6R4CL4pxd1xGOm41c","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* CBQNs three-way comparison is extremely basic with no specialization, all scalar. Is Dyalog's somehow worse?","msgtype":"m.text","formatted_body":"* CBQNs three-way comparison is extremely basic with no specialization, all scalar. Is Dyalog's somehow worse?"}} {"origin_server_ts":1709212263413,"event_id":"$tU3rKAhMlRq1eBK2k1-cRMK0O9w39GqdfZddtuOHjeY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"CBQNs three-way comparison is extremely basic, all scalar, with no specialization. Is Dyalog's somehow worse?","msgtype":"m.text","formatted_body":"CBQNs three-way comparison is extremely basic, all scalar, with no specialization. Is Dyalog's somehow worse?"},"m.relates_to":{"event_id":"$TxUiqLrZb-wIDR3_5kQ9dECTSn6R4CL4pxd1xGOm41c","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* CBQNs three-way comparison is extremely basic, all scalar, with no specialization. Is Dyalog's somehow worse?","msgtype":"m.text","formatted_body":"* CBQNs three-way comparison is extremely basic, all scalar, with no specialization. Is Dyalog's somehow worse?"}} {"origin_server_ts":1709212496353,"event_id":"$zTdD_rb21X5p-i_4rCSyGzIgGV1A-cP36tlunEZOBoQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The kap tao code is pretty... umm... sloppy :-)","msgtype":"m.text"}} {"origin_server_ts":1709212565259,"event_id":"$4kiLt4KDiEIS6Wu2axYbxt5OghqCkHvaATCmsSl3MrQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$TxUiqLrZb-wIDR3_5kQ9dECTSn6R4CL4pxd1xGOm41c"}},"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> CBQNs three-way comparison is extremely basic, all scalar, with no specialization. Is Dyalog's somehow worse?\n\nFor arrays, that's the case in kap too. All atomic datatypes must implement a 3-way sort with objects of its own type.","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @dzaima:matrix.org<\/a>
                      CBQNs three-way comparison is extremely basic, all scalar, with no specialization. Is Dyalog's somehow worse?<\/blockquote><\/mx-reply>For arrays, that's the case in kap too. All atomic datatypes must implement a 3-way sort with objects of its own type."}} {"origin_server_ts":1709212597287,"event_id":"$8xgU2GqwYSI_GbB8T3tSZnLup8S9n_HumkL4ZBvrI4o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"There is some hairy code to get the total ordering right with numbers, and consistent with comparisons between numeric types (like double < rational, etc).","msgtype":"m.text"}} {"origin_server_ts":1709212615655,"event_id":"$X2HO08loKYNxWI-W9TmVdIHbZ3RtgcJD19h-CJ0YYNA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"right, but on jvm you might get some small boosts from the VM specializing by itself","msgtype":"m.text","formatted_body":"right, but on jvm you might get some small boosts from the VM specializing by itself"}} {"origin_server_ts":1709212638492,"event_id":"$GdtRPEkuMU7VDZje-QFNod3d4i8-HqrvhTcAKQ1LmOU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"But other than that, it's just each type compares itself, and then the types themselves being a primary discriminator before the type-specific code is called.","msgtype":"m.text"}} {"origin_server_ts":1709212669265,"event_id":"$dAuuWLNADhf2l6_rr4D8xPP_wueD1Qg1Fo1T0XIhBTY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$X2HO08loKYNxWI-W9TmVdIHbZ3RtgcJD19h-CJ0YYNA"}},"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> right, but on jvm you might get some small boosts from the VM specializing by itself\n\nProbably. I've been surprised by the performance sometimes, even when I never optimised anything, so the JVM is definitely doing some magic.","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @dzaima:matrix.org<\/a>
                      right, but on jvm you might get some small boosts from the VM specializing by itself<\/blockquote><\/mx-reply>Probably. I've been surprised by the performance sometimes, even when I never optimised anything, so the JVM is definitely doing some magic."}} {"origin_server_ts":1709212685288,"event_id":"$3U3uJ1vO8tFz8iKBhXT4scMuWkWXQKUcPXbY5pMQ6tM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It consistently out-performs the native version by at least 6.","msgtype":"m.text"}} {"origin_server_ts":1709212686816,"event_id":"$W-G8qmn9inBWheobiNOB8kVuO4i3KIngeSZ3r-sxKCo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"It consistently out-performs the native version by at least 5.","msgtype":"m.text"},"m.relates_to":{"event_id":"$3U3uJ1vO8tFz8iKBhXT4scMuWkWXQKUcPXbY5pMQ6tM","rel_type":"m.replace"},"m.mentions":{},"body":" * It consistently out-performs the native version by at least 5.","msgtype":"m.text"}} {"origin_server_ts":1709212778229,"event_id":"$YxnXw3_poIFkRCCCOUN5k_vlz1Bw9VbhCPAcvyQUtpA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The annoying thing is that all these generic sorting functions take a 3-way comparison result, but all the algorithms ever need is a 2-way comparison. But I think you still have to do 3-way because it might collapse that to a boolean in either direction.","msgtype":"m.text","formatted_body":"The annoying thing is that all these generic sorting functions take a 3-way comparison result, but all the algorithms ever need is a 2-way comparison. But I think you still have to do 3-way because it might collapse that to a boolean in either direction."}} {"origin_server_ts":1709212826901,"event_id":"$y41PKgbCGp---_aGAPnMxSrYn4nmrm_rF--F4a6Um0M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: would it be possible to optimise a sorting routine if it could assume it gets a 3-way function?","msgtype":"m.text","formatted_body":"
                      Marshall<\/a>: would it be possible to optimise a sorting routine if it could assume it gets a 3-way function?"}} {"origin_server_ts":1709212847001,"event_id":"$h4nk0ijxM0_drkIAiKhwQPC_v4Ut9gdr8PtOIkjW-JY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"By the way, for numeric comparisons, look at this horrible thing: https://codeberg.org/loke/array/src/branch/master/array/src/commonMain/kotlin/array/number.kt#L174","msgtype":"m.text"}} {"origin_server_ts":1709212848558,"event_id":"$dRErLGOVEIYyLNUKhQt50O_dOcV77eX-7BJKs5O93TA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"3-way isn't much worse than 2-way, no? Still have to do comparison of the mismatched element anyway","msgtype":"m.text","formatted_body":"3-way isn't much worse than 2-way, no? Still have to do comparison of the mismatched element anyway"}} {"origin_server_ts":1709212882561,"event_id":"$oLLTGOCv2pi3iVrGQ8YMJYEL5Vk6qW_6AzxMa_YL1BI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: Worst case is it does 2 times the amount of work.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Worst case is it does 2 times the amount of work."}} {"origin_server_ts":1709212886002,"event_id":"$BcnDL8VXIVJrq35arp_PVBV2PGya3bOJ8Vf5O1TbHaY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: Worst case is it does 2 times the amount of work. No?","msgtype":"m.text","formatted_body":"dzaima<\/a>: Worst case is it does 2 times the amount of work. No?"},"m.relates_to":{"event_id":"$oLLTGOCv2pi3iVrGQ8YMJYEL5Vk6qW_6AzxMa_YL1BI","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * dzaima: Worst case is it does 2 times the amount of work. No?","msgtype":"m.text","formatted_body":" * dzaima<\/a>: Worst case is it does 2 times the amount of work. No?"}} {"origin_server_ts":1709212938817,"event_id":"$pOooxx0GU_R1DFmNA2kBQDN0cBGuYfNY0QZlff8tk5o","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yeah, I think if you do it right it's not a big difference (2x would be really bad, don't do that...) but it's harder to write for no reason.","msgtype":"m.text","formatted_body":"Yeah, I think if you do it right it's not a big difference (2x would be really bad, don't do that...) but it's harder to write for no reason."}} {"origin_server_ts":1709213087313,"event_id":"$WqI83OB5HZBCnap4QiuHWE8nKuiEZJn0eJFb9giPsSo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the only difference afaict should be at the very last mismatch (be it integer, byte of bigints, character codepoint, etc) where the difference is a two-way comparison of basic types vs subtraction (or perhaps some compare,compare,subtract if the compared type is not smaller than the result, or you want strict -1/0/1 results)","msgtype":"m.text","formatted_body":"the only difference afaict should be at the very last mismatch (be it integer, byte of bigints, character codepoint, etc) where the difference is a two-way comparison of basic types vs subtraction (or perhaps some compare,compare,subtract if the compared type is not smaller than the result, or you want strict -1/0/1 results)"}} {"origin_server_ts":1709213121999,"event_id":"$LjiTx4j7oUirN2_iAhPJW4EqoseQu1Stq2SxQCmSGBo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"the only difference afaict should be at the very last mismatch (be it integer, byte of bigints, character codepoint, etc) where the difference is a two-way comparison of basic types vs subtraction (or perhaps some compare,compare,subtract if the compared type is not smaller than the result, or you want strict -1/0/1 results. That's like ~two more instructions out of the entire comparison)","msgtype":"m.text","formatted_body":"the only difference afaict should be at the very last mismatch (be it integer, byte of bigints, character codepoint, etc) where the difference is a two-way comparison of basic types vs subtraction (or perhaps some compare,compare,subtract if the compared type is not smaller than the result, or you want strict -1/0/1 results. That's like ~two more instructions out of the entire comparison)"},"m.relates_to":{"event_id":"$WqI83OB5HZBCnap4QiuHWE8nKuiEZJn0eJFb9giPsSo","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* the only difference afaict should be at the very last mismatch (be it integer, byte of bigints, character codepoint, etc) where the difference is a two-way comparison of basic types vs subtraction (or perhaps some compare,compare,subtract if the compared type is not smaller than the result, or you want strict -1/0/1 results. That's like ~two more instructions out of the entire comparison)","msgtype":"m.text","formatted_body":"* the only difference afaict should be at the very last mismatch (be it integer, byte of bigints, character codepoint, etc) where the difference is a two-way comparison of basic types vs subtraction (or perhaps some compare,compare,subtract if the compared type is not smaller than the result, or you want strict -1/0/1 results. That's like ~two more instructions out of the entire comparison)"}} {"origin_server_ts":1709232310199,"event_id":"$KhmRbg-EU5FNANJ-dxivFESSUZkLoytD56MQE8Ioyho","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It occurred to me to check where Kap sits in [this table](https://aplwiki.com/wiki/Take#Extension_support) on Take, and I found some strange behavior in treating a scalar right argument: `3 4↑5` is not allowed, `(,3)↑5` or `3↑5` is allowed, and `(⍳0)↑5` is allowed but gives a length-1 list. So I suppose it belongs with dzaima/APL except that it converts a scalar right argument to a list before doing anything, which doesn't always make sense.","msgtype":"m.text","formatted_body":"It occurred to me to check where Kap sits in this table<\/a> on Take, and I found some strange behavior in treating a scalar right argument: 3 4↑5<\/code> is not allowed, (,3)↑5<\/code> or 3↑5<\/code> is allowed, and (⍳0)↑5<\/code> is allowed but gives a length-1 list. So I suppose it belongs with dzaima/APL except that it converts a scalar right argument to a list before doing anything, which doesn't always make sense."}} {"origin_server_ts":1709256524893,"event_id":"$cdtucGjBg7U6PFhqiq8BGQ0ER0wm5sX2hqcpnYkM7bA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, that is correct. If there is no axis specification, then both the left and right arguments are converted to lists of the are scalars.","msgtype":"m.text"}} {"origin_server_ts":1709256557584,"event_id":"$8GNUSd13oKRLf9UrXnYSDSJYHhoWzwG-k_tpc-KkFnU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Can you clarify the circumstances under which that doesn't make sense? ","msgtype":"m.text"}} {"origin_server_ts":1709256632647,"event_id":"$m44PlHzmW7u8m2YWh2YjYAkQDhQEsVSwFSvUl62j57o","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"except you don't convert a rank≥2 right arg to a list ","msgtype":"m.text","formatted_body":"except you don't convert a rank≥2 right arg to a list "}} {"origin_server_ts":1709256678632,"event_id":"$CrdeQPYe9aZ12f9jJI701IlUVzkk-KDigYhAsQ1ZtIA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"which ends up meaning \"convert to list\" there is actually just the single case of \"convert rank 0 argument to list, and leave everything else unchanged\"","msgtype":"m.text","formatted_body":"which ends up meaning \"convert to list\" there is actually just the single case of \"convert rank 0 argument to list, and leave everything else unchanged\""}} {"origin_server_ts":1709256713545,"event_id":"$i_Gd2J5qKZSAQTGf5ioYpEJ3WZCDgc2NxjdmeLV-f-k","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"i.e. very special-case-y","msgtype":"m.text","formatted_body":"i.e. very special-case-y"}} {"origin_server_ts":1709256723799,"event_id":"$80nZEL6U1tFZJQB2twDoGxziPeZ0ijTrYqE1NEKo2uY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes that's what I meant. I should have said array, not most. ","msgtype":"m.text"}} {"origin_server_ts":1709256731929,"event_id":"$ZsvprBcPgNEWK-rvVfyJP_OX6Wa8opyzywyaWTkjssk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Yes that's what I meant. I should have said array, not list. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$80nZEL6U1tFZJQB2twDoGxziPeZ0ijTrYqE1NEKo2uY","rel_type":"m.replace"},"body":"* Yes that's what I meant. I should have said array, not list. ","msgtype":"m.text"}} {"origin_server_ts":1709256754741,"event_id":"$vIUf6u5AT9H-uJPn1foVdsa2TVgf4Zi1BIdzhRncxJc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`(⍳0)↑5` in particular is pretty strange: there are no axes, and you change none of them, and yet you end up with a different array.","msgtype":"m.text","formatted_body":"(⍳0)↑5<\/code> in particular is pretty strange: there are no axes, and you change none of them, and yet you end up with a different array."}} {"origin_server_ts":1709256823150,"event_id":"$ZSN-jVogtWpht-C8E_Ra8b5taGUOn-mTXBRLBEj2s54","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$80nZEL6U1tFZJQB2twDoGxziPeZ0ijTrYqE1NEKo2uY"}},"format":"org.matrix.custom.html","body":"but a rank 0 array is already an array!","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>but a rank 0 array is already an array!"}} {"origin_server_ts":1709256899257,"event_id":"$yS2kVDU382LIjYLPydbqeUNGpxlkbcCzHIVtIh7krW4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It's like if `(⍳0)⌷5` were to return a list.","msgtype":"m.text","formatted_body":"It's like if (⍳0)⌷5<\/code> were to return a list."}} {"origin_server_ts":1709257187001,"event_id":"$61Fqr8LDgDlZHMATmtR1qvm-KerIvwbrZGwjUPYM1ks","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm not entirely sure why I do that on the right argument. I need to check the code more thoroughly but I'm on the way to work now.","msgtype":"m.text"}} {"origin_server_ts":1709257220044,"event_id":"$yN8mObpby8TK6GqDT1-GRFV3WGTBFlYw8EuxE8Yn87g","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"if you didn't do anything, you'd end up with `5↑1` erroring","msgtype":"m.text","formatted_body":"if you didn't do anything, you'd end up with 5↑1<\/code> erroring"}} {"origin_server_ts":1709257225803,"event_id":"$pEX4GpRrjUxdQ1OcNiZ5bt52oaKF-vUMQfqVs_6213k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll take a look later. It's certainly possible I did it on the right argument to make something more convenient in the implementation. ","msgtype":"m.text"}} {"origin_server_ts":1709261520962,"event_id":"$BTWlzCwcMF4PZsS6IHUAeG9YA0-nB5fMvoEQtDOYzZY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$vIUf6u5AT9H-uJPn1foVdsa2TVgf4Zi1BIdzhRncxJc"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> `(⍳0)↑5` in particular is pretty strange: there are no axes, and you change none of them, and yet you end up with a different array.\n\nI wouldn't say it's particular. It's the only strange case, no?","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @mlochbaum:matrix.org<\/a>
                      (⍳0)↑5<\/code> in particular is pretty strange: there are no axes, and you change none of them, and yet you end up with a different array.<\/blockquote><\/mx-reply>I wouldn't say it's particular. It's the only strange case, no?"}} {"origin_server_ts":1709261591879,"event_id":"$fnvCFYAdFPVrrmouO6Z9RXGUk4WMHIkr6EFgzFH2kaI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'm looking at the code now, and I see why this happens. I think I also know precisely how it came to be. The arrayification of the right argument was done early, befause short left arguments were introduced. So back then `⍬↑4` would have been an error.","msgtype":"m.text","formatted_body":"I'm looking at the code now, and I see why this happens. I think I also know precisely how it came to be. The arrayification of the right argument was done early, befause short left arguments were introduced. So back then ⍬↑4<\/code> would have been an error."}} {"origin_server_ts":1709261608749,"event_id":"$3urgmRsEGB9Rh0J7sw3BTOgQ1hEcl7lj_6MpA1F1gOE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Having `3 4↑5` not work when `(,3)↑5` does seems unmotivated. What's special about rank 1?","msgtype":"m.text","formatted_body":"Having 3 4↑5<\/code> not work when (,3)↑5<\/code> does seems unmotivated. What's special about rank 1?"}} {"origin_server_ts":1709261660056,"event_id":"$JeYJpk5I1cOPjaNRvg8bF6-UFiYHwmuFx6jnzi3E6ew","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1709261664742,"event_id":"$nIizSFyB8toBYeSSAo8P7K_PMFm_n9kDbQZvtXMJG6s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$JeYJpk5I1cOPjaNRvg8bF6-UFiYHwmuFx6jnzi3E6ew","type":"m.room.redaction","content":{"redacts":"$JeYJpk5I1cOPjaNRvg8bF6-UFiYHwmuFx6jnzi3E6ew"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1709261664742,"event_id":"$nIizSFyB8toBYeSSAo8P7K_PMFm_n9kDbQZvtXMJG6s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$JeYJpk5I1cOPjaNRvg8bF6-UFiYHwmuFx6jnzi3E6ew","type":"m.room.redaction","content":{"redacts":"$JeYJpk5I1cOPjaNRvg8bF6-UFiYHwmuFx6jnzi3E6ew"}} {"origin_server_ts":1709261686187,"event_id":"$nLvaFvcIvJ17vkgSIrMyxlrBZlcRP7ejNirTOakfZIY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What's special about it? Well, a rank-1 array of a single element is the array form of a scalar.","msgtype":"m.text"}} {"origin_server_ts":1709261713905,"event_id":"$HO0EOdqi9mG5Ha3-vTU54jcTm0ex1XLTTclJTM5YzQY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So it's not that the rank-1 array is special here, but rather than a scalar can be a single-element array under some circumstances.","msgtype":"m.text"}} {"origin_server_ts":1709261749595,"event_id":"$keqxtN_RPTI4Sw5o7_VeEAodR7KiH0H4b7aax-uj0pM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"is there anything else that does that though?","msgtype":"m.text","formatted_body":"is there anything else that does that though?"}} {"origin_server_ts":1709261774007,"event_id":"$MXa-qiGUoyGTsOF6aeqczqtVmbtfKxznI9BXqUOn_GA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(from things that also work on rank≥2)","msgtype":"m.text","formatted_body":"(from things that also work on rank≥2)"}} {"origin_server_ts":1709261787305,"event_id":"$hYp44fDQbOLjtetbfXF1tac-lxpd8y0qhs9n_61iQkg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The \"if scalar then make it into a 1-element vector\" function is embodied in a method in the kap codebase called `.arrayify()`. I see 36 calls to this method in the entire application, so it's not entirely unheard of.","msgtype":"m.text","formatted_body":"The \"if scalar then make it into a 1-element vector\" function is embodied in a method in the kap codebase called .arrayify()<\/code>. I see 36 calls to this method in the entire application, so it's not entirely unheard of."}} {"origin_server_ts":1709261814626,"event_id":"$hKASlS9Oxo4pIk_quHLPZUfmup1AdfIakHZL26c8CsE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"A scalar is already a single-element array. Everything is an array.","msgtype":"m.text","formatted_body":"A scalar is already a single-element array. Everything is an array."}} {"origin_server_ts":1709261818812,"event_id":"$4wUdNhBbg6hZ3d_mMTSFWLtc1RgcsWUsmDxWQu7En-8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$hYp44fDQbOLjtetbfXF1tac-lxpd8y0qhs9n_61iQkg"}},"format":"org.matrix.custom.html","body":"but how many of those only happen if rank≤1?","msgtype":"m.text","formatted_body":"
                      ↰ <\/a> loke<\/a> <\/mx-reply>but how many of those only happen if rank≤1?"}} {"origin_server_ts":1709261830486,"event_id":"$OfCXe20l1szxachNgOSJbOjo4FqDW0mHd1zLc5lk2qo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Single-element 1-dimensional array.","msgtype":"m.text"}} {"origin_server_ts":1709261833300,"event_id":"$1UaSww8wEmMOreOiVesHJ4ftLZQ77SMLx863IHLcrlU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I suspect you're mostly using `.arrayify()` when a list is required, like the left argument to Take.","msgtype":"m.text","formatted_body":"I suspect you're mostly using .arrayify()<\/code> when a list is required, like the left argument to Take."}} {"origin_server_ts":1709261844457,"event_id":"$5AcMSFnRQaRVTNQeQQdnwj5_7DXgu7Asp6j-394aesk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Yes, that is correct.","msgtype":"m.text"}} {"origin_server_ts":1709261873226,"event_id":"$5E_hBFozHeAjV4mylg3gf57lF37oWw5NlAGTHmxi_yI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I agree that the use on the right side is probably not correct.","msgtype":"m.text"}} {"origin_server_ts":1709263908669,"event_id":"$mi94Xc8xBC8iNzPHS_4hMWmz3Ym1fV9sRMQIaGJl6XQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Marshall: OK, thinking about it, I think the rule can be expressed as such: If the right argument (B) is scalar, then reshape it to a `((≢,A)⍴1)⍴B` before performing the usual take operation?","msgtype":"m.text","formatted_body":"Marshall<\/a>: OK, thinking about it, I think the rule can be expressed as such: If the right argument (B) is scalar, then reshape it to a ((≢,A)⍴1)⍴B<\/code> before performing the usual take operation?"}} {"origin_server_ts":1709264178415,"event_id":"$ygMpZMPnanhw3FjRkJidDxJX8qh2T1QNOCQ4ugDHBVA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"which rule?","msgtype":"m.text","formatted_body":"which rule?"}} {"origin_server_ts":1709264198829,"event_id":"$McJ0C-0yLKcM_bhZmkzvmNdwTL5qKpgw_DOYaoRRi0A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The rule that describes how scalar arguments are processed.","msgtype":"m.text"}} {"origin_server_ts":1709264240261,"event_id":"$bjIqzRP65yd8JjwZtkfBgLkEgYefIpuus_Lxpe1s_PY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"for your `↑`?","msgtype":"m.text","formatted_body":"for your ↑<\/code>?"}} {"origin_server_ts":1709264253261,"event_id":"$weM9zV48iG6XuE-rJeSzCHjHPmdCIXdTyOW8hQ-eaSU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"for your current `↑`?","msgtype":"m.text","formatted_body":"for your current ↑<\/code>?"},"m.relates_to":{"event_id":"$bjIqzRP65yd8JjwZtkfBgLkEgYefIpuus_Lxpe1s_PY","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* for your current `↑`?","msgtype":"m.text","formatted_body":"* for your current ↑<\/code>?"}} {"origin_server_ts":1709264332042,"event_id":"$bOAiWeOWxnqNsCv1bveG-pIhL_KCHYcdR2PxlJE-hmg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"cause `2 3↑4` errors but `2 3↑((≢,2 3)⍴1)⍴4` doesn't","msgtype":"m.text","formatted_body":"cause 2 3↑4<\/code> errors but 2 3↑((≢,2 3)⍴1)⍴4<\/code> doesn't"}} {"origin_server_ts":1709264611887,"event_id":"$SNFtjSclviQ2RZH2GSConGdUNHCf90oa7ii1SrERTeM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: For a \"correct\" implementation. I.e. what I need to do to make it work.","msgtype":"m.text","formatted_body":"dzaima<\/a>: For a \"correct\" implementation. I.e. what I need to do to make it work."}} {"origin_server_ts":1709264629276,"event_id":"$FVAaXtBI95VKyiu9HSC_KU69gLTPFMUqknZc-Q2Igqc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"but why special-case a scalar right arg?","msgtype":"m.text","formatted_body":"but why special-case a scalar right arg?"}} {"origin_server_ts":1709264664313,"event_id":"$81eNES0pr349zpNVvHmaUgncYA6H-yCB48Hue3dPTaU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: Because `2 3 4 ↑ 1 2` should be an error.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Because 2 3 4 ↑ 1 2<\/code> should be an error."}} {"origin_server_ts":1709264665662,"event_id":"$xw-0-4fNpYscMkRoaH8J5otPuLBdjFHyw3IsrZW3lWU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"i.e. you could have `3 2↑4 5` do `3 2↑1 2⍴4 5`","msgtype":"m.text","formatted_body":"i.e. you could have 3 2↑4 5<\/code> do 3 2↑1 2⍴4 5<\/code>"}} {"origin_server_ts":1709264702922,"event_id":"$nVl6VF-uiEUghsInMPLuSPnMoxyuxluHnnhtWQ_QfjE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima: It could, but that was never considered.","msgtype":"m.text","formatted_body":"dzaima<\/a>: It could, but that was never considered."}} {"origin_server_ts":1709264745269,"event_id":"$6X_hfFoBOvS7QDqmuQEHUITUVJCBGFsXBcYdVLa18EQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(huh, even Dyalog doesn't do that. ¯\\\\\\_(ツ)\\_/¯)","msgtype":"m.text","formatted_body":"(huh, even Dyalog doesn't do that. ¯\\_(ツ)_/¯)"}} {"origin_server_ts":1709264765807,"event_id":"$dIqWaL8HUCMEoKKTEIxS0ZFm82-NLorJLxovdVQtnG8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm following Dyalog here where taking more dimensions than the right argument has is an error. It masically does a special kind of scalar extension for scalar right args.","msgtype":"m.text"}} {"origin_server_ts":1709264771061,"event_id":"$yFNO0EY-kVqvu8FC7-BA22_fd9tFgH-FOX5Gp0n6jaU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I'm following Dyalog here where taking more dimensions than the right argument has is an error. It basically does a special kind of scalar extension for scalar right args.","msgtype":"m.text"},"m.relates_to":{"event_id":"$dIqWaL8HUCMEoKKTEIxS0ZFm82-NLorJLxovdVQtnG8","rel_type":"m.replace"},"body":" * I'm following Dyalog here where taking more dimensions than the right argument has is an error. It basically does a special kind of scalar extension for scalar right args.","msgtype":"m.text"}} {"origin_server_ts":1709264801729,"event_id":"$FmmiwHkENeg_Ri0DrphtS1csqA2YfzKWICP5XfBCH6g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What does dzaima/apl do?","msgtype":"m.text"}} {"origin_server_ts":1709264817169,"event_id":"$wmT2QXnAiaf5GAG6jow0Mj1GITfLAXqHutfhcbWvurY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"didn't realize that special-casing a scalar arg was a thing dyalog did","msgtype":"m.text","formatted_body":"didn't realize that special-casing a scalar arg was a thing dyalog did"}} {"origin_server_ts":1709264846767,"event_id":"$btPiW1XUKWFsxMEhcOMdsf0ejoVTLGE8lb15PAI_Sqo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima/APL just doesn't allow a left arg longer than rank of right arg at all, and doesn't allow overtaking (so doubly no `5↑1`)","msgtype":"m.text","formatted_body":"dzaima/APL just doesn't allow a left arg longer than rank of right arg at all, and doesn't allow overtaking (so doubly no 5↑1<\/code>)"}} {"origin_server_ts":1709264853859,"event_id":"$Ak_npK1eief4orrugiclELt7FRTgH48n76un8rbuP8M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It is, it's just that in Kap's case, the special-casing is just a regular `.arrayify()`, while Dyalog does something more clever.","msgtype":"m.text","formatted_body":"It is, it's just that in Kap's case, the special-casing is just a regular .arrayify()<\/code>, while Dyalog does something more clever."}} {"origin_server_ts":1709285954548,"event_id":"$IWI0RqRZi10ZM1Wx33ejdl8YlQ4h2l8vMuPWz6HDLWM","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"on lobsters: https://lobste.rs/s/ahitdn/array_languages_vs_curse_spreadsheet","msgtype":"m.text"}} {"origin_server_ts":1709285962402,"event_id":"$Yd4QLBZ-BWqwOULvG-6IyQJdjC0T3czxwr8oZ3Qs_c4","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"body":"with many of the usual canned responses","msgtype":"m.text"}} {"origin_server_ts":1709288201995,"event_id":"$RGwix7PyYxRI-OVafczdGDa063ynFh2CCPtjAryXAPQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"razetime: How unexpected :-)","msgtype":"m.text","formatted_body":"razetime<\/a>: How unexpected :-)"}} {"origin_server_ts":1709289048643,"event_id":"$43LDjCl2xEBWJpl7heUXjx4fKrunIShDBIi8eYsoZAA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$IWI0RqRZi10ZM1Wx33ejdl8YlQ4h2l8vMuPWz6HDLWM","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1709289309733,"event_id":"$XQlnqmZ2HVn4L_hAVhh227-S3toN62D_iN1N18917kw","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$IWI0RqRZi10ZM1Wx33ejdl8YlQ4h2l8vMuPWz6HDLWM"}},"m.mentions":{"user_ids":["@razetime:coven.palaiologos.rocks"]},"format":"org.matrix.custom.html","body":"> <@razetime:coven.palaiologos.rocks> on lobsters: https://lobste.rs/s/ahitdn/array_languages_vs_curse_spreadsheet\n\nthis was neat tho https://chat.openai.com/share/b3d0dd06-d373-430d-9fe1-6898d25d56a3 ","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @razetime:coven.palaiologos.rocks<\/a>
                      on lobsters: https://lobste.rs/s/ahitdn/array_languages_vs_curse_spreadsheet<\/blockquote><\/mx-reply>this was neat tho https://chat.openai.com/share/b3d0dd06-d373-430d-9fe1-6898d25d56a3"}} {"origin_server_ts":1709289566426,"event_id":"$IF41AYNaSR6GZ9VRmYEaXKac-av_89gja-CaDeh-CMQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I just get a login screen. What is it?","msgtype":"m.text"}} {"origin_server_ts":1709291085596,"event_id":"$gsfvjcAgPLmsFCB6-fhqRQeYf8wh1EsIAZOJn0_tYM4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"razetime: The last comment \"I think I would want something like a notebook, where the code and data are displayed together, but in a pure language that keeps the results up to date like a spreadsheet.\"","msgtype":"m.text","formatted_body":"
                      razetime<\/a>: The last comment \"I think I would want something like a notebook, where the code and data are displayed together, but in a pure language that keeps the results up to date like a spreadsheet.\""}} {"origin_server_ts":1709291124994,"event_id":"$dEN0i8ymicYWHGUZg332XH5BXdf52ZIrt7-7MGYmI40","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I actually have the beginnings of this, but I am struggling coming up with a nice UI for it. The underlying infrastructure is there though.","msgtype":"m.text"}} {"origin_server_ts":1709291169210,"event_id":"$pJfp9vFubNf1LMNlcDjAVPl5o_OB6GUyjXiRo-XTB7Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I can't post anything to lobste.rs now (on my way home) so if anyone want to reply :-)","msgtype":"m.text"}} {"origin_server_ts":1709291188486,"event_id":"$LX7GbpzDKb-QNjWGsG8frqE3EbZkEfL-U-e5ko6ns70","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$IF41AYNaSR6GZ9VRmYEaXKac-av_89gja-CaDeh-CMQ"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"body":"image.png","msgtype":"m.image","url":"mxc://matrix.org/yDZqWGldeTYJCBhsBWdNVGQz","info":{"xyz.amorgan.blurhash":"L06kVC~q000K4.?c%gNG00t8-=%M","size":140413,"thumbnail_info":{"size":112190,"w":613,"h":600,"mimetype":"image/png"},"w":813,"h":795,"mimetype":"image/png","thumbnail_url":"mxc://matrix.org/ScrstkDnGHiqWnsXjOLHbGru"}}} {"origin_server_ts":1709291190815,"event_id":"$hyIblowJhSMrPJ-jaghTehzPAFWUPdHdLE_XRDk-Zgo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"chatGPT could interpret KAP code ","msgtype":"m.text"}} {"origin_server_ts":1709291284565,"event_id":"$M0KYSgANWzW1Bj2nyCQD8n28sWq_psXkNv0RA7Ea-Lk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"sienet_ja_LSD: it's clear it's trained on Dyalog though, since there are some errors.","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: it's clear it's trained on Dyalog though, since there are some errors."}} {"origin_server_ts":1709291341910,"event_id":"$Xbgvk-gEQCt2vfiqUSOsE_2q8fuBMiz-4-w8LnUTLbw","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$M0KYSgANWzW1Bj2nyCQD8n28sWq_psXkNv0RA7Ea-Lk","rel_type":"m.annotation","key":"😅"}}} {"origin_server_ts":1709298727447,"event_id":"$SbTPglyMx-6nMusek_RJA5y5vPbSeUb9itJxKVkSOkM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$6X_hfFoBOvS7QDqmuQEHUITUVJCBGFsXBcYdVLa18EQ"}},"format":"org.matrix.custom.html","body":"I was thinking J did it, but I just checked and it doesn't, so I must have invented that. It's in the old BQN prototype, [this commit](https://github.com/mlochbaum/BQN2NGN/commit/0f2b784cf9ce0f626e57c5cf86b6303372f465bf).","msgtype":"m.text","formatted_body":" ↰ <\/a> dzaima<\/a> <\/mx-reply>I was thinking J did it, but I just checked and it doesn't, so I must have invented that. It's in the old BQN prototype, this commit<\/a>."}} {"origin_server_ts":1709299170467,"event_id":"$z9z6oCwJWMy85xh7iT9c036wO8ziEx7A-qklc6xnjIA","sender":"@razetime:coven.palaiologos.rocks","user_id":"@razetime:coven.palaiologos.rocks","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$XQlnqmZ2HVn4L_hAVhh227-S3toN62D_iN1N18917kw"}},"format":"org.matrix.custom.html","body":"> <@sienet_ja_lsd:matrix.org> this was neat tho https://chat.openai.com/share/b3d0dd06-d373-430d-9fe1-6898d25d56a3 \n\ni could care less what an llm does honestly","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @sienet_ja_lsd:matrix.org<\/a>
                      this was neat tho https://chat.openai.com/share/b3d0dd06-d373-430d-9fe1-6898d25d56a3<\/blockquote><\/mx-reply>i could care less what an llm does honestly"}} {"origin_server_ts":1709303370930,"event_id":"$vMmwkJ3dI5b_REyjHlBktgeTsTnJG2C0YGzSpHLwhrA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I have now implemented type specialisation for disclosed arrays (i.e. no internal boxing for things like `⊃ (1 2) (3 4)`.","msgtype":"m.text","formatted_body":"I have now implemented type specialisation for disclosed arrays (i.e. no internal boxing for things like ⊃ (1 2) (3 4)<\/code>."}} {"origin_server_ts":1709303384520,"event_id":"$0A_JkG0P8Pp9vW0jhPX2QSqMbwlmTae_LxejLcBh320","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I have now implemented type specialisation for disclosed arrays (i.e. no internal boxing for things like `⊃ (1 2) (3 4)`).","msgtype":"m.text","formatted_body":"I have now implemented type specialisation for disclosed arrays (i.e. no internal boxing for things like ⊃ (1 2) (3 4)<\/code>)."},"m.relates_to":{"event_id":"$vMmwkJ3dI5b_REyjHlBktgeTsTnJG2C0YGzSpHLwhrA","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * I have now implemented type specialisation for disclosed arrays (i.e. no internal boxing for things like `⊃ (1 2) (3 4)`).","msgtype":"m.text","formatted_body":" * I have now implemented type specialisation for disclosed arrays (i.e. no internal boxing for things like ⊃ (1 2) (3 4)<\/code>)."}} {"origin_server_ts":1709304303212,"event_id":"$QMsGNQxircHbt9IrBi1U7ifxBhcFDhftw94w61QOPm8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"My benchmark results from this optimisation is also interesting. With the JVM version it's about 15% improvement. When running the JS version on chromium the performance increase is around 50%, and on fireforx it's 100%.","msgtype":"m.text"}} {"origin_server_ts":1709304319806,"event_id":"$vj6EXHSzQuSrSpCNajkG9G4rJ-EVv7avV61qaEb_kDU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"My benchmark results from this optimisation is also interesting. With the JVM version it's about 15% improvement. When running the JS version on chromium the performance increase is around 50%, and on firefox it's 100%.","msgtype":"m.text"},"m.relates_to":{"event_id":"$QMsGNQxircHbt9IrBi1U7ifxBhcFDhftw94w61QOPm8","rel_type":"m.replace"},"m.mentions":{},"body":" * My benchmark results from this optimisation is also interesting. With the JVM version it's about 15% improvement. When running the JS version on chromium the performance increase is around 50%, and on firefox it's 100%.","msgtype":"m.text"}} {"origin_server_ts":1709304587384,"event_id":"$xhPBIDjnFX460wVOn5TCcfZqxwk5rCTHiDSCk9osWck","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The JVM has really efficient object allocation it would seem.","msgtype":"m.text"}} {"origin_server_ts":1709304616676,"event_id":"$AlITV3OrORdTdaX4eA2iBoYcTuNelf4eb_A2aBIn36g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"(I think the optimiser manages to completely avoid the boxing altogether in this case)","msgtype":"m.text"}} {"origin_server_ts":1709315314357,"event_id":"$QRd-oWDI4WX2upMkSayepY_qLsoz1f3mB19sPFKlBDA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: I've fixed take on scalars so that it behaves the same as Dyalog now.","msgtype":"m.text","formatted_body":"
                      Marshall<\/a>: I've fixed take on scalars so that it behaves the same as Dyalog now."}} {"origin_server_ts":1709315345698,"event_id":"$yW2WKDeEGThU9obG7SBod-dBjr4j7EWBFn9LYNJMIRE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Building now, so it should be on the server in 10 minutes or so.","msgtype":"m.text"}} {"origin_server_ts":1709316200053,"event_id":"$xtDQDG1MjKNuD5se6vjnDqmK8IOvmUUwAAkTg-hVtHA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Okay, now you're tied for first place on that table.","msgtype":"m.text","formatted_body":"Okay, now you're tied for first place on that table."}} {"origin_server_ts":1709318326644,"event_id":"$RLOkPJMAzEOkgwc1SiSbNADiw6_7edWgyNHzprqE7Tk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What should I do to move up that table? ","msgtype":"m.text"}} {"origin_server_ts":1709318447547,"event_id":"$7ky4OQFDUN1oTCWdMPuAo6M3mTZXaQyI5nVCLrBKOBQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"What should I do to move up that table? 😀","msgtype":"m.text"},"m.relates_to":{"event_id":"$RLOkPJMAzEOkgwc1SiSbNADiw6_7edWgyNHzprqE7Tk","rel_type":"m.replace"},"body":"* What should I do to move up that table? 😀","msgtype":"m.text"}} {"origin_server_ts":1709319408508,"event_id":"$hyUZee7TNLxQerz8S_msxaHTnaNw1rqBcZLQ-ubbPX4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Well I don't want to add a new column for something that's only supported in a niche dialect, so I suppose you'd have to make an extension, then convince a few of the other languages from the other rows to implement it while making sure none of the ones tied with you do.","msgtype":"m.text","formatted_body":"Well I don't want to add a new column for something that's only supported in a niche dialect, so I suppose you'd have to make an extension, then convince a few of the other languages from the other rows to implement it while making sure none of the ones tied with you do."}} {"origin_server_ts":1709319418227,"event_id":"$cGhCLbjx-pi0aPYPlXwhg4TGky9Adx6pBBwA2y357cQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Well I don't want to add a new column for something that's only supported in a niche dialect, so I suppose you'd have to make an extension, then convince a few of the languages from the other rows to implement it while making sure none of the ones tied with you do.","msgtype":"m.text","formatted_body":"Well I don't want to add a new column for something that's only supported in a niche dialect, so I suppose you'd have to make an extension, then convince a few of the languages from the other rows to implement it while making sure none of the ones tied with you do."},"m.relates_to":{"event_id":"$hyUZee7TNLxQerz8S_msxaHTnaNw1rqBcZLQ-ubbPX4","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* Well I don't want to add a new column for something that's only supported in a niche dialect, so I suppose you'd have to make an extension, then convince a few of the languages from the other rows to implement it while making sure none of the ones tied with you do.","msgtype":"m.text","formatted_body":"* Well I don't want to add a new column for something that's only supported in a niche dialect, so I suppose you'd have to make an extension, then convince a few of the languages from the other rows to implement it while making sure none of the ones tied with you do."}} {"state_key":"@elementary_watson:matrix.org","origin_server_ts":1709786318016,"event_id":"$xDZmY5o-rihNCqVRjmnE-mipetj13458Yqi9ithHlj0","sender":"@elementary_watson:matrix.org","user_id":"@elementary_watson:matrix.org","type":"m.room.member","content":{"displayname":"elementary_watson","membership":"join"}} {"origin_server_ts":1709978085074,"event_id":"$TnY_7Lt0n7J9g2SWbEZ08gthDF1wdscJuzbSlCvJ1gQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm building something I'm not sure any array languages have done before. I'm adding the ability for the formatter to add metadata to the output. This allows the formatter to diaplay strings (for example) in truncated form, but you can display the full string in a popup when hovering the mouse over it.","msgtype":"m.text"}} {"origin_server_ts":1710001480548,"event_id":"$fv5TiZuzRDJPgH8wxwEdwvNrWHqMGzsRrhAud4YO-Ig","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$TnY_7Lt0n7J9g2SWbEZ08gthDF1wdscJuzbSlCvJ1gQ","rel_type":"m.annotation","key":"😎"}}} {"origin_server_ts":1710073332586,"event_id":"$U482lWB7DwMhBM42jRnuY-VhvvPrsWStb0YYExb1ckk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Missing entries in the [Kap reference](https://kapdemo.dhsdevelopments.com/reference.html): `⍳`, `⍴`, `∘.` for outer product.","msgtype":"m.text","formatted_body":"Missing entries in the Kap reference<\/a>: ⍳<\/code>, ⍴<\/code>, ∘.<\/code> for outer product."}} {"origin_server_ts":1710073897191,"event_id":"$Is_rC5iOSHJTFi0QAcDU5PON6YudcPkvQWE9DOgA2MM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Thanks. I'll update it.","msgtype":"m.text","formatted_body":"Thanks. I'll update it."}} {"origin_server_ts":1710073932123,"event_id":"$in5FJ8hfSpgk8DmDM6N0DWEzhsPFDt06FrJ7BANWtr0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Support for apl-style outer product will probably go away though so I'm not sure I want to document it.","msgtype":"m.text","formatted_body":"Support for apl-style outer product will probably go away though so I'm not sure I want to document it."}} {"origin_server_ts":1710074050256,"event_id":"$OJuzhrg-5Tw8kyeJDVH4xcwPu737K6GNAc395zzzaIc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So it should probably not go on APL Wiki and [omnibar](https://omnibar.rubenverg.com/) then?","msgtype":"m.text","formatted_body":"So it should probably not go on APL Wiki and omnibar<\/a> then?"}} {"origin_server_ts":1710074164890,"event_id":"$wV8VGbLq8s99yaSJ5G8HhfOBs1RfNCTRxYZIvaOQuH0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I mean, the apl-style will probably remain as an alternative to the dedicated symbol, but the change that may happen is thatthe period will no longer be supported in favour of the middle dot.","msgtype":"m.text","formatted_body":"I mean, the apl-style will probably remain as an alternative to the dedicated symbol, but the change that may happen is thatthe period will no longer be supported in favour of the middle dot."}} {"origin_server_ts":1710074183004,"event_id":"$gLSdlqPgOs8FnNfn9b98sQmr2sYt650bQFTnoxa_Bow","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"That is, jot-middle dot will still work.","msgtype":"m.text","formatted_body":"That is, jot-middle dot will still work."}} {"origin_server_ts":1710074610617,"event_id":"$iQoSBOCZozbrdFtj4cO2JNZEqVgtOqt6faguD6BePko","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Well, APL Wiki already just uses `\u2022` for inner product (because of your edit) so I guess I'll just add `∘\u2022`. And `\u2022` also doesn't appear in the documentation, just a TODO entry for `.`.","msgtype":"m.text","formatted_body":"Well, APL Wiki already just uses \u2022<\/code> for inner product (because of your edit) so I guess I'll just add ∘\u2022<\/code>. And \u2022<\/code> also doesn't appear in the documentation, just a TODO entry for .<\/code>."}} {"origin_server_ts":1710088236854,"event_id":"$9SS_titfEiwsEsL54rPJqMs_XBpnRtDIHRfnvcRDtnM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh. What? I thought it used middle dot. I'll update this. ","msgtype":"m.text","formatted_body":"Oh. What? I thought it used middle dot. I'll update this. "}} {"origin_server_ts":1710088277361,"event_id":"$XU_HGiVlmfie9Uu66aKmj3ORLejA7i9WBMYEWDKgh6A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I mean, the apl-style will probably remain as an alternative to the dedicated symbol, but the change that may happen is that the period will no longer be supported in favour of the middle dot.","msgtype":"m.text","formatted_body":"I mean, the apl-style will probably remain as an alternative to the dedicated symbol, but the change that may happen is that the period will no longer be supported in favour of the middle dot."},"m.relates_to":{"event_id":"$wV8VGbLq8s99yaSJ5G8HhfOBs1RfNCTRxYZIvaOQuH0","rel_type":"m.replace"},"body":"* I mean, the apl-style will probably remain as an alternative to the dedicated symbol, but the change that may happen is that the period will no longer be supported in favour of the middle dot.","msgtype":"m.text"}} {"origin_server_ts":1710262634317,"event_id":"$eqoKI5aRq9ffm3h3T5zZEJI8RbBFsKSMTa1qTy5Zf0k","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I wonder how easy/difficult it is to make bindings in KAP from java or kotlin libraries that already exist","msgtype":"m.text"}} {"origin_server_ts":1710264262792,"event_id":"$9q1ZgafX5QFJLgIKwmyTQNgD-Lh8JJfcvLZWqrilJLM","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1710264267150,"event_id":"$G0jyCrtR5BlmCblqZGhjkUW6gbKQCLkpz1EZDJnoPy8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$9q1ZgafX5QFJLgIKwmyTQNgD-Lh8JJfcvLZWqrilJLM","type":"m.room.redaction","content":{"redacts":"$9q1ZgafX5QFJLgIKwmyTQNgD-Lh8JJfcvLZWqrilJLM"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1710264267150,"event_id":"$G0jyCrtR5BlmCblqZGhjkUW6gbKQCLkpz1EZDJnoPy8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$9q1ZgafX5QFJLgIKwmyTQNgD-Lh8JJfcvLZWqrilJLM","type":"m.room.redaction","content":{"redacts":"$9q1ZgafX5QFJLgIKwmyTQNgD-Lh8JJfcvLZWqrilJLM"}} {"origin_server_ts":1710264274634,"event_id":"$QizFGr6EQcd3u9wR1P83l0nywvjViMYFLZJysrJmzi8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: extremely easy","msgtype":"m.text","formatted_body":"Tortus<\/a>: extremely easy"}} {"origin_server_ts":1710264435496,"event_id":"$l2rLPFDn4yifX3n72_k85yFCZHbr0Q0FzgG57ASxnhs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: There is a kap-native API to access Java classes, but it's not complete.","msgtype":"m.text","formatted_body":"Tortus<\/a>: There is a kap-native API to access Java classes, but it's not complete."}} {"origin_server_ts":1710264456033,"event_id":"$eIByYpSYaQEjvR4n4mdiTmkVLuLNHOw6yksdddGEamg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's also possible to build an integration module as a jar that is automatically loaded when added to the classpath.","msgtype":"m.text"}} {"origin_server_ts":1710267013867,"event_id":"$J_yqBc24aEPZU-kmvdGqPhH6ml7KkyJ6DcrfGFMHFpU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Do you have a specific library in mind?","msgtype":"m.text","formatted_body":"Do you have a specific library in mind?"}} {"origin_server_ts":1710304867361,"event_id":"$Fri8_-bERNF2tHNHJIIghGdhebGoFLOeMRMwO7KO1qM","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Not really, but knowing owuld be useful","msgtype":"m.text"}} {"origin_server_ts":1710304884210,"event_id":"$1lttyiKBuXANmmcZU3MVJX2UTihSuxbgscSCLy9eldg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Also, just ran into this case: how can I assign to a particular index in KAP","msgtype":"m.text"}} {"origin_server_ts":1710306927896,"event_id":"$px3r_qr7cHntI4tj5A50nYOkf_nGgekMsH_VpitTxoQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: You can't, because arrays are immutable. You can create a derived array with certain cells changed though:","msgtype":"m.text","formatted_body":"Tortus<\/a>: You can't, because arrays are immutable. You can create a derived array with certain cells changed though:"}} {"origin_server_ts":1710306929004,"event_id":"$NTn-zp0vt5FuKGqaN0BXqIzpMaPKON6gke270fMTSPo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#foo%20%E2%86%90%20%E2%8D%B310%0A%7B100%20200%7D%E2%8D%A2(3%207%20%E2%8A%87)%20foo","msgtype":"m.text"}} {"origin_server_ts":1710314400876,"event_id":"$jq21jqWl28d1RVClM58fQStHMy4AaZ8b8cwjLiB1Smo","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"That\u2019s just what I was looking for","msgtype":"m.text"}} {"origin_server_ts":1710314403481,"event_id":"$e85F-VIq-nbgcijNyan--3zvPICih7-8TPwQd9PDo-Y","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Perfect","msgtype":"m.text"}} {"origin_server_ts":1710314410293,"event_id":"$f8j639j7w5oQ9AiGHrjAFQUmDCH7_KPQzw83seE1q5A","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"I don\u2019t know how to use select send help","msgtype":"m.text"}} {"origin_server_ts":1710314653228,"event_id":"$jX5pQe03BjhH3QJUR02m8qd-P2RvY1FBOdmgpViPYqk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: What did you try? If there is a way to improve the reference doc, let me know.","msgtype":"m.text","formatted_body":"Tortus<\/a>: What did you try? If there is a way to improve the reference doc, let me know."}} {"origin_server_ts":1710331182216,"event_id":"$YUb8uelWxyyCy1PCIdpsAylFNfCK9Ozm2PrTzMlBdxU","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"re: Stencil and\"If you want this non-padded behaviour with Dyalog, how do you do it?\"... I think you just have to manually trim the array.\n\nI think your idea of not doing edge padding (like J's Cut) makes more sense. If I ever needed padding behaviour (hasn't come up yet) I'd just pre-pad the array","msgtype":"m.text"}} {"origin_server_ts":1710331195686,"event_id":"$u07KFne9wZhm-GLR8qmuXAs_FuYnu-BZnLSx1Vl7sWU","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"re: Stencil and \"If you want this non-padded behaviour with Dyalog, how do you do it?\"... I think you just have to manually trim the array.\n\nI think your idea of not doing edge padding (like J's Cut) makes more sense. If I ever needed padding behaviour (hasn't come up yet) I'd just pre-pad the array","msgtype":"m.text"},"m.relates_to":{"event_id":"$YUb8uelWxyyCy1PCIdpsAylFNfCK9Ozm2PrTzMlBdxU","rel_type":"m.replace"},"m.mentions":{},"body":" * re: Stencil and \"If you want this non-padded behaviour with Dyalog, how do you do it?\"... I think you just have to manually trim the array.\n\nI think your idea of not doing edge padding (like J's Cut) makes more sense. If I ever needed padding behaviour (hasn't come up yet) I'd just pre-pad the array","msgtype":"m.text"}} {"origin_server_ts":1710334049409,"event_id":"$Dr74N88zUYD8k6-CVnA1VuobJt_ylMAajdVhfdxWTIk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Right. That's my thought as well.","msgtype":"m.text","formatted_body":"Right. That's my thought as well."}} {"origin_server_ts":1710334317826,"event_id":"$Jy4upJWbzkni5V8M2ftlP1BGSqb7uNwhDHa26Jmq6dk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"You want to hear a disgusting suggestion? `⌺` could be ambivalent, just like `/`, in that it is both an operator and a function. As a function, it's the \"pad\" function, and the operator is the non-padded stencil operation. So to perform a padded stencil you'd do `(F⌺3) 3⌺x`","msgtype":"m.text","formatted_body":"You want to hear a disgusting suggestion? ⌺<\/code> could be ambivalent, just like /<\/code>, in that it is both an operator and a function. As a function, it's the \"pad\" function, and the operator is the non-padded stencil operation. So to perform a padded stencil you'd do (F⌺3) 3⌺x<\/code>"}} {"origin_server_ts":1710335762198,"event_id":"$GBHM_eCSOduPITpc4UW46Y0okI94TTFO3jHDgMiXt3A","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Oh! Hmm, design is hard 😀\nI know the dual nature of `/` is a sore point for Dyalog APL... but since your tacit model is different, maybe it's less of an issue.","msgtype":"m.text","formatted_body":"Oh! Hmm, design is hard 😀
                      I know the dual nature of /<\/code> is a sore point for Dyalog APL... but since your tacit model is different, maybe it's less of an issue."}} {"origin_server_ts":1710335831277,"event_id":"$BMbT25td_AnF7Fup0Dbys3efi_7CBUd8dpPu2jjfPRA","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'm not a language designer, but if I'm giving my honest opinion... I think it's ok.\nI really think the average user would use one or the other... and rarely both together (from my experience).","msgtype":"m.text"}} {"origin_server_ts":1710335952894,"event_id":"$DHMORspAyiUVYB2IeoyUiaxqX0Z-YCApQ5RCt3bykeA","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://matrix.org/zBpYHYCwVvZcOlwoeuPReLoP","info":{"xyz.amorgan.blurhash":"T24.3s~q-;?HRjRj-;R*In?HM{IU","size":14987,"w":349,"h":406,"mimetype":"image/png"}}} {"origin_server_ts":1710335954967,"event_id":"$6kFMwlTxaOie5bqoWc9wIrQ1pu46_31P39kSDfP-N58","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Oh, and padding needs to be multi-dimensional. I've written a `Pad` function in J already, but the implementation it's really transferable\n","msgtype":"m.text","formatted_body":"Oh, and padding needs to be multi-dimensional. I've written a Pad<\/code> function in J already, but the implementation it's really transferable"}} {"origin_server_ts":1710336006593,"event_id":"$7uonB4VKqwMFKT5DHW6xwmFcfz0if0HAfuP2EvNMUrE","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I don't want to think about > 2 dimensions 😨","msgtype":"m.text"}} {"origin_server_ts":1710336038545,"event_id":"$vwvY1d4nuSLvAoCitz99F8ouwANGiDdXmmuhjBstgd0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$GBHM_eCSOduPITpc4UW46Y0okI94TTFO3jHDgMiXt3A"}},"m.mentions":{"user_ids":["@elcar0:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@elcar0:matrix.org> Oh! Hmm, design is hard 😀\n> I know the dual nature of `/` is a sore point for Dyalog APL... but since your tacit model is different, maybe it's less of an issue.\n\nYes, since the parser works completely differently. So you can force `/` to be a function by typing `(/)`.","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @elcar0:matrix.org<\/a>
                      Oh! Hmm, design is hard 😀
                      I know the dual nature of /<\/code> is a sore point for Dyalog APL... but since your tacit model is different, maybe it's less of an issue.<\/blockquote><\/mx-reply>Yes, since the parser works completely differently. So you can force /<\/code> to be a function by typing (/)<\/code>."}} {"origin_server_ts":1710336058865,"event_id":"$FnLIUt67uKCqfDx41lVoJ6Hq4cksOGBbgjlJsHXspB4","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Oh, and padding needs to be multi-dimensional. I've written a `Pad` function in J already, but the implementation isn't really transferable","msgtype":"m.text","formatted_body":"Oh, and padding needs to be multi-dimensional. I've written a Pad<\/code> function in J already, but the implementation isn't really transferable"},"m.relates_to":{"event_id":"$6kFMwlTxaOie5bqoWc9wIrQ1pu46_31P39kSDfP-N58","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Oh, and padding needs to be multi-dimensional. I've written a `Pad` function in J already, but the implementation isn't really transferable","msgtype":"m.text","formatted_body":" * Oh, and padding needs to be multi-dimensional. I've written a Pad<\/code> function in J already, but the implementation isn't really transferable"}} {"origin_server_ts":1710336113020,"event_id":"$8VKP1aMDmyC7W9Y19oUXBewKGILm0Z1us-Fmx0fgJVQ","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Nice","msgtype":"m.text"}} {"origin_server_ts":1710336487753,"event_id":"$qvSfuoPc6fziO34dhO6JRzTvX8zahmxYi_hBT2YwoFc","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Do you currently have a mechanism for setting the pad value when, eg. over-taking?\n\nJ does `10 {.!.'.' 'helo'`\nBQN does `\"helo\"»10⥊'.'`\n\nwhich returns `'helo......'`","msgtype":"m.text","formatted_body":"

                      Do you currently have a mechanism for setting the pad value when, eg. over-taking?<\/p>\n

                      J does 10 {.!.'.' 'helo'<\/code>
                      BQN does \"helo\"»10⥊'.'<\/code><\/p>\n

                      which returns 'helo......'<\/code><\/p>\n"}} {"origin_server_ts":1710336894060,"event_id":"$8ojvC7144r9RrWDj9EtUoQ9tG0mhjXhT2jipsqBEZiU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@elcar0:matrix.org"]},"format":"org.matrix.custom.html","body":"elcar0: Yes, but the syntax isn't settled so it's in the internal package:","msgtype":"m.text","formatted_body":"elcar0<\/a>: Yes, but the syntax isn't settled so it's in the internal package:"}} {"origin_server_ts":1710336966219,"event_id":"$0iaj8dbutnUr5xEifneBGOlM0LNUzU6INxtucxXIWDU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@elcar0:matrix.org"]},"format":"org.matrix.custom.html","body":"elcar0: try this: `5 ↑ @x int:proto \"abc\"`","msgtype":"m.text","formatted_body":"elcar0<\/a>: try this: 5 ↑ @x int:proto \"abc\"<\/code>"}} {"origin_server_ts":1710337029205,"event_id":"$bA3_GLQ7DuZnzPhInCi6qrcLrJ7cvqx3Y2rvt4X10nk","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Yep that works. I remember you mentioning it before, but couldn't remember the syntax (or if it had made it into the language proper yet)","msgtype":"m.text"}} {"origin_server_ts":1710337055868,"event_id":"$cOHIbgZ7jo6W4uPzEoCRdtdKWaRJy-6iUvx8C9uULcc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"There are a bunch of functions in the `int` package are unfinished designs.","msgtype":"m.text","formatted_body":"There are a bunch of functions in the int<\/code> package are unfinished designs."}} {"origin_server_ts":1710337092627,"event_id":"$RcUcUDjcRvJzDMRQ4CmuSNJ-dASMm-1fEjSenWiKy30","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It works fine, but the semantics aren't settled. Specifically, which functions should preserve the prototype value.","msgtype":"m.text"}} {"origin_server_ts":1710337348632,"event_id":"$lhtPEUru6q8yP3MukwfITnyfAUNmtX57UePUDWQDElo","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Yeah, padding is an odd one. J's use of a function/2-modifier (`f !. p`) - where `f` is the function and `p` is the proto - is fairly clean, but not all functions care about the proto, so it's not broadly applicable","msgtype":"m.text","formatted_body":"Yeah, padding is an odd one. J's use of a function/2-modifier (f !. p<\/code>) - where f<\/code> is the function and p<\/code> is the proto - is fairly clean, but not all functions care about the proto, so it's not broadly applicable"}} {"origin_server_ts":1710337482642,"event_id":"$bTxPh8our7oBYZX9a9mFqwxmrkW8kAxVpM8lbYkwmks","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"It's sort of adjacent to the padding conversation, because how I wrote `Pad` in J is to over take, then neg-rotate","msgtype":"m.text","formatted_body":"It's sort of adjacent to the padding conversation, because how I wrote Pad<\/code> in J is to over take, then neg-rotate"}} {"origin_server_ts":1710337485258,"event_id":"$rNqfIFbN6Peexv7LOat_1SqgOBVcfn4NCUDVqCZHFzM","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://matrix.org/FFxoWidVcbLUczutXFHrpjKS","info":{"xyz.amorgan.blurhash":"L12=y3~X_3_3t7t7jJtQR-xts;t7","size":10862,"w":466,"h":331,"mimetype":"image/png"}}} {"origin_server_ts":1710337505503,"event_id":"$TdjSYNK1yKAud7xHsA4QMFVFdR6KN1KdcEiLRMsEhSI","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"But values get computed. Not sure if this is the most efficient way.","msgtype":"m.text"}} {"origin_server_ts":1710337634733,"event_id":"$oLIFBvjlBNb8_2tZgF6Pj86_SoclKHo3Ud-CAWP7I7s","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Which is why `!.` does random shit with other functions... like adjust comparison tolerance or something. I've only ever used it with Rotate or Take when I want to set pad values.","msgtype":"m.text","formatted_body":"Which is why !.<\/code> does random shit with other functions... like adjust comparison tolerance or something. I've only ever used it with Rotate or Take when I want to set pad values."}} {"origin_server_ts":1710337674983,"event_id":"$ZK-iJY4tm3An5hKn772OyZTb0b7UNgnyE5rWHF_8HX4","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Yeah, padding is an odd one. J's use of a function/2-modifier (`f !. p`) - where `f` is the operator and `p` is the proto - is fairly clean, but not all functions care about the proto, so it's not broadly applicable","msgtype":"m.text","formatted_body":"Yeah, padding is an odd one. J's use of a function/2-modifier (f !. p<\/code>) - where f<\/code> is the operator and p<\/code> is the proto - is fairly clean, but not all functions care about the proto, so it's not broadly applicable"},"m.relates_to":{"event_id":"$lhtPEUru6q8yP3MukwfITnyfAUNmtX57UePUDWQDElo","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Yeah, padding is an odd one. J's use of a function/2-modifier (`f !. p`) - where `f` is the operator and `p` is the proto - is fairly clean, but not all functions care about the proto, so it's not broadly applicable","msgtype":"m.text","formatted_body":" * Yeah, padding is an odd one. J's use of a function/2-modifier (f !. p<\/code>) - where f<\/code> is the operator and p<\/code> is the proto - is fairly clean, but not all functions care about the proto, so it's not broadly applicable"}} {"origin_server_ts":1710337881667,"event_id":"$oAfJ2cNrPBbe6XYiY2DOcFLR07hMuS6MWaJupioQwrY","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"re: padding... I guess the other way to do it is to, eg. create a `2+n×n` matrix of the fill value, then \"overlay\" the original n×n array into the that at position (1 1)","msgtype":"m.text","formatted_body":"re: padding... I guess the other way to do it is to, eg. create a 2+n×n<\/code> matrix of the fill value, then \"overlay\" the original n×n array into the that at position (1 1)"}} {"origin_server_ts":1710338540498,"event_id":"$OnzZE5exoPtcBHF4_qLqtzagzqG4nVlX86ZvRAKRU5o","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I feel like the better approach for tesselated stuff is to throw out the stencil thing entirely and make it more like windowed reduce. The `window function/ array` ordering is nicer and the extra row of stencil is hard to use (I think the motivation is non-overlapping windows, but I'd use under-partition for that). Then the two changes are just that it shouldn't implicitly reduce with the function and that the window argument should be a vector.","msgtype":"m.text","formatted_body":"I feel like the better approach for tesselated stuff is to throw out the stencil thing entirely and make it more like windowed reduce. The window function/ array<\/code> ordering is nicer and the extra row of stencil is hard to use (I think the motivation is non-overlapping windows, but I'd use under-partition for that). Then the two changes are just that it shouldn't implicitly reduce with the function and that the window argument should be a vector."}} {"origin_server_ts":1710338662419,"event_id":"$qsxiq0t4pZz0mJlbiKBYhYCJa8gmZ-gIxdLlv7wIAgQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Could be written with `⌺` or some other character.","msgtype":"m.text","formatted_body":"Could be written with ⌺<\/code> or some other character."}} {"origin_server_ts":1710339607767,"event_id":"$oS4jdtgdlP4SORtUnuxHPfV9x2-tFnMvoW_Zt_2UIw8","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1710339650672,"event_id":"$pAcMpYaEydVl9PzhyWXYm6BOshFYarhuF9yQK2oS54A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$oS4jdtgdlP4SORtUnuxHPfV9x2-tFnMvoW_Zt_2UIw8","type":"m.room.redaction","content":{"redacts":"$oS4jdtgdlP4SORtUnuxHPfV9x2-tFnMvoW_Zt_2UIw8"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1710339650672,"event_id":"$pAcMpYaEydVl9PzhyWXYm6BOshFYarhuF9yQK2oS54A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$oS4jdtgdlP4SORtUnuxHPfV9x2-tFnMvoW_Zt_2UIw8","type":"m.room.redaction","content":{"redacts":"$oS4jdtgdlP4SORtUnuxHPfV9x2-tFnMvoW_Zt_2UIw8"}} {"origin_server_ts":1710339677397,"event_id":"$ZDi9m67ueaCek8O5z84ZndaLfQ27OaqgICqoqvcyE2Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Isn't that precisely what windowed op does in J? So it would just be backslash?","msgtype":"m.text","formatted_body":"Isn't that precisely what windowed op does in J? So it would just be backslash?"}} {"origin_server_ts":1710340028603,"event_id":"$R7h1taXREpMzSKdJivkpD4zCsYV4eiPgAECLQSBX_1I","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Except J defines `\\\\` functions to have left rank zero, which cuts off the extension to multiple dimensions.","msgtype":"m.text","formatted_body":"Except J defines \\<\/code> functions to have left rank zero, which cuts off the extension to multiple dimensions."}} {"origin_server_ts":1710340060311,"event_id":"$c1W-k0uMAOqi-x6WFILPSP8hzxxU0vKw2g4xEgUL1eI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Function rank and its consequences...","msgtype":"m.text","formatted_body":"Function rank and its consequences..."}} {"origin_server_ts":1710340316184,"event_id":"$N4266ru8LF8nyy3rMfyu0hMrmE5Bewk7rTRyJOn_5pg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Aren't the functions called monadically?","msgtype":"m.text","formatted_body":"Aren't the functions called monadically?"}} {"origin_server_ts":1710340507134,"event_id":"$XO7H4x9JXfhRRgGHLrljy5C3VEJsSPPNJIcqYgHgOo4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yes, in every other respect it's like what I said. But if you do `2 3 ]\\ i.5 5` you get the result `(2 ]\\ i.5 5) ,: (3 ]\\ i.5 5)`, one cell windowed by 2 and then another windowed by 3. Which is aggressively useless.","msgtype":"m.text","formatted_body":"Yes, in every other respect it's like what I said. But if you do 2 3 ]\\ i.5 5<\/code> you get the result (2 ]\\ i.5 5) ,: (3 ]\\ i.5 5)<\/code>, one cell windowed by 2 and then another windowed by 3. Which is aggressively useless."}} {"origin_server_ts":1710348908691,"event_id":"$VTpG7m3zT9cJxN_ol0GSzg5_hsh-FBE7omfL-og8DJE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$jX5pQe03BjhH3QJUR02m8qd-P2RvY1FBOdmgpViPYqk"}},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Tortus: What did you try? If there is a way to improve the reference doc, let me know.\n\nI\u2019m kinda joking around, but I do need to learn select functionality lol","msgtype":"m.text","formatted_body":"

                      In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                      Tortus<\/a>: What did you try? If there is a way to improve the reference doc, let me know.<\/blockquote><\/mx-reply>I\u2019m kinda joking around, but I do need to learn select functionality lol"}} {"origin_server_ts":1710348921322,"event_id":"$jRXWmecFt7jTdsMbX7FsNMvE_xEm9m9ay0HzjG6zjjU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Thank you for the help though, I\u2019ll let you know if anything is ambiguous","msgtype":"m.text"}} {"origin_server_ts":1710349092456,"event_id":"$vQejYR1E0WVEjekXWU-EcFI53irOW7XkonBh-DWz-yo","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"OH! yknow what just came to mind? I wanted to ask this but I failed to ask the whole time... since `a«b»c` is a syntactic object, would there be a way to define other combinators similarly?","msgtype":"m.text","formatted_body":"OH! yknow what just came to mind? I wanted to ask this but I failed to ask the whole time... since a«b»c<\/code> is a syntactic object, would there be a way to define other combinators similarly?"}} {"origin_server_ts":1710349148963,"event_id":"$BXTf0LVmmsGd4If7H7h0ybuW-5WO3fqTyBTlCt_afE8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: Well, it's quite simple. The left argument is a list of selections, and for each value, pick the corresponding value in the right argument. So `0 1 0 1 2 % \"abcde\" \"ABCDE\" @Z` is `\"aBcDZ\"`","msgtype":"m.text","formatted_body":"Tortus<\/a>: Well, it's quite simple. The left argument is a list of selections, and for each value, pick the corresponding value in the right argument. So 0 1 0 1 2 % \"abcde\" \"ABCDE\" @Z<\/code> is \"aBcDZ\"<\/code>"}} {"origin_server_ts":1710349170865,"event_id":"$PFHVpr7Fabh-PMM57cYPT4dwWmQ_EIQGkyTJtoWBGUY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The last value is a scalar, so it does scalar extension.","msgtype":"m.text"}} {"origin_server_ts":1710349207405,"event_id":"$dCNMFn3onLYc2pKazyLhvLNvCkaypAGWcMY7pkTQFpU","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$BXTf0LVmmsGd4If7H7h0ybuW-5WO3fqTyBTlCt_afE8"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Tortus: Well, it's quite simple. The left argument is a list of selections, and for each value, pick the corresponding value in the right argument. So `0 1 0 1 2 % \"abcde\" \"ABCDE\" @Z` is `\"aBcDZ\"`\n\nwhat's the difference with `⌷`?","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                      Tortus<\/a>: Well, it's quite simple. The left argument is a list of selections, and for each value, pick the corresponding value in the right argument. So 0 1 0 1 2 % \"abcde\" \"ABCDE\" @Z<\/code> is \"aBcDZ\"<\/code><\/blockquote><\/mx-reply>what's the difference with ⌷<\/code>?"}} {"origin_server_ts":1710349237635,"event_id":"$VBNJGYoxVfEpRNb8ejAlYZshOFY5fHRG5bR8dHvPiPQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$vQejYR1E0WVEjekXWU-EcFI53irOW7XkonBh-DWz-yo"}},"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> OH! yknow what just came to mind? I wanted to ask this but I failed to ask the whole time... since `a«b»c` is a syntactic object, would there be a way to define other combinators similarly?\n\nYou can define your own regular operator, but `«` and `»` are special, and has dedicated code in the parser. But normal operators can be defined in a similar manner (except the syntax is different) to APL.","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @tortus:matrix.org<\/a>
                      OH! yknow what just came to mind? I wanted to ask this but I failed to ask the whole time... since a«b»c<\/code> is a syntactic object, would there be a way to define other combinators similarly?<\/blockquote><\/mx-reply>You can define your own regular operator, but «<\/code> and »<\/code> are special, and has dedicated code in the parser. But normal operators can be defined in a similar manner (except the syntax is different) to APL."}} {"origin_server_ts":1710349278670,"event_id":"$M6x1KSGRjtc4oeuTgTEN4fwq53TATt1WYmnErG5Z9oc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I see 🤔","msgtype":"m.text"}} {"origin_server_ts":1710349354092,"event_id":"$r1WrqEJ3oeEPpmGnIchNC4ZygyT6dYHo7zBvxG1aE8k","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Oh I did also wanna check did that conditional issue ever get resolved","msgtype":"m.text"}} {"origin_server_ts":1710349367207,"event_id":"$qDqw3QsYq6NKveRbv8E2aSwD6I6RGM3p7tlS8l6UPGc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"where any non-zero value gets evaluated as truthy or something","msgtype":"m.text"}} {"origin_server_ts":1710349394731,"event_id":"$b2rPCwI8A0_Eh-U2jGaaJTGS50JFdrmR85EBBkXajjs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$dCNMFn3onLYc2pKazyLhvLNvCkaypAGWcMY7pkTQFpU"}},"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> what's the difference with `⌷`?\n\nIt's very different. If you want to use index, then you have to do this to get the same effect: `0 1 0 1 2 ⌷¨ \"aAZ\" \"bBZ\" \"cCZ\" \"dDZ\" \"eEZ\"`.","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @tortus:matrix.org<\/a>
                      what's the difference with ⌷<\/code>?<\/blockquote><\/mx-reply>It's very different. If you want to use index, then you have to do this to get the same effect: 0 1 0 1 2 ⌷¨ \"aAZ\" \"bBZ\" \"cCZ\" \"dDZ\" \"eEZ\"<\/code>."}} {"origin_server_ts":1710349481267,"event_id":"$tuj2n-lgWmFvtwn1enA2B-SbJkEPnZmN2TsTk-Z3Kms","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Oh","msgtype":"m.text"}} {"origin_server_ts":1710349492102,"event_id":"$lYDTlqaX7HFsZKhNKfCnX_YNCMR-ogM5wejueBZm4jc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Wait why `%` I thought select was `⊇`","msgtype":"m.text","formatted_body":"Wait why %<\/code> I thought select was ⊇<\/code>"}} {"origin_server_ts":1710349499117,"event_id":"$NMOUg1xHRxQQGqbjj_JYD6kvAZipIsrL8AB84l3o-rU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$r1WrqEJ3oeEPpmGnIchNC4ZygyT6dYHo7zBvxG1aE8k"}},"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> Oh I did also wanna check did that conditional issue ever get resolved\n\nYou mean changing the boolean coercion function to raise an error on arguments not 0 or 1? No, I'm still not sure that's better :-)","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @tortus:matrix.org<\/a>
                      Oh I did also wanna check did that conditional issue ever get resolved<\/blockquote><\/mx-reply>You mean changing the boolean coercion function to raise an error on arguments not 0 or 1? No, I'm still not sure that's better :-)"}} {"origin_server_ts":1710349519328,"event_id":"$hKz-26UqKS3nrSWV81xmwI55UpjanE5eewVL8Hh1T8U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$lYDTlqaX7HFsZKhNKfCnX_YNCMR-ogM5wejueBZm4jc"}},"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@tortus:matrix.org> Wait why `%` I thought select was `⊇`\n\nOr sorry, I was talking about case all this time.","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @tortus:matrix.org<\/a>
                      Wait why %<\/code> I thought select was ⊇<\/code><\/blockquote><\/mx-reply>Or sorry, I was talking about case all this time."}} {"origin_server_ts":1710349524301,"event_id":"$l8G6mgtX3JhN6rM7jazNwspanzQbK8h_6uJA_VjLGYg","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$NMOUg1xHRxQQGqbjj_JYD6kvAZipIsrL8AB84l3o-rU"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> You mean changing the boolean coercion function to raise an error on arguments not 0 or 1? No, I'm still not sure that's better :-)\n\nI see. What about the connected `⌹` definition?","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                      You mean changing the boolean coercion function to raise an error on arguments not 0 or 1? No, I'm still not sure that's better :-)<\/blockquote><\/mx-reply>I see. What about the connected ⌹<\/code> definition?"}} {"origin_server_ts":1710349546558,"event_id":"$dsWEgx-FculgG2KTIECwMII6wqXhmV3fJBhKPCYQFNc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$hKz-26UqKS3nrSWV81xmwI55UpjanE5eewVL8Hh1T8U"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Or sorry, I was talking about case all this time.\n\nthank you for the clarification on that anyway, case is really useful","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                      Or sorry, I was talking about case all this time.<\/blockquote><\/mx-reply>thank you for the clarification on that anyway, case is really useful"}} {"origin_server_ts":1710349546604,"event_id":"$_VvSMGaQ7QMPC_oRDbyoPQNQrAU0uBf0ex4ZeOlMzPE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Wait, doesn't `⌹` work now?","msgtype":"m.text","formatted_body":"Wait, doesn't ⌹<\/code> work now?"}} {"origin_server_ts":1710349569566,"event_id":"$SsR4HZbbJlGK6PgdyyQe-AXQcgCKATdKcku7fCLO2ls","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"well, remember all that time ago when `⌹` wasn't working because a conditional was evaluating to true when it should have been false","msgtype":"m.text","formatted_body":"well, remember all that time ago when ⌹<\/code> wasn't working because a conditional was evaluating to true when it should have been false"}} {"origin_server_ts":1710349581039,"event_id":"$V-mJ5EahDMKv0PkviQhMnX5MleyD_3YoMEFllJqZQUo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Ah, I fixed that one.","msgtype":"m.text"}} {"origin_server_ts":1710349589086,"event_id":"$BOF0qkiUQfWUGdGaih2CXozFNJxEMtkMUrAYLw0pSak","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Gotcha. That's good to hear :3","msgtype":"m.text"}} {"origin_server_ts":1710349610888,"event_id":"$tSy-i_qJuKbp3mEwOSSbE9elo3QtuPc8MUSETfFefGQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I wrote some KAP code last night but I was stttruggling, mostly cuz under doesn't support every structural thing really","msgtype":"m.text"}} {"origin_server_ts":1710349629497,"event_id":"$ditVD6MztsUbcgqHTh8AVyGGh5MzaFy7-H8w0_azd-Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: Which one was missing? (should be easy to fix)","msgtype":"m.text","formatted_body":"
                      Tortus<\/a>: Which one was missing? (should be easy to fix)"}} {"origin_server_ts":1710349642491,"event_id":"$oJ960jXxxq_Dyq3KjWykglywHfcCr6OmeppDG-x8Mek","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Select is described pretty well here by the way: https://aplwiki.com/wiki/Select","msgtype":"m.text"}} {"origin_server_ts":1710349651230,"event_id":"$5oEn5V8CldOlg27pZ1cNGrC1WESVpRMiCf5r-gJorNk","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"`⍉` was missing, ","msgtype":"m.text","formatted_body":"⍉<\/code> was missing,"}} {"origin_server_ts":1710349658961,"event_id":"$MdJPqwkugi_4zSnMGyCcYTpuWGJsWAR-TokTuEhhxHM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Wait what?","msgtype":"m.text"}} {"origin_server_ts":1710349662231,"event_id":"$jAxDjxA5RsTmsG77B7RKVHlLA-TJpETMaCcRs4-_xwM","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I remember trying to do `⌷` but I didn't know `⊇` existed,","msgtype":"m.text","formatted_body":"I remember trying to do ⌷<\/code> but I didn't know ⊇<\/code> existed,"}} {"origin_server_ts":1710349676862,"event_id":"$BqgdMSWg5PpAXjoBzDwUwTTlZq-pHsBSHKGlLqajdqQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"yeah, I tried `⍉` last night and it said it wasn't supported","msgtype":"m.text","formatted_body":"yeah, I tried ⍉<\/code> last night and it said it wasn't supported"}} {"origin_server_ts":1710349682003,"event_id":"$G8RW6eEdOEjo8mZEpKfJlY_rgfrM5uRzEX2RAs5od6k","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"at least, that's what I remember","msgtype":"m.text"}} {"origin_server_ts":1710349711647,"event_id":"$WBdiHHLHOEKvVqHwuo6IGoO5zs0_ZNZSHsSFviVJIOQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"wait what why does it work now","msgtype":"m.text"}} {"origin_server_ts":1710349725455,"event_id":"$MfzXyh0ZsM7CthqiG1c69MROVtz8IIrcqEdGR6gtFQY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: Ah, dyadic `⍉` can't be used with under, but monadic can.","msgtype":"m.text","formatted_body":"Tortus<\/a>: Ah, dyadic ⍉<\/code> can't be used with under, but monadic can."}} {"origin_server_ts":1710349731139,"event_id":"$dHucZ2Sp-iO__2cLfPv0ymxUBql6gNmtQXCI_Scl8Tw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"That should be easy enough to fix.","msgtype":"m.text"}} {"origin_server_ts":1710349738085,"event_id":"$JyNP-8fCyL4bfkDXlNZf2l3J8HcGDDT4DhAEy1NvSks","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Oh I see","msgtype":"m.text"}} {"origin_server_ts":1710349745231,"event_id":"$218C2JoyDAePujstwEdOQrS1D5dEt7KzTciVmL0x5TE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"What operation did you try to perform under dyadic `⍉`?","msgtype":"m.text","formatted_body":"What operation did you try to perform under dyadic ⍉<\/code>?"}} {"origin_server_ts":1710349751321,"event_id":"$w2al6zt75wQ0ViSx93pQbqcB_GZDZxWFE04NzooYxL0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Thank you for your eagerness","msgtype":"m.text"}} {"origin_server_ts":1710349762623,"event_id":"$NMyfuSVnLX5wmGxfvh1MmORVngCu_ZBIRdw-r8p6k2s","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"lemme try to see if I can dig it up cuz I think I might have lost it","msgtype":"m.text"}} {"origin_server_ts":1710349818248,"event_id":"$ijd2HUUDnRsSCL6Nk2gGpGOwaX4wX4qCqI5DzzA3xnA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"The error just says `⍉: under not supported for function` so it's not actually clear that it's just the dyadic version that doesn't work. That should also be easy to fix.","msgtype":"m.text","formatted_body":"The error just says ⍉: under not supported for function<\/code> so it's not actually clear that it's just the dyadic version that doesn't work. That should also be easy to fix."}} {"origin_server_ts":1710349836038,"event_id":"$QXpVhlxlhghN1zLvLz6BOsGypSpq-wXv6PLWFv2F-rE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yeah, I was really confused about that","msgtype":"m.text"}} {"origin_server_ts":1710349849784,"event_id":"$_U4Ie16JNG8Quln24xjZZgSZOvmttmYGLgtp7Rb-wgo","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I guess I also thought that I was using monadic `⍉`, which made it all the more confusing","msgtype":"m.text","formatted_body":"I guess I also thought that I was using monadic ⍉<\/code>, which made it all the more confusing"}} {"origin_server_ts":1710349871598,"event_id":"$aypXsJ9lV7Flm4vMCZHwiAK6V59EUs5ociH5bApcHjQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"but that's a me issue that's not a KAP issue LOL","msgtype":"m.text"}} {"origin_server_ts":1710350008354,"event_id":"$QErRvFAFo9_u3iE503dobTJd-e5U5qKxZqAIZjUuvXE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, I'm trying really hard to dig it up but I can't seem to find it; it was part of my old logic and I should have saved it. Apologies, Loke","msgtype":"m.text"}} {"origin_server_ts":1710350013621,"event_id":"$DwDGZCTg-3sdzctGeAaswEqvsdjwJM_OMqmMpTmEmVo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Indeed. The issue is that the exact same error is thrown if the monadic or dyadic structural under fails: https://codeberg.org/loke/array/src/branch/master/array/src/commonMain/kotlin/array/functions.kt#L131","msgtype":"m.text"}} {"origin_server_ts":1710350018336,"event_id":"$0M_6ea0TkWNUUJ775tLHc9ghxVisv1dbZs0XIkJU8TE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"If I come across such an issue again I'll let you know promptly","msgtype":"m.text"}} {"origin_server_ts":1710350039875,"event_id":"$XcB68J_bbAdVZSu7IUt7V-mfKOGRwHfNVAR-bphK9Es","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I see... that is probably not the best","msgtype":"m.text"}} {"origin_server_ts":1710350163358,"event_id":"$Z0wHgv69YacqTkQq9ihUQYYVqC4QnZae2htJTcNF13M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: if you do, it would be great if you can create an issue on the codeberg project so that I remember it :-)","msgtype":"m.text","formatted_body":"Tortus<\/a>: if you do, it would be great if you can create an issue on the codeberg project so that I remember it :-)"}} {"origin_server_ts":1710350199782,"event_id":"$1FJsYaHCkNhpx67kqO98jzO_yHpoxP6WS2eYlmDrOws","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$Z0wHgv69YacqTkQq9ihUQYYVqC4QnZae2htJTcNF13M"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Tortus: if you do, it would be great if you can create an issue on the codeberg project so that I remember it :-)\n\nUnderstood. Thank you very much for bearing with me","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                      Tortus<\/a>: if you do, it would be great if you can create an issue on the codeberg project so that I remember it :-)<\/blockquote><\/mx-reply>Understood. Thank you very much for bearing with me"}} {"origin_server_ts":1710355448777,"event_id":"$0a-oP7Zw6JKgzC8JpAl8dQ75dm5PpmHwQ4sku4Qd2fM","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Loke, I've rediscovered my mistake; I wanted to do `((2↑)⍢⍉)` but ended up typing `(2↑⍢⍉)` for which it is evaluated as `(2(↑⍢⍉))` instead","msgtype":"m.text","formatted_body":"Loke, I've rediscovered my mistake; I wanted to do ((2↑)⍢⍉)<\/code> but ended up typing (2↑⍢⍉)<\/code> for which it is evaluated as (2(↑⍢⍉))<\/code> instead"}} {"origin_server_ts":1710355454450,"event_id":"$B_cc2tVKUVliucqAPqHi4eTVEWpfiiRbDRgmrXJkIc4","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"it popped out that error and I got confused","msgtype":"m.text"}} {"origin_server_ts":1710357774238,"event_id":"$mAgaOVmVPF6-jripxhzXGysdRLA9uc5nG65EJLTUApo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I guess Kap supports it, but it may be worth noting that `(2↑)⍢⍉` is not actually a structural under, because the left operand changes the shape. It's an invertible under.","msgtype":"m.text","formatted_body":"I guess Kap supports it, but it may be worth noting that (2↑)⍢⍉<\/code> is not actually a structural under, because the left operand changes the shape. It's an invertible under."}} {"origin_server_ts":1710361205440,"event_id":"$ztohbm0Q6-TNDVrSWYqVPydyUGpb_94XoCAA8gmxX7M","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Interesting\u2026 oh that makes sense","msgtype":"m.text"}} {"origin_server_ts":1710370880885,"event_id":"$9NdXPmmVb0jc6r6Juxa7iiWknMxM_zHkGxTZcCFLOgc","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1710370888472,"event_id":"$-Ane1jVFcEBJ4isreuxkIvI2RL2ahgp9h9Xiy8-zn4w","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","unsigned":{"age":12978534182},"redacts":"$9NdXPmmVb0jc6r6Juxa7iiWknMxM_zHkGxTZcCFLOgc","type":"m.room.redaction","content":{"redacts":"$9NdXPmmVb0jc6r6Juxa7iiWknMxM_zHkGxTZcCFLOgc"},"age":12978534182},"sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{}} {"origin_server_ts":1710370888472,"event_id":"$-Ane1jVFcEBJ4isreuxkIvI2RL2ahgp9h9Xiy8-zn4w","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","redacts":"$9NdXPmmVb0jc6r6Juxa7iiWknMxM_zHkGxTZcCFLOgc","type":"m.room.redaction","content":{"redacts":"$9NdXPmmVb0jc6r6Juxa7iiWknMxM_zHkGxTZcCFLOgc"}} {"state_key":"@chrispsn:matrix.org","origin_server_ts":1710417805893,"event_id":"$3zYv7l7FwMGeTUuPoE5bJCd7mHG46T5uzZn1nJ5NYOw","sender":"@chrispsn:matrix.org","user_id":"@chrispsn:matrix.org","type":"m.room.member","content":{"displayname":"chrispsn","membership":"join"}} {"origin_server_ts":1710424765328,"event_id":"$d_SR6UFRfjZnIKXvUqnbrT77nzOTyl4bbrJzJutA2rs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$mAgaOVmVPF6-jripxhzXGysdRLA9uc5nG65EJLTUApo"}},"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> I guess Kap supports it, but it may be worth noting that `(2↑)⍢⍉` is not actually a structural under, because the left operand changes the shape. It's an invertible under.\n\nIs there any way in which the difference matters? Also, does that mean that this is also not a structural under? `(1↑)⍢(3↓) 10 10 ⍴ ⍳100`","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @mlochbaum:matrix.org<\/a>
                      I guess Kap supports it, but it may be worth noting that (2↑)⍢⍉<\/code> is not actually a structural under, because the left operand changes the shape. It's an invertible under.<\/blockquote><\/mx-reply>Is there any way in which the difference matters? Also, does that mean that this is also not a structural under? (1↑)⍢(3↓) 10 10 ⍴ ⍳100<\/code>"}} {"origin_server_ts":1710424934789,"event_id":"$0sttjtIbbZE415j3sVew7_WlH-mEML3tq6WU064ufkY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Is there any way in which the difference matters? Also, does that mean that this is also not a structural under? `(¯2↓)⍢(6↑) 10 10 ⍴ ⍳100`","msgtype":"m.text","formatted_body":"Is there any way in which the difference matters? Also, does that mean that this is also not a structural under? (¯2↓)⍢(6↑) 10 10 ⍴ ⍳100<\/code>"},"m.relates_to":{"event_id":"$d_SR6UFRfjZnIKXvUqnbrT77nzOTyl4bbrJzJutA2rs","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> I guess Kap supports it, but it may be worth noting that `(2↑)⍢⍉` is not actually a structural under, because the left operand changes the shape. It's an invertible under.\n\n * Is there any way in which the difference matters? Also, does that mean that this is also not a structural under? `(¯2↓)⍢(6↑) 10 10 ⍴ ⍳100`","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @mlochbaum:matrix.org<\/a>
                      I guess Kap supports it, but it may be worth noting that (2↑)⍢⍉<\/code> is not actually a structural under, because the left operand changes the shape. It's an invertible under.<\/blockquote><\/mx-reply> * Is there any way in which the difference matters? Also, does that mean that this is also not a structural under? (¯2↓)⍢(6↑) 10 10 ⍴ ⍳100<\/code>"}} {"origin_server_ts":1710425060689,"event_id":"$Nj1GE1VeYlBv3in-VV9br40YOPpv4A6yk8Kwstz6etY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yes regarding `3↓`. These sorts of definitions can't be consistently composed: for example `⍢((3↑),(¯3↑))` is well-defined if the shape doesn't change, but if the shape does change there are unresolvable ambiguities like `(2↑)⍢((3↑),(¯3↑))` versus `(¯2↓)⍢((3↑),(¯3↑))`.","msgtype":"m.text","formatted_body":"Yes regarding 3↓<\/code>. These sorts of definitions can't be consistently composed: for example ⍢((3↑),(¯3↑))<\/code> is well-defined if the shape doesn't change, but if the shape does change there are unresolvable ambiguities like (2↑)⍢((3↑),(¯3↑))<\/code> versus (¯2↓)⍢((3↑),(¯3↑))<\/code>."}} {"origin_server_ts":1710425101934,"event_id":"$9Aq3V_cJFAr66a_CkuDpnRP7_XCC5AJZ8SV9Ye5aN4U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: That's assuming Dyalog fork syntax?","msgtype":"m.text","formatted_body":"
                      Marshall<\/a>: That's assuming Dyalog fork syntax?"}} {"origin_server_ts":1710425115069,"event_id":"$YA4CKxLh1u2h1snZjyPHcQIprRK5_FdNKBCv8G0GE7Y","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Yes regarding `3↓`. These sorts of definitions can't be consistently composed: for example `⍢((3↑)«,»(¯3↑))` is well-defined if the shape doesn't change, but if the shape does change there are unresolvable ambiguities like `(2↑)⍢((3↑)«,»(¯3↑))` versus `(¯2↓)⍢((3↑)«,»(¯3↑))`.","msgtype":"m.text","formatted_body":"Yes regarding 3↓<\/code>. These sorts of definitions can't be consistently composed: for example ⍢((3↑)«,»(¯3↑))<\/code> is well-defined if the shape doesn't change, but if the shape does change there are unresolvable ambiguities like (2↑)⍢((3↑)«,»(¯3↑))<\/code> versus (¯2↓)⍢((3↑)«,»(¯3↑))<\/code>."},"m.relates_to":{"event_id":"$Nj1GE1VeYlBv3in-VV9br40YOPpv4A6yk8Kwstz6etY","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* Yes regarding `3↓`. These sorts of definitions can't be consistently composed: for example `⍢((3↑)«,»(¯3↑))` is well-defined if the shape doesn't change, but if the shape does change there are unresolvable ambiguities like `(2↑)⍢((3↑)«,»(¯3↑))` versus `(¯2↓)⍢((3↑)«,»(¯3↑))`.","msgtype":"m.text","formatted_body":"* Yes regarding 3↓<\/code>. These sorts of definitions can't be consistently composed: for example ⍢((3↑)«,»(¯3↑))<\/code> is well-defined if the shape doesn't change, but if the shape does change there are unresolvable ambiguities like (2↑)⍢((3↑)«,»(¯3↑))<\/code> versus (¯2↓)⍢((3↑)«,»(¯3↑))<\/code>."}} {"origin_server_ts":1710425437578,"event_id":"$nJY6087fIL-ji4Yxuf4kY9BUTVK-gatQNXjwh9H3QxA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"For transpose, maybe `(2↑)⍢(⍉3↑)` would be an example. Any left operand that doesn't change the shape would be defined, but it's unclear what this one should do. I guess I'd expect an error.","msgtype":"m.text","formatted_body":"For transpose, maybe (2↑)⍢(⍉3↑)<\/code> would be an example. Any left operand that doesn't change the shape would be defined, but it's unclear what this one should do. I guess I'd expect an error."}} {"origin_server_ts":1710425491402,"event_id":"$nJkw5g908w1yaY0dTa8-2Hv5kdQFxr69lctFziIkkI4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yes, because the new array doesn't fit.","msgtype":"m.text"}} {"origin_server_ts":1710426067742,"event_id":"$PtwmXtCYJMTR-RwStn0x0uDBhP0SMrGo3XvUZbonha4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Point is that there are two definitions, each with their own set of rules, and this is apparent when you try to combine them and get something that doesn't satisfy the rules of either. Invertible under: requires `G` in `F⍢G` to be invertible and the result of `F` to be in the range of `G`; allows any sort of polymorphism in `G`, and atop-style composition. Structural under: requires `G` to be structural and the result of `F` to maintain the relevant structure; allows more general composition.","msgtype":"m.text","formatted_body":"Point is that there are two definitions, each with their own set of rules, and this is apparent when you try to combine them and get something that doesn't satisfy the rules of either. Invertible under: requires G<\/code> in F⍢G<\/code> to be invertible and the result of F<\/code> to be in the range of G<\/code>; allows any sort of polymorphism in G<\/code>, and atop-style composition. Structural under: requires G<\/code> to be structural and the result of F<\/code> to maintain the relevant structure; allows more general composition."}} {"origin_server_ts":1710426231436,"event_id":"$CuMkaEnp9Mcwh7zqfeqBr2p-_Eem7pD16VlBiNoRHS0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So in `(2↑)⍢(⍉3↑)`, the result is in the range of `G` but `G` isn't invertible, and `G` is structural but `F` doesn't maintain structure. It resulted from trying to compose a valid invertable under `(2↑)⍢⍉` with a structural one `⍢(3↑)`.","msgtype":"m.text","formatted_body":"So in (2↑)⍢(⍉3↑)<\/code>, the result is in the range of G<\/code> but G<\/code> isn't invertible, and G<\/code> is structural but F<\/code> doesn't maintain structure. It resulted from trying to compose a valid invertable under (2↑)⍢⍉<\/code> with a structural one ⍢(3↑)<\/code>."}} {"origin_server_ts":1710427767976,"event_id":"$HKbmBZmqaeNIpCSMz3UDkXDb9wmcE7B-vxOfB5g-Khs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I guess I still don't see why the differentiation is important. Transpose is complies with both definitions as long as the with and heithare the same. ","msgtype":"m.text","formatted_body":"I guess I still don't see why the differentiation is important. Transpose is complies with both definitions as long as the with and heithare the same. "}} {"origin_server_ts":1710427786473,"event_id":"$xFAPa0JWWjgBHMsRQpgnxxVTwOT-VL6Q2_OEb4agm64","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I guess I still don't see why the differentiation is important. Transpose is complies with both definitions as long as the with and height are the same, no?","msgtype":"m.text","formatted_body":"I guess I still don't see why the differentiation is important. Transpose is complies with both definitions as long as the with and height are the same, no?"},"m.relates_to":{"event_id":"$HKbmBZmqaeNIpCSMz3UDkXDb9wmcE7B-vxOfB5g-Khs","rel_type":"m.replace"},"body":"* I guess I still don't see why the differentiation is important. Transpose is complies with both definitions as long as the with and height are the same, no?","msgtype":"m.text"}} {"origin_server_ts":1710428189539,"event_id":"$X75CK2SdXWBwR8529V9R4unOL5g0Y7Ig6zVtwOteFB0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yes, many applications fit both definitions.","msgtype":"m.text","formatted_body":"Yes, many applications fit both definitions."}} {"origin_server_ts":1710428720143,"event_id":"$zRdnYH-uzG1DBtwtQfUMMftjccqa_-krMyzS70s-348","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"But doesn't that make the distinction unnecessary? ","msgtype":"m.text","formatted_body":"But doesn't that make the distinction unnecessary? "}} {"origin_server_ts":1710429092285,"event_id":"$ZhhgyxayWwg8TbBQXcCYRsXZjXRINTLvTzMKscLB7J8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"BQN supports complicated structural functions like `↕∘≠↑¨⊢` (equivalent of `(⍳≢)⍛(↑¨)`) using a method with indices that only makes sense for structural Under. If you're not interested in compositions then you could say that's not important. But I think my example still shows that the difference has implications for what properties you can guarantee about `⍢`.","msgtype":"m.text","formatted_body":"BQN supports complicated structural functions like ↕∘≠↑¨⊢<\/code> (equivalent of (⍳≢)⍛(↑¨)<\/code>) using a method with indices that only makes sense for structural Under. If you're not interested in compositions then you could say that's not important. But I think my example still shows that the difference has implications for what properties you can guarantee about ⍢<\/code>."}} {"origin_server_ts":1710429751247,"event_id":"$mVGeUY-dPPv4wupX4h5SBV7J0Od34wu0Xo7sRdHGASk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Of course, if you're not interested in composition _at all_ then you may as well define Under with the rule `(G F⍢G ⍵) ≡ (F⍥G ⍵)` and declare that this will be decided for different primitives `G` (possibly with bound left arguments) on a case-by-case basis. But if you then define `F⍢(G H)` to be `F⍢G⍢H` you may get inconsistencies where two functions with different definitions but the same behavior are treated differently. An example for computational Under is `×⍨-` versus `×⍨`.","msgtype":"m.text","formatted_body":"Of course, if you're not interested in composition at all<\/i> then you may as well define Under with the rule (G F⍢G ⍵) ≡ (F⍥G ⍵)<\/code> and declare that this will be decided for different primitives G<\/code> (possibly with bound left arguments) on a case-by-case basis. But if you then define F⍢(G H)<\/code> to be F⍢G⍢H<\/code> you may get inconsistencies where two functions with different definitions but the same behavior are treated differently. An example for computational Under is ×⍨-<\/code> versus ×⍨<\/code>."}} {"origin_server_ts":1710516433308,"event_id":"$kzfOm9j3zT3G8RnmhBUpOT7h4uD7ra-2cBWsGuA6jJM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: Thanks. I'll think about this some more. I may just have been lucky to not have stumbled across any inconsistencies yet.","msgtype":"m.text","formatted_body":"Marshall<\/a>: Thanks. I'll think about this some more. I may just have been lucky to not have stumbled across any inconsistencies yet."}} {"state_key":"@osmanfb4:matrix.org","origin_server_ts":1710775000588,"event_id":"$Pct5vqiZqxddNqwKvqAhn_1FYDviwlXdJLyHkwiYpRQ","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.member","content":{"displayname":"osmanfb1","membership":"join"}} {"origin_server_ts":1710950083385,"event_id":"$1WMi8pgtw7zgDU5H2fUi3UPzGaYgC-hZBBtoNeIRdsQ","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Hello, I am a new user. Hope this is the right place for help questions. Just cloned the git repo and was able to build Kap on my ubuntu 22.04 laptop. I also saw the youtube videos. I am having problems with some of the commands. gui:draw does not work for me using ./gradlew gui:run to start the session. I am getting an error:\n\n","msgtype":"m.text"}} {"origin_server_ts":1710950141401,"event_id":"$fgIATeYUlhu110l2HHkflef7kOOSYnxV9oiBL0hMT3I","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Hello, I am a new user. Hope this is the right place for help questions. Just cloned the git repo and was able to build Kap on my ubuntu 22.04 laptop. I also saw the youtube videos. I am having problems with some of the commands. gui:draw does not work for me using ./gradlew gui:run to start the session. I am getting an error:\n\ngui:draw 400 400 ⍴ (20⍴0) , (20⍴1)\nError: JVM exception while evaluating expression: valueAtDouble not implemented for class ResizedSingleValueLong","msgtype":"m.text"},"m.relates_to":{"event_id":"$1WMi8pgtw7zgDU5H2fUi3UPzGaYgC-hZBBtoNeIRdsQ","rel_type":"m.replace"},"m.mentions":{},"body":" * Hello, I am a new user. Hope this is the right place for help questions. Just cloned the git repo and was able to build Kap on my ubuntu 22.04 laptop. I also saw the youtube videos. I am having problems with some of the commands. gui:draw does not work for me using ./gradlew gui:run to start the session. I am getting an error:\n\ngui:draw 400 400 ⍴ (20⍴0) , (20⍴1)\nError: JVM exception while evaluating expression: valueAtDouble not implemented for class ResizedSingleValueLong","msgtype":"m.text"}} {"origin_server_ts":1710950449883,"event_id":"$xO2m1pwx64kXtaoUMfRIazqpl_Q7i-XHmz39G9jskqM","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"but chart function seems to work ok. Do I need to install a specific graphics lib? ","msgtype":"m.text"}} {"origin_server_ts":1710955138595,"event_id":"$Fwb90KbTuUGPxiqccOqqXNK-gV0KM0hOBoAw-gnql8E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$1WMi8pgtw7zgDU5H2fUi3UPzGaYgC-hZBBtoNeIRdsQ"}},"format":"org.matrix.custom.html","body":"> <@osmanfb4:matrix.org> Hello, I am a new user. Hope this is the right place for help questions. Just cloned the git repo and was able to build Kap on my ubuntu 22.04 laptop. I also saw the youtube videos. I am having problems with some of the commands. gui:draw does not work for me using ./gradlew gui:run to start the session. I am getting an error:\n> \n> gui:draw 400 400 ⍴ (20⍴0) , (20⍴1)\n> Error: JVM exception while evaluating expression: valueAtDouble not implemented for class ResizedSingleValueLong\n\nThat's a big caused by a recent redesign of an internal API. I'll fix it. ","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @osmanfb4:matrix.org<\/a>

                      Hello, I am a new user. Hope this is the right place for help questions. Just cloned the git repo and was able to build Kap on my ubuntu 22.04 laptop. I also saw the youtube videos. I am having problems with some of the commands. gui:draw does not work for me using ./gradlew gui:run to start the session. I am getting an error:<\/p>\n

                      gui:draw 400 400 ⍴ (20⍴0) , (20⍴1)
                      Error: JVM exception while evaluating expression: valueAtDouble not implemented for class ResizedSingleValueLong<\/p><\/blockquote><\/mx-reply>That's a big caused by a recent redesign of an internal API. I'll fix it. "}} {"origin_server_ts":1710955190067,"event_id":"$e2dgxiTLpgBgO_35Xqj6ShQh57pYc8lhbhpa7cNF7jo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"For now, you can work around the issue by adding a call to \"comp\" on the argument before passing it to draw","msgtype":"m.text","formatted_body":"For now, you can work around the issue by adding a call to \"comp\" on the argument before passing it to draw"}} {"origin_server_ts":1710955201234,"event_id":"$KS3fdz2ANXL3OxQuONCFtcHmox10HmYOo7Nv9HnLRNw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"> <@osmanfb4:matrix.org> Hello, I am a new user. Hope this is the right place for help questions. Just cloned the git repo and was able to build Kap on my ubuntu 22.04 laptop. I also saw the youtube videos. I am having problems with some of the commands. gui:draw does not work for me using ./gradlew gui:run to start the session. I am getting an error:\n> \n> gui:draw 400 400 ⍴ (20⍴0) , (20⍴1)\n> Error: JVM exception while evaluating expression: valueAtDouble not implemented for class ResizedSingleValueLong\n\nThat's a bug caused by a recent redesign of an internal API. I'll fix it. ","msgtype":"m.text","formatted_body":"

                      In reply to<\/a> osmanfb1<\/a>

                      Hello, I am a new user. Hope this is the right place for help questions. Just cloned the git repo and was able to build Kap on my ubuntu 22.04 laptop. I also saw the youtube videos. I am having problems with some of the commands. gui:draw does not work for me using ./gradlew gui:run to start the session. I am getting an error:<\/p>\n

                      gui:draw 400 400 ⍴ (20⍴0) , (20⍴1)
                      Error: JVM exception while evaluating expression: valueAtDouble not implemented for class ResizedSingleValueLong<\/p><\/blockquote><\/mx-reply>That's a bug caused by a recent redesign of an internal API. I'll fix it. "},"m.relates_to":{"event_id":"$Fwb90KbTuUGPxiqccOqqXNK-gV0KM0hOBoAw-gnql8E","rel_type":"m.replace"},"body":"* That's a bug caused by a recent redesign of an internal API. I'll fix it. ","msgtype":"m.text"}} {"origin_server_ts":1710959391255,"event_id":"$9sYht31bWvL1cH65ecGXA70IhaOmw9MaI7GlwwMC0HM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"You should be able to work around it by addid 0.0 to the entire array to forceit to floating point.","msgtype":"m.text","formatted_body":"You should be able to work around it by addid 0.0 to the entire array to forceit to floating point."},"m.relates_to":{"event_id":"$e2dgxiTLpgBgO_35Xqj6ShQh57pYc8lhbhpa7cNF7jo","rel_type":"m.replace"},"body":"* You should be able to work around it by addid 0.0 to the entire array to forceit to floating point.","msgtype":"m.text"}} {"origin_server_ts":1710993606552,"event_id":"$p3-U-60bAc3_tIqvtj-zBpsI5lsJyqT3Qhu_ElhCrEs","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Thanks for the reply. I was also trying to make the mandelbrot demo work but could not. 50.0 mandelbrot 400 400 0.5 just returning a matrix of constant 1/50. Now I can make gui:draw work in the game of life demo/youtube video. ","msgtype":"m.text"}} {"origin_server_ts":1710995175257,"event_id":"$7F3vD94nSosxrYtCGJQan0H6VnGFinuhaLicHDa2DOA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@osmanfb4:matrix.org"]},"format":"org.matrix.custom.html","body":"osmanfb1: I think the video may be using a different version of the mandelbrot code compared to what's in the demo directory. I'll take a look tonight when I get home.","msgtype":"m.text","formatted_body":"
                      osmanfb1<\/a>: I think the video may be using a different version of the mandelbrot code compared to what's in the demo directory. I'll take a look tonight when I get home."}} {"origin_server_ts":1710995181146,"event_id":"$dhpdczEt7vBtLW-hDiIaNKfpZiihDv4lWv-YSivsL6M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{"user_ids":["@osmanfb4:matrix.org"]},"format":"org.matrix.custom.html","body":"osmanfb1: I think the video may be using a different version of the mandelbrot code compared to what's in the demo directory. I'll take a look tonight when I get home from work.","msgtype":"m.text","formatted_body":"osmanfb1<\/a>: I think the video may be using a different version of the mandelbrot code compared to what's in the demo directory. I'll take a look tonight when I get home from work."},"m.relates_to":{"event_id":"$7F3vD94nSosxrYtCGJQan0H6VnGFinuhaLicHDa2DOA","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * osmanfb1: I think the video may be using a different version of the mandelbrot code compared to what's in the demo directory. I'll take a look tonight when I get home from work.","msgtype":"m.text","formatted_body":" * osmanfb1<\/a>: I think the video may be using a different version of the mandelbrot code compared to what's in the demo directory. I'll take a look tonight when I get home from work."}} {"origin_server_ts":1711037812523,"event_id":"$ObG7DzWtduwn81LWU8AHN4w9xeEj7MvZJnWH-RWiwM8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, the graphics problems should be fixed now.","msgtype":"m.text"}} {"origin_server_ts":1711058743817,"event_id":"$M0lguXQwZMVZpA-RemrIivm2ZG39ShSa0-WBNgJZvS0","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"thanks mandelbrot demo works now.","msgtype":"m.text"}} {"origin_server_ts":1711116112024,"event_id":"$3UWhczuZVykKXbcIvFuLBOmCYoWwabmO7TaxICB-yQU","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"can we do a connected (by line) plot of x,y pairs? I can see kap can do scatter plots. thanks.","msgtype":"m.text"}} {"origin_server_ts":1711116213235,"event_id":"$JhvYwkBlItEjCjOLmrGKhr-HEwWJa-NGrKc39SZyCGo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://matrix.org/AqyDbTcEwDcbYifPPmPAKlQk","info":{"xyz.amorgan.blurhash":"L8SF;L4m~q%MtRofM{oe_3xuIUWB","size":86528,"thumbnail_info":{"size":77348,"w":747,"h":600,"mimetype":"image/png"},"w":1098,"h":881,"mimetype":"image/png","thumbnail_url":"mxc://matrix.org/osevAUGGYWBwomjcQOrlAIGl"}}} {"origin_server_ts":1711116264249,"event_id":"$4AV402DzBS5igCxvSm6mwto_kQis_AT0zHuuZJQSuBo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"that's about as closest","msgtype":"m.text"}} {"origin_server_ts":1711116314112,"event_id":"$sutAVn6o9NZ6Ml520XX-LPBjG7MLxY4gVyozMrsjz58","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"it would be cool to get lines connected in the scatter plot","msgtype":"m.text"}} {"origin_server_ts":1711116468763,"event_id":"$m4rNCWg4ZmawE0fEOWe836AroONiFReF1wa_HVseoD8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"or add freeform lines, but afaik it's not possible yet ?","msgtype":"m.text"}} {"origin_server_ts":1711116883154,"event_id":"$D7kJbos_vuTtTe2_wGlYEq2AlT47IaCkoQRadZS_bEA","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yes I saw that. It would be nice to have the capability to draw graphs of x,y data. gnuAPL can do that :-)","msgtype":"m.text"}} {"origin_server_ts":1711116903327,"event_id":"$oq42S6hShUxj3lu7cqNiTLXd5Lgcj18-W2WkHcsTh5M","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":":o ","msgtype":"m.text"}} {"origin_server_ts":1711116949169,"event_id":"$dPsn2IxzZ3bgDpzMWaip4hAD11MT5MKkVQhI3EJE6DM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$D7kJbos_vuTtTe2_wGlYEq2AlT47IaCkoQRadZS_bEA","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1711117428265,"event_id":"$3V_9z5EURHQpYjP9uI_I2JItQexxvncTzz3RPrWe7N4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Yes you can","msgtype":"m.text","formatted_body":"Yes you can"}} {"origin_server_ts":1711117444524,"event_id":"$XSIbChjYgZ98hlUhqC5AOY6m4Nd_nsDrwcg6XdeqbUo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Oh wait svatter with connections","msgtype":"m.text","formatted_body":"Oh wait svatter with connections"}} {"origin_server_ts":1711117452102,"event_id":"$9F9nSciLSkKk7JSY4yK06X8K9sRAyQLYe2YKR1FiuT0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"Oh wait scatter with connections","msgtype":"m.text","formatted_body":"Oh wait scatter with connections"},"m.relates_to":{"event_id":"$XSIbChjYgZ98hlUhqC5AOY6m4Nd_nsDrwcg6XdeqbUo","rel_type":"m.replace"},"body":"* Oh wait scatter with connections","msgtype":"m.text"}} {"origin_server_ts":1711117712023,"event_id":"$wByOZA_2xHvKWUmfhQU_4lbrJIINP2ysp_IQRABkZMw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"OK, so there of course already `chart:scatter`, but you want the points in each group to be connected?","msgtype":"m.text","formatted_body":"OK, so there of course already chart:scatter<\/code>, but you want the points in each group to be connected?"}} {"origin_server_ts":1711117789454,"event_id":"$LFYZX_GKemvLOyogPGnMN6uix3r6dSOOFcs30sBhNiM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"drawing graphs of x,y data would be freeform lines ? you would just give it pairs of x and y coordinates","msgtype":"m.text"}} {"origin_server_ts":1711117810038,"event_id":"$Ey02HolRqkC9-3vP_fNieVpso_TwLujumVHIvUFvfAE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yes, that's what scatter does, but it doesn't connect them.","msgtype":"m.text"}} {"origin_server_ts":1711117825492,"event_id":"$XJgoeeN8LG1-kRayXRQw4EuhbAKvbjXOVcY69lC5dS0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye ok how about lines in general?","msgtype":"m.text"}} {"origin_server_ts":1711117904343,"event_id":"$msXnMqjZ7hbz_EypvPFRbN9RsY9uolpHJuv3bD6wPss","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Regular scatter plot: https://kapdemo.dhsdevelopments.com/clientweb2/#chart%3Ascatter%20(%3F10%202%20%E2%8D%B4%200)%2C10%E2%8D%B40%201%202","msgtype":"m.text"}} {"origin_server_ts":1711117914294,"event_id":"$LbkFyHDy8el4w20fpJHkPy7eEWUyp8qINah82xDQzTA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"So you basically want that, but with lines?","msgtype":"m.text"}} {"origin_server_ts":1711118618274,"event_id":"$aeVOJ2J3xZFl1buiwQc0j3YL1U519IDPttioF_EJlJc","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yes. so you can plot sin(x) ? ","msgtype":"m.text"}} {"origin_server_ts":1711118810020,"event_id":"$5BMSygzbBw2z1sdgAPYsUZpANVQj_R5POZfSiGgdWp4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Yes. But for that you don't use scatter nor chart. You use the `graph` module:","msgtype":"m.text","formatted_body":"Yes. But for that you don't use scatter nor chart. You use the graph<\/code> module:"}} {"origin_server_ts":1711118810681,"event_id":"$GdXo3yEICPKwmn491vJj90Cp8j8ZgmgHdTa0JzBqGG4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#0%2030%20graph%3Aplot%20%CE%BB%E2%88%9A%20%CE%BB(1%2B%E2%8D%9F)","msgtype":"m.text"}} {"origin_server_ts":1711118856388,"event_id":"$8hWX4gUbPO5jahq2N-daAmaLk3l64GnJWd5lNTmiqUI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#0%2030%20graph%3Aplot%20%22Square%20root%22%20%22Log%2B1%22%20labels%20%CE%BB%E2%88%9A%20%CE%BB(1%2B%E2%8D%9F)","msgtype":"m.text"}} {"origin_server_ts":1711118933868,"event_id":"$AK6OQxysfx-eQA4xQWKDwNXHRjign8zSI7fG2LNT7-Q","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$5BMSygzbBw2z1sdgAPYsUZpANVQj_R5POZfSiGgdWp4","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1711118937736,"event_id":"$WaOtpwrCU_sQMwhfUJ7K2AVXOwmdalbeBZilrfmp5SY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$8hWX4gUbPO5jahq2N-daAmaLk3l64GnJWd5lNTmiqUI","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1711118979307,"event_id":"$JwLyk7jBcxSmzCl02bfbQLRHHaqwoJtUk2eHPedzLaE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Chart is for data, and graph is for functions.","msgtype":"m.text"}} {"origin_server_ts":1711123554816,"event_id":"$iND8SLL4CcHvmc-ew87tbFzJf70W0TqzNPHXx-5D5UE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, I did some cool, I think. :-)","msgtype":"m.text"}} {"origin_server_ts":1711123590935,"event_id":"$PZhajrN76gzG_3yVxAZAtpF81VwR1qPqppaG0F6Qcl8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://www.youtube.com/watch?v=08wta4LZbjw","msgtype":"m.text"}} {"origin_server_ts":1711124741648,"event_id":"$JX1jU3285lZezLQydHJ52E-LIN8yAK_-9ROeT7jerX4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$iND8SLL4CcHvmc-ew87tbFzJf70W0TqzNPHXx-5D5UE","rel_type":"m.annotation","key":"😎"}}} {"origin_server_ts":1711124804923,"event_id":"$5qmh3hZmp2TTgky5QP6OSyQWHNfrNWehlAdlUKVgMvs","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"nicee, soon a Kap demo in some compo 😎😎😎😎","msgtype":"m.text"}} {"origin_server_ts":1711127058621,"event_id":"$xHmQrMXj13A8YP4a8fc8CVvJomfNh-ftKeGzVdcNLlo","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Maybe you can put a line or two into the ref manual or the tutorial about graph:plot. I had searched the docs directory for graph and plot and did not see anything for plot.","msgtype":"m.text"}} {"origin_server_ts":1711127880011,"event_id":"$Ntr-0vP6oCGWyroCGymsgyiHgJufmBA9rz-aPyvsyGQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@osmanfb4:matrix.org"]},"format":"org.matrix.custom.html","body":"osmanfb1: Yeah, I will do that.","msgtype":"m.text","formatted_body":"osmanfb1<\/a>: Yeah, I will do that."}} {"origin_server_ts":1711128212871,"event_id":"$V6A2aB8dCC0pP-5-0Pp-lHt3AoqQyNxn4Qs1B4EYJbM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, it's done. The deployment is started and it'll take about 30 minutes for it to make it to the webserver.","msgtype":"m.text"}} {"origin_server_ts":1711129128020,"event_id":"$LdA3btNmmlQel3pdVg0RoQwRciIqp7c9CVRhvx7q55M","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$V6A2aB8dCC0pP-5-0Pp-lHt3AoqQyNxn4Qs1B4EYJbM","rel_type":"m.annotation","key":"👍"}}} {"origin_server_ts":1711132447349,"event_id":"$NV6NhlKF8DCpCcnkucEyNbij1phKPS34M67fXyYrcrI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, the updated doc has been deployed. It's just a couple of paragraphs.","msgtype":"m.text"}} {"state_key":"@oantolin:matrix.org","origin_server_ts":1711206163844,"event_id":"$AMD5W48KHy_UG41MYg4PY5dRUrJJDhzwTzNzqbjM0aY","sender":"@oantolin:matrix.org","user_id":"@oantolin:matrix.org","type":"m.room.member","content":{"displayname":"oantolin","membership":"join"}} {"state_key":"@samireldean:matrix.org","origin_server_ts":1711228078342,"event_id":"$yqENrVSp5NTtsmltp_UyD5eeRAvAWj0JkvdAbA1BU78","sender":"@samireldean:matrix.org","user_id":"@samireldean:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/GJOQLXxamuznQRZbgfBiAXXl","displayname":"Samir","membership":"join"}} {"origin_server_ts":1711233383959,"event_id":"$U3t4rr_uN8UWMNvPd5tpJ5lRHIc0YCAUCxVNNIwIKmw","sender":"@samireldean:matrix.org","user_id":"@samireldean:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$PZhajrN76gzG_3yVxAZAtpF81VwR1qPqppaG0F6Qcl8","rel_type":"m.annotation","key":"👍️"}}} {"origin_server_ts":1711339473966,"event_id":"$NDZEgJabkFbFhgu4swVLUcyWjTerqTWmD5GdymLdUMU","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I was just trying to plot sin(x)÷x function from -7 to 7 and found that in Kap 0.0 ÷ 0.0 is 0.0 ! I think that should just throw an exception. Also limit sin(x)/x at x=0 is 1.0 but I would not expect Kap to do limits, but at least should be tagged as an error??","msgtype":"m.text"}} {"origin_server_ts":1711339989489,"event_id":"$171YLm7rDIbBltyOoCFUceoRpGYotoaFY-pBg3tMvNE","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I see that Dyalog APL gives 1.0 as the result of 0.0 ÷ 0.0. which is really wrong! :-(","msgtype":"m.text"}} {"origin_server_ts":1711343308253,"event_id":"$fqi7norwsF03ArF3svVrTWzx-ARc1c5ZAGVBXhs1fLE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$171YLm7rDIbBltyOoCFUceoRpGYotoaFY-pBg3tMvNE"}},"m.mentions":{"user_ids":["@osmanfb4:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@osmanfb4:matrix.org> I see that Dyalog APL gives 1.0 as the result of 0.0 ÷ 0.0. which is really wrong! :-(\n\nYeah, it's a tricky thing. You're probably right about the error.","msgtype":"m.text","formatted_body":"

                      In reply to<\/a> @osmanfb4:matrix.org<\/a>
                      I see that Dyalog APL gives 1.0 as the result of 0.0 ÷ 0.0. which is really wrong! :-(<\/blockquote><\/mx-reply>Yeah, it's a tricky thing. You're probably right about the error."}} {"origin_server_ts":1711343363710,"event_id":"$xri8F3O4Ku9iuFsK1tEONLKbH-Md6Ow39IUb5qk4Yrw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Dyalog does it because APL always did `1=0÷0` as a special case.","msgtype":"m.text","formatted_body":"Dyalog does it because APL always did 1=0÷0<\/code> as a special case."}} {"origin_server_ts":1711343399254,"event_id":"$D8V5eYYzLNsq5nDM2QKZEEdsLlmviP1-npTpILtB8-Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The Kap behaviour was a bit of a hack early on before error handling was solid. It serves no useful purpose anymore.","msgtype":"m.text"}} {"origin_server_ts":1711343470823,"event_id":"$-zHbpNRkiOJBwV2rbDRZvctaqJwWkCShIS0ZfCqhYto","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"As for the reasoning behind the APL behaviour, I don't know but I assume there is some argument in favour of it that made sense at the time.","msgtype":"m.text"}} {"origin_server_ts":1711366363139,"event_id":"$bdDR1PbgIr_4xAmO-HPKHbpzV8meEMtdlZPNPRqOhTU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://matrix.org/KUhDtuExUlIikXjQekLnSAdo","info":{"xyz.amorgan.blurhash":"L3S$ovaK~q%M4nM{xu%29F%MxuRj","size":91939,"thumbnail_info":{"size":73806,"w":800,"h":401,"mimetype":"image/png"},"w":934,"h":469,"mimetype":"image/png","thumbnail_url":"mxc://matrix.org/ogPHZHXVRlTAKaGdDNquRNuI"}}} {"origin_server_ts":1711366432025,"event_id":"$-8aKJKWrmKJhsDJbZ-9jlS0X4d6IuFoRMVNeOF5iu20","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$171YLm7rDIbBltyOoCFUceoRpGYotoaFY-pBg3tMvNE"}},"format":"org.matrix.custom.html","body":"you can make Dyalog return `0` for `0÷0` with `⎕DIV←1` :)","msgtype":"m.text","formatted_body":"
                      ↰ <\/a> osmanfb1<\/a> <\/mx-reply>you can make Dyalog return 0<\/code> for 0÷0<\/code> with ⎕DIV←1<\/code> :)"}} {"origin_server_ts":1711366483369,"event_id":"$T6iARanW5I44mk2F6_noFGU0AcIa_-PjOQMoPCcc3uc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"they explained it in Algebra an algorithmic treatment","msgtype":"m.text"}} {"origin_server_ts":1711366487964,"event_id":"$tAEDhX84TWdpParMCAxaaicSeh2oGHR7vKmkq4IEQY8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://matrix.org/vqBgvPebIDejnJxdvGpAbAKu","info":{"xyz.amorgan.blurhash":"LCSPb3WBxu%MS2R*s:xa~qNGRjni","size":59851,"thumbnail_info":{"size":45684,"w":800,"h":191,"mimetype":"image/png"},"w":927,"h":222,"mimetype":"image/png","thumbnail_url":"mxc://matrix.org/bAqhbcUAkNSOEXblwNfeqdoX"}}} {"origin_server_ts":1711369103802,"event_id":"$DgChS93YqjmHnLuSn3fEP7tK5q-jAcmQrf2CNqLqSFs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[This](https://www.jsoftware.com/papers/eem/0div0.htm) is McDonnell's paper arguing for a result of 0 (not that it's really definitive).","msgtype":"m.text","formatted_body":"This<\/a> is McDonnell's paper arguing for a result of 0 (not that it's really definitive)."}} {"origin_server_ts":1711369119082,"event_id":"$e3lTJ8ILJLIBm0AnohxZ8shxJ5coVnwvghjhOqfWXoM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$DgChS93YqjmHnLuSn3fEP7tK5q-jAcmQrf2CNqLqSFs","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1711369711697,"event_id":"$d2RfGA6unRq7LI82pa7vfUwKCFH9FutSqezBUdygff4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Screenshot from 2024-03-25 14-27-30.png","msgtype":"m.image","url":"mxc://matrix.org/AlfaKkvvsmDCahVXhFivJVxY","info":{"xyz.amorgan.blurhash":"L3S$ov00-;~q4nRj-;%Mxu?bRjIU","size":18414,"w":508,"h":210,"mimetype":"image/png"}}} {"origin_server_ts":1711369714284,"event_id":"$op5uDTB-YIGwCia2AHhSbTtOia80AqKvWJ2lPU8byic","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"is there a Kap equivalent to this where you would have a vector of lambdas and then apply them each to the argument on the right?","msgtype":"m.text"}} {"origin_server_ts":1711375477487,"event_id":"$ceENuR_LytjNG8rU2EEqX8twNkdbLQ-orVQIImC6Svw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yes","msgtype":"m.text"}} {"origin_server_ts":1711375486072,"event_id":"$EiicDgUZCGe4qKhatQ0DuJp_YkPBTK4VQvCGn0FxvLs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"But you have to do it explicitly:","msgtype":"m.text"}} {"origin_server_ts":1711375608082,"event_id":"$N0azNtsQ1hmR-m0-gCMJV7AzRqNrr0IvXXLrckoc9NI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#m1%20%E2%86%90%20%CE%BB-%0Am2%20%E2%86%90%20%CE%BB(10-)%0Am3%20%E2%86%90%20%CE%BB%7B1%2B%E2%8D%B5%7D%0AarrayOfFunctions%20%E2%86%90%20m1%20m2%20m3%0Aargs%20%E2%86%90%2010%2011%2012%0Aresult%20%E2%86%90%20args%20%7B%E2%8D%9E%E2%8D%B5%20%E2%8D%BA%7D%C2%A8%20arrayOfFunctions","msgtype":"m.text"}} {"origin_server_ts":1711375621620,"event_id":"$xRaOMnwODwO5PSfdQbFvxDMk0DRdhGTwWH4a2LX1RTI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"This is the code:\n```\nm1 ← λ-\nm2 ← λ(10-)\nm3 ← λ{1+⍵}\narrayOfFunctions ← m1 m2 m3\nargs ← 10 11 12\nresult ← args {⍞⍵ ⍺}¨ arrayOfFunctions\n```","msgtype":"m.text","formatted_body":"

                      This is the code:<\/p>\n

                      m1 ← λ-\nm2 ← λ(10-)\nm3 ← λ{1+⍵}\narrayOfFunctions ← m1 m2 m3\nargs ← 10 11 12\nresult ← args {⍞⍵ ⍺}¨ arrayOfFunctions\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1711375645549,"event_id":"$Ae3Tb6bVddk54x2nPfHPkgj1zdHf9Ij__eKX1ia-hxc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$xRaOMnwODwO5PSfdQbFvxDMk0DRdhGTwWH4a2LX1RTI","rel_type":"m.annotation","key":"🙏"}}}
                      {"origin_server_ts":1711375648421,"event_id":"$M2hTQJt7vb9cZZKvc4uEaJ6RiUjBHTLPa2dlrZ8ytsk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"thanks!","msgtype":"m.text"}}
                      {"origin_server_ts":1711375696550,"event_id":"$0QysjtmluVEtXGwrGGUDHyP1LKLGk5QzqxEih_GVgwg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://kapdemo.dhsdevelopments.com/reference.html#_%CE%BB_create_function_reference","msgtype":"m.text"}}
                      {"origin_server_ts":1711378447017,"event_id":"$FPFuVGHnta03zKkCgTTOsFABwAaveEndtAWl-Alp5vg","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$-8aKJKWrmKJhsDJbZ-9jlS0X4d6IuFoRMVNeOF5iu20"}},"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> you can make Dyalog return `0` for `0÷0` with `⎕DIV←1` :)\n\nSo it is correct then, undefined anything you want :-)   But gnuapl returns n0  (not a number?)  which has its own problems :-(","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @dzaima:matrix.org<\/a>
                      you can make Dyalog return 0<\/code> for 0÷0<\/code> with ⎕DIV←1<\/code> :)<\/blockquote><\/mx-reply>So it is correct then, undefined anything you want :-) But gnuapl returns n0 (not a number?) which has its own problems :-("}} {"origin_server_ts":1711378658273,"event_id":"$w2LZVJg4X6lPw9k9KOKSOq2eCRR1cQW79bCU1zmj4QI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"hmm, my copy of gnuapl from apt has `0÷0` giving `1` (appears to be 1.8)","msgtype":"m.text","formatted_body":"hmm, my copy of gnuapl from apt has 0÷0<\/code> giving 1<\/code> (appears to be 1.8)"}} {"origin_server_ts":1711378661113,"event_id":"$WAPJyxT4Pk52O5s3zO-ZTBKHvBfq3KxfCtBAhN2KyE0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"hmm, my copy of gnuapl from apt has `0÷0` giving `1` (appears to be version 1.8)","msgtype":"m.text","formatted_body":"hmm, my copy of gnuapl from apt has 0÷0<\/code> giving 1<\/code> (appears to be version 1.8)"},"m.relates_to":{"event_id":"$w2LZVJg4X6lPw9k9KOKSOq2eCRR1cQW79bCU1zmj4QI","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* hmm, my copy of gnuapl from apt has `0÷0` giving `1` (appears to be version 1.8)","msgtype":"m.text","formatted_body":"* hmm, my copy of gnuapl from apt has 0÷0<\/code> giving 1<\/code> (appears to be version 1.8)"}} {"origin_server_ts":1711379075275,"event_id":"$5Lf-YzZoWl0WLIVjlJIjivnR79WvZ77kp46X9Hk7ebY","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$w2LZVJg4X6lPw9k9KOKSOq2eCRR1cQW79bCU1zmj4QI"}},"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> hmm, my copy of gnuapl from apt has `0÷0` giving `1` (appears to be version 1.8)\n\nSorry it was k (ngn). gnuapl 1.8 does indeed give you 1.","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @dzaima:matrix.org<\/a>
                      hmm, my copy of gnuapl from apt has 0÷0<\/code> giving 1<\/code> (appears to be version 1.8)<\/blockquote><\/mx-reply>Sorry it was k (ngn). gnuapl 1.8 does indeed give you 1."}} {"origin_server_ts":1711379154011,"event_id":"$WiEQfC2G3upXSQm7rmrw5F2-VVWlpRxw1cjNgdMGRWw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ngn/k on floats just does whatever the equivalent C ops do, which is just NaN","msgtype":"m.text","formatted_body":"ngn/k on floats just does whatever the equivalent C ops do, which is just NaN"}} {"origin_server_ts":1711379171415,"event_id":"$U2JpIJqC9aw7HTPJJG0G1KsBE9Rm6VLjJ33LZvcGhUA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"ngn/k on floats just does whatever the equivalent C ops do (aka what hardware does), which is just NaN","msgtype":"m.text","formatted_body":"ngn/k on floats just does whatever the equivalent C ops do (aka what hardware does), which is just NaN"},"m.relates_to":{"event_id":"$WiEQfC2G3upXSQm7rmrw5F2-VVWlpRxw1cjNgdMGRWw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* ngn/k on floats just does whatever the equivalent C ops do (aka what hardware does), which is just NaN","msgtype":"m.text","formatted_body":"* ngn/k on floats just does whatever the equivalent C ops do (aka what hardware does), which is just NaN"}} {"origin_server_ts":1711379253038,"event_id":"$FmdnUt_DC0onNem8rWON9hscBFk2gekJoh5knCtIpLE","sender":"@coltim:matrix.org","user_id":"@coltim:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"(except for comparisons)","msgtype":"m.text"}} {"origin_server_ts":1711379269852,"event_id":"$sekYOu_V5hYS8kOvzAOBks5YYYAHknkM5fcGHWibt9o","sender":"@coltim:matrix.org","user_id":"@coltim:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"(except for comparisons involving NaNs)","msgtype":"m.text"},"m.relates_to":{"event_id":"$FmdnUt_DC0onNem8rWON9hscBFk2gekJoh5knCtIpLE","rel_type":"m.replace"},"m.mentions":{},"body":" * (except for comparisons involving NaNs)","msgtype":"m.text"}} {"origin_server_ts":1711379317865,"event_id":"$JMw_BD9KeehZYGnoy3iWNo5lNps9DgzaiAkaKbmTu1w","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"ah yeah, `=` does bitwise equality checking (also affects negative zero)","msgtype":"m.text","formatted_body":"ah yeah, =<\/code> does bitwise equality checking (also affects negative zero)"}} {"origin_server_ts":1711379336745,"event_id":"$Fka7Siul1fmkEJJFw9Hnknd-DEVqgxN9fL0lGYa0kV0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"ah yeah, ngn/k `=` does bitwise equality checking (also affects negative zero)","msgtype":"m.text","formatted_body":"ah yeah, ngn/k =<\/code> does bitwise equality checking (also affects negative zero)"},"m.relates_to":{"event_id":"$JMw_BD9KeehZYGnoy3iWNo5lNps9DgzaiAkaKbmTu1w","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* ah yeah, ngn/k `=` does bitwise equality checking (also affects negative zero)","msgtype":"m.text","formatted_body":"* ah yeah, ngn/k =<\/code> does bitwise equality checking (also affects negative zero)"}} {"origin_server_ts":1711385143181,"event_id":"$A__aZb3xAfAZvZqkr_A6IbzZUh9MgWuPXcIOg571gFg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: that sounds potentially error-prone.","msgtype":"m.text","formatted_body":"
                      dzaima<\/a>: that sounds potentially error-prone."}} {"origin_server_ts":1711385268229,"event_id":"$VUuwGbO-YAc9MNLSnNc7Lsrnm28RkFy3Qcl8Eak2CM4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"but at least it doesn't break `x=x` being always `1`s, or make non-equal values appear equal","msgtype":"m.text","formatted_body":"but at least it doesn't break x=x<\/code> being always 1<\/code>s, or make non-equal values appear equal"}} {"origin_server_ts":1711385966248,"event_id":"$bTf0l2YV68AHAZrn64niVDl6voa5kebjeAvnHNPA9GE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: hah. I forgot I reworked equality to make sure total ordering was consistent between integers, rationals and doubles.","msgtype":"m.text","formatted_body":"dzaima<\/a>: hah. I forgot I reworked equality to make sure total ordering was consistent between integers, rationals and doubles."}} {"origin_server_ts":1711385982652,"event_id":"$9vqGCBuXMtHFE_h4iRn8GZmg_EQNa5LbqeH0LMCffLw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"As part of this, `0.0 ≡ ¯0.0` had to be false.","msgtype":"m.text","formatted_body":"As part of this, 0.0 ≡ ¯0.0<\/code> had to be false."}} {"origin_server_ts":1711385989852,"event_id":"$0sUjAPh1HL5Mi-BO7JyaRVICERivzvvOhShqsECLQXU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"As part of this, `0.0 = ¯0.0` had to be false.","msgtype":"m.text","formatted_body":"As part of this, 0.0 = ¯0.0<\/code> had to be false."},"m.relates_to":{"event_id":"$9vqGCBuXMtHFE_h4iRn8GZmg_EQNa5LbqeH0LMCffLw","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * As part of this, `0.0 = ¯0.0` had to be false.","msgtype":"m.text","formatted_body":" * As part of this, 0.0 = ¯0.0<\/code> had to be false."}} {"origin_server_ts":1711386017069,"event_id":"$dyrWA9Skg_6Dr-e6MO7t1l0eGs-gBkxWZ_5R4dxmuvM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"It of course also means that `¯0.0 < 0.0` is true.","msgtype":"m.text","formatted_body":"It of course also means that ¯0.0 < 0.0<\/code> is true."}} {"origin_server_ts":1711386128812,"event_id":"$wrkW2YM52a6gE19I9WO-wm_z347Ij7hIKN1I7qvMguY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I wonder if this is actually the best solution.","msgtype":"m.text"}} {"origin_server_ts":1711386142799,"event_id":"$hYCHzYTHIsN1KMA67MtsowWU9N2DTLquxRPW30C5C7k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"I wonder if there is a better solution.","msgtype":"m.text"},"m.relates_to":{"event_id":"$wrkW2YM52a6gE19I9WO-wm_z347Ij7hIKN1I7qvMguY","rel_type":"m.replace"},"m.mentions":{},"body":" * I wonder if there is a better solution.","msgtype":"m.text"}} {"origin_server_ts":1711386230177,"event_id":"$4WdqXNbVExE2yiPd7pDjf3ZcmwiN7kUSY7gKLRPV884","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"imo `<` & co could act like `0.0` is the same as `¯0.0`; does mean that it's not a total order, but as pervasive comparisons cannot compare whole arrays, it's not a total total order anyway; on the other hand, a thing that can order arrays as a whole should distinguish `0.0` from `¯0.0` (in languages where those have observable differences)","msgtype":"m.text","formatted_body":"imo <<\/code> & co could act like 0.0<\/code> is the same as ¯0.0<\/code>; does mean that it's not a total order, but as pervasive comparisons cannot compare whole arrays, it's not a total total order anyway; on the other hand, a thing that can order arrays as a whole should distinguish 0.0<\/code> from ¯0.0<\/code> (in languages where those have observable differences)"}} {"origin_server_ts":1711386246315,"event_id":"$i9bQnaLTjv0nPSxCs4v3spopzrlHJ3fw8QmbB5januU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"imo `<` & co could act like `0.0` is the same as `¯0.0` (and even `=` & `≠`); does mean that it's not a total order, but as pervasive comparisons cannot compare whole arrays, it's not a total total order anyway; on the other hand, a thing that can order arrays as a whole should distinguish `0.0` from `¯0.0` (in languages where those have observable differences)","msgtype":"m.text","formatted_body":"imo <<\/code> & co could act like 0.0<\/code> is the same as ¯0.0<\/code> (and even =<\/code> & ≠<\/code>); does mean that it's not a total order, but as pervasive comparisons cannot compare whole arrays, it's not a total total order anyway; on the other hand, a thing that can order arrays as a whole should distinguish 0.0<\/code> from ¯0.0<\/code> (in languages where those have observable differences)"},"m.relates_to":{"event_id":"$4WdqXNbVExE2yiPd7pDjf3ZcmwiN7kUSY7gKLRPV884","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* imo `<` & co could act like `0.0` is the same as `¯0.0` (and even `=` & `≠`); does mean that it's not a total order, but as pervasive comparisons cannot compare whole arrays, it's not a total total order anyway; on the other hand, a thing that can order arrays as a whole should distinguish `0.0` from `¯0.0` (in languages where those have observable differences)","msgtype":"m.text","formatted_body":"* imo <<\/code> & co could act like 0.0<\/code> is the same as ¯0.0<\/code> (and even =<\/code> & ≠<\/code>); does mean that it's not a total order, but as pervasive comparisons cannot compare whole arrays, it's not a total total order anyway; on the other hand, a thing that can order arrays as a whole should distinguish 0.0<\/code> from ¯0.0<\/code> (in languages where those have observable differences)"}} {"origin_server_ts":1711387076751,"event_id":"$jxOJXwg5-6uoHOSSV8x9aVwMPFGqaJOtOFgWX6pjBmE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: that's fair. That function indeed exists (it's `cmp` which returns -1, 0 or 1).","msgtype":"m.text","formatted_body":"dzaima<\/a>: that's fair. That function indeed exists (it's cmp<\/code> which returns -1, 0 or 1)."}} {"origin_server_ts":1711387108306,"event_id":"$X5DgUrh-A5FFQg7EESqgRbgw2M2cHzYrp87Kcaiu4ac","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"After my rewrite, I just let float comparisons fall back to `cmp` behind the scenes.","msgtype":"m.text","formatted_body":"After my rewrite, I just let float comparisons fall back to cmp<\/code> behind the scenes."}} {"origin_server_ts":1711387130765,"event_id":"$Yaxq7u5RkDuX248QNWImKPGTGuvsi8YRB7e85d0heow","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"That's easily changed though, and the more I think about it, the more I think I should.","msgtype":"m.text"}} {"origin_server_ts":1711387215750,"event_id":"$G0lE-t192fcWw_nZ3-dEj6ZTNsAx_VOfGT9aSlDmD-I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the fun thing with this is that `0.0 = ¯0.0` but `0.0 ≢ ¯0.0` (if `≡` & `≢` use total ordering comparison); I think that's a fair tradeoff though","msgtype":"m.text","formatted_body":"the fun thing with this is that 0.0 = ¯0.0<\/code> but 0.0 ≢ ¯0.0<\/code> (if ≡<\/code> & ≢<\/code> use total ordering comparison); I think that's a fair tradeoff though"}} {"origin_server_ts":1711387253158,"event_id":"$SLz16Ab16S4TAGCOXDcKHTbtFq-CuyEktRjQLj7VScw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: Yes, that's exactly what I was concerned about.","msgtype":"m.text","formatted_body":"dzaima<\/a>: Yes, that's exactly what I was concerned about."}} {"origin_server_ts":1711387286347,"event_id":"$NjtJ6znbD0rSYUhsxhr_wGRud7HPYoaDz2lIEU4xK8M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"You'd expect `0=a cmp b` to be the same as `a≡b`.","msgtype":"m.text","formatted_body":"You'd expect 0=a cmp b<\/code> to be the same as a≡b<\/code>."}} {"origin_server_ts":1711474910191,"event_id":"$7Y91mFk97eFIkRZMoQD64YAL0dpyQAvYfXL2IdwVm9M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Actually, I think cmp should implement total ordering and the other comparison functions should implement regular numeric comparisons. I'm implementing it now for testing purposes. ","msgtype":"m.text"}} {"origin_server_ts":1711517680110,"event_id":"$zstQs8V9WUlEzkHnJJxXSPeppsgGcGIM-T7u82oLgdU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"By the way, as I'm fixing this, I note that this is strictly a problem with negative zero, no? There should be no other issues.","msgtype":"m.text"}} {"origin_server_ts":1711517736570,"event_id":"$ZrIVqhlpdvkCgUEd2MS6vthz_jhlChFqmO8We6ruC3k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I was thinking that `1.0=1` may be an issue, and under total ordering they should be different? Or is it OK that `1.0 cmp 0` returns 0?","msgtype":"m.text","formatted_body":"I was thinking that 1.0=1<\/code> may be an issue, and under total ordering they should be different? Or is it OK that 1.0 cmp 0<\/code> returns 0?"}} {"origin_server_ts":1711517750494,"event_id":"$toZPpDYeSYu-W4qQlCHtMhsZEIQo0P8lX7Dn4DxmCTg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I was thinking that `1.0=1` may be an issue, and under total ordering they should be different? Or is it OK that `1.0 cmp 1` returns 0?","msgtype":"m.text","formatted_body":"I was thinking that 1.0=1<\/code> may be an issue, and under total ordering they should be different? Or is it OK that 1.0 cmp 1<\/code> returns 0?"},"m.relates_to":{"event_id":"$ZrIVqhlpdvkCgUEd2MS6vthz_jhlChFqmO8We6ruC3k","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * I was thinking that `1.0=1` may be an issue, and under total ordering they should be different? Or is it OK that `1.0 cmp 1` returns 0?","msgtype":"m.text","formatted_body":" * I was thinking that 1.0=1<\/code> may be an issue, and under total ordering they should be different? Or is it OK that 1.0 cmp 1<\/code> returns 0?"}} {"origin_server_ts":1711517810321,"event_id":"$kptbt2JGMRG1k6sODs9PKrU779yR6gl78LWbuw-EC9I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"As I'm typing this, I'm starting to think that it should.","msgtype":"m.text"}} {"origin_server_ts":1711517815386,"event_id":"$UMl3W7gDlqGz5DdmADGSNbdaopeb7g_Om4wx07MZ-_4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"As I'm typing this, I'm starting to think that it shouldn't.","msgtype":"m.text"},"m.relates_to":{"event_id":"$kptbt2JGMRG1k6sODs9PKrU779yR6gl78LWbuw-EC9I","rel_type":"m.replace"},"m.mentions":{},"body":" * As I'm typing this, I'm starting to think that it shouldn't.","msgtype":"m.text"}} {"origin_server_ts":1711543870674,"event_id":"$Gt1jjOaziRYoIHSlpfEEl-mj1UekAX41mwsELAec_Tg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'd think that `0 ≡ a cmp b` should imply that `a` and `b` are interchangeable (and, if not, that they're not), and `1.0` and `1` aren't interchangeable","msgtype":"m.text","formatted_body":"I'd think that 0 ≡ a cmp b<\/code> should imply that a<\/code> and b<\/code> are interchangeable (and, if not, that they're not), and 1.0<\/code> and 1<\/code> aren't interchangeable"}} {"origin_server_ts":1711543892554,"event_id":"$mV_JGXpu9apxaVLsjbKXBeoedT5YUW1xiuMKzfMi9Js","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I'd think that `0 ≡ a cmp b` should imply that `a` and `b` are interchangeable (and, if not, that they're not always), and `1.0` and `1` aren't interchangeable","msgtype":"m.text","formatted_body":"I'd think that 0 ≡ a cmp b<\/code> should imply that a<\/code> and b<\/code> are interchangeable (and, if not, that they're not always), and 1.0<\/code> and 1<\/code> aren't interchangeable"},"m.relates_to":{"event_id":"$Gt1jjOaziRYoIHSlpfEEl-mj1UekAX41mwsELAec_Tg","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* I'd think that `0 ≡ a cmp b` should imply that `a` and `b` are interchangeable (and, if not, that they're not always), and `1.0` and `1` aren't interchangeable","msgtype":"m.text","formatted_body":"* I'd think that 0 ≡ a cmp b<\/code> should imply that a<\/code> and b<\/code> are interchangeable (and, if not, that they're not always), and 1.0<\/code> and 1<\/code> aren't interchangeable"}} {"origin_server_ts":1711550353958,"event_id":"$2N_XuT20-LKEQD6-mx5CHciMPhaPANGwYUV2_sTo_qs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right","msgtype":"m.text"}} {"origin_server_ts":1711550363064,"event_id":"$3rl07kXXq_4ImIM752Su7veuE2ZZiyWUUVC_XsEaHO0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So cmp will boot do that","msgtype":"m.text"}} {"origin_server_ts":1711550371966,"event_id":"$A8qR7EH6YfhdUK2fOWDregEYK5DH478xuHlFhnrL8BA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"So cmp can't do that","msgtype":"m.text"},"m.relates_to":{"event_id":"$3rl07kXXq_4ImIM752Su7veuE2ZZiyWUUVC_XsEaHO0","rel_type":"m.replace"},"body":"* So cmp can't do that","msgtype":"m.text"}} {"origin_server_ts":1711550393992,"event_id":"$7-MK8xa-ELUbIM7VSooSTZym-l_to6PABq5o5QeMFlQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's what I'm fixing now","msgtype":"m.text"}} {"origin_server_ts":1711550400236,"event_id":"$4wEnOOVp37ChqU2PwzsSTLGM_s3VtgWHmXayojHsKyE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It was an oversight","msgtype":"m.text"}} {"origin_server_ts":1711622665122,"event_id":"$k7_PQemGyRx1r5KNLi3dS95gtJ5-RdEL-4GyMWXYBgc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hmm. I've been working on this and getting it right is a bit tricky. Not semantically, but I'm trying to avoid duplicating all the code just to deal with the difference introduced by negative zero and what I'm coming up with is ugly (and a bit slower since there are more checks)","msgtype":"m.text"}} {"origin_server_ts":1711726521330,"event_id":"$yp9pCUxDa4IesFVN9XwHlZYgKUVneVff1gDe63Q-p0s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Gah, this is getting deeper and deeper.","msgtype":"m.text"}} {"origin_server_ts":1711726582186,"event_id":"$Isfd62ZFWP0PT8RJrLqpB3sr_X5hu75Jj8vqN-2hVC8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"If `1 cmp 1.0` is supposed to be non-zero, then that means that if I'm using `1` as a key in a hashmap, then getting `1.0` should not give me that result.","msgtype":"m.text","formatted_body":"If 1 cmp 1.0<\/code> is supposed to be non-zero, then that means that if I'm using 1<\/code> as a key in a hashmap, then getting 1.0<\/code> should not give me that result."}} {"origin_server_ts":1711726626552,"event_id":"$2ARYj-ti2YdSBWF0VvBwBXr3LYIboixu3pwrXqgMPsE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Common Lisp solves this by having multiple implementations of the hashmap, where you specify the type of equality you want.","msgtype":"m.text"}} {"origin_server_ts":1711726637816,"event_id":"$14F8ibEVRZnoLlQ_q8FU5KycHgN7rRZkJkl-hTJ69OE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I'm not sure I want to go down that route.","msgtype":"m.text"}} {"origin_server_ts":1711726745522,"event_id":"$uEPhAJFEeaTMEUXY-qxsjj5ss7qh2FhsKn9Y2GeFRo8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$Isfd62ZFWP0PT8RJrLqpB3sr_X5hu75Jj8vqN-2hVC8"}},"format":"org.matrix.custom.html","body":"I'd say that's pretty reasonable behavior","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>I'd say that's pretty reasonable behavior"}} {"origin_server_ts":1711730004514,"event_id":"$jxKmi8aqPHWF0PPgwsKv85E_j1cJu4P7Js0qJydcW7E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks.","msgtype":"m.text"}} {"origin_server_ts":1711730022926,"event_id":"$HzEiOpMAnfym0H7T14oN44KCHe9Pm-d5-WWYAmGVwjQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll keep working on this for a bit.","msgtype":"m.text"}} {"origin_server_ts":1711986725118,"event_id":"$4OVG7IPNSw2g46pDkJNexYpXo2pSDv8VGGkitH_4nDc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"After days, I have finally reworked the equality behaviour to make it more consistent.","msgtype":"m.text"}} {"origin_server_ts":1711986738459,"event_id":"$hlQzCxs-6m6PQlQdKM1x0K4QzjWd1BPY45AIob4q8IE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"This is the resulting commit, what a monster.","msgtype":"m.text"}} {"origin_server_ts":1711986739047,"event_id":"$MhjPvgn9afjFOwPoGKk8fuI_AashrpUgamLt_fN4XYk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://codeberg.org/loke/array/commit/a230cd42fb59e11effe71d499a70b732c805a634","msgtype":"m.text"}} {"origin_server_ts":1711989039905,"event_id":"$SgdGu5zFp2b7ZsEAgJy1BChsaZrYj9HvsOO2yJdseOw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"And here's the result:","msgtype":"m.text"}} {"origin_server_ts":1711989040424,"event_id":"$8TzlWA6aWWA2Q2iL9kH_c2YK12txO75nl_xdP43dDa8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://kapdemo.dhsdevelopments.com/clientweb2/#(%C2%AF0.0%3D%C2%A80.0%200)%20(%C2%AF0.0%E2%89%A1%C2%A80.0%200)%20(%C2%AF0.0%20cmp%C2%A8%200%200.0)%20(%E2%88%A70.0%20%C2%AF0.0%200.0%20%C2%AF0.0)","msgtype":"m.text"}} {"origin_server_ts":1711989101459,"event_id":"$N8P5FEE2RFNGQIBxYELiY7aHsTn1Wk7T4AQJ5WrWMJo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"If anyone would be willing to try it out, that would be nice. If there is any inconsistent behaviour, that would be great.","msgtype":"m.text"}} {"origin_server_ts":1711989163687,"event_id":"$u7eOdFxFLOxpiEgQvCrSE1DIii9jroTZXVIf9ULXA4s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Especially `∊` may have some unexpected behaviour since it uses a hashmap behind the scenes when the left argument has more than 1 element, and I had some bugs that my testcases caught. Still, I'm not sure my tests are exhaustive enough.","msgtype":"m.text","formatted_body":"Especially ∊<\/code> may have some unexpected behaviour since it uses a hashmap behind the scenes when the left argument has more than 1 element, and I had some bugs that my testcases caught. Still, I'm not sure my tests are exhaustive enough."}} {"origin_server_ts":1711998481064,"event_id":"$dHoZwvAvbhz4pQ8J5hGZwY7UfTRjrtBTXwlf5H82nM0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Bug report, bug report!","msgtype":"m.text"}} {"origin_server_ts":1711998486638,"event_id":"$cM-KEqeBdYfdrMvaf__yfv1kstM8pNm0pk88txT8qvs","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"```\nUncaught Kotlin exception: kotlin.ArrayIndexOutOfBoundsException\n at 0 kapl 0x42829e ThrowArrayIndexOutOfBoundsException + 174 \n at 1 kapl 0x555f84 kfun:array.APLArrayLong#valueAt(kotlin.Int){}array.APLLong + 116 \n at 2 kapl 0x50d212 kfun:array.IndexedArrayValue#valueAt(kotlin.Int){}array.APLValue + 66 \n at 3 kapl 0x54a0a8 kfun:array.APLValue#valueAtLong(kotlin.Int;array.Position?){}kotlin.Long + 136 \n at 4 kapl 0x552aa3 kfun:array.APLArray#collapseInt(kotlin.Boolean){}array.APLValue + 1235 \n at 5 kapl 0x54a83a kfun:array.APLValue#collapse(kotlin.Boolean){}array.APLValue + 170 \n at 6 kapl 0x4ff97b kfun:array.Engine.$parseAndEvalWithFormat$lambda$1$FUNCTION_REFERENCE$3.invoke#internal + 187 \n at 7 kapl 0x4ff43f kfun:array.Engine#parseAndEvalWithPostProcessing(array.SourceLocation;kotlin.collections.Map?;kotlin.Function2){0§}0:0 + 1183 \n at 8 kapl 0x561ba4 kfun:com.dhsdevelopments.kap.textclient#main(kotlin.Array){} + 7444 \n at 9 kapl 0x571931 Init_and_run_start + 273 \n at 10 kapl 0x571ada Konan_main + 10 \n at 11 libc.so.6 0x74724bd51ccf 0x0 + 128034247351503 \n at 12 libc.so.6 0x74724bd51d89 __libc_start_main + 137 \n at 13 kapl 0x41782b 0x0 + 4290603 \n/usr/local/bin/kap: line 2: 23543 Aborted (core dumped) kapl --lib-path=$XDG_DATA_HOME/kap/standard-lib/\n```","msgtype":"m.text","formatted_body":"
                      Uncaught Kotlin exception: kotlin.ArrayIndexOutOfBoundsException\n    at 0   kapl                                0x42829e           ThrowArrayIndexOutOfBoundsException + 174 \n    at 1   kapl                                0x555f84           kfun:array.APLArrayLong#valueAt(kotlin.Int){}array.APLLong + 116 \n    at 2   kapl                                0x50d212           kfun:array.IndexedArrayValue#valueAt(kotlin.Int){}array.APLValue + 66 \n    at 3   kapl                                0x54a0a8           kfun:array.APLValue#valueAtLong(kotlin.Int;array.Position?){}kotlin.Long + 136 \n    at 4   kapl                                0x552aa3           kfun:array.APLArray#collapseInt(kotlin.Boolean){}array.APLValue + 1235 \n    at 5   kapl                                0x54a83a           kfun:array.APLValue#collapse(kotlin.Boolean){}array.APLValue + 170 \n    at 6   kapl                                0x4ff97b           kfun:array.Engine.$parseAndEvalWithFormat$lambda$1$FUNCTION_REFERENCE$3.invoke#internal + 187 \n    at 7   kapl                                0x4ff43f           kfun:array.Engine#parseAndEvalWithPostProcessing(array.SourceLocation;kotlin.collections.Map<array.Symbol,array.APLValue>?;kotlin.Function2<array.RuntimeContext,array.APLValue,0:0>){0§<kotlin.Any?>}0:0 + 1183 \n    at 8   kapl                                0x561ba4           kfun:com.dhsdevelopments.kap.textclient#main(kotlin.Array<kotlin.String>){} + 7444 \n    at 9   kapl                                0x571931           Init_and_run_start + 273 \n    at 10  kapl                                0x571ada           Konan_main + 10 \n    at 11  libc.so.6                           0x74724bd51ccf     0x0 + 128034247351503 \n    at 12  libc.so.6                           0x74724bd51d89     __libc_start_main + 137 \n    at 13  kapl                                0x41782b           0x0 + 4290603 \n/usr/local/bin/kap: line 2: 23543 Aborted                 (core dumped) kapl --lib-path=$XDG_DATA_HOME/kap/standard-lib/\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1711998564515,"event_id":"$gJ9ebsmj1QAAsKyAm4zXov_kltg1SzB3KC6gG9n6AB0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"happened as a result of running:\n```\n(⊂0 2 5)⌷A\n```\non a value of A given by \n```\nA←4 6⍴3 2 0 ¯1 5 ¯2 ¯2 ¯3 2 4 0 4 5 ¯3 4 0 4 7 1 3 3 2 ¯6 5\n```","msgtype":"m.text","formatted_body":"

                      happened as a result of running:<\/p>\n

                      (⊂0 2 5)⌷A\n<\/code><\/pre>\n

                      on a value of A given by<\/p>\n

                      A←4 6⍴3 2 0 ¯1 5 ¯2 ¯2 ¯3 2 4 0 4 5 ¯3 4 0 4 7 1 3 3 2 ¯6 5\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1711998579636,"event_id":"$RrS66zjObKvWtUYc5y2zNGdKwbtNt5Nh2hnXPHXkHP0","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"in the repl","msgtype":"m.text"}}
                      {"origin_server_ts":1711998608371,"event_id":"$-k-ABjUct8DAtKaURIA4NDYxW-Tv8IRMyL6Uu_RnWyA","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I hope this helps!","msgtype":"m.text"}}
                      {"origin_server_ts":1712013103819,"event_id":"$-J4CtjsLHo1AgmLlBLNGnpnmHXh-Hc_s5V_vbyqwGBQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Running the native version I see. 😃","msgtype":"m.text"}}
                      {"origin_server_ts":1712043534592,"event_id":"$DFN1bpFcVNTAnEfGP-oVN7ERcTjnKTeB0gziOVKRKLA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: OK, I tested, and I don't see this problem. This is what I get:\n```\n$ text-client/build/bin/linux/releaseExecutable/text-client.kexe --lib-path=array/standard-lib\n> A←4 6⍴3 2 0 ¯1 5 ¯2 ¯2 ¯3 2 4 0 4 5 ¯3 4 0 4 7 1 3 3 2 ¯6 5\n┌→───────────────┐\n↓ 3  2 0 -1  5 -2│\n│-2 -3 2  4  0  4│\n│ 5 -3 4  0  4  7│\n│ 1  3 3  2 -6  5│\n└────────────────┘\n> (⊂0 2 5)⌷A\nError at: 1:9: ⌷: Index out of bounds: Position 5 does not fit in dimensions [4, 6] axis 0\n```","msgtype":"m.text","formatted_body":"

                      Tortus<\/a>: OK, I tested, and I don't see this problem. This is what I get:<\/p>\n

                      $ text-client/build/bin/linux/releaseExecutable/text-client.kexe --lib-path=array/standard-lib\n> A←4 6⍴3 2 0 ¯1 5 ¯2 ¯2 ¯3 2 4 0 4 5 ¯3 4 0 4 7 1 3 3 2 ¯6 5\n┌→───────────────┐\n↓ 3  2 0 -1  5 -2│\n│-2 -3 2  4  0  4│\n│ 5 -3 4  0  4  7│\n│ 1  3 3  2 -6  5│\n└────────────────┘\n> (⊂0 2 5)⌷A\nError at: 1:9: ⌷: Index out of bounds: Position 5 does not fit in dimensions [4, 6] axis 0\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1712046836165,"event_id":"$G0fwFWkubqvwr6Bexi4pqz_1BaOAtOpgW9clwmNiQ6Q","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yeah getting the same on the web too https://kapdemo.dhsdevelopments.com/clientweb2/#A%E2%86%904%206%E2%8D%B43%202%200%20%C2%AF1%205%20%C2%AF2%20%C2%AF2%20%C2%AF3%202%204%200%204%205%20%C2%AF3%204%200%204%207%201%203%203%202%20%C2%AF6%205%20%E2%8B%84%20(%E2%8A%820%202%205)%E2%8C%B7A","msgtype":"m.text"}}
                      {"origin_server_ts":1712047966974,"event_id":"$GQhFEhzkCWZxY2SzTRZwnJ5lELWPh8nEM5GCJvmphLo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: Can you try pulling the latest version, do a `./gradlew clean` and then rebuild?","msgtype":"m.text","formatted_body":"Tortus<\/a>: Can you try pulling the latest version, do a ./gradlew clean<\/code> and then rebuild?"}}
                      {"origin_server_ts":1712075801710,"event_id":"$mffnvxy3a9_SeZQeEicy36v5cMGKl_xkoaBATleh0wE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$GQhFEhzkCWZxY2SzTRZwnJ5lELWPh8nEM5GCJvmphLo"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> Tortus: Can you try pulling the latest version, do a `./gradlew clean` and then rebuild?\n\nDoin' that now","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                      Tortus<\/a>: Can you try pulling the latest version, do a ./gradlew clean<\/code> and then rebuild?<\/blockquote><\/mx-reply>Doin' that now"}} {"origin_server_ts":1712075899802,"event_id":"$xCHZg_hMByyx5bvUmxxqhInfv-fYVZN0ULfEGR1i2-Y","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"or maybe not... school wifi is being angy with me","msgtype":"m.text"}} {"origin_server_ts":1712075904656,"event_id":"$xRk5nB6l5ljDmtshX-Q-83ImKtnpfRGS83RtEsBd7FQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ohp","msgtype":"m.text"}} {"origin_server_ts":1712076397265,"event_id":"$S4dYcPW-WNgtXwsdE3hRFDRo-1G3KKxvWetOXCNis7o","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yah, I guess I just had an old version","msgtype":"m.text"}} {"origin_server_ts":1712076398683,"event_id":"$2G27aRMedwWJLRCISrQgcs2s4vyh01ogCWAWtVVFcYE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"apologies","msgtype":"m.text"}} {"origin_server_ts":1712076488781,"event_id":"$r0ynLD5GQng2491_7f13r8eOFxPsTSOUetGagVkToXg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now I'm curious as to how old? That bug should never have been there.","msgtype":"m.text"}} {"origin_server_ts":1712076741949,"event_id":"$IYHsWmd3Vm2sGod1odbblLc28wuVOAr1CuZERVLljeY","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Is there a KAP history file","msgtype":"m.text"}} {"origin_server_ts":1712076761112,"event_id":"$Bb7Op1fxOSuxNINQuHWJWu3n3YvHWxwgWWokiSnL-Gs","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'm beginning to think that some stuff I did to the environment may have caused that bug","msgtype":"m.text"}} {"origin_server_ts":1712076777287,"event_id":"$YvhfYG6iu6rDTobQ3djCb79yIoDqhD4IrDuINLEQExc","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Also, last time I built I was in here reporting some other bug thing","msgtype":"m.text"}} {"origin_server_ts":1712081247952,"event_id":"$EXbh4vfc4pNy5WcHVXngX4Ngovru4WYj-ukrc-DRZNY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I mean there is the git history. It contains all the changes.","msgtype":"m.text"}} {"origin_server_ts":1712081278791,"event_id":"$4krjFYGTHOF64IUs099X18q_X5y1k8RwpAKEzwlnhxg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Perhaps next time you find a bug you could create a bug report on the codeberg page. That'll preserve the history of the issue\n","msgtype":"m.text"}} {"origin_server_ts":1712161671076,"event_id":"$OYiFF7iNN9B30HJrww4wpUW-7uSndtvtmsbRuuTmO80","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"body":"Right. Apologies","msgtype":"m.text"}} {"origin_server_ts":1712168251501,"event_id":"$GrhyD6AP9Kb_eTGZijUospkMiuUdJfKT1spaVr4ixJs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"No need to apologise. I know filling in big reports is not the highest priority anyone has","msgtype":"m.text"}} {"origin_server_ts":1712240572131,"event_id":"$TxkmVDJQw7_W1ycXVw0JpSMXqRZaHUBoz3akA40qeiI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I'm implementing a new explicit number format: NNNr. It parses a number as decimal but returns it as a rational. So `1.5r` is equal to `(2÷3)`.","msgtype":"m.text","formatted_body":"I'm implementing a new explicit number format: NNNr. It parses a number as decimal but returns it as a rational. So 1.5r<\/code> is equal to (2÷3)<\/code>."}} {"origin_server_ts":1712240579999,"event_id":"$ks_4DMhocxIE5473aSBtoNPiOqHEPDqqas6CltVXj1A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Is this actually useful?","msgtype":"m.text"}} {"origin_server_ts":1712240637487,"event_id":"$Ln-c6h5f2yZDiMsw8xig8eVe9xpdTqPUuWo3rXoqyFY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I happen to have exactly that in bqn-smt","msgtype":"m.text","formatted_body":"I happen to have exactly that in bqn-smt"}} {"origin_server_ts":1712240667436,"event_id":"$AcF5BLN-A2qtnh90j5XV0uTvYiGJjD3w7PdrI0v_hhQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I happen to have exactly that in bqn-smt (though there it's really \"reals\", though I haven't had much success using them for anything other than rationals)","msgtype":"m.text","formatted_body":"I happen to have exactly that in bqn-smt (though there it's really \"reals\", though I haven't had much success using them for anything other than rationals)"},"m.relates_to":{"event_id":"$Ln-c6h5f2yZDiMsw8xig8eVe9xpdTqPUuWo3rXoqyFY","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* I happen to have exactly that in bqn-smt (though there it's really \"reals\", though I haven't had much success using them for anything other than rationals)","msgtype":"m.text","formatted_body":"* I happen to have exactly that in bqn-smt (though there it's really \"reals\", though I haven't had much success using them for anything other than rationals)"}} {"origin_server_ts":1712240709150,"event_id":"$fqGKmLweDW4WM7zRbd97gK9MkfEM1btKNROlvXAZJkU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"oh, you don't have `1r3` for `1÷3`","msgtype":"m.text","formatted_body":"oh, you don't have 1r3<\/code> for 1÷3<\/code>"}} {"origin_server_ts":1712240750238,"event_id":"$Ts-70g_HMep9dAUpjxZuKxkt2N4KMSP9hHsT1gIQGyw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(J has `1r3` fwiw)","msgtype":"m.text","formatted_body":"(J has 1r3<\/code> fwiw)"}} {"origin_server_ts":1712240780361,"event_id":"$UdaizbYWriOMmN49kIikhfaEp8jUR9rH9amP9UkqWJs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I also want to make it possible to print rationals in such a form, because when reading `0.3344r` it's much easier to know the magnitude of the number than when seeing `209/625`.","msgtype":"m.text","formatted_body":"I also want to make it possible to print rationals in such a form, because when reading 0.3344r<\/code> it's much easier to know the magnitude of the number than when seeing 209/625<\/code>."}} {"origin_server_ts":1712240800404,"event_id":"$oooPRCnkS4c5lODYMBhMSyOzrx6KTSfo5dYpz91u-Dc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$fqGKmLweDW4WM7zRbd97gK9MkfEM1btKNROlvXAZJkU"}},"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> oh, you don't have `1r3` for `1÷3`\n\nI don't have it *yet*.","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @dzaima:matrix.org<\/a>
                      oh, you don't have 1r3<\/code> for 1÷3<\/code><\/blockquote><\/mx-reply>I don't have it yet<\/em>."}} {"origin_server_ts":1712240819044,"event_id":"$jqhFL3lAC8o2rMgYEFayJzWA-_btHvqIkhCOC9VQK5I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"That'll go in with the same commit.","msgtype":"m.text"}} {"origin_server_ts":1712240841946,"event_id":"$vy_fWRgqPKzdBoxKRQXaszHCsmzOjZoCEQHo4Wt8BTM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The question is: Should decimal output of rational be enabled by default?","msgtype":"m.text"}} {"origin_server_ts":1712240848462,"event_id":"$42fdGVTXWM2f9pBVGJZMp91QknkhG173Kyam0qSBk50","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"The question is: Should decimal output of rationals be enabled by default?","msgtype":"m.text"},"m.relates_to":{"event_id":"$vy_fWRgqPKzdBoxKRQXaszHCsmzOjZoCEQHo4Wt8BTM","rel_type":"m.replace"},"m.mentions":{},"body":" * The question is: Should decimal output of rationals be enabled by default?","msgtype":"m.text"}} {"origin_server_ts":1712240929701,"event_id":"$mrOUiJ_FoWPHNUdOG_cVkLGoF6aafU8MXf_rT2ZdPgA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"considering that not everything is printed as rationals already (i.e. `3` isn't `3/1`) I'd say that's fine","msgtype":"m.text","formatted_body":"considering that not everything is printed as rationals already (i.e. 3<\/code> isn't 3/1<\/code>) I'd say that's fine"}} {"origin_server_ts":1712242759890,"event_id":"$zvsnDKmxAD7MWyQM4ED9SokkoYKQXlrQrYiUdVV8WJY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Using fraction slash when printing them does make them print rather pretty though:","msgtype":"m.text"}} {"origin_server_ts":1712242832053,"event_id":"$VMJqfRl5-DdfanLIkWdOmKYanCaBglTU32pNNyTlRoE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"image.png","msgtype":"m.image","url":"mxc://dhsdevelopments.com/jxVRSEFrHcKGBthaFEZjqatK","info":{"xyz.amorgan.blurhash":"L0S?DV00000000x_-;?a00~q~q~q","size":19677,"w":1482,"h":183,"mimetype":"image/png"}}} {"origin_server_ts":1712341028932,"event_id":"$H5jmjVNDLz6mQuWICVTqdXwJi6B8ZNjZWfY4dC0DRu8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"OK, this is truly strange. The following code runs in 15 milliseconds on the JVM, while the JS version takes 37 seconds in Firefox (14.8 seconds on chromium): `∨/ 100 10000000 ⍴ 0`","msgtype":"m.text","formatted_body":"OK, this is truly strange. The following code runs in 15 milliseconds on the JVM, while the JS version takes 37 seconds in Firefox (14.8 seconds on chromium): ∨/ 100 10000000 ⍴ 0<\/code>"}} {"origin_server_ts":1712341405875,"event_id":"$iZO2N2-LkoIAk8Ky74JFQL2cq0eGlua6UQVUwo3PyPk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[performance recording](https://matrix.org/_matrix/media/r0/download/matrix.org/EtJtwnkIXELdaAQLxVoYhsNB) is fun (it's all just that, repeated over the whole span)","msgtype":"m.text","formatted_body":"
                      performance recording<\/a> is fun (it's all just that, repeated over the whole span)"}} {"origin_server_ts":1712341419307,"event_id":"$_dhnL4uZPjHoMTamijJP07_qHRLfk6SPMaAeK9z7VTI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Of course, the JS versions are always slower, but this is ridiculous. I wonder what kind of strange edge-case I've hit.","msgtype":"m.text"}} {"origin_server_ts":1712341458600,"event_id":"$2qOE0G77GS0i1DOtF8I5IPpPNpswtbnT1V5Q0ePtTq4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, I could compile it without minimisation.","msgtype":"m.text"}} {"origin_server_ts":1712341502115,"event_id":"$1K2z-sZ09t1dUGx43iBDmsGjjMrziPrklH1mZXdw6Dk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"there are source mappings or something, as can be seen by the `reduce.kt:45:9` below (and clicking on it does open the source)","msgtype":"m.text","formatted_body":"there are source mappings or something, as can be seen by the reduce.kt:45:9<\/code> below (and clicking on it does open the source)"}} {"origin_server_ts":1712341522298,"event_id":"$pDtBlvQGkeZPOaPKDq-Dp6ENvBlwscLgRwUJBlIEzs8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yes, I keep the source mappings.","msgtype":"m.text"}} {"origin_server_ts":1712341535424,"event_id":"$fNqWA_9KeT9c31dSs0Fhy84AEUQpESqGv1gLjsCXpfA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"But the code should eventually do nothing but spin in this loop: https://codeberg.org/loke/array/src/branch/master/array/src/commonMain/kotlin/array/builtins/math_functions.kt#L2125","msgtype":"m.text"}} {"origin_server_ts":1712341589410,"event_id":"$kqgAMaRjQXM1d2cRHp6QwLH9QcRPOCiyNpWL5y7iJKo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"if anything though, I'd want to see the actual JS that's running","msgtype":"m.text","formatted_body":"if anything though, I'd want to see the actual JS that's running"}} {"origin_server_ts":1712341621849,"event_id":"$p5OX5-F7wNH1N_0XCoaiz4MimwAG27eFftemdtll078","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Is it possible to find it through the source mapping?","msgtype":"m.text"}} {"origin_server_ts":1712341664182,"event_id":"$r1v_TQbTMLo9-xuJurVawZU4miI5h8JxiMBtO6pc8D8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it should be possible to find that _without_ source mapping","msgtype":"m.text","formatted_body":"it should be possible to find that without<\/i> source mapping"}} {"origin_server_ts":1712341736883,"event_id":"$T3vWQly-0PpAvV2F6vE5zu3f5pF1xRaHl8TAJ48Wu-M","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"does the java version slow down at all if the size is increased?","msgtype":"m.text","formatted_body":"does the java version slow down at all if the size is increased?"}} {"origin_server_ts":1712341838739,"event_id":"$9jMQECCtNEpcsOkpJgxebVcuqJsVC7c8L_0JSWNewSY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Let me test","msgtype":"m.text"}} {"origin_server_ts":1712341897423,"event_id":"$rE2dueZH24FoZCAUHqTwPa-2AJQDOH8MEM1siUstedA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I know chromium just doesn't optimize out infinite loops at all or something, but jvm definitely can","msgtype":"m.text","formatted_body":"I know chromium just doesn't optimize out infinite loops at all or something, but jvm definitely can"}} {"origin_server_ts":1712341907662,"event_id":"$ST3kCmXpDRvYJUtbmCMydq4FLp53G5z0Cc_wMqpOJlc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I know chromium just doesn't optimize out no-op loops at all or something, but jvm definitely can","msgtype":"m.text","formatted_body":"I know chromium just doesn't optimize out no-op loops at all or something, but jvm definitely can"},"m.relates_to":{"event_id":"$rE2dueZH24FoZCAUHqTwPa-2AJQDOH8MEM1siUstedA","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* I know chromium just doesn't optimize out no-op loops at all or something, but jvm definitely can","msgtype":"m.text","formatted_body":"* I know chromium just doesn't optimize out no-op loops at all or something, but jvm definitely can"}} {"origin_server_ts":1712341912045,"event_id":"$-HMO-82TY7WL5mOeq-GJIBgRB9nLwrG4ucgpqqemeeQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Changing the dimensions to `100 20000000` (doubling the number of columns) makes it take 32 milliseconds.","msgtype":"m.text","formatted_body":"Changing the dimensions to 100 20000000<\/code> (doubling the number of columns) makes it take 32 milliseconds."}} {"origin_server_ts":1712341917820,"event_id":"$fleuCL40385z8YyOsVTX4X7l9IgOY1b0Ec27SV7aqM0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"So about twice","msgtype":"m.text"}} {"origin_server_ts":1712341932732,"event_id":"$g9ZRdQUx1P91o2QMyLOsaoiFA67aRnXmsvujr9HGybI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Beyond that, and I'm hitting the array size limit of 2G elements.","msgtype":"m.text"}} {"origin_server_ts":1712341989651,"event_id":"$nQEJRaQkrb5xhTa6EEMyne4tI4APUbcQ10qFgYlThck","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Changing the operation to `∧/` makes it take 0 ms, which is expected since it can short-cirquit that.","msgtype":"m.text","formatted_body":"Changing the operation to ∧/<\/code> makes it take 0 ms, which is expected since it can short-cirquit that."}} {"origin_server_ts":1712341992407,"event_id":"$uyTYML3njfwj_nptLr8KDO611nxFD_jaxUK_w1lh150","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Changing the operation to `∧/` makes it take 0 ms, which is expected since it can short-circuit that.","msgtype":"m.text","formatted_body":"Changing the operation to ∧/<\/code> makes it take 0 ms, which is expected since it can short-circuit that."},"m.relates_to":{"event_id":"$nQEJRaQkrb5xhTa6EEMyne4tI4APUbcQ10qFgYlThck","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Changing the operation to `∧/` makes it take 0 ms, which is expected since it can short-circuit that.","msgtype":"m.text","formatted_body":" * Changing the operation to ∧/<\/code> makes it take 0 ms, which is expected since it can short-circuit that."}} {"origin_server_ts":1712342002783,"event_id":"$mfOEyL_KIwqSon2kk0RqN7jQOZfXWOlwLOS6ZsO6-xA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"oh nice, ctrl+shift+p → \"disable source maps\" allows disabling the source maps","msgtype":"m.text","formatted_body":"oh nice, ctrl+shift+p → \"disable source maps\" allows disabling the source maps"}} {"origin_server_ts":1712342007065,"event_id":"$GV4dspp6azBvs9tj9ymSOm_BTLja4KhIyTycnY767IE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"oh nice, ctrl+shift+p → \"disable source maps\" allows disabling the source maps in chromium","msgtype":"m.text","formatted_body":"oh nice, ctrl+shift+p → \"disable source maps\" allows disabling the source maps in chromium"},"m.relates_to":{"event_id":"$mfOEyL_KIwqSon2kk0RqN7jQOZfXWOlwLOS6ZsO6-xA","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* oh nice, ctrl+shift+p → \"disable source maps\" allows disabling the source maps in chromium","msgtype":"m.text","formatted_body":"* oh nice, ctrl+shift+p → \"disable source maps\" allows disabling the source maps in chromium"}} {"origin_server_ts":1712342048119,"event_id":"$dA2kp3xsuGxdVQ9wHwzqM47IxLLlbL0raEKEesNIiwQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"now to remember what hack I used to get back source-level performance info..","msgtype":"m.text","formatted_body":"now to remember what hack I used to get back source-level performance info.."}} {"origin_server_ts":1712342136648,"event_id":"$v4FfGP4AlDvb-NQsxBmD43MgVDR1q3a0bdaqCD9p6TY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I'm starting to think that it's not just JS that is slow, but the JVM has managed to optimise this one pretty well.","msgtype":"m.text"}} {"origin_server_ts":1712342145946,"event_id":"$Jmz9YdhQclb1xfgBc_YhYyevVJiZTLfevCzXSOvTIUs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The native version took a bit over a second by the wat.","msgtype":"m.text"}} {"origin_server_ts":1712342148368,"event_id":"$VqzgqgXinIM9iIqD04TwPlOrPQcLe5a4PUWYmNoBIMo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"The native version took a bit over a second by the way.","msgtype":"m.text"},"m.relates_to":{"event_id":"$Jmz9YdhQclb1xfgBc_YhYyevVJiZTLfevCzXSOvTIUs","rel_type":"m.replace"},"m.mentions":{},"body":" * The native version took a bit over a second by the way.","msgtype":"m.text"}} {"origin_server_ts":1712342206842,"event_id":"$eCisKQOq-8dQDp1PriNcM3W9BwhouheRwbeU6Zyby7M","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"does the jvm time change if the other axis size is doubled?","msgtype":"m.text","formatted_body":"does the jvm time change if the other axis size is doubled?"}} {"origin_server_ts":1712342230217,"event_id":"$XwPn4oBbaODGT8T2BhHEnItxI1ZKg8PK8G1UicHD0Jk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The same test takes 22 ms on Dyalog by the way, which makes this even more remarkable.","msgtype":"m.text"}} {"origin_server_ts":1712342263315,"event_id":"$0eFECRGyI3_MM9cA9WdQuMVE7Tt9malPJG85FzIVcys","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$eCisKQOq-8dQDp1PriNcM3W9BwhouheRwbeU6Zyby7M"}},"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> does the jvm time change if the other axis size is doubled?\n\nYes, time is doubled.","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @dzaima:matrix.org<\/a>
                      does the jvm time change if the other axis size is doubled?<\/blockquote><\/mx-reply>Yes, time is doubled."}} {"origin_server_ts":1712342933980,"event_id":"$NrNlEkO0LhDVRvBTWRfYrm2SenkLKl-OTswkvyFnnRc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I just turned off the computer but I just realised something. Kap can be faster than Dyalog here because it never allocates the array. It's just a lazy reshaped scalar.","msgtype":"m.text"}} {"origin_server_ts":1712342968986,"event_id":"$LDobpGJOodG1UWLgsp5Gdwy6pzD0DgUJbIfFuJiGxGw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So there are basically no memory accesses. And the jvm can probably optimise that in some way. ","msgtype":"m.text"}} {"origin_server_ts":1712343196919,"event_id":"$MNh8C-wEfQpfMFswWBaguEPPLyh3OhwKhVLNKnbUaiQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$dA2kp3xsuGxdVQ9wHwzqM47IxLLlbL0raEKEesNIiwQ"}},"format":"org.matrix.custom.html","body":"oh it's needing to do `console.profile();` and `console.profileEnd();` instead of the recording buttons, ugh. And even with that, it attributes everything to the one minified line, even though it pretty-prints it (and source maps don't even work)","msgtype":"m.text","formatted_body":"
                      ↰ <\/a> dzaima<\/a> <\/mx-reply>oh it's needing to do console.profile();<\/code> and console.profileEnd();<\/code> instead of the recording buttons, ugh. And even with that, it attributes everything to the one minified line, even though it pretty-prints it (and source maps don't even work)"}} {"origin_server_ts":1712343548789,"event_id":"$R9CYd1Mc9rKLgVSefY2mGGxu68lSuTXkKJixd76vmdA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's possible to compile without minimisation\n","msgtype":"m.text"}} {"origin_server_ts":1712343557094,"event_id":"$n8PlNM4zUmLdtS2G0eKknkEQ1wRD1gW9Wb8L_o0SMiU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"It's possible to compile without minimisation.","msgtype":"m.text"},"m.relates_to":{"event_id":"$R9CYd1Mc9rKLgVSefY2mGGxu68lSuTXkKJixd76vmdA","rel_type":"m.replace"},"body":"* It's possible to compile without minimisation.","msgtype":"m.text"}} {"origin_server_ts":1712385958129,"event_id":"$H1TMz1Gc95nwh1tDlQGU1EwIVoFq5zaHbYDAIkAnpKY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, I have now rolled back the use of the kscience maths library and moved back to my custom implementation of complex arithmetic.","msgtype":"m.text"}} {"origin_server_ts":1712392770514,"event_id":"$FIZBVcG0dFilSkQso2bqSFNOuzA7tImyDZwDT6AcbHM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The xz story made me want to reduce the use of unnecessary third party libraries.","msgtype":"m.text"}} {"origin_server_ts":1712417791619,"event_id":"$Z1kCl9Ayw4WOYXuDUxCT2Zw1NEqLu6StObJouVBwloo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$H1TMz1Gc95nwh1tDlQGU1EwIVoFq5zaHbYDAIkAnpKY","rel_type":"m.annotation","key":"👍"}}} {"origin_server_ts":1712680976486,"event_id":"$U7NnHBQxr7R65nCmCtG5dX1aYT82Em-GyzZ2l3OCmXw","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I agree","msgtype":"m.text"}} {"origin_server_ts":1712683220397,"event_id":"$qOhx353YbndzQ0lhPXighQ_DkY26H3aC10twnmlex7U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"time:sleep now works in the js version. That was a nightmare to get working. Js really wants to make it hard for you to do blocking calls. ","msgtype":"m.text"}} {"state_key":"@Kooda:elynx.fr","origin_server_ts":1712695749306,"event_id":"$VOyVwCSLhlQFIkPls_sjH6Egu-HPhjYVHGwxougT7_E","sender":"@Kooda:elynx.fr","user_id":"@Kooda:elynx.fr","prev_content":{"avatar_url":"mxc://elynx.fr/WrMnjUmqUhLuJkgkiishYIng","displayname":"Kooda","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://elynx.fr/zVwoaxeXiVzrNtNknbDvHwXc","displayname":"Kooda","membership":"join"},"replaces_state":"$4qIM49cmwYC3A14-h1JhC8QnuFs7MW6oyJrJRSLQY6Y"} {"origin_server_ts":1712787975112,"event_id":"$fnDUA2_C5i17FUcl4ae2kB2LsLGeP4YwMml79eoWbvs","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"No support for negative indexing? eg. `0 ¯1⊇⍵`","msgtype":"m.text","formatted_body":"No support for negative indexing? eg. 0 ¯1⊇⍵<\/code>"}} {"origin_server_ts":1712795220783,"event_id":"$W7CwugkrzCbc3_XmfkuILLenlraL4kIbmvZQLclSTcA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It does not. What so you expect it to return? I'm I'm the aplwiki description of this function and it also doesn't mention any apls that has this. ","msgtype":"m.text"}} {"origin_server_ts":1712795247638,"event_id":"$FP8RECkMqx05LIbYKTiM-BsnlRuG-mzjmFT0IRvE1AM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"It does not. What so you expect it to return? I'm reading the aplwiki description of this function and it also doesn't mention any apls that has this. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$W7CwugkrzCbc3_XmfkuILLenlraL4kIbmvZQLclSTcA","rel_type":"m.replace"},"body":"* It does not. What so you expect it to return? I'm reading the aplwiki description of this function and it also doesn't mention any apls that has this. ","msgtype":"m.text"}} {"origin_server_ts":1712795692135,"event_id":"$_tcpn7N03KCRVJlprHTI2qljUETjzqQmhRA4lR8eOvo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It's J and BQN as far as I can remember, but also Python. A negative index `i≥-n` acts as `n+i`, where `n` is the length of the list. `i<-n` is still an error.","msgtype":"m.text","formatted_body":"It's J and BQN as far as I can remember, but also Python. A negative index i≥-n<\/code> acts as n+i<\/code>, where n<\/code> is the length of the list. i<-n<\/code> is still an error."}} {"origin_server_ts":1712795753059,"event_id":"$gDVVGv_CCT05kaAP4ERf6PxRjnwVgo8pbYY-rVd7kKM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think `⎕IO` is the main reason no APL's done it.","msgtype":"m.text","formatted_body":"I think ⎕IO<\/code> is the main reason no APL's done it."}} {"origin_server_ts":1712796126876,"event_id":"$xUySkZ0aQPvSmLP6WpayNEUOmvBDzCm5SMP7Rc-E2AE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Not that it's perfect: I listed that the looser error checking can be an annoyance [here](https://mlochbaum.github.io/BQN/commentary/problems.html#negative-indices-dont-fail-by-default). Also causes a fair amount of implementation annoyance.","msgtype":"m.text","formatted_body":"Not that it's perfect: I listed that the looser error checking can be an annoyance here<\/a>. Also causes a fair amount of implementation annoyance."}} {"origin_server_ts":1712799871880,"event_id":"$cyPEHlb930J7nGpmgDtMrozBr3AnPN31tFgP2t-poaA","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Yeah, I agree negative indexing is one of those things where it can cause unintended behaviour if you don't expect your index to be negative, but yeah they are useful.\n\nIn my case I trying to get the first and last element and ended up with `> ↑¨⍪⍥⊂∘⌽⍵` (is there something more idiomatic?)","msgtype":"m.text","formatted_body":"

                      Yeah, I agree negative indexing is one of those things where it can cause unintended behaviour if you don't expect your index to be negative, but yeah they are useful.<\/p>\n

                      In my case I trying to get the first and last element and ended up with > ↑¨⍪⍥⊂∘⌽⍵<\/code> (is there something more idiomatic?)<\/p>\n"}} {"origin_server_ts":1712800180279,"event_id":"$hinFCUFa3lh8Nlqm1pJW7g8PqIFiDL2eqCyBSX6SYAI","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I guss `(0 ¯1|⍨≢)⍛⊇` is an option","msgtype":"m.text","formatted_body":"I guss (0 ¯1|⍨≢)⍛⊇<\/code> is an option"}} {"origin_server_ts":1712800488630,"event_id":"$P9IX7JoCI96e5L-XhoAQg704hxRFowGpkJqrImoToTE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`↑«,»(↑⌽)` works but only for vectors.","msgtype":"m.text","formatted_body":"↑«,»(↑⌽)<\/code> works but only for vectors."}} {"origin_server_ts":1712800509310,"event_id":"$DaOfpykoLbNG6lhq4QuTRIBDUzfgZGUef-qipMo0Dbk","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Which is what I had in my case","msgtype":"m.text"}} {"origin_server_ts":1712800559749,"event_id":"$BoD3eGPlQOwkTT0ew4T6Kp3fSu6sU-Y2bt4KJXMN5Ho","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"For first and last major cells you can laminate `⊣⌿` to `⊢⌿`, but I'm not sure there's a nice laminate?","msgtype":"m.text","formatted_body":"For first and last major cells you can laminate ⊣⌿<\/code> to ⊢⌿<\/code>, but I'm not sure there's a nice laminate?"}} {"origin_server_ts":1712800684158,"event_id":"$RP8hGGdMD0oSebrhUAzXX5ym56aj2wAFlglNJj1JAYg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So I've got `⊣⌿«⍪[¯0.5]»(⊢⌿)` which is not so easy on the eyes.","msgtype":"m.text","formatted_body":"So I've got ⊣⌿«⍪[¯0.5]»(⊢⌿)<\/code> which is not so easy on the eyes."}} {"origin_server_ts":1712800719514,"event_id":"$F0eDdv-0EY1uG9-zHepBffgx0Bu6qAE2VO9gVezpXBU","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"`(0 ¯1|⍨≢)⍛⊇` is fine... and more general... kinda reminds me of Raku... where negative indices are also fatal (and literal negative indices will fail at compile time).\nSo instead, the index can take a function that receives the length of the array, so you can do `a[*-1]` to get the end, or `a[*÷2]` to get the middle (array indices are automatically floored).","msgtype":"m.text","formatted_body":"(0 ¯1|⍨≢)⍛⊇<\/code> is fine... and more general... kinda reminds me of Raku... where negative indices are also fatal (and literal negative indices will fail at compile time).
                      So instead, the index can take a function that receives the length of the array, so you can do a[*-1]<\/code> to get the end, or a[*÷2]<\/code> to get the middle (array indices are automatically floored)."}} {"origin_server_ts":1712800738513,"event_id":"$BK_hnAQEuImuKIiWNo6XKI0JuWzv5W3F0Qcnoug11KQ","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Getting middle elem in Kap might be `(⌊2÷⍨≢)⍛⊇`. It's pretty nice","msgtype":"m.text","formatted_body":"Getting middle elem in Kap might be (⌊2÷⍨≢)⍛⊇<\/code>. It's pretty nice"}} {"origin_server_ts":1712801057659,"event_id":"$VdTFty6bkex_6ulIG47tXjqQDlJeiY48sQhcRlW053Y","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`(0,1-⍨≢)⍛⊇` is one shorter. Still doesn't work on matrices apparently, this is not the `⊇` I know.","msgtype":"m.text","formatted_body":"(0,1-⍨≢)⍛⊇<\/code> is one shorter. Still doesn't work on matrices apparently, this is not the ⊇<\/code> I know."}} {"origin_server_ts":1712801152230,"event_id":"$DOtmLRsCELywBtjbpmPMZePgvuTgjHpnjCw9oPwwZIc","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Yeah, I agree negative indexing is one of those things where it can cause unintended behaviour if you don't expect your index to be negative, but yeah they are useful.\n\nIn my case I trying to get the first and last element and ended up with `↑¨⍪⍥⊂∘⌽⍵` (is there something more idiomatic?)","msgtype":"m.text","formatted_body":"

                      Yeah, I agree negative indexing is one of those things where it can cause unintended behaviour if you don't expect your index to be negative, but yeah they are useful.<\/p>\n

                      In my case I trying to get the first and last element and ended up with ↑¨⍪⍥⊂∘⌽⍵<\/code> (is there something more idiomatic?)<\/p>\n"},"m.relates_to":{"event_id":"$cyPEHlb930J7nGpmgDtMrozBr3AnPN31tFgP2t-poaA","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Yeah, I agree negative indexing is one of those things where it can cause unintended behaviour if you don't expect your index to be negative, but yeah they are useful.\n\nIn my case I trying to get the first and last element and ended up with `↑¨⍪⍥⊂∘⌽⍵` (is there something more idiomatic?)","msgtype":"m.text","formatted_body":" *

                      Yeah, I agree negative indexing is one of those things where it can cause unintended behaviour if you don't expect your index to be negative, but yeah they are useful.<\/p>\n

                      In my case I trying to get the first and last element and ended up with ↑¨⍪⍥⊂∘⌽⍵<\/code> (is there something more idiomatic?)<\/p>\n"}} {"origin_server_ts":1712801215213,"event_id":"$co1Zkwb8hACk5jO1zqZhxFjNmM5AIkMDEDVGWy8A918","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I guess `(0 ¯1|⍨≢)⍛⊇` is an option","msgtype":"m.text","formatted_body":"I guess (0 ¯1|⍨≢)⍛⊇<\/code> is an option"},"m.relates_to":{"event_id":"$hinFCUFa3lh8Nlqm1pJW7g8PqIFiDL2eqCyBSX6SYAI","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * I guess `(0 ¯1|⍨≢)⍛⊇` is an option","msgtype":"m.text","formatted_body":" * I guess (0 ¯1|⍨≢)⍛⊇<\/code> is an option"}} {"origin_server_ts":1712808131211,"event_id":"$Hw4afFOJQ9QGjtAUjYbKlXYAYXK2P_qtwc0uzGDkYes","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1712808683193,"event_id":"$JPxHo8UQg_mI4S-45R8BOxTGRYJqcAb2UoJBUMsKL7I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$Hw4afFOJQ9QGjtAUjYbKlXYAYXK2P_qtwc0uzGDkYes","type":"m.room.redaction","content":{"redacts":"$Hw4afFOJQ9QGjtAUjYbKlXYAYXK2P_qtwc0uzGDkYes"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}} {"origin_server_ts":1712808164141,"event_id":"$N7YAGwdGYQGEKRd2TpahGx09eO4EB6a-SBQwJBGJlN0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What do you mean it doesn't work? I'm on mobile right now so testing is annoying. Do you have an example ","msgtype":"m.text"}} {"origin_server_ts":1712808172656,"event_id":"$nnTJxPH_4kaqNeMl8m-zrg9vtmfEvzT9wMO_sREa_i8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"What do you mean it doesn't work? I'm on mobile right now so testing is annoying. Do you have an example?","msgtype":"m.text"},"m.relates_to":{"event_id":"$N7YAGwdGYQGEKRd2TpahGx09eO4EB6a-SBQwJBGJlN0","rel_type":"m.replace"},"body":"* What do you mean it doesn't work? I'm on mobile right now so testing is annoying. Do you have an example?","msgtype":"m.text"}} {"origin_server_ts":1712808406477,"event_id":"$Trbcydpf825b4KV2dianbBXXuJrXZGT1w8AAgfAzEhc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Just looking at the code makes me think it should work without issues.","msgtype":"m.text"}} {"origin_server_ts":1712808683193,"event_id":"$JPxHo8UQg_mI4S-45R8BOxTGRYJqcAb2UoJBUMsKL7I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$Hw4afFOJQ9QGjtAUjYbKlXYAYXK2P_qtwc0uzGDkYes","type":"m.room.redaction","content":{"redacts":"$Hw4afFOJQ9QGjtAUjYbKlXYAYXK2P_qtwc0uzGDkYes"}} {"origin_server_ts":1712808963783,"event_id":"$aXGblLZAxF2bRF8-FBY6l8o_Ug2BszAtuTDKzbU8MAo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$VdTFty6bkex_6ulIG47tXjqQDlJeiY48sQhcRlW053Y"}},"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> `(0,1-⍨≢)⍛⊇` is one shorter. Still doesn't work on matrices apparently, this is not the `⊇` I know.\n\nAh OK, now I see what happens. It's because Kap `⊇` doesn't do major axis extension.","msgtype":"m.text","formatted_body":"

                      In reply to<\/a> @mlochbaum:matrix.org<\/a>
                      (0,1-⍨≢)⍛⊇<\/code> is one shorter. Still doesn't work on matrices apparently, this is not the ⊇<\/code> I know.<\/blockquote><\/mx-reply>Ah OK, now I see what happens. It's because Kap ⊇<\/code> doesn't do major axis extension."}} {"origin_server_ts":1712808981167,"event_id":"$K-XoMDv3_lvLQIuriDpDCHaugs7VsKd4oVKGyBNEUIM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Should it?","msgtype":"m.text"}} {"origin_server_ts":1712809081741,"event_id":"$S78h2QmocKDOG--dTaOpfNmjhu5Hqvk-2Roaqm9njw8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"As for the original question, for a 2-dimensional array I'd probably do: `(1↑)«⍉⍪»(¯1↑)`.","msgtype":"m.text","formatted_body":"As for the original question, for a 2-dimensional array I'd probably do: (1↑)«⍉⍪»(¯1↑)<\/code>."}} {"origin_server_ts":1712809245232,"event_id":"$KWQPdDT7z-xkMd-hgG2KL_NapOWapwQU8IG9pDxWCYU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"In the 1-dimensional case, this also works: `2↑ ⌽⍢↓ ⍳5`","msgtype":"m.text","formatted_body":"In the 1-dimensional case, this also works: 2↑ ⌽⍢↓ ⍳5<\/code>"}} {"origin_server_ts":1712809863651,"event_id":"$a_Sh8BL5g0n_y3TItg8cRXY_4z9AIsZge0LCz6iGozU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"The same approach in the 2-dimensional case would be `2↑⊖⍢(1↓)`.","msgtype":"m.text","formatted_body":"The same approach in the 2-dimensional case would be 2↑⊖⍢(1↓)<\/code>."}} {"origin_server_ts":1712810729987,"event_id":"$sOTh9nTB0WvR4TJvgT_nDA3ylETs_jCCmUxS0H5ZFuA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Actually, this would be much nicer if monadic `↓` was supported for arrays of higher dimensions.","msgtype":"m.text","formatted_body":"Actually, this would be much nicer if monadic ↓<\/code> was supported for arrays of higher dimensions."}} {"origin_server_ts":1712810774232,"event_id":"$scMtuTgmGIocUN14XdrMWFCI1xGm2tbio9U2A1LcXFA","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Here's a nice concoction in Dyalog: `1 ¯1 (∘.↑∘⊆) ⍵`\nWorks on vectors and higher dim arrays\n`¯1↑` works in Kap, so I'm trying to see if a similar trick works","msgtype":"m.text","formatted_body":"Here's a nice concoction in Dyalog: 1 ¯1 (∘.↑∘⊆) ⍵<\/code>
                      Works on vectors and higher dim arrays
                      ¯1↑<\/code> works in Kap, so I'm trying to see if a similar trick works"}} {"origin_server_ts":1712810810491,"event_id":"$QOZoVsxwEL2qMJP9ZQqbGDW6nUa1K4R7IZLIEufURUs","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Here's a nice concoction in Dyalog: `1 ¯1 ∘.↑∘⊆ ⍵`\nWorks on vectors and higher dim arrays\n`¯1↑` works in Kap, so I'm trying to see if a similar trick works","msgtype":"m.text","formatted_body":"Here's a nice concoction in Dyalog: 1 ¯1 ∘.↑∘⊆ ⍵<\/code>
                      Works on vectors and higher dim arrays
                      ¯1↑<\/code> works in Kap, so I'm trying to see if a similar trick works"},"m.relates_to":{"event_id":"$scMtuTgmGIocUN14XdrMWFCI1xGm2tbio9U2A1LcXFA","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Here's a nice concoction in Dyalog: `1 ¯1 ∘.↑∘⊆ ⍵`\nWorks on vectors and higher dim arrays\n`¯1↑` works in Kap, so I'm trying to see if a similar trick works","msgtype":"m.text","formatted_body":" * Here's a nice concoction in Dyalog: 1 ¯1 ∘.↑∘⊆ ⍵<\/code>
                      Works on vectors and higher dim arrays
                      ¯1↑<\/code> works in Kap, so I'm trying to see if a similar trick works"}} {"origin_server_ts":1712811331328,"event_id":"$V1e5BmG_0hBJdbxkxDitQpL1DqPr7ZwKm3iLQBHTX3Q","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"This works\n`1 ¯1 ({⍺↑⊃⍵}⌻)⊂ a`\n\nNow to make that tacit","msgtype":"m.text","formatted_body":"

                      This works
                      1 ¯1 ({⍺↑⊃⍵}⌻)⊂ a<\/code><\/p>\n

                      Now to make that tacit<\/p>\n"}} {"origin_server_ts":1712811433875,"event_id":"$dHF3ojb6iMOLMDBjTTMDdOwz309lz4NUMmVWN7-073Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"That's just `1 ¯1 ↑∘⊃⌻ ⊂5 5 ⍴ ⍳25`","msgtype":"m.text","formatted_body":"That's just 1 ¯1 ↑∘⊃⌻ ⊂5 5 ⍴ ⍳25<\/code>"}} {"origin_server_ts":1712811534050,"event_id":"$oxlmUM4-9eki0mFttaIbuVRwy7iNiHKvUTD84xsu47E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"But you can also write it as: `(1 ¯1 ↑¨∘⊂)`","msgtype":"m.text","formatted_body":"But you can also write it as: (1 ¯1 ↑¨∘⊂)<\/code>"}} {"origin_server_ts":1712811717085,"event_id":"$zSEDoXaEGTB_O4ibdiWQSkEAc0L2SiwRA4hcZ0RM8o8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"But your experiments made me wonder if I don't have a bug there in the case of scalar arguments to functions derived by `⌻`. I think they should probably simply behave like `¨` which is what Dyalog does.","msgtype":"m.text","formatted_body":"But your experiments made me wonder if I don't have a bug there in the case of scalar arguments to functions derived by ⌻<\/code>. I think they should probably simply behave like ¨<\/code> which is what Dyalog does."}} {"origin_server_ts":1712812273729,"event_id":"$7xb5pX44oO2FRotORpF79Irg6B8iJJDC4f9aJu4uNyI","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"and/or you could add support for negative indexing 😬","msgtype":"m.text"}} {"origin_server_ts":1712812670175,"event_id":"$YoDjgPBVY83ZtjOg96RI2M9US24NYm6Ht0G7c7mcpwA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I could indeed.","msgtype":"m.text"}} {"origin_server_ts":1712812691226,"event_id":"$jIb6_F6qMN1Cosd1dplThCLeMbSLESgHuBu-dT4LK3E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Should I?","msgtype":"m.text"}} {"origin_server_ts":1712812797714,"event_id":"$xlRS_jJa_0nvab4Q3HamPN4rW0vNc_maGkhPP0DdRbo","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Umm, I think you are the language designer!\nMy vote is yes, and I agree that the reason Dyalog doesn't do it is probably because of `⎕IO←1`","msgtype":"m.text","formatted_body":"Umm, I think you are the language designer!
                      My vote is yes, and I agree that the reason Dyalog doesn't do it is probably because of ⎕IO←1<\/code>"}} {"origin_server_ts":1712812946113,"event_id":"$xexzqTRJWoZT9NmcTz_WGlj5yECuRbZLOBflN-tsKIA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"And J and BQN does?","msgtype":"m.text"}} {"origin_server_ts":1712812964221,"event_id":"$J3NJ8-rzp-zGXbGVVVJVRJKlJUoVxnxrO37rDYevqBs","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yes","msgtype":"m.text"}} {"origin_server_ts":1712812974054,"event_id":"$xEhzasXi5fdZGKtwsaqhOWmfuK1eu_gXQ-Aj-UjTsIM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, then I should.","msgtype":"m.text"}} {"origin_server_ts":1712812985744,"event_id":"$iQD2XhMMV2tXB5HKmHEXEfe9ycBZzivK3NqhaDD1TSM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I also found the bug in outer product. I'll fix it later.","msgtype":"m.text"}} {"origin_server_ts":1712813112081,"event_id":"$uey7bEYqkFHxqqj7fZUdADobroBKKlXHvRYguWMJzL0","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"BQN: `0\u203f3\u203f¯1⊏\"hello\"`\nJ: `0 3 _1 { 'hello'`\n\nBoth will result in \"hlo\"","msgtype":"m.text","formatted_body":"

                      BQN: 0\u203f3\u203f¯1⊏\"hello\"<\/code>
                      J: 0 3 _1 { 'hello'<\/code><\/p>\n

                      Both will result in \"hlo\"<\/p>\n"}} {"origin_server_ts":1712813112775,"event_id":"$kpdgywj-5d79ZRbdTpqGZR3JP10hUpCWC82x9tIg6bo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Also, when using outer product you lose type specialisation. So the optimiser doesn't know this is a boolean array. That can make certain things slower: `int:valueInfo ≡⌻⍨ ⍳10`","msgtype":"m.text","formatted_body":"Also, when using outer product you lose type specialisation. So the optimiser doesn't know this is a boolean array. That can make certain things slower: int:valueInfo ≡⌻⍨ ⍳10<\/code>"}} {"origin_server_ts":1712813152107,"event_id":"$5UMKqZ_Z0C2UsMlAFFnfVjse293ReihVq_YBuqZIA2w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I need to do a lot of work on this stuff clearly.","msgtype":"m.text"}} {"origin_server_ts":1712813274251,"event_id":"$Bz30J5MbJx4TP-C1prpU4goECLnhm0rRxTxaMdywj3M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@elcar0:matrix.org"]},"format":"org.matrix.custom.html","body":"elcar0: OK, I'll fix this. Maybe tonight.","msgtype":"m.text","formatted_body":"elcar0<\/a>: OK, I'll fix this. Maybe tonight."}} {"origin_server_ts":1712813546064,"event_id":"$8E1JV3x_MY9K1jaJIRKUQzGnwDOeahejlkOeoiPCRwk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://codeberg.org/loke/array/issues/7","msgtype":"m.text"}} {"origin_server_ts":1712813605719,"event_id":"$HvyQsoDnVL-rIaOx199GSKzaPWur5xqRq8BChFdHsVI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://codeberg.org/loke/array/issues/8","msgtype":"m.text"}} {"origin_server_ts":1712814057663,"event_id":"$74AFWTGtF6dQF-Q7aZvBCaCOFtw47_2Hz6M6xrOMqSg","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"cool","msgtype":"m.text"}} {"origin_server_ts":1712814196398,"event_id":"$XjfRrj1M0H0xVcytYT54E6j1GsNwyFMMtyLq0WWo900","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Could I ask you guys to amend the issue with some examples of input and expected output? I can then add that to the testcases to ensure I cover all the bases.","msgtype":"m.text"}} {"origin_server_ts":1712817102442,"event_id":"$YZYwROoqNVO1go4P1KNwvqe0xA2guo41wMbkGKttdEc","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"body":"Sure I will add some examples for negative indexing when I'm at my laptop ","msgtype":"m.text"}} {"origin_server_ts":1712819779645,"event_id":"$Les1zNjA-rsY8-MMZGur-pkP8rqxJf89qFgShu5rBNc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Also, what should the behaviour be when the size of the coordinate argument is less than the rank of the argument? I think both BQN and J supports this, but to do it right I'd love to see some examples of edge-cases that I can test for.","msgtype":"m.text"}} {"origin_server_ts":1712822722247,"event_id":"$9Q5DKALr746wATRZw8mtvNHEyAgqpgt4oToxyYSoC80","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Another thing that may need to be addressed is how `⊇` will work on higher ranked arrays. You can look to Dyalog Extended/Dyalog Vision which intends it to behave like `(⌷⍨∘⊃⍨⍤0 99)` (Dyalog)\nie.\n```\n ]DISPLAY 0 3 (⌷⍨∘⊃⍨⍤0 99) 4 2 3⍴⍳25\n┌┌→───────┐\n↓↓ 0 1 2│\n││ 3 4 5│\n││ │\n││18 19 20│\n││21 22 23│\n└└~───────┘\n```\n","msgtype":"m.text","formatted_body":"

                      Another thing that may need to be addressed is how ⊇<\/code> will work on higher ranked arrays. You can look to Dyalog Extended/Dyalog Vision which intends it to behave like (⌷⍨∘⊃⍨⍤0 99)<\/code> (Dyalog)
                      ie.<\/p>\n

                            ]DISPLAY 0 3 (⌷⍨∘⊃⍨⍤0 99) 4 2 3⍴⍳25\n┌┌→───────┐\n↓↓ 0  1  2│\n││ 3  4  5│\n││        │\n││18 19 20│\n││21 22 23│\n└└~───────┘\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1712822897611,"event_id":"$LIDGeTV74PeEnrd6O3p91nBGydEW5y5jvRB6vl_n80o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Right, I was experimenting a bit, but as I don't have a perfect idea myself how it _should_ work, I'd rather implement it in line with how others do it, which is why I was looking for good testcases.","msgtype":"m.text","formatted_body":"Right, I was experimenting a bit, but as I don't have a perfect idea myself how it should<\/em> work, I'd rather implement it in line with how others do it, which is why I was looking for good testcases."}}
                      {"origin_server_ts":1712823225862,"event_id":"$ySjHSW6vzq5lqA3AQeNL8SWOgxzjrVMEt6lh0Q7bApM","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Well as far as how others do it...\nAdam is strongly advocating for this version of `⊇` to be in Dyalog, and BQN and J also have this same behaviour on higher ranked arrays (with negatives also supported on BQN and J)\nBQN\n```\n   0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n┌─\n╎  0  1  2\n   3  4  5\n\n  18 19 20\n  21 22 23\n           ┘\n   ≢0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n⟨ 2 2 3 ⟩\n```\nJ\n```\n   0 _1 { 4 2 3 $ i. 25\n 0  1  2\n 3  4  5\n\n18 19 20\n21 22 23\n```\nUiua ?\n```\n↪ ⊏ 0_¯1 ↯ 4_2_3 ⇡ 25\n╭─\n╷  0  1  2\n╷  3  4  5\n\n  18 19 20\n  21 22 23\n           ╯\n```","msgtype":"m.text","formatted_body":"

                      Well as far as how others do it...
                      Adam is strongly advocating for this version of ⊇<\/code> to be in Dyalog, and BQN and J also have this same behaviour on higher ranked arrays (with negatives also supported on BQN and J)
                      BQN<\/p>\n

                         0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n┌─\n╎  0  1  2\n   3  4  5\n\n  18 19 20\n  21 22 23\n           ┘\n   ≢0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n⟨ 2 2 3 ⟩\n<\/code><\/pre>\n

                      J<\/p>\n

                         0 _1 { 4 2 3 $ i. 25\n 0  1  2\n 3  4  5\n\n18 19 20\n21 22 23\n<\/code><\/pre>\n

                      Uiua ?<\/p>\n

                      ↪ ⊏ 0_¯1 ↯ 4_2_3 ⇡ 25\n╭─\n╷  0  1  2\n╷  3  4  5\n\n  18 19 20\n  21 22 23\n           ╯\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1712823253098,"event_id":"$P5nUV70oGMIz4LPrjNPFSU26GaGxNjBdi9xn6eK8nuA","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Well as far as how others do it...\nAdam is strongly advocating for this version of `⊇` to be in Dyalog, and BQN and J also have this same behaviour on higher ranked arrays (with negatives also supported on BQN and J)\nBQN\n\n```\n   0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n┌─\n╎  0  1  2\n   3  4  5\n\n  18 19 20\n  21 22 23\n           ┘\n   ≢0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n⟨ 2 2 3 ⟩\n```\n\nJ\n\n```\n   0 \\_1 { 4 2 3 $ i. 25\n 0  1  2\n 3  4  5\n\n18 19 20\n21 22 23\n```\n\nUiua ?\n\n```\n↪ ⊏ 0_¯1 ↯ 4_2_3 ⇡ 25\n╭─\n╷  0  1  2\n╷  3  4  5\n\n  18 19 20\n  21 22 23\n           ╯\n```","msgtype":"m.text","formatted_body":"

                      Well as far as how others do it...
                      Adam is strongly advocating for this version of ⊇<\/code> to be in Dyalog, and BQN and J also have this same behaviour on higher ranked arrays (with negatives also supported on BQN and J)
                      BQN<\/p>\n

                         0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n┌─\n╎  0  1  2\n   3  4  5\n\n  18 19 20\n  21 22 23\n           ┘\n   ≢0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n⟨ 2 2 3 ⟩\n<\/code><\/pre>\n

                      J<\/p>\n

                         0 \\_1 { 4 2 3 $ i. 25\n 0  1  2\n 3  4  5\n\n18 19 20\n21 22 23\n<\/code><\/pre>\n

                      Uiua ?<\/p>\n

                      ↪ ⊏ 0_¯1 ↯ 4_2_3 ⇡ 25\n╭─\n╷  0  1  2\n╷  3  4  5\n\n  18 19 20\n  21 22 23\n           ╯\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$ySjHSW6vzq5lqA3AQeNL8SWOgxzjrVMEt6lh0Q7bApM","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Well as far as how others do it...\nAdam is strongly advocating for this version of `⊇` to be in Dyalog, and BQN and J also have this same behaviour on higher ranked arrays (with negatives also supported on BQN and J)\nBQN\n\n```\n   0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n┌─\n╎  0  1  2\n   3  4  5\n\n  18 19 20\n  21 22 23\n           ┘\n   ≢0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n⟨ 2 2 3 ⟩\n```\n\nJ\n\n```\n   0 \\_1 { 4 2 3 $ i. 25\n 0  1  2\n 3  4  5\n\n18 19 20\n21 22 23\n```\n\nUiua ?\n\n```\n↪ ⊏ 0_¯1 ↯ 4_2_3 ⇡ 25\n╭─\n╷  0  1  2\n╷  3  4  5\n\n  18 19 20\n  21 22 23\n           ╯\n```","msgtype":"m.text","formatted_body":" * 

                      Well as far as how others do it...
                      Adam is strongly advocating for this version of ⊇<\/code> to be in Dyalog, and BQN and J also have this same behaviour on higher ranked arrays (with negatives also supported on BQN and J)
                      BQN<\/p>\n

                         0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n┌─\n╎  0  1  2\n   3  4  5\n\n  18 19 20\n  21 22 23\n           ┘\n   ≢0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n⟨ 2 2 3 ⟩\n<\/code><\/pre>\n

                      J<\/p>\n

                         0 \\_1 { 4 2 3 $ i. 25\n 0  1  2\n 3  4  5\n\n18 19 20\n21 22 23\n<\/code><\/pre>\n

                      Uiua ?<\/p>\n

                      ↪ ⊏ 0_¯1 ↯ 4_2_3 ⇡ 25\n╭─\n╷  0  1  2\n╷  3  4  5\n\n  18 19 20\n  21 22 23\n           ╯\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1712823263690,"event_id":"$AoRoAzSErTkZmqSqY2U_FmOCkLFHNiLEmbaTZUIJ6cY","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Well as far as how others do it...\nAdam is strongly advocating for this version of `⊇` to be in Dyalog, and BQN and J also have this same behaviour on higher ranked arrays (with negatives also supported on BQN and J)\nBQN\n\n```\n   0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n┌─\n╎  0  1  2\n   3  4  5\n\n  18 19 20\n  21 22 23\n           ┘\n   ≢0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n⟨ 2 2 3 ⟩\n```\n\nJ\n\n```\n   0 _1 { 4 2 3 $ i. 25\n 0  1  2\n 3  4  5\n\n18 19 20\n21 22 23\n```\n\nUiua ?\n\n```\n↪ ⊏ 0_¯1 ↯ 4_2_3 ⇡ 25\n╭─\n╷  0  1  2\n╷  3  4  5\n\n  18 19 20\n  21 22 23\n           ╯\n```","msgtype":"m.text","formatted_body":"

                      Well as far as how others do it...
                      Adam is strongly advocating for this version of ⊇<\/code> to be in Dyalog, and BQN and J also have this same behaviour on higher ranked arrays (with negatives also supported on BQN and J)
                      BQN<\/p>\n

                         0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n┌─\n╎  0  1  2\n   3  4  5\n\n  18 19 20\n  21 22 23\n           ┘\n   ≢0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n⟨ 2 2 3 ⟩\n<\/code><\/pre>\n

                      J<\/p>\n

                         0 _1 { 4 2 3 $ i. 25\n 0  1  2\n 3  4  5\n\n18 19 20\n21 22 23\n<\/code><\/pre>\n

                      Uiua ?<\/p>\n

                      ↪ ⊏ 0_¯1 ↯ 4_2_3 ⇡ 25\n╭─\n╷  0  1  2\n╷  3  4  5\n\n  18 19 20\n  21 22 23\n           ╯\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$ySjHSW6vzq5lqA3AQeNL8SWOgxzjrVMEt6lh0Q7bApM","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Well as far as how others do it...\nAdam is strongly advocating for this version of `⊇` to be in Dyalog, and BQN and J also have this same behaviour on higher ranked arrays (with negatives also supported on BQN and J)\nBQN\n\n```\n   0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n┌─\n╎  0  1  2\n   3  4  5\n\n  18 19 20\n  21 22 23\n           ┘\n   ≢0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n⟨ 2 2 3 ⟩\n```\n\nJ\n\n```\n   0 _1 { 4 2 3 $ i. 25\n 0  1  2\n 3  4  5\n\n18 19 20\n21 22 23\n```\n\nUiua ?\n\n```\n↪ ⊏ 0_¯1 ↯ 4_2_3 ⇡ 25\n╭─\n╷  0  1  2\n╷  3  4  5\n\n  18 19 20\n  21 22 23\n           ╯\n```","msgtype":"m.text","formatted_body":" * 

                      Well as far as how others do it...
                      Adam is strongly advocating for this version of ⊇<\/code> to be in Dyalog, and BQN and J also have this same behaviour on higher ranked arrays (with negatives also supported on BQN and J)
                      BQN<\/p>\n

                         0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n┌─\n╎  0  1  2\n   3  4  5\n\n  18 19 20\n  21 22 23\n           ┘\n   ≢0\u203f¯1⊏4\u203f2\u203f3⥊↕25\n⟨ 2 2 3 ⟩\n<\/code><\/pre>\n

                      J<\/p>\n

                         0 _1 { 4 2 3 $ i. 25\n 0  1  2\n 3  4  5\n\n18 19 20\n21 22 23\n<\/code><\/pre>\n

                      Uiua ?<\/p>\n

                      ↪ ⊏ 0_¯1 ↯ 4_2_3 ⇡ 25\n╭─\n╷  0  1  2\n╷  3  4  5\n\n  18 19 20\n  21 22 23\n           ╯\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1712823477423,"event_id":"$ynOzWvbhrbhWzLwKrO_rrfYlgPnrvlMUpojCqQsep1U","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"J code doesn't render correctly on my end, so just in case it's the same for you, that 1 is a negative (`_1`)","msgtype":"m.text","formatted_body":"J code doesn't render correctly on my end, so just in case it's the same for you, that 1 is a negative (_1<\/code>)"}}
                      {"origin_server_ts":1712824033640,"event_id":"$urNhpCXMdS57zoJhim3kfiqvG0l7ijGdBrqFitgAgRU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Looks correct to me, thanks.","msgtype":"m.text"}}
                      {"origin_server_ts":1712824051363,"event_id":"$tLQbjvRY8zKA63QVIoTB8Bq85Lwp-Zw9XBZ2bUK38U0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I know the Element client sometimes render code really badly.","msgtype":"m.text"}}
                      {"origin_server_ts":1712824996634,"event_id":"$v9HeRRBKeBSAJT3l7FNrgmPtP8WjdkRxjV47ZXjmOnU","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Oh, I didn't realise `(⌷⍨∘⊃⍨⍤0 99)` worked in Kap. I tried it before but must have typo'd something.\nhttps://kapdemo.dhsdevelopments.com/clientweb2/#c=MCAzKOKMt+KNqOKImOKKg+KNqOKNpDAgOTkpNCAyIDPijbTijbMyNA==","msgtype":"m.text","formatted_body":"Oh, I didn't realise (⌷⍨∘⊃⍨⍤0 99)<\/code> worked in Kap. I tried it before but must have typo'd something.
                      https://kapdemo.dhsdevelopments.com/clientweb2/#c=MCAzKOKMt+KNqOKImOKKg+KNqOKNpDAgOTkpNCAyIDPijbTijbMyNA=="}} {"origin_server_ts":1712825633703,"event_id":"$HURtcbSK8Xn_bt6pd4uS2af7VKihq0UycIXnoFLIVck","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Yes, it does. You may have tried to use the Dyalog style of using `⊢` to separate the operator argument from the function argument. This does not work in Kap.","msgtype":"m.text","formatted_body":"Yes, it does. You may have tried to use the Dyalog style of using ⊢<\/code> to separate the operator argument from the function argument. This does not work in Kap."}} {"origin_server_ts":1712826098339,"event_id":"$e29dApUKr-YucfhXmKDTYUdC6YhKou2DM_V6l2nBNU8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"You may have tried to use the Dyalog style of using `⊢` to separate the operator argument from the function argument. This does not work in Kap.","msgtype":"m.text","formatted_body":"You may have tried to use the Dyalog style of using ⊢<\/code> to separate the operator argument from the function argument. This does not work in Kap."},"m.relates_to":{"event_id":"$HURtcbSK8Xn_bt6pd4uS2af7VKihq0UycIXnoFLIVck","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * You may have tried to use the Dyalog style of using `⊢` to separate the operator argument from the function argument. This does not work in Kap.","msgtype":"m.text","formatted_body":" * You may have tried to use the Dyalog style of using ⊢<\/code> to separate the operator argument from the function argument. This does not work in Kap."}} {"origin_server_ts":1712826298106,"event_id":"$yo4uZ2SCI_oH26EN2O-3eivsnXUzTv-vW39z3na7ZdA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I really am not a huge fan of value arguments to operators, as they make the binding strength problem worse. Without value arguments, something like `A OP B x` is pretty obvious, while if both value and function arguments are to be allowed, then is that `A OP (B x)` or `(A OP B) x`?","msgtype":"m.text","formatted_body":"I really am not a huge fan of value arguments to operators, as they make the binding strength problem worse. Without value arguments, something like A OP B x<\/code> is pretty obvious, while if both value and function arguments are to be allowed, then is that A OP (B x)<\/code> or (A OP B) x<\/code>?"}} {"origin_server_ts":1712826364886,"event_id":"$Ooig5gyDqFLKV9W-dj48ZrOeApie28eOZ5vhgAuHH2A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Now, Kap parses ambivalent operators differently from pure function operators, which is why you need parens for `⍤` and `⍣`.","msgtype":"m.text","formatted_body":"Now, Kap parses ambivalent operators differently from pure function operators, which is why you need parens for ⍤<\/code> and ⍣<\/code>."}} {"origin_server_ts":1712826519550,"event_id":"$nP2rXL5oPmxXL0nbuAf7HKxda7gbdmKyUAlskKoUY6s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I've actually considered breaking out the numeric version of `⍣` (the repeat function) into its own operator instead of having it ambivalent. This would allow you to type `FOO⍣≡ x` without parens.","msgtype":"m.text","formatted_body":"I've actually considered breaking out the numeric version of ⍣<\/code> (the repeat function) into its own operator instead of having it ambivalent. This would allow you to type FOO⍣≡ x<\/code> without parens."}} {"origin_server_ts":1712826617570,"event_id":"$nVopmODrf0TYNzWqAt2XSyosGIjc8FuR_coQAgbi8Jw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Or perhaps add the numeric limit as an axis parameter, which would allow you to write `FOO⍣[100]≡ x` to limit it to 100 iterations, and the plain repeat loop would be `FOO⍣[1]{0} x`","msgtype":"m.text","formatted_body":"Or perhaps add the numeric limit as an axis parameter, which would allow you to write FOO⍣[100]≡ x<\/code> to limit it to 100 iterations, and the plain repeat loop would be FOO⍣[1]{0} x<\/code>"}} {"origin_server_ts":1712826623394,"event_id":"$Ce_snLCSnhiT6cD0bKvt6dXpXCE0ttyU5tCSH4c6bEg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Or perhaps add the numeric limit as an axis parameter, which would allow you to write `FOO⍣[100]≡ x` to limit it to 100 iterations, and the plain repeat loop would be `FOO⍣[10]{0} x`","msgtype":"m.text","formatted_body":"Or perhaps add the numeric limit as an axis parameter, which would allow you to write FOO⍣[100]≡ x<\/code> to limit it to 100 iterations, and the plain repeat loop would be FOO⍣[10]{0} x<\/code>"},"m.relates_to":{"event_id":"$nVopmODrf0TYNzWqAt2XSyosGIjc8FuR_coQAgbi8Jw","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Or perhaps add the numeric limit as an axis parameter, which would allow you to write `FOO⍣[100]≡ x` to limit it to 100 iterations, and the plain repeat loop would be `FOO⍣[10]{0} x`","msgtype":"m.text","formatted_body":" * Or perhaps add the numeric limit as an axis parameter, which would allow you to write FOO⍣[100]≡ x<\/code> to limit it to 100 iterations, and the plain repeat loop would be FOO⍣[10]{0} x<\/code>"}} {"origin_server_ts":1712826629262,"event_id":"$lVAeUe_p1m6n1YZD8awVunzUZ6tkhvGH3FydD8Nawc0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Or perhaps add the numeric limit as an axis parameter, which would allow you to write `FOO⍣[100]≡ x` to limit it to 100 iterations, and the plain repeat loop would be `FOO⍣[50]{0} x`","msgtype":"m.text","formatted_body":"Or perhaps add the numeric limit as an axis parameter, which would allow you to write FOO⍣[100]≡ x<\/code> to limit it to 100 iterations, and the plain repeat loop would be FOO⍣[50]{0} x<\/code>"},"m.relates_to":{"event_id":"$nVopmODrf0TYNzWqAt2XSyosGIjc8FuR_coQAgbi8Jw","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Or perhaps add the numeric limit as an axis parameter, which would allow you to write `FOO⍣[100]≡ x` to limit it to 100 iterations, and the plain repeat loop would be `FOO⍣[50]{0} x`","msgtype":"m.text","formatted_body":" * Or perhaps add the numeric limit as an axis parameter, which would allow you to write FOO⍣[100]≡ x<\/code> to limit it to 100 iterations, and the plain repeat loop would be FOO⍣[50]{0} x<\/code>"}} {"origin_server_ts":1712838284051,"event_id":"$ogEl74-2e8WMns0wQhqIRV3OuaZ9kZpYMpHj-yHpXlk","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"@loke I'm not sure if you saw \n[Filling the Core Language Gaps // Adám Brudzewsky // Dyalog '22](https://www.youtube.com/watch?v=itGiA56NSl8), where Adám goes over a few examples of his vision for `⊇`.\n\nYou maybe don't want to implement everything yet, but it might good for illustration (& inspiration!)","msgtype":"m.text","formatted_body":"

                      @loke I'm not sure if you saw
                      Filling the Core Language Gaps // Adám Brudzewsky // Dyalog '22<\/a>, where Adám goes over a few examples of his vision for ⊇<\/code>.<\/p>\n

                      You maybe don't want to implement everything yet, but it might good for illustration (& inspiration!)<\/p>\n"}} {"origin_server_ts":1712839709374,"event_id":"$ZdzlkgLozceQn-9E8fwbEWVBs-8LObS5fT-njlc-67I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Watching now","msgtype":"m.text"}} {"origin_server_ts":1712839712295,"event_id":"$vnLr1teCEqqD10RmOPQfUZHEx27DJlMcTkQHrGoy1sU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks","msgtype":"m.text"}} {"origin_server_ts":1712889541966,"event_id":"$E_uo1MOSWkmLnu7sLLjHHUqGsS7asvlTXAgcOBtVEbA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I started looking at the updates to `⊇`. The negative indexes are trivial to implement and should be available today. But the rank extension is trickier. The implementation of the functionality itself isn't the hard part, but the current implementation of `⍢` breaks for it.","msgtype":"m.text","formatted_body":"I started looking at the updates to ⊇<\/code>. The negative indexes are trivial to implement and should be available today. But the rank extension is trickier. The implementation of the functionality itself isn't the hard part, but the current implementation of ⍢<\/code> breaks for it."}} {"origin_server_ts":1712889572371,"event_id":"$5haAsJX78Q1pHyTIlyH86dR4Qnjk3fI4G-YRMFmdnVA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I started looking at the updates to `⊇`. The negative indexes are trivial to implement and should be available today. But the rank extension is trickier. The implementation of the functionality itself isn't the hard part, but the current implementation of `⍢` breaks, so it needs to be changed.","msgtype":"m.text","formatted_body":"I started looking at the updates to ⊇<\/code>. The negative indexes are trivial to implement and should be available today. But the rank extension is trickier. The implementation of the functionality itself isn't the hard part, but the current implementation of ⍢<\/code> breaks, so it needs to be changed."},"m.relates_to":{"event_id":"$E_uo1MOSWkmLnu7sLLjHHUqGsS7asvlTXAgcOBtVEbA","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * I started looking at the updates to `⊇`. The negative indexes are trivial to implement and should be available today. But the rank extension is trickier. The implementation of the functionality itself isn't the hard part, but the current implementation of `⍢` breaks, so it needs to be changed.","msgtype":"m.text","formatted_body":" * I started looking at the updates to ⊇<\/code>. The negative indexes are trivial to implement and should be available today. But the rank extension is trickier. The implementation of the functionality itself isn't the hard part, but the current implementation of ⍢<\/code> breaks, so it needs to be changed."}} {"origin_server_ts":1712889635855,"event_id":"$KeVBaCy8LIzHS5v-MlI1LMwkRZWf8ctIYVVe-7Vtsmw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"This is because I can't just implement it in terms of `⍤`, because that operator doesn't support structural under.","msgtype":"m.text","formatted_body":"This is because I can't just implement it in terms of ⍤<\/code>, because that operator doesn't support structural under."}} {"origin_server_ts":1712889666012,"event_id":"$X4Hs2Fi6rxRB58gJX_CupCzKYgfFXMWlDjlXa5kv74s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Perhaps I should implement support for structural under with `⍤` first, and then I can do the change to `⊇`","msgtype":"m.text","formatted_body":"Perhaps I should implement support for structural under with ⍤<\/code> first, and then I can do the change to ⊇<\/code>"}} {"origin_server_ts":1712889699674,"event_id":"$iAfZTS06mNl7k4L9HmB2rUUFxFaCB_X9q47pOADmo5w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Perhaps I should implement support for structural under with `⍤` first, and then I can do the change to `⊇` by implementing it as syntactic sugar around a combination of these functions.","msgtype":"m.text","formatted_body":"Perhaps I should implement support for structural under with ⍤<\/code> first, and then I can do the change to ⊇<\/code> by implementing it as syntactic sugar around a combination of these functions."},"m.relates_to":{"event_id":"$X4Hs2Fi6rxRB58gJX_CupCzKYgfFXMWlDjlXa5kv74s","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Perhaps I should implement support for structural under with `⍤` first, and then I can do the change to `⊇` by implementing it as syntactic sugar around a combination of these functions.","msgtype":"m.text","formatted_body":" * Perhaps I should implement support for structural under with ⍤<\/code> first, and then I can do the change to ⊇<\/code> by implementing it as syntactic sugar around a combination of these functions."}} {"origin_server_ts":1712891917441,"event_id":"$0PTh25u5VvjCn0Q7phf4QLBNmY97T_2vpz4sjSgohtk","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, I though that might be the case. I'm happy to take the negative indexing on vectors for now","msgtype":"m.text"}} {"origin_server_ts":1712891924126,"event_id":"$vCMOe_SKMXCnFXeUGtoiGXgNXHat6J4Geb9m3gK6GJg","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Yeah, I thought that might be the case. I'm happy to take the negative indexing on vectors for now","msgtype":"m.text"},"m.relates_to":{"event_id":"$0PTh25u5VvjCn0Q7phf4QLBNmY97T_2vpz4sjSgohtk","rel_type":"m.replace"},"m.mentions":{},"body":" * Yeah, I thought that might be the case. I'm happy to take the negative indexing on vectors for now","msgtype":"m.text"}} {"origin_server_ts":1712903016632,"event_id":"$gAl9KTrm7qyyV0hkBhap6gnJy4wJ9nt0IYz5L6RgUR0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, negative indexes now works.","msgtype":"m.text"}} {"origin_server_ts":1712903133356,"event_id":"$A5ixXIUboaDf7rhkWBaSJ78ZD_tfTtXC-M9Mxvx3V9g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Hmm... Should `⌷` and `⊃` also support it?","msgtype":"m.text","formatted_body":"Hmm... Should ⌷<\/code> and ⊃<\/code> also support it?"}} {"origin_server_ts":1712903150475,"event_id":"$S4Bli4QZUBNqSdwijwOpgtpc-S8pD5u8BwgM9UonQbM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"What about bracket index?","msgtype":"m.text"}} {"origin_server_ts":1712903357459,"event_id":"$_MDEMVkyYARv4mg33tUTBbn-Ako1QrCgZURL1zbxNgg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I guess there is no reason to not add it to all cases.","msgtype":"m.text"}} {"origin_server_ts":1712903409587,"event_id":"$mzpcSsZnNx5CuvRQk8ZfHjkTSsC-OerheP8LgnHuYXU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"And once that is done, there is certainly an argument to be made for `⍳¯4` to return `-1 -2 -3 -4`.","msgtype":"m.text","formatted_body":"And once that is done, there is certainly an argument to be made for ⍳¯4<\/code> to return -1 -2 -3 -4<\/code>."}} {"origin_server_ts":1712905422299,"event_id":"$D8Wf9wCxYxoz4iWCXzxsBgc4HbU7wL3pSnr52MmwBfk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Or should it return `-4 -3 -2 -1`? That would be controversial maybe.","msgtype":"m.text","formatted_body":"Or should it return -4 -3 -2 -1<\/code>? That would be controversial maybe."}} {"origin_server_ts":1712917448272,"event_id":"$ykRHiw9ltT0McJ9lTx-XJ57ihb8DCQf90f-4KlwuG7M","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I think it should return 5 elems, that I'm sure of.","msgtype":"m.text"}} {"origin_server_ts":1712917488663,"event_id":"$o_Swnt2Gr9unYA9lSNe3i6tHz5vAZ3Bfqc3sUj2jIdI","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"One thing I realised is that if you implement it like K, then all other array language results are available\n```\n```","msgtype":"m.text","formatted_body":"

                      One thing I realised is that if you implement it like K, then all other array language results are available<\/p>\n

                      <\/code><\/pre>\n"}}
                      {"origin_server_ts":1712917525475,"event_id":"$Bqjf9d7HyFnTKBeGKdtldwGHCi-_U7YhI3YCZ1XLgxE","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"One thing I realised is that if you implement it like K, then all other array language results are available\n```\n> i 5 ⍝ normal\n┌→────────┐\n│0 1 2 3 4│\n└─────────┘\n> i ¯5 ⍝ like K\n┌→─────────────┐\n│-5 -4 -3 -2 -1│\n└──────────────┘\n> ⌽i 5 ⍝ like J (with _5)\n┌→────────┐\n│4 3 2 1 0│\n└─────────┘\n> ⌽i ¯5 ⍝ like Uiua \n┌→─────────────┐\n│-1 -2 -3 -4 -5│\n└──────────────┘\n```","msgtype":"m.text","formatted_body":"

                      One thing I realised is that if you implement it like K, then all other array language results are available<\/p>\n

                      > i 5 ⍝ normal\n┌→────────┐\n│0 1 2 3 4│\n└─────────┘\n> i ¯5 ⍝ like K\n┌→─────────────┐\n│-5 -4 -3 -2 -1│\n└──────────────┘\n> ⌽i 5 ⍝ like J (with _5)\n┌→────────┐\n│4 3 2 1 0│\n└─────────┘\n> ⌽i ¯5 ⍝ like Uiua \n┌→─────────────┐\n│-1 -2 -3 -4 -5│\n└──────────────┘\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$o_Swnt2Gr9unYA9lSNe3i6tHz5vAZ3Bfqc3sUj2jIdI","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * One thing I realised is that if you implement it like K, then all other array language results are available\n```\n> i 5 ⍝ normal\n┌→────────┐\n│0 1 2 3 4│\n└─────────┘\n> i ¯5 ⍝ like K\n┌→─────────────┐\n│-5 -4 -3 -2 -1│\n└──────────────┘\n> ⌽i 5 ⍝ like J (with _5)\n┌→────────┐\n│4 3 2 1 0│\n└─────────┘\n> ⌽i ¯5 ⍝ like Uiua \n┌→─────────────┐\n│-1 -2 -3 -4 -5│\n└──────────────┘\n```","msgtype":"m.text","formatted_body":" * 

                      One thing I realised is that if you implement it like K, then all other array language results are available<\/p>\n

                      > i 5 ⍝ normal\n┌→────────┐\n│0 1 2 3 4│\n└─────────┘\n> i ¯5 ⍝ like K\n┌→─────────────┐\n│-5 -4 -3 -2 -1│\n└──────────────┘\n> ⌽i 5 ⍝ like J (with _5)\n┌→────────┐\n│4 3 2 1 0│\n└─────────┘\n> ⌽i ¯5 ⍝ like Uiua \n┌→─────────────┐\n│-1 -2 -3 -4 -5│\n└──────────────┘\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1712917602996,"event_id":"$BmlBhQPG75fSNfa1qstlFKbKEL2poBAaIyQrcUARSvY","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Really, the same holds if you implemented Uiua style ... then K's version would be the reverse.","msgtype":"m.text"}}
                      {"origin_server_ts":1712917627649,"event_id":"$tTYe4u5xuvjGKf-u_dyYYAJbpzoqqKOqMYN8f8AI9WU","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"FWIW, I implemented `i` like `i ⇐ {if (⍵>0) {⍳⍵} else {⍳⍛-|⍵}}`","msgtype":"m.text","formatted_body":"FWIW, I implemented i<\/code> like i ⇐ {if (⍵>0) {⍳⍵} else {⍳⍛-|⍵}}<\/code>"}}
                      {"origin_server_ts":1712917648387,"event_id":"$tj9DbJvRswzsJIx00BGG3SMMPVUetaz__wuHyhcAiGo","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"FWIW, I implemented `i` like `i ⇐ {if (⍵≥0) {⍳⍵} else {⍳⍛-|⍵}}`","msgtype":"m.text","formatted_body":"FWIW, I implemented i<\/code> like i ⇐ {if (⍵≥0) {⍳⍵} else {⍳⍛-|⍵}}<\/code>"},"m.relates_to":{"event_id":"$tTYe4u5xuvjGKf-u_dyYYAJbpzoqqKOqMYN8f8AI9WU","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * FWIW, I implemented `i` like `i ⇐ {if (⍵≥0) {⍳⍵} else {⍳⍛-|⍵}}`","msgtype":"m.text","formatted_body":" * FWIW, I implemented i<\/code> like i ⇐ {if (⍵≥0) {⍳⍵} else {⍳⍛-|⍵}}<\/code>"}}
                      {"origin_server_ts":1712917739101,"event_id":"$joc4MRMiHsrhx5Kh7tCE38ZD0U0d6NkyPpmMFGhZIIw","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Then what  do you do with mixed values like `⍳ 5 ¯5`  😵 ","msgtype":"m.text","formatted_body":"Then what  do you do with mixed values like ⍳ 5 ¯5<\/code>  😵"}}
                      {"origin_server_ts":1712917838017,"event_id":"$rgtnp9acNY4sAFy5MuiRzjNansNAVTk8ByDQq5dDSFY","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I'm thinking you punt on `⍳` with negative numbers for now... Too many rabbit holes","msgtype":"m.text","formatted_body":"I'm thinking you punt on ⍳<\/code> with negative numbers for now... Too many rabbit holes"}}
                      {"origin_server_ts":1712918546833,"event_id":"$tN73eMyntlATuCfKRJ0UcazGcU2XmnCz0j-pdCxOKHA","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"This negative number stuff also reminds me of \"Problem 2: Reshaping Reshape\" from the Dyalog student competition 2022 [Link](https://www.dyalog.com/uploads/files/student_competition/2022_problems_phase2.pdf)","msgtype":"m.text","formatted_body":"This negative number stuff also reminds me of \"Problem 2: Reshaping Reshape\" from the Dyalog student competition 2022 Link<\/a>"}}
                      {"origin_server_ts":1712919509909,"event_id":"$bkwgNLOis-EMLquLcFOhb5LSCp9Zus5sLlcXtlMymfM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, negative indexes is now supported for squad and also bracket indexing","msgtype":"m.text"}}
                      {"origin_server_ts":1712919609679,"event_id":"$01PoFgPVfIxr3_h0QIua8_zvwqbTCu1hdVM87K_7Jsk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Wait, you're saying that `⍳¯1` should return 2 elements?","msgtype":"m.text","formatted_body":"Wait, you're saying that ⍳¯1<\/code> should return 2 elements?"}}
                      {"origin_server_ts":1712920602057,"event_id":"$nB0tI5lI-VcsUuNTEoqlA4LyrVMGewox04Vl6p1Y-YQ","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"body":"Sorry, no. ","msgtype":"m.text"}}
                      {"origin_server_ts":1712920702077,"event_id":"$m_p1LP4veSvysn7DN6Xyn4AHcPKYr1_Qg1M7qx-4Amg","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"body":"If you implement `⍳¯n` it should return `n` elements","msgtype":"m.text"}}
                      {"origin_server_ts":1712925630768,"event_id":"$pXFJpUWvKIjewku4SdyTbNrK5_WTDIQIUQ9BXKK157A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Right, that does indeed make sense.","msgtype":"m.text"}}
                      {"origin_server_ts":1712925783017,"event_id":"$ZzC4kl-wxxmU7o5AOm0yxXzbKZPLF5YSVAoZsfFzyFY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Hmm... It's difficult to create a general fast implementation of structural under for `⊆`. My current implementation is very generic, but it does end up creating a large array that indicates whether a certain cell should take on its old value or the new one.","msgtype":"m.text","formatted_body":"Hmm... It's difficult to create a general fast implementation of structural under for ⊆<\/code>. My current implementation is very generic, but it does end up creating a large array that indicates whether a certain cell should take on its old value or the new one."}}
                      {"origin_server_ts":1712943301290,"event_id":"$GkseWnDhpkYRA341cLXjG8ks6eekKjfiqb7MW8o7Xy4","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I am trying to continue a line as described in the docs, but there is no info on how to enter the \"key prefix\" back-tick  character at the end of the line in the GUI.  I had to change the settings/key prefix char to something else, type in `  and revert the settings back to `   ???","msgtype":"m.text","formatted_body":"I am trying to continue a line as described in the docs, but there is no info on how to enter the \"key prefix\" back-tick  character at the end of the line in the GUI.  I had to change the settings/key prefix char to something else, type in  and revert the settings back to<\/code>   ???"}}
                      {"origin_server_ts":1712943941344,"event_id":"$JXffVwLBrfaxc3FIRdrBQZes5oMu4UfmUR27UYn9MJU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Backquote followed by space. ","msgtype":"m.text"}}
                      {"origin_server_ts":1712943954447,"event_id":"$EL4Ao6DMqsSnDWnAzUabT_7ZjG2r3355Nl6JPRJ5jJ0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I thought it's mentioned on the start page? ","msgtype":"m.text"}}
                      {"origin_server_ts":1712944003901,"event_id":"$p9kocpJ54oidG6aMY73fXz0YgJarb7XAQJbf6Ke5O78","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"At least the web version says this: \"To type special characters, type a backquote (`) followed by the respective key. To type a backquote, type backquote followed by space.\"","msgtype":"m.text"}}
                      {"origin_server_ts":1712944030844,"event_id":"$dFH6EJnW8d0XEVflK4ZqraRddR_ZhQoBShPIata2IwA","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"thanks","msgtype":"m.text"}}
                      {"origin_server_ts":1712944033634,"event_id":"$Dsbdik7HmwPCr70mjGYyyTeLKZDCPFr074syq9nWDbs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Maybe I can use key styling in that text to make it stand out a bit more. ","msgtype":"m.text"}}
                      {"origin_server_ts":1712944504187,"event_id":"$vSef6aLyQLKNjTLhO6fPXoukOvxy7Hs9I7eJzU6clr0","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I  don't usually use the web version, just the local javaFX based gui   or the linux text.  It is not mentioned on the start page on my gui client.  Just \"Use the prefix key ` to insert special characters.\" ","msgtype":"m.text"}}
                      {"origin_server_ts":1712944538838,"event_id":"$w06CvC8GNuT7TJFJ-C6puw9_lxuYmCEfCqfoEW1l-sQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh I see. I disable the welcome text myself so I don't remember what it looks like. ","msgtype":"m.text"}}
                      {"origin_server_ts":1712944549386,"event_id":"$srRXCOo-K9wvWN4YkP_p8Ftjz5nz2nOEXcTFbxiEGm4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I will fix this. Thanks for telling me","msgtype":"m.text"}}
                      {"origin_server_ts":1713309705214,"event_id":"$kcU7Rrbsjd00RCF80cTH2nXCACvUBg50oNyIWVlR7Fg","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Is there a way to get to extract the real and imaginary part of complex numbers? (`9 11∘.○` in Dyalog)","msgtype":"m.text","formatted_body":"Is there a way to get to extract the real and imaginary part of complex numbers? (9 11∘.○<\/code> in Dyalog)"}}
                      {"origin_server_ts":1713326601047,"event_id":"$uSMY_MiQ1KN2bpDmRRmIECdVfZKpLO8VOAlzOtuLr0o","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Maybe need to add a `math:reals`","msgtype":"m.text","formatted_body":"Maybe need to add a math:reals<\/code>"}}
                      {"origin_server_ts":1713329751824,"event_id":"$tKBY3HgJ-o38bjmAEKOAK9GTHxcF2BV_0ZdOzbnngsE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"You're right, there are no implementation of those built-in.","msgtype":"m.text"}}
                      {"origin_server_ts":1713329753389,"event_id":"$EG9ZmsnbAS4DU9qQLsll46S5iXgRIQ6doSlXxdKYTLI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"You can implement them like this:\n```\nimagpart ⇐ (2÷⍨-∘+)\nrealpart ⇐ (-∘imagpart)\n```","msgtype":"m.text","formatted_body":"

                      You can implement them like this:<\/p>\n

                      imagpart ⇐ (2÷⍨-∘+)\nrealpart ⇐ (-∘imagpart)\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1713329767235,"event_id":"$fEhQcfx2qDx6ewQctntIHMqeiSuyG7EXGWXPpvH_80Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"You can implement them like this:\n\n```\nimagpart ⇐ 2÷⍨-∘+\nrealpart ⇐ -∘imagpart\n```","msgtype":"m.text","formatted_body":"

                      You can implement them like this:<\/p>\n

                      imagpart ⇐ 2÷⍨-∘+\nrealpart ⇐ -∘imagpart\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$EG9ZmsnbAS4DU9qQLsll46S5iXgRIQ6doSlXxdKYTLI","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * You can implement them like this:\n\n```\nimagpart ⇐ 2÷⍨-∘+\nrealpart ⇐ -∘imagpart\n```","msgtype":"m.text","formatted_body":" * 

                      You can implement them like this:<\/p>\n

                      imagpart ⇐ 2÷⍨-∘+\nrealpart ⇐ -∘imagpart\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1713331088913,"event_id":"$KJtBwLmpKo5F8MBVXXHlNIql2tb_ulF4ppUUQ1BnXyg","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"`imagpart`  still returns a Complex\n```\n> imagpart 18j¯4\n0.0J-4.0\n```","msgtype":"m.text","formatted_body":"

                      imagpart<\/code> still returns a Complex<\/p>\n

                      > imagpart 18j¯4\n0.0J-4.0\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1713332353933,"event_id":"$Z-D0J5y3XSbdDeZzLRXhidCv7128dqtng-rtVYzP3og","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oops","msgtype":"m.text"}}
                      {"origin_server_ts":1713332410934,"event_id":"$UzNADA_9g2MS-gOUO-xGrUEqlY4IbQW1nbpbut-07OE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Just multiply by 0j1","msgtype":"m.text"}}
                      {"origin_server_ts":1713336275039,"event_id":"$JbWdt4qrwV15unidN19b5_d9P3yDmXYE5pTlrbUwYMc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Sorry, multiply by `0j¯11","msgtype":"m.text"}}
                      {"origin_server_ts":1713336278023,"event_id":"$deviinfZXWbi3iDPxC332hyjZL-wQouihjZOS94fJjc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Sorry, multiply by \\`0j¯11`","msgtype":"m.text","formatted_body":"Sorry, multiply by `0j¯11`"},"m.relates_to":{"event_id":"$JbWdt4qrwV15unidN19b5_d9P3yDmXYE5pTlrbUwYMc","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Sorry, multiply by \\`0j¯11`","msgtype":"m.text","formatted_body":" * Sorry, multiply by `0j¯11`"}}
                      {"origin_server_ts":1713336284972,"event_id":"$uxGt2OWpWhCe1NjNG1CRnTZw5d-gw2sgSq-tzIX0cQk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Sorry, multiply by `0j¯11`","msgtype":"m.text","formatted_body":"Sorry, multiply by 0j¯11<\/code>"},"m.relates_to":{"event_id":"$JbWdt4qrwV15unidN19b5_d9P3yDmXYE5pTlrbUwYMc","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Sorry, multiply by `0j¯11`","msgtype":"m.text","formatted_body":" * Sorry, multiply by 0j¯11<\/code>"}}
                      {"origin_server_ts":1713336290314,"event_id":"$H0Y5rQ7O5CxyUG3o6RCsu4FzW49EzRd0otbGvTncBEo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Sorry, multiply by `0j¯1`","msgtype":"m.text","formatted_body":"Sorry, multiply by 0j¯1<\/code>"},"m.relates_to":{"event_id":"$JbWdt4qrwV15unidN19b5_d9P3yDmXYE5pTlrbUwYMc","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Sorry, multiply by `0j¯1`","msgtype":"m.text","formatted_body":" * Sorry, multiply by 0j¯1<\/code>"}}
                      {"origin_server_ts":1713371043460,"event_id":"$jmUGytY0txHQVp5jiEurcOOOGX7ZVk7VjVRGaHRhHIM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"What should the functions to extract the real and imaginary parts of a complex number be called? Some alternatives, all in the `math` namespace: `re`/`im`, `Re`/`Im`, `realpart`/`imagpart` (from CL), `real`/`imaginary`. ","msgtype":"m.text","formatted_body":"What should the functions to extract the real and imaginary parts of a complex number be called? Some alternatives, all in the math<\/code> namespace: re<\/code>/im<\/code>, Re<\/code>/Im<\/code>, realpart<\/code>/imagpart<\/code> (from CL), real<\/code>/imaginary<\/code>."}}
                      {"origin_server_ts":1713371152991,"event_id":"$QPgiY2sXgGRmnB3Vj-bbP3IO3NznRoQT0fU-uImOFek","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I'll add `9○` and `11○`, but only for reference. I'd like them to have real names.","msgtype":"m.text","formatted_body":"I'll add 9○<\/code> and 11○<\/code>, but only for reference. I'd like them to have real names."}}
                      {"origin_server_ts":1713371399734,"event_id":"$A4S2_Ve2FWpTXzjxA1EiZuDRYLgCE4x7nU23ZMUMBbk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"And let me fix the implementations:\n```\nrealpart ⇐ 2÷⍨+∘+\nimagpart ⇐ 0j¯1×-∘r\n```","msgtype":"m.text","formatted_body":"

                      And let me fix the implementations:<\/p>\n

                      realpart ⇐ 2÷⍨+∘+\nimagpart ⇐ 0j¯1×-∘r\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1713371413021,"event_id":"$ft0oPdWdfmC2SuWJeTSlWhaoz5EWfAv2EMvPbkSej8k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"And let me fix the implementations:\n\n```\nrealpart ⇐ 2÷⍨+∘+\nimagpart ⇐ 0j¯1×-∘realpart\n```","msgtype":"m.text","formatted_body":"

                      And let me fix the implementations:<\/p>\n

                      realpart ⇐ 2÷⍨+∘+\nimagpart ⇐ 0j¯1×-∘realpart\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$A4S2_Ve2FWpTXzjxA1EiZuDRYLgCE4x7nU23ZMUMBbk","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * And let me fix the implementations:\n\n```\nrealpart ⇐ 2÷⍨+∘+\nimagpart ⇐ 0j¯1×-∘realpart\n```","msgtype":"m.text","formatted_body":" * 

                      And let me fix the implementations:<\/p>\n

                      realpart ⇐ 2÷⍨+∘+\nimagpart ⇐ 0j¯1×-∘realpart\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1713400310045,"event_id":"$CMjQMfGmBxpXviioVdwb-fbBl3mYcrJtdCN5PQhWZfI","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I'm a sucker for making them similar length, so I'd say either `re`/`im`, or `real`/`imag`.\nBut often I want both, and it would suck to have to do `math:real c , math:imag c`\n\nI got the `reals` name from Raku, so there's prior art for that term.\n```\n > my \\c = 18-4i\n18-4i\n > (c.re, c.im)\n(18 -4)\n > c.reals\n(18 -4)\n```\nI'm not sure if there's a generally accepted name for getting both numbers","msgtype":"m.text","formatted_body":"

                      I'm a sucker for making them similar length, so I'd say either re<\/code>/im<\/code>, or real<\/code>/imag<\/code>.
                      But often I want both, and it would suck to have to do math:real c , math:imag c<\/code><\/p>\n

                      I got the reals<\/code> name from Raku, so there's prior art for that term.<\/p>\n

                       > my \\c = 18-4i\n18-4i\n > (c.re, c.im)\n(18 -4)\n > c.reals\n(18 -4)\n<\/code><\/pre>\n

                      I'm not sure if there's a generally accepted name for getting both numbers<\/p>\n"}} {"origin_server_ts":1713400314779,"event_id":"$mGnO1w1vChTu_UoWso1IWqRM8J6NKjx1MF_UPPcPzCs","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I'm a sucker for making them samelength, so I'd say either `re`/`im`, or `real`/`imag`.\nBut often I want both, and it would suck to have to do `math:real c , math:imag c`\n\nI got the `reals` name from Raku, so there's prior art for that term.\n\n```\n > my \\c = 18-4i\n18-4i\n > (c.re, c.im)\n(18 -4)\n > c.reals\n(18 -4)\n```\n\nI'm not sure if there's a generally accepted name for getting both numbers","msgtype":"m.text","formatted_body":"

                      I'm a sucker for making them samelength, so I'd say either re<\/code>/im<\/code>, or real<\/code>/imag<\/code>.
                      But often I want both, and it would suck to have to do math:real c , math:imag c<\/code><\/p>\n

                      I got the reals<\/code> name from Raku, so there's prior art for that term.<\/p>\n

                       > my \\c = 18-4i\n18-4i\n > (c.re, c.im)\n(18 -4)\n > c.reals\n(18 -4)\n<\/code><\/pre>\n

                      I'm not sure if there's a generally accepted name for getting both numbers<\/p>\n"},"m.relates_to":{"event_id":"$CMjQMfGmBxpXviioVdwb-fbBl3mYcrJtdCN5PQhWZfI","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * I'm a sucker for making them samelength, so I'd say either `re`/`im`, or `real`/`imag`.\nBut often I want both, and it would suck to have to do `math:real c , math:imag c`\n\nI got the `reals` name from Raku, so there's prior art for that term.\n\n```\n > my \\c = 18-4i\n18-4i\n > (c.re, c.im)\n(18 -4)\n > c.reals\n(18 -4)\n```\n\nI'm not sure if there's a generally accepted name for getting both numbers","msgtype":"m.text","formatted_body":" *

                      I'm a sucker for making them samelength, so I'd say either re<\/code>/im<\/code>, or real<\/code>/imag<\/code>.
                      But often I want both, and it would suck to have to do math:real c , math:imag c<\/code><\/p>\n

                      I got the reals<\/code> name from Raku, so there's prior art for that term.<\/p>\n

                       > my \\c = 18-4i\n18-4i\n > (c.re, c.im)\n(18 -4)\n > c.reals\n(18 -4)\n<\/code><\/pre>\n

                      I'm not sure if there's a generally accepted name for getting both numbers<\/p>\n"}} {"origin_server_ts":1713400318017,"event_id":"$0GYs1wl9p1yFh0tFWbGimPLZGvPMJEoqEH1yW1um6i4","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I'm a sucker for making them same length, so I'd say either `re`/`im`, or `real`/`imag`.\nBut often I want both, and it would suck to have to do `math:real c , math:imag c`\n\nI got the `reals` name from Raku, so there's prior art for that term.\n\n```\n > my \\c = 18-4i\n18-4i\n > (c.re, c.im)\n(18 -4)\n > c.reals\n(18 -4)\n```\n\nI'm not sure if there's a generally accepted name for getting both numbers","msgtype":"m.text","formatted_body":"

                      I'm a sucker for making them same length, so I'd say either re<\/code>/im<\/code>, or real<\/code>/imag<\/code>.
                      But often I want both, and it would suck to have to do math:real c , math:imag c<\/code><\/p>\n

                      I got the reals<\/code> name from Raku, so there's prior art for that term.<\/p>\n

                       > my \\c = 18-4i\n18-4i\n > (c.re, c.im)\n(18 -4)\n > c.reals\n(18 -4)\n<\/code><\/pre>\n

                      I'm not sure if there's a generally accepted name for getting both numbers<\/p>\n"},"m.relates_to":{"event_id":"$CMjQMfGmBxpXviioVdwb-fbBl3mYcrJtdCN5PQhWZfI","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * I'm a sucker for making them same length, so I'd say either `re`/`im`, or `real`/`imag`.\nBut often I want both, and it would suck to have to do `math:real c , math:imag c`\n\nI got the `reals` name from Raku, so there's prior art for that term.\n\n```\n > my \\c = 18-4i\n18-4i\n > (c.re, c.im)\n(18 -4)\n > c.reals\n(18 -4)\n```\n\nI'm not sure if there's a generally accepted name for getting both numbers","msgtype":"m.text","formatted_body":" *

                      I'm a sucker for making them same length, so I'd say either re<\/code>/im<\/code>, or real<\/code>/imag<\/code>.
                      But often I want both, and it would suck to have to do math:real c , math:imag c<\/code><\/p>\n

                      I got the reals<\/code> name from Raku, so there's prior art for that term.<\/p>\n

                       > my \\c = 18-4i\n18-4i\n > (c.re, c.im)\n(18 -4)\n > c.reals\n(18 -4)\n<\/code><\/pre>\n

                      I'm not sure if there's a generally accepted name for getting both numbers<\/p>\n"}} {"origin_server_ts":1713410055263,"event_id":"$e19k5u6fn3d7mRGc_9Cs59dp4Bf0_OGUBk-n7Lboyno","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"loke: Also, are you planning on adding Monadic `≠`\n\nhttps://aplwiki.com/wiki/Nub_Sieve","msgtype":"m.text","formatted_body":"

                      loke<\/a>: Also, are you planning on adding Monadic ≠<\/code><\/p>\n

                      https://aplwiki.com/wiki/Nub_Sieve<\/p>\n"}} {"origin_server_ts":1713410158852,"event_id":"$TT7E8ylNtvtpoUkp8q5I5TP00NshHf4xTVMuNdfsDyU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I wasnt, because I never needed it. 😀 but I could. Seems easy enough. ","msgtype":"m.text"}} {"origin_server_ts":1713410361691,"event_id":"$FnE2pGy8xUHaBiJigXgFIjGJdAFU3M2fdXkmCdLHQWQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But isn't that just `⍳⍨` or am I missing something? ","msgtype":"m.text"}} {"origin_server_ts":1713411165294,"event_id":"$88Cqoo3kWuvNSM9j03Npr12onAWM-qlXvOGEgfQybt8","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Not quite. In the vector case, `{(⍵⍳⍵)=⍳≢⍵}`\nBut I'm not sure that extends nicely to matrices.\nI've never needed it on matrices, but I would presume it to operate on major cells.","msgtype":"m.text","formatted_body":"Not quite. In the vector case, {(⍵⍳⍵)=⍳≢⍵}<\/code>
                      But I'm not sure that extends nicely to matrices.
                      I've never needed it on matrices, but I would presume it to operate on major cells."}} {"origin_server_ts":1713411199358,"event_id":"$5gAFomsFJq81LOGef3Q9aHT-sVvkMYsfL0Kq84TupUY","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Maybe just add the vector case for now if higher dim's are too hard ","msgtype":"m.text"}} {"origin_server_ts":1713411316675,"event_id":"$1RaW2ewy5khDfdwLxxIy5P-NPoFuB9UFa-8xgAEGc6Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's not hard. I just want to make sure the implementation is correct. Would you mind creating some test cases? Just inputs and expected outputs.","msgtype":"m.text"}} {"origin_server_ts":1713411327008,"event_id":"$q6_S2XTQyhNopJ1Ygwe2ikGcglt5yTfJEuIYvUix9Dk","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"That dfn works on vectors and matrics in Dyalog","msgtype":"m.text"}} {"origin_server_ts":1713411331445,"event_id":"$in1JLPUXek2TXqoGtAE7n56JmPtdQyuHVFVzqm7uvxc","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$1RaW2ewy5khDfdwLxxIy5P-NPoFuB9UFa-8xgAEGc6Q"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> It's not hard. I just want to make sure the implementation is correct. Would you mind creating some test cases? Just inputs and expected outputs.\n\nsure.","msgtype":"m.text","formatted_body":"

                      In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                      It's not hard. I just want to make sure the implementation is correct. Would you mind creating some test cases? Just inputs and expected outputs.<\/blockquote><\/mx-reply>sure."}} {"origin_server_ts":1713411408498,"event_id":"$9YQSJr0oHuzXLkOL8CAzmmhwZ54UTuam-9V1T6SqO9M","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Essentially, I'm going through my Advent of Code solutions that I've solved in other array langs, and trying to translate a Kap solution, and picking up gaps.\n\nIf you'd like, rather than mention every thing I find here, I could create issues with examples. You can close them if you have other ideas :D\n\nWould that be helpful?","msgtype":"m.text"}} {"origin_server_ts":1713411461417,"event_id":"$gWizGgf6TIm4Z3ODz54Lu7LuNmGXDgNeGMhMt9p9_Xw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It would be incredibly helpful. Thanks a lot.","msgtype":"m.text"}} {"origin_server_ts":1713411496244,"event_id":"$ydmNs5de-BTImmnzNVAYNdFQhSpGi2U9vpsWuLVpz4A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Often it takes much longer for me to come up with testcases than to actually implement a feature","msgtype":"m.text"}} {"origin_server_ts":1713412950280,"event_id":"$P-bX_TsAtn-KEngCMIkS_t-zyvK1gd6jP4fwuIHbyo8","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Hrm... APL Wiki article states that `(⍵⍳⍵)=⍳≢⍵` - well, actually `(⍳≢⍵)=⍵⍳⍵` - is a \"bad meme\"","msgtype":"m.text","formatted_body":"Hrm... APL Wiki article states that (⍵⍳⍵)=⍳≢⍵<\/code> - well, actually (⍳≢⍵)=⍵⍳⍵<\/code> - is a \"bad meme\""}} {"origin_server_ts":1713413658959,"event_id":"$1dOXBnM9eO6P2TrTxJPgiMHaqohWatfIk9KEPYQGcvI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'm away from the computer right now, but I don't see how that can be true?","msgtype":"m.text"}} {"origin_server_ts":1713421796354,"event_id":"$SgX56XpO0GJnIdWN9BgI7OGEKRLERH-gM3DMQtgwlbg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It can only be true if all elements are unique, no?","msgtype":"m.text"}} {"origin_server_ts":1713422211543,"event_id":"$6MX5wXJ1A0MLuleLsC3rFOLlctjsn0GeMdWjuHx6N1A","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I don't get what it means. The full context is.\n\n > The Unique Mask can also be derived from the self-classify or index-in-nub function (∪⍳1/⊢). The following two implementations arise from the fact that 1s in the Unique Mask appear exactly when a new value appears in the self-classify.\n\n```\n(⍳⍤≢=⍳⍨)⍤(∪⍳1/⊢) ⍝ Pre-correction of \"bad meme\" (⍳≢⍵)=⍵⍳⍵\n(2≠/¯1,⌈\\)⍤(∪⍳1/⊢) ⍝ Optimised self-classify → Nub Sieve conversion\n```","msgtype":"m.text","formatted_body":"

                      I don't get what it means. The full context is.<\/p>\n

                      \n

                      The Unique Mask can also be derived from the self-classify or index-in-nub function (∪⍳1/⊢). The following two implementations arise from the fact that 1s in the Unique Mask appear exactly when a new value appears in the self-classify.<\/p>\n<\/blockquote>\n

                      (⍳⍤≢=⍳⍨)⍤(∪⍳1/⊢)      ⍝ Pre-correction of \"bad meme\" (⍳≢⍵)=⍵⍳⍵\n(2≠/¯1,⌈\\)⍤(∪⍳1/⊢)    ⍝ Optimised self-classify → Nub Sieve conversion\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1713422246475,"event_id":"$U2cKG_iBxAKERmF05TkD8PcqF6XtGZzrn8vlKy_nlFg","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I presume \"bad meme\" means it's bad in some situations, or maybe not very performant?","msgtype":"m.text"}}
                      {"origin_server_ts":1713422491793,"event_id":"$JOrUg5_9lhzlOtKMskR6y30VMrAMRgTjM-V1OpQzMgk","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I learned of it from one of tangentstorms videos [1], which references it from a Vector article [2]. Maybe it gained a level of awareness where it was used often as _the_ way to do unique mask, when perhaps there were better ways. That's my take on what \"bad meme\" might mean\n\n[1] https://www.youtube.com/shorts/eZPDSl4H2hA\n[2] http://archive.vector.org.uk/art10011550","msgtype":"m.text","formatted_body":"

                      I learned of it from one of tangentstorms videos [1], which references it from a Vector article [2]. Maybe it gained a level of awareness where it was used often as the<\/em> way to do unique mask, when perhaps there were better ways. That's my take on what \"bad meme\" might mean<\/p>\n

                      [1] https://www.youtube.com/shorts/eZPDSl4H2hA
                      [2] http://archive.vector.org.uk/art10011550<\/p>\n"}} {"origin_server_ts":1713423302355,"event_id":"$9ta4v7NAwzdO_ELgBwDQOZ2YoVCZXbvdqUNou-0To_U","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Ok, upon going over this... the `(⍳⍤≢=⍳⍨)` part is identical to the dfn.\n\"pre-correction\" is just doing `(∪⍳1/⊢)` to convert scalars to vectors.","msgtype":"m.text","formatted_body":"Ok, upon going over this... the (⍳⍤≢=⍳⍨)<\/code> part is identical to the dfn.
                      \"pre-correction\" is just doing (∪⍳1/⊢)<\/code> to convert scalars to vectors."}} {"origin_server_ts":1713423322295,"event_id":"$6cxbXouxEsFBFw7--Z6icYv1qDZfGomdOpfzyAH-ruU","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Kap version: `((⍳≢)«=»(⍳⍨)∪«⍳»(1/⊢))`","msgtype":"m.text","formatted_body":"Kap version: ((⍳≢)«=»(⍳⍨)∪«⍳»(1/⊢))<\/code>"}} {"origin_server_ts":1713423571036,"event_id":"$Jmrs10CIk3EeoLDxso6IcqLYnC_rVHnLN6m9wk4mZ5w","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"So my \"bad in some situations\" was right... where that situation was scalar args","msgtype":"m.text"}} {"origin_server_ts":1713424032402,"event_id":"$eg0AtlNaxBWboc871t9vtxSPJLTXbfg6SAAhaqeL2u8","sender":"@elcar0:matrix.org","user_id":"@elcar0:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Second Kap version: `(2≠/¯1,⌈\\∪«⍳»(1/⊢))`","msgtype":"m.text","formatted_body":"Second Kap version: (2≠/¯1,⌈\\∪«⍳»(1/⊢))<\/code>"}} {"origin_server_ts":1713429058508,"event_id":"$K9MXax4L9t6Td3ZzzPViA5oHEZWPk2X2eZGU1oucDbk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks. I'll look at this when I get home. I'm at the blavk hat conference right now.","msgtype":"m.text"}} {"origin_server_ts":1713430362515,"event_id":"$1F3JH_3dMkjxThdyn_b2H-nq1VpLAZ-Vj3TTyvjtueY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"body":"Black hatting like a pro 😎","msgtype":"m.text"}} {"origin_server_ts":1713430529617,"event_id":"$A9j-ayR2dwSaWmhTVasIm55ePIRU4m2aCndOBnn2paw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I guess I am a pro. I'm doibg thison paid time. 😀","msgtype":"m.text"}} {"origin_server_ts":1713430555021,"event_id":"$l9hfbM20WEqLRPhqjYroqP7zAJuCPS6CHhasrJcUBz4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$A9j-ayR2dwSaWmhTVasIm55ePIRU4m2aCndOBnn2paw","rel_type":"m.annotation","key":"😄"}}} {"origin_server_ts":1713439922483,"event_id":"$dk0UIjc-64pFs7SS-7tcdySXZcnU-ZMZzBLvY9yiG2k","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The problem with `⍳⍤≢=⍳⍨` is that it gets the wrong result if there's tolerant comparison. I don't think Kap has this so it should be okay? There's a little more description of this issue on the [Unique](https://aplwiki.com/wiki/Unique) page.","msgtype":"m.text","formatted_body":"The problem with ⍳⍤≢=⍳⍨<\/code> is that it gets the wrong result if there's tolerant comparison. I don't think Kap has this so it should be okay? There's a little more description of this issue on the
                      Unique<\/a> page."}} {"origin_server_ts":1713443160811,"event_id":"$K6EqoCzDM-23VLtM8L8j7EpmKBCAXfc6iihF19WIaz4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You're right. There is no tolerant comparisons. Thanks for mentioning it, I never thought about that.","msgtype":"m.text"}} {"origin_server_ts":1713448097286,"event_id":"$c63aNSttSqJuVTGRqwN40AbrtWwjzugJThU2SWsDqfo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Design question: What should the following return? `(10+)⍢(2⍴) 1 2 3`","msgtype":"m.text","formatted_body":"Design question: What should the following return? (10+)⍢(2⍴) 1 2 3<\/code>"}} {"origin_server_ts":1713448143885,"event_id":"$AuajGobYpyewb4fCM6jLH_FIAFTPWrjYHKBu2o4B_2g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: Speaking of tolerant comparison, I could implement `≈` to do that?","msgtype":"m.text","formatted_body":"Marshall<\/a>: Speaking of tolerant comparison, I could implement ≈<\/code> to do that?"}} {"origin_server_ts":1713448189928,"event_id":"$DXRdzjOePHDUgf294toAu37TY6SwGGvwhbBj0zc5QRw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"And this, as a `≡` analogue: `≅`","msgtype":"m.text","formatted_body":"And this, as a ≡<\/code> analogue: ≅<\/code>"}} {"origin_server_ts":1713448537979,"event_id":"$JJVMHrgl5olzLko73hLiQpjfVWCicH7vomRig_gcKA4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Well the formula's not hard to use and adjust in user-space, so I'd probably leave that up to the programmer. The usefulness of having built-in tolerance would be that search functions use it too, but that's hard to implement with decent performance and often isn't wanted.","msgtype":"m.text","formatted_body":"Well the formula's not hard to use and adjust in user-space, so I'd probably leave that up to the programmer. The usefulness of having built-in tolerance would be that search functions use it too, but that's hard to implement with decent performance and often isn't wanted."}} {"origin_server_ts":1713451866044,"event_id":"$3eLibHQ6-O1btiQro6yFd6NUupZ3YlODN8ifXAPycaw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Fair enough.","msgtype":"m.text"}} {"origin_server_ts":1713451876422,"event_id":"$Vj4-V5L50glHcbiTw3yRW84DIZZ8pYk-gI6MW8U_RVk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"What about structural under with reshape?","msgtype":"m.text"}} {"origin_server_ts":1713455071543,"event_id":"$zhFaelCz0VLMJspZVDq-f-FNR3VgnWPu9DoMO9VG3YU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"With the general definition it's the same as `⍢(2↑)` in that case. If two functions pick out the same elements, and structural Under is defined for both, it should invert the same way.","msgtype":"m.text","formatted_body":"With the general definition it's the same as ⍢(2↑)<\/code> in that case. If two functions pick out the same elements, and structural Under is defined for both, it should invert the same way."}} {"origin_server_ts":1713455759527,"event_id":"$c6xQJTgytmjt3nmzPUCPJIJ5L1AyHdQiXYom56eunpY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"So it should return `11 12 3`?","msgtype":"m.text","formatted_body":"So it should return 11 12 3<\/code>?"}} {"origin_server_ts":1713455831194,"event_id":"$8uvD1-54YHHm-8P1CkoMb4sB7t8hQ2_gYiHwhaKtct8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"What about this one then? `(10 20 30 40 50+)⍢(5⍴) 1 2`?","msgtype":"m.text","formatted_body":"What about this one then? (10 20 30 40 50+)⍢(5⍴) 1 2<\/code>?"}} {"origin_server_ts":1713456098442,"event_id":"$ZUrET8Y3VKZsd7pmtQZ-Hz1JicMtI2qyT0m7rZQeXuA","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Should be an error under any definition, since there's no length-2 list `l` where `5⍴l` is `11 22 31 42 51`. Unless you just want to discard the argument shape, but I don't think that's useful.","msgtype":"m.text","formatted_body":"Should be an error under any definition, since there's no length-2 list l<\/code> where 5⍴l<\/code> is 11 22 31 42 51<\/code>. Unless you just want to discard the argument shape, but I don't think that's useful."}} {"origin_server_ts":1713456190146,"event_id":"$xC7TLypyDA0hn4r70SeNfFA16oizvMeMpxgMxjd77w8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"BQN checks that values that correspond to the same original position are compatible, so it gives an error for your expression but can do the inverse if the added array is `10 20 10 20 10`.","msgtype":"m.text","formatted_body":"BQN checks that values that correspond to the same original position are compatible, so it gives an error for your expression but can do the inverse if the added array is 10 20 10 20 10<\/code>."}} {"origin_server_ts":1713456694387,"event_id":"$0_7CuPB452n82tTLia8e9jTUdlnk5Ll4Eom9537669M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$ZUrET8Y3VKZsd7pmtQZ-Hz1JicMtI2qyT0m7rZQeXuA"}},"format":"org.matrix.custom.html","body":"> <@mlochbaum:matrix.org> Should be an error under any definition, since there's no length-2 list `l` where `5⍴l` is `11 22 31 42 51`. Unless you just want to discard the argument shape, but I don't think that's useful.\n\nA simpler solution would be to simply reapply the original shape, regardless what the value was.","msgtype":"m.text","formatted_body":"

                      In reply to<\/a> @mlochbaum:matrix.org<\/a>
                      Should be an error under any definition, since there's no length-2 list l<\/code> where 5⍴l<\/code> is 11 22 31 42 51<\/code>. Unless you just want to discard the argument shape, but I don't think that's useful.<\/blockquote><\/mx-reply>A simpler solution would be to simply reapply the original shape, regardless what the value was."}} {"origin_server_ts":1713456747308,"event_id":"$tlMLgb7nOsI2t94sod_nRrGle8Cr_jgtyDGshIyl-Vs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think in pretty much all cases where doing an under reshape is useful, such definition would be acceptable. But I agree it's leaa formally robust.","msgtype":"m.text"}} {"origin_server_ts":1713456788933,"event_id":"$s7G0Ct7Y2FAHLfxwoeeb0OHJKyxflgQ9fVe8OyUZY2Q","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"you lose `(F G x) ≡ G F⍢G x` which is like _the_ Under property","msgtype":"m.text","formatted_body":"you lose (F G x) ≡ G F⍢G x<\/code> which is like the<\/i> Under property"}} {"origin_server_ts":1713457115968,"event_id":"$eBrBjK9hukZkhRLV_zIvWHs0eLYvMYCjgUdGRTdI39Y","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It's probably not going to break anything, but the argument is more along the lines of no one will use it rather than it's actually the correct result. A definition based on sequential overwriting would end up construct the result from the last `⍴⍵` elements instead of the first ones. If the elements are different there's no way to know which one should be chosen.","msgtype":"m.text","formatted_body":"It's probably not going to break anything, but the argument is more along the lines of no one will use it rather than it's actually the correct result. A definition based on sequential overwriting would end up construct the result from the last ⍴⍵<\/code> elements instead of the first ones. If the elements are different there's no way to know which one should be chosen."}} {"origin_server_ts":1713457131504,"event_id":"$evT20euTKxta13kprJxhrzHxn6WR-RkSmGIPy_-fhlQ","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"It's probably not going to break anything, but the argument is more along the lines of no one will use it rather than it's actually the correct result. A definition based on sequential overwriting would end up constructing the result from the last `⍴⍵` elements instead of the first ones. If the elements are different there's no way to know which one should be chosen.","msgtype":"m.text","formatted_body":"It's probably not going to break anything, but the argument is more along the lines of no one will use it rather than it's actually the correct result. A definition based on sequential overwriting would end up constructing the result from the last ⍴⍵<\/code> elements instead of the first ones. If the elements are different there's no way to know which one should be chosen."},"m.relates_to":{"event_id":"$eBrBjK9hukZkhRLV_zIvWHs0eLYvMYCjgUdGRTdI39Y","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* It's probably not going to break anything, but the argument is more along the lines of no one will use it rather than it's actually the correct result. A definition based on sequential overwriting would end up constructing the result from the last `⍴⍵` elements instead of the first ones. If the elements are different there's no way to know which one should be chosen.","msgtype":"m.text","formatted_body":"* It's probably not going to break anything, but the argument is more along the lines of no one will use it rather than it's actually the correct result. A definition based on sequential overwriting would end up constructing the result from the last ⍴⍵<\/code> elements instead of the first ones. If the elements are different there's no way to know which one should be chosen."}} {"origin_server_ts":1713460514757,"event_id":"$iA6EXYgPHYQqeYhBEBw_Rrt9cNEWgSC0n8-izJOLD_8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh I agree with both of you. It's just that the practical implementation is simpler if one doesn't have to verify that the values conform with the allowed forms","msgtype":"m.text"}} {"origin_server_ts":1713460530732,"event_id":"$OHap7jVzOilRoF9PznV1nyFVHlmSdVc39-syKUqmGR8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Oh I agree with both of you. It's just that the practical implementation is simpler if one doesn't have to verify that the values conform with the allowed form","msgtype":"m.text"},"m.relates_to":{"event_id":"$iA6EXYgPHYQqeYhBEBw_Rrt9cNEWgSC0n8-izJOLD_8","rel_type":"m.replace"},"body":"* Oh I agree with both of you. It's just that the practical implementation is simpler if one doesn't have to verify that the values conform with the allowed form","msgtype":"m.text"}} {"origin_server_ts":1713460552056,"event_id":"$re-NWXO4Jxp92h3GVxOGXQHtfD0iWNl5WgQzbRP2F5w","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that I do agree with, but you did start with \"Design question:\"","msgtype":"m.text","formatted_body":"that I do agree with, but you did start with \"Design question:\""}} {"origin_server_ts":1713460578040,"event_id":"$y3ThRsTPImv2oBdEtaLftEaIAKOgUkiKrKIhHVxJS6o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"True. That's on me","msgtype":"m.text"}} {"origin_server_ts":1713460670697,"event_id":"$C3rH2aWyh0YSNr149mU28bWYrDeknA8TKzUPoyzWuNo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"How useful is under on reshape in practice? Perhaps if should just support it if the total size of the arrays match. That's the easiest way to always be formally correct and it's very easy to check. ","msgtype":"m.text"}} {"origin_server_ts":1713460674448,"event_id":"$xk_PVG4NOgeX7qprMYlTjyTfz_XfrbIfEtAF4RTUkls","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima/APL and dzaima/BQN take a similar shortcut for under select (i.e. `\"def\"⍢(1 1 1⊇) \"abc\"` and `\"def\"⌾(0\u203f0\u203f0⊸⊏) \"abc\"` give `\"fbc\"`) and CBQN has a compile-time option to disable the extra checking","msgtype":"m.text","formatted_body":"dzaima/APL and dzaima/BQN take a similar shortcut for under select (i.e. \"def\"⍢(1 1 1⊇) \"abc\"<\/code> and \"def\"⌾(0\u203f0\u203f0⊸⊏) \"abc\"<\/code> give \"fbc\"<\/code>) and CBQN has a compile-time option to disable the extra checking"}} {"origin_server_ts":1713460702452,"event_id":"$tNRFJEOYlMKCXSO90MaqgV-zK0F4BY4MdC_DwlAd_7k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I can't think of any good example where the extended version would be useful","msgtype":"m.text"}} {"origin_server_ts":1713460724130,"event_id":"$-wTRsgXIcF50P2e8v5prA5-YW2ys0aDTuYoTNwqE9-U","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(and dzaima/APL/BQN error on under with too-large-reshape unconditionally in general)","msgtype":"m.text","formatted_body":"(and dzaima/APL/BQN error on under with too-large-reshape unconditionally in general)"}} {"origin_server_ts":1713460756291,"event_id":"$AWbMNFeANeYnoDpVhZJqajjoGNn63bn6YWFj1I6Jv_A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ah thanks. ","msgtype":"m.text"}} {"origin_server_ts":1713460785644,"event_id":"$f3OifdxV_0a-GC1GmYzIPCp7f7YwMvieaYTbTMixLkw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If its easy to do, I'll just build it to be compatible with BQN","msgtype":"m.text"}} {"origin_server_ts":1713460804626,"event_id":"$Z6g-jxbDB8m2C3MZqQ-jhv7K-Vb-iGI3NGCwCWaECUw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Always good advice in my experience","msgtype":"m.text"}} {"origin_server_ts":1713464099763,"event_id":"$4H96tHaWd0J4sSfAMO1n6IrsPKjZVZbIKOIMSKT94qo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I don't know if I've ever used under-reshape, just under-ravel. Hard to imagine Under with cyclic reshape being useful, since it's throwing out data.","msgtype":"m.text","formatted_body":"I don't know if I've ever used under-reshape, just under-ravel. Hard to imagine Under with cyclic reshape being useful, since it's throwing out data."}} {"origin_server_ts":1713524173266,"event_id":"$E-Gh-eatOcE0ovWcdXSTJP8l5IoLznyxSjTvmd3b_pE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right. And under reshape without cyclic seems really quite useless.","msgtype":"m.text"}} {"origin_server_ts":1713524376747,"event_id":"$EcFJ90e9K7oOamodHnJ70PK-4uqNz3UC7Jg91bBksRg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Why isn't dyadic union returning the elements that are shared between the two arrays?","msgtype":"m.text"}} {"origin_server_ts":1713527056567,"event_id":"$SE3NbR38ZSnFXPJxEZxezC7YS47axYhNGAnL5lX-olM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The Dyalog version appears to be implemented like Kap, which is just the train ∪,","msgtype":"m.text"}} {"origin_server_ts":1713537264443,"event_id":"$vn0uYcUydZ0XsU7TgjLuc9QRmXBi4BCWntvfecNS9uY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"The Dyalog version appears to be implemented like Kap, which is just the train `∪,`","msgtype":"m.text","formatted_body":"The Dyalog version appears to be implemented like Kap, which is just the train ∪,<\/code>"},"m.relates_to":{"event_id":"$SE3NbR38ZSnFXPJxEZxezC7YS47axYhNGAnL5lX-olM","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * The Dyalog version appears to be implemented like Kap, which is just the train `∪,`","msgtype":"m.text","formatted_body":" * The Dyalog version appears to be implemented like Kap, which is just the train ∪,<\/code>"}} {"origin_server_ts":1713608265594,"event_id":"$EwTJzeEot8nvJxKLaAfGYTnQZzjN95yLOKtNSZiy428","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Here's a version of 2048: [Play in the browser](https://kapdemo.dhsdevelopments.com/clientweb2/#c=YWRkRWxlbWVudCDih5Age+KNtSArICjijbTijbUpIOKNtCAyw5cgKOKNs+KGkeKNtHEpID0gKD8rL3EpIOKMtyAoceKGkCzijbU9MCkgLyDijbPDly/ijbTijbV9CmMg4oeQIHsgNCDihpEgeyDiioMgLC8geyArL8KoICgo4omi4o21KeKNtDEgMCkg4oqGIOKNtX3CqCAoMSwy4omgLynijZviioYg4o21IH0gMCzijaggKDDiiaAp4o2bLyDijbUgfeKNpDEKaCDihpAgbWFwIEBsIM67YyBAciDOuyhj4o2i4oy9KSBAdSDOuyhj4o2iKOKKluKNiSkpIEBkIM67KGPijaIo4oy94o2JKSkKYm9hcmQg4oaQIDQgNCDijbQgMApuIOKGkCAwCndoaWxlICh+MjA0OOKIimJvYXJkKSB7CiAgaW86cHJpbnQgbzM6Zm9ybWF0IGJvYXJk4oaQYWRkRWxlbWVudCBib2FyZAogIGRpciDihpAgaFvihpFpbzpyZWFkTGluZSAiRGlyZWN0aW9uICh1L2QvbC9yKToiXQogIGJvYXJkIOKGkCDijZ5kaXIgYm9hcmQKfQ==)","msgtype":"m.text","formatted_body":"Here's a version of 2048:
                      Play in the browser<\/a>"}} {"origin_server_ts":1713623854627,"event_id":"$sBEIrHdS6TCY7jOojzcFnILFl-SaKGK5-7xpwu8xSG8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: I thought of a case where user reshape could be useful. If that was implemented, you'd be able to do this to add 100 to every second cell for example: `(100+)⍢(1↑¯1 2⍴) ⍳10`","msgtype":"m.text","formatted_body":"dzaima<\/a>: I thought of a case where user reshape could be useful. If that was implemented, you'd be able to do this to add 100 to every second cell for example: (100+)⍢(1↑¯1 2⍴) ⍳10<\/code>"}} {"origin_server_ts":1713623927940,"event_id":"$kA6Hpqe8z8Hg_xsBW5B54nkqKwiGMMWNCyinA1jeIH0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Of course, that particular example is better written as `{⍵+10×2|⍵}` but the principle is sound, I think?","msgtype":"m.text","formatted_body":"Of course, that particular example is better written as {⍵+10×2|⍵}<\/code> but the principle is sound, I think?"}} {"origin_server_ts":1713623953895,"event_id":"$JErRCOW5LKkWKJfloz2lx-d8WmqhylT37qMpuJ1VINg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: I thought of a case where under reshape could be useful. If that was implemented, you'd be able to do this to add 100 to every second cell for example: `(100+)⍢(1↑¯1 2⍴) ⍳10`","msgtype":"m.text","formatted_body":"dzaima<\/a>: I thought of a case where under reshape could be useful. If that was implemented, you'd be able to do this to add 100 to every second cell for example: (100+)⍢(1↑¯1 2⍴) ⍳10<\/code>"},"m.relates_to":{"event_id":"$sBEIrHdS6TCY7jOojzcFnILFl-SaKGK5-7xpwu8xSG8","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * dzaima: I thought of a case where under reshape could be useful. If that was implemented, you'd be able to do this to add 100 to every second cell for example: `(100+)⍢(1↑¯1 2⍴) ⍳10`","msgtype":"m.text","formatted_body":" * dzaima<\/a>: I thought of a case where under reshape could be useful. If that was implemented, you'd be able to do this to add 100 to every second cell for example: (100+)⍢(1↑¯1 2⍴) ⍳10<\/code>"}} {"origin_server_ts":1713624063267,"event_id":"$nGx2FBjxlDzEPUP6q_zmnEjUOc4b4MGTytxQ5m2LDTM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"under-reshape has other uses too; the \"useless\" case was when reshaping with a `(×/⍺) > ×/⍴⍵`","msgtype":"m.text","formatted_body":"under-reshape has other uses too; the \"useless\" case was when reshaping with a (×/⍺) > ×/⍴⍵<\/code>"}} {"origin_server_ts":1713624093164,"event_id":"$_39luI42aPZ0j9cXNFFlI0S7NeZNoiR99b70nQUNRN8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"BQN does have `100⊸+⌾(1↑˘∘\u203f2⊸⥊) ↕10`","msgtype":"m.text","formatted_body":"BQN does have 100⊸+⌾(1↑˘∘\u203f2⊸⥊) ↕10<\/code>"}} {"origin_server_ts":1713672621921,"event_id":"$UBCA8U7-BXggCXgRThbUBCK9Gw1zP3CY5Xn1ha5_KMk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks. I think I'll implement this.","msgtype":"m.text"}} {"state_key":"@rajandatta:matrix.org","origin_server_ts":1713680860258,"event_id":"$8ey4lYhD6FXJAHhtGG7ZsZYtnYwMIjBOj9EOoQvu8ao","sender":"@rajandatta:matrix.org","user_id":"@rajandatta:matrix.org","type":"m.room.member","content":{"displayname":"rajandatta","membership":"join"}} {"state_key":"@rajandatta:matrix.org","origin_server_ts":1713682643179,"event_id":"$M09ZatRA7ZsYNjmGPN_ZK9CBiGGxRvVNlgFNYPjnNLc","sender":"@rajandatta:matrix.org","user_id":"@rajandatta:matrix.org","prev_content":{"displayname":"rajandatta","membership":"join"},"type":"m.room.member","content":{"displayname":"Rajan","membership":"join"},"replaces_state":"$8ey4lYhD6FXJAHhtGG7ZsZYtnYwMIjBOj9EOoQvu8ao"} {"origin_server_ts":1713705646102,"event_id":"$ZgtJSYDw4jKpVYFBefTmc2Ra_u5xWHseqHoH1QPpUcE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"OK, structural under reshape now works as of this [commit](https://codeberg.org/loke/array/commit/10001e4f6dc1150dc337d50050855651cfa2ac05)","msgtype":"m.text","formatted_body":"OK, structural under reshape now works as of this commit<\/a>"}} {"origin_server_ts":1713706533151,"event_id":"$KXVy_pf5hSKhISnROlp7AppeFB0ov96LpaAW-Cm52iI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"So now you can do this:\n```\n(1000×)⍢(3 3 ⍴) 6 6 ⍴ ⍳100\n```","msgtype":"m.text","formatted_body":"

                      So now you can do this:<\/p>\n

                      (1000×)⍢(3 3 ⍴) 6 6 ⍴ ⍳100\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1713756986271,"event_id":"$ZctBKqVUQJUlspxcYPBokvmxSVFBHYqNDaJzAcdxFPg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I updated the 2048 implementation a bit: [test here](https://kapdemo.dhsdevelopments.com/clientweb2/#c=Ym9hcmREaW1lbnNpb25zIOKGkCA0IDQKYWRkRWxlbWVudCDih5AgeyAoKD8rLywpwqviiofCu+KNuCAwPSDijbUpIHsyw5cxKzAuOeKJpD8wfeKNouKKhyDijbUgfQpjIOKHkCB7ICjihpHijL1ib2FyZERpbWVuc2lvbnMpIOKGkSB7IOKKgyAsLyB7ICsvwqggKCjiiaLijbUp4o20MSAwKSDiioYg4o21fcKoICgxLDLiiaAvKeKNm+KKhiDijbUgfSAwLOKNqCAoMOKJoCnijZsvIOKNtSB94o2kMQpoIOKGkCBtYXAgQGwgzrtjIEByIM67KGPijaLijL0pIEB1IM67KGPijaIo4oqW4o2JKSkgQGQgzrsoY+KNoijijL3ijYkpKQpib2FyZCDihpAgYm9hcmREaW1lbnNpb25zIOKNtCAwCm4g4oaQIDAKd2hpbGUgKH4yMDQ44oiKYm9hcmQpIHsKICBpbzpwcmludCBvMzpmb3JtYXQgYm9hcmTihpBhZGRFbGVtZW50IGJvYXJkCiAgYm9hcmQg4oaQIOKNnihoW+KGkWlvOnJlYWRMaW5lICJEaXJlY3Rpb24gKHUvZC9sL3IpOiJdKSBib2FyZAp9)","msgtype":"m.text","formatted_body":"I updated the 2048 implementation a bit: test here<\/a>"}}
                      {"origin_server_ts":1713782574762,"event_id":"$8JQJCmko6RlXqb4gogN822jo39_1MZ75p4Htgm-cdCc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Should I implement structural under for dyadic left tack? This should print 10 and return 11, right?\n```\n10 io:println⍢⊣ 11\n```","msgtype":"m.text","formatted_body":"

                      Should I implement structural under for dyadic left tack? This should print 10 and return 11, right?<\/p>\n

                      10 io:println⍢⊣ 11\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1713784737543,"event_id":"$PcOu7K44djCSv6TTGDu4nJTm3WBecbWzzcH6ISZDXqo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that's `io:println⍢(10⊣) 11`, right? that does make sense (assuming `io:println` returns its argument)","msgtype":"m.text","formatted_body":"that's io:println⍢(10⊣) 11<\/code>, right? that does make sense (assuming io:println<\/code> returns its argument)"}}
                      {"origin_server_ts":1713788076338,"event_id":"$iqDcMNusU5gXrthRrA1QOu6LpUrpk4WUhyBHd6t-6Fw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It does. And both cases would be applicable. Undrt derives a dyadic function that passes its left argument to the right function, so they are equivalent. ","msgtype":"m.text"}}
                      {"origin_server_ts":1713788109169,"event_id":"$e978uxX8vMIwDHUe0kmmip6lbEkblG-ve2_sAkNkbVI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"It does. And both cases would be applicable. The under operator derives a dyadic function that passes its left argument to the right function, so they are equivalent. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$iqDcMNusU5gXrthRrA1QOu6LpUrpk4WUhyBHd6t-6Fw","rel_type":"m.replace"},"body":"* It does. And both cases would be applicable. The under operator derives a dyadic function that passes its left argument to the right function, so they are equivalent. ","msgtype":"m.text"}}
                      {"origin_server_ts":1713807612592,"event_id":"$tDb41bpLIccQk4tL_8RsfY_00zgugZiKXXA-RlS85v4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$PcOu7K44djCSv6TTGDu4nJTm3WBecbWzzcH6ISZDXqo"}},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> that's `io:println⍢(10⊣) 11`, right? that does make sense (assuming `io:println` returns its argument)\n\nWait, it shouldn't matter what println returns right?","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @dzaima:matrix.org<\/a>
                      that's io:println⍢(10⊣) 11<\/code>, right? that does make sense (assuming io:println<\/code> returns its argument)<\/blockquote><\/mx-reply>Wait, it shouldn't matter what println returns right?"}} {"origin_server_ts":1713807804061,"event_id":"$gKWErBc5kijx6XImY1WLCcA3yDX77BWTTcxyOB2aC04","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"if you had `11 ≡ {5}⍢(10⊣) 11`, then you'd lose The Under Property - `(F G x) ≡ G F⍢G x` → `({5} (10⊣) 11) ≡ (10⊣) {5}⍢(10⊣) x` → `5 ≡ 11`","msgtype":"m.text","formatted_body":"if you had 11 ≡ {5}⍢(10⊣) 11<\/code>, then you'd lose The Under Property - (F G x) ≡ G F⍢G x<\/code> → ({5} (10⊣) 11) ≡ (10⊣) {5}⍢(10⊣) x<\/code> → 5 ≡ 11<\/code>"}} {"origin_server_ts":1713807893246,"event_id":"$0BCkgIkkZXMoX1EXRj_QsofplLkOirKKtJ6oiXjf5_Y","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"if you had `11 ≡ {5}⍢(10⊣) 11`, then you'd lose The Under Property - `(F G x) ≡ G F⍢G x` → `({5} (10⊣) 11) ≡ (10⊣) {5}⍢(10⊣) x` → `5 ≡ 10`","msgtype":"m.text","formatted_body":"if you had 11 ≡ {5}⍢(10⊣) 11<\/code>, then you'd lose The Under Property - (F G x) ≡ G F⍢G x<\/code> → ({5} (10⊣) 11) ≡ (10⊣) {5}⍢(10⊣) x<\/code> → 5 ≡ 10<\/code>"},"m.relates_to":{"event_id":"$gKWErBc5kijx6XImY1WLCcA3yDX77BWTTcxyOB2aC04","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* if you had `11 ≡ {5}⍢(10⊣) 11`, then you'd lose The Under Property - `(F G x) ≡ G F⍢G x` → `({5} (10⊣) 11) ≡ (10⊣) {5}⍢(10⊣) x` → `5 ≡ 10`","msgtype":"m.text","formatted_body":"* if you had 11 ≡ {5}⍢(10⊣) 11<\/code>, then you'd lose The Under Property - (F G x) ≡ G F⍢G x<\/code> → ({5} (10⊣) 11) ≡ (10⊣) {5}⍢(10⊣) x<\/code> → 5 ≡ 10<\/code>"}} {"origin_server_ts":1713809139787,"event_id":"$JSU_9f8aC6d7r1kzdAEzGMkwahp9OHBiT4FG18gF75I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That property doesn't hold anyway.","msgtype":"m.text"}} {"origin_server_ts":1713809158787,"event_id":"$P2PgP5Lb67qKXvGfJ9nzaULQXhwQ_WpioLk1RtuIpuc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Imagine if G is 10 take, and G is -1 drop.","msgtype":"m.text"}} {"origin_server_ts":1713809191233,"event_id":"$YyxInydvUUWideizhvtsFjGmASTuiA3HH-UQ5cE_EOo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That removes the 10'element in an array.","msgtype":"m.text"}} {"origin_server_ts":1713809225970,"event_id":"$jJi0OsvVeNPeNzB_VzaPHUVOafNUXHcK9AA4oMdAGaE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Imagine if G is 10 take, and F is -1 drop.","msgtype":"m.text"},"m.relates_to":{"event_id":"$P2PgP5Lb67qKXvGfJ9nzaULQXhwQ_WpioLk1RtuIpuc","rel_type":"m.replace"},"body":"* Imagine if G is 10 take, and F is -1 drop.","msgtype":"m.text"}} {"origin_server_ts":1713809546789,"event_id":"$E32is2yDbfHTopnYFdA9FsNNcAYPljEjOL9CUrweAEw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"right, and BQNs structural under doesn't allow that","msgtype":"m.text","formatted_body":"right, and BQNs structural under doesn't allow that"}} {"origin_server_ts":1713824914502,"event_id":"$4nbB8zLwRVFa1YYsLKiyur4Lz8__oiZj2zIBAZ1BL5w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"dzaima: why not? These kinds of under transformations are what makes it really useful. It's the best way to insert or remove rows.","msgtype":"m.text"}} {"origin_server_ts":1713824995869,"event_id":"$PdDNtBsmK5WXStyj3l8zBiYyMlE2HReCUzOEs6vdHr0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"body":"because it doesn't follow The Under Property","msgtype":"m.text"}} {"origin_server_ts":1713825541304,"event_id":"$Mfp58T1Ln1din48vhpH08L0qmZExRpypIsuaD-_T-h8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"without which your Under just becomes a collection of unrelated operations with no logic for why they're all under Under","msgtype":"m.text","formatted_body":"without which your Under just becomes a collection of unrelated operations with no logic for why they're all under Under"}} {"origin_server_ts":1713854253087,"event_id":"$E5GQx6Lx66wOFZZ-4nC8oO5w7IvUyRWVr4Q3auO2YzA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: one could make that argument about any feature :-)","msgtype":"m.text","formatted_body":"
                      dzaima<\/a>: one could make that argument about any feature :-)"}} {"origin_server_ts":1713856519388,"event_id":"$PWLqgQwpDNzo1udP575Ma-2tDLyw0QSohfI-3j3IIRE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"That said, there is logic. When you do an under `↑`, that removes some number of rows. Undoing that puts those rows back. You could of course add a rule that states that the number of rows after the inner function invocation has to match the original, but that would just limit the usefulness of the feature. At least that's my reasoning.","msgtype":"m.text","formatted_body":"That said, there is logic. When you do an under ↑<\/code>, that removes some number of rows. Undoing that puts those rows back. You could of course add a rule that states that the number of rows after the inner function invocation has to match the original, but that would just limit the usefulness of the feature. At least that's my reasoning."}} {"origin_server_ts":1713868647428,"event_id":"$aU-mtEfiUa9v8TcGvdb_RP2wEK1MRVt91rkfG8lhjmg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$E5GQx6Lx66wOFZZ-4nC8oO5w7IvUyRWVr4Q3auO2YzA"}},"format":"org.matrix.custom.html","body":"about any subset of features. What I'm saying is that, other than some intuitive half-explanation, calling `(¯1↓)⍢(4↑)` and `(1+)⍢*` both Under is putting them under Under with no logical connnection, worse than `number○⍵`","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>about any subset of features. What I'm saying is that, other than some intuitive half-explanation, calling (¯1↓)⍢(4↑)<\/code> and (1+)⍢*<\/code> both Under is putting them under Under with no logical connnection, worse than number○⍵<\/code>"}} {"origin_server_ts":1713868737007,"event_id":"$UP5OKMVwaFf7B9MMeNKlXN9epjIezdofDaSYfGX7l50","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$PWLqgQwpDNzo1udP575Ma-2tDLyw0QSohfI-3j3IIRE"}},"format":"org.matrix.custom.html","body":"but you're saying \"When you do an under `↑`,\" there, not \"When you do an under,\". Indeed you can write a logical explanation for each separate `⍢G` case, but the question is, is there any logical reason for all of them to be within `⍢` and not each be its own separate thing","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>but you're saying \"When you do an under ↑<\/code>,\" there, not \"When you do an under,\". Indeed you can write a logical explanation for each separate ⍢G<\/code> case, but the question is, is there any logical reason for all of them to be within ⍢<\/code> and not each be its own separate thing"}} {"origin_server_ts":1713869054343,"event_id":"$ABFpEDAZrWQos8HJ0wPXaSKcZlyk1mVpt0DeOEkNYL4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"i.e. is there logical reason for \"when you do an under `≢`, the result of the Under is always the array `0 1` regardless of what the input is\" to be an invalid extension of your Under?","msgtype":"m.text","formatted_body":"i.e. is there logical reason for \"when you do an under ≢<\/code>, the result of the Under is always the array 0 1<\/code> regardless of what the input is\" to be an invalid extension of your Under?"}} {"origin_server_ts":1713869135584,"event_id":"$BdqMM9WD0ZMqXOzZCexd7aDvQ3dyJQpkVcXAnhhFUyk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"about any subset of multiple unrelated features, sure. What I'm saying is that, other than some intuitive half-explanation, calling `(¯1↓)⍢(4↑)` and `(1+)⍢*` both Under is putting them under Under with no logical connnection, worse than `number○⍵`","msgtype":"m.text","formatted_body":"about any subset of multiple unrelated features, sure. What I'm saying is that, other than some intuitive half-explanation, calling (¯1↓)⍢(4↑)<\/code> and (1+)⍢*<\/code> both Under is putting them under Under with no logical connnection, worse than number○⍵<\/code>"},"m.relates_to":{"event_id":"$aU-mtEfiUa9v8TcGvdb_RP2wEK1MRVt91rkfG8lhjmg","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* about any subset of multiple unrelated features, sure. What I'm saying is that, other than some intuitive half-explanation, calling `(¯1↓)⍢(4↑)` and `(1+)⍢*` both Under is putting them under Under with no logical connnection, worse than `number○⍵`","msgtype":"m.text","formatted_body":"* about any subset of multiple unrelated features, sure. What I'm saying is that, other than some intuitive half-explanation, calling (¯1↓)⍢(4↑)<\/code> and (1+)⍢*<\/code> both Under is putting them under Under with no logical connnection, worse than number○⍵<\/code>"}} {"origin_server_ts":1713869153138,"event_id":"$qG4ydvlC1c9xpdUoF64BOGxbXS1EK-bmnpCBlBEJ3yA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"about any set of multiple unrelated features, sure. What I'm saying is that, other than some intuitive half-explanation, calling `(¯1↓)⍢(4↑)` and `(1+)⍢*` both Under is putting them under Under with no logical connnection, worse than `number○⍵`","msgtype":"m.text","formatted_body":"about any set of multiple unrelated features, sure. What I'm saying is that, other than some intuitive half-explanation, calling (¯1↓)⍢(4↑)<\/code> and (1+)⍢*<\/code> both Under is putting them under Under with no logical connnection, worse than number○⍵<\/code>"},"m.relates_to":{"event_id":"$aU-mtEfiUa9v8TcGvdb_RP2wEK1MRVt91rkfG8lhjmg","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* about any set of multiple unrelated features, sure. What I'm saying is that, other than some intuitive half-explanation, calling `(¯1↓)⍢(4↑)` and `(1+)⍢*` both Under is putting them under Under with no logical connnection, worse than `number○⍵`","msgtype":"m.text","formatted_body":"* about any set of multiple unrelated features, sure. What I'm saying is that, other than some intuitive half-explanation, calling (¯1↓)⍢(4↑)<\/code> and (1+)⍢*<\/code> both Under is putting them under Under with no logical connnection, worse than number○⍵<\/code>"}} {"origin_server_ts":1713869350198,"event_id":"$zxalyjx6q0aNFPLaaEpoXEVZoTd89uLN14_5Kra-c20","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"about any set of multiple unrelated features, sure. What I'm saying is that, other than some intuitive half-explanation, calling `(¯1↓)⍢(4↑)` and `(1+)⍢*` both Under is putting them under Under with no logical connnection, worse than `number○⍵`, somewhat like if you had `a +⍓ b` be `a∊b` and `a ⌽⍓ b` be `a[b]` or something","msgtype":"m.text","formatted_body":"about any set of multiple unrelated features, sure. What I'm saying is that, other than some intuitive half-explanation, calling (¯1↓)⍢(4↑)<\/code> and (1+)⍢*<\/code> both Under is putting them under Under with no logical connnection, worse than number○⍵<\/code>, somewhat like if you had a +⍓ b<\/code> be a∊b<\/code> and a ⌽⍓ b<\/code> be a[b]<\/code> or something"},"m.relates_to":{"event_id":"$aU-mtEfiUa9v8TcGvdb_RP2wEK1MRVt91rkfG8lhjmg","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* about any set of multiple unrelated features, sure. What I'm saying is that, other than some intuitive half-explanation, calling `(¯1↓)⍢(4↑)` and `(1+)⍢*` both Under is putting them under Under with no logical connnection, worse than `number○⍵`, somewhat like if you had `a +⍓ b` be `a∊b` and `a ⌽⍓ b` be `a[b]` or something","msgtype":"m.text","formatted_body":"* about any set of multiple unrelated features, sure. What I'm saying is that, other than some intuitive half-explanation, calling (¯1↓)⍢(4↑)<\/code> and (1+)⍢*<\/code> both Under is putting them under Under with no logical connnection, worse than number○⍵<\/code>, somewhat like if you had a +⍓ b<\/code> be a∊b<\/code> and a ⌽⍓ b<\/code> be a[b]<\/code> or something"}} {"origin_server_ts":1713869675326,"event_id":"$x33_JDInaY39zL7x3J6LaRwBJetoJqrRyU8h2MBMfYk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Well it has to make logical sense under some interpretation of \"under\". Do note that I personally don't think that that under dyadic `⊣` makes that much sense.","msgtype":"m.text","formatted_body":"Well it has to make logical sense under some interpretation of \"under\". Do note that I personally don't think that that under dyadic ⊣<\/code> makes that much sense."}} {"origin_server_ts":1713869762347,"event_id":"$9zlrpcSKEBGAbAVsOA_IsVULIE287lcwSXxk0t6cRn8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"\"under some interpretation of \"under\"\" i.e. \"under some interpretation of an infinite set of possible under-like operations you think are valid\"?","msgtype":"m.text","formatted_body":"\"under some interpretation of \"under\"\" i.e. \"under some interpretation of an infinite set of possible under-like operations you think are valid\"?"}} {"origin_server_ts":1713869772192,"event_id":"$isDbpCa4afeC7XhZhrb-xiZVnvRmD4p-6tSwnuNNoME","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"\"under some interpretation of \"under\"\" i.e. \"under some interpretation of one of an infinite set of possible under-like operations you think are valid\"?","msgtype":"m.text","formatted_body":"\"under some interpretation of \"under\"\" i.e. \"under some interpretation of one of an infinite set of possible under-like operations you think are valid\"?"},"m.relates_to":{"event_id":"$9zlrpcSKEBGAbAVsOA_IsVULIE287lcwSXxk0t6cRn8","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* \"under some interpretation of \"under\"\" i.e. \"under some interpretation of one of an infinite set of possible under-like operations you think are valid\"?","msgtype":"m.text","formatted_body":"* \"under some interpretation of \"under\"\" i.e. \"under some interpretation of one of an infinite set of possible under-like operations you think are valid\"?"}} {"origin_server_ts":1713869778189,"event_id":"$AUqD418MVnQkB8ebKDx2v7KWzRos03x00go8ukn3hww","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"\"under some interpretation of \"under\"\" i.e. \"under some interpretation of one of an infinite set of possible under-like operations you happen to think are valid\"?","msgtype":"m.text","formatted_body":"\"under some interpretation of \"under\"\" i.e. \"under some interpretation of one of an infinite set of possible under-like operations you happen to think are valid\"?"},"m.relates_to":{"event_id":"$9zlrpcSKEBGAbAVsOA_IsVULIE287lcwSXxk0t6cRn8","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* \"under some interpretation of \"under\"\" i.e. \"under some interpretation of one of an infinite set of possible under-like operations you happen to think are valid\"?","msgtype":"m.text","formatted_body":"* \"under some interpretation of \"under\"\" i.e. \"under some interpretation of one of an infinite set of possible under-like operations you happen to think are valid\"?"}} {"origin_server_ts":1713870055030,"event_id":"$QTcV7MaN5Ac9DGMLayl8ryKvG13D-ks3ZlqMmr5mRt8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Exactly.","msgtype":"m.text"}} {"origin_server_ts":1713870125610,"event_id":"$ahmgD7xjALnly6kzsZosBIuV3rQWYElGuE30siN0DuM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and that set of operations has no logical connection, other than your intuitive desires for cool features","msgtype":"m.text","formatted_body":"and that set of operations has no logical connection, other than your intuitive desires for cool features"}} {"origin_server_ts":1713870145588,"event_id":"$2NqD2GtLRdOHLofvmt-KPCMkOHbjSFmdAf0Id_fMmAY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But I do think that the current implementation is a bit more consistent than your description makes it seem. Yes?","msgtype":"m.text"}} {"origin_server_ts":1713870446758,"event_id":"$z_Tp9palXE9Wec3lPV1mEBSJuMBCIos7noPClDIYMek","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"it's intuitively consistent, but not by any single logical reason; you have to have some form of \"for this set of `G` it does/follows X. For this set of `G` it does/follows Y.\". And, to be fair, BQN's Under does have to write out exactly how structural under behaves to have a reason for why `\"wo\"⌾(2⊸↑) \"hello\"` doesn't give `\"world\"`, but at least there's some logical property that holds together both `F⌾(2⊸↑)` and `F⌾⋆`","msgtype":"m.text","formatted_body":"it's intuitively consistent, but not by any single logical reason; you have to have some form of \"for this set of G<\/code> it does/follows X. For this set of G<\/code> it does/follows Y.\". And, to be fair, BQN's Under does have to write out exactly how structural under behaves to have a reason for why \"wo\"⌾(2⊸↑) \"hello\"<\/code> doesn't give \"world\"<\/code>, but at least there's some logical property that holds together both F⌾(2⊸↑)<\/code> and F⌾⋆<\/code>"}} {"origin_server_ts":1713870480925,"event_id":"$Dt4xM9eX_wwkRRCg_rOpc0io5w-tQ8pGIctAB45_EJA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"it's intuitively consistent, but not by any single logical reason; you have to have some form of \"for this set of `G` it does/follows X. For this set of `G` it does/follows Y.\". And, to be fair, BQN's Under does have to write out exactly how structural under behaves to have a reason for why `\"wo\"⌾(2⊸↑) \"hello\"` doesn't give `\"world\"`, but at least there's some logical property that holds together both `F⌾(2⊸↑)` and `F⌾⋆` irrespective of that","msgtype":"m.text","formatted_body":"it's intuitively consistent, but not by any single logical reason; you have to have some form of \"for this set of G<\/code> it does/follows X. For this set of G<\/code> it does/follows Y.\". And, to be fair, BQN's Under does have to write out exactly how structural under behaves to have a reason for why \"wo\"⌾(2⊸↑) \"hello\"<\/code> doesn't give \"world\"<\/code>, but at least there's some logical property that holds together both F⌾(2⊸↑)<\/code> and F⌾⋆<\/code> irrespective of that"},"m.relates_to":{"event_id":"$z_Tp9palXE9Wec3lPV1mEBSJuMBCIos7noPClDIYMek","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* it's intuitively consistent, but not by any single logical reason; you have to have some form of \"for this set of `G` it does/follows X. For this set of `G` it does/follows Y.\". And, to be fair, BQN's Under does have to write out exactly how structural under behaves to have a reason for why `\"wo\"⌾(2⊸↑) \"hello\"` doesn't give `\"world\"`, but at least there's some logical property that holds together both `F⌾(2⊸↑)` and `F⌾⋆` irrespective of that","msgtype":"m.text","formatted_body":"* it's intuitively consistent, but not by any single logical reason; you have to have some form of \"for this set of G<\/code> it does/follows X. For this set of G<\/code> it does/follows Y.\". And, to be fair, BQN's Under does have to write out exactly how structural under behaves to have a reason for why \"wo\"⌾(2⊸↑) \"hello\"<\/code> doesn't give \"world\"<\/code>, but at least there's some logical property that holds together both F⌾(2⊸↑)<\/code> and F⌾⋆<\/code> irrespective of that"}} {"origin_server_ts":1713871312528,"event_id":"$7Ey6HljGJDtzQAGQxoChcdN5vABZiRCGf9WC0IPlJbw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"kind of importantly, `(¯1↓)⍢(2↑)` relies not only on the way `G` maps input to output elements, but also on how they were taken; `(¯1↓)⍢(0 1⊇)` has `G` map elements exactly the same way, but it'd be much weirder to have that behave the same as `⍢(2↑)`, and you'd have trouble making it work on non-consecutive index lists","msgtype":"m.text","formatted_body":"kind of importantly, (¯1↓)⍢(2↑)<\/code> relies not only on the way G<\/code> maps input to output elements, but also on how they were taken; (¯1↓)⍢(0 1⊇)<\/code> has G<\/code> map elements exactly the same way, but it'd be much weirder to have that behave the same as ⍢(2↑)<\/code>, and you'd have trouble making it work on non-consecutive index lists"}} {"origin_server_ts":1713871386684,"event_id":"$X_WP3-FC-_iIeb2_xcnUGl1RODldJNsQFOFJ9LnFN1U","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"kind of importantly, `(¯1↓)⍢(2↑)` relies not only on the way `G` maps input to output elements, but also on how they were taken; `(¯1↓)⍢(0 1⊇)` has `G` map elements exactly the same way, but it'd be much weirder to have that behave the same as `⍢(2↑)`, and you'd have trouble making it make sense on non-consecutive index lists","msgtype":"m.text","formatted_body":"kind of importantly, (¯1↓)⍢(2↑)<\/code> relies not only on the way G<\/code> maps input to output elements, but also on how they were taken; (¯1↓)⍢(0 1⊇)<\/code> has G<\/code> map elements exactly the same way, but it'd be much weirder to have that behave the same as ⍢(2↑)<\/code>, and you'd have trouble making it make sense on non-consecutive index lists"},"m.relates_to":{"event_id":"$7Ey6HljGJDtzQAGQxoChcdN5vABZiRCGf9WC0IPlJbw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* kind of importantly, `(¯1↓)⍢(2↑)` relies not only on the way `G` maps input to output elements, but also on how they were taken; `(¯1↓)⍢(0 1⊇)` has `G` map elements exactly the same way, but it'd be much weirder to have that behave the same as `⍢(2↑)`, and you'd have trouble making it make sense on non-consecutive index lists","msgtype":"m.text","formatted_body":"* kind of importantly, (¯1↓)⍢(2↑)<\/code> relies not only on the way G<\/code> maps input to output elements, but also on how they were taken; (¯1↓)⍢(0 1⊇)<\/code> has G<\/code> map elements exactly the same way, but it'd be much weirder to have that behave the same as ⍢(2↑)<\/code>, and you'd have trouble making it make sense on non-consecutive index lists"}} {"origin_server_ts":1713887115111,"event_id":"$Kq4kg3Nv6UYZud3XkHU5imcWjyVVZ6fsY4M787SydfI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: I mean, you are not wrong.","msgtype":"m.text","formatted_body":"dzaima<\/a>: I mean, you are not wrong."}} {"origin_server_ts":1713887169348,"event_id":"$6mPeJ0B0WysGRL6qTbAOTA4YVrWE_wMOltfmBvneTDM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"But the ability to insert/remove rows using under take/drop is so useful that I can't remove it, unless an alternative approach exists.","msgtype":"m.text"}} {"origin_server_ts":1713887297935,"event_id":"$7DLlregktuT0566UFOkRmsmFRB2DtPBbYN-tePfIGcQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I definitely can't argue against it being useful","msgtype":"m.text","formatted_body":"I definitely can't argue against it being useful"}} {"origin_server_ts":1713887326807,"event_id":"$242BFSCbojVPbxqY6iJb-_pft7u-tMGrx-_MgPNUJRE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`a +⍓ b` being `a∊b` would be quite useful if `a∊b` didn't exist either, after all","msgtype":"m.text","formatted_body":"a +⍓ b<\/code> being a∊b<\/code> would be quite useful if a∊b<\/code> didn't exist either, after all"}} {"origin_server_ts":1713887554282,"event_id":"$ppqbBhw6fy7UNA6L1iQ5Ugd_PkMOrxx7iB8-5ZPZvD8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(now, with under take/drop the problem is slightly less trivial as there's not a particularly nice way to write it in a more direct way, but that doesn't chage anything about logical reasoning)","msgtype":"m.text","formatted_body":"(now, with under take/drop the problem is slightly less trivial as there's not a particularly nice way to write it in a more direct way, but that doesn't chage anything about logical reasoning)"}} {"origin_server_ts":1713887615492,"event_id":"$G31p6tWjjMjNop3WDqZI1eDrHbQkgXfM0Akcn9bft-s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I mean, I'm usually all for consistency, and I've explicitly turned my back to some of the more annoying inconsistencies in Dyalog, for precisely the reason you are arguing.","msgtype":"m.text"}} {"origin_server_ts":1713887637797,"event_id":"$pnuxUnRKhu_wgUg7KS52M7X5B4GgrxMDCUG7OfqYTgQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"That is to say, I'm sympathetic to your reasoning.","msgtype":"m.text"}} {"origin_server_ts":1713887714890,"event_id":"$SzLydVaswGXXb34BIWuEzwRizcv9TifIBUOyeKTO1u4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"How to you insert a row in BQN by the way?","msgtype":"m.text"}} {"origin_server_ts":1713887882247,"event_id":"$kOO1lZPzvJFsGtKiyN2lzvpx06qrVsAY-2m3aaaxFW0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`n (↑∾r∾↓) x` is an option, and `r⊸∾⌾(n⊸⌽) x` manages to also work","msgtype":"m.text","formatted_body":"n (↑∾r∾↓) x<\/code> is an option, and r⊸∾⌾(n⊸⌽) x<\/code> manages to also work"}} {"origin_server_ts":1713887924968,"event_id":"$ckH3nCBS95KLU3N1-ZgzdxuWteIpNyTOOZUXjLV26QQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, the first one is just explicit split and recombine, no?","msgtype":"m.text"}} {"origin_server_ts":1713887940303,"event_id":"$sw7SxR7KY14oDCxdYwAdNCc0_frCUvXxa_sXNO7fgks","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"indeed it is","msgtype":"m.text","formatted_body":"indeed it is"}} {"origin_server_ts":1713887958497,"event_id":"$ECeCaaK_mwnyQiuoQI0qpazpSKhUqSI6P0Q4pKUhIE0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Oh, and the other is rotate so the appropriate row is on top, append, and the rotate back?","msgtype":"m.text"}} {"origin_server_ts":1713887964778,"event_id":"$jNNH1qSUW_2zjG8s7bu4Cr1L-VpYxLhPD7zB8yL_BwI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Oh, and the other is rotate so the appropriate row is on top, append, and then rotate back?","msgtype":"m.text"},"m.relates_to":{"event_id":"$ECeCaaK_mwnyQiuoQI0qpazpSKhUqSI6P0Q4pKUhIE0","rel_type":"m.replace"},"m.mentions":{},"body":" * Oh, and the other is rotate so the appropriate row is on top, append, and then rotate back?","msgtype":"m.text"}} {"origin_server_ts":1713888008398,"event_id":"$ud1UzJdk9HFACB2ZdRB_dM3BVSnf0vltAT5bPTIaI4E","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(also, to be clear, I'm not saying that under take/drop are bad or undesirable feature (after all, I do have them in dzaima/BQN and dzaima/APL). But they clearly just don't have much logical explanation, and this all started because of me explaining the logical reason for why there's a case to require `F⍢(x⊣)`'s `F` to return `x`)","msgtype":"m.text","formatted_body":"(also, to be clear, I'm not saying that under take/drop are bad or undesirable feature (after all, I do have them in dzaima/BQN and dzaima/APL). But they clearly just don't have much logical explanation, and this all started because of me explaining the logical reason for why there's a case to require F⍢(x⊣)<\/code>'s F<\/code> to return x<\/code>)"}} {"origin_server_ts":1713888024124,"event_id":"$6f92ow7g4jOt-zYlLAAJCheeQer9igxFsPE4hR2uy5s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$ECeCaaK_mwnyQiuoQI0qpazpSKhUqSI6P0Q4pKUhIE0"}},"format":"org.matrix.custom.html","body":"yeah","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>yeah"}} {"origin_server_ts":1713888038456,"event_id":"$giBxxHwYtWA3bu-QboAAbW1VH-s4YScKo_nA_Miauuo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"That would be something like this in Kap: `(1000 2000 3000⍪)⍢(2⊖) 5 3 ⍴ ⍳100`","msgtype":"m.text","formatted_body":"That would be something like this in Kap: (1000 2000 3000⍪)⍢(2⊖) 5 3 ⍴ ⍳100<\/code>"}} {"origin_server_ts":1713888077670,"event_id":"$o-REl5EEX0iJiZazfDMUMQ2ZQ-1HIKuofAuxXhr0214","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: Yes, and this discussion has made me decide the left tack idea is stupid and I should not implement it :-)","msgtype":"m.text","formatted_body":"dzaima<\/a>: Yes, and this discussion has made me decide the left tack idea is stupid and I should not implement it :-)"}} {"origin_server_ts":1713888148356,"event_id":"$QWJCG5rRPayjPQlCfZoyeQeidtNdV141gKpVGWJd-Ps","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Which APL is it that had a magic operator that changed the function in some way? It was a generic trenchcoat operator?","msgtype":"m.text"}} {"origin_server_ts":1713888166141,"event_id":"$zI7v1ytd2JRk9HUcycEB3AoGhgYio1KozeJcKpY-JdA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Or maybe it was J?","msgtype":"m.text"}} {"origin_server_ts":1713888171443,"event_id":"$9bDG7QzEih2Udq3p6PYGGafNf9ZAm5pFjAlXE4d73Lk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`⍠` in Dyalog?","msgtype":"m.text","formatted_body":"⍠<\/code> in Dyalog?"}} {"origin_server_ts":1713888555070,"event_id":"$v7cfSYKyPhqZCXcVwp_tCotimxkFblqb5ho4fOlhdiI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(also, the case of `F⍢(10⊣)` doesn't really need to be Under-specific - it can be expanded as a computational under - `(10⊣)˝ F (10⊣) x` - and if `F` doesn't return `10`, then `(10⊣)˝` working on it is very broken)","msgtype":"m.text","formatted_body":"(also, the case of F⍢(10⊣)<\/code> doesn't really need to be Under-specific - it can be expanded as a computational under - (10⊣)˝ F (10⊣) x<\/code> - and if F<\/code> doesn't return 10<\/code>, then (10⊣)˝<\/code> working on it is very broken)"}} {"origin_server_ts":1713888625945,"event_id":"$ThUnu9WDANFVrjBGIyijC11cRwW1bcWPgHINqnf0lKA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(also here's a primarily-stupid idea: `F⍐n` for `F⍢(n↑)`, and same with `⍗`)","msgtype":"m.text","formatted_body":"(also here's a primarily-stupid idea: F⍐n<\/code> for F⍢(n↑)<\/code>, and same with ⍗<\/code>)"}} {"origin_server_ts":1713889072092,"event_id":"$Xnw-y8a7zSAcp8-H0xeuZR1BgnXyHHxJloK8ksSILAA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Ohhhh","msgtype":"m.text"}} {"origin_server_ts":1713889081877,"event_id":"$iSfZlHWmzixgw4XJBqWMYs0-tdgr5BGD6g4037wEwyQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"That's... Not necessarily stupid :-)","msgtype":"m.text"}} {"origin_server_ts":1713889101429,"event_id":"$P5lpZHEwViJht5zFABUtGOdRcw0Wzd3Zn7NHRFwk3ag","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Ah, yes, maybe. I've never used `⍠` in Dyalog. Let me check its docs.","msgtype":"m.text","formatted_body":"Ah, yes, maybe. I've never used ⍠<\/code> in Dyalog. Let me check its docs."}} {"origin_server_ts":1713889191080,"event_id":"$tn-yRQ_ChAWMlNGNNjmh_8cS-sk7nTV-ntkGU1yvImQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Is it only used with regexes?","msgtype":"m.text"}} {"origin_server_ts":1713889218839,"event_id":"$l-rzOLEid6s4OYe6k95gJ7rrTCqpafswigGskhmhWHE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Oh no wait, it really is the trechcoat operator.","msgtype":"m.text"}} {"origin_server_ts":1713889223363,"event_id":"$wJic2rJUOb5UkQ8s1fEgAsXeCV7TtHAhL3douUwCFp4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Oh no wait, it really is the trenchcoat operator.","msgtype":"m.text"},"m.relates_to":{"event_id":"$l-rzOLEid6s4OYe6k95gJ7rrTCqpafswigGskhmhWHE","rel_type":"m.replace"},"m.mentions":{},"body":" * Oh no wait, it really is the trenchcoat operator.","msgtype":"m.text"}} {"origin_server_ts":1713954250119,"event_id":"$9rMoh78bfwPAK59d8nMVuRFWlqcYWj1JMSwdPxd29EU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: Would you consider `∵` to be a trenchcoat operator?","msgtype":"m.text","formatted_body":"dzaima<\/a>: Would you consider ∵<\/code> to be a trenchcoat operator?"}} {"origin_server_ts":1713961938185,"event_id":"$GQKVYzBT-XR4TAgRhVovGgxGOYHM8qcoBd5gDAdz7jM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$9rMoh78bfwPAK59d8nMVuRFWlqcYWj1JMSwdPxd29EU"}},"format":"org.matrix.custom.html","body":"probably; `⌽∵` at least is pretty special-case-y","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>probably; ⌽∵<\/code> at least is pretty special-case-y"}} {"origin_server_ts":1713962093832,"event_id":"$7ENWlGTW0lh13Vb61AYojJL6Rsx0E1hk8OrRd3CA_vc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Not to mention count bits.","msgtype":"m.text"}} {"origin_server_ts":1714014981051,"event_id":"$iovk4F0chH3DEJumE7Tsvfzi-qkXeyTCQyRFczz_Ptc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: I think adam thought that `+/∵` would be better than the current choice.","msgtype":"m.text","formatted_body":"dzaima<\/a>: I think adam thought that +/∵<\/code> would be better than the current choice."}} {"origin_server_ts":1714052241866,"event_id":"$BzqP9-yEUJFhiRrfYUErY6J4eboTE7tuFKA7jdIOspw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"oh, `⍴∵` counts the number of one-bits, not number of significant digits\u203d yeah `+/∵` is much better for that","msgtype":"m.text","formatted_body":"oh, ⍴∵<\/code> counts the number of one-bits, not number of significant digits\u203d yeah +/∵<\/code> is much better for that"}} {"origin_server_ts":1714054506621,"event_id":"$9mFocrEZXxWn_t0zaTL5BYcsoLphb8HRwzvHByAT5X8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: but it's 3 characters :-)","msgtype":"m.text","formatted_body":"dzaima<\/a>: but it's 3 characters :-)"}} {"origin_server_ts":1714054548730,"event_id":"$9_E_eNWR_O9j89PZZzHSxvsjyU48VulSc63uPrIEh8A","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and `+/` is 2 characters instead of 1","msgtype":"m.text","formatted_body":"and +/<\/code> is 2 characters instead of 1"}} {"origin_server_ts":1714054569296,"event_id":"$XuRQ_iAYdIKyEH6Qm79FAONnBsMg6tw0RBG8rTZwzsw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah. I'm just trying to avoid changing this because I","msgtype":"m.text"}} {"origin_server_ts":1714054572446,"event_id":"$xhRSgmS703s2ejWMhLe2mr3oV440xX0nNfTNuJlSRBA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Yeah. I'm just trying to avoid changing this because I'm lazy","msgtype":"m.text"},"m.relates_to":{"event_id":"$XuRQ_iAYdIKyEH6Qm79FAONnBsMg6tw0RBG8rTZwzsw","rel_type":"m.replace"},"m.mentions":{},"body":" * Yeah. I'm just trying to avoid changing this because I'm lazy","msgtype":"m.text"}} {"origin_server_ts":1714054578499,"event_id":"$UW-zFrYu0n104bWsuTDjItVXF77QATzo-rr2r8i_m7M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It is indeed a more logcal way","msgtype":"m.text"}} {"origin_server_ts":1714054582006,"event_id":"$vi3GYWHhoTaw9VA0tig8keTrxQzsU3X0hum7KMKvHZo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"It is indeed a more logical way","msgtype":"m.text"},"m.relates_to":{"event_id":"$UW-zFrYu0n104bWsuTDjItVXF77QATzo-rr2r8i_m7M","rel_type":"m.replace"},"m.mentions":{},"body":" * It is indeed a more logical way","msgtype":"m.text"}} {"origin_server_ts":1714212363276,"event_id":"$YPYFHXPvyEevtCSakqNn2YkQyCDREXhQSaFCv1e9C9M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Question: If the optimiser detects at compile time that some code will raise an error (in this case, it's the case where the argument to `⍳` can be statically proven to always be negative, should I raise that as a parse error, or should I keep it unoptimised and just let it raise a runtime error?","msgtype":"m.text","formatted_body":"Question: If the optimiser detects at compile time that some code will raise an error (in this case, it's the case where the argument to ⍳<\/code> can be statically proven to always be negative, should I raise that as a parse error, or should I keep it unoptimised and just let it raise a runtime error?"}} {"origin_server_ts":1714212392415,"event_id":"$vS9ZLB5eMikdVM8VFXZfMWzBPyZbraCVo8dWXg2De8Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The latter seems to be more correct, since the behaviour of the program shouldn't change depending on whether optimisation is enabled or not.","msgtype":"m.text"}} {"origin_server_ts":1714212406247,"event_id":"$gD4nYpiUPhxjZlUt83eq1WEFPknDE62urn4a3HdraXo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Question: If the optimiser detects at compile time that some code will raise an error (in this case, it's the case where the argument to `⍳` can be statically proven to always be negative), should I raise that as a parse error, or should I keep it unoptimised and just let it raise a runtime error?","msgtype":"m.text","formatted_body":"Question: If the optimiser detects at compile time that some code will raise an error (in this case, it's the case where the argument to ⍳<\/code> can be statically proven to always be negative), should I raise that as a parse error, or should I keep it unoptimised and just let it raise a runtime error?"},"m.relates_to":{"event_id":"$YPYFHXPvyEevtCSakqNn2YkQyCDREXhQSaFCv1e9C9M","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Question: If the optimiser detects at compile time that some code will raise an error (in this case, it's the case where the argument to `⍳` can be statically proven to always be negative), should I raise that as a parse error, or should I keep it unoptimised and just let it raise a runtime error?","msgtype":"m.text","formatted_body":" * Question: If the optimiser detects at compile time that some code will raise an error (in this case, it's the case where the argument to ⍳<\/code> can be statically proven to always be negative), should I raise that as a parse error, or should I keep it unoptimised and just let it raise a runtime error?"}} {"origin_server_ts":1714218704510,"event_id":"$qwpnTTJp9ArpR9szFOtP6Vpc3kfbuquGh0uzP-v3uiM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It'd be allowed in BQN, because of the following rule (on the spec [main page](https://mlochbaum.github.io/BQN/spec/index.html)). We haven't done anything that inspects values yet, and I wonder if lazy evaluation has any effect on whether a user would write this sort of code.\n> If an expression in a program cannot be evaluated without error (that is, there is no context that would cause the program, or a caller with access to its result, to evaluate the expression but not eventually fail with an error), then the implementation may reject this program, giving an error before evaluating any code and regardless of context\u2014in this case, it must not accept the program in any context.","msgtype":"m.text","formatted_body":"It'd be allowed in BQN, because of the following rule (on the spec main page<\/a>). We haven't done anything that inspects values yet, and I wonder if lazy evaluation has any effect on whether a user would write this sort of code.
                      If an expression in a program cannot be evaluated without error (that is, there is no context that would cause the program, or a caller with access to its result, to evaluate the expression but not eventually fail with an error), then the implementation may reject this program, giving an error before evaluating any code and regardless of context\u2014in this case, it must not accept the program in any context.<\/blockquote>"}} {"origin_server_ts":1714218950822,"event_id":"$Z9Bfx6srHSZxlMdSAta7nL5KI3y3ti5bmWUz-UHl8eI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"If it's like a literal `⍳¯10` failing, I don't expect anyone would have a problem with that. I don't think it should be presented as a parse error. I'd want the same error it would give at runtime, just with some indication like \"(encountered at compile time)\" added.","msgtype":"m.text","formatted_body":"If it's like a literal ⍳¯10<\/code> failing, I don't expect anyone would have a problem with that. I don't think it should be presented as a parse error. I'd want the same error it would give at runtime, just with some indication like \"(encountered at compile time)\" added."}} {"origin_server_ts":1714221720484,"event_id":"$YmESG6-JH6kPa1UQ5xgE2Wd_igswVSN7hq1jLce069E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Maybe a warning. There is no concept of compiler warnings at the moment though. ","msgtype":"m.text"}} {"origin_server_ts":1714229408242,"event_id":"$n1wXnrPx86LhXLwJwD5-gLr-ipNwXhQOeaRytZ83RD0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"If I throw an error at compile time, then this won't print the message:\n```\nfoo ⇐ { ⍳¯2 }\nio:println \"Test\"\nfoo 0\n```","msgtype":"m.text","formatted_body":"

                      If I throw an error at compile time, then this won't print the message:<\/p>\n

                      foo ⇐ { ⍳¯2 }\nio:println \"Test\"\nfoo 0\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1714229521704,"event_id":"$xZEnleqYeW2WbsmRy6opgaBeuQskH3oPzq9b1TUjGyM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: I just listened to the latest array cast, and I didn't realise that BQN (and now J) supports the extension of inverse `⍸`.","msgtype":"m.text","formatted_body":"Marshall<\/a>: I just listened to the latest array cast, and I didn't realise that BQN (and now J) supports the extension of inverse ⍸<\/code>."}}
                      {"origin_server_ts":1714229639812,"event_id":"$qN8KN09TCUp5oYpc-8G8UHc7qUzUDmrsmqxq3ubtt9c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"How is it implemented in BQN? What's the most efficient algorithm that can do this regardless of whether the input is sorted or not?","msgtype":"m.text"}}
                      {"origin_server_ts":1714229740966,"event_id":"$IMr_kCy6RnaxCvrEav7CW_FK1pbW0XCWX1TRsuM4yVQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the obvious thing is to just have an array of `⌈/⍵` elements and for each element of `⍵` increment that-th","msgtype":"m.text","formatted_body":"the obvious thing is to just have an array of ⌈/⍵<\/code> elements and for each element of ⍵<\/code> increment that-th"}}
                      {"origin_server_ts":1714229790488,"event_id":"$-PBXDzBffHeTMvVAND5Qi8hbTlI_69AHV8xNFxMkTIM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, I was thinking of that.","msgtype":"m.text"}}
                      {"origin_server_ts":1714229831751,"event_id":"$6dwUBtmDeasCdNrOFCCQKNRAcmgt8tdKGm6XnAFJ-xQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I suspect the algorithm that assumes pre-sorted content has better cache behaviour.","msgtype":"m.text"}}
                      {"origin_server_ts":1714229877436,"event_id":"$2VzFjZl67iSZcAQxzkaeJ3zu89SNJk2TY0bLmI-A-uA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the incrementing version will make good use of cache for sorted anyway","msgtype":"m.text","formatted_body":"the incrementing version will make good use of cache for sorted anyway"}}
                      {"origin_server_ts":1714229878414,"event_id":"$IrII3uruc6nFWGShcAP2wzycNB50ElAO3q1GvtD-lj0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"But, in almost all cases, you need to sort first anyway, which would make it a lot slower anyway.","msgtype":"m.text"}}
                      {"origin_server_ts":1714229885214,"event_id":"$csVN3N8sCkUw0SDAAsRS4Igh9HcaP7u32dYMeAkEVVE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Oh yeah. You're right.","msgtype":"m.text"}}
                      {"origin_server_ts":1714229906382,"event_id":"$VRsHkipSM99vaxh7TlyzTcFkQZ7LTjjAHsdZ7CApMnA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, I'll adapt to BQN and J behaviour :-)","msgtype":"m.text"}}
                      {"origin_server_ts":1714229939034,"event_id":"$Vy1ZRhTHyCUpMM19iv1RB0zHfcICEWumQt7hn2INWus","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"this inverse is so important that imo it should really have its own primitive (incl. taking a left arg of the number of result elements)","msgtype":"m.text","formatted_body":"this inverse is so important that imo it should really have its own primitive (incl. taking a left arg of the number of result elements)"}}
                      {"origin_server_ts":1714229981109,"event_id":"$pI0CLsOLYSgJKLDQprxqCJMovgrilsz06cMTVWJY4Kc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"What do you mean by number of result elements? Do you mean `⌈/⍵`?","msgtype":"m.text","formatted_body":"What do you mean by number of result elements? Do you mean ⌈/⍵<\/code>?"}}
                      {"origin_server_ts":1714230001943,"event_id":"$NZ1C7u_ZcQGJhlvydB9GzWhVHidDEWScwtk6qD2C7zg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that'd be the \"default\" left argument","msgtype":"m.text","formatted_body":"that'd be the \"default\" left argument"}}
                      {"origin_server_ts":1714230012745,"event_id":"$OiimUD_W3Cl9yEyRb1tXGVbsWeqYiVN-3APA1vxrrpc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"that'd be the \"default\" left argument, yeah","msgtype":"m.text","formatted_body":"that'd be the \"default\" left argument, yeah"},"m.relates_to":{"event_id":"$NZ1C7u_ZcQGJhlvydB9GzWhVHidDEWScwtk6qD2C7zg","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* that'd be the \"default\" left argument, yeah","msgtype":"m.text","formatted_body":"* that'd be the \"default\" left argument, yeah"}}
                      {"origin_server_ts":1714230024902,"event_id":"$sJFTaxQRHNPzSI2vbAqVMMJdGICJxQly4DWlFofnQgQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"What would the result be if the argument is less than the max value?","msgtype":"m.text"}}
                      {"origin_server_ts":1714230031153,"event_id":"$KW20JuUp4YDMUJPR5F2PlDps1zA6lrDSyrcsqsneaIA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$IMr_kCy6RnaxCvrEav7CW_FK1pbW0XCWX1TRsuM4yVQ"}},"format":"org.matrix.custom.html","body":"there's some SIMD for when `⌈/⍵` is small (less than 24 or 48 depending on arch iirc); in general this is a histogram, which is notoriously hard to get much faster","msgtype":"m.text","formatted_body":" ↰ <\/a> dzaima<\/a> <\/mx-reply>there's some SIMD for when ⌈/⍵<\/code> is small (less than 24 or 48 depending on arch iirc); in general this is a histogram, which is notoriously hard to get much faster"}}
                      {"origin_server_ts":1714230076232,"event_id":"$OqDC5b0o0-K9vjpz6I_TeDJKs3jB7KCr1BBV3tQKbz4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$sJFTaxQRHNPzSI2vbAqVMMJdGICJxQly4DWlFofnQgQ"}},"format":"org.matrix.custom.html","body":"either an error, or ignoring the higher numbers, depending on how one feels about errors","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>either an error, or ignoring the higher numbers, depending on how one feels about errors"}}
                      {"origin_server_ts":1714230135375,"event_id":"$V16M51zp1lKvmFhGtUuV_GkK9Y4VZZYPA01y9QOf1Zk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"In that case, you can just use `10↑⍸˝` so I'm not sure the left argument is that important?","msgtype":"m.text","formatted_body":"In that case, you can just use 10↑⍸˝<\/code> so I'm not sure the left argument is that important?"}}
                      {"origin_server_ts":1714230221898,"event_id":"$pCuC2pRT3gvGzLijgUhWr1a4I4qCMMRELLr1rqXV3Kk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"indeed you can do that, but what if you didn't need to","msgtype":"m.text","formatted_body":"indeed you can do that, but what if you didn't need to"}}
                      {"origin_server_ts":1714230262063,"event_id":"$7TFcMS0q2RGXUiesKXdu_LikALOB6llimrL3lUZFWII","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(and ofc not requiring `↑` padding with a prototype furthers my agenda of destroying prototypes/filles)","msgtype":"m.text","formatted_body":"(and ofc not requiring ↑<\/code> padding with a prototype furthers my agenda of destroying prototypes/filles)"}}
                      {"origin_server_ts":1714230265178,"event_id":"$H9OcPgbCpO6gSmATGcuzEiM-JHx1gov3HZBRHa__gcM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(and ofc not requiring `↑` padding with a prototype furthers my agenda of destroying prototypes/fills)","msgtype":"m.text","formatted_body":"(and ofc not requiring ↑<\/code> padding with a prototype furthers my agenda of destroying prototypes/fills)"},"m.relates_to":{"event_id":"$7TFcMS0q2RGXUiesKXdu_LikALOB6llimrL3lUZFWII","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (and ofc not requiring `↑` padding with a prototype furthers my agenda of destroying prototypes/fills)","msgtype":"m.text","formatted_body":"* (and ofc not requiring ↑<\/code> padding with a prototype furthers my agenda of destroying prototypes/fills)"}}
                      {"origin_server_ts":1714230277784,"event_id":"$Fjp_LUTAtfugXOG4wAbNTXMdo_dIwzatI9MEIqJgLNk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(and ofc not requiring a padding `↑` furthers my agenda of destroying prototypes/fills)","msgtype":"m.text","formatted_body":"(and ofc not requiring a padding ↑<\/code> furthers my agenda of destroying prototypes/fills)"},"m.relates_to":{"event_id":"$7TFcMS0q2RGXUiesKXdu_LikALOB6llimrL3lUZFWII","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (and ofc not requiring a padding `↑` furthers my agenda of destroying prototypes/fills)","msgtype":"m.text","formatted_body":"* (and ofc not requiring a padding ↑<\/code> furthers my agenda of destroying prototypes/fills)"}}
                      {"origin_server_ts":1714230316566,"event_id":"$REhGdFSZpvzICB6UKwnk5S8LdyJRlqzxJbzLHv_xN58","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"The left argument could be an array of keys that you want to histogram instead? `\"a\" \"b\" histogram \"a\" \"a\" \"b\" \"b\" \"a` should return `3 2`.","msgtype":"m.text","formatted_body":"The left argument could be an array of keys that you want to histogram instead? \"a\" \"b\" histogram \"a\" \"a\" \"b\" \"b\" \"a<\/code> should return 3 2<\/code>."}}
                      {"origin_server_ts":1714230363089,"event_id":"$lhFtW7e3rTABrCXGVTLMh3o__nnxXdbFpj47_itsidE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima/APL:\n```\n> \"a\" \"b\" ⍧ \"a\" \"a\" \"b\" \"b\" \"a\"\n3 2\n```\n:)","msgtype":"m.text","formatted_body":"dzaima/APL:
                      > "a" "b" ⍧ "a" "a" "b" "b" "a"\n3 2<\/code><\/pre>:)"}}
                      {"origin_server_ts":1714230365205,"event_id":"$xEBKjgXonArYfOxbRxIMqgWAzujrOKur2r9U2YVWqBk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"In that case, your suggestion would just be `(⍳N) histogram A`.","msgtype":"m.text","formatted_body":"In that case, your suggestion would just be (⍳N) histogram A<\/code>."}}
                      {"origin_server_ts":1714230374389,"event_id":"$Hag3MVQFLQvuFMX--qVwYUFnG6uVnGBl_Rnl0JuJAZ8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Ooooh","msgtype":"m.text"}}
                      {"origin_server_ts":1714230375587,"event_id":"$BlzO2w7UrGPrgNOouuQZkk1dReWX7oQT6_wyR9Q5hg0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"indeed this is an alternative","msgtype":"m.text","formatted_body":"indeed this is an alternative"}}
                      {"origin_server_ts":1714230459509,"event_id":"$47Em96DrX17hCr9qVc8ITXtaDp37ayQgZe6jRtxK3zY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(monadic `⍧` in dzaima/APL is unique mask, from before Dyalog added that on monadic `≠`)","msgtype":"m.text","formatted_body":"(monadic ⍧<\/code> in dzaima/APL is unique mask, from before Dyalog added that on monadic ≠<\/code>)"}}
                      {"origin_server_ts":1714239998458,"event_id":"$s2mx2WplYs0Hz7oCOUf9HDW5RgXwtqSYLRADm5yflac","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The basic histogram algorithm has a data dependency issue when the same value is repeated multiple times in a short space, because it has to read and write the counter for that slot at each step. And of course this is more likely to happen with sorted inputs because all copies of a value go together.","msgtype":"m.text","formatted_body":"The basic histogram algorithm has a data dependency issue when the same value is repeated multiple times in a short space, because it has to read and write the counter for that slot at each step. And of course this is more likely to happen with sorted inputs because all copies of a value go together."}}
                      {"origin_server_ts":1714240238534,"event_id":"$zYbhV9ottOtvZCEj2bR-Spfx935BpryXrda_RKH1K5U","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"There are a whole lot of things that could be tried for this. The dependency can be broken by using multiple results and combining at the end, or sometimes by iterating out of order. Also thinking about going in segments and computing `2≠/¯1,segment`, then iterating over the set bits of this instead of going one value at a time if it's sparse enough.","msgtype":"m.text","formatted_body":"There are a whole lot of things that could be tried for this. The dependency can be broken by using multiple results and combining at the end, or sometimes by iterating out of order. Also thinking about going in segments and computing 2≠/¯1,segment<\/code>, then iterating over the set bits of this instead of going one value at a time if it's sparse enough."}}
                      {"origin_server_ts":1714240447942,"event_id":"$eKo_b7P59Ma0sdRFdgPHghYjrhLHhrpgcYNfSj0T3m4","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Probably best to have three options: dense case, go over element by element. Sparse case with only a few set bits, iterate over set bits. Ultra-sparse case with only one unique element, do a fast search for the end of that run (binary if sorted, otherwise vectorized linear) to skip ahead.","msgtype":"m.text","formatted_body":"Probably best to have three options: dense case, go over element by element. Sparse case with only a few set bits, iterate over set bits. Ultra-sparse case with only one unique element, do a fast search for the end of that run (binary if sorted, otherwise vectorized linear) to skip ahead."}}
                      {"origin_server_ts":1714240551725,"event_id":"$AOKWGS4raj3YWe004r204qzSfOmdk4XsUlvHePZu7QI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"In most cases, the interpreter doesn't know that without actually looking at the elements though (in some cases it does, if there is enough metadata available, but it's still limited to the types and ranges, and not the distribution)","msgtype":"m.text"}}
                      {"origin_server_ts":1714240770511,"event_id":"$x-vKDsGwgu6MJxGxO6__-ef14Bo2-gt3F8QINuQkdRc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Something in CBQN along these lines is the table builder for binary search [here](https://github.com/dzaima/CBQN/blob/master/src/singeli/src/bins.singeli#L81), where the left argument values have already been checked for sortedness.","msgtype":"m.text","formatted_body":"Something in CBQN along these lines is the table builder for binary search here<\/a>, where the left argument values have already been checked for sortedness."}}
                      {"origin_server_ts":1714240855532,"event_id":"$ExcTapH3gz4fDgRCrza3RFDRx6KmvVCwhhL2iFjj7T8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Checking a segment for sortedness or runs is pretty fast compared to doing histogram writes because it vectorizes. Obviously the binary search won't work but I think the rest makes sense for data not known to be sorted.","msgtype":"m.text","formatted_body":"Checking a segment for sortedness or runs is pretty fast compared to doing histogram writes because it vectorizes. Obviously the binary search won't work but I think the rest makes sense for data not known to be sorted."}}
                      {"origin_server_ts":1714241041517,"event_id":"$xCusDIZ6QGq0mhFR8NHRZdZtgbT1AVhv9gJaaXbXCXs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"You could also sample some segments at the beginning and drop to doing dense-only if not many runs are found.","msgtype":"m.text","formatted_body":"You could also sample some segments at the beginning and drop to doing dense-only if not many runs are found."}}
                      {"origin_server_ts":1714241221194,"event_id":"$BADT5lUbUTEUmTsfYP2RXXF9eN4cEp9XscLP3AyfUd4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Interesting ideas","msgtype":"m.text"}}
                      {"origin_server_ts":1714241234756,"event_id":"$pXD7OU5Ux_EvVm_btTGWQQ3_m4qcS6xNcB41K3rGNsM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I'll do the simple solution first and then benchmark","msgtype":"m.text"}}
                      {"origin_server_ts":1714241837506,"event_id":"$SK4MgHg3O_3ma7j0vhbZEIN2YS8HKTI9AcyOlcbcIoM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I was working on some better bencharray graphs for `/\u207c` a little while ago. Just did some proper CBQN v0.6.0 measurements and put them up: end of [this page](https://mlochbaum.github.io/bencharray/pages/replicate.html).","msgtype":"m.text","formatted_body":"I was working on some better bencharray graphs for /\u207c<\/code> a little while ago. Just did some proper CBQN v0.6.0 measurements and put them up: end of this page<\/a>."}}
                      {"origin_server_ts":1714241971309,"event_id":"$PD6nBn3HbWKvp7jymidW64myyl9FBkMCJUmh4Zh-pzs","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So you can see performance gets worse with long runs, although if they're big enough for 1-byte data the comparison-based counter recognizes it as a small-range case and helps out.","msgtype":"m.text","formatted_body":"So you can see performance gets worse with long runs, although if they're big enough for 1-byte data the comparison-based counter recognizes it as a small-range case and helps out."}}
                      {"origin_server_ts":1714294723564,"event_id":"$Py40r8eiEn3ngv4a9WOiGSZ7FHuR0n-HDy3bIHGcXn4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Marshall: I was out biking today and was thinking about the formal definition of inverse iota underbar. In the podcast you said that the extension is that the inverse accepts non-sorted lists. ","msgtype":"m.text"}}
                      {"origin_server_ts":1714294731318,"event_id":"$omgPf3ThHGAY_Vth8qNGKM0BywmnXpbh5el68GqQoaI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Id like to define it differently. ","msgtype":"m.text"}}
                      {"origin_server_ts":1714294747000,"event_id":"$3nzQ7gw8mk792KZqT-32slCiB8C-tw3bS27AYdmm4pY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"I'd like to define it differently. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$omgPf3ThHGAY_Vth8qNGKM0BywmnXpbh5el68GqQoaI","rel_type":"m.replace"},"body":"* I'd like to define it differently. ","msgtype":"m.text"}}
                      {"origin_server_ts":1714294815711,"event_id":"$9Bxue2HjZz_RxHKYgv4QddtSd7JKcCvSb7DCKxQsWd8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Instead, the input domain of iota underbar should be defined as an ordered array of natural numbers. The output domain is an unordered set of natural numbers. ","msgtype":"m.text"}}
                      {"origin_server_ts":1714294868002,"event_id":"$ZDj645EIJ9BsZY1EaxlDYigyPFE1_0J-yX3iozcXhv4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The extension here is not in the inverse, but in the primary function: the extension is simply that it returns the values in the set in a sorted form. But formally it's an unordered set. ","msgtype":"m.text"}}
                      {"origin_server_ts":1714294896224,"event_id":"$qC_t-zukdHWm0NyGsvHG4X59exbMhz_k8N2KMOY0F5E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Mathematically that makes more sense I think, and the actual implementation is identical","msgtype":"m.text"}}
                      {"origin_server_ts":1714294922144,"event_id":"$Zz5k953NK-tfkeYMy1PsrWPdP9l4xrLMa6gwZs3lfcQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Marshall:  I was out biking today and was thinking about the formal definition of inverse iota underbar. In the podcast you said that the extension is that the inverse accepts non-sorted lists. ","msgtype":"m.text"}}
                      {"origin_server_ts":1714302118243,"event_id":"$7-Q1DOMmKQrg5KV3BEfTFEImiEqSucwAg4f1MiSoUpk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$qC_t-zukdHWm0NyGsvHG4X59exbMhz_k8N2KMOY0F5E"}},"format":"org.matrix.custom.html","body":"the general idea behind that would be \"for the purposes of inverses, a function can have valid results other than the one it actually gives for a given input\". Which is a neat idea, except that it also allows one to define every function as having all possible outputs as valid, making inverses able to do anything at all, so you don't escape needing special-casing/case-by-case descriptions","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>the general idea behind that would be \"for the purposes of inverses, a function can have valid results other than the one it actually gives for a given input\". Which is a neat idea, except that it also allows one to define every function as having all possible outputs as valid, making inverses able to do anything at all, so you don't escape needing special-casing/case-by-case descriptions"}}
                      {"origin_server_ts":1714302460533,"event_id":"$osFX-eEZ_uoXqCx7bRE7u4n_1x_V4YJ12e30kQFm9Fs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(namely, instead of saying that `⍸⍣¯1⊢3 1 4 1 5 9 2 6` maps to ``⍸⍣¯1⊢1 1 2 3 4 5 6 9``, you could instead say that it maps to `⍸⍣¯1⊢3 3 4 4 5 9 9 9`)","msgtype":"m.text","formatted_body":"(namely, instead of saying that ⍸⍣¯1⊢3 1 4 1 5 9 2 6<\/code> maps to ⍸⍣¯1⊢1 1 2 3 4 5 6 9<\/code>, you could instead say that it maps to ⍸⍣¯1⊢3 3 4 4 5 9 9 9<\/code>)"}}
                      {"origin_server_ts":1714302463920,"event_id":"$bdeOGaPk6Qe8Vw-jFsso0kMBPxaUvIGt2bgkhGbszww","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(namely, instead of saying that `⍸⍣¯1⊢3 1 4 1 5 9 2 6` maps to ``⍸⍣¯1⊢1 1 2 3 4 5 6 9``, you could instead say that it maps to `⍸⍣¯1⊢3 3 4 4 5 9 9 9` or something)","msgtype":"m.text","formatted_body":"(namely, instead of saying that ⍸⍣¯1⊢3 1 4 1 5 9 2 6<\/code> maps to ⍸⍣¯1⊢1 1 2 3 4 5 6 9<\/code>, you could instead say that it maps to ⍸⍣¯1⊢3 3 4 4 5 9 9 9<\/code> or something)"},"m.relates_to":{"event_id":"$osFX-eEZ_uoXqCx7bRE7u4n_1x_V4YJ12e30kQFm9Fs","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (namely, instead of saying that `⍸⍣¯1⊢3 1 4 1 5 9 2 6` maps to ``⍸⍣¯1⊢1 1 2 3 4 5 6 9``, you could instead say that it maps to `⍸⍣¯1⊢3 3 4 4 5 9 9 9` or something)","msgtype":"m.text","formatted_body":"* (namely, instead of saying that ⍸⍣¯1⊢3 1 4 1 5 9 2 6<\/code> maps to ⍸⍣¯1⊢1 1 2 3 4 5 6 9<\/code>, you could instead say that it maps to ⍸⍣¯1⊢3 3 4 4 5 9 9 9<\/code> or something)"}}
                      {"origin_server_ts":1714302738444,"event_id":"$dnMdfsyvB073n4wyUDVnLvLRHMgqXexsrQ-OYTh6ueU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You could, but that wouldn't be useful. It's clear that the idea of iota underbar inverse needs an extension, since the behaviour itself isn't rigorous. The question is simply what you define that extension to be. BQN defines it as the ability to pass unordered input to the inverse, making the input and output domains ordered lists of natural numbers. ","msgtype":"m.text"}}
                      {"origin_server_ts":1714302790352,"event_id":"$ATOGDvrcprig85fgZ32RaUMhLijpS0Lu3cRVRFgEq6I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"My way of looking at it changes the output domain of the primary function to be an unordered set instead, making the formulation of the extension simpler. ","msgtype":"m.text"}}
                      {"origin_server_ts":1714302844600,"event_id":"$MbNbUJ5TOaUR3aX0OWexWgOM2W2BVxdPHk_GhE7RgL8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The only thing this really affects is how this will be repainted in the documentation. The implementation is identical. ","msgtype":"m.text"}}
                      {"origin_server_ts":1714302853915,"event_id":"$urfsvkW5hPUDFxwWxLnlV5u5GIzxfU8kXv6xa_sQBqE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"right, unsorted indices inverse does definitely require some special-casing; that is, if you have it, which I think you shouldn't, and instead should have it as a separate glyph","msgtype":"m.text","formatted_body":"right, unsorted indices inverse does definitely require some special-casing; that is, if you have it, which I think you shouldn't, and instead should have it as a separate glyph"}}
                      {"origin_server_ts":1714302858669,"event_id":"$qKZiCVXtdLlogh0wpFmube34a-g9IVrq0p82GbOByNk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"The only thing this really affects is how this will be explained in the documentation. The implementation is identical. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$MbNbUJ5TOaUR3aX0OWexWgOM2W2BVxdPHk_GhE7RgL8","rel_type":"m.replace"},"body":"* The only thing this really affects is how this will be explained in the documentation. The implementation is identical. ","msgtype":"m.text"}}
                      {"origin_server_ts":1714302914303,"event_id":"$ykK4Nks-MKsrXUEc-laILLJyh127u7rt1FswqYucHvY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Of course. I tend to agree with you on the general usefulness of the function and that it probably should be disconnected from its inverse. ","msgtype":"m.text"}}
                      {"origin_server_ts":1714302962786,"event_id":"$IJmkHMzbGiQNJwHQR0OD1tTK49ZJpwQquriVaVagsvU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But given the implementation as it stands in BQN and J, I feel that my way of defining it is more straightforward. ","msgtype":"m.text"}}
                      {"origin_server_ts":1714310076959,"event_id":"$--7Z67UvI7I8fPGrqolLS9u53WLoNWbMQYVK8c1wNGM","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I use the output ordering of `⍸` all the time so it still feels like there's a big gap there. But breaking the extended inverse down as `Set∘⍸⍣¯1∘Set` is a nice presentation at least.","msgtype":"m.text","formatted_body":"I use the output ordering of ⍸<\/code> all the time so it still feels like there's a big gap there. But breaking the extended inverse down as Set∘⍸⍣¯1∘Set<\/code> is a nice presentation at least."}}
                      {"origin_server_ts":1714310370192,"event_id":"$7-oFpjw4tyix0gPr2ABa1lBwOqklCpt2lR4hVa2nHWk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think `Set∘⍸` being exactly invertible (as a function from lists of naturals to sets of naturals) does help explain why this is a sensible extension actually.","msgtype":"m.text","formatted_body":"I think Set∘⍸<\/code> being exactly invertible (as a function from lists of naturals to sets of naturals) does help explain why this is a sensible extension actually."}}
                      {"origin_server_ts":1714310386773,"event_id":"$OYVWYd7lic9Ksb8ikX1tgUHRTu9rts_dL46i7yproLg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Right, that's what I was thinking.","msgtype":"m.text"}}
                      {"origin_server_ts":1714310433595,"event_id":"$7TS7M8LhRfV5th8oase3sLXHp_IElDi3OlXi7OJPu0g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It avoids the mention of ordering at all (except when explaining what the extension does)","msgtype":"m.text"}}
                      {"origin_server_ts":1714310693244,"event_id":"$3Pi59ryBMYXl1Fw_xnsNQlSHgAOJ_N-DaNc5Vvrm25M","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Although `⌈⍀∘⍸⍣¯1∘(⌈⍀)` works for dzaima's example. Only difference I see is that sets of natural numbers is a nicer domain than non-decreasing lists of natural numbers.","msgtype":"m.text","formatted_body":"Although ⌈⍀∘⍸⍣¯1∘(⌈⍀)<\/code> works for dzaima's example. Only difference I see is that sets of natural numbers is a nicer domain than non-decreasing lists of natural numbers."}}
                      {"origin_server_ts":1714670213404,"event_id":"$MElcwNBi4GyLTO5GxGB02uiLdPNHT4gR2VM07NGtWEY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I've implemented a new function that can be useful: https://kapdemo.dhsdevelopments.com/reference.html#_mathfactor_prime_factorisation","msgtype":"m.text"}}
                      {"origin_server_ts":1714670389562,"event_id":"$rs1KzyTIjCM7sHcP1nIyJSb_f1EWAKuH8UvkYyrBRJg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org","@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: dzaima My implementation of the factorisation function is really simple, and there must be a way to speed it up. Are you familiar with any useful algorithms here?","msgtype":"m.text","formatted_body":"Marshall<\/a>: dzaima<\/a> My implementation of the factorisation function is really simple, and there must be a way to speed it up. Are you familiar with any useful algorithms here?"}}
                      {"origin_server_ts":1714670391546,"event_id":"$xfrNMHq_3G3b5TWa1sq2-7jwdBBDwSPESTSUnAfAN5c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://codeberg.org/loke/array/src/branch/master/array/src/commonMain/kotlin/array/builtins/prime.kt","msgtype":"m.text"}}
                      {"origin_server_ts":1714670916667,"event_id":"$n9Dml3qwoGI0tf0D09jCXkVe8ItgmbUzgn6rELh1wGg","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I used Pollard's Rho algorithm [here](https://github.com/mlochbaum/bqn-libs/blob/master/primes.bqn#L190-L214), good for numbers up to float integer range but I think it starts getting slow a bit past that. Eventually you want elliptic curve factorization.","msgtype":"m.text","formatted_body":"I used Pollard's Rho algorithm here<\/a>, good for numbers up to float integer range but I think it starts getting slow a bit past that. Eventually you want elliptic curve factorization."}}
                      {"origin_server_ts":1714671190308,"event_id":"$7PoJTRC_QLC6Ex4QbRwaWHe_yQcihFpMZLECaMYrxM0","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Also you need to do a primality test before starting it. I used Miller-Rabin with fixed sets of witnesses but each set only works up to a particular range and I only cover floating-point range.","msgtype":"m.text","formatted_body":"Also you need to do a primality test before starting it. I used Miller-Rabin with fixed sets of witnesses but each set only works up to a particular range and I only cover floating-point range."}}
                      {"origin_server_ts":1714671353341,"event_id":"$3kCEUTSHNk82ukYgbpLywlBiZ-1ldXG_Hyba0zRk8uk","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I used [Julia's library](https://github.com/JuliaMath/Primes.jl/blob/main/src/Primes.jl) for reference, and it handles arbitrary integers. I think it's pretty good overall although I found a performance bug in their Pollard's Rho implementation (but sent in a PR which was accepted).","msgtype":"m.text","formatted_body":"I used Julia's library<\/a> for reference, and it handles arbitrary integers. I think it's pretty good overall although I found a performance bug in their Pollard's Rho implementation (but sent in a PR which was accepted)."}}
                      {"origin_server_ts":1714672114339,"event_id":"$d3oiCXcboupc5R7RynsrkRfaLNG6XLqXIGSRBEF-HI8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thanks. I'll take a look.","msgtype":"m.text"}}
                      {"origin_server_ts":1714711423818,"event_id":"$X-ZtCkFwGSXaObN20bL5f_dFC5A0LqTZr4MM0n4Zgpw","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1714711457638,"event_id":"$_rVzBeetd1ZGcsk7-1uLk2O5bcjWchIjf8MGgPCI-d4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$X-ZtCkFwGSXaObN20bL5f_dFC5A0LqTZr4MM0n4Zgpw","type":"m.room.redaction","content":{"redacts":"$X-ZtCkFwGSXaObN20bL5f_dFC5A0LqTZr4MM0n4Zgpw"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                      {"origin_server_ts":1714711457638,"event_id":"$_rVzBeetd1ZGcsk7-1uLk2O5bcjWchIjf8MGgPCI-d4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$X-ZtCkFwGSXaObN20bL5f_dFC5A0LqTZr4MM0n4Zgpw","type":"m.room.redaction","content":{"redacts":"$X-ZtCkFwGSXaObN20bL5f_dFC5A0LqTZr4MM0n4Zgpw"}}
                      {"origin_server_ts":1714712477185,"event_id":"$488iM6oTw3skX-Fwn6xi0ekbJME03wnsx8_G5jFexGg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: I'm looking at the [wikipedia description](https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test#Miller%E2%80%93Rabin_test) and I don't understand the first part: \"let s > 0 and d odd > 0 such that n − 1 = 2^s d\"","msgtype":"m.text","formatted_body":"Marshall<\/a>: I'm looking at the wikipedia description<\/a> and I don't understand the first part: \"let s > 0 and d odd > 0 such that n − 1 = 2^s d\""}}
                      {"origin_server_ts":1714712777097,"event_id":"$gRUyKAkiehp07TblTHqxmO2EsO_QkCvOVzjWZd6x3dQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Also, since the Miller-Rabin test only gives you a probability that the number is prime, how can I use that in a factorisation function? I'd need to be sure it's prime if I want to use it to avoid iterating to find the factors.","msgtype":"m.text"}}
                      {"origin_server_ts":1714734783082,"event_id":"$2sRXoTqtB84RD49Lg9O9lDZ3D3nunpxstusX_aXKPj4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"OK, I implemented a function `math:divisors`:","msgtype":"m.text","formatted_body":"OK, I implemented a function math:divisors<\/code>:"}}
                      {"origin_server_ts":1714734785180,"event_id":"$9PyiQQmssMA5ggmeXmVAqQ4Z9kJiqeVWxjZnAVMN4Ww","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://kapdemo.dhsdevelopments.com/reference.html#_mathdivisors_calculate_divisors","msgtype":"m.text"}}
                      {"origin_server_ts":1714736889789,"event_id":"$fkQSsQhE3I1wSy7CT79Wo2NF-JezQG3YRxMZWmmLVy8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What should this function actually return, should it include both 1 and n? Or only one of them?","msgtype":"m.text"}}
                      {"origin_server_ts":1714736904112,"event_id":"$_DP7IxYTveAjNdgmxQ23MhSWYgcl300hovwT1sERqVY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"What is the most consistent result? ","msgtype":"m.text"}}
                      {"origin_server_ts":1714738952818,"event_id":"$kjJNg71Ji0r9veBlfhq5hF4_4us4G23j099TRtnL7TU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"In math \"divisor\" usually only restricts to non-negative integers, so that includes 1 and n. \"Proper divisor\" excludes n.","msgtype":"m.text","formatted_body":"In math \"divisor\" usually only restricts to non-negative integers, so that includes 1 and n. \"Proper divisor\" excludes n."}}
                      {"origin_server_ts":1714739002129,"event_id":"$D9Tk14einbAgQdezQhLU-tFAnzJvy8aObYIJGzEaFZo","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[Last time](https://mlochbaum.github.io/BQN-Musician/theory/symmetric.html) I remember using divisors I did actually need both of those in different places.","msgtype":"m.text","formatted_body":"Last time<\/a> I remember using divisors I did actually need both of those in different places."}}
                      {"origin_server_ts":1714739118748,"event_id":"$g30PZEhc-olAmQ7OkvnPx0q0M96ON3hF0Rby7OYBeEw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Easy to go back and forth though. `pd` is `¯1↓d` and `d` is `pd⍛,`.","msgtype":"m.text","formatted_body":"Easy to go back and forth though. pd<\/code> is ¯1↓d<\/code> and d<\/code> is pd⍛,<\/code>."}}
                      {"origin_server_ts":1714739354946,"event_id":"$9k4pykA222W8LQv7Nxad31CKrOvtjJe7WSSNUnJ0jCY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Not quite. It fails on 1.","msgtype":"m.text"}}
                      {"origin_server_ts":1714739400873,"event_id":"$qP9HtyRibgVRXU7_wi0sWYv-aemNzyg91ejXP7XnvW4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But if it includes 1 but excludes n, it's consistent.","msgtype":"m.text"}}
                      {"origin_server_ts":1714739403014,"event_id":"$V1kh8H1ylvqT2dxQNvQ__NsCMBc2T5uOTyA-OGyIPnw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think.","msgtype":"m.text"}}
                      {"origin_server_ts":1714739412182,"event_id":"$c8MTTvvYq0jr_JZYmBXx7Y1A9gorGZE_cF1yMvS-Mrc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think I left divisors out of primes.bqn on the grounds that they're easy to compute with `(×⌜´⋆⟜(↕⊸∾)¨˝) FactorExponents`, that is, raise each prime to all powers up to the number of times it can appear and then make a multiplication table out of those.","msgtype":"m.text","formatted_body":"I think I left divisors out of primes.bqn on the grounds that they're easy to compute with (×⌜´⋆⟜(↕⊸∾)¨˝) FactorExponents<\/code>, that is, raise each prime to all powers up to the number of times it can appear and then make a multiplication table out of those."}}
                      {"origin_server_ts":1714739576005,"event_id":"$hYTdggDije_8p1-I0DAUBvTrTv4opn4fJo_HtsgoKCU","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I think I left divisors out of primes.bqn on the grounds that they're easy to compute with `(×⌜´⋆⟜(↕⊸∾)¨˝) FactorExponents`, that is, raise each prime to all powers up to the number of times it appears and then make a multiplication table out of those.","msgtype":"m.text","formatted_body":"I think I left divisors out of primes.bqn on the grounds that they're easy to compute with (×⌜´⋆⟜(↕⊸∾)¨˝) FactorExponents<\/code>, that is, raise each prime to all powers up to the number of times it appears and then make a multiplication table out of those."},"m.relates_to":{"event_id":"$c8MTTvvYq0jr_JZYmBXx7Y1A9gorGZE_cF1yMvS-Mrc","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* I think I left divisors out of primes.bqn on the grounds that they're easy to compute with `(×⌜´⋆⟜(↕⊸∾)¨˝) FactorExponents`, that is, raise each prime to all powers up to the number of times it appears and then make a multiplication table out of those.","msgtype":"m.text","formatted_body":"* I think I left divisors out of primes.bqn on the grounds that they're easy to compute with (×⌜´⋆⟜(↕⊸∾)¨˝) FactorExponents<\/code>, that is, raise each prime to all powers up to the number of times it appears and then make a multiplication table out of those."}}
                      {"origin_server_ts":1714739597829,"event_id":"$v7D6pwnG4RKuE4APecWhBOEId3_UL-gV0DFaU9ViOuE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"1 isn't a proper divisor of 1. The rule is that proper divisors are all less than n, there's no rule that 1 has to be included.","msgtype":"m.text","formatted_body":"1 isn't a proper divisor of 1. The rule is that proper divisors are all less than n, there's no rule that 1 has to be included."}}
                      {"origin_server_ts":1714739843295,"event_id":"$plpn4iFLEMpWELgGZBQk1MF0r648FB3zoCngXd2Ywy0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right but my point was that if you include non-proper ones, you have the question as to whether 1 should return 1 1 or just 1.","msgtype":"m.text"}}
                      {"origin_server_ts":1714739880568,"event_id":"$SJz3zoGOs2o2b5aGO8UEmjVhhDXjpl9n76tvqYOOUYk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Otherwise these tricks of dropping an element to convert between the forms will fail.","msgtype":"m.text"}}
                      {"origin_server_ts":1714740026356,"event_id":"$XOcgRzFmymMYIF-jyt7etViqqnnuBYJ44AsXhI-QAbI","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Divisors are `,1` and proper divisors are `⍳0`. The conversion still works.","msgtype":"m.text","formatted_body":"Divisors are ,1<\/code> and proper divisors are ⍳0<\/code>. The conversion still works."}}
                      {"origin_server_ts":1714740143267,"event_id":"$W7R8e5yjJJk2beLjeCgG-5JVK8PG-a6EP2tjcPph3e8","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The symmetric scales page uses this: \"No base case needed, because 1 has no divisors!\" (meaning proper divisors).","msgtype":"m.text","formatted_body":"The symmetric scales page uses this: \"No base case needed, because 1 has no divisors!\" (meaning proper divisors)."}}
                      {"origin_server_ts":1714740245559,"event_id":"$4h-L7uFaPylGt0Jkw82zoKhdiFKYLyxPl1X_mygHlcc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So are you suggesting I don't include 1 and n?","msgtype":"m.text"}}
                      {"origin_server_ts":1714740788500,"event_id":"$QQA-UzZulG8CqMQHkhNvReBt2277yOtqxJYTfYKU5yc","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"In the case that 1 is n. For any other number, 1 is a proper divisor.","msgtype":"m.text","formatted_body":"In the case that 1 is n. For any other number, 1 is a proper divisor."}}
                      {"origin_server_ts":1714740899523,"event_id":"$B8tnOO5lUr7xbYLOQ9BcjLWmOQvnCLrRdPG1Y_UgRvw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"So, there's no common definition that treats 1 differently from any other number.","msgtype":"m.text","formatted_body":"So, there's no common definition that treats 1 differently from any other number."}}
                      {"origin_server_ts":1714741409073,"event_id":"$WAM28ccxBWcYo7QgFDia2XhQV_J1HHFyESGGJ3uOQCE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Thing is, if the general rule says: 1 and n is included, then if n is 1, it gets included twice.","msgtype":"m.text"}}
                      {"origin_server_ts":1714741441822,"event_id":"$K7jvc0vTDYqHkXl6gMKplVZ-b6GIflhTEVnnhpjK_Sg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So how is the rule written such that the result from 1 is consistent? ","msgtype":"m.text"}}
                      {"origin_server_ts":1714741549337,"event_id":"$Zqn8PbxLzOEFXEYiJuGD3BXRV9Iy4u3UAr3edlGaTes","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"The rule is, a non-negative integer is a divisor of n if n is an integer multiple of it. It's a proper divisor if it's also less than n. Why would there need to be a special rule about 1?","msgtype":"m.text","formatted_body":"The rule is, a non-negative integer is a divisor of n if n is an integer multiple of it. It's a proper divisor if it's also less than n. Why would there need to be a special rule about 1?"}}
                      {"origin_server_ts":1714741696994,"event_id":"$bssqg4QJ72Pn9MgIc3sLJk0hDNpd5CqUo8_pFGroRc8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I don't want a special rule. I want a single rule that returns something that is as consistent as possible for all inputs. That includes 0 which should return the empty list. I also want a rule that states that for two different inputs the corresponding outputs are also different, which means that 1 cannot give the empty list.","msgtype":"m.text"}}
                      {"origin_server_ts":1714741785200,"event_id":"$SvQnKJzSaG0v095-Ol8sx8UXkoRWW_LBr76gVdvvKr0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Now, stating the rule as \"the return value is all divisiors excluding n\" would satisfy all this.","msgtype":"m.text"}}
                      {"origin_server_ts":1714741799517,"event_id":"$4yVHdX4uvgoqsc5NMcW-dy5gnTO9UOtb--VGBRDvu8Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Now, stating the rule as \"the return value is all divisors excluding n\" would satisfy all this.","msgtype":"m.text"},"m.relates_to":{"event_id":"$SvQnKJzSaG0v095-Ol8sx8UXkoRWW_LBr76gVdvvKr0","rel_type":"m.replace"},"body":"* Now, stating the rule as \"the return value is all divisors excluding n\" would satisfy all this.","msgtype":"m.text"}}
                      {"origin_server_ts":1714741851980,"event_id":"$6SSLZLo8pasK_xKNpWNN3Qtl0fH_vabqoCzlEvPLyW4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Stating it as \"all proper divisors plus n\" would also work, with 0 then returning 0.","msgtype":"m.text"}}
                      {"origin_server_ts":1714741885516,"event_id":"$DjiUx2Pmr8tjT_NuEo5NJITvDgFfKrmHLDELmuEmb8E","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"\"I want a consistent rule but I also want it to give these answers that I made up with no justification\"","msgtype":"m.text","formatted_body":"\"I want a consistent rule but I also want it to give these answers that I made up with no justification\""}}
                      {"origin_server_ts":1714741908569,"event_id":"$SJvlIiLUNkG9SLIQEFbT2O5FFwQYWXx5-OJ8sISAFrY","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Every integer is a divisor of 0. I think it's best to just not accept 0 as an argument.","msgtype":"m.text","formatted_body":"Every integer is a divisor of 0. I think it's best to just not accept 0 as an argument."}}
                      {"origin_server_ts":1714741947458,"event_id":"$XI_it6gSKn7Ptuo8VGaYs766CMxLQNFO6sG-k0NVRCM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's a good point.","msgtype":"m.text"}}
                      {"origin_server_ts":1714805172735,"event_id":"$rfQeQewBzjse24rVIYVQPjV2Uv-bm1TMREfUsN75n7Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Marshall: given the pri.e factorisation of a number, what is the most efficient way to find all the divisors? You mentioned it was much more efficient than just checking everything up to the square root of the value.","msgtype":"m.text"}}
                      {"origin_server_ts":1714806874699,"event_id":"$V159OBI1MdWpo-xWT0ScVVzY3lAVP4J03PIXEe19Emk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Marshall: given the prime factorisation of a number, what is the most efficient way to find all the divisors? You mentioned it was much more efficient than just checking everything up to the square root of the value.","msgtype":"m.text"},"m.relates_to":{"event_id":"$rfQeQewBzjse24rVIYVQPjV2Uv-bm1TMREfUsN75n7Y","rel_type":"m.replace"},"body":"* Marshall: given the prime factorisation of a number, what is the most efficient way to find all the divisors? You mentioned it was much more efficient than just checking everything up to the square root of the value.","msgtype":"m.text"}}
                      {"origin_server_ts":1714817558647,"event_id":"$IxQohKcC1-6OiZZarb59gqWm8zwb2ggVsYHYWfRZlwI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"The best I can come up with this this, it still requires me to compute a lot of duplicates:\n```\n{ y←math:factor ⍵ ⋄ ¯1↓ ∧∪ (⊂y) {×/(((≢y)⍴2)⊤⍵)/y}¨ 1+⍳¯1+2⋆≢y }\n```","msgtype":"m.text","formatted_body":"

                      The best I can come up with this this, it still requires me to compute a lot of duplicates:<\/p>\n

                      { y←math:factor ⍵ ⋄ ¯1↓ ∧∪ (⊂y) {×/(((≢y)⍴2)⊤⍵)/y}¨ 1+⍳¯1+2⋆≢y }\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1714817581511,"event_id":"$G-zpR8uOy7Ey-LcJvV9NvyOkSc2wiSBjzZPRR32EcXo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"The best I can come up with this this, it still requires me to compute a lot of duplicates:\n\n```\n{ y←math:factor ⍵ ⋄ ¯1↓ ∧∪ (⊂y) {×/ (((≢y)⍴2) ⊤ ⍵)/y}¨ 1+⍳¯1+2⋆≢y }\n```","msgtype":"m.text","formatted_body":"

                      The best I can come up with this this, it still requires me to compute a lot of duplicates:<\/p>\n

                      { y←math:factor ⍵ ⋄ ¯1↓ ∧∪ (⊂y) {×/ (((≢y)⍴2) ⊤ ⍵)/y}¨ 1+⍳¯1+2⋆≢y }\n<\/code><\/pre>\n"},"m.relates_to":{"event_id":"$IxQohKcC1-6OiZZarb59gqWm8zwb2ggVsYHYWfRZlwI","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * The best I can come up with this this, it still requires me to compute a lot of duplicates:\n\n```\n{ y←math:factor ⍵ ⋄ ¯1↓ ∧∪ (⊂y) {×/ (((≢y)⍴2) ⊤ ⍵)/y}¨ 1+⍳¯1+2⋆≢y }\n```","msgtype":"m.text","formatted_body":" * 

                      The best I can come up with this this, it still requires me to compute a lot of duplicates:<\/p>\n

                      { y←math:factor ⍵ ⋄ ¯1↓ ∧∪ (⊂y) {×/ (((≢y)⍴2) ⊤ ⍵)/y}¨ 1+⍳¯1+2⋆≢y }\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1714822364688,"event_id":"$QTxKvYsf6t6CVyK12Sg3OTO-840Rjiigv4p23PWbJyw","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$c8MTTvvYq0jr_JZYmBXx7Y1A9gorGZE_cF1yMvS-Mrc"}},"format":"org.matrix.custom.html","body":"You want to use the unique factors with multiplicity. I had a BQN implementation here, can be translated to `{⊃×⌻/ (1,×⍀)¨ ⊢/ ⌸⍨ math:factor ⍵}`.","msgtype":"m.text","formatted_body":" ↰ <\/a> Marshall<\/a> <\/mx-reply>You want to use the unique factors with multiplicity. I had a BQN implementation here, can be translated to {⊃×⌻/ (1,×⍀)¨ ⊢/ ⌸⍨ math:factor ⍵}<\/code>."}}
                      {"origin_server_ts":1714825674137,"event_id":"$t8CUiPQ6K0Xrl8Y1PRfx6beEIgdCIRKgCs2Brlh3Iu8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Oh now I understand.","msgtype":"m.text"}}
                      {"origin_server_ts":1714825704930,"event_id":"$EBzrj_3rpqAVb7tsmGsVXOJ4FasoNxoQZXEJ9A8i5wk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"When I saw your BQN solution first, I didn't grok it, so I didn't think about it when I started thinking about a solution to this.","msgtype":"m.text"}}
                      {"origin_server_ts":1714831775645,"event_id":"$jJZkxeNrtPuPIk4rFoyLWpE4kXJ8OgseUvFyWWR_nmU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: by the way, this was clever: `⊢/ ⌸⍨`.","msgtype":"m.text","formatted_body":"Marshall<\/a>: by the way, this was clever: ⊢/ ⌸⍨<\/code>."}}
                      {"origin_server_ts":1714831794727,"event_id":"$tg2J4vCsvatJJcHOSqnSt5KbwnwgXmBvz0stCP1O5tM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"`((1,2≠/)⍛⊆)` is probably more efficient, but it's still pretty cool.","msgtype":"m.text","formatted_body":"((1,2≠/)⍛⊆)<\/code> is probably more efficient, but it's still pretty cool."}}
                      {"origin_server_ts":1714831820727,"event_id":"$nTgmww5upb6Pvm_Y6tyEPp4Eg0akBT9hwxfAFu4L7_Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"`(1,2≠/)⍛⊆` is probably more efficient, but it's still pretty cool.","msgtype":"m.text","formatted_body":"(1,2≠/)⍛⊆<\/code> is probably more efficient, but it's still pretty cool."},"m.relates_to":{"event_id":"$tg2J4vCsvatJJcHOSqnSt5KbwnwgXmBvz0stCP1O5tM","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * `(1,2≠/)⍛⊆` is probably more efficient, but it's still pretty cool.","msgtype":"m.text","formatted_body":" * (1,2≠/)⍛⊆<\/code> is probably more efficient, but it's still pretty cool."}}
                      {"origin_server_ts":1714836483120,"event_id":"$N9SwQThY-4z8URBZXGz28de52wXbhvLSHO50lYac0II","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"Since factors are a set, I don't like to bring the ordering into it. Performance can be about the same if `math:factor` flags its output as sorted and `⌸` uses that.","msgtype":"m.text","formatted_body":"Since factors are a set, I don't like to bring the ordering into it. Performance can be about the same if math:factor<\/code> flags its output as sorted and ⌸<\/code> uses that."}}
                      {"origin_server_ts":1714836686228,"event_id":"$DauFM_mlWk2IP-PX0JEeeW5Ad9XfcgePh927rWUy-IE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Good point.","msgtype":"m.text"}}
                      {"origin_server_ts":1714836709591,"event_id":"$yaiayiPrpmXG4MGG0Kt8GEjV_sGBwB_cMvKlD8cunAo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Sortedness is not carried in the value metadata, but it would be trivial to do so.","msgtype":"m.text"}}
                      {"origin_server_ts":1714928714561,"event_id":"$LmySsVP0M_VcHVbMV61QnweRSS_ZOOkdzZyVTwkdZic","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The Java versions of Kap now requires Java 21. I started taking advantage of some features in it that wasn't available in 17.","msgtype":"m.text"}}
                      {"origin_server_ts":1715142730456,"event_id":"$DgmjEO6CPad7x_ivliSeLqW2fgpWzGBYQ9AHL2Bfw3I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Ouch, I wrote some code that ran much slower than expected. My test case took 30 seconds to complete, and when I ran almost exactly the same code on Dyalog it took 600 ms. That's way beyond what I expected, so I checked in the profiler. Long store short: My new, much more strict, numeric comparison rules caused the problem.","msgtype":"m.text"}}
                      {"origin_server_ts":1715142815897,"event_id":"$3avQTdNRXrHgzT6Hyl8wqkqbqkJruKrXiNv45bVC03c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"My code did something like this: `25 > 1.1 1.2 1.3 ...`. I.e. it compared a very large array of floating point numbers with a decimal value. Changing the `25` to `25.0` made it take a bit over 1 second, which is a couple of times slower than Dyalog, which is what I'd expect.","msgtype":"m.text","formatted_body":"My code did something like this: 25 > 1.1 1.2 1.3 ...<\/code>. I.e. it compared a very large array of floating point numbers with a decimal value. Changing the 25<\/code> to 25.0<\/code> made it take a bit over 1 second, which is a couple of times slower than Dyalog, which is what I'd expect."}}
                      {"origin_server_ts":1715142985515,"event_id":"$jNgLOkNpO9KSS-QwuZawU8VJsMuVmu_WBlDtIX3DpdU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Why was the comparison slow? Well, the root cause is one of the restrictions I placed on numeric comparisons: \"if a=b, then a and b must return the same hash value\". Also, \"if a=b and b=c, then if at all possible, then a=c\". The way my implementation does this is to perform integer-to-float comparisons by rationalising the float and then do a rational comparison.","msgtype":"m.text"}}
                      {"origin_server_ts":1715143025494,"event_id":"$qY51e2xfyvwKN6OBRI7qOXxRU8dPXGdbUJXdnKRthhE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"So in the example `25 < 1.1`, it rationalised 1.1 to `11/10` and then did a rational comparison `25/1 = 11/10` which involved a bunch of calls to lcm.","msgtype":"m.text","formatted_body":"So in the example 25 < 1.1<\/code>, it rationalised 1.1 to 11/10<\/code> and then did a rational comparison 25/1 = 11/10<\/code> which involved a bunch of calls to lcm."}}
                      {"origin_server_ts":1715143069963,"event_id":"$pgZrXfkDVYORXuBkxXfVVvSM6cmJD49GwbbQkG6UhUY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"So my current implementation is mathematically quite robust, but it's slow if you're not careful.","msgtype":"m.text"}}
                      {"origin_server_ts":1715143135397,"event_id":"$lJ6GWGQxlO4wl9FbGchS0_TAnM6lB_0pPi29QZJiMxA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"So in the example `25 < 1.1`, it rationalised 1.1 to `2476979795053773/2251799813685248` and then did a rational comparison which involved a bunch of calls to lcm.","msgtype":"m.text","formatted_body":"So in the example 25 < 1.1<\/code>, it rationalised 1.1 to 2476979795053773/2251799813685248<\/code> and then did a rational comparison which involved a bunch of calls to lcm."},"m.relates_to":{"event_id":"$qY51e2xfyvwKN6OBRI7qOXxRU8dPXGdbUJXdnKRthhE","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * So in the example `25 < 1.1`, it rationalised 1.1 to `2476979795053773/2251799813685248` and then did a rational comparison which involved a bunch of calls to lcm.","msgtype":"m.text","formatted_body":" * So in the example 25 < 1.1<\/code>, it rationalised 1.1 to 2476979795053773/2251799813685248<\/code> and then did a rational comparison which involved a bunch of calls to lcm."}}
                      {"origin_server_ts":1715143234994,"event_id":"$k-cgjNmxzyI7WC-ElCgxv5-tx3BWF1YeZSMRHPsSWrE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"And the reason for all of this is that there are many rational numbers (an unlimited number, in fact) that are represented by a single float, but there is a unique rational number that is closest to a given float, so I make the conversion from least precise to more precise. This is why it's slow.","msgtype":"m.text"}}
                      {"origin_server_ts":1715143263882,"event_id":"$cLOzEmiPtDlDoYGGxiw7lfvQBmr0LKCikaymU0wwaYQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"In 99.999(lots of 9's)% of cases, the programmer absolutely does not care about this though.","msgtype":"m.text"}}
                      {"origin_server_ts":1715143294232,"event_id":"$JFux3gTnZtQtXErFzNOg4DKttZvRpRziIFonPmtmHz4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"So I think I should relax this rule, at the expense of having some edge-cases behave incorrectly.","msgtype":"m.text"}}
                      {"origin_server_ts":1715143334429,"event_id":"$MZr6pphiQzCiRK1y8pERaoa2NxGxCPUj8NCu3nBfRN0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I guess if the programmer really care, they can manually rationalise (using `toRational`).","msgtype":"m.text","formatted_body":"I guess if the programmer really care, they can manually rationalise (using toRational<\/code>)."}}
                      {"origin_server_ts":1715658150128,"event_id":"$31fRBgeH3mP0DIAnl2EYfgAy34gQRvsPOjWp703bfsQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, design question:","msgtype":"m.text"}}
                      {"origin_server_ts":1715658213512,"event_id":"$iHYcP3bcNNRz8zVkv6tlBJgU943hL8j5klPG-jkZ6fs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I already officially change the operator used for inner product from `.` to `\u2022`. This was to facilitate the later exclusive use of the period for object-dereferencing.","msgtype":"m.text","formatted_body":"I already officially change the operator used for inner product from .<\/code> to \u2022<\/code>. This was to facilitate the later exclusive use of the period for object-dereferencing."}}
                      {"origin_server_ts":1715658221757,"event_id":"$Axs2SAH2KxV2EeyP84C63-DWMxUu5_Ct9Bv2YKYIJto","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Now, I've come up with a nice way to do it.","msgtype":"m.text"}}
                      {"origin_server_ts":1715658224408,"event_id":"$5aVcrja-JunRGIUJej272M3GS_i9SvZGPQ-PLwRrTo8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"(I think)","msgtype":"m.text"}}
                      {"origin_server_ts":1715658399872,"event_id":"$F342ZS-yBVtd0LNYQjiFS44eHIczlhMT4wxkFUqMfUc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Now, accessing fields in an object should use the period of course (but that stuff doesn't exist yet). But, I'd like to use it in a different way as well: let's say we have a three-column table `foo` with column labels `a`, `b` and `c`.  Then, `foo.b` would be equivalent to typing `foo[;1]`.","msgtype":"m.text","formatted_body":"Now, accessing fields in an object should use the period of course (but that stuff doesn't exist yet). But, I'd like to use it in a different way as well: let's say we have a three-column table foo<\/code> with column labels a<\/code>, b<\/code> and c<\/code>.  Then, foo.b<\/code> would be equivalent to typing foo[;1]<\/code>."}}
                      {"origin_server_ts":1715658420800,"event_id":"$GZlmvrn_dN6VLErpFKk5RzhoYeH5RCpUuaKp-ctaGLA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"You could even support `foo.(a c)`.","msgtype":"m.text","formatted_body":"You could even support foo.(a c)<\/code>."}}
                      {"origin_server_ts":1715658486889,"event_id":"$0y2oNwjLdlS8Eg2e7qfZ8rhJp3RnclsTjt47vY4d3HE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I think R does something similar?","msgtype":"m.text"}}
                      {"origin_server_ts":1715663467494,"event_id":"$-g0-6qqynA0bVIC2yaLCNrBGV8TR43ouvHOtfCDVEzs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I wrote a post about this dilemma: https://functional.cafe/@loke/112437719205537976","msgtype":"m.text"}}
                      {"origin_server_ts":1716283548092,"event_id":"$Z9U7OGI-IGyDA-_FbYA7e1VInY0ubGAsafDz3roFRx0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$-g0-6qqynA0bVIC2yaLCNrBGV8TR43ouvHOtfCDVEzs","rel_type":"m.annotation","key":"🙏"}}}
                      {"origin_server_ts":1716457071623,"event_id":"$SGsswLHbxjzgrzYZmqbN6oKn39ZwloUhFTZjkJe7JKA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I did a thing. https://codeberg.org/loke/array/commit/66bfc2550bf0b2d44dba71109466be423bec0dfd","msgtype":"m.text"}}
                      {"origin_server_ts":1716854226409,"event_id":"$MaNd8pdqovq1tZWRgntzx3d3LoPOB-rrcWQowv0fJgg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$SGsswLHbxjzgrzYZmqbN6oKn39ZwloUhFTZjkJe7JKA","rel_type":"m.annotation","key":"🙏"}}}
                      {"origin_server_ts":1716854240795,"event_id":"$cOaz5fXeEfbF7O1thNVKh3L6F1fKNq18h9SJWQFBqvg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"gotta try out emacs KAP mode ","msgtype":"m.text"}}
                      {"origin_server_ts":1716990984139,"event_id":"$j0JMfarH09q3QkunuZOcjJQCfZECILRB5sCoPuLjsrk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"it would be nice to add /etc/alternatives/java to the list of directories where gradlew looks for java","msgtype":"m.text"}}
                      {"origin_server_ts":1716991000813,"event_id":"$tKCTqKtivlaRiHVSYMFcidiGPf7x7MOCZiVUw2tZyHk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"right now getting a build error ","msgtype":"m.text"}}
                      {"origin_server_ts":1716991053392,"event_id":"$Tq_ouNz9IOxlVX67H0IRVd1f1MgGWErMwXUCWJm7SJo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"\"Path for java installation '/usr/lib/jvm/openjdk-18' (Common Linux Locations) does not contain a java executable\"","msgtype":"m.text"}}
                      {"origin_server_ts":1716991067824,"event_id":"$FniHFfmB43vT0UEVuP8jMOtn1sjBIxYy7ZEQsXes1yc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"although I can run java in my console","msgtype":"m.text"}}
                      {"origin_server_ts":1716991087184,"event_id":"$3CDLtxiX3olsF6Kc-m0UnzH73iWxYxqh7118Ev-uwvE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"although I can run java in my terminal","msgtype":"m.text"},"m.relates_to":{"event_id":"$FniHFfmB43vT0UEVuP8jMOtn1sjBIxYy7ZEQsXes1yc","rel_type":"m.replace"},"m.mentions":{},"body":" * although I can run java in my terminal","msgtype":"m.text"}}
                      {"origin_server_ts":1716992097995,"event_id":"$kxrB8eFtvRaI5aNwfW7tG3UJcDH1ylzLOE5kJ__Ggsc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"That's a problem with gradle though.","msgtype":"m.text"}}
                      {"origin_server_ts":1716992133352,"event_id":"$c6WEHL2Gv4BBQU5SBaS5eAdXCXQ_K_HU0PcPBPXxz6c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's supposed to just work, and even download the correct version of java if it needs to.","msgtype":"m.text"}}
                      {"origin_server_ts":1716992363366,"event_id":"$rmZUWXuuSWCV8KYA0OhE0-pptFaI079uxXXLugDfZcQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It would seem you hqve an incomplete java installation. ","msgtype":"m.text"}}
                      {"origin_server_ts":1716992406831,"event_id":"$1FCP-v8Yi_OJ9b6g6KHrAzir8xG-QBbgP3dAVLd8Ot0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I don't think I have touched that at all ","msgtype":"m.text"}}
                      {"origin_server_ts":1716992434327,"event_id":"$paVeQ8rbQIiLFJoaYFQ0MP2zErqAJpzN_Px4Ip0ojQc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"it's probably gonna start working if I just wipe that directory and clone it from scratch","msgtype":"m.text"}}
                      {"origin_server_ts":1716992499962,"event_id":"$SgcLMVW0ZChdDpWODHazACj6R-U2VCfaK_FFu-KIiDI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"What do you get if you type `java -version`?","msgtype":"m.text","formatted_body":"What do you get if you type java -version<\/code>?"}}
                      {"origin_server_ts":1716992523165,"event_id":"$HMpSjnk5DyKPZYWeZDK2K1GXkY7mGeA5e2THgEoiglo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"java version \"17.0.8.1\" 2023-08-24\nIBM Semeru Runtime Certified Edition 17.0.8.1 (build 17.0.8.1+1)\nEclipse OpenJ9 VM 17.0.8.1 (build openj9-0.40.0, JRE 17 Linux amd64-64-Bit Compressed References 20230824_485 (JIT enabled, AOT enabled)\nOpenJ9   - d12d10c9e\nOMR      - e80bff83b\nJCL      - 87c2977201e based on jdk-17.0.8.1+1)\n","msgtype":"m.text"}}
                      {"origin_server_ts":1716992556837,"event_id":"$z49iBGrkuChMkmkk6JLps12xg7CaVvuwgOC5oINQPGM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I see. Just get rid of your java 18 installation. It's probably broken anyway. And no one should be using 18 anyway since it's not an LTS release.","msgtype":"m.text"}}
                      {"origin_server_ts":1716992560900,"event_id":"$IO3m_xPtxy13Aix1dcp9sZNesENd9kFrSyZnILt9NPY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Just install Java 21.","msgtype":"m.text"}}
                      {"origin_server_ts":1716992593125,"event_id":"$hacT2VY0kIIA1CwarB4dgzEyZd8xosXhttrrKBrnExA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"17 is fine to keep, like 21 it's an LTS release.","msgtype":"m.text"}}
                      {"origin_server_ts":1716992827787,"event_id":"$TgwYwhzkSchYcLgmEpLF9-NZO8HNISaZ_2hpSLfLorA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"clean git clone won't build either","msgtype":"m.text"}}
                      {"origin_server_ts":1716992860547,"event_id":"$_tWmsQeLkqHU4ICjkKrirw_ot65s_GS5JDqPrYSciRI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, it's your java installation that doesn't work. Gradle is written in java, and you need some functioning java to bootstrap it.","msgtype":"m.text"}}
                      {"origin_server_ts":1716993328117,"event_id":"$9dxwjRUy6-U4xvrEJI5OrYG2K7KFpPoAuCo-_c7Q2hA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"well it worked as soon as I moved the directory to /usr/lib/jvm/openjdk-18","msgtype":"m.text"}}
                      {"origin_server_ts":1716993348995,"event_id":"$jG32hXP4yyZ7T5Xxs4H199ezCgws1KRoKXioiCtSa4s","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"nothing changed except the dir","msgtype":"m.text"}}
                      {"origin_server_ts":1716995365218,"event_id":"$-_WfmPEihVUprSqzWmTRxSlKgOm9Z8wF4EsYTYisER4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Where did you move it from? ","msgtype":"m.text"}}
                      {"origin_server_ts":1716995556594,"event_id":"$5OVaeRK0qbHj2HI1hiaPVMNYFb7yYeTY_-igpDB3uAM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"from the (random) directory it was installed to","msgtype":"m.text"}}
                      {"origin_server_ts":1716995650971,"event_id":"$B9HUPR0dC5txYjVGRg_AbbydtqZe1_Hmf5DA42nfH60","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'm not sure if I installed a different java version in between because I was able to use it before ","msgtype":"m.text"}}
                      {"origin_server_ts":1716995699887,"event_id":"$O7s7XVQpTitGflDWTYZUF-rKQbv0tHWOBmgBfcOrVmg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"but anyway it works now","msgtype":"m.text"}}
                      {"origin_server_ts":1716996936105,"event_id":"$3G0XxDunwhvVXVL2oO8GsrbcBNUBKaRKBxmW8rLoXMA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"If you take the zip distribution,  does that run correctly for you? ","msgtype":"m.text"}}
                      {"origin_server_ts":1716997080853,"event_id":"$_9TAXav57sNq_1f9fKkH69a2XpFl6IYV7yNO4IELD-Y","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yes","msgtype":"m.text"}}
                      {"origin_server_ts":1716997878916,"event_id":"$vwQ2aMa-sa16FNXocUvT-4RyA0Eyv3sREoniq5pyotg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Even when your default jvm is 17?","msgtype":"m.text"}}
                      {"origin_server_ts":1716997925813,"event_id":"$AuZvojJkGtqZz4KB1vBFxCOH5lBUZYLyZ_anINBLWVo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"no I downloaded jvm 21 and moved that","msgtype":"m.text"}}
                      {"origin_server_ts":1716997976527,"event_id":"$3AP3vbHc1HnNqrUyZxs5kzS36DiDSV8I7o_YFS6Jtoc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I first downloaded 21 and installed it to the same directory I had that previous version, but it gave the same error","msgtype":"m.text"}}
                      {"origin_server_ts":1716998068789,"event_id":"$3QvF1K644puvlCoaJU8F5wFE-3MzKi9N95zEFFvxIdg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Oh you didn't install java from the linux repository? ","msgtype":"m.text"}}
                      {"origin_server_ts":1716998107206,"event_id":"$Tg7ik5aw1QPaNBTrWuWz2Vc5gyaWGjh9yHdrMK5d-9o","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"no","msgtype":"m.text"}}
                      {"origin_server_ts":1717000987772,"event_id":"$4tL8AivDaB2CZD7UtgGlYbodRJu6qhyJySDZol_ovrI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ok. That explains solve things","msgtype":"m.text"}}
                      {"origin_server_ts":1717001006155,"event_id":"$N4T2g0XQfhSCZP2XAb1nL0bUK9Jl3bVsXtFvlRraVXg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Ok. That explains things","msgtype":"m.text"},"m.relates_to":{"event_id":"$4tL8AivDaB2CZD7UtgGlYbodRJu6qhyJySDZol_ovrI","rel_type":"m.replace"},"body":"* Ok. That explains things","msgtype":"m.text"}}
                      {"origin_server_ts":1717388040934,"event_id":"$8unlsq0dzoFvpyFom4Gxj8wfbF-3y387-Ar5UJXqSb4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Here's a function to print a rational number in the form `2+1/2`: `p ⇐ ⌊«,∘(@+,)⍥⍕»(-∘⌊)`","msgtype":"m.text","formatted_body":"Here's a function to print a rational number in the form 2+1/2<\/code>: p ⇐ ⌊«,∘(@+,)⍥⍕»(-∘⌊)<\/code>"}}
                      {"origin_server_ts":1717388147965,"event_id":"$C80WUvX7qkhZB2ev5uDJLsRkyGzq9XCFESTYEGd5FMk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Sometimes a tacit expression is not better than the explicit one. This is better: `{ (⍕⌊⍵) , @+ , (⍕⍵-⌊⍵) }`.","msgtype":"m.text","formatted_body":"Sometimes a tacit expression is not better than the explicit one. This is better: { (⍕⌊⍵) , @+ , (⍕⍵-⌊⍵) }<\/code>."}}
                      {"origin_server_ts":1717388262713,"event_id":"$kwf1BxV7w80ayVvaTrQfJvXTpmLOGc19ZGLIBDGGXGw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Now, both of these have a bug. It should only use the version with `+` if both `⌊⍵` and `⍵-⌊⍵` are nonzero. What's a nice way to express this?","msgtype":"m.text","formatted_body":"Now, both of these have a bug. It should only use the version with +<\/code> if both ⌊⍵<\/code> and ⍵-⌊⍵<\/code> are nonzero. What's a nice way to express this?"}}
                      {"origin_server_ts":1717403314613,"event_id":"$JbcoImY4p5OS0DoQpl6sWI8evKMWuqKOFQ7fXDvpw1Y","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1717403384569,"event_id":"$y9EZ5benpzXjwuedd284dly7_6lfvM3AaqdiwyWsMJk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","unsigned":{"age":5946030560},"redacts":"$JbcoImY4p5OS0DoQpl6sWI8evKMWuqKOFQ7fXDvpw1Y","type":"m.room.redaction","content":{"redacts":"$JbcoImY4p5OS0DoQpl6sWI8evKMWuqKOFQ7fXDvpw1Y"},"age":5946030560},"sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{}}
                      {"origin_server_ts":1717403377983,"event_id":"$LLb1IOZnq4xeCkudMZzdpSjzIBEboxVgZ38nBI49o14","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"with Dyalog trains that'd be `p ⇐ ⍕⍤⌊, @+, ⍕⍤-∘⌊⍨`","msgtype":"m.text","formatted_body":"with Dyalog trains that'd be p ⇐ ⍕⍤⌊, @+, ⍕⍤-∘⌊⍨<\/code>"},"m.relates_to":{"event_id":"$JbcoImY4p5OS0DoQpl6sWI8evKMWuqKOFQ7fXDvpw1Y","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* with Dyalog trains that'd be `p ⇐ ⍕⍤⌊, @+, ⍕⍤-∘⌊⍨`","msgtype":"m.text","formatted_body":"* with Dyalog trains that'd be p ⇐ ⍕⍤⌊, @+, ⍕⍤-∘⌊⍨<\/code>"}}
                      {"origin_server_ts":1717403384569,"event_id":"$y9EZ5benpzXjwuedd284dly7_6lfvM3AaqdiwyWsMJk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","redacts":"$JbcoImY4p5OS0DoQpl6sWI8evKMWuqKOFQ7fXDvpw1Y","type":"m.room.redaction","content":{"redacts":"$JbcoImY4p5OS0DoQpl6sWI8evKMWuqKOFQ7fXDvpw1Y"}}
                      {"origin_server_ts":1717403388137,"event_id":"$ReIBjBwf715LFleS5kmbzMsLITkpyIEtt1dz__iXk24","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$8unlsq0dzoFvpyFom4Gxj8wfbF-3y387-Ar5UJXqSb4"}},"format":"org.matrix.custom.html","body":"with Dyalog trains that'd be `p ⇐ ⍕⍤⌊, @+, ⍕⍤-∘⌊⍨`","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>with Dyalog trains that'd be p ⇐ ⍕⍤⌊, @+, ⍕⍤-∘⌊⍨<\/code>"}}
                      {"origin_server_ts":1717409067352,"event_id":"$1cEGfNxHZBASxelgJcZyKAaytOL0xaw8HWRlVlKctUc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Interesting. Thanks.","msgtype":"m.text"}}
                      {"origin_server_ts":1717419229126,"event_id":"$bgo0K5D27WPfW8oJ-suUkWOhoDpGc1oJ-vaP4vMOw8w","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"more 3-trainy: `(⊢ (⊣∾\"+\"∾⊢)⍥⍕ -)∘⌊`; could go one level more with `⊢ (⊢ (⊣∾\"+\"∾⊢)⍥⍕ -) ⌊`","msgtype":"m.text","formatted_body":"more 3-trainy: (⊢ (⊣∾\"+\"∾⊢)⍥⍕ -)∘⌊<\/code>; could go one level more with ⊢ (⊢ (⊣∾\"+\"∾⊢)⍥⍕ -) ⌊<\/code>"}}
                      {"origin_server_ts":1717419261964,"event_id":"$GnfnpMODUlJy6GaOtL3l-t-lfX6gprg5T2IC5zN6OzU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"more 3-trainy: `(⊢ (⊣,\"+\",⊢)⍥⍕ -)∘⌊`; could go one level more with `⊢ (⊢ (⊣∾\"+\"∾⊢)⍥⍕ -) ⌊`","msgtype":"m.text","formatted_body":"more 3-trainy: (⊢ (⊣,\"+\",⊢)⍥⍕ -)∘⌊<\/code>; could go one level more with ⊢ (⊢ (⊣∾\"+\"∾⊢)⍥⍕ -) ⌊<\/code>"},"m.relates_to":{"event_id":"$bgo0K5D27WPfW8oJ-suUkWOhoDpGc1oJ-vaP4vMOw8w","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* more 3-trainy: `(⊢ (⊣,\"+\",⊢)⍥⍕ -)∘⌊`; could go one level more with `⊢ (⊢ (⊣∾\"+\"∾⊢)⍥⍕ -) ⌊`","msgtype":"m.text","formatted_body":"* more 3-trainy: (⊢ (⊣,\"+\",⊢)⍥⍕ -)∘⌊<\/code>; could go one level more with ⊢ (⊢ (⊣∾\"+\"∾⊢)⍥⍕ -) ⌊<\/code>"}}
                      {"origin_server_ts":1717419268900,"event_id":"$E18WWAHhPqBlMzofDlyioCwoXHmzeTSJzYMJ3tdTDLg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"more 3-trainy: `(⊢ (⊣,\"+\",⊢)⍥⍕ -)∘⌊`; could go one level more with `⊢ (⊢ (⊣,\"+\",⊢)⍥⍕ -) ⌊`","msgtype":"m.text","formatted_body":"more 3-trainy: (⊢ (⊣,\"+\",⊢)⍥⍕ -)∘⌊<\/code>; could go one level more with ⊢ (⊢ (⊣,\"+\",⊢)⍥⍕ -) ⌊<\/code>"},"m.relates_to":{"event_id":"$bgo0K5D27WPfW8oJ-suUkWOhoDpGc1oJ-vaP4vMOw8w","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* more 3-trainy: `(⊢ (⊣,\"+\",⊢)⍥⍕ -)∘⌊`; could go one level more with `⊢ (⊢ (⊣,\"+\",⊢)⍥⍕ -) ⌊`","msgtype":"m.text","formatted_body":"* more 3-trainy: (⊢ (⊣,\"+\",⊢)⍥⍕ -)∘⌊<\/code>; could go one level more with ⊢ (⊢ (⊣,\"+\",⊢)⍥⍕ -) ⌊<\/code>"}}
                      {"origin_server_ts":1717419407605,"event_id":"$MYQpCMs2YliJrYu3PaQLEOfHAix2lw2OzFcKxCwG0mo","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"can even make that work in Kap: `(⊢ « {⍺,\"+\",⍵}⍥⍕ » -)∘⌊` though with those «»s I don't know how best to space it","msgtype":"m.text","formatted_body":"can even make that work in Kap: (⊢ « {⍺,\"+\",⍵}⍥⍕ » -)∘⌊<\/code> though with those «»s I don't know how best to space it"}}
                      {"origin_server_ts":1717419646421,"event_id":"$Ix8hUFzbksNxV8l5E1YekO3PEXkX_2wX0yQNZtGXb2E","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"for the zero thing there's like `` {{⍺,\"+\",⍵}/ ⍕¨ (~<\\0=)⍛/ (⌊⍵)(⍵-⌊⍵)}¨ (123÷10)(0)(12)(7÷10) ``","msgtype":"m.text","formatted_body":"for the zero thing there's like {{⍺,"+",⍵}/ ⍕¨ (~<\\0=)⍛/ (⌊⍵)(⍵-⌊⍵)}¨ (123÷10)(0)(12)(7÷10)<\/code>"}}
                      {"origin_server_ts":1717419707611,"event_id":"$t63T8ax5ZLEKtVFzRZ8rN5Z1lxTiFk0qWjA3qc79T80","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"shorter: `` {{⍺,\"+\",⍵}/ ⍕¨ (≤\\0≠)⍛/ (⌊⍵)(⍵-⌊⍵)} ``","msgtype":"m.text","formatted_body":"shorter: {{⍺,"+",⍵}/ ⍕¨ (≤\\0≠)⍛/ (⌊⍵)(⍵-⌊⍵)}<\/code>"}}
                      {"origin_server_ts":1717419875467,"event_id":"$5VKTJOt5gI8_RWg77NKHwgs6EGcg8ItEE-NDLHIpv9o","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and with a train for the outer dfn: `` {⍺,\"+\",⍵}/ ⍕¨ (≤\\0≠)⍛/ ⊢«,»-∘⌊ ``","msgtype":"m.text","formatted_body":"and with a train for the outer dfn: {⍺,"+",⍵}/ ⍕¨ (≤\\0≠)⍛/ ⊢«,»-∘⌊<\/code>"}}
                      {"origin_server_ts":1717423234421,"event_id":"$pGlk4VVR6hSfi1k8Bo1sMWGhW9fXiwzigmFjfyT81MQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Woah. Thanks","msgtype":"m.text"}}
                      {"origin_server_ts":1717478354001,"event_id":"$ig_eVP5_G5joRg1-M89HGGKe0B2Nx8u8hkeOienMYy4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I have this shocking realisation that there are people who are better at my own language than I am.","msgtype":"m.text"}}
                      {"origin_server_ts":1717490581643,"event_id":"$CIhxIF2ajQw6HbVCEd-EiIFnZ3MGAREYxZVskL1X7fk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I was playing around with higher dimension arrays (I want to improve my tests) so I was comparing behaviour between dyalog and kap. While doing so I found a case where dyalog is slower (2 seconds vs. 1.4 seconds) and I wonder if there is an obvious reason why dyalog is slower here? The expression I was running was this: `+/,×/¨1.0+⍳1+⍳10`.","msgtype":"m.text","formatted_body":"I was playing around with higher dimension arrays (I want to improve my tests) so I was comparing behaviour between dyalog and kap. While doing so I found a case where dyalog is slower (2 seconds vs. 1.4 seconds) and I wonder if there is an obvious reason why dyalog is slower here? The expression I was running was this: +/,×/¨1.0+⍳1+⍳10<\/code>."}}
                      {"origin_server_ts":1717490588252,"event_id":"$omTPVfFYUSYEi7fLezyK8gk99sUlUua7EF2d1X9K-v8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I was playing around with higher dimension arrays (I want to improve my tests) so I was comparing behaviour between dyalog and kap. While doing so I found a case where dyalog is slower (2 seconds vs. 1.4 seconds) and I wonder if there is an obvious reason why dyalog is slower here? The expression I was running was this: `+/,×/¨1+⍳1+⍳10`.","msgtype":"m.text","formatted_body":"I was playing around with higher dimension arrays (I want to improve my tests) so I was comparing behaviour between dyalog and kap. While doing so I found a case where dyalog is slower (2 seconds vs. 1.4 seconds) and I wonder if there is an obvious reason why dyalog is slower here? The expression I was running was this: +/,×/¨1+⍳1+⍳10<\/code>."},"m.relates_to":{"event_id":"$CIhxIF2ajQw6HbVCEd-EiIFnZ3MGAREYxZVskL1X7fk","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * I was playing around with higher dimension arrays (I want to improve my tests) so I was comparing behaviour between dyalog and kap. While doing so I found a case where dyalog is slower (2 seconds vs. 1.4 seconds) and I wonder if there is an obvious reason why dyalog is slower here? The expression I was running was this: `+/,×/¨1+⍳1+⍳10`.","msgtype":"m.text","formatted_body":" * I was playing around with higher dimension arrays (I want to improve my tests) so I was comparing behaviour between dyalog and kap. While doing so I found a case where dyalog is slower (2 seconds vs. 1.4 seconds) and I wonder if there is an obvious reason why dyalog is slower here? The expression I was running was this: +/,×/¨1+⍳1+⍳10<\/code>."}}
                      {"state_key":"@kafka64:matrix.org","origin_server_ts":1717722821052,"event_id":"$PYsjLo4MtATqb5rereuNIy6MQCjGtbA9i1KaFezGewE","sender":"@kafka64:matrix.org","user_id":"@kafka64:matrix.org","prev_content":{"displayname":"kyoung","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/FSGZnWrseVVudhcJsBTeQutT","displayname":"kyoung","membership":"join"},"replaces_state":"$qCD8b3-taV6oLfURh075qONvvJHrLlqBZyb0KbFVriw"}
                      {"origin_server_ts":1717769458510,"event_id":"$7naSGfic9syXj35nzHmkyScw-IMDKmcDxPDCCB3K2kM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Check this out. A commit with 474 modified files: https://codeberg.org/loke/array/commit/e4afd9945f6ed03237d857472f664e644aaa5c5f","msgtype":"m.text"}}
                      {"origin_server_ts":1717769484799,"event_id":"$JPRFpdO1cPyb_d8cTX-ZT1UzRAx4qrUJyM-f1yKQH2I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's not that interesting though. I just changed the package names so that they are consistent, but it's always fun with a big commit.","msgtype":"m.text"}}
                      {"origin_server_ts":1717769617470,"event_id":"$1SnY5a5o93D9I4ZbsL2VJzXe3R86i9npbw-L-tFg5-4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"unfortunately dzaima/BQN is [only ~176 files](https://github.com/dzaima/BQN/commit/dd70fcf074bde54f987c195bb7cebf5791ecba10) :/","msgtype":"m.text","formatted_body":"unfortunately dzaima/BQN is only ~176 files<\/a> :/"}}
                      {"origin_server_ts":1717769740165,"event_id":"$DdlNUD2jcuFUEk2e5MTH3O5s5pwVokPAsiYVNpg5A0w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Nice :-)","msgtype":"m.text"}}
                      {"origin_server_ts":1717769769403,"event_id":"$5wFA2QhuCCBGXEP6uBb3ZYVA3OXAaE9eWBfNXGDxtis","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yours is impressive because in Java you also need to move the files. Most of mine just changed the content.","msgtype":"m.text"}}
                      {"origin_server_ts":1717769792721,"event_id":"$0zZEg61E3pcnW2jPNYW-_17xWTK9EhCnAgiPYQifzXc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"well it's still a just a single IDE action","msgtype":"m.text","formatted_body":"well it's still a just a single IDE action"}}
                      {"origin_server_ts":1717769798389,"event_id":"$oEOBRQ_Gtql3npePE_5v5bsxXKq_4KIoFiboIdjnnHc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"In Kotlin the files don't need to be placed in a directly corresponding to the package.","msgtype":"m.text"}}
                      {"origin_server_ts":1717769826241,"event_id":"$AIR_UW4H8HmTM5VOCkd8OR4RvytcoJ4jj5P7Zfko24Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Mine was mostly a big `sed` call. If I do it via IDEA, the files would have been moved, and I didn't want that.","msgtype":"m.text","formatted_body":"Mine was mostly a big sed<\/code> call. If I do it via IDEA, the files would have been moved, and I didn't want that."}}
                      {"origin_server_ts":1717769871542,"event_id":"$psqxUqIbFEWNR4aCwF98W-f_hmibTanjr1NRLvUVnEo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Then there was a lot of manual messing about with resources which _do_ have to be moved (when using `this::class.java.getResourceAsStream`.","msgtype":"m.text","formatted_body":"Then there was a lot of manual messing about with resources which do<\/em> have to be moved (when using this::class.java.getResourceAsStream<\/code>."}}
                      {"origin_server_ts":1717769898124,"event_id":"$pIeGubz97VeM3jpMTT_NEM_BV8SSiRK8hmOr0JXH_VU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$oEOBRQ_Gtql3npePE_5v5bsxXKq_4KIoFiboIdjnnHc"}},"format":"org.matrix.custom.html","body":"don't really need paths to match packages in java either","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>don't really need paths to match packages in java either"}}
                      {"origin_server_ts":1717769928742,"event_id":"$hQQOwR3SF0kMlCtyY-7I5BPzOQ3JrsCeqIcFA8JiYeU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"True, but it's comfortable to get the resource relative to the class package name.","msgtype":"m.text"}}
                      {"origin_server_ts":1717769953462,"event_id":"$KE7-hjwhmurxrNHSsJuKuE5H6_rWmvLIeN0cpPAyOJI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima/BQN runs just fine with renaming folders without renaming packages","msgtype":"m.text","formatted_body":"dzaima/BQN runs just fine with renaming folders without renaming packages"}}
                      {"origin_server_ts":1717769998559,"event_id":"$Gtj7VMxSRTaHCwZk96jX6eC5xgGVd-Yq_2R8P_XEvF8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Doesn't the Java compiler yell at you if the `.java` file is not in the correct directory?","msgtype":"m.text","formatted_body":"Doesn't the Java compiler yell at you if the .java<\/code> file is not in the correct directory?"}}
                      {"origin_server_ts":1717770010410,"event_id":"$b-9QurpGllfOi_0v0Pj9yZqh6f1rosnGyh-Zs4qpBA0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"didn't appear to","msgtype":"m.text","formatted_body":"didn't appear to"}}
                      {"origin_server_ts":1717770035110,"event_id":"$aiYHi2fRjLzcJT7rQlbEx4Pv3p5Xsfl2ejTs-4Bqhno","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I mean they're all already in the arbitrary `src/` that's not in the package name","msgtype":"m.text","formatted_body":"I mean they're all already in the arbitrary src/<\/code> that's not in the package name"}}
                      {"origin_server_ts":1717770035507,"event_id":"$Pi3445CZN1poBOytKcjy-uH2sctDzF_OPqjYCnnsV3s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I haven't really written much Java in the last several years. :-)","msgtype":"m.text"}}
                      {"origin_server_ts":1717770057260,"event_id":"$gymTbo7Y8uK-jYJWqtZLGAxO9WSVBNYvYa0EZvUoIFI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I imagine some things will complain, but my bash build script doesn't","msgtype":"m.text","formatted_body":"I imagine some things will complain, but my bash build script doesn't"}}
                      {"origin_server_ts":1717770066413,"event_id":"$HZX24oSWJ4iZuaQYVCKTejzIA4nSoR3LhVkFaZeI0xU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"What do you use to build? Ant, maven, gradle, make?","msgtype":"m.text"}}
                      {"origin_server_ts":1717770076277,"event_id":"$S8z3r9-7M4OtYNO_RhrtbjBr5h97kJgjUAChxgs40LA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"https://github.com/dzaima/BQN/blob/master/build","msgtype":"m.text","formatted_body":"https://github.com/dzaima/BQN/blob/master/build"}}
                      {"origin_server_ts":1717770110477,"event_id":"$KgpRzvjDWLO20RazAhlVLgOctzOS_fpi_su9P2ZQfKw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I see. How long does a full build take?","msgtype":"m.text"}}
                      {"origin_server_ts":1717770123677,"event_id":"$cKNmnBdYh_YVDBHACkrn7fxffKte-ZIcM7YYb9fatak","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"5 seconds","msgtype":"m.text","formatted_body":"5 seconds"}}
                      {"origin_server_ts":1717770136554,"event_id":"$PJd7DI3q_dgqtac35Sc6xYJkrDJpQ8Nl8V6zMGnnTnA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Sometimes I wish I was building like that. Gradle is awful.","msgtype":"m.text"}}
                      {"origin_server_ts":1717770165762,"event_id":"$zlmA9g7QoRL0emHwbZDblKpG5DdtyN26AzuBtbVy5Pw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(also [my python-based build thing](https://github.com/dzaima/UI/blob/master/build.py) for my UI stuff also doesn't appear to break on renaming folders)","msgtype":"m.text","formatted_body":"(also my python-based build thing<\/a> for my UI stuff also doesn't appear to break on renaming folders)"}}
                      {"origin_server_ts":1717770231308,"event_id":"$-05s1M0YdWf57TdSOcvcXcCRSrEObw1YN4Y1xq_dALY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Takes about 20 seconds to do the JVM build for me. The JS and Native builds are much slower.","msgtype":"m.text"}}
                      {"origin_server_ts":1717770246889,"event_id":"$pE7yI_fq-OBQCP4zlQ5blErHZKsX6Tzjy1EIcKw8C0c","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(also [my python-based build thing](https://github.com/dzaima/UI/blob/master/build.py) for my UI stuff also doesn't appear to break on renaming folders; it basically does the same thing as the bash one though, just with some extra code in between to allow crappy non-correct incremental compilation)","msgtype":"m.text","formatted_body":"(also my python-based build thing<\/a> for my UI stuff also doesn't appear to break on renaming folders; it basically does the same thing as the bash one though, just with some extra code in between to allow crappy non-correct incremental compilation)"},"m.relates_to":{"event_id":"$zlmA9g7QoRL0emHwbZDblKpG5DdtyN26AzuBtbVy5Pw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (also [my python-based build thing](https://github.com/dzaima/UI/blob/master/build.py) for my UI stuff also doesn't appear to break on renaming folders; it basically does the same thing as the bash one though, just with some extra code in between to allow crappy non-correct incremental compilation)","msgtype":"m.text","formatted_body":"* (also my python-based build thing<\/a> for my UI stuff also doesn't appear to break on renaming folders; it basically does the same thing as the bash one though, just with some extra code in between to allow crappy non-correct incremental compilation)"}}
                      {"origin_server_ts":1717770254851,"event_id":"$klJdEEpCBxGi47ZhaZxKDVMpcmQPcZxt7oZNDKu-QQ8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Perhaps the Java compiler is much more lenient than I thought.","msgtype":"m.text"}}
                      {"origin_server_ts":1717770366201,"event_id":"$B1kmEWZZ_YQjheIRt3HjPk-azgTWCZBMcnoywE0nOh8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[some example](https://github.com/HumbleUI/Skija/blob/master/shared/java/AnimationDisposalMode.java) of another project having an actual java file in a path not matching the package, though that also builds via custom python (and is what inspired me to so do too); I remember that being mildly annoying to get resolving properly in IDEA","msgtype":"m.text","formatted_body":"some example<\/a> of another project having an actual java file in a path not matching the package, though that also builds via custom python (and is what inspired me to so do too); I remember that being mildly annoying to get resolving properly in IDEA"}}
                      {"origin_server_ts":1717771203403,"event_id":"$exuJOKQPXEuzyrSLZ_4BKSovh0XJbBhKQdSnlPdQ96k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$cKNmnBdYh_YVDBHACkrn7fxffKte-ZIcM7YYb9fatak"}},"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> 5 seconds\n\nHow many lines of code is it by the way?","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @dzaima:matrix.org<\/a>
                      5 seconds<\/blockquote><\/mx-reply>How many lines of code is it by the way?"}} {"origin_server_ts":1717771268685,"event_id":"$33QauRd_BIvm8qvRlFadxjEPWxn4mC15owx7ppYzzyM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"16K non-empty lines","msgtype":"m.text","formatted_body":"16K non-empty lines"}} {"origin_server_ts":1717771294620,"event_id":"$pV8wNEWOfbElkH4n7a6aozsc9ZhV5WE-yjtVcB0UzTE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Hmm... That would be about 25k including empty and comments?","msgtype":"m.text"}} {"origin_server_ts":1717771313531,"event_id":"$-rbCqhVJSx_fFOig9QNmlnm8dL7cV3gD1F3-ssxHWQ4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"18K total lines","msgtype":"m.text","formatted_body":"18K total lines"}} {"origin_server_ts":1717771354926,"event_id":"$_PStlXJl8MeFM8mWb26rGvTtHagpkYmVS1hyKDmCE54","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"So it's not that much smaller than kap","msgtype":"m.text"}} {"origin_server_ts":1717771421288,"event_id":"$O9T3mvm5aROUTfgvmktlXa3JQ-wRWo4YxClP3B755dU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`array/src` of Kap gives me 48K non-empty lines, 55K total","msgtype":"m.text","formatted_body":"array/src<\/code> of Kap gives me 48K non-empty lines, 55K total"}} {"origin_server_ts":1717771438341,"event_id":"$yhPAHEMZA-MjgmEkrc8-L-MeSXSw18hN9lQVDtbnAak","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"`array/src` of Kap gives me 48K non-empty lines, 55K total, so ~3x smaller","msgtype":"m.text","formatted_body":"array/src<\/code> of Kap gives me 48K non-empty lines, 55K total, so ~3x smaller"},"m.relates_to":{"event_id":"$O9T3mvm5aROUTfgvmktlXa3JQ-wRWo4YxClP3B755dU","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* `array/src` of Kap gives me 48K non-empty lines, 55K total, so ~3x smaller","msgtype":"m.text","formatted_body":"* array/src<\/code> of Kap gives me 48K non-empty lines, 55K total, so ~3x smaller"}} {"origin_server_ts":1717771444741,"event_id":"$_NS2UKfQNgr1uxBCUnqNzy7jaRcXCNI9HMkzd1Wypt0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"You should filter out the tests","msgtype":"m.text"}} {"origin_server_ts":1717771458085,"event_id":"$jrtw9GiTJbGh_uiwWk-B2ejeVu2QhE0EkJus-ewvwJ8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Only about 27k then.","msgtype":"m.text"}} {"origin_server_ts":1717771523374,"event_id":"$07xb7JbwNFCEr52Jk6BuDSJ8BiLNg1jh560kQG1WHmw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Although I don't know if there is a way to compare code density between java and kotlin.","msgtype":"m.text"}} {"origin_server_ts":1717771527835,"event_id":"$JvKA2QyiD6Wcka1Rqy7gNEyBMOPeDSNcTt1QY-FepbU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah, 27.2K/23.6K","msgtype":"m.text","formatted_body":"yeah, 27.2K/23.6K"}} {"origin_server_ts":1717771561661,"event_id":"$rMeamiSwxeJSGyb9asM9fIKB97-WipVEBmxbmqNe-ug","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I'm quite impressed by how much still is in bqn given it's size.","msgtype":"m.text"}} {"origin_server_ts":1717771569636,"event_id":"$LQ0YmEp0VEPRWZ-c7DGYYk2CfvmJRve3D7j7thLMSYo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"I'm quite impressed by how much stuff is in bqn given it's size.","msgtype":"m.text"},"m.relates_to":{"event_id":"$rMeamiSwxeJSGyb9asM9fIKB97-WipVEBmxbmqNe-ug","rel_type":"m.replace"},"m.mentions":{},"body":" * I'm quite impressed by how much stuff is in bqn given it's size.","msgtype":"m.text"}} {"origin_server_ts":1717771572570,"event_id":"$_t0ZnIp8zYEgBUwCxkQyrKMrcjoy7iCOTiNzL2YjBp8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"I'm quite impressed by how much stuff is in bqn given it's size.","msgtype":"m.text"},"m.relates_to":{"event_id":"$rMeamiSwxeJSGyb9asM9fIKB97-WipVEBmxbmqNe-ug","rel_type":"m.replace"},"m.mentions":{},"body":" * I'm quite impressed by how much stuff is in bqn given it's size.","msgtype":"m.text"}} {"origin_server_ts":1717771578771,"event_id":"$Uwn3HfmBvNmmUrtD2XGCBeId1gXmldOFqVFKxj3ZEZI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Kap is a bit more bloated.","msgtype":"m.text"}} {"origin_server_ts":1717771740842,"event_id":"$fxYwp8jBIlMtjdKQ4OP9mdAwweAbYxLkN0hrsFZ8u14","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima/BQN has 320K chars (18/line), Kap - 1041K chars (44/line). Kinda thought dzaima/BQN would have longer lines","msgtype":"m.text","formatted_body":"dzaima/BQN has 320K chars (18/line), Kap - 1041K chars (44/line). Kinda thought dzaima/BQN would have longer lines"}} {"origin_server_ts":1717771820519,"event_id":"$ACz8rnNlWisGQJ-yZl_yN9BtsvQB2-fUn33q0l6n4uA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I guess you've went with significantly more verbose names","msgtype":"m.text","formatted_body":"I guess you've went with significantly more verbose names"}} {"origin_server_ts":1717772376443,"event_id":"$liFAYvz_lqm5bj2Ph1N0s0X457q5Q_E9VjDFhaUca4o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Not just that. Kotlin has a single-line syntax for definining functions. ","msgtype":"m.text"}} {"origin_server_ts":1717772401281,"event_id":"$AFXY3BYwNCzcfxWRC1THcZmznRn4tryc_AdHuYB9pRI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I want to believe the code is denser with more stuff on each line.","msgtype":"m.text"}} {"origin_server_ts":1717772419285,"event_id":"$fBHFQU7nYmz_ImwHxXO80FoEkphlZ34o-j1LxFRcCjo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But yeah, I also use quite long names.","msgtype":"m.text"}} {"origin_server_ts":1717772474921,"event_id":"$HtaUbUeP-qV5aWus9LxnpzCETjeCnjl7U3uZk6ApugU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"not having special syntax [doesn't stop me](https://github.com/dzaima/BQN/blob/ba14bcf1e1d0f90fe90906a6dd7b921460f070f6/src/BQN/types/callable/builtins/fns/PlusBuiltin.java#L11-L12) from putting functions in one line","msgtype":"m.text","formatted_body":"not having special syntax
                      doesn't stop me<\/a> from putting functions in one line"}} {"origin_server_ts":1717772500050,"event_id":"$ipeytDYt7C7-mbqjmt7HppwqZoRNKPLvYFbwJ86XHpM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"not having special syntax [doesn't stop me](https://github.com/dzaima/BQN/blob/ba14bcf1e1d0f90fe90906a6dd7b921460f070f6/src/BQN/types/callable/builtins/fns/PlusBuiltin.java#L11-L28) from putting functions in one line","msgtype":"m.text","formatted_body":"not having special syntax doesn't stop me<\/a> from putting functions in one line"},"m.relates_to":{"event_id":"$HtaUbUeP-qV5aWus9LxnpzCETjeCnjl7U3uZk6ApugU","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* not having special syntax [doesn't stop me](https://github.com/dzaima/BQN/blob/ba14bcf1e1d0f90fe90906a6dd7b921460f070f6/src/BQN/types/callable/builtins/fns/PlusBuiltin.java#L11-L28) from putting functions in one line","msgtype":"m.text","formatted_body":"* not having special syntax doesn't stop me<\/a> from putting functions in one line"}} {"origin_server_ts":1717772861895,"event_id":"$m-1ztZfQDZd8QF9tUQ18Dh_Y9BqJRYpBMm1tt0ar6Ho","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Nice :-)","msgtype":"m.text"}} {"origin_server_ts":1717772884520,"event_id":"$c-886xCDu-VoUjKkmFTkWMDs8rHo3P4R8_aarhxBg3g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"What is a perversion?","msgtype":"m.text"}} {"origin_server_ts":1717772931524,"event_id":"$MuUabvoZixfUdrrBw5k_zcqb-JIxymECFSepdV0-x0k","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"the thing that automatically `¨`es scalar primitives","msgtype":"m.text","formatted_body":"the thing that automatically ¨<\/code>es scalar primitives"}} {"origin_server_ts":1717772949172,"event_id":"$PMHF1S8LGQBERFU-nPE0sAr5hkwN3Rps0RiFnscScCQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"the thing that recursively `¨`es scalar primitives","msgtype":"m.text","formatted_body":"the thing that recursively ¨<\/code>es scalar primitives"},"m.relates_to":{"event_id":"$MuUabvoZixfUdrrBw5k_zcqb-JIxymECFSepdV0-x0k","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* the thing that recursively `¨`es scalar primitives","msgtype":"m.text","formatted_body":"* the thing that recursively ¨<\/code>es scalar primitives"}} {"origin_server_ts":1717773132321,"event_id":"$FywtuOiplOH248JrTE8ELj_BKF60yciZMqTT2xpiWoc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"If I were to implement these functions in Java, using the code style I usually use for Java, I'm pretty sure they'd be twice as long, or even 3 times: https://codeberg.org/loke/array/src/branch/master/array/src/commonMain/kotlin/array/builtins/bitwise_ops.kt#L79","msgtype":"m.text"}} {"origin_server_ts":1717773168138,"event_id":"$X8ZkZ4CXJob5_OyfjMpX1-cOp8THqNBc9X5dGahMZLM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I think you'd much prefer to write Kotlin than Java by the way.","msgtype":"m.text"}} {"origin_server_ts":1717773254790,"event_id":"$QMWOmb1VbmgqLcEHqy3s4LfNjZ-aE-qrdasEgnLzxe4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"there are definitely neat things about kotlin","msgtype":"m.text","formatted_body":"there are definitely neat things about kotlin"}} {"origin_server_ts":1717773576966,"event_id":"$OyKsGsrW3GXZyu98nqietoqSFXqt1u1SEkE2QNL6mxw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"but then it does things like requiring `and` for bitwise `a&b` etc, writes typed arrays as `IntArray` (perhaps sane as-is, but might end up rather unfortunate if valhalla manages to exist and be reasonable one day), de-emphasizes types by not putting them at the start of lines, and probably other things I'm forgetting","msgtype":"m.text","formatted_body":"but then it does things like requiring and<\/code> for bitwise a&b<\/code> etc, writes typed arrays as IntArray<\/code> (perhaps sane as-is, but might end up rather unfortunate if valhalla manages to exist and be reasonable one day), de-emphasizes types by not putting them at the start of lines, and probably other things I'm forgetting"}} {"origin_server_ts":1717773610096,"event_id":"$DXWS86pslXqEHI7xQ4MxeDR5rwnBEX2y0PEXR_Xr8uw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, some of those things are things that I also am/was concerned with.","msgtype":"m.text"}} {"origin_server_ts":1717773788676,"event_id":"$N2r3zh1V_lzbwcBV6qKZeDJHlRsfLsHDPu7QRINwaJQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`shr` for `>>` is just evil","msgtype":"m.text","formatted_body":"shr<\/code> for >><\/code> is just evil"}} {"origin_server_ts":1717773880389,"event_id":"$0s88ep-GkUgduM2FGVLCCv9v3NXFMckqcbYLEhBj0dk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"It's because `shr` is a library function, and not language syntax.","msgtype":"m.text","formatted_body":"It's because shr<\/code> is a library function, and not language syntax."}} {"origin_server_ts":1717773897314,"event_id":"$M-CxLLeHm9RhwG1bHBXeTv-5phpQwiodW0lpNgbkVS4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(and then some more subjective things like preferring removing semicolons and having arbitrary-computation getters/setters; but really my main complaint by far is de-emphasizing types)","msgtype":"m.text","formatted_body":"(and then some more subjective things like preferring removing semicolons and having arbitrary-computation getters/setters; but really my main complaint by far is de-emphasizing types)"}} {"origin_server_ts":1717773899119,"event_id":"$oHgazIGKscpzN-zt210eaNZCgfRHcePcyTQCJHk7yBM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Kotlin has user-defined dyadic infix functions.","msgtype":"m.text"}} {"origin_server_ts":1717781044754,"event_id":"$a8C9-BIO0g7f1ic8oDyTaaRUEhijCD5VJfeJe6zDI2w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"OK, fixed a bug that caused a return from within a `while` loop to behave like C's `continue` (i.e., it restarted the loop).","msgtype":"m.text","formatted_body":"OK, fixed a bug that caused a return from within a while<\/code> loop to behave like C's continue<\/code> (i.e., it restarted the loop)."}} {"origin_server_ts":1717781173350,"event_id":"$AJC-D-9pSN4v5HAv622wux72Gz6mYK9sEbUFI-D65kg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Here's the fix by the way. https://codeberg.org/loke/array/commit/45c68e1249117f185dda85bff0ecf278a7a4d1bb","msgtype":"m.text"}} {"state_key":"@kafka64:matrix.org","origin_server_ts":1717882981662,"event_id":"$f06EmXx8JTk9lSJV1VK8YggaAerMsnI3nxTKWfQNmRc","sender":"@kafka64:matrix.org","user_id":"@kafka64:matrix.org","prev_content":{"avatar_url":"mxc://matrix.org/FSGZnWrseVVudhcJsBTeQutT","displayname":"kyoung","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/scYbcfzcxvedWHfJHOluxtWV","displayname":"kyoung","membership":"join"},"replaces_state":"$PYsjLo4MtATqb5rereuNIy6MQCjGtbA9i1KaFezGewE"} {"origin_server_ts":1718002301863,"event_id":"$WiNlHGB2L2ED4wFdhqmrZr__pvydZxFyW4-cmKXCGUM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org","@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima Marshall does BQN support capturing free variables in lambdas?","msgtype":"m.text","formatted_body":"dzaima<\/a> Marshall<\/a> does BQN support capturing free variables in lambdas?"}} {"origin_server_ts":1718016355450,"event_id":"$5L54onIE0MAc0fOe0y0Fla1ryjqwhBmB9j9nSaEQu7w","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$WiNlHGB2L2ED4wFdhqmrZr__pvydZxFyW4-cmKXCGUM"}},"format":"org.matrix.custom.html","body":"like `{a+𝕩}` even though `a` isn't defined anywhere lexically visible? A long time ago there were ideas of allowing `\u2022Eval` or `\u2022Using` to \"spill\" variables, but that's been decided against","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>like {a+𝕩}<\/code> even though a<\/code> isn't defined anywhere lexically visible? A long time ago there were ideas of allowing \u2022Eval<\/code> or \u2022Using<\/code> to \"spill\" variables, but that's been decided against"}} {"origin_server_ts":1718016924688,"event_id":"$WrLCsuwoKabW8wH9lMpdTK4nunrx9-BBGAHWU58pcNA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Sorry, perhaps I'm using the term \"free variable\" incorrectly.","msgtype":"m.text"}} {"origin_server_ts":1718016999534,"event_id":"$QyEqCilt2amQiPHoojZpno9mZCgA9Ss_9AMLXgqYi0Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I mean, is this doable in BQN:\n```\nmakeAddN ⇐ { n←⍵ ⋄ λ{n+⍵}}\nmodifiers ← makeAddN¨ 1+⍳10\n⍞(modifiers[3]) 100\n```","msgtype":"m.text","formatted_body":"

                      I mean, is this doable in BQN:<\/p>\n

                      makeAddN ⇐ { n←⍵ ⋄ λ{n+⍵}}\nmodifiers ← makeAddN¨ 1+⍳10\n⍞(modifiers[3]) 100\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1718017071527,"event_id":"$_o9oTkNoa_QlXBkmZWCK7aIjad_jST1690kurVSOg6o","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n   MakeaddN←{n←𝕩 ⋄ {n+𝕩}}\n(function block)\n   modifiers ← MakeAddN¨ 1+↕10\n⟨ (function block) (function block) (function block) (function block) (function block) (function block) (function block) (function block) (function block) (function block) ⟩\n   (3⊑modifiers) {𝕎𝕩} 100\n104\n```","msgtype":"m.text","formatted_body":"
                         MakeaddN←{n←𝕩 ⋄ {n+𝕩}}\n(function block)\n   modifiers ← MakeAddN¨ 1+↕10\n⟨ (function block) (function block) (function block) (function block) (function block) (function block) (function block) (function block) (function block) (function block) ⟩\n   (3⊑modifiers) {𝕎𝕩} 100\n104<\/code><\/pre>"}}
                      {"origin_server_ts":1718017090775,"event_id":"$zWF0W1VU_qYF1EmIp_AEWohLdRKaYXhEcwbt0aBKvGs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Excellent. Thanks.","msgtype":"m.text"}}
                      {"origin_server_ts":1718017100941,"event_id":"$wHFJagNa3Gvt_fA1adguNWPZR3fFSJbk_mBzLLn0X0A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Do you know if this can be done in K or Q?","msgtype":"m.text"}}
                      {"origin_server_ts":1718017228682,"event_id":"$7RtD8eUiPrXwnUguKO5yc8LOMsFQ1Yi1RSL6VnvP0vs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"in k - depends on which one; not in ngn/k at least. Some allow capturing variables non-mutably, i.e. `{n+⍵}` automatically becomes like `(n{⍺+⍵})`. Dunno about Q","msgtype":"m.text","formatted_body":"in k - depends on which one; not in ngn/k at least. Some allow capturing variables non-mutably, i.e. {n+⍵}<\/code> automatically becomes like (n{⍺+⍵})<\/code>. Dunno about Q"}}
                      {"origin_server_ts":1718017436713,"event_id":"$zzd4K2r2t8H2dpJRpfchSJhhNu2PZVOIpa2rEf2gajY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Thanks. I was thinking of writing a blog post about first-class functions, and I want to make sure I don't make any invalid statements.","msgtype":"m.text"}}
                      {"origin_server_ts":1718017459876,"event_id":"$MapnKTjYlDXftNqoomIGKDXeSB4OxJvtmOT3Nc_URiM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I do believe that no APL's have function closures?","msgtype":"m.text"}}
                      {"origin_server_ts":1718017519669,"event_id":"$wrVt0CmGua5i3T4B-62RHii_wLnIQZpmvDFgTQrQlfs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"well, there's yours, and then there's mine","msgtype":"m.text","formatted_body":"well, there's yours, and then there's mine"}}
                      {"origin_server_ts":1718017605105,"event_id":"$VW28aYIkKvNcuJT5qAM-Ow_s9lMdwW8YouFSr5XegtQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Ah, dzaima/apl has it?","msgtype":"m.text"}}
                      {"origin_server_ts":1718017614553,"event_id":"$6UzPXWYvZIrksxf4XRE3ZVHlq0G3KU-GAZ0uRXPU6qo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I did not know that.","msgtype":"m.text"}}
                      {"origin_server_ts":1718017627493,"event_id":"$hQN3lcPCdBojBcqUJrcUjhtftPAm4q3-NqG3by_5eZc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n> f←{n←⍵ ⋄ {n+⍵}}\n{n ← ⍵ ⋄ {n + ⍵}}\n> f 10\n{n + ⍵}\n> (f 10) 40\n50\n```","msgtype":"m.text","formatted_body":"
                      > f←{n←⍵ ⋄ {n+⍵}}\n{n ← ⍵ ⋄ {n + ⍵}}\n> f 10\n{n + ⍵}\n> (f 10) 40\n50<\/code><\/pre>"}}
                      {"origin_server_ts":1718017719608,"event_id":"$qvT39-kxEiznJ7Ed6FmSb6ELWtvQS1qOlx_IXIA9-Yo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$hQN3lcPCdBojBcqUJrcUjhtftPAm4q3-NqG3by_5eZc","rel_type":"m.annotation","key":"😎"}}}
                      {"origin_server_ts":1718017773577,"event_id":"$73vk6DBdbEKrLDHQPuQPxFhvCtk5n6S2HkmboKJcQTw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Right, but what about the each and adding the functions to an array?","msgtype":"m.text"}}
                      {"origin_server_ts":1718017858290,"event_id":"$TG6rS-C-m2Cv2DiPZpsuYAuxvVZJjsG2bdiNVsks6Ts","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n> f←{n←⍵ ⋄ `{n+⍵}}\n{n ← ⍵ ⋄ `{n + ⍵}}\n> m←f¨ ⍳10\n`{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵}\n> (3⊃m) ⍎ 100\n103\n```","msgtype":"m.text","formatted_body":"
                      > f←{n←⍵ ⋄ `{n+⍵}}\n{n ← ⍵ ⋄ `{n + ⍵}}\n> m←f¨ ⍳10\n`{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵} `{n + ⍵}\n> (3⊃m) ⍎ 100\n103<\/code><\/pre>"}}
                      {"origin_server_ts":1718017909448,"event_id":"$14dU4KuC_DuJAc3Zd_cHfOrmBEfWYqt_AMjGIl9cliA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"don't even need to abuse functions returning functions (which I'm not sure if I consider/ed a bug)!","msgtype":"m.text","formatted_body":"don't even need to abuse functions returning functions (which I'm not sure if I consider/ed a bug)!"}}
                      {"origin_server_ts":1718017963179,"event_id":"$_QkCYRJIpo92I--bk789ulQ4t3MaPEAIwkBo3nxnE1w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"So backquote is similar to Kap lambda, and dyadic eval is used like the Kap apply?","msgtype":"m.text"}}
                      {"origin_server_ts":1718017970683,"event_id":"$JnpMoxB7OqMnf8xa-CVZKFtGjIn0PSKuf5y-q64mILE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"that \"quoting\" is really makeshift though, and this one use probably makes up double-digit percentage of me ever having used it","msgtype":"m.text","formatted_body":"that \"quoting\" is really makeshift though, and this one use probably makes up double-digit percentage of me ever having used it"}}
                      {"origin_server_ts":1718017988832,"event_id":"$xVkrL0ZPI2doQXD_EJ83uItUGIS_WqCyB4x2SAFBcmk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah, pretty much","msgtype":"m.text","formatted_body":"yeah, pretty much"}}
                      {"origin_server_ts":1718018017863,"event_id":"$4yscZlMKtS7BflROFevDIXUjDtjf1atPFoKNgRsDDCM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"though `⍎` is a regular dyadic functio","msgtype":"m.text","formatted_body":"though ⍎<\/code> is a regular dyadic functio"}}
                      {"origin_server_ts":1718018018622,"event_id":"$rFAVVFgAQUtciK-z1NntnbZXJH1nNMiy-YSUigOnME4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"though `⍎` is a regular dyadic function","msgtype":"m.text","formatted_body":"though ⍎<\/code> is a regular dyadic function"},"m.relates_to":{"event_id":"$4yscZlMKtS7BflROFevDIXUjDtjf1atPFoKNgRsDDCM","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* though `⍎` is a regular dyadic function","msgtype":"m.text","formatted_body":"* though ⍎<\/code> is a regular dyadic function"}}
                      {"origin_server_ts":1718018034642,"event_id":"$F80JsgZi4FRybldIPp_i849qg7Out-BKyW40PLjlwpk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Also, while dzaima/apl prints the result of the lambda as backquote-followed-by-code, there is actually some closed over variables in there as well? (since the 10 functions are rendered exactly the same, but actually does different things)","msgtype":"m.text"}}
                      {"origin_server_ts":1718018070013,"event_id":"$LjavaFBBPaomc4SNqBt1J73IUnWU6MCXlcQOhT73csc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$4yscZlMKtS7BflROFevDIXUjDtjf1atPFoKNgRsDDCM"}},"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> though `⍎` is a regular dyadic function\n\nDoes this mean you can't call a lambda dyandically?","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @dzaima:matrix.org<\/a>
                      though ⍎<\/code> is a regular dyadic function<\/blockquote><\/mx-reply>Does this mean you can't call a lambda dyandically?"}} {"origin_server_ts":1718018073958,"event_id":"$ejC9mFDWKLQPyv_3uMb5Rjyn6J2AvHwC-Px4LI_JP-g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"Does this mean you can't call a lambda dyadically?","msgtype":"m.text","formatted_body":"Does this mean you can't call a lambda dyadically?"},"m.relates_to":{"event_id":"$LjavaFBBPaomc4SNqBt1J73IUnWU6MCXlcQOhT73csc","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":"> <@dzaima:matrix.org> though `⍎` is a regular dyadic function\n\n * Does this mean you can't call a lambda dyadically?","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @dzaima:matrix.org<\/a>
                      though ⍎<\/code> is a regular dyadic function<\/blockquote><\/mx-reply> * Does this mean you can't call a lambda dyadically?"}} {"origin_server_ts":1718018076058,"event_id":"$DlIfVEi89JcdDFIkIDP5ha1aIhu4cybEHH_EFxWu3gU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yep","msgtype":"m.text","formatted_body":"yep"}} {"origin_server_ts":1718018108266,"event_id":"$A3M1eI3Dik7-n5uTGbhkycPIWOcwyRUpiHFrOQmcjIk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"This is very interesting, and probably a simpler and more clever approach than mine.","msgtype":"m.text"}} {"origin_server_ts":1718018174204,"event_id":"$FzDLT3h3gNZsmLktXDXWVNCMBjMBvK7BabJMQstAtR4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$F80JsgZi4FRybldIPp_i849qg7Out-BKyW40PLjlwpk"}},"format":"org.matrix.custom.html","body":"the rendering is just arbitrary; I'd consider it the same space as `1` and `1.000000000000001` rendering the same despite being different values","msgtype":"m.text","formatted_body":"
                      ↰ <\/a> loke<\/a> <\/mx-reply>the rendering is just arbitrary; I'd consider it the same space as 1<\/code> and 1.000000000000001<\/code> rendering the same despite being different values"}} {"origin_server_ts":1718018202848,"event_id":"$HS4Qd_MTycnZ-LhoWVQrz1mjIarNB8EpJ3gLwryvYfU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Well, _should_ those two render the same? :-)","msgtype":"m.text","formatted_body":"Well, should<\/em> those two render the same? :-)"}} {"origin_server_ts":1718018220120,"event_id":"$0U7b3w2GqityGZ0w1K_9XfMu7tR8EEw75VSk5BcbYHs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"indeed that's a question","msgtype":"m.text","formatted_body":"indeed that's a question"}} {"origin_server_ts":1718018223840,"event_id":"$7_RXg-CxB5HCl4l1TGnItWBb4cm-JAM7B1PbK2BTUtM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Then again, Kap just renders all functions as `function`.","msgtype":"m.text","formatted_body":"Then again, Kap just renders all functions as function<\/code>."}} {"origin_server_ts":1718018273878,"event_id":"$-xCRoMaSHbmjr0z1v8lj272vUpkF6tV3XagLY8GKOUY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Including the code would actually be pretty neat.","msgtype":"m.text"}} {"origin_server_ts":1718018288432,"event_id":"$bh33BrSUAz7hZloGxjLS1X7fQBrCxeJNeVlRTQLKDcw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and there isn't really anything you can \"properly\" format it as; you could like `[n←3]{n + ⍵}` but then that breaks if the `n` is mutated","msgtype":"m.text","formatted_body":"and there isn't really anything you can \"properly\" format it as; you could like [n←3]{n + ⍵}<\/code> but then that breaks if the n<\/code> is mutated"}} {"origin_server_ts":1718018303239,"event_id":"$GybaqAscQnAv9MNCrOt7gvM7roftuCO0tHBuPTbiBdg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"and there isn't really anything you can \"properly\" format it as; you could like `[n←3]{n + ⍵}` or something but then that breaks if the `n` is mutated","msgtype":"m.text","formatted_body":"and there isn't really anything you can \"properly\" format it as; you could like [n←3]{n + ⍵}<\/code> or something but then that breaks if the n<\/code> is mutated"},"m.relates_to":{"event_id":"$bh33BrSUAz7hZloGxjLS1X7fQBrCxeJNeVlRTQLKDcw","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* and there isn't really anything you can \"properly\" format it as; you could like `[n←3]{n + ⍵}` or something but then that breaks if the `n` is mutated","msgtype":"m.text","formatted_body":"* and there isn't really anything you can \"properly\" format it as; you could like [n←3]{n + ⍵}<\/code> or something but then that breaks if the n<\/code> is mutated"}} {"origin_server_ts":1718018305537,"event_id":"$mAPrl5tvBtmu2zpvBT3pBQeNnUW-AsTp5-nNiG6uafQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I'd need to actually save the code though, which it doesn't. It does, however, remember the context in which the code was read (file, line number, etc)","msgtype":"m.text"}} {"origin_server_ts":1718018457929,"event_id":"$yWKqDw48TKDTwvrLaHQytvwgeEHRIb6CPTwe_evwHZU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima/APL/BQN just reconstruct the source from the token list, which also deals with problems with multiline defs. CBQN doesn't have a token list to go off of, but similarly does still have knowledge of the source location, and similarly doesn't pretty-print code contents","msgtype":"m.text","formatted_body":"dzaima/APL/BQN just reconstruct the source from the token list, which also deals with problems with multiline defs. CBQN doesn't have a token list to go off of, but similarly does still have knowledge of the source location, and similarly doesn't pretty-print code contents"}} {"origin_server_ts":1718018507310,"event_id":"$_OoL-x_xL8gCpjegI0aZErIVLa9e1bmsNoOgYYe3aUM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"dzaima/APL/BQN just reconstruct the source from the token list, which also deals with problems with multiline defs. CBQN doesn't have a token list to go off of, but similarly does still have knowledge of the source location, but still, similarly, doesn't pretty-print code contents","msgtype":"m.text","formatted_body":"dzaima/APL/BQN just reconstruct the source from the token list, which also deals with problems with multiline defs. CBQN doesn't have a token list to go off of, but similarly does still have knowledge of the source location, but still, similarly, doesn't pretty-print code contents"},"m.relates_to":{"event_id":"$yWKqDw48TKDTwvrLaHQytvwgeEHRIb6CPTwe_evwHZU","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* dzaima/APL/BQN just reconstruct the source from the token list, which also deals with problems with multiline defs. CBQN doesn't have a token list to go off of, but similarly does still have knowledge of the source location, but still, similarly, doesn't pretty-print code contents","msgtype":"m.text","formatted_body":"* dzaima/APL/BQN just reconstruct the source from the token list, which also deals with problems with multiline defs. CBQN doesn't have a token list to go off of, but similarly does still have knowledge of the source location, but still, similarly, doesn't pretty-print code contents"}} {"origin_server_ts":1718018644405,"event_id":"$chFjaQZcAAjnuUrWe8oUpBPxKqa0OCoAMf4n7YrWzvs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, kap doesn't have a token list either.","msgtype":"m.text"}} {"origin_server_ts":1718018671225,"event_id":"$XjUZNDtI0o9Vf6sKzYxK6PjOELXmioaCUNvupNhadyQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Just the execution tree (which has passed through the optimiser, so it doesn't necessarily look like the original code)","msgtype":"m.text"}} {"origin_server_ts":1718024989717,"event_id":"$DayAy1r65naKS0Vj6JU1DXvSEkfKVwaQXElX_ye5i4g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: Do you know how python's lambdas work? I don't actually know any python, but remember reading some post a few years back saying something along the lines of \"python is finally getting proper lambda functions\".","msgtype":"m.text","formatted_body":"dzaima<\/a>: Do you know how python's lambdas work? I don't actually know any python, but remember reading some post a few years back saying something along the lines of \"python is finally getting proper lambda functions\"."}} {"origin_server_ts":1718025483576,"event_id":"$uUanYTCHBaHPnM7K8Pbj-yJ_q6tVTXi3tK_tnCD6Chk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`lambda a,b,c: a+b+c`","msgtype":"m.text","formatted_body":"lambda a,b,c: a+b+c<\/code>"}} {"origin_server_ts":1718025509334,"event_id":"$BoBZGctB1sUwDgZJ1k3q-k6mb0-hSBd6yJwUZ59Ko94","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"And they capture closures properly?","msgtype":"m.text"}} {"origin_server_ts":1718025514143,"event_id":"$ycrmVpw51b9GdNrCWGxuv_RKtyE1RqwZQ3tcHfrjh3c","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yeah","msgtype":"m.text","formatted_body":"yeah"}} {"origin_server_ts":1718025538191,"event_id":"$aM9ocL1iyAXY9UKaE-8LbCbnDBjzr--GVRdeoE45Z1Q","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`(lambda a: lambda b: a+b)(1)(2)`","msgtype":"m.text","formatted_body":"(lambda a: lambda b: a+b)(1)(2)<\/code>"}} {"origin_server_ts":1718025557309,"event_id":"$JJR2j9YC5f7UWXS3ZuzDmC2T5Ebi6cKdliwJo5A_8Y0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, thanks.","msgtype":"m.text"}} {"origin_server_ts":1718025569545,"event_id":"$163C7jg56yXBnpSYwxwO2k597diGkKoY_Km6SDCpzUM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"basically exactly the same as JS, just the different syntax","msgtype":"m.text","formatted_body":"basically exactly the same as JS, just the different syntax"}} {"origin_server_ts":1718025621134,"event_id":"$e5fSvAEIKKRIprhIaZWHIjLIvsWRCOPP-q0LkTdXOFM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"basically exactly the same as JS, just different syntax (also things like needing `nonlocal` to mutate a non-local variable)","msgtype":"m.text","formatted_body":"basically exactly the same as JS, just different syntax (also things like needing nonlocal<\/code> to mutate a non-local variable)"},"m.relates_to":{"event_id":"$163C7jg56yXBnpSYwxwO2k597diGkKoY_Km6SDCpzUM","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* basically exactly the same as JS, just different syntax (also things like needing `nonlocal` to mutate a non-local variable)","msgtype":"m.text","formatted_body":"* basically exactly the same as JS, just different syntax (also things like needing nonlocal<\/code> to mutate a non-local variable)"}} {"origin_server_ts":1718025629399,"event_id":"$VYlPtcJy3WZa4gLc4TrRBJA1SMWWIXIt1kjM-sfFTKw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"basically exactly the same as JS, just different syntax (then also things like needing `nonlocal` to mutate a non-local variable)","msgtype":"m.text","formatted_body":"basically exactly the same as JS, just different syntax (then also things like needing nonlocal<\/code> to mutate a non-local variable)"},"m.relates_to":{"event_id":"$163C7jg56yXBnpSYwxwO2k597diGkKoY_Km6SDCpzUM","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* basically exactly the same as JS, just different syntax (then also things like needing `nonlocal` to mutate a non-local variable)","msgtype":"m.text","formatted_body":"* basically exactly the same as JS, just different syntax (then also things like needing nonlocal<\/code> to mutate a non-local variable)"}} {"origin_server_ts":1718025642185,"event_id":"$SePLEpjznb2pxEnBu_LqYOL5ptSAMt6K5FdcSrFmsjY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"basically exactly the same as JS, just different syntax (then also things like needing `nonlocal` on mutating a non-local variable)","msgtype":"m.text","formatted_body":"basically exactly the same as JS, just different syntax (then also things like needing nonlocal<\/code> on mutating a non-local variable)"},"m.relates_to":{"event_id":"$163C7jg56yXBnpSYwxwO2k597diGkKoY_Km6SDCpzUM","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* basically exactly the same as JS, just different syntax (then also things like needing `nonlocal` on mutating a non-local variable)","msgtype":"m.text","formatted_body":"* basically exactly the same as JS, just different syntax (then also things like needing nonlocal<\/code> on mutating a non-local variable)"}} {"origin_server_ts":1718025645547,"event_id":"$WEQc7a5Dzw1sTpDzHfxiImFA_C2H0bWrN_UMQ6UPZdg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Oh, so explicit closure captures?","msgtype":"m.text"}} {"origin_server_ts":1718025674348,"event_id":"$ZmaIlOqXWynBOSxjZLyO7xyJ9F-WEHOfB4Zh9l66FM8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I suppose it can be called that","msgtype":"m.text","formatted_body":"I suppose it can be called that"}} {"origin_server_ts":1718025801649,"event_id":"$djJ2cvk3FhpHtMiQw-1PX6FoQlbzNs7iV63WdRbUK7s","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(but only for mutation of a variable of an outer scope within an inner scope; reading doesn't need anything explicit, and will pick up mutations from other places)","msgtype":"m.text","formatted_body":"(but only for mutation of a variable of an outer scope within an inner scope; reading doesn't need anything explicit, and will pick up mutations from other places)"}} {"origin_server_ts":1718025885184,"event_id":"$iNATmZ_UsDorf_Ik7ikbxH0wVczYeCQ4Uhbh3cf7bJk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"e.g. [this](https://dzaima.github.io/paste/#0S0lNU0jLz9coycjMS9e04lJQSAGKJCUWaYA5CgoFRZl5JVBpoABcQZVGJVRFXn5eTn5yYo4CWBFYCMxSsFWohOgoSi0pLcoDmaoD1MjFxQVlAVWA7DY00AQLaWhygcw1MdKE8AA#py) prints `10`, `42`","msgtype":"m.text","formatted_body":"e.g. this<\/a> prints 10<\/code>, 42<\/code>"}} {"origin_server_ts":1718026413806,"event_id":"$qn43B2vQ2jVWr66sml1aBJVgPZINQzcRcEUPazPQV84","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, that's a bit weird. What is the purpose of nonlocal then?","msgtype":"m.text"}} {"origin_server_ts":1718026432187,"event_id":"$na1pb4-ZrX8ZF5XpMKnO9UATiPDjqs51jTjEO_OpR9A","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"to make the assignment not do a local assignment","msgtype":"m.text","formatted_body":"to make the assignment not do a local assignment"}} {"origin_server_ts":1718026441047,"event_id":"$kLh1gF8uI21jsl_RoGGZDXKtfIxt2EVqt7tcwguFC8g","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"like `↩` vs `←` in BQN","msgtype":"m.text","formatted_body":"like ↩<\/code> vs ←<\/code> in BQN"}} {"origin_server_ts":1718028101265,"event_id":"$EdFZgbfI2xTbfn-niyvU-pB1cbpvvTk00lRyBCcUcL8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Oh wait, so assignment creates a local binding by default, unless explicitly not?","msgtype":"m.text"}} {"origin_server_ts":1718028118021,"event_id":"$m_5XjYVgrTKz_EqVomEFDduVVNgku4DMH_QfyPggYzs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Does that mean that the body of an if statement is not a scope?","msgtype":"m.text"}} {"origin_server_ts":1718028218313,"event_id":"$Yz5Zv3hKLmqhLHouBStQbeoeeoQ3j5Sjaz30h98y81g","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"yep","msgtype":"m.text","formatted_body":"yep"}} {"origin_server_ts":1718028274139,"event_id":"$s3wPnHuvqeazRQRA6soN5eM9FTIn9AN24KEWUk1JMQk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"so\n```\ndef foo(x):\n if x:\n asd = 123\n else:\n asd = 456\n return asd\nprint(foo(0))\n```\nprints 456","msgtype":"m.text","formatted_body":"so
                      def foo(x):\n  if x:\n    asd = 123\n  else:\n    asd = 456\n  return asd\nprint(foo(0))<\/code><\/pre>prints 456"}}
                      {"origin_server_ts":1718029250649,"event_id":"$VoKEFkd05t6pyElYzPC08VlplFQ-t-5MdbQKnycxc80","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Is there some syntax to explicitly declare a scope?","msgtype":"m.text"}}
                      {"origin_server_ts":1718029436000,"event_id":"$h1fLNf_tR5S4Kujoth7a5NEVrVOp8P-1Ibkud60lnx8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"you don't, mainly","msgtype":"m.text","formatted_body":"you don't, mainly"}}
                      {"origin_server_ts":1718030987816,"event_id":"$4hVRYOKGB1jC6-H1u56-P1s1fktMMiqzaTDR5Wo8FtM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"this code does not bring up any results anymore: ```(code ; data ; headers) ← io:httpRequest \"https://www.google.com/\"\nmapToArray headers\n```","msgtype":"m.text","formatted_body":"

                      this code does not bring up any results anymore: ```(code ; data ; headers) ← io:httpRequest \"https://www.google.com/\"
                      mapToArray headers<\/p>\n

                      <\/code><\/pre>\n"}}
                      {"origin_server_ts":1718031007447,"event_id":"$oqul6hIPutFk0eVXA1HTuE5pP64Dt2ZDgUYVS50_sH0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"this code does not bring up any results anymore:  (code ; data ; headers) ← io:httpRequest \"https://www.google.com/\"\nmapToArray headers","msgtype":"m.text"},"m.relates_to":{"event_id":"$4hVRYOKGB1jC6-H1u56-P1s1fktMMiqzaTDR5Wo8FtM","rel_type":"m.replace"},"m.mentions":{},"body":" * this code does not bring up any results anymore:  (code ; data ; headers) ← io:httpRequest \"https://www.google.com/\"\nmapToArray headers","msgtype":"m.text"}}
                      {"origin_server_ts":1718031052285,"event_id":"$coY-Vg2xsz7_ibm3uzVrUyvTnk2922NcasnEFcNP0os","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"page fetching works but mapToArray does not","msgtype":"m.text"}}
                      {"origin_server_ts":1718031233874,"event_id":"$oTmH0hHOsXTGHKjOMtwiSTvEnVWI9fbo0AmltgCEw8k","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"this code does not bring up any results anymore:   (code ; data ; headers) ← io:httpRequest \"https://www.google.com/\"\nmapToArray headers <\/code>","msgtype":"m.text"},"m.relates_to":{"event_id":"$4hVRYOKGB1jC6-H1u56-P1s1fktMMiqzaTDR5Wo8FtM","rel_type":"m.replace"},"m.mentions":{},"body":" * this code does not bring up any results anymore:   (code ; data ; headers) ← io:httpRequest \"https://www.google.com/\"\nmapToArray headers <\/code>","msgtype":"m.text"}}
                      {"origin_server_ts":1718031242563,"event_id":"$VUp-iD6HYSp1bRbBesAOwdMwMu5e8GbmPNOgdt1JSmk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"this code does not bring up any results anymore:   (code ; data ; headers) ← io:httpRequest \"https://www.google.com/\"\nmapToArray headers ","msgtype":"m.text"},"m.relates_to":{"event_id":"$4hVRYOKGB1jC6-H1u56-P1s1fktMMiqzaTDR5Wo8FtM","rel_type":"m.replace"},"m.mentions":{},"body":" * this code does not bring up any results anymore:   (code ; data ; headers) ← io:httpRequest \"https://www.google.com/\"\nmapToArray headers ","msgtype":"m.text"}}
                      {"origin_server_ts":1718033269739,"event_id":"$Pc6XyaKzkKLDBk2TU4WcAN7dppEVv-eIYP8xaUxGEcQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Hmm. Jvm client? ","msgtype":"m.text"}}
                      {"origin_server_ts":1718033287684,"event_id":"$sOL5UqzlcYbC8BP0ECUssfKbtnmvBPP8Ge2f7317Qvk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"both clients afaik","msgtype":"m.text"}}
                      {"origin_server_ts":1718033291431,"event_id":"$NXPINkQWDTAMjQ5Ff3ihG8TAyn8AYGJ1s-0Ig8FTkOM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"The backends use completely different implementations of http","msgtype":"m.text"}}
                      {"origin_server_ts":1718033297825,"event_id":"$Vmzlc5ukGEqYcqPfyGpTBff4KCaKjpIIgaAlnJtHFBQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Weird","msgtype":"m.text"}}
                      {"origin_server_ts":1718033305289,"event_id":"$RpM6uWwlTgRrADF2tKgwf4tMIvtG3CJA4ZipGJ9pMK8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ok. Let me check. ","msgtype":"m.text"}}
                      {"origin_server_ts":1718033309082,"event_id":"$hWg99cYVK5Y79FsZ3jZ9As-Z9KOK-vpQJOt-Zn3U9FE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"browser one actually does not fetch any pages","msgtype":"m.text"}}
                      {"origin_server_ts":1718033331706,"event_id":"$KoA-mSIlyTkERn7RREMZwN8EaGLEepLJneYB_asO7WM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"with jvm you get the page but not the map to array","msgtype":"m.text"}}
                      {"origin_server_ts":1718033360834,"event_id":"$fFkknH8CCGRZDsxRPjxQwiDcRBPN7geuZBi8M6b_Yos","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Js client will fail unless you're running it on node","msgtype":"m.text"}}
                      {"origin_server_ts":1718033374775,"event_id":"$Y0ZPnATHD7GFF7zpr8T5lOYUtqHdorGB7idZkA4lcUY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's because of origin restrictions. ","msgtype":"m.text"}}
                      {"origin_server_ts":1718033391472,"event_id":"$NwxKyJ0yFzCM1sMyqIStSmjJfERoFvnFex7hc_PiIbo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ok but I tried whats on dhsdevelopment","msgtype":"m.text"}}
                      {"origin_server_ts":1718033419582,"event_id":"$ytcpi-SCIQ3uEJUZ9RQsgBYais5nYAYqeZc_fSXtNdo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"ok but I tried on dhsdevelopment","msgtype":"m.text"},"m.relates_to":{"event_id":"$NwxKyJ0yFzCM1sMyqIStSmjJfERoFvnFex7hc_PiIbo","rel_type":"m.replace"},"m.mentions":{},"body":" * ok but I tried on dhsdevelopment","msgtype":"m.text"}}
                      {"origin_server_ts":1718033471853,"event_id":"$i6PIQ1vV7Lv64i2bbCcqQ0M1HWBCIRnXY5WQFbqwGrM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ok. That's weird","msgtype":"m.text"}}
                      {"origin_server_ts":1718033477761,"event_id":"$uuhO4D-XYDgR38AVcYBcH_tb79vHkoP3dcOxKLPxg8Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I need to check.","msgtype":"m.text"}}
                      {"origin_server_ts":1718035027492,"event_id":"$jd83oepVNTlS8EQ-OT73u7QfV2BP4cA6SuIYkOkdecc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ok. I see what happened. ","msgtype":"m.text"}}
                      {"origin_server_ts":1718035042768,"event_id":"$xSFmYhnIJYvEsLUoTPLrr9U8EV323U0XoKuwMC9jKac","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's a bug. I'll figure it out and fix it.","msgtype":"m.text"}}
                      {"origin_server_ts":1718035050074,"event_id":"$XIlSya_0bD2tF0w9eakDOqHEO-a0HDJr3vEi5A2mYDg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$xSFmYhnIJYvEsLUoTPLrr9U8EV323U0XoKuwMC9jKac","rel_type":"m.annotation","key":"🙏"}}}
                      {"origin_server_ts":1718040079820,"event_id":"$SpuXdMNOtMZCl4JIp6hVSaGYsH5z-oJQJsXAOiMo-qo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Ok. It actually has nothing to do with the http api","msgtype":"m.text"}}
                      {"origin_server_ts":1718040101289,"event_id":"$-PbLTYt2TaZ8iLbMAOQBwDa_FSTvDLvEuzTu1RzxD2U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"It's late here. I'll have to fix it tomorrow. ","msgtype":"m.text"}}
                      {"origin_server_ts":1718041453203,"event_id":"$gp93RdaUMk7RhoIh_v8kAWYGrPMzAkxniQrErow1-tU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, I know what the problem is. It should really only happen on the JVM version, since the issue is with rendering value metadata in arrays that has meed truncated due to size.","msgtype":"m.text"}}
                      {"origin_server_ts":1718041461766,"event_id":"$w4ixeXbfmwXoalzU7EVSDuVxdoaeWSnhl8hBfl0cq4k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"OK, I know what the problem is. It should really only happen on the JVM version, since the issue is with rendering value metadata in arrays that has been truncated due to size.","msgtype":"m.text"},"m.relates_to":{"event_id":"$gp93RdaUMk7RhoIh_v8kAWYGrPMzAkxniQrErow1-tU","rel_type":"m.replace"},"m.mentions":{},"body":" * OK, I know what the problem is. It should really only happen on the JVM version, since the issue is with rendering value metadata in arrays that has been truncated due to size.","msgtype":"m.text"}}
                      {"origin_server_ts":1718041548438,"event_id":"$JhK-8o3sjokgfTgJXFP9hB8PFdjruhA6qBfu1G-REvA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: workaround: run this before anything else and the issue should go away: `o3:maxStringLength ← 1000000 10000`","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: workaround: run this before anything else and the issue should go away: o3:maxStringLength ← 1000000 10000<\/code>"}}
                      {"origin_server_ts":1718042345347,"event_id":"$WWDqw4ItMFmvJnnIStHywTJs0QX8z3pQ1nyj-wBYQ8Q","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$JhK-8o3sjokgfTgJXFP9hB8PFdjruhA6qBfu1G-REvA","rel_type":"m.annotation","key":"🙏"}}}
                      {"origin_server_ts":1718042603562,"event_id":"$uOaJFnQgblpS0LYvhlbW1EfQqnxIqrU0csWf4vlCfjw","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"it still freezes there with that mapToArray","msgtype":"m.text"}}
                      {"origin_server_ts":1718043024805,"event_id":"$abI1fakfB1bshMSzCqxhow97uYs6p0nihUC5t_oT7ng","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Do you get an exception on standard output? ","msgtype":"m.text"}}
                      {"origin_server_ts":1718044327860,"event_id":"$m04ZbLXQXUiPllzJ6eVC7RNLYS4L3elc86RXnBV3dCc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"no nothing","msgtype":"m.text"}}
                      {"origin_server_ts":1718044331189,"event_id":"$TOEUAp7IM0Wn75FzQEVyxZch3rANDW39O_0gOdbMxR8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"it just stalls","msgtype":"m.text"}}
                      {"origin_server_ts":1718044347621,"event_id":"$hZXRXu_qyygGe5earfj3XESEBOJuBvYdOXJRjhQ7gVE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Screenshot from 2024-06-10 21-02-55.png","msgtype":"m.image","url":"mxc://matrix.org/BhmGvRJaWeIeFANngopAcUaU","info":{"xyz.amorgan.blurhash":"L7RyyuIURjof~qM{Rjay~ERjR*WB","size":399815,"thumbnail_info":{"size":267235,"w":800,"h":410,"mimetype":"image/png"},"w":1798,"h":923,"mimetype":"image/png","thumbnail_url":"mxc://matrix.org/ZBecPbhAzrGHzRoJVAfoVCpf"}}}
                      {"origin_server_ts":1718044397134,"event_id":"$3IrW5HRtWENxgce6OCQWd6ce3M_jpsqVWH0lu6zLJ8U","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"when it freezes, it refuses to accept any input (forever loop?)","msgtype":"m.text"}}
                      {"origin_server_ts":1718070857120,"event_id":"$JXj-N5sRUknllW6d-npNnOgo-Gn2pkHWvFzMQTaISHA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Right. But what do you get on standard output? I mean the remainder where you started the application from. ","msgtype":"m.text"}}
                      {"origin_server_ts":1718070876978,"event_id":"$oJvDsRZ1SX5jhd7PZi6b5YLkEEm-8Kf3vs23UJuF2tQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"body":"Right. But what do you get on standard output? I mean the terminal where you started the application from. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$JXj-N5sRUknllW6d-npNnOgo-Gn2pkHWvFzMQTaISHA","rel_type":"m.replace"},"body":"* Right. But what do you get on standard output? I mean the terminal where you started the application from. ","msgtype":"m.text"}}
                      {"origin_server_ts":1718073519756,"event_id":"$FDftnlfyq985xp-BzdLYV6s9c1zdLOw3hWw2F2YmcTM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I have a way to easily reproduce the issue without involving the http API. Just run the following: `50⍴⍳100 ; 300⍴\"b\"`","msgtype":"m.text","formatted_body":"I have a way to easily reproduce the issue without involving the http API. Just run the following: 50⍴⍳100 ; 300⍴\"b\"<\/code>"}}
                      {"origin_server_ts":1718081818873,"event_id":"$T5Wj55stVNkkql7wMS2R_U4fZUSJYl6ysoWU9CKWjGc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"This should work fine on all platforms except for JVM.","msgtype":"m.text"}}
                      {"origin_server_ts":1718097876566,"event_id":"$gaKsgU5anK8VDpog47LTcnjtUc0-uu2ioMdqkrZQrc8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$JXj-N5sRUknllW6d-npNnOgo-Gn2pkHWvFzMQTaISHA"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"body":"Screenshot from 2024-06-11 12-24-06.png","msgtype":"m.image","url":"mxc://matrix.org/iMahRTbbUxQfpjupvWcHbXWQ","info":{"xyz.amorgan.blurhash":"L38;V=~qofs:D%ofWBRjozbHj@f6","size":140153,"w":878,"h":796,"mimetype":"image/png"}}}
                      {"origin_server_ts":1718097898672,"event_id":"$7_z6NUNGYZ_GbjajcQNaxm8Ead-1TzRxyM-aESIY9Dg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"That's strange.","msgtype":"m.text"}}
                      {"origin_server_ts":1718097915895,"event_id":"$t7IPUxb-0iRvA-EnNqTRM-YgMk8DRlzHoKyog6mDuBU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Perhaps it's not printing anything to standard output when using gui:run","msgtype":"m.text"}}
                      {"origin_server_ts":1718097930393,"event_id":"$mtPdETOFn6WCsqViVMgFwwzA6Lrks8QqDv77Rg5GFqM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"no errors at least","msgtype":"m.text"}}
                      {"origin_server_ts":1718097987199,"event_id":"$vIMaG9DlKT5leOFe129qfV7i2Pyf9Yv4DaONpmRQf7U","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$FDftnlfyq985xp-BzdLYV6s9c1zdLOw3hWw2F2YmcTM"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> I have a way to easily reproduce the issue without involving the http API. Just run the following: `50⍴⍳100 ; 300⍴\"b\"`\n\naye yes, this stalls similarly with JVM. webclient works","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                      I have a way to easily reproduce the issue without involving the http API. Just run the following: 50⍴⍳100 ; 300⍴\"b\"<\/code><\/blockquote><\/mx-reply>aye yes, this stalls similarly with JVM. webclient works"}} {"origin_server_ts":1718098034631,"event_id":"$BLnGVjIe5Orhxi79e-CsaxZIIUzQ1BOBTc0u1DmpfOs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Indeed. The issue is that the renderer has two different ways to strim content (strings vs. arrays). The error occurs when both types of trim happens in the same field.","msgtype":"m.text"}} {"origin_server_ts":1718098047791,"event_id":"$HSqJHl20O62lkOuQWkAv5Gdy3pfHNYYj6MNMi2IOpCM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Indeed. The issue is that the renderer has two different ways to trim content (strings vs. arrays). The error occurs when both types of trim happens in the same field.","msgtype":"m.text"},"m.relates_to":{"event_id":"$BLnGVjIe5Orhxi79e-CsaxZIIUzQ1BOBTc0u1DmpfOs","rel_type":"m.replace"},"m.mentions":{},"body":" * Indeed. The issue is that the renderer has two different ways to trim content (strings vs. arrays). The error occurs when both types of trim happens in the same field.","msgtype":"m.text"}} {"origin_server_ts":1718098073538,"event_id":"$jZTH5sH_C3JiuKwr0Dc41xOUomQvMCwIFOi0rN3A8bA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$BLnGVjIe5Orhxi79e-CsaxZIIUzQ1BOBTc0u1DmpfOs","rel_type":"m.annotation","key":"🤔"}}} {"origin_server_ts":1718179555047,"event_id":"$KFcuDqpgjU0qARJrg_qAVhM80QMf0RVdLiZIdhMfJ8M","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: OK, I think I fixed it now. It was a bug in the renderer. https://codeberg.org/loke/array/commit/b5a11e86996a672c53169e7943d6814d4a7726a2","msgtype":"m.text","formatted_body":"
                      sienet_ja_LSD<\/a>: OK, I think I fixed it now. It was a bug in the renderer. https://codeberg.org/loke/array/commit/b5a11e86996a672c53169e7943d6814d4a7726a2"}} {"origin_server_ts":1718185441387,"event_id":"$2Idtc8zMf7xbuhyKQwOPYQWJbNkLOzznT8TSJZd_Ppk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$KFcuDqpgjU0qARJrg_qAVhM80QMf0RVdLiZIdhMfJ8M","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1718208666594,"event_id":"$gHPcCrMSBLe7HmubJsL-PU3yFNhImMWWxw_mkCoNIQY","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1718373285811,"event_id":"$pGZ8MMJtCqsCLI74yryvJFbM9k1xkW13Fc5B0uoMU9E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$gHPcCrMSBLe7HmubJsL-PU3yFNhImMWWxw_mkCoNIQY","type":"m.room.redaction","content":{"redacts":"$gHPcCrMSBLe7HmubJsL-PU3yFNhImMWWxw_mkCoNIQY"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.reaction","content":{}} {"origin_server_ts":1718208689685,"event_id":"$XLkm3f8LHummKNPQlcTo9Oc2Ru_E1BEog6BMLex6nhM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"And another fix to the formatter so the soaker serialiser (copyvas code) now returns code that doesn't fail. ","msgtype":"m.text"}} {"origin_server_ts":1718208710657,"event_id":"$w9SJVDw9vwyp9BOdIbqUIxRjh1GOraRCNpTG_sDvfoQ","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$XLkm3f8LHummKNPQlcTo9Oc2Ru_E1BEog6BMLex6nhM","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1718211148614,"event_id":"$z_QFusNxS6KIcGD84pppTjqhKlO8GEBjfChUPA4c9mI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"And another fix to the formatter so the soaker serialiser (copy as code) now returns code that doesn't fail. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$XLkm3f8LHummKNPQlcTo9Oc2Ru_E1BEog6BMLex6nhM","rel_type":"m.replace"},"m.mentions":{},"body":" * And another fix to the formatter so the soaker serialiser (copy as code) now returns code that doesn't fail. ","msgtype":"m.text"}} {"origin_server_ts":1718250180052,"event_id":"$lSlyHRknk0K2js1Z6OrmdgOj9RpkWph-QD3Ponc56jo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"And another fix to the formatter so the serialiser (copy as code) now returns code that doesn't fail. ","msgtype":"m.text"},"m.relates_to":{"event_id":"$XLkm3f8LHummKNPQlcTo9Oc2Ru_E1BEog6BMLex6nhM","rel_type":"m.replace"},"m.mentions":{},"body":" * And another fix to the formatter so the serialiser (copy as code) now returns code that doesn't fail. ","msgtype":"m.text"}} {"origin_server_ts":1718371924888,"event_id":"$qfdAnLDDc_mG8vtCKmZTyaHN1m_XjhxQEsJWIdGKqWo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$gHPcCrMSBLe7HmubJsL-PU3yFNhImMWWxw_mkCoNIQY","type":"m.room.redaction","content":{"redacts":"$gHPcCrMSBLe7HmubJsL-PU3yFNhImMWWxw_mkCoNIQY"}} {"origin_server_ts":1718371928424,"event_id":"$4TMJB1sJThCUXMqsoRu-v83CW5xJdP1l3KLttWPX09s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$gHPcCrMSBLe7HmubJsL-PU3yFNhImMWWxw_mkCoNIQY","type":"m.room.redaction","content":{"redacts":"$gHPcCrMSBLe7HmubJsL-PU3yFNhImMWWxw_mkCoNIQY"}} {"origin_server_ts":1718371932044,"event_id":"$Vh3SfX26iYHECHhGEnIKufXRbb9N_qWP_aoMh8pWbgs","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1718371933015,"event_id":"$zb-swR81gsxUzkrkBooVI7cjx52KAH0X7M6TtkZJYUQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$Vh3SfX26iYHECHhGEnIKufXRbb9N_qWP_aoMh8pWbgs","type":"m.room.redaction","content":{"redacts":"$Vh3SfX26iYHECHhGEnIKufXRbb9N_qWP_aoMh8pWbgs"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.reaction","content":{}} {"origin_server_ts":1718371933015,"event_id":"$zb-swR81gsxUzkrkBooVI7cjx52KAH0X7M6TtkZJYUQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$Vh3SfX26iYHECHhGEnIKufXRbb9N_qWP_aoMh8pWbgs","type":"m.room.redaction","content":{"redacts":"$Vh3SfX26iYHECHhGEnIKufXRbb9N_qWP_aoMh8pWbgs"}} {"origin_server_ts":1718371934352,"event_id":"$jfkb7qqnnGuf8bEHPYd9VCcwKuxyYGtoCM1CO2eFvUw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$gHPcCrMSBLe7HmubJsL-PU3yFNhImMWWxw_mkCoNIQY","type":"m.room.redaction","content":{"redacts":"$gHPcCrMSBLe7HmubJsL-PU3yFNhImMWWxw_mkCoNIQY"}} {"origin_server_ts":1718373285065,"event_id":"$dGUavIBfMVdT0CRB0xehXvWlbyYPBPyfzFD1mEUisn8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$gHPcCrMSBLe7HmubJsL-PU3yFNhImMWWxw_mkCoNIQY","type":"m.room.redaction","content":{"redacts":"$gHPcCrMSBLe7HmubJsL-PU3yFNhImMWWxw_mkCoNIQY"}} {"origin_server_ts":1718373285811,"event_id":"$pGZ8MMJtCqsCLI74yryvJFbM9k1xkW13Fc5B0uoMU9E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$gHPcCrMSBLe7HmubJsL-PU3yFNhImMWWxw_mkCoNIQY","type":"m.room.redaction","content":{"redacts":"$gHPcCrMSBLe7HmubJsL-PU3yFNhImMWWxw_mkCoNIQY"}} {"origin_server_ts":1718782208193,"event_id":"$fLSfLIh4afCV3LC-k9UcIAxkPvTGNjRC2fy5t0J_8QI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, I have a design problem.","msgtype":"m.text"}} {"origin_server_ts":1718782428864,"event_id":"$MCeWAkLoq7EC_o-OMSV5yX4FayocL1RpqmhZsRIMlD0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I'm playing around with Kap hooked into a large treasury trading system, and I'm getting position updates as 2D arrays. This data is parsed from JSON data that is pushed from the the system. Now, in some cases, there is missing data (the field in the JSON is null) which results in the Kap array containing a `null` value.","msgtype":"m.text","formatted_body":"I'm playing around with Kap hooked into a large treasury trading system, and I'm getting position updates as 2D arrays. This data is parsed from JSON data that is pushed from the the system. Now, in some cases, there is missing data (the field in the JSON is null) which results in the Kap array containing a null<\/code> value."}} {"origin_server_ts":1718782535918,"event_id":"$00cgOssURxIJwNZkXKm-r_NCG6rho3a4lcxItCSf1UA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"This is technically correct, and I could add code to replace the `null` values with `0` where it makes sense. However, even more convenient would be to have mathematical operations treat `null` as zero. That would make things like `+/` over a column do the right thing even if there are cells with null in them.","msgtype":"m.text","formatted_body":"This is technically correct, and I could add code to replace the null<\/code> values with 0<\/code> where it makes sense. However, even more convenient would be to have mathematical operations treat null<\/code> as zero. That would make things like +/<\/code> over a column do the right thing even if there are cells with null in them."}} {"origin_server_ts":1718782569427,"event_id":"$WO9dYViKRKWCzB_WLpB1KLK6a2hSNZ8fv09eYjMS75o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"However, if I do that, the semantics could be weird.","msgtype":"m.text"}} {"origin_server_ts":1718795107180,"event_id":"$KMF8d8keOAK40ipNYy-jSaxSY352H_kMflFI9MxdJ_8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`0` is a rather arbitrary value; namely, `×/4 null 5` would be `0`. (and even if you changed `null` to be the identity value of the function in question, you'd still have funkiness of `a←4 null 5` having `20≡×/a` but `0≡×/a+0`)","msgtype":"m.text","formatted_body":"0<\/code> is a rather arbitrary value; namely, ×/4 null 5<\/code> would be 0<\/code>. (and even if you changed null<\/code> to be the identity value of the function in question, you'd still have funkiness of a←4 null 5<\/code> having 20≡×/a<\/code> but 0≡×/a+0<\/code>)"}} {"origin_server_ts":1718800988041,"event_id":"$07mPd4OoRWbl3egqoN-Y1sm_yHVidbN-E0r301oIUJQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"You're absolutely right. You convinced me.","msgtype":"m.text"}} {"origin_server_ts":1718836785456,"event_id":"$yvqYujc6n8SFgBjXsIpp5wNGbjc9C7tAHWFsLaX6fiQ","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Yeah, looking at this shouldn't null be a bit of a mathematical black hole?","msgtype":"m.text"}} {"origin_server_ts":1718836817721,"event_id":"$MT2tzadO_biMoIdd87m1IM385h5-4bzDhJ4_hNybnOE","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I'm not 100% sure if I'm just repeating what you're suggesting, but the concept of nullity in my mind just means \"something has gone terribly, terribly wrong\"","msgtype":"m.text"}} {"origin_server_ts":1718836901405,"event_id":"$Bq8hpUzMMjyJcQDwGYATgS3qiYAYzZZb41zkfSTnlyI","sender":"@tortus:matrix.org","user_id":"@tortus:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"Like, any benefit given by purposeful annulling can be swiped away with better program design, so null should propagate more nulls?","msgtype":"m.text"}} {"origin_server_ts":1718858869427,"event_id":"$gyI-sn6NOjH4YebirXQlpcoeASaM2YVMc7OsA8o9XA0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@tortus:matrix.org"]},"format":"org.matrix.custom.html","body":"Tortus: you mean like SQL? Where N+null = null?","msgtype":"m.text","formatted_body":"Tortus<\/a>: you mean like SQL? Where N+null = null?"}} {"origin_server_ts":1718862962570,"event_id":"$mfuj402UyHO3G0jYFHrFW97MOHMafvvV1E820fNxIwY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Check out this commit: https://codeberg.org/loke/array/commit/f35a73f1ae4c864349d018396c38a47a180807bb","msgtype":"m.text"}} {"origin_server_ts":1718871463274,"event_id":"$MHfnTRR_ctPP4HKTdOReAH_050SnsNj-lD7vzDUDiR0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$mfuj402UyHO3G0jYFHrFW97MOHMafvvV1E820fNxIwY","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1719234249415,"event_id":"$Iy0jAzOMaTMUvw6hH7tI8vzmS7JmYAdr_QjQ62L-xH4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"would I be able to run a kap script without firing up the GUI? if so, how?","msgtype":"m.text"}} {"origin_server_ts":1719243459095,"event_id":"$cApw9amDPzLcQ1WbPHu0kkN7ILSbAoWsrxqNjP9mDDc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Yes, you can.","msgtype":"m.text"}} {"origin_server_ts":1719243494247,"event_id":"$9MrMIxrDl6lJTvltUn3qWyG7tfl_ij9joUrtIPHRHwA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"However, you can't use the gui distribution, but the separate text-based ones (either JVM or Native)","msgtype":"m.text"}} {"origin_server_ts":1719243536267,"event_id":"$qTIq-AG15m1-dSebhUx3N4CFTXXH5mSh3KLA6Lk9oa0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Once a proper distribution method is built, this will change, and the gui version will get a flag `--disable-gui` for this purpose.","msgtype":"m.text","formatted_body":"Once a proper distribution method is built, this will change, and the gui version will get a flag --disable-gui<\/code> for this purpose."}} {"origin_server_ts":1719243607163,"event_id":"$aC_Kjh8ni6HsQpUoar8M3woTCX_A2t8L7oEeW_BMj00","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: if you use the text-based versions, just add the following flags `-n -l file.kap`","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: if you use the text-based versions, just add the following flags -n -l file.kap<\/code>"}} {"origin_server_ts":1719243623730,"event_id":"$h4NYIy4UY1ovuIPwGw1o2CxV2-22bFXGPYVJtJYqFnI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"`-n` means \"don't start the repl\", and `-l` meand \"load the file\"","msgtype":"m.text","formatted_body":"-n<\/code> means \"don't start the repl\", and -l<\/code> meand \"load the file\""}} {"origin_server_ts":1719243627144,"event_id":"$BJXvC_YMHvMCt7jUq87Qfzc539YO_Y7n6z_3HJMcEmQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"`-n` means \"don't start the repl\", and `-l` means \"load the file\"","msgtype":"m.text","formatted_body":"-n<\/code> means \"don't start the repl\", and -l<\/code> means \"load the file\""},"m.relates_to":{"event_id":"$h4NYIy4UY1ovuIPwGw1o2CxV2-22bFXGPYVJtJYqFnI","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * `-n` means \"don't start the repl\", and `-l` means \"load the file\"","msgtype":"m.text","formatted_body":" * -n<\/code> means \"don't start the repl\", and -l<\/code> means \"load the file\""}} {"origin_server_ts":1719243713215,"event_id":"$uj_WywV6S72ngzWn2_N97YOFdPxUAFEtv6rl8ypILWQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Instead of `-l` you can use `-E` which means \"eval this expression\", so you can run a single Kap expression using `-n -E '1+2+3'`","msgtype":"m.text","formatted_body":"Instead of -l<\/code> you can use -E<\/code> which means \"eval this expression\", so you can run a single Kap expression using -n -E '1+2+3'<\/code>"}} {"origin_server_ts":1719244130287,"event_id":"$fG-m2GjVC8AYy4S2G3i0k8oPp1NYdxj_uN1SI00Z21s","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"so it needs shadow jarring first and then I can use the command line args?","msgtype":"m.text"}} {"origin_server_ts":1719246842445,"event_id":"$rtHUFuMLdpVdSxiPmRxcUdYj8sfdit_5NjR53C86j5I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"sienet_ja_LSD: You can use the text-based client, and then my examples will work.","msgtype":"m.text","formatted_body":"sienet_ja_LSD<\/a>: You can use the text-based client, and then my examples will work."}} {"origin_server_ts":1719246889665,"event_id":"$FPQxeYd4keFbGlUBvRcffZgrI4x4Xi2P739Pqq06Yvs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's just that when gui client doesn't allow you to call the regular commandline options, so these flags are not available there. It's an implementation detail.","msgtype":"m.text"}} {"origin_server_ts":1719246909483,"event_id":"$S5GwaDhoZOYba7r30gCxnHUzlx4Fl_qpjE2V2XAB5J8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yes but which jar file do I use?","msgtype":"m.text"}} {"origin_server_ts":1719246928104,"event_id":"$X9-slPpTAeKdKHzQOwXgyEdnYxBEInUv7mcvQDdcCsk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"None, you should be able to use the start script.","msgtype":"m.text"}} {"origin_server_ts":1719246956400,"event_id":"$DhqLXVY_r-UsGb4x4XjiO9oBDernBlKJmcBrDbctlcI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"If you want to use the jar directly, you need a crazy long commandline listing all the jars.","msgtype":"m.text"}} {"origin_server_ts":1719246983422,"event_id":"$eANJif-vGETpA5TWEqqRl7Ro4m0ZdkifFcpYk1POpok","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I could make a target that builds a fat jar containing everything, but I never did that.","msgtype":"m.text"}} {"origin_server_ts":1719247230727,"event_id":"$tiQpz11RfuSZ1Taxu88AjsedKNue5nRMqX6A962ZeWo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I don't have anything else except gradlew, but that does not allow me to give any command line parameters","msgtype":"m.text"}} {"origin_server_ts":1719247245986,"event_id":"$fV2TJi-MgMUszaq6mauljSaoUoqZHwPRd_LPfzZN-j8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"there are some .kexe files in the build directories","msgtype":"m.text"}} {"origin_server_ts":1719247265564,"event_id":"$UX5V8Pq-sgAfImSpBt-7izyD-GLWKvOXWBRRt6YCfic","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Ah, you want to run it from source. Hang on, let me test something.","msgtype":"m.text"}} {"origin_server_ts":1719247269678,"event_id":"$YtMk7Shy-WplIIjxM6edTfKYkhNvpZO4bO21QeAV2uY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"but I don't know anything about them","msgtype":"m.text"}} {"origin_server_ts":1719247331212,"event_id":"$HM6YbsJQcmnKi4oNs-i4ErVcQXWIxsdjE3RrR6474RQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"You can use the kexe on Linux. The native version is slower though, but easier to deploy since it's just one binary.","msgtype":"m.text"}} {"origin_server_ts":1719247346286,"event_id":"$EKTqVr3YzpFlWnfliYCbJDs6PXzUWojxXeT4uFlzvLc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"ok I'll try it","msgtype":"m.text"}} {"origin_server_ts":1719247404744,"event_id":"$IBwYQVCFnxEN651hFNccTRJsBovH9doNTIpkdL7iXo8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Just run this: `./gradlew text-client:linkReleaseExecutableLinux`","msgtype":"m.text","formatted_body":"Just run this: ./gradlew text-client:linkReleaseExecutableLinux<\/code>"}} {"origin_server_ts":1719247414551,"event_id":"$eAigLc7M2UUT3s_Gz_N3Tqk2or8EMdMwenieLe32nY4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$IBwYQVCFnxEN651hFNccTRJsBovH9doNTIpkdL7iXo8","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1719247427183,"event_id":"$Fp84byrtKkUrdfijcfJZTJJpupuik_OmtnShLGdatc4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Then you can start it using this:\n```\ntext-client/build/bin/linux/releaseExecutable/text-client.kexe --lib-path=array/standard-lib\n```","msgtype":"m.text","formatted_body":"

                      Then you can start it using this:<\/p>\n

                      text-client/build/bin/linux/releaseExecutable/text-client.kexe --lib-path=array/standard-lib\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1719247469981,"event_id":"$QAKbp8Bj5BIaQa38cXrX0_Y4TgebWeSeIq7UfYPkX0I","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"When using the native Linux version, all you need to do is to make sure that you use `--lib-path` to point to the correct location of the standard library.","msgtype":"m.text","formatted_body":"When using the native Linux version, all you need to do is to make sure that you use --lib-path<\/code> to point to the correct location of the standard library."}}
                      {"origin_server_ts":1719247481045,"event_id":"$6QAV7ENooxFoaiTaNC450cCzkJ3nXdN6VWYv5wERAck","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Then you can add any flags you want after.,","msgtype":"m.text"}}
                      {"origin_server_ts":1719247482370,"event_id":"$E90KWTBx3B0rp51oqyu3nrqT1yWDD7FKU4WiFru8W60","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"Then you can add any flags you want after.","msgtype":"m.text"},"m.relates_to":{"event_id":"$6QAV7ENooxFoaiTaNC450cCzkJ3nXdN6VWYv5wERAck","rel_type":"m.replace"},"m.mentions":{},"body":" * Then you can add any flags you want after.","msgtype":"m.text"}}
                      {"origin_server_ts":1719247581692,"event_id":"$YQFxV6Zdk1GOOyW1YTajnXBq1URNgnDI1N6L13gGwo8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Another alternative:\n```\n./gradlew client-java:distZip \n```\nThat builds a zip distribution that you can unpack wherever you want. Inside it is a bin directory with a script you can use.","msgtype":"m.text","formatted_body":"

                      Another alternative:<\/p>\n

                      ./gradlew client-java:distZip \n<\/code><\/pre>\n

                      That builds a zip distribution that you can unpack wherever you want. Inside it is a bin directory with a script you can use.<\/p>\n"}} {"origin_server_ts":1719247640636,"event_id":"$yw2T5s8WovPUpIZFQQeR0WJWxbnApMhgz-_rlqWxTWg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"This generated zip is exactly the same as the one that can be downloaded from the website.","msgtype":"m.text"}} {"origin_server_ts":1719247656250,"event_id":"$qjOMWgrEdixHcHyqH5mrHpswcagQvNKV2H5CwdbgL-o","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$YQFxV6Zdk1GOOyW1YTajnXBq1URNgnDI1N6L13gGwo8","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1719247657149,"event_id":"$g-9sKShsTMHTxVMAMZezO77X9WvalaEisxMfxYA1D5c","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"(the one that is called \"text based client\")","msgtype":"m.text"}} {"origin_server_ts":1719247734388,"event_id":"$Fag-ijS_ag0o2t3mnzl4c1ZR99RBGs3fEROZ5UHfKMM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"hmm I tried with text-client.kexe -n -l mytest.kap but it does not produce any output","msgtype":"m.text"}} {"origin_server_ts":1719247734670,"event_id":"$HEi2IPJHCoGzF4Jbnah_HSowkb15ykhQ29ItO1v_FD8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The benefit of using the native client, is that it has an input method (it uses ` by default as a prefix) which makes it very usable as an interactive tool. The Java-based text client does not have an input method.","msgtype":"m.text"}} {"origin_server_ts":1719247745874,"event_id":"$MJNhNA9c9T3ojMMk_GGxN4-OROJbSx1MOhTb5EczvKQ","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"gonna try with that zip ","msgtype":"m.text"}} {"origin_server_ts":1719247755264,"event_id":"$h7YcOwm-8x2wX9gQUqtklQCUOaAQV-XmcNHYNIHjEdA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$Fag-ijS_ag0o2t3mnzl4c1ZR99RBGs3fEROZ5UHfKMM"}},"m.mentions":{"user_ids":["@sienet_ja_lsd:matrix.org"]},"format":"org.matrix.custom.html","body":"> <@sienet_ja_lsd:matrix.org> hmm I tried with text-client.kexe -n -l mytest.kap but it does not produce any output\n\nDid you print anything?","msgtype":"m.text","formatted_body":"

                      In reply to<\/a> @sienet_ja_lsd:matrix.org<\/a>
                      hmm I tried with text-client.kexe -n -l mytest.kap but it does not produce any output<\/blockquote><\/mx-reply>Did you print anything?"}} {"origin_server_ts":1719247784521,"event_id":"$U476QgHvKFnKwvXu4hvA1yiDT8OVBBWjAY_pWrrIqfQ","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I tried with a script that fetches the http headers and prints them, it works with gui","msgtype":"m.text"}} {"origin_server_ts":1719247788766,"event_id":"$v3hTv5EdUUr0zcggfOJ3lHUywl4oyjDHwYKq49Jb-wc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Just evaluating a file doesn't show anything unless you explicitly call `io:println`.","msgtype":"m.text","formatted_body":"Just evaluating a file doesn't show anything unless you explicitly call io:println<\/code>."}} {"origin_server_ts":1719247794953,"event_id":"$G3N1xn35-oHUy1xtdQUp1bcEC0QqEtcDHmQJM2oClD0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"oh ok","msgtype":"m.text"}} {"origin_server_ts":1719247809572,"event_id":"$SVLXfbsk_hjEsfEjizD5k8blZlE_JY-KH39AA_RtFrk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"The gui displays the result, which `--eval` doesn't do.","msgtype":"m.text","formatted_body":"The gui displays the result, which --eval<\/code> doesn't do."}} {"origin_server_ts":1719247856414,"event_id":"$UejffFu7KozOEgRaEC-iICej9Q8b7Z5ji1VSAl3sm3o","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"The idea behind that is that you might not want to output anything from a script, so it doesn't do that.","msgtype":"m.text"}} {"origin_server_ts":1719247872174,"event_id":"$z1KAbstOzHWkLsj5vXDHZ2q15m6-JY2pbFmzV09BUU8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yay I got some output :D ","msgtype":"m.text"}} {"origin_server_ts":1719247878890,"event_id":"$ZRVSYbR4g6DIkPHRUYKEvjK5f8ORRbCjQgnyuY9kJQU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"thanks","msgtype":"m.text"}} {"origin_server_ts":1719247878330,"event_id":"$UchGj7yfOUEamMxBhdOh7yZbCKx13adMtn5vmGF-nzQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Nice","msgtype":"m.text"}} {"origin_server_ts":1719247937595,"event_id":"$pJXAtpAoTKMW7wLdnBLiNho7CigIjrqemXUfMYfXmiY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Note that it uses the compressed format (i.e. only prints content \"raw\"). If you want to print using the actual renderer used by the repl, you chave to call the formatter explicitly, so you'd do something like `io:print o3:format 1 2 3`.","msgtype":"m.text","formatted_body":"Note that it uses the compressed format (i.e. only prints content \"raw\"). If you want to print using the actual renderer used by the repl, you chave to call the formatter explicitly, so you'd do something like io:print o3:format 1 2 3<\/code>."}} {"origin_server_ts":1719247962125,"event_id":"$b-957zdXxwz8dgdCdm5qSp3MMSpWQc5mSj3s-7howJI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"`o3:format` is the function called by the repl to format any object using box drawing symbols.","msgtype":"m.text","formatted_body":"o3:format<\/code> is the function called by the repl to format any object using box drawing symbols."}} {"origin_server_ts":1719248007497,"event_id":"$DTlPggIex9yPd0PpchaHwuN-bTUmRMfBvt77old1nlo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$pJXAtpAoTKMW7wLdnBLiNho7CigIjrqemXUfMYfXmiY","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1719248011389,"event_id":"$DvfEx4ieFcTHDLC-Nqy6nXVT0eXR3j9tSrVrUg49jE4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"good to know","msgtype":"m.text"}} {"origin_server_ts":1719248021991,"event_id":"$cI8npuejd85E7IpPKcM3wkBqXtoofXi8zEOQjXSQlFo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Here's the code for that function: https://codeberg.org/loke/array/src/branch/master/array/standard-lib/output3.kap#L287","msgtype":"m.text"}} {"origin_server_ts":1719248029982,"event_id":"$zFHmUU0mno3FlF7-sjn6gkYkTSO8c3raS-xH-Gnicbc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$cI8npuejd85E7IpPKcM3wkBqXtoofXi8zEOQjXSQlFo","rel_type":"m.annotation","key":"🙏"}}} {"origin_server_ts":1719402128387,"event_id":"$UK13OSKaJDv4bTyETR26VHIeCUzaFQTTiA-L3kmxEQo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"There is one place in Kap where lazy evaluation comes and bites you in the butt and causes some performance issues. If you have a lazily evaluated array which transforms the dimensions by changing the size along a specific dimension (or which completely removes or adds a dimension).","msgtype":"m.text"}} {"origin_server_ts":1719402330520,"event_id":"$ExeCFjp6FSqiJAsI2SZd9QolTCCCPX2jMgG7rFHWz-8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"In these cases, every cell lookup passes through a routine that uses a division and a mod to split the higher and lower dimensions, and then another div and a mod to extract the position along a given axis.","msgtype":"m.text"}} {"origin_server_ts":1719402342054,"event_id":"$YCjaXwP8vv0pQkkxnUWMa6nZ2xBm5WOHS0LcRGokto8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Here's the code to do this:","msgtype":"m.text"}} {"origin_server_ts":1719402358568,"event_id":"$AdByRvDPOcXZD3EzAth_I5gCtYojBAnt15leJpa186E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"```\n val f = highValFactor\n val m = multiplierAxis\n val highVal = p / f\n val lowVal = p % m\n val axisCoord = (p % f) / m\n return fn(highVal, lowVal, axisCoord)\n```","msgtype":"m.text","formatted_body":"
                              val f = highValFactor\n        val m = multiplierAxis\n        val highVal = p / f\n        val lowVal = p % m\n        val axisCoord = (p % f) / m\n        return fn(highVal, lowVal, axisCoord)\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1719402398506,"event_id":"$C69jlD8yixyi1TaN4Uqu5zQuJ9KhFLHWVvu1sHkbONQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Can anyone see some way to rewrite this such that I can avoid one or more of the divisions and mods?","msgtype":"m.text"}}
                      {"origin_server_ts":1719402789126,"event_id":"$eGN930uUuY-vrcAzsb-V39ny9YVncvCEU9bk61xyGsU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"do the libdivide thing of precomputing the reciprocal-ish of the divisor when creating the array :)","msgtype":"m.text","formatted_body":"do the libdivide thing of precomputing the reciprocal-ish of the divisor when creating the array :)"}}
                      {"origin_server_ts":1719402838375,"event_id":"$SHMqYgFuNpCgzBX5Rm-_i0eb5ENjXEbBztRp6YgmkrE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"do the libdivide thing of precomputing the reciprocal-ish of the future-divisors when creating the array :)","msgtype":"m.text","formatted_body":"do the libdivide thing of precomputing the reciprocal-ish of the future-divisors when creating the array :)"},"m.relates_to":{"event_id":"$eGN930uUuY-vrcAzsb-V39ny9YVncvCEU9bk61xyGsU","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* do the libdivide thing of precomputing the reciprocal-ish of the future-divisors when creating the array :)","msgtype":"m.text","formatted_body":"* do the libdivide thing of precomputing the reciprocal-ish of the future-divisors when creating the array :)"}}
                      {"origin_server_ts":1719404261397,"event_id":"$-Q-27dq4dwpdLjk8Dq3H2R9loZZ415eKBJthhyGuwL8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, I'm afraid you have to be a bit more specific. I'm not following.","msgtype":"m.text"}}
                      {"origin_server_ts":1719404266172,"event_id":"$xVv1toBe60YiPN2kgU5vtSuee3KfYLUJx0AWrM-QFfs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Sorry about that.","msgtype":"m.text"}}
                      {"origin_server_ts":1719404372937,"event_id":"$2VDQuOPm3KhxCiuaM-lpHoOHCc876bs-grK2PElilS4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[libdivide](https://libdivide.com/); general idea being that, instead of a bunch of `a/b`, you do `inv=1/b` and then do `a*b`. Complicated part is doing that correctly in integers","msgtype":"m.text","formatted_body":"libdivide<\/a>; general idea being that, instead of a bunch of a/b<\/code>, you do inv=1/b<\/code> and then do a*b<\/code>. Complicated part is doing that correctly in integers"}}
                      {"origin_server_ts":1719404392352,"event_id":"$2yhBeEUk7ylcRA3e-RyFw96tlSjKL07B7If73WGLuDw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"[libdivide](https://libdivide.com/); general idea being that, instead of a bunch of `a/b`, you do `inv=1/b` and then do a bunch of `a*b`. Complicated part is doing that correctly in integers","msgtype":"m.text","formatted_body":"libdivide<\/a>; general idea being that, instead of a bunch of a/b<\/code>, you do inv=1/b<\/code> and then do a bunch of a*b<\/code>. Complicated part is doing that correctly in integers"},"m.relates_to":{"event_id":"$2VDQuOPm3KhxCiuaM-lpHoOHCc876bs-grK2PElilS4","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* [libdivide](https://libdivide.com/); general idea being that, instead of a bunch of `a/b`, you do `inv=1/b` and then do a bunch of `a*b`. Complicated part is doing that correctly in integers","msgtype":"m.text","formatted_body":"* libdivide<\/a>; general idea being that, instead of a bunch of a/b<\/code>, you do inv=1/b<\/code> and then do a bunch of a*b<\/code>. Complicated part is doing that correctly in integers"}}
                      {"origin_server_ts":1719404759007,"event_id":"$xj3z2YuwuDtpQgJtakcbp6c0RtxW4K1UTdU6KyfclOM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"[libdivide](https://libdivide.com/); general idea being that, instead of a bunch of `a/b`, you do `inv=1/b` and then do a bunch of `a*inv`. Complicated part is doing that correctly in integers","msgtype":"m.text","formatted_body":"libdivide<\/a>; general idea being that, instead of a bunch of a/b<\/code>, you do inv=1/b<\/code> and then do a bunch of a*inv<\/code>. Complicated part is doing that correctly in integers"},"m.relates_to":{"event_id":"$2VDQuOPm3KhxCiuaM-lpHoOHCc876bs-grK2PElilS4","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* [libdivide](https://libdivide.com/); general idea being that, instead of a bunch of `a/b`, you do `inv=1/b` and then do a bunch of `a*inv`. Complicated part is doing that correctly in integers","msgtype":"m.text","formatted_body":"* libdivide<\/a>; general idea being that, instead of a bunch of a/b<\/code>, you do inv=1/b<\/code> and then do a bunch of a*inv<\/code>. Complicated part is doing that correctly in integers"}}
                      {"origin_server_ts":1719405610175,"event_id":"$rg9YtqcbnbKNP37L-ZeryHGBk_eA9-geX-TX1bsb40Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Does x86 have a way to compute div snd mod at the time?","msgtype":"m.text"}}
                      {"origin_server_ts":1719405658301,"event_id":"$aiOKELMNAG-Jg4ay7lSzMZb2B_w8A2Okj9ZBt0B3Evk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"there's one instruction for both and it does both","msgtype":"m.text","formatted_body":"there's one instruction for both and it does both"}}
                      {"origin_server_ts":1719405701672,"event_id":"$NY0A6DSw9ROkFidAFhv7azxcY5_xgXfknGixKlnWUKA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(but going from div to mod is just a multiplication and some adds anyway)","msgtype":"m.text","formatted_body":"(but going from div to mod is just a multiplication and some adds anyway)"}}
                      {"origin_server_ts":1719405709809,"event_id":"$zkxDNLQ0EPgLIfZNthRump_3a9mdHR4uBGfiuor1fik","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"there's one instruction for both and it always does both","msgtype":"m.text","formatted_body":"there's one instruction for both and it always does both"},"m.relates_to":{"event_id":"$aiOKELMNAG-Jg4ay7lSzMZb2B_w8A2Okj9ZBt0B3Evk","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* there's one instruction for both and it always does both","msgtype":"m.text","formatted_body":"* there's one instruction for both and it always does both"}}
                      {"origin_server_ts":1719405866880,"event_id":"$9wqsVi7T3XrtHM3HG1zUEJYDjlyZ95oYUMLqjPcAYT0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So in the native implementation I could optimise this using assembly I guess","msgtype":"m.text"}}
                      {"origin_server_ts":1719405882338,"event_id":"$2PWl1lLISNBZmJ59mJ9vKp8IZYi6wsV1ELnMQ1iQN-Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"But for the jvm, I'm not sure what to do.","msgtype":"m.text"}}
                      {"origin_server_ts":1719405943502,"event_id":"$LCPQHh0xcC_bgF23WSMen5mvBM-dYga1dOKq_vA8j-8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"iirc java 8 could merge the two, but at some point it stopped being able to (testing dzaima/BQNs IntArr `÷` which calculates the mod to know when to convert to float); that was some years ago though","msgtype":"m.text","formatted_body":"iirc java 8 could merge the two, but at some point it stopped being able to (testing dzaima/BQNs IntArr ÷<\/code> which calculates the mod to know when to convert to float); that was some years ago though"}}
                      {"origin_server_ts":1719405998134,"event_id":"$jMtS-mUf18tZWNyVkVg8QycNAGrDX2zRgOW56PB21CQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I presume it would do that in case the code follows some specific pattern?","msgtype":"m.text"}}
                      {"origin_server_ts":1719406035263,"event_id":"$tuaiOtBCrK_mUB9yXtwntDCJEYDVGvujmmI2CKX962I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"well I'd assume any `a/b` followed by `a%b` in the same basic block should trivially optimize for anything that tries at all","msgtype":"m.text","formatted_body":"well I'd assume any a/b<\/code> followed by a%b<\/code> in the same basic block should trivially optimize for anything that tries at all"}}
                      {"origin_server_ts":1719406047940,"event_id":"$Il7kVVBtQbyWfYCJK1kF1Fa-Ve8Xe0X1gW6cs7X8g4I","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"well I'd assume any `a/b` followed by `a%b` in the same basic block without mutation of the argument variables between should trivially optimize for anything that tries at all","msgtype":"m.text","formatted_body":"well I'd assume any a/b<\/code> followed by a%b<\/code> in the same basic block without mutation of the argument variables between should trivially optimize for anything that tries at all"},"m.relates_to":{"event_id":"$tuaiOtBCrK_mUB9yXtwntDCJEYDVGvujmmI2CKX962I","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* well I'd assume any `a/b` followed by `a%b` in the same basic block without mutation of the argument variables between should trivially optimize for anything that tries at all","msgtype":"m.text","formatted_body":"* well I'd assume any a/b<\/code> followed by a%b<\/code> in the same basic block without mutation of the argument variables between should trivially optimize for anything that tries at all"}}
                      {"origin_server_ts":1719406054992,"event_id":"$9_DTS1qI1A8o8I12d57FWVNelhsWGrf2RFmi_KhJGG0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"well I'd assume/hope any `a/b` followed by `a%b` in the same basic block without mutation of the argument variables between should trivially optimize for anything that tries at all","msgtype":"m.text","formatted_body":"well I'd assume/hope any a/b<\/code> followed by a%b<\/code> in the same basic block without mutation of the argument variables between should trivially optimize for anything that tries at all"},"m.relates_to":{"event_id":"$tuaiOtBCrK_mUB9yXtwntDCJEYDVGvujmmI2CKX962I","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* well I'd assume/hope any `a/b` followed by `a%b` in the same basic block without mutation of the argument variables between should trivially optimize for anything that tries at all","msgtype":"m.text","formatted_body":"* well I'd assume/hope any a/b<\/code> followed by a%b<\/code> in the same basic block without mutation of the argument variables between should trivially optimize for anything that tries at all"}}
                      {"origin_server_ts":1719406468861,"event_id":"$2lwsi9gepYXQA1muPUTxWXzjB5hVNGJBY4kbF4XuXeM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"[openjdk 21 disassembly](https://matrix.org/_matrix/media/r0/download/matrix.org/cAmuBlUvFgScVyMKcgFcmKQW), looks like 2x unrolling, one `idiv` per iteration, so looks like it's okay?","msgtype":"m.text","formatted_body":"openjdk 21 disassembly<\/a>, looks like 2x unrolling, one idiv<\/code> per iteration, so looks like it's okay?"}}
                      {"origin_server_ts":1719407007341,"event_id":"$XL3_mDBofwJ4EfjD1j78QFPJ7HUCwVJ6aODMivf0Jc8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, that's good","msgtype":"m.text"}}
                      {"origin_server_ts":1719407019570,"event_id":"$wEy3wbS-oBQUtgQM4_cBmy6cjj9Ue6D54-agmXAcmGs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"(or maybe not, because I was hoping there was an opportunity to optimise).","msgtype":"m.text"}}
                      {"origin_server_ts":1719407076338,"event_id":"$c5RCO0ncNu0_HbHBCRiAUq9Jq16g8LA7cRupvT9zbzk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"My goal in terms or performance is to be comparable with Dyalog, maybe 1 or 2 times slower. Generally, this is true, and it's even faster for some (sometimes unexpected) cases.","msgtype":"m.text"}}
                      {"origin_server_ts":1719407091666,"event_id":"$u6FhS6AFRgBGa0_Z3VZWSN3mozQzfz8aqKL4qwlPPzE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"However, the test case that caused me to look at this is 15 times slower than Dyalog.","msgtype":"m.text"}}
                      {"origin_server_ts":1719407111855,"event_id":"$Hsbts-giAt5l5MvjzDc7XiAPSHq2uJOT9Y1yRCgdiNs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It was more than 20 times, but I fixed some low hanging fruit.","msgtype":"m.text"}}
                      {"origin_server_ts":1719407130248,"event_id":"$Fj0AGzRRWUh6xAAC9h4KX4i_-NM9YZjwPrhZQXob1Q0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"50% of the time is spent in this particular place.","msgtype":"m.text"}}
                      {"origin_server_ts":1719408531152,"event_id":"$9eU-0xJBZEotQ07rpv1NdJCYcwUgrzE-Dpx27wEAHbk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Wow. I rewrote it to this, and now the total runtime of my test case went down from 10.5 to 7.8 seconds:\n```\n        val f = highValFactor\n        val m = multiplierAxis\n        val lowVal = p % m\n        val highVal = p / f\n        val r = p % f\n        val axisCoord = r / m\n        return fn(highVal, lowVal, axisCoord)\n```","msgtype":"m.text","formatted_body":"

                      Wow. I rewrote it to this, and now the total runtime of my test case went down from 10.5 to 7.8 seconds:<\/p>\n

                              val f = highValFactor\n        val m = multiplierAxis\n        val lowVal = p % m\n        val highVal = p / f\n        val r = p % f\n        val axisCoord = r / m\n        return fn(highVal, lowVal, axisCoord)\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1719408593966,"event_id":"$VKVwR5gvinQ6rxzV5kWLZSfbzZoJZYwIHzhqASzLVfw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It's literally the same computation, just in different order. I guess the optimiser was able to merge the div and mod?","msgtype":"m.text"}}
                      {"origin_server_ts":1719408623325,"event_id":"$W6PjuPzvdvJAwMcHXBL6WtHlHwPvKMM0mzjbr0Ewfbs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"how about moving `axisCoord` up to beside `lowVal`?","msgtype":"m.text","formatted_body":"how about moving axisCoord<\/code> up to beside lowVal<\/code>?"}}
                      {"origin_server_ts":1719408640058,"event_id":"$6Dm2j-LOxBCzw10iCb6UE8MDLA9XHnchKpaVMJu1Yew","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"how about moving `lowVal` down to beside `axisCoord`?","msgtype":"m.text","formatted_body":"how about moving lowVal<\/code> down to beside axisCoord<\/code>?"},"m.relates_to":{"event_id":"$W6PjuPzvdvJAwMcHXBL6WtHlHwPvKMM0mzjbr0Ewfbs","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* how about moving `lowVal` down to beside `axisCoord`?","msgtype":"m.text","formatted_body":"* how about moving lowVal<\/code> down to beside axisCoord<\/code>?"}}
                      {"origin_server_ts":1719409021543,"event_id":"$WL55XEXTuJaHHmLrWl8xbSzFYuEBLQPf2eijnufu5i0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"That made it slower. I think `lowVal` and `highVal` has to be computed next to eachother for them to be merged into one instruction.","msgtype":"m.text","formatted_body":"That made it slower. I think lowVal<\/code> and highVal<\/code> has to be computed next to eachother for them to be merged into one instruction."}}
                      {"origin_server_ts":1719409035040,"event_id":"$VGWp9A-xUrhjJgzfqtnNSSRXEJLdqzaxotOFcDkAJSk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Can you do the disassembly again for this version?","msgtype":"m.text"}}
                      {"origin_server_ts":1719409064228,"event_id":"$etBGqUoKwcdUQsvHqjAYocInIWyP571imRE7X3yc9ng","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"When I saw slow, I mean 8.5 seconds. So still faster than the original, but not as good as the one quoted above.","msgtype":"m.text"}}
                      {"origin_server_ts":1719409114711,"event_id":"$CVlnSi4p0alSvLz9dXfG-sM7N7Cz5MRfcyRjcyqVF5w","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"When I say slow, I mean 8.5 seconds. So still faster than the original, but not as good as the one quoted above.","msgtype":"m.text"},"m.relates_to":{"event_id":"$etBGqUoKwcdUQsvHqjAYocInIWyP571imRE7X3yc9ng","rel_type":"m.replace"},"m.mentions":{},"body":" * When I say slow, I mean 8.5 seconds. So still faster than the original, but not as good as the one quoted above.","msgtype":"m.text"}}
                      {"origin_server_ts":1719409120742,"event_id":"$b_H20Y92Vu-gpasjMPrBgICfDv7nhh_aZGczviqyBNw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I don't have a \"this version\" or your previous version, the disassembly was of dzaima/BQN","msgtype":"m.text","formatted_body":"I don't have a \"this version\" or your previous version, the disassembly was of dzaima/BQN"}}
                      {"origin_server_ts":1719409127067,"event_id":"$tvZgCdlAYfDR6Ry3IQ5UjmJp1DAj1C_vCt7ba_IKNeQ","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Ooh","msgtype":"m.text"}}
                      {"origin_server_ts":1719409133879,"event_id":"$wSu87R7kxRUZ5XQz3o8jXvHDKDraya-FoLFRVHKdQoc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, so how do I do it? :-)","msgtype":"m.text"}}
                      {"origin_server_ts":1719409228210,"event_id":"$OdAh6w5MsT57-JU4dm6i6yWywA1ok5V2GjugZjUYV1M","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"define [this](https://dzaima.github.io/paste/#0yyooSk3WTczJUdDQ5KrmUgCCgtSiNAWgaH5RikJWYlmigm5EhJV2aF5OfnK2S2Ziel5@cUlmcpivf0FJZn5eMUTaJTWpNN0vPy84MS21ID8zrwQqHlAEZDsWF6fmJuVUQpWW5hYEAO3wTSxwLHGtyCxRUFJxUFKwU9DLAlnNVQsA) in the shell, run your project with `jprec-all` in place of `java`, making sure your project print anything to stdout;","msgtype":"m.text","formatted_body":"define this<\/a> in the shell, run your project with jprec-all<\/code> in place of java<\/code>, making sure your project print anything to stdout;"}}
                      {"origin_server_ts":1719409269010,"event_id":"$d0zQvlNJxQQpL-Qp35GPFYviI2pEbwVCOfPdm7PvYTU","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"then get and `./build.py` [grr](https://github.com/dzaima/grr) and run `path/to/grr/run --perf . --jvm-out .jperf`","msgtype":"m.text","formatted_body":"then get and ./build.py<\/code> grr<\/a> and run path/to/grr/run --perf . --jvm-out .jperf<\/code>"}}
                      {"origin_server_ts":1719409279442,"event_id":"$V1YW6oTu2tS7igpnJwLK_TZlQ4VLISMg3cSQjRJlZzI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Thanks. I'll do that when I'm off this horrendous Windows machine.","msgtype":"m.text"}}
                      {"origin_server_ts":1719409365949,"event_id":"$Q2QmgW6l7JD_3XuSv6PuXzyu6lmhlJKgDcG4esfkbuE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(and for source mapping there's `--move /java-src/some/java/package:location/on/disk/of/that/package`)","msgtype":"m.text","formatted_body":"(and for source mapping there's --move /java-src/some/java/package:location/on/disk/of/that/package<\/code>)"}}
                      {"origin_server_ts":1719409371889,"event_id":"$IapdIGhqs08b9eMYaei-yTxx_eCC-hpTfyncT0PnPJk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(and for source mapping if desired there's `--move /java-src/some/java/package:location/on/disk/of/that/package`)","msgtype":"m.text","formatted_body":"(and for source mapping if desired there's --move /java-src/some/java/package:location/on/disk/of/that/package<\/code>)"},"m.relates_to":{"event_id":"$Q2QmgW6l7JD_3XuSv6PuXzyu6lmhlJKgDcG4esfkbuE","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (and for source mapping if desired there's `--move /java-src/some/java/package:location/on/disk/of/that/package`)","msgtype":"m.text","formatted_body":"* (and for source mapping if desired there's --move /java-src/some/java/package:location/on/disk/of/that/package<\/code>)"}}
                      {"origin_server_ts":1719409390311,"event_id":"$cWAA6nqTycB-Whdf6qUEIv-nKc9_-Xp0O3nrt9A4gw8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(and for source displaying if desired there's `--move /java-src/some/java/package:location/on/disk/of/that/package`)","msgtype":"m.text","formatted_body":"(and for source displaying if desired there's --move /java-src/some/java/package:location/on/disk/of/that/package<\/code>)"},"m.relates_to":{"event_id":"$Q2QmgW6l7JD_3XuSv6PuXzyu6lmhlJKgDcG4esfkbuE","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (and for source displaying if desired there's `--move /java-src/some/java/package:location/on/disk/of/that/package`)","msgtype":"m.text","formatted_body":"* (and for source displaying if desired there's --move /java-src/some/java/package:location/on/disk/of/that/package<\/code>)"}}
                      {"origin_server_ts":1719409393289,"event_id":"$nDFvcE9O6iUV8pbj-eMCKgYyauK5rj_omQncANq2D10","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Nice, I'll try it.","msgtype":"m.text"}}
                      {"origin_server_ts":1719409454569,"event_id":"$BB1xv-r_wQ68jTQDptPBAglD3MaX65yfvd-p-QVkfl4","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"define [this](https://dzaima.github.io/paste/#0yyooSk3WTczJUdDQ5KrmUgCCgtSiNAWgaH5RikJWYlmigm5EhJV2aF5OfnK2S2Ziel5@cUlmcpivf0FJZn5eMUTaJTWpNN0vPy84MS21ID8zrwQqHlAEZDsWF6fmJuVUQpWW5hYEAO3wTSxwLHGtyCxRUFJxUFKwU9DLAlnNVQsA) in the shell, run your project with `jprec-all` in place of `java`, making sure your project doesn't print anything to stdout;","msgtype":"m.text","formatted_body":"define this<\/a> in the shell, run your project with jprec-all<\/code> in place of java<\/code>, making sure your project doesn't print anything to stdout;"},"m.relates_to":{"event_id":"$OdAh6w5MsT57-JU4dm6i6yWywA1ok5V2GjugZjUYV1M","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* define [this](https://dzaima.github.io/paste/#0yyooSk3WTczJUdDQ5KrmUgCCgtSiNAWgaH5RikJWYlmigm5EhJV2aF5OfnK2S2Ziel5@cUlmcpivf0FJZn5eMUTaJTWpNN0vPy84MS21ID8zrwQqHlAEZDsWF6fmJuVUQpWW5hYEAO3wTSxwLHGtyCxRUFJxUFKwU9DLAlnNVQsA) in the shell, run your project with `jprec-all` in place of `java`, making sure your project doesn't print anything to stdout;","msgtype":"m.text","formatted_body":"* define this<\/a> in the shell, run your project with jprec-all<\/code> in place of java<\/code>, making sure your project doesn't print anything to stdout;"}}
                      {"origin_server_ts":1719409683870,"event_id":"$mszOn6XLE8ojnXKV4KlIlheifvgt4vJ7dhFj8jPJPKY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"maybe I could make a thing that temporarily puts a wrapped `java` in `PATH`, but there's unfortunately no getting around the requirement of no custom output to stdout, as openjdk hard-codes the disassembly info to stdout, unsynchronized with the java stdout","msgtype":"m.text","formatted_body":"maybe I could make a thing that temporarily puts a wrapped java<\/code> in PATH<\/code>, but there's unfortunately no getting around the requirement of no custom output to stdout, as openjdk hard-codes the disassembly info to stdout, unsynchronized with the java stdout"}}
                      {"origin_server_ts":1719417492525,"event_id":"$9riCzuEOiSkzx0nh2t0dnLua9OYGi-XK_Hooez4cjq0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"I am a litte surprised that `if (p < s) p else p % s` is faster than just `p % s`","msgtype":"m.text","formatted_body":"I am a litte surprised that if (p < s) p else p % s<\/code> is faster than just p % s<\/code>"}}
                      {"state_key":"@subsetpark:matrix.org","origin_server_ts":1720304566239,"event_id":"$QN_zrP8ZC90okGUqWkoSiUiKfZTqhHZC05TWbG5Lan0","sender":"@subsetpark:matrix.org","user_id":"@subsetpark:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/aoNwZrSfsJKygErwjsKElqtI","displayname":"Zach Smith (subsetpark)","membership":"join"}}
                      {"state_key":"@rampoina:matrix.org","origin_server_ts":1720659736606,"event_id":"$jKJjuLI9iiqLyWOs8bww6DwrY-wyP2I5DuA5XxomefQ","sender":"@rampoina:matrix.org","user_id":"@rampoina:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/fvYahbQdHjGpAfcqTPIBVken","displayname":"Rampoina","membership":"join"}}
                      {"origin_server_ts":1720669867342,"event_id":"$ivK0_sprJXRVefKpoigfqbLEy_Fr-ejEccbRmQSEthc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Conor has asked me to join his podcast youtube show tomorrow.","msgtype":"m.text"}}
                      {"origin_server_ts":1720669898421,"event_id":"$I05kUNCHd7QxAr_CAGjjMwJQkL8TtFc8UM9xII-nagY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"https://www.youtube.com/watch?v=pZayMxPNVD8","msgtype":"m.text"}}
                      {"origin_server_ts":1720700525817,"event_id":"$5nJA7DornJAxPOMPj19kaeHzTQqhj3c7zw2TKssIuVM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$ivK0_sprJXRVefKpoigfqbLEy_Fr-ejEccbRmQSEthc","rel_type":"m.annotation","key":"😎"}}}
                      {"origin_server_ts":1720700528693,"event_id":"$NGkBbzrj4naovPEPmTwhadr4YnydURDD3OVKsbO4g4Q","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$I05kUNCHd7QxAr_CAGjjMwJQkL8TtFc8UM9xII-nagY","rel_type":"m.annotation","key":"😎"}}}
                      {"origin_server_ts":1720804001170,"event_id":"$yuLTZkqciS3KxWYMURsYEyS1iAu9qi7vg3L9KsuJeFc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$I05kUNCHd7QxAr_CAGjjMwJQkL8TtFc8UM9xII-nagY"}},"m.mentions":{"user_ids":["@loke:dhsdevelopments.com"]},"format":"org.matrix.custom.html","body":"> <@loke:dhsdevelopments.com> https://www.youtube.com/watch?v=pZayMxPNVD8\n\nenjoying this, all kinds of features shown here (text mode client on terminal etc)","msgtype":"m.text","formatted_body":"
                      In reply to<\/a> @loke:dhsdevelopments.com<\/a>
                      https://www.youtube.com/watch?v=pZayMxPNVD8<\/blockquote><\/mx-reply>enjoying this, all kinds of features shown here (text mode client on terminal etc)"}} {"origin_server_ts":1721021887197,"event_id":"$gRS4bxxQjF5GnlZW8gLrddIhZHG0dARpGKm_3JAsI0A","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: My current implementation of exponentiation takes a shortcut for integers and always performs the operation using bigint, and then reduces to a machine integer if the result fits in 64 bits.","msgtype":"m.text","formatted_body":"
                      Marshall<\/a>: My current implementation of exponentiation takes a shortcut for integers and always performs the operation using bigint, and then reduces to a machine integer if the result fits in 64 bits."}} {"origin_server_ts":1721021969618,"event_id":"$dDlgwnnrBQGoRGctbfzIXOESnheKv5oQ1vAykI4m7-E","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"This is of course excessively slow. Is there nice way perform integer exponentiation with overflow check to speed up the common case of the result actually fitting in 64 bits?","msgtype":"m.text"}} {"origin_server_ts":1721040462746,"event_id":"$PL7PfCSrvU5OoRJwm_yN7_f8bSfPnhndYhtX2FM8JoE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"Or dzaima ?","msgtype":"m.text","formatted_body":"Or dzaima<\/a> ?"}} {"origin_server_ts":1721040505181,"event_id":"$g18s8PYo7k8FcV5jtcOHLkLrAoIuapi1UoZYOYM-xpY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"just overflow-check each separate operation in question","msgtype":"m.text","formatted_body":"just overflow-check each separate operation in question"}} {"origin_server_ts":1721040533975,"event_id":"$M52Cmtz_5WUY6JxgfhDmH1ctOJDIuLjjKPIlfJz4P3Y","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"How do I implement an overflow-checked integer exponentiation?","msgtype":"m.text"}} {"origin_server_ts":1721040557178,"event_id":"$nN6UXEWPgLVneIClqwhc-FBvF-LITLZ7Ypuk9hqZlPk","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"1) find out how to implement integer exponentiation","msgtype":"m.text","formatted_body":"1) find out how to implement integer exponentiation"}} {"origin_server_ts":1721040588452,"event_id":"$Q8qdIKP-HnoxEI9rJ07GNTkuRIz3IecajJp0ujPd3ZA","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"2) notice that it's done via multiplication and addition","msgtype":"m.text","formatted_body":"2) notice that it's done via multiplication and addition"}} {"origin_server_ts":1721040622455,"event_id":"$qS_niCURApQfz-ix_vNJKmfHsDI0hn-6k1VXnn0HgyI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"2) notice that it (exponentiation by squaring) is done via multiplication and addition","msgtype":"m.text","formatted_body":"2) notice that it (exponentiation by squaring) is done via multiplication and addition"},"m.relates_to":{"event_id":"$Q8qdIKP-HnoxEI9rJ07GNTkuRIz3IecajJp0ujPd3ZA","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* 2) notice that it (exponentiation by squaring) is done via multiplication and addition","msgtype":"m.text","formatted_body":"* 2) notice that it (exponentiation by squaring) is done via multiplication and addition"}} {"origin_server_ts":1721040631999,"event_id":"$0ItsQOMD_h1JSwmLEvwPFZAG_NXNw5SlcqL00VGb8tw","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"2) notice that it (exponentiation by squaring) is done via multiplication","msgtype":"m.text","formatted_body":"2) notice that it (exponentiation by squaring) is done via multiplication"},"m.relates_to":{"event_id":"$Q8qdIKP-HnoxEI9rJ07GNTkuRIz3IecajJp0ujPd3ZA","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* 2) notice that it (exponentiation by squaring) is done via multiplication","msgtype":"m.text","formatted_body":"* 2) notice that it (exponentiation by squaring) is done via multiplication"}} {"origin_server_ts":1721040844927,"event_id":"$YBx-SQAZptTlnEecwlrjDh7Hd5gomTKByEeSbEZuti0","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"overflow-checking `x*x` is trivial - just test if `abs(x) >= sqrt(typeOfX.MAX_VALUE)` or so; arbitrary multiplication is less trivial - `Math.multiplyExact` exists, but throws an error on overflow instead of a sanely-usable conditional value","msgtype":"m.text","formatted_body":"overflow-checking x*x<\/code> is trivial - just test if abs(x) >= sqrt(typeOfX.MAX_VALUE)<\/code> or so; arbitrary multiplication is less trivial - Math.multiplyExact<\/code> exists, but throws an error on overflow instead of a sanely-usable conditional value"}} {"origin_server_ts":1721041296023,"event_id":"$sC-5iOolfl5a5hZ4GtG0gufmUqbV6Oxnd7JW5SEl0CI","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"```\n a←1e4\u203f1e4\n 100000\u2022Time \"a×a\"\n\"198ns\"\n 10000000\u2022Time \"a×a\"\n\"25.3ns\"\n a←1e5\u203f1e5\n 100000\u2022Time \"a×a\"\n\"0.0119ms\"\n```\nwow, hadn't realized that the `Math.multiplyExact` error penalty was _that_ large","msgtype":"m.text","formatted_body":"
                         a←1e4\u203f1e4\n   100000\u2022Time "a×a"\n"198ns"\n   10000000\u2022Time "a×a"\n"25.3ns"\n   a←1e5\u203f1e5\n   100000\u2022Time "a×a"\n"0.0119ms"<\/code><\/pre>wow, hadn't realized that the Math.multiplyExact<\/code> error penalty was that<\/i> large"}}
                      {"origin_server_ts":1721044150491,"event_id":"$tvtJGr3RKNJql7QQYG5DFb7VO7R6kKd2FJI5NTY2Rqk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I never measured it. Kap uses the exact functions for add/sub/mul operations.","msgtype":"m.text"}}
                      {"origin_server_ts":1721044239630,"event_id":"$0NccBPrMCszf0o9No5Gt7RB12tznimculPD4Ja1qTlM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@dzaima:matrix.org"]},"format":"org.matrix.custom.html","body":"dzaima: what are we looking at here though? Is this the penalty when an overflow happens? What is the impact of * vs. mulExact?","msgtype":"m.text","formatted_body":"dzaima<\/a>: what are we looking at here though? Is this the penalty when an overflow happens? What is the impact of * vs. mulExact?"}}
                      {"origin_server_ts":1721044271728,"event_id":"$4wvBJsDXgxBGQpwDOlrvXzpBZia7VuzkAw0wwayKnlQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"`1e4×1e4` doesn't overflow `int`, whereas `1e5×1e5` does","msgtype":"m.text","formatted_body":"1e4×1e4<\/code> doesn't overflow int<\/code>, whereas 1e5×1e5<\/code> does"}}
                      {"origin_server_ts":1721044593735,"event_id":"$ZR0y6rCctW-fojIbyPAe6E_NFg8HBMXhp0ioFFRjElk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"So BQN uses mulExact behind the scenes? It's slower because it throws an exception. ","msgtype":"m.text"}}
                      {"origin_server_ts":1721044619911,"event_id":"$TpdpzjcH7TdijlxRJCdgnqsTiRykkWatD3VLOn8gIgg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"dzaima/BQN does, yeah; I very much know that it throws an exception, I had to write the catch :)","msgtype":"m.text","formatted_body":"dzaima/BQN does, yeah; I very much know that it throws an exception, I had to write the catch :)"}}
                      {"origin_server_ts":1721044629245,"event_id":"$bBYZIKtFwGWoP-ttktcHOFHHGNebRnQrj5eFT3S0g7s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Sadly there is no API that avoids the exception. ","msgtype":"m.text"}}
                      {"origin_server_ts":1721044663035,"event_id":"$Xvnsa8hoEj5p4jjcEsJKZaE5t_tr1sgDiJ9ltm_NVIM","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I had assumed that java providing this as the only option meant that they, like, bothered to make it not horrifically horribly brokenly unusable, but I guess not","msgtype":"m.text","formatted_body":"I had assumed that java providing this as the only option meant that they, like, bothered to make it not horrifically horribly brokenly unusable, but I guess not"}}
                      {"origin_server_ts":1721044672576,"event_id":"$VtUjTY7dQCn43iqLozc7w8WDjfzljMxJ4iVVXcuHjSc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Kap uses 64-bit for this stuff so overflow is quite rare.","msgtype":"m.text"}}
                      {"origin_server_ts":1721044674731,"event_id":"$Kmcq4velgZtRgdMt9QAfAfj4esEEIlWDqDqkKFjAHdE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"or maybe it's that I do the catch outside of a loop","msgtype":"m.text","formatted_body":"or maybe it's that I do the catch outside of a loop"}}
                      {"origin_server_ts":1721044711830,"event_id":"$3igeHxengwKXTbjBst_32ixIYOKm0fhOYXTt-oUq2Mk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Perhaps there is some optimisation if the catch is done around the call?","msgtype":"m.text"}}
                      {"origin_server_ts":1721044749133,"event_id":"$RCpYiJD1g5Be0z__rL6o9McbFUIyh6dA-UMR5HkUy3c","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.relates_to":{"m.in_reply_to":{"event_id":"$VtUjTY7dQCn43iqLozc7w8WDjfzljMxJ4iVVXcuHjSc"}},"format":"org.matrix.custom.html","body":"but for exponentiation here you'd have one overflow for each exponentiation that doesn't fit in int64","msgtype":"m.text","formatted_body":" ↰ <\/a> loke<\/a> <\/mx-reply>but for exponentiation here you'd have one overflow for each exponentiation that doesn't fit in int64"}}
                      {"origin_server_ts":1721044767060,"event_id":"$AfsRwOv9SO3REtBsWa2o2WrbF5HiTdBwPsqGba8xD00","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"but for exponentiation here you'd have one overflow for each exponentiation that doesn't fit in int64, which is rather simple to have","msgtype":"m.text","formatted_body":"but for exponentiation here you'd have one overflow for each exponentiation that doesn't fit in int64, which is rather simple to have"},"m.relates_to":{"event_id":"$RCpYiJD1g5Be0z__rL6o9McbFUIyh6dA-UMR5HkUy3c","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* but for exponentiation here you'd have one overflow for each exponentiation that doesn't fit in int64, which is rather simple to have","msgtype":"m.text","formatted_body":"* but for exponentiation here you'd have one overflow for each exponentiation that doesn't fit in int64, which is rather simple to have"}}
                      {"origin_server_ts":1721044939216,"event_id":"$OO6MCX-9K1xNHdcvshmEUShZRMXCWFK-qpss3IOo9zE","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"nope, `try{ r = Math.multiplyExact(cw,cx); } catch(ArithmeticException e){ return null; }` is still slow","msgtype":"m.text","formatted_body":"nope, try{ r = Math.multiplyExact(cw,cx); } catch(ArithmeticException e){ return null; }<\/code> is still slow"}}
                      {"origin_server_ts":1721044949141,"event_id":"$UcafcAXUJ67XVEExybjvMAVCJI5aCTX8jTWVrObOLYY","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"nope, `try { r = Math.multiplyExact(cw,cx); } catch (ArithmeticException e) { return null; }` is still slow","msgtype":"m.text","formatted_body":"nope, try { r = Math.multiplyExact(cw,cx); } catch (ArithmeticException e) { return null; }<\/code> is still slow"},"m.relates_to":{"event_id":"$OO6MCX-9K1xNHdcvshmEUShZRMXCWFK-qpss3IOo9zE","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* nope, `try { r = Math.multiplyExact(cw,cx); } catch (ArithmeticException e) { return null; }` is still slow","msgtype":"m.text","formatted_body":"* nope, try { r = Math.multiplyExact(cw,cx); } catch (ArithmeticException e) { return null; }<\/code> is still slow"}}
                      {"origin_server_ts":1721045238614,"event_id":"$B0AxLj9MEZhbQ0KmL92xv-GqQS3m48pxNKyBjEw883k","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"for multiplication, an option that's significantly slower in the non-overflowing case, but doesn't have the exception penalty, could be something like summing `64-Long.numberOfLeadingZeros(x)` to get approximate log2, sum those, and compare with 64 (give or take negative inputs, and the precise constants in question)","msgtype":"m.text","formatted_body":"for multiplication, an option that's significantly slower in the non-overflowing case, but doesn't have the exception penalty, could be something like summing 64-Long.numberOfLeadingZeros(x)<\/code> to get approximate log2, sum those, and compare with 64 (give or take negative inputs, and the precise constants in question)"}}
                      {"origin_server_ts":1721045370388,"event_id":"$iAwF6g4w5jHYze1cTjfHapF1insDhsFf2JC-rHcGx1g","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"which also leads to the note that, given this integer-log2, you can overflow-check the entire exponentiation via just `(64-Long.numberOfLeadingZeros(base)) * exp >= 64` (again, give or take negative `base`, and that `64` might have to be `63` or something; or the `>=` could be `>`, I have not checked)","msgtype":"m.text","formatted_body":"which also leads to the note that, given this integer-log2, you can overflow-check the entire exponentiation via just (64-Long.numberOfLeadingZeros(base)) * exp >= 64<\/code> (again, give or take negative base<\/code>, and that 64<\/code> might have to be 63<\/code> or something; or the >=<\/code> could be ><\/code>, I have not checked)"}}
                      {"origin_server_ts":1721046106458,"event_id":"$k05e_mIkzepG29NLHrLNGbQQIqvHMo01q4DUEFImPAs","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"(that is of course extremely approximate, given that the leading-zero-log is gonna be off by up to 2x, and thta multiplies by the exponent, and is an exponent by itself, leading to like `3^32` being considered as overflowing (as `4^32` is) even though it's just ~`2^51`)","msgtype":"m.text","formatted_body":"(that is of course extremely approximate, given that the leading-zero-log is gonna be off by up to 2x, and thta multiplies by the exponent, and is an exponent by itself, leading to like 3^32<\/code> being considered as overflowing (as 4^32<\/code> is) even though it's just ~2^51<\/code>)"}}
                      {"origin_server_ts":1721046367650,"event_id":"$1LmKEh4eedaVU2lRFtwvVFWvFXUIXH_bSuPFejqnc60","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I mean, that's perfectly fine.","msgtype":"m.text"}}
                      {"origin_server_ts":1721046405535,"event_id":"$_dsxPUFQZGcux41tdZi5-5VGXFg5MstAVs9vwEn58gA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I think the vast majority of non-overflowing integer exponentiations in actual code are powers of 2.","msgtype":"m.text"}}
                      {"origin_server_ts":1721046432757,"event_id":"$cMidVYxEVHgSDkZaTQg4_8CMBiLmROAlR35-rq3rcas","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"Things like 2*n","msgtype":"m.text"}}
                      {"origin_server_ts":1721046573519,"event_id":"$JDBqlojyjMJBFesvYK1bnIsaEKZQXOWrMzsxCgON054","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"(that is of course extremely approximate, given that the leading-zero-log is gonna be off by up to 2x, and that multiplies by the exponent, and is an exponent by itself, leading to like `3^32` being considered as overflowing (as `4^32` is) even though it's just ~`2^51`)","msgtype":"m.text","formatted_body":"(that is of course extremely approximate, given that the leading-zero-log is gonna be off by up to 2x, and that multiplies by the exponent, and is an exponent by itself, leading to like 3^32<\/code> being considered as overflowing (as 4^32<\/code> is) even though it's just ~2^51<\/code>)"},"m.relates_to":{"event_id":"$k05e_mIkzepG29NLHrLNGbQQIqvHMo01q4DUEFImPAs","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* (that is of course extremely approximate, given that the leading-zero-log is gonna be off by up to 2x, and that multiplies by the exponent, and is an exponent by itself, leading to like `3^32` being considered as overflowing (as `4^32` is) even though it's just ~`2^51`)","msgtype":"m.text","formatted_body":"* (that is of course extremely approximate, given that the leading-zero-log is gonna be off by up to 2x, and that multiplies by the exponent, and is an exponent by itself, leading to like 3^32<\/code> being considered as overflowing (as 4^32<\/code> is) even though it's just ~2^51<\/code>)"}}
                      {"origin_server_ts":1721316739260,"event_id":"$1znTEC2lyoXgp0pHWhvFjOWN3EpttKSD4bbyBNI3IUY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Some small news: First and foremost, the gui-based distribution has been reduced in size from about 150 MB to 62 MB. Secondly, the gui version can also run the text-based interface using the `--tty` flag. This is particularly useful when using the new Emacs mode, since it requires the text mode to be available.","msgtype":"m.text","formatted_body":"Some small news: First and foremost, the gui-based distribution has been reduced in size from about 150 MB to 62 MB. Secondly, the gui version can also run the text-based interface using the --tty<\/code> flag. This is particularly useful when using the new Emacs mode, since it requires the text mode to be available."}}
                      {"state_key":"@meccine:matrix.org","origin_server_ts":1721318649676,"event_id":"$igg1OiWUzLIxSwbQ35eX41IC6V1bZes-t1MyPsCvylw","sender":"@meccine:matrix.org","user_id":"@meccine:matrix.org","type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/QHDRIpNAmKkJiLjBtkFnrhBj","displayname":"meccine","membership":"join"}}
                      {"origin_server_ts":1721323159585,"event_id":"$FFB961IXSRK16hU-ChGPWTc2rRrCuXI4VmgG0CXa4p8","sender":"@semperos:matrix.fedibird.com","user_id":"@semperos:matrix.fedibird.com","type":"m.reaction","content":{"m.relates_to":{"event_id":"$1znTEC2lyoXgp0pHWhvFjOWN3EpttKSD4bbyBNI3IUY","rel_type":"m.annotation","key":"🎉"}}}
                      {"origin_server_ts":1721330771062,"event_id":"$RxMCRiZ9xXD_xyT7W7m9hX9EYEj5MNUQz0VZM2smF10","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$1znTEC2lyoXgp0pHWhvFjOWN3EpttKSD4bbyBNI3IUY","rel_type":"m.annotation","key":"🥰"}}}
                      {"origin_server_ts":1721567954066,"event_id":"$3fZ8EyO_hHTG7D7vM4OB5qVC33Bn9FE1wYFw9E6XXcg","sender":"@meccine:matrix.org","user_id":"@meccine:matrix.org","type":"m.reaction","content":{"m.relates_to":{"event_id":"$1znTEC2lyoXgp0pHWhvFjOWN3EpttKSD4bbyBNI3IUY","rel_type":"m.annotation","key":"🎉"}}}
                      {"origin_server_ts":1721638081744,"event_id":"$Cr0CRzxLdXtL0KwZxpWywsgCM_ufV23xmGJT4DTe1M4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"do I have to clone the whole thing again? or how do I start GUI? it's giving me an error","msgtype":"m.text"}}
                      {"origin_server_ts":1721638278977,"event_id":"$bpu5WLLFUEjkXhhpAbcM0-2DUm9B1EzaM3x2Y_uDuc4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"What error are you getting?","msgtype":"m.text"}}
                      {"origin_server_ts":1721640312787,"event_id":"$EvKmpZXQQsLWupy5drM6ekpaxEdGw58av4gX_1rLJPk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"java.lang.NoClassDefFoundError: javaslang/collection/HashMap","msgtype":"m.text"}}
                      {"origin_server_ts":1721640413194,"event_id":"$nxIvGwz4rw-hZ63GNC-TiJM-Zh0cZR3F7ywVkad6tfE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"https://dpaste.org/Q3E0W","msgtype":"m.text"}}
                      {"origin_server_ts":1721640430363,"event_id":"$zTRyMkOWMicq5C3RUXsbcdR89FpgV03jJsPZgxvVI9k","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"sry about ansi","msgtype":"m.text"}}
                      {"origin_server_ts":1721640491770,"event_id":"$U4VxZ3g14fZYSlWPr3DFhpKg5hvjFEk9iKV3tqbGZ4k","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"i first git pulled the changes since the distribution size had been reduced","msgtype":"m.text"}}
                      {"origin_server_ts":1721641034651,"event_id":"$rX3Fi_nL10Inu9vgOHJDQ3sYsz3fNwovTN9pFSL-pMc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"That's very odd.","msgtype":"m.text"}}
                      {"origin_server_ts":1721641082152,"event_id":"$Hl8PU3Ew-ozzXdMj3vcL_YRpIYOi5be_Ns2tDG6FiHs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It should be java/lang/...","msgtype":"m.text"}}
                      {"origin_server_ts":1721641104099,"event_id":"$v2vcIHV5IbV_RJgf7fDqX1pdPM_gsjm8CSu6b7j6agE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Did you accidentally change any files? What does `git status` tell you?","msgtype":"m.text","formatted_body":"Did you accidentally change any files? What does git status<\/code> tell you?"}}
                      {"origin_server_ts":1721641118962,"event_id":"$GB2Fha0ahe6u2Rfb5vT7EipzMveP5Wv2-g04kewjpdo","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"no, nothing other than git pull","msgtype":"m.text"}}
                      {"origin_server_ts":1721641139321,"event_id":"$5mmi7ZhL3r9yw2dubY1jUbMLqAcPaZzuTF_UzrFL470","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"You're on Linux right?","msgtype":"m.text"}}
                      {"origin_server_ts":1721641140380,"event_id":"$rwZ4-e1DSzexSO3Ba-P7z4Yp6wKQBbZrThieL_FSHTE","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"On branch master\nYour branch is up to date with 'origin/master'.\n\nChanges not staged for commit:\n  (use \"git add ...\" to update what will be committed)\n  (use \"git restore ...\" to discard changes in working directory)\n\tmodified:   array/src/nativeInterop/cinterop/libcurl.def\n\nUntracked files:\n  (use \"git add ...\" to include in what will be committed)\n\t1\n\tcurl-src/\n\tcurl/\n\tdemo/KAP-by-example.kap\n\tdemo/complex-numbers.kap\n\tdemo/fetch-online-demo.kap\n\tdemo/goto-syntax.kap\n\tdemo/java-interop-demo.kap\n\tdemo/sql-demo.kap\n\terrorlog.txt\n\ttypescript\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\n","msgtype":"m.text"}}
                      {"origin_server_ts":1721641173261,"event_id":"$o5cstxotToZlE6_O0zfD_DDitIfwEXV3eWHfxj7N6jQ","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"uuntracked files aren't part of the distribution","msgtype":"m.text"}}
                      {"origin_server_ts":1721641182280,"event_id":"$0BeY7P_CKfIGxdxpGAjy3j-XxjFX_QEzFTg5GD47gAg","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yeah linux","msgtype":"m.text"}}
                      {"origin_server_ts":1721641197730,"event_id":"$XNMQWYGVpHl2EuDM1iLId75YLXwqGYagY4UBpI15-8s","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Does this give you any output? `find . -type f -exec grep javaslang {} +`","msgtype":"m.text","formatted_body":"Does this give you any output? find . -type f -exec grep javaslang {} +<\/code>"}}
                      {"origin_server_ts":1721641220818,"event_id":"$Am9PDBXzVghG5_uwAII2kB_j39tQZ4Pfalo0fQLIjys","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"find . -type f -exec grep javaslang {} +\n./.gradle/kotlin/errors/errors-1721638040388.log:error message: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./.gradle/kotlin/errors/errors-1721640260783.log:error message: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./.gradle/kotlin/errors/errors-1721640260771.log:error message: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./.gradle/kotlin/errors/errors-1721638040400.log:error message: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./.gradle/kotlin/errors/errors-1721637978249.log:error message: java.lang.NoClassDefFoundError: javaslang.λ\n./.gradle/kotlin/errors/errors-1721637978249.log:Caused by: java.lang.ClassNotFoundException: javaslang.λ\n./.gradle/kotlin/errors/errors-1721637978242.log:error message: java.lang.NoClassDefFoundError: javaslang.λ\n./.gradle/kotlin/errors/errors-1721637978242.log:Caused by: java.lang.ClassNotFoundException: javaslang.λ\n./typescript:e: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./typescript:e: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./.kotlin/errors/errors-1721638040388.log:error message: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./.kotlin/errors/errors-1721640260783.log:error message: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./.kotlin/errors/errors-1721640260771.log:error message: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./.kotlin/errors/errors-1721638040400.log:error message: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./.kotlin/errors/errors-1721637978249.log:error message: java.lang.NoClassDefFoundError: javaslang.λ\n./.kotlin/errors/errors-1721637978249.log:Caused by: java.lang.ClassNotFoundException: javaslang.λ\n./.kotlin/errors/errors-1721637978242.log:error message: java.lang.NoClassDefFoundError: javaslang.λ\n./.kotlin/errors/errors-1721637978242.log:Caused by: java.lang.ClassNotFoundException: javaslang.λ\n","msgtype":"m.text"}}
                      {"origin_server_ts":1721641255831,"event_id":"$5zzM1zQAEAMM_-lq5N9FX8o38QoxIP7TaJK_5lvNmLY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"What on earth...","msgtype":"m.text"}}
                      {"origin_server_ts":1721641264497,"event_id":"$Zqnynf1NR-_B6J3xcaN1Zlz7WxVXCAirVQVKELdB-SU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, let's get back to a clean slate:","msgtype":"m.text"}}
                      {"origin_server_ts":1721641297422,"event_id":"$ueQucjlmE8eNS0lhuDVhbfqJSR6V8DT6sM-tyS6zsFI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Do this: `./gradlew --stop","msgtype":"m.text"}}
                      {"origin_server_ts":1721641298660,"event_id":"$62SrUBtWYushI_AJWotemQeHpo_WOnPbFzJd27RVmis","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Do this: \\`./gradlew --stop`","msgtype":"m.text","formatted_body":"Do this: `./gradlew --stop`"},"m.relates_to":{"event_id":"$ueQucjlmE8eNS0lhuDVhbfqJSR6V8DT6sM-tyS6zsFI","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Do this: \\`./gradlew --stop`","msgtype":"m.text","formatted_body":" * Do this: `./gradlew --stop`"}}
                      {"origin_server_ts":1721641304067,"event_id":"$AcGJckuSodJTgtcNqN_4HGT15wifjEzqzx8L6BBiG9Q","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Do this: `./gradlew --stop`","msgtype":"m.text","formatted_body":"Do this: ./gradlew --stop<\/code>"},"m.relates_to":{"event_id":"$ueQucjlmE8eNS0lhuDVhbfqJSR6V8DT6sM-tyS6zsFI","rel_type":"m.replace"},"m.mentions":{},"format":"org.matrix.custom.html","body":" * Do this: `./gradlew --stop`","msgtype":"m.text","formatted_body":" * Do this: ./gradlew --stop<\/code>"}}
                      {"origin_server_ts":1721641313298,"event_id":"$Y_ZZVDvjAdJUxB8ylCa-ZTEWmgtUUKoi8NdOFvX9J2g","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye ok","msgtype":"m.text"}}
                      {"origin_server_ts":1721641314833,"event_id":"$LuNTRItn_Bf0_NmDtfXJe_d7-ksa0-PI74fB19L7dE8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Then `rm -fr .kotlin .gradle`","msgtype":"m.text","formatted_body":"Then rm -fr .kotlin .gradle<\/code>"}}
                      {"origin_server_ts":1721641325102,"event_id":"$MjeCI3ahxHqMYBSTtW-QDqexlmI7bJ0HrT90O9cjmLU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye ok","msgtype":"m.text"}}
                      {"origin_server_ts":1721641347699,"event_id":"$_3z2QzVWmcK8c1NYeuVAplvgJJu1uEhAhbj1-7kXOVc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Then do `./gradlew clean`","msgtype":"m.text","formatted_body":"Then do ./gradlew clean<\/code>"}}
                      {"origin_server_ts":1721641370708,"event_id":"$gkrK5a9wLmR68u544hRdYuV8wVlzBX18IqV13eFD6h0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"And finally `./gradlew gui:run`.","msgtype":"m.text","formatted_body":"And finally ./gradlew gui:run<\/code>."}}
                      {"origin_server_ts":1721641398789,"event_id":"$v2LpHLZUSMoxud7Q7bSq0o7lvuH9PFwynznyIIB1Dac","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"nope, still error","msgtype":"m.text"}}
                      {"origin_server_ts":1721641432426,"event_id":"$bthrl2igr1MB9xC86ZxqtA1XjnXHSECln9H3f8n6c1s","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"find . -type f -exec grep javaslang {} +\n./.gradle/kotlin/errors/errors-1721641387078.log:error message: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./.gradle/kotlin/errors/errors-1721641387066.log:error message: java.lang.NoClassDefFoundError: javaslang.λ\n./.gradle/kotlin/errors/errors-1721641387066.log:Caused by: java.lang.ClassNotFoundException: javaslang.λ\n./typescript:e: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./typescript:e: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./.kotlin/errors/errors-1721641387078.log:error message: java.lang.NoClassDefFoundError: javaslang/collection/HashMap\n./.kotlin/errors/errors-1721641387066.log:error message: java.lang.NoClassDefFoundError: javaslang.λ\n./.kotlin/errors/errors-1721641387066.log:Caused by: java.lang.ClassNotFoundException: javaslang.λ\n","msgtype":"m.text"}}
                      {"origin_server_ts":1721641454142,"event_id":"$1p4b4968eenLxgXFM_sbfeTkqgznRAbzZUx4fwK27hc","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"What does `java --version` tell you?","msgtype":"m.text","formatted_body":"What does java --version<\/code> tell you?"}}
                      {"origin_server_ts":1721641475876,"event_id":"$MtjSJaX7Gw-S5z2_HWn2-XLIWL9QYA5gUZg072Y36P8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Also, did you get the error when doing `clean`?","msgtype":"m.text","formatted_body":"Also, did you get the error when doing clean<\/code>?"}}
                      {"origin_server_ts":1721641478377,"event_id":"$mlxAwOZU7LLbtoBVdkVs_O1ainXXocOvta-TlSGDy54","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"java 21.0.2 2024-01-16 LTS\nIBM Semeru Runtime Certified Edition 21.0.2.0 (build 21.0.2+13-LTS)\nEclipse OpenJ9 VM 21.0.2.0 (build openj9-0.43.0, JRE 21 Linux amd64-64-Bit Compressed References 20240116_97 (JIT enabled, AOT enabled)\nOpenJ9   - 2c3d78b48\nOMR      - ea8124dbc\nJCL      - 9ac3d866bce based on jdk-21.0.2+13)\n\n","msgtype":"m.text"}}
                      {"origin_server_ts":1721641501195,"event_id":"$bg6qf2dLZIv5_oUNcQHP8TH9p96Ddp6im1tRCf53Ixk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yeah I did clean and got that error","msgtype":"m.text"}}
                      {"origin_server_ts":1721641507390,"event_id":"$cqGjCK9bG-dbbKBeguXlgSoKszIJNQsgq3z89-x8TYU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"um clean","msgtype":"m.text"}}
                      {"origin_server_ts":1721641515960,"event_id":"$oHF__jqxbjFIlXn7s4JmTEJSC2YJ8tffpxmYinjGypw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Ah, so it's not the fault of kap. `clean` doesn't compile any of the kap code.","msgtype":"m.text","formatted_body":"Ah, so it's not the fault of kap. clean<\/code> doesn't compile any of the kap code."}}
                      {"origin_server_ts":1721641518897,"event_id":"$DkNaQ94fJKKioQZsxGmuzfgaWHp2cnftLMLrYdMGhPM","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"clean does not give error, but gui:run that is","msgtype":"m.text"}}
                      {"origin_server_ts":1721641520584,"event_id":"$aED5t-dqHYav0HTO3NsMWUIO5Hdm0SqL1v_Sosl1b8k","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, do this:","msgtype":"m.text"}}
                      {"origin_server_ts":1721641525716,"event_id":"$Dnv03TGAuMBNGnpdj_Es075wnTBbZEB2MKZxQkek0CE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"`./gradlew --stop`","msgtype":"m.text","formatted_body":"./gradlew --stop<\/code>"}}
                      {"origin_server_ts":1721641545145,"event_id":"$uZ5BVWpCPMDeY-0uid3sXik9qQEXw4gCZ6yxpDcbnQo","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"Then `rm -fr ~/.gradle` (note, this is the gradle cache in your home directory)","msgtype":"m.text","formatted_body":"Then rm -fr ~/.gradle<\/code> (note, this is the gradle cache in your home directory)"}}
                      {"origin_server_ts":1721641560162,"event_id":"$55L-AxgKIPp_pxSikBowZ43tW6NRXf0HiQMlvfgleXY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye ok","msgtype":"m.text"}}
                      {"origin_server_ts":1721641574939,"event_id":"$CGkk_5IJTuGOMpGZRP2PpCyTf8pWkYqBgzOyMkN3By4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, try again now","msgtype":"m.text"}}
                      {"origin_server_ts":1721641633313,"event_id":"$lZUQh6NPtBqqCslU4fJLnVX3-Woo-UUpiWez4FtLHv4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye it's doing something...","msgtype":"m.text"}}
                      {"origin_server_ts":1721641664100,"event_id":"$69N0F47P6m5fgYBNRxE2XQAJX_7Etsn9TrAHKUO67W4","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"hmm nope","msgtype":"m.text"}}
                      {"origin_server_ts":1721641666627,"event_id":"$Ia0XvOXuPCBJNIjjvTxQ_ZBiZbBXneWGvCMgJl3MbZk","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"still error","msgtype":"m.text"}}
                      {"origin_server_ts":1721641674886,"event_id":"$YZIj8CPX7HbQDYJzlrs-xJURL2PktjXIF1Ek9kEdvVA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Ah, it's because of your Java","msgtype":"m.text"}}
                      {"origin_server_ts":1721641683538,"event_id":"$juqHSlr7hJYRXH9b-nlyfwKVFUyXC9aI74WRMYbj9k8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"You're usiong IBM Java, and there is an incompatibility there: https://github.com/gradle/gradle/issues/26224","msgtype":"m.text"}}
                      {"origin_server_ts":1721641687961,"event_id":"$OD1-78CyVGI0oRhXCg-oF7bL_5N8Is0uy-Fu9MEH0Rw","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"You're using IBM Java, and there is an incompatibility there: https://github.com/gradle/gradle/issues/26224","msgtype":"m.text"},"m.relates_to":{"event_id":"$juqHSlr7hJYRXH9b-nlyfwKVFUyXC9aI74WRMYbj9k8","rel_type":"m.replace"},"m.mentions":{},"body":" * You're using IBM Java, and there is an incompatibility there: https://github.com/gradle/gradle/issues/26224","msgtype":"m.text"}}
                      {"origin_server_ts":1721641696147,"event_id":"$JxaA07syWmIOhTd6tEX3ay9y3plM8oopp620Zlj11ZY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"hmm ok, good to know","msgtype":"m.text"}}
                      {"origin_server_ts":1721641718504,"event_id":"$ZiUsdLLp7sJ0X5PDmMTh0F6n4JCx3KlD3VLmxJY8hyU","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"If you use openjdk it works.","msgtype":"m.text"}}
                      {"origin_server_ts":1721641735872,"event_id":"$cLq8r_mQo5oTvIS3MlppFmR0BGQ2PL7JJ_1N350Z1Vs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"How come you're using IBM Java? Is it the default in some Linux distribution?","msgtype":"m.text"}}
                      {"origin_server_ts":1721641753488,"event_id":"$PEDHYQu6MawOKb7TmB1c60kwjneqaxfETSaXoIRhuT0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"needing it for vscode mainframe extension","msgtype":"m.text"}}
                      {"origin_server_ts":1721641770320,"event_id":"$uJ4UpZyXyg50fFRnMA6NNJTIT-gl4XNQ6htmN8T-ehI","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"If you just want to run it, you don't have to compile it. You should be able to run the distribution fine using IBM Java, this is an issue with gradle","msgtype":"m.text"}}
                      {"origin_server_ts":1721641776932,"event_id":"$HLS-PhySRfQZHIvdloO8yBD_WU9_FCnPLYVz0puYCKA","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"You can download this one: https://kapdemo.dhsdevelopments.com/kap-jvm-build-linux.zip","msgtype":"m.text"}}
                      {"origin_server_ts":1721641827270,"event_id":"$I67Zl8GBOGxyA1Z8uAEyPMOJzOLmkCHtCA60a7NLXTA","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"I think I will, they're not gonna fix that in a while","msgtype":"m.text"}}
                      {"origin_server_ts":1721641842811,"event_id":"$zihw7Agj4GA4AxFz_5Xm2h_LGMEwFxUuCYTdsKgsmq4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I'll see if I can install the IBM Java and see if I can find a workaround.","msgtype":"m.text"}}
                      {"origin_server_ts":1721641877583,"event_id":"$f6_4zk6EDtQfO35pfl26GsF8uQAd0STBh654XY_769Y","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"they had this link, it was some kotlin-on-IBM-java issue https://youtrack.jetbrains.com/issue/KT-61836 ","msgtype":"m.text"}}
                      {"origin_server_ts":1721641891665,"event_id":"$W8l5EclNXU4crjvx8AHXWm6K82QPmiSxMNVoKWsWnI0","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"devs there were using Macs","msgtype":"m.text"}}
                      {"origin_server_ts":1721641896925,"event_id":"$w2nGKUhv8rwcfHlNeVNZZJubb1ggMW30eRq2raKK-MY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"so could not reproduce","msgtype":"m.text"}}
                      {"origin_server_ts":1721642062953,"event_id":"$nQVTWDM6TusGuIibfC7U8uE6iGDzIot3fQjA-XYgkr8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"And the gradle developers are not willing to look into the IBM Java issue either","msgtype":"m.text"}}
                      {"origin_server_ts":1721642077394,"event_id":"$Ge--hxHwGxlFIbVaTDAQ511BWUaEnM8gQnJfA9p_q1Q","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":":D ","msgtype":"m.text"}}
                      {"origin_server_ts":1721642078260,"event_id":"$mB69Jz1iP9grJ3q69L65sd8qNQm6u3ghBrNROvmcJkE","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"It sure looks like an IBM problem.","msgtype":"m.text"}}
                      {"origin_server_ts":1721642090907,"event_id":"$rWbqZZprJpNTeUzxanzDmbXeiTaUGJ8zoiRV0dvABaQ","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"might be yeah","msgtype":"m.text"}}
                      {"origin_server_ts":1721642123733,"event_id":"$FFQGIQZvmND6GQmyv-LSXr6jjwyvfAIHTlO8wsszAWk","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Annoying, because everybody wastes time looking for bugs, like we just did.","msgtype":"m.text"}}
                      {"origin_server_ts":1721642149203,"event_id":"$_l-UYqbG3Ur1pcVvvcn7KonQRyLYRfEKdYkMXTcwyUU","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"aye well I have the compiled binaries now","msgtype":"m.text"}}
                      {"origin_server_ts":1721642195505,"event_id":"$jDN29snShHRhRk76W3SMIyn_ytt4XsWTYeAY87A_Kxg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"I'm assuming they run fine?","msgtype":"m.text"}}
                      {"origin_server_ts":1721643569709,"event_id":"$icUYc1r2pfENe2UfH9_YLo9BMRS4AG19-FlFFMbrMgY","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"yes, yes","msgtype":"m.text"}}
                      {"origin_server_ts":1721797239353,"event_id":"$Cd4V1jtgireFUGPITeOxeN5vzjLRGsAQKax7jetUb10","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: I need your maths skills. :-) I want to include a lazy permutations function, which means that I need an efficient way to compute the N'th permutation. I'm thinking about an approach that results in at least one division and one mod operation per value (which means N^2 div and mod operations in total). Is there a more efficient way to do this?","msgtype":"m.text","formatted_body":"Marshall<\/a>: I need your maths skills. :-) I want to include a lazy permutations function, which means that I need an efficient way to compute the N'th permutation. I'm thinking about an approach that results in at least one division and one mod operation per value (which means N^2 div and mod operations in total). Is there a more efficient way to do this?"}}
                      {"origin_server_ts":1721821238793,"event_id":"$GhGa5f-lZEhOZHolcGq1T1pxNUyz2f9fGhivV96A31I","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"J implements this as `A.` ([docs](https://code.jsoftware.com/wiki/Vocabulary/acapdot#dyadic)). It's `pfi` [here](https://www.jsoftware.com/papers/50/50_21.htm), but the `dfr` step looks really slow, need to check how J does it I guess.","msgtype":"m.text","formatted_body":"J implements this as A.<\/code> (docs<\/a>). It's pfi<\/code> here<\/a>, but the dfr<\/code> step looks really slow, need to check how J does it I guess."}}
                      {"origin_server_ts":1721821744293,"event_id":"$h3XHPJyCX7bsoi_yh4muhKF-X0b3HQzlQmtFCk0JkIE","sender":"@mlochbaum:matrix.org","user_id":"@mlochbaum:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"It's pretty similar; [this is dfr](https://github.com/jsoftware/jsource/blob/master/jsrc/vp.c#L143) and it's still O(n^2) per permutation.","msgtype":"m.text","formatted_body":"It's pretty similar; this is dfr<\/a> and it's still O(n^2) per permutation."}}
                      {"origin_server_ts":1721917539853,"event_id":"$EK0JR3MXBOQpB4uNDakvro-kHzrsVJescKfGmmxmIFg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{"user_ids":["@mlochbaum:matrix.org"]},"format":"org.matrix.custom.html","body":"Marshall: I'm trying to understand this code, I cannot understand what `v[j]` does. Isn't `v` the values of the input arguments, so `v[j]` is the j'th element of v?","msgtype":"m.text","formatted_body":"Marshall<\/a>: I'm trying to understand this code, I cannot understand what v[j]<\/code> does. Isn't v<\/code> the values of the input arguments, so v[j]<\/code> is the j'th element of v?"}}
                      {"origin_server_ts":1721917546392,"event_id":"$RL0qk04QopqKx1tFfi1sDLDJnWomcjCL3LWDVQ8Wd4g","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"```\nDO(n-1, j=i; c=x[j+v[j]]; DO(1+v[j], d=x[j+i]; x[j+i]=c; c=d;););\n```","msgtype":"m.text","formatted_body":"
                      DO(n-1, j=i; c=x[j+v[j]]; DO(1+v[j], d=x[j+i]; x[j+i]=c; c=d;););\n<\/code><\/pre>\n"}}
                      {"origin_server_ts":1721919636897,"event_id":"$lbYVp-nR-_YIrtSJskYu1LDFwCkhzGYKeN39RnY8l2U","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"There is something really weird going on, in the inner `DO`, it loops `1+v[j]` times, buf `v[j]` is a value in the array to permute?","msgtype":"m.text","formatted_body":"There is something really weird going on, in the inner DO<\/code>, it loops 1+v[j]<\/code> times, buf v[j]<\/code> is a value in the array to permute?"}}
                      {"origin_server_ts":1721920360565,"event_id":"$pIltBPCUodWWKleTKrrU6LrQmFpH5CNFNa0xMQc2nXg","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I'd think `v` is the input, `x` is the output","msgtype":"m.text","formatted_body":"I'd think v<\/code> is the input, x<\/code> is the output"}}
                      {"origin_server_ts":1721920525525,"event_id":"$Nwu4RuSh2dPCu7IEilDWJhYhwb-0QTkUkd2n8FwvzZQ","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"and doing a loop over a value in the input doesn't seem unreasonable","msgtype":"m.text","formatted_body":"and doing a loop over a value in the input doesn't seem unreasonable"}}
                      {"origin_server_ts":1721920565650,"event_id":"$SrMvyM8aoCMu0Uug_KvXkXCQW_JMlJvz2Ssyzy0qtuY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"In this particular case the loop count should not be affected by the content, since it's a function that computes a certain permutation of the input.","msgtype":"m.text"}}
                      {"origin_server_ts":1721920627828,"event_id":"$9eYWfSjoyBqCbElZt9rsLx7hcBDKz1B7NcQs0nJrhBs","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"And the size of `x` is `j`, but the `c=x[j+v[j]]` would overflow `x` if `v[j]` is greater than the size of `x`.","msgtype":"m.text","formatted_body":"And the size of x<\/code> is j<\/code>, but the c=x[j+v[j]]<\/code> would overflow x<\/code> if v[j]<\/code> is greater than the size of x<\/code>."}}
                      {"origin_server_ts":1721920662644,"event_id":"$Qibphh66_Wq-4fOOzEt1oiF0gdva8vZSMw2eYoASm6g","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"I think this is just the helper `dfr` not the whole permutation computer","msgtype":"m.text","formatted_body":"I think this is just the helper dfr<\/code> not the whole permutation computer"}}
                      {"origin_server_ts":1721920691481,"event_id":"$d9Ij_MSg6t218tsJtk53-sY7ZdNGC_4gr9ZLbz8Ce_8","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"format":"org.matrix.custom.html","body":"i.e. ` pfi  ← {dfr(base⍳⍺)⊤⍵}` from https://www.jsoftware.com/papers/50/50_21.htm is needed on top","msgtype":"m.text","formatted_body":"i.e.  pfi  ← {dfr(base⍳⍺)⊤⍵}<\/code> from https://www.jsoftware.com/papers/50/50_21.htm is needed on top"}}
                      {"origin_server_ts":1721920884252,"event_id":"$drlJkki8E9ovr-69EUpMA6VwAte1sBoFDVod48YvvOc","sender":"@dzaima:matrix.org","user_id":"@dzaima:matrix.org","type":"m.room.message","content":{"m.new_content":{"format":"org.matrix.custom.html","body":"I believe this is just the helper `dfr` not the whole permutation computer","msgtype":"m.text","formatted_body":"I believe this is just the helper dfr<\/code> not the whole permutation computer"},"m.relates_to":{"event_id":"$Qibphh66_Wq-4fOOzEt1oiF0gdva8vZSMw2eYoASm6g","rel_type":"m.replace"},"format":"org.matrix.custom.html","body":"* I believe this is just the helper `dfr` not the whole permutation computer","msgtype":"m.text","formatted_body":"* I believe this is just the helper dfr<\/code> not the whole permutation computer"}}
                      {"origin_server_ts":1721924792742,"event_id":"$aTK7PIOZGNv6JAkVC9Hadbad4Fldt968X06-dA8DHco","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I see.","msgtype":"m.text"}}
                      {"origin_server_ts":1721924817822,"event_id":"$NPLK7CTbeUHddAq4qIPqHIGQmonNC0U49XjZl1140Og","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"body":"I feel this algorithm must be slower than the one I was thinking of.","msgtype":"m.text"}}
                      {"origin_server_ts":1722353192812,"event_id":"$Dhb3CeW2pFCLErpw8zeSuXvqt9GbTdTvJC5PjkFHJM8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, it's now possible to change font family and size in the configuration panel of the ui, thanks to this commit. It was a long time coming: https://codeberg.org/loke/array/commit/fd65d7834b91114b3b20386cc6fe941ba42f69ae","msgtype":"m.text"}}
                      {"origin_server_ts":1722521823334,"event_id":"$bMyWT1HAUJyiXb7pfrvDsm2f8FStBUWEjQv2YG2wZPg","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Implementation of both text and binary input and output streams: https://kapdemo.dhsdevelopments.com/reference.html#_experimental_new_io_functions","msgtype":"m.text"}}
                      {"state_key":"@sienet_ja_lsd:matrix.org","origin_server_ts":1722802169464,"event_id":"$BiaHjTijtCqZxDUbO7PjkvHoKJ5Y2Su9vUWgK6E_3EQ","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","prev_content":{"avatar_url":"mxc://matrix.org/zuexapBaptVcYOnwYDBzuWIR","displayname":"sienet_ja_LSD","membership":"join"},"type":"m.room.member","content":{"avatar_url":"mxc://matrix.org/zuexapBaptVcYOnwYDBzuWIR","displayname":"laulurastas","membership":"join"},"replaces_state":"$HeQl-H1en8RDn91qB89IZnHnRUrrCOPdpSUqjRSAtcE"}
                      {"origin_server_ts":1723087955648,"event_id":"$g2ozi8XUS7B_kouppEYKWGF1xC5AOrt4BlFByd-lHuE","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"loke   august 7th  git pull from codeberg resulted  in a broken kap :-(","msgtype":"m.text"}}
                      {"origin_server_ts":1723087992622,"event_id":"$wsDhFj8xIYK7yRBfoxtx52FSMwDtua55xcqtz_TKNT8","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"loke   august 7th  git pull from codeberg resulted  in a broken kap :-(  simple  iota 10 results in:","msgtype":"m.text"},"m.relates_to":{"event_id":"$g2ozi8XUS7B_kouppEYKWGF1xC5AOrt4BlFByd-lHuE","rel_type":"m.replace"},"m.mentions":{},"body":" * loke   august 7th  git pull from codeberg resulted  in a broken kap :-(  simple  iota 10 results in:","msgtype":"m.text"}}
                      {"origin_server_ts":1723088051698,"event_id":"$4GghFofE5J20TW7n67ptnHcZKkKqBw8Hw9ZklfBKXAQ","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.new_content":{"m.mentions":{},"body":"loke   august 7th  git pull from codeberg resulted  in a broken kap :-(  simple  iota 10 results in:> Task :gui:run\nWARNING: package com.sun.javafx.event.EventHandlerManager not in javafx.base\nWARNING: Unknown module: org.controlsfx.controls specified to --add-exports\nWARNING: Unknown module: org.controlsfx.controls specified to --add-exports\nWARNING: Unknown module: org.controlsfx.controls specified to --add-exports\nWARNING: Unknown module: org.controlsfx.controls specified to --add-exports\nWARNING: package com.sun.javafx.scene.control.behavior.TableViewBehavior not in javafx.controls\nWARNING: Unknown module: org.controlsfx.controls specified to --add-opens\nAug 07, 2024 11:18:37 PM org.jline.utils.Log logr\nWARNING: Unable to create a system terminal, creating a dumb terminal (enable debug logging for more information)\nException in thread \"JavaFX Application Thread\" java.lang.IllegalArgumentException: Failed requirement.\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.findInputStartEnd(ROStyledArea.kt:187)\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.withUpdateEnabled(ROStyledArea.kt:238)\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.removePrompt(ROStyledArea.kt:124)\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.updateInputEnabledState(ROStyledArea.kt:80)\n        at com.dhsdevelopments.kap.gui.ResultList3.disableInput(ResultList3.kt:241)\n        at com.dhsdevelopments.kap.gui.ResultList3$ResultListCommandListener.handle(ResultList3.kt:319)\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.sendCurrentContent(ROStyledArea.kt:213)\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.addInputMappings$lambda$3(ROStyledArea.kt:86)\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.addInputMappings$lambda$4(ROStyledArea.kt:86)\n        at org.fxmisc.wellbehaved.event.InputMap.lambda$consume$2(InputMap.java:256)\n        at java.base/java.util.Optional.map(Optional.java:260)\n        at org.fxmisc.wellbehaved.event.PatternActionMap.lambda$forEachEventType$1(InputMap.java:414)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandler.handle(InputHandler.java:50)\n        at javafx.base@22.0.1/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)\n        at javafx.base@22.0.1/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:232)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:189)\n        at javafx.base@22.0.1/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)\n        at javafx.base@22.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)\n        at javafx.base@22.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)\n        at javafx.base@22.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)\n        at javafx.base@22.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)\n        at javafx.base@22.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)\n        at javafx.base@22.0.1/javafx.event.Event.fireEvent(Event.java:198)\n        at javafx.graphics@22.0.1/javafx.scene.Scene.processKeyEvent(Scene.java:2195)\n        at javafx.graphics@22.0.1/javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2716)\n        at javafx.graphics@22.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:218)\n        at javafx.graphics@22.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:150)\n        at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)\n        at javafx.graphics@22.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$1(GlassViewEventHandler.java:250)\n        at javafx.graphics@22.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:430)\n        at javafx.graphics@22.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:249)\n        at javafx.graphics@22.0.1/com.sun.glass.ui.View.handleKeyEvent(View.java:542)\n        at javafx.graphics@22.0.1/com.sun.glass.ui.View.notifyKey(View.java:966)\n        at javafx.graphics@22.0.1/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)\n        at javafx.graphics@22.0.1/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$10(GtkApplication.java:264)\n        at java.base/java.lang.Thread.run(Thread.java:1583)\n\nDeprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.\n\nYou can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.\n\nFor more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.\n\nBUILD SUCCESSFUL in 24s\n18 actionable tasks: 2 executed, 16 up-to-date\n","msgtype":"m.text"},"m.relates_to":{"event_id":"$g2ozi8XUS7B_kouppEYKWGF1xC5AOrt4BlFByd-lHuE","rel_type":"m.replace"},"m.mentions":{},"body":" * loke   august 7th  git pull from codeberg resulted  in a broken kap :-(  simple  iota 10 results in:> Task :gui:run\nWARNING: package com.sun.javafx.event.EventHandlerManager not in javafx.base\nWARNING: Unknown module: org.controlsfx.controls specified to --add-exports\nWARNING: Unknown module: org.controlsfx.controls specified to --add-exports\nWARNING: Unknown module: org.controlsfx.controls specified to --add-exports\nWARNING: Unknown module: org.controlsfx.controls specified to --add-exports\nWARNING: package com.sun.javafx.scene.control.behavior.TableViewBehavior not in javafx.controls\nWARNING: Unknown module: org.controlsfx.controls specified to --add-opens\nAug 07, 2024 11:18:37 PM org.jline.utils.Log logr\nWARNING: Unable to create a system terminal, creating a dumb terminal (enable debug logging for more information)\nException in thread \"JavaFX Application Thread\" java.lang.IllegalArgumentException: Failed requirement.\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.findInputStartEnd(ROStyledArea.kt:187)\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.withUpdateEnabled(ROStyledArea.kt:238)\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.removePrompt(ROStyledArea.kt:124)\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.updateInputEnabledState(ROStyledArea.kt:80)\n        at com.dhsdevelopments.kap.gui.ResultList3.disableInput(ResultList3.kt:241)\n        at com.dhsdevelopments.kap.gui.ResultList3$ResultListCommandListener.handle(ResultList3.kt:319)\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.sendCurrentContent(ROStyledArea.kt:213)\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.addInputMappings$lambda$3(ROStyledArea.kt:86)\n        at com.dhsdevelopments.kap.gui.styledarea.ROStyledArea.addInputMappings$lambda$4(ROStyledArea.kt:86)\n        at org.fxmisc.wellbehaved.event.InputMap.lambda$consume$2(InputMap.java:256)\n        at java.base/java.util.Optional.map(Optional.java:260)\n        at org.fxmisc.wellbehaved.event.PatternActionMap.lambda$forEachEventType$1(InputMap.java:414)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandlerMap.lambda$null$0(InputHandlerMap.java:22)\n        at org.fxmisc.wellbehaved.event.InputHandler.handle(InputHandler.java:50)\n        at javafx.base@22.0.1/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)\n        at javafx.base@22.0.1/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:232)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:189)\n        at javafx.base@22.0.1/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)\n        at javafx.base@22.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)\n        at javafx.base@22.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)\n        at javafx.base@22.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)\n        at javafx.base@22.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)\n        at javafx.base@22.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)\n        at javafx.base@22.0.1/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)\n        at javafx.base@22.0.1/javafx.event.Event.fireEvent(Event.java:198)\n        at javafx.graphics@22.0.1/javafx.scene.Scene.processKeyEvent(Scene.java:2195)\n        at javafx.graphics@22.0.1/javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2716)\n        at javafx.graphics@22.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:218)\n        at javafx.graphics@22.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:150)\n        at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)\n        at javafx.graphics@22.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$1(GlassViewEventHandler.java:250)\n        at javafx.graphics@22.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:430)\n        at javafx.graphics@22.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:249)\n        at javafx.graphics@22.0.1/com.sun.glass.ui.View.handleKeyEvent(View.java:542)\n        at javafx.graphics@22.0.1/com.sun.glass.ui.View.notifyKey(View.java:966)\n        at javafx.graphics@22.0.1/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)\n        at javafx.graphics@22.0.1/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$10(GtkApplication.java:264)\n        at java.base/java.lang.Thread.run(Thread.java:1583)\n\nDeprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.\n\nYou can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.\n\nFor more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.\n\nBUILD SUCCESSFUL in 24s\n18 actionable tasks: 2 executed, 16 up-to-date\n","msgtype":"m.text"}}
                      {"origin_server_ts":1723088375665,"event_id":"$a7eSVOsRg99oLRr1HAeZ-RiEXOYTENRWbdhcuUAEDsM","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"Wow. That's interesting. What platform are you running on? Linux?","msgtype":"m.text"}}
                      {"origin_server_ts":1723089926170,"event_id":"$6dz1Q5FGVqYRoZVW3PaMkfYqUc8xdJNPc6ceO0su-w0","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, I have seen it myself now. I'll fix it as soon as I get off work today.","msgtype":"m.text"}}
                      {"origin_server_ts":1723090239912,"event_id":"$A_pK6p9OoX2FKGAnxlNa7sMaCup6-GKcyYQfWZsM2N8","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"And I couldn't help myself. I had to figure out exactly what went wrong. I made a mistake in the most recent commit. It should be very easy to fix.","msgtype":"m.text"}}
                      {"origin_server_ts":1723090315453,"event_id":"$QkEKPEjXPYwMOw0u-CCq7XF3onwT1SsQhuLS3oh4Jg0","redacted_because":{"room_id":"!OFniHvZeRnzLtnCiWw:dhsdevelopments.com","origin_server_ts":1723090328983,"event_id":"$3GhpP1fhlixVO2-rJ5XUVcNAuaJ3pKMqOsUuEsb9FUY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","unsigned":{},"redacts":"$QkEKPEjXPYwMOw0u-CCq7XF3onwT1SsQhuLS3oh4Jg0","type":"m.room.redaction","content":{"redacts":"$QkEKPEjXPYwMOw0u-CCq7XF3onwT1SsQhuLS3oh4Jg0"}},"sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{}}
                      {"origin_server_ts":1723090328983,"event_id":"$3GhpP1fhlixVO2-rJ5XUVcNAuaJ3pKMqOsUuEsb9FUY","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","redacts":"$QkEKPEjXPYwMOw0u-CCq7XF3onwT1SsQhuLS3oh4Jg0","type":"m.room.redaction","content":{"redacts":"$QkEKPEjXPYwMOw0u-CCq7XF3onwT1SsQhuLS3oh4Jg0"}}
                      {"origin_server_ts":1723111762659,"event_id":"$Q_qp2Kjshh1BytALIVDnxB3Jkk-z0bjhz41eTsoAND4","sender":"@loke:dhsdevelopments.com","user_id":"@loke:dhsdevelopments.com","type":"m.room.message","content":{"m.mentions":{},"body":"OK, the bug has been fixed","msgtype":"m.text"}}
                      {"origin_server_ts":1723154750878,"event_id":"$yao5NoBJM0HIhzO7Rxk24x4MJYi-qeU2C5Rkdrj8nLc","sender":"@osmanfb4:matrix.org","user_id":"@osmanfb4:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"sorry did not check back. yes i am using linux/ubuntu 22.04. Just did another pull and now  Kap is working again. Thanks.","msgtype":"m.text"}}
                      {"origin_server_ts":1723201394278,"event_id":"$92HK9hPKv3BMlhPK-qQ_NCAKHUv0qvRubLwzMMVOP3A","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"does changing to Gradle version 8.5 mean that older java version support is gone?","msgtype":"m.text"}}
                      {"origin_server_ts":1723201529271,"event_id":"$3acLjeykuK4PzeGbU0_2AxO8eJH5B8EE1ENeOftg2w8","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"body":"openjdk 22 should not give this kind of error","msgtype":"m.text"}}
                      {"origin_server_ts":1723201530819,"event_id":"$pZtoq2buCch6-XYSGzzY3yulUoCjr8t5StQfm1PpoBc","sender":"@sienet_ja_lsd:matrix.org","user_id":"@sienet_ja_lsd:matrix.org","type":"m.room.message","content":{"m.mentions":{},"format":"org.matrix.custom.html","body":"./gradlew gui:run\n\nFAILURE: Build failed with an exception.\n\n* What went wrong:\nCould not open cp_settings generic class cache for settings file '../array/settings.gradle' (/home/user/.gradle/caches/8.5/scripts/9sm9a1zc5p449rzizpeelywgn).\n> BUG! exception in phase 'semantic analysis' in source unit '_BuildScript_' Unsupported class file major version 66\n\n* Try:\n> Run with --stacktrace option to get the stack trace.\n> Run with --info or --debug option to get more log output.\n> Run with --scan to get full insights.\n> Get more help at https://help.gradle.org.\n\nBUILD FAILED in 1s\n","msgtype":"m.text","formatted_body":"

                      ./gradlew gui:run<\/p>\n

                      FAILURE: Build failed with an exception.<\/p>\n