minute | josch: :D | 00:30 |
---|---|---|
- Ar|stote|is (QUIT: Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) (~linx@149.210.12.234) | 01:07 | |
+ Ar|stote|is (~linx@149.210.12.234) | 01:23 | |
- cobra (QUIT: Read error: Connection reset by peer) (~cobra@user/Cobra) | 03:19 | |
+ cobra_ (~cobra@user/Cobra) | 03:19 | |
- nsc (QUIT: Ping timeout: 260 seconds) (~nicolas@78-97-142-46.pool.kielnet.net) | 03:29 | |
+ nsc (~nicolas@246-96-142-46.pool.kielnet.net) | 03:31 | |
- Ar|stote|is (QUIT: Ping timeout: 268 seconds) (~linx@149.210.12.234) | 03:47 | |
+ Ar|stote|is (~linx@149.210.12.255) | 03:51 | |
- Ar|stote|is (QUIT: Ping timeout: 256 seconds) (~linx@149.210.12.255) | 04:01 | |
+ Ar|stote|is (~linx@149.210.12.234) | 04:05 | |
+ jacobk (~quassel@utdpat241033.utdallas.edu) | 05:20 | |
- Ar|stote|is (QUIT: Read error: Connection reset by peer) (~linx@149.210.12.234) | 05:34 | |
+ Ar|stote|is (~linx@149.210.12.102) | 05:41 | |
- Ar|stote|is (QUIT: Ping timeout: 240 seconds) (~linx@149.210.12.102) | 07:41 | |
- jacobk (QUIT: Ping timeout: 240 seconds) (~quassel@utdpat241033.utdallas.edu) | 08:02 | |
- robin (QUIT: Read error: Connection reset by peer) (~robin@user/terpri) | 08:26 | |
+ robin (~robin@user/terpri) | 08:26 | |
+ jacobk (~quassel@utdpat241033.utdallas.edu) | 08:27 | |
- GNUmoon2 (QUIT: Ping timeout: 260 seconds) (~GNUmoon@gateway/tor-sasl/gnumoon) | 08:48 | |
+ GNUmoon2 (~GNUmoon@gateway/tor-sasl/gnumoon) | 09:01 | |
- klardotsh (QUIT: Ping timeout: 268 seconds) (~klardotsh@c-67-170-115-80.hsd1.wa.comcast.net) | 11:02 | |
+ Ar|stote|is (~linx@149.210.12.48) | 11:06 | |
- mjw (QUIT: Ping timeout: 252 seconds) (~mjw@gnu.wildebeest.org) | 11:36 | |
- jacobk (QUIT: Ping timeout: 260 seconds) (~quassel@utdpat241033.utdallas.edu) | 12:02 | |
+ MajorBiscuit (~MajorBisc@c-001-008-019.client.tudelft.eduvpn.nl) | 12:06 | |
+ mjw (~mjw@145.15.244.207) | 12:08 | |
+ mark_ (~mjw@84.241.204.209) | 12:12 | |
- mark_ (QUIT: Read error: Connection reset by peer) (~mjw@84.241.204.209) | 12:14 | |
- mjw (QUIT: Ping timeout: 256 seconds) (~mjw@145.15.244.207) | 12:15 | |
+ mark_ (~mjw@84.241.204.209) | 12:15 | |
+ jacobk (~quassel@47-186-70-49.dlls.tx.frontiernet.net) | 12:32 | |
minute | josch: so this was backported to 6.7 in debian yes? https://source.mnt.re/reform/reform-debian-packages/-/commit/6617821159e61cf3fe33d759b87b296f244d2561#91a6f0c0a5df11cb4f72b9b004984ccb40a54937 | 12:53 |
- mark_ (QUIT: Read error: Connection reset by peer) (~mjw@84.241.204.209) | 12:57 | |
josch | minute: as far as i can remember when i deleted those two, these patches got integrated into the upstream linux stable release | 13:04 |
josch | yes, one is this one: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/drivers/spi/spi-imx.c?id=cf6d79a0f5769b5f4d9579ddaf88d2c30b03b873 | 13:05 |
josch | and here is the other: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/drivers/gpu/drm/etnaviv/etnaviv_drv.c?id=b735ee173f84d5d0d0733c53946a83c12d770d05 | 13:06 |
josch | and the second part: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c?id=b735ee173f84d5d0d0733c53946a83c12d770d05 | 13:07 |
minute | josch: ok, thank you | 13:07 |
minute | josch: i would need to release this into reform-tools https://source.mnt.re/reform/reform-tools/-/merge_requests/68/diffs?commit_id=f45de54a2846d17faf39c83cea0ea5dc1435b90f | 13:20 |
minute | the most important thing here is removing QT_QPA_PLATFORM | 13:21 |
josch | minute: do things now work without these being set? | 13:23 |
minute | josch: the etna stuff is really outdated, nir is the default | 13:25 |
minute | josch: and the QT stuff is bad because it breaks some qt apps if wayland backend is not installed | 13:25 |
minute | it's better to let qt figure this out | 13:25 |
josch | okay, let me make a new release | 13:25 |
minute | josch: thank you! | 13:28 |
minute | spi-imx stuff is fine btw | 13:28 |
minute | i had a firmware bug (in pocket sysctl) | 13:28 |
josch | uh that reminds me that i wanted to make the custom cmdline parameters per platform part of a new field in machines/*.conf so that they can get sourced automatically | 13:33 |
josch | but i'll do that in another commit later :) | 13:33 |
minute | :D | 13:35 |
josch | minute: i'll amend the commit message with what you said here earlier | 13:35 |
minute | josch: cool! | 13:35 |
minute | ok i think pocket reform firmwares are done done, and i am certain we can put a final system image together (for the release) | 13:35 |
josch | minute: are you happy with the reform-setup-wizard as it is right now? If yes, you could tag it and then just apt-get install the version from Debian unstable instead of copying a binary into the system image. :) | 13:36 |
minute | josch: ok, yeah i'm happy with it for now | 13:37 |
minute | hm, this isn't merged | 13:39 |
minute | https://source.mnt.re/reform/mnt-reform-setup-wizard/-/merge_requests/7/diffs | 13:39 |
minute | and this https://source.mnt.re/reform/mnt-reform-setup-wizard/-/merge_requests/8/diffs | 13:39 |
minute | i'll merge these 2 and make a tag... | 13:40 |
josch | ping me once you are done and then i'll make a new upload to unstable :) | 13:40 |
minute | ok! | 13:41 |
josch | reform-tools 1.41 is now in the main branch and waits to be built by reform-debian-packages | 13:43 |
minute | josch: great | 13:45 |
minute | josch: i would like to merge this, any objections? https://source.mnt.re/reform/reform-debian-packages/-/merge_requests/35 | 13:46 |
josch | minute: i cannot really comment on kernel stuff -- that is 99.999% your domain :D | 13:48 |
minute | ok, merged! | 13:48 |
erle | minute i see the change for a sleep there, is this some kind of hardware race? | 14:03 |
erle | -usleep_range(10000, 20000); | 14:03 |
erle | +msleep(20); | 14:03 |
erle | i mean the removed code looks sketchier than what was put in, but i wonder, what is the thing that you wait here for? | 14:03 |
erle | (sketchier because with the range the exact wakeup time is flexible, usleep_range is an interesting function) | 14:05 |
minute | josch: hmm, build failure | 14:09 |
erle | (also i wonder if usleep_range can cause issues, but i don't know the code or the hardware, so that's why i ask) | 14:09 |
minute | josch: uh oh https://source.mnt.re/reform/reform-debian-packages/-/jobs/4190#L1854 | 14:10 |
minute | josch: both builds have the same issue it seems https://source.mnt.re/reform/reform-debian-packages/-/jobs/4192#L2262 | 14:10 |
josch | investigating... | 14:20 |
+ mjw (~mjw@46-144-161-82.biz.kpn.net) | 14:20 | |
josch | minute: a new cross-toolchain-base upload is required | 14:27 |
josch | until that happens, cross compilation in unstable is borked | 14:27 |
josch | minute: you can track this bug to keep updated about this: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1067370 | 14:29 |
Twodisbetter | minute: so it is seems like pocket reforms will be shipping out soonish? | 14:37 |
Twodisbetter | minute: should a rk3588 work with it? Is there any chance I could upgrade my order to one of those instead of the IMX? | 14:38 |
- mjw (QUIT: Ping timeout: 268 seconds) (~mjw@46-144-161-82.biz.kpn.net) | 14:42 | |
Twodisbetter | minute: or is the RK not a good idea due to the lack of built in wifi? | 14:43 |
minute | Twodisbetter: we can't do anything about any pocket orders | 14:45 |
minute | Twodisbetter: but yeah, my goal is to make rk3588 a compatible upgrade | 14:46 |
Twodisbetter | minute: no worries, I would be happy to order it seperately. | 14:46 |
minute | i personally also would like that, or at least a311d | 14:46 |
minute | (a311d already works except for some weird sound issue) | 14:46 |
Twodisbetter | minute: yeah, it is nice but for me the RK is where it is at. | 14:47 |
Twodisbetter | minute: I'll be happy with the imx until we have the green light on it though. | 14:47 |
minute | alright! | 14:48 |
josch | minute: if you need to cross-build things today, maybe you can try setting DIST to testing in the gitlab CI | 15:07 |
jfred-linode | docking a pocket reform with an rk3588 module would be so fun. nice powerful machine, itty bitty package | 15:13 |
josch | minute: is there a reason why the u-boot CONFIG_BOOTARGS for i.MX8MP are missing a console= argument for ttymxc0 or whatever the imx8mp has? | 15:21 |
josch | minute: and is there already a u-boot repository for rk3588 on source.mnt.re? | 15:28 |
josch | (i'm not finding it) | 15:28 |
josch | context: i'm currently unifying the handling of u-boot bootargs so that reform-check can make sure that nothing funky is going on by inspecting /proc/cmdline | 15:30 |
minute | josch: there's no rk3588 uboot repo yet | 15:53 |
josch | thank you! leaving it as FIXME then | 15:53 |
josch | I filed https://source.mnt.re/reform/reform-a311d-uboot/-/merge_requests/2 for one other oddity I found | 15:54 |
minute | josch: where would i set DIST? in the pipeline vars i see BASESUITE | 15:54 |
josch | oh whoops it's called DIST in reform-system-image but it's BASESUITE in reform-debian-packages | 15:57 |
minute | josch: if i do that, the resulting image will be completely based on testing or still on unstable? | 16:01 |
+ f_ (~AUGESOUND@fases/developer/funderscore) | 16:01 | |
- pandora (QUIT: Quit: Connection closed for inactivity) (uid585533@id-585533.ilkley.irccloud.com) | 16:01 | |
josch | minute: no, everything from testing | 16:02 |
josch | wait | 16:02 |
josch | nono | 16:02 |
josch | you are just using testing to build your packages | 16:02 |
josch | but you can then hopefully use unstable for the image | 16:02 |
josch | but beware that it can happen that your packages that you built in testing cannot be installed on unstable | 16:03 |
minute | ok | 16:03 |
minute | sounds scary lol | 16:03 |
josch | it's just CI so nothing will break :) | 16:03 |
josch | the reason why crossbuilding is still broken #1067370 seems to be that there is some internal disagreement about what the correct fix is | 16:04 |
josch | so while there exists a patch, there is not yet agreement on whether it should be applied | 16:04 |
josch | so it might take a bit until that gets sorted out | 16:04 |
josch | thus, maybe get familiar with testing until that is done | 16:04 |
josch | or switch your gitlab CI builder to arm64 :) | 16:05 |
minute | hmm ok | 16:22 |
minute | trying to set up a gitlab runner on my rk3588 reform | 16:38 |
josch | self-hosted MNT Reform confirmed? ;) | 16:41 |
minute | https://source.mnt.re/reform/reform-debian-packages/-/jobs/4198 | 16:47 |
minute | oh, error | 16:48 |
minute | josch: > Unable to find unstable-arm64 in /home/build/.cache/sbuild | 16:49 |
minute | josch: how can i fix that? | 16:49 |
minute | ah, i see | 16:50 |
josch | minute: .gitlab-ci.yml has amd64 hardcoded | 16:50 |
josch | it should probably be replaced with $(dpkg --print-architecture) | 16:51 |
minute | josch: exactly what i wanted to propose | 16:51 |
minute | ok | 16:51 |
josch | and those bits that explicitly are arm64 should probably not be done if [ "$(dpkg --print-architecture)" = "arm64" ] | 16:52 |
josch | and installing arch-test binfmt-support qemu-user-static becomes useless | 16:52 |
josch | the arm64-specific bits are probably harmless | 16:53 |
minute | josch: which bits are explicitly arm64? | 16:53 |
josch | arch-test arm64 | 16:53 |
josch | apt-get --no-install-recommends -y install arch-test binfmt-support qemu-user-static | 16:53 |
josch | the if surrounding /proc/sys/fs/binfmt_misc | 16:54 |
minute | oof | 16:54 |
minute | ok i will ry | 16:54 |
minute | try | 16:54 |
- aperezdc (QUIT: Ping timeout: 268 seconds) (~aperezdc@2a03:6000:6e61:633::43) | 16:54 | |
josch | the scripts themselves should have no problem running on arm64 as i am running them on my reform since forever | 16:54 |
josch | they pass DEB_BUILD_PROFILES=cross etc only as needed, for example | 16:55 |
josch | minute: you can leave the arm64 bits i mentioned for now if you want -- they should be harmless | 16:55 |
- jacobk (QUIT: Ping timeout: 240 seconds) (~quassel@47-186-70-49.dlls.tx.frontiernet.net) | 16:57 | |
+ jacobk (~quassel@47-186-70-49.dlls.tx.frontiernet.net) | 16:59 | |
josch | minute: other than your missing "; then" your changes look like they should | 17:01 |
josch | ah you just fixed it :) | 17:02 |
josch | no idea why chroot-arm64.tar is missing even though it was successfully produced as an artifact in the earlier job... | 17:06 |
- jacobk (QUIT: Ping timeout: 240 seconds) (~quassel@47-186-70-49.dlls.tx.frontiernet.net) | 17:07 | |
minute | hmmm | 17:08 |
minute | maybe it wasn't | 17:08 |
+ jacobk (~quassel@64.189.201.150) | 17:08 | |
minute | https://source.mnt.re/reform/reform-debian-packages/-/jobs/4206/artifacts/browse | 17:09 |
minute | i guess maybe i didn't rerun the complete pipeline | 17:09 |
josch | minute: line 34 you forgot an amd64 | 17:10 |
josch | err... line 35 | 17:10 |
minute | ahh yeah i wasn't sure ok | 17:11 |
josch | minute: and line 79 and 82 | 17:11 |
minute | josch: 79? it has both arm64 and amd64 | 17:11 |
josch | right, not that one | 17:12 |
josch | though that should probably be replaced by chroot-*.tar | 17:12 |
minute | ok, will do | 17:12 |
josch | this is definitely faster than waiting for unstable getting fixed :D | 17:15 |
minute | aha, this looks better https://source.mnt.re/reform/reform-debian-packages/-/jobs/4224/artifacts/browse | 17:16 |
minute | josch: yeah, i think the only downsides are that our VDSL's upstream is not as fast as its downstream, and my SSD is encrypted | 17:17 |
minute | (so getting less r/w bandwidth than there could be) | 17:17 |
- f_ (QUIT: Quit: To contact me, send a memo using MemoServ, PM f_[xmpp], or send an email. See https://vitali64.duckdns.org/.) (~AUGESOUND@fases/developer/funderscore) | 17:18 | |
+ f_ (~AUGESOUND@fases/developer/funderscore) | 17:19 | |
josch | minute: maybe that's not super relevant? The build_patched job on your rk3588 just took 1m55s while on the old builder it took 1m50s | 17:19 |
josch | rk3588: https://source.mnt.re/reform/reform-debian-packages/-/jobs/4225 | 17:19 |
josch | amd64: https://source.mnt.re/reform/reform-debian-packages/-/jobs/4174 | 17:20 |
josch | compiling linux will be the real benchmark of course :) | 17:20 |
minute | nice | 17:23 |
- jacobk (QUIT: Ping timeout: 268 seconds) (~quassel@64.189.201.150) | 17:24 | |
josch | build_custom took 50% more time -- maybe showing the differences in network and disk as several hundred megs of latex deps need to be downloaded and installed | 17:30 |
minute | oh yeah | 17:31 |
josch | unfortunately we are not prefixing each output line with a timestamp or we could find out | 17:31 |
josch | minute: is it intentional that the kernel cmdline in u-boot for imx8mp does not include a console= argument for the serial? | 17:31 |
minute | josch: not sure tbh | 17:32 |
- xktr (QUIT: Ping timeout: 260 seconds) (~xktr@user/xktr) | 17:34 | |
josch | then let me file an issue in the gitlab repo so this gets figured out before creating a tag for that u-boot | 17:34 |
+ xktr (~xktr@user/xktr) | 17:35 | |
josch | minute: creating that tag is btw still a todo for reform-tools as otherwise reform-flash-uboot cannot work | 17:35 |
- MajorBiscuit (QUIT: Quit: WeeChat 4.2.2) (~MajorBisc@c-001-008-019.client.tudelft.eduvpn.nl) | 17:38 | |
+ mjw (~mjw@46-144-161-82.biz.kpn.net) | 17:39 | |
minute | josch: ok but you want me to tag it only after i have investigated that tty issue? | 17:40 |
minute | the serial console does work fine though | 17:41 |
minute | josch: i think it works because the dts has a chosen {} entry with &uart2; | 17:42 |
josch | minute: if it just works out-of-the-box even without a console= parameter, would you like to just omit it in case of imx8mp? | 17:43 |
josch | then i'll close the issue and you can tag away :D | 17:43 |
minute | josch: right now i would do that yeah | 17:44 |
josch | okay! | 17:44 |
minute | josch: https://source.mnt.re/reform/reform-imx8mp-uboot/-/tags/1.0 | 17:45 |
josch | minute: you chose date-based tags for all the other u-boots though :) | 17:46 |
minute | lol ok | 17:46 |
josch | compare here: | 17:46 |
josch | grep -h UBOOT_TAG= /usr/share/reform-tools/machines/*.conf | 17:46 |
minute | josch: https://source.mnt.re/reform/reform-imx8mp-uboot/-/tags/2024-05-06 | 17:47 |
josch | perfect, thank you! | 17:47 |
josch | lets wait for the binary to pop out of that and then i'll put the sha1 into reform-tools | 17:48 |
josch | and next reform-tools version will be able to print: | 17:50 |
josch | I: kernel boot parameters your system does use but which are not the default: | 17:50 |
josch | minute: looks like the job is stuck because of no assigned runner: https://source.mnt.re/reform/reform-imx8mp-uboot/-/jobs/4231 | 17:52 |
minute | josch: ah yeah, i paused the main runner, one sec | 17:53 |
josch | anyways, i'm packing up and am going home now -- more maybe later tonight :) | 17:53 |
minute | josch: thanks for your help so far! | 17:55 |
josch | :) | 17:58 |
+ aperezdc (~aperezdc@2a03:6000:6e61:633::43) | 19:01 | |
minute | the question is, will it make the 3h timeout limit... | 19:06 |
josch | On the official Debian buildds, doing a full build of linux 6.7.12-1 on arm64 took 10:10:58 ;) | 19:13 |
minute | oh :3 | 19:13 |
minute | so then this is pointless | 19:13 |
josch | nono i said "full build" -- we disable a bunch of stuff | 19:14 |
josch | for example we disable rt and cloud builds | 19:14 |
minute | oh ok | 19:15 |
minute | i just changed the project timeout to 12h, but it doesn't affect existing runs | 19:15 |
josch | i don't think it will take 3h | 19:16 |
minute | ok :3 | 19:16 |
josch | because it takes 6h on my a311d | 19:16 |
josch | wait... does it? one sec... | 19:17 |
minute | hmm the rk shouldn't be _that_ much faster than the a311d | 19:17 |
josch | didn't we benchmark it one time? | 19:18 |
josch | it's somewhere on mastodon i think... | 19:18 |
josch | ah no 6h was on imx8mq :) | 19:20 |
- mjw (QUIT: Ping timeout: 264 seconds) (~mjw@46-144-161-82.biz.kpn.net) | 19:20 | |
josch | Build needed 03:23:08, 5817204k disk space | 19:22 |
josch | that's the time for a311d | 19:22 |
minute | oh ok :3 | 19:22 |
minute | nice | 19:22 |
josch | Duration: 38 minutes 21 seconds | 19:38 |
josch | ah whoops wrong tab :D | 19:38 |
josch | XD | 19:38 |
- f_ (QUIT: Quit: To contact me, send a memo using MemoServ, PM f_[xmpp], or send an email. See https://vitali64.duckdns.org/.) (~AUGESOUND@fases/developer/funderscore) | 19:38 | |
josch | i was too excited | 19:38 |
minute | :D | 19:42 |
+ pandora (uid585533@id-585533.ilkley.irccloud.com) | 19:55 | |
minute | ok, first pocket reform is basically ready to ship | 19:57 |
Sario | Wooo!!!! | 19:57 |
josch | \o/ | 20:02 |
+ gustav28 (~gustav@c-4334524e.019-141-67626730.bbcust.telenor.se) | 20:02 | |
josch | so, it seems that when it's about building our linux sources, rk3588 is 1.3 times as fast as a311d | 20:03 |
josch | so i should upgrade mainly because i want the ram not because i want the speed? | 20:04 |
+ klardotsh (~klardotsh@c-67-170-115-80.hsd1.wa.comcast.net) | 20:05 | |
josch | minute: if you are done with the pocket reform and the reform-setup-wizard works, could you add some tag? thanks! :) | 20:37 |
minute | josch: and dual display, potentially vulkan gpu, stuff like that | 20:40 |
minute | usb3 | 20:40 |
minute | dual pcie | 20:40 |
minute | nice that the CI stuff worked :0 | 20:40 |
minute | josch: https://source.mnt.re/reform/mnt-reform-setup-wizard/-/tags/1.0 | 20:41 |
josch | thank you!! <3 | 20:41 |
minute | you're welcome :D | 20:44 |
Twodisbetter | minute: are you able to give an estimate on Pocket shipments? No worries if not, just curious. | 20:59 |
minute | Twodisbetter: we have just packed the very first one | 21:16 |
Twodisbetter | minute: exciting! I really can't wait to recieve it! | 21:17 |
+ kws (ea8b8e08fe@2a03:6000:1812:100::1276) | 21:27 | |
kws | https://milkv.io/mars-cm has anyone looked at building an adaptor for this riscv milkv mars cm in the reform? | 21:28 |
kws | the soc seems to contain a plethora of interfaces too | 21:28 |
- iank (QUIT: Ping timeout: 256 seconds) (~iank@fsf/staff/iank) | 21:30 | |
minute | kws: in theory it should be compatible with the rcm4 adapter | 21:47 |
kws | Interesting, I guess I’d need to confirm it would work electronically then craft a device tree for it | 22:01 |
kws | But if it’s cm4 then yeah it shouldn’t cause any problems | 22:02 |
kws | thanks ! | 22:06 |
minute | kws: yep, one needs to check if their pinout has any critical deviations from standard cm4 | 22:06 |
- gustav28 (QUIT: Quit: Quit) (~gustav@c-4334524e.019-141-67626730.bbcust.telenor.se) | 22:15 | |
- anzu (QUIT: Ping timeout: 264 seconds) (~anzu@melkki.cs.helsinki.fi) | 22:21 | |
+ anzu (~anzu@melkki.cs.helsinki.fi) | 22:34 | |
+ RDLDR (~RDLDR@81.221.160.38) | 22:35 | |
- RDLDR (QUIT: Client Quit) (~RDLDR@81.221.160.38) | 22:38 | |
- natalie- (QUIT: Ping timeout: 255 seconds) (~natalie@user/natalie) | 22:48 | |
+ natalie (~natalie@user/natalie) | 22:49 | |
- qbit (QUIT: Remote host closed the connection) (~qbit@mail.suah.dev) | 23:24 | |
+ qbit (~qbit@mail.suah.dev) | 23:27 | |
Twodisbetter | minute: not to keep bugging ya, but the pockets will be shipped by Crowdsupply, meaning all packages will be sent to them and then they will resend them out to backers? | 23:45 |
Twodisbetter | minute: nevermind looks like you answers on Mastodon, Mouser, Inc | 23:46 |
+ mjw (~mjw@46-144-161-82.biz.kpn.net) | 23:52 |
Generated by irclog2html.py 2.17.3 by Marius Gedminas - find it at https://mg.pov.lt/irclog2html/!