The Arcology Garden

Arcology Garden Site Updates

LifeTechEmacsTopicsArcology

This page contains links to The Arcology Garden site's new and updated content and occasional tech-ish personal updates by Ryan Rix. You can subscribe to this feed at https://arcology.garden/updates.xml. It's also mirrored to my Fediverse instance.

I got a new smartwatch and wrote a watchface for it in an evening.

I used Pebble watches for a long time and I really still like them but they're a pain to keep running these days and I never got around to writing custom code or apps or watchfaces for it. After my Pebble Time 2 HR bit the dust, I ended up buying a Amazfit Bip S, and it sort of worked, but I needed to install an extra app to get Sleep as Android sleep tracking working with it and it's a sort of weird, closed ecosystem. I probably should have tried to get GadgetBridge to work with it, oh well.

I bought a PineTime from Ameridroid on a lark when I wanted to get a Radxa Zero and a Pinecil from them. They're 25$ nRF52 smart watches with heart rate sensing, accelerometer, and 8 bit color LCD touch screen.

I don't need a bunch of fancy apps for my Smartwatch, I basically only want it to buzz when I have a calendar event or a chat message, and I want it to count my steps and my sleeps. This thing does all of that out of the box. Maybe I'll code up some other features. I'd like to add a meditation timer next.

So with the PineTime, I decided sooner rather than later I should try to write the watch face I wanted and had on my Pebble, and wrote that in an evening.

Read my PineTime page for details about writing my own watchface and deploying it to my smart watch after less than 6 hours from unboxing.

California passed a DELETE Act DataRights DSAR Privacy

California passed a DELETE Act: summary of the "old" federal bill and brief summary of how this bill will be applied.

California passed a law that would give consumers an easy singular interface to opt-out of processing by data brokers and require them to delete your data. Neat stuff, if it works. There's a lot of overlap between this and what we've been building with the Data Rights Protocol and I'm excited to see those overlaps pursued.

"it isn't a contest. Just enjoy the ride." - remembering Seth Vidal

A decade ago we learned of the passing of Red Hat/Fedora Linux software engineer Seth Vidal on [2013-07-08 Mon]. In "it isn't a contest. Just enjoy the ride." - remembering Seth Vidal, I briefly memorialize a good man.

I made a one-off entry to Fedora Linux's blog aggregator with this post as well.

My New Homelab Build is basically complete

At the beginning of March I started planning for the turndown of my 1U racked with Wobscale Technologies. It is a hilariously un-maintained Fedora Linux that basically exists to run Matrix Synapse and Nginx proxies to the host in my living room. That host was an Gen 8 HP Microserver and is now a SuperMicro + Xeon in a 4U with 256GB of RAM. 1000$ gets you 48 cores of 2012 CPU and 256GB of ECC RAM. It's called Last Bank. It's racked up in a rolling rack with all my networking gear and Window Smoke, My NixOS Tower racked above it.

two 4U computer chassis in a black rolling 19U rack. The top chassis's locking front panel is flipped down. On top are a bunch of random shit

On top of the rack I have my network gear and a power strip on a rack-mount shelf. All of this is organized with Gridfinity Modular Storage System modules to route the power cables under the gear and fix the networking gear in a compact, organized fashion.

the bunch of random shit, sitting on a rack-mount shelf. At the top you can see a modem, a router, and a switch; a hue bridge is seen on its side, and a power strip. All of the network gear is organized with 3D printing "gridfinity" stuff

I also set up an old low-power desktop with Home Assistant to act as an ATC for the automations I want to build. It works with basically all the smart devices I have, but I am frustrated with how difficult it is to automate things on my desktop. It would be really neat if you could use KDE Connect plugins with it, one of these days I will figure this out. But I got some Z-Wave Plugs which also have energy monitoring. One of them is hooked up to my audio amplifier so that when I go to bed my soundsystem automatically turns off. I'd like to be able to send a mute command to my desktop (with a KDE connect plugin, perhaps cough), but in the meantime this will suffice. The other is between my wall and the power strip just to do energy management. You'll see a Kill-a-Watt in the photo above, which are useful but in getting accurate measurements and longer-term trend analysis this will be much nicer. I had some issues pairing up the switch which would do the recording and only just got it working today, but you can see when I did a NixOS rebuild and you can see the full setup, both machines and networking gear but not including my desktop monitor pull 300W or so on average.

a Home Assistant historical graph: Living Room-Rack Switchelectricwvalue showing my servers idly pulling an average of 300W, going to 350W when I compile software

I was very much on the fence between building something like this out and building basically another PC but with a Ryzen 3700 and a motherboard with a bunch of SATA ports, but the TDP worked out to about the same amount on paper, the multi-core performance was quite similar, and I could afford much more ram due to the low price of DDR3.

I was worried about noise and about heat, and the machines are slightly noisier now that they are in these chassis. They each have 2x 120MM and 2x 80MM case fans which run at full-tilt directly off of the PSU even when I shutdown from the OS because the RSV-R4000U's fans all have big chonky molex connectors which don't attach to the fan controllers on the motherboards. I'll probably replace them with some other fans that can do PWM like these, but really these machines aren't so noisy that it bothers me having them in the living room. Of course I have fans and filters and occasionally AC running all as well right now because Eugene is in the middle of grass pollen season, so it's basically always drown out. And I do need a temperature sensor or thermometer in here so that I can what sort of heat makes it out of the rack. All in due time, but I am done futzing with it for a bit. Oh except I'm thinking about measuring some new Ethernet cables…

Okay maybe I was wrong about 6.x

In I am swearing off Kernel 6.x. I thought that it was the fault of 6.x degrading my desktop – well, I rolled back to 5.15 and the VFIO module was still corrupting my framebuffer but it also broke X11. I spent hours getting mad at this situation after I moved my desktop in to the rack that my New Homelab Build now lives in, fiddling with BIOS settings, blindly typing in my full disk encryption passphrase and sitting in stupid anger when I could SSH in and lightdm was just sitting with its thumb up its ass waiting for an active logind seat to become available for auto-login.

I stumbled on /r/VFIO in the process of trying to un-wind all this stuff and an obscure magic-number error I was getting from QEMU when I tried to attach the PCIe USB-3 controller to my Windows VM. All the weird, difficult/impossible to debug issues these folks report in trying to get these bespoke setups to work mirrored my experience and I decided it is not worth the trouble right now. I got to the point where if i can boot and login, the GPU and network card both attached to the VM, but the USB controller would not so I would boot up and be greeted with a login panel which did not work.

So I have ripped out all of the PCI passthrough stuff in My NixOS Tower Customizations, and I will figure out how I want to move forward. I may invert the setup where my PC boots to Windows and then a QEMU VM presents the NixOS environment that I can work in during the day, but ugh, it's such a bummer. When the PCI passthrough setup was working it worked so well with my monitor acting as USB+Display KVM based on which input I had selected; afaict there is not a solution in Windows which would let me mirror this setup where I can change display inputs and have my USB hub swap over in to the VM as well.

Very sad about the whole thing.

I am swearing off Kernel 6.x.

In my last post, I talked about how I had to use Kernel 6.2 to get my GPD Pocket 3 to boot; well, that update caused My NixOS Tower to pull 6.x in, which should have been fine. An important part of that setup is that I use vfio-pci to export my nVidia GPU and some other PCI devices in to a Windows VM in QEMU.

After updating to 6.2 on this machine, my machine appeared to lock up after failing to set a driver_override for a PCI device path which did not exist. I spent hours trying to understand why my PCI devices changed addresses and then why stage-1 was failing even though it didn't seem to set -e, found some workaround that let the machine boot until earlier today when I moved it in to a case racked above Last Bank and booted it up and found it was doing the same thing still.

Two more hours spent trying to understand why it would hang or how to patch my initrd (!!) to remove the lines added by the preDeviceCommands I added. By luck I stumbled on this Manjaro forum post: [[https://forum.manjaro.org/t/kernel-6-0-hangs-at-boot-running-early-hooks-udev/124695/2][Kernel 6.0 hangs at boot: running early hooks [udev]​]] which points out "It seems the vfio module is messing with the framebuffers. I can ssh into into (sic) the system from a secondary device without any modification to loaded modules"… So I typed in my full disk encryption passphrase and a few seconds later Plymouth modeset and then I booted in to a working system. None of the devices I loaded VFIO in to were responsible for the active framebuffer (an nVidia GPU while my linux display is driven by the Intel dGPU, a USB3 controller, a gigabit network controller)

I will boot 5.15 from now on unless absolutely necessary. fucking hell.

A Documented NixOS Setup with the GPD Pocket 3

In NixOS on the GPD Pocket 3 I outline the configuration required to get NixOS running reliably on my GPD Pocket 3. I have waxed and waned on this computing paradigm for over a decade now, starting all the way back with my ill-fated blog ideas around single-device/multi-form-factor Convergence some of my early microfiction like The International Trip and the very earliest of my Emacs customization work running Emacspeak on a raspberry pi connected to a small wireless keyboard and only sometimes a display. I could have my RSS feeds read to me while i stood in a BART car stuck under the trans-bay tunnel on the way in to work, but it was very rarely a productive platform for me.

From my days writing C code on a Palm T|X to the aborted Palm webOS to a series of ill-fated Android tablets and convertibles I would always end up fidning myself back on my Thinkpad, frustrated with some small short-coming or manufacturer-defect of the device I was intending to use. In 2017 I got a GPD Pocket, a 7" laptop with an Intel processor and claims of good Linux support. It only supported S2 suspend and would always be dead when I wanted to use it. The GPD Pocket 2 is hardware that I still enjoy using, but with only 256gb eMMC and a slow microSD card slot, it would not work so well as a daily driver and did not have enough storage for both my NixOS and my music even after I whittled my collection down. I bought the Astro Glide phone from Planet Computers and waited 2 years for something to break the first time it fell out of my pocket. So why did another one of these things immediately catch my eye?

a capture of the title card for Jon Bois/Sportsball Nation's Pretty Good Episode 8 with the text "why do i choose this for a living" replaced with "why do i choose this for a hobby"

Well the short answer is that the Android org-mode applications don't really work well with my organizational style, and Termux on a soft keyboard is just not really viable.

The slightly longer answer is this: I've been having some really unfortunate and hard to diagnose issues with my Framework laptop, it seems content to randomly kernel panic and GPD and enter a state where the UEFI does not load for minutes while the fan spins at 100%. Since it was my only working machine for a while, I kept it running limping along. I recently reinstalled NixOS on my desktop and this has given me some more room to try to debug this but while I am able to do my day job from the desktop the rest of my stuff needs some work. I mean, shit, sometimes I Run Emacs on my Steam Deck so that I can do my flash cards on the couch and read my notes in a pinch. So an 8 inch laptop with a decently workable keyboard is really clutch.

I could be waiting for an MNT Pocket Reform but frankly I find the iMX.8 SoCs to be pretty much unusable in practice. And so I buy more weird, bespoke hardware from China.

I got NixOS working on this thing very quickly, and was using it to do my SRS, using it to develop Elixir and Python applications (i started prototyping an Elixir version of my site engine again…), and of course using it to run my org-roam and publish to the site. I think at first I only had some configuration required to get the display rotated, and had to learn the hard way that KWin Wayland works a lot better on it than KWin X11. Alas. I guess I will be doubling down on the KWin tiling program Bismuth and hoping I don't catch the EXWM bug again any time soon.

But a series of frustrating hours involving my Framework repeatedly crashing while I was trying to take a meeting lead me to load the wrong muscle-memory up to the Full Disk Encryption screen in the GPD leading me to think it had forgotten the passphrase. A few hours in to repeatedly running and tweaking my NixOS Automatic Partitioning Installer my muscle-memory loaded up the correct passphrase and I was shook. because meanwhile, the install wasn't working. It would panic any time the kernel tried to modeset, unless I booted Kernel 5.15 which had some really strange display artifacting happening and S3 sleep would not work, when it did before with both kernels. I am not built to handle kernel issues. Eventually I got a working setup by opting to pull in the unstable version of ZFS to run Kernel 6.2, and this thing is happily chugging along.

a wide angle photo of a small laptop in front of a small laptop bag; a shot of espresso and a macchiatto are next to it.

I'm sitting at a cafe writing this with it right now. I'm planning to buy a lighter cross-body bag which can carry this thing and a charger and not much else, my little 8 inch camera bag is nice but a bit too thick for riding on my bike for example.

I still don't understand why deploying the same config did not work, it's sort of worrying, especially since I'm planning to wipe and rebuild the Framework soon to see if there is hardware issues or if there is some weird bug in NixOS or my NixOS build…

In NixOS on the GPD Pocket 3 you can see this configuration in annotated form, along with viewing Rose Quine my Morph manifest for the machine with install-specific information.

I'm probably going to write a long-winded essay/config expansion of my Bismuth setup; I was deeply worried about moving to Wayland with my addiction muscles for XMonad and EXWM but Bismuth is very good. I just want a better way to declare KDE configurations within home-manager.

Rewrote my Matrix Feedbot to use matrix-nio

A while ago I published a method for Posting Arcology Feeds to the Fediverse Automatically with Feediverse, a simple timer script which posts RSS entries from my blog to my Akkoma Server on the Fediverse. I reused that same logic to re-build an RSS to Matrix.org feed bot, a re-hash of a piece of software I ran a couple of years back. I had stopped using it and moved to the matrix.org operated go-neb bot, but it recently was deprecated and replaced with something that has a much more strict RSS parser. See, though, RSS and Atom is like HTML to me: it's a fucking mess and most every feed has something wrong with it. Mine are no different. the thing was parsing HTML as XHTML and it worked with go-neb and had no critical errors in w3c validator so I was too stubborn to fix it in Arcology.

Anyways, I really wanted my feedbot to be able to read the feeds.json file that Feediverse used to auto-discover feeds on my sites and post them automatically, something which neither of the matrix.org operated bots could or would do.

So I put matrix-nio, feedparser, and a few yaml files in to a blender together and have a minimum viable Matrix Feedbot in place. Half the reason I'm posting this is so that I can test that feed stuff. Good night.

Drafted a Letter to Senator Prozanski and Representative Holvey in Support of SB619

I wrote a Letter to Senator Prozanski and Representative Holvey in Support of SB619, a promising Oregon state Data Rights and Privacy legislative framework modeled after the California Consumer Privacy Act being drafted by my local representatives. While I missed the window for official testimony in last week's public hearing session, I hope that this letter and legislation are not left on the cutting floor.

Published version 0.7 of the Data Rights Protocol DataRights DSAR Privacy

Today we tagged a new version of the Data Rights Protocol, a new “common denominator” for data rights interchange.

Over the coming months we’ll be integrating it in to Consumer Reports’ Permission Slip and a number of #privacy / data management middleware providers will be integrating it for their customers to provide a simple unified messaging protocol for communicating #datarights requests like data sale #optout, deletion portability and #DSAR between end users and businesses through this ecosystem of authorized agents and privacy infrastructure providers.

This work will stream-line data rights access for consumers and businesses by moving the cost of identity verification to a one-time action performed by Agent applications, and provide a simple taxonomy for companies to automate their data rights pipelines around.

The system we’re designing operates more like a network of notaries than any sort of self-sovereign hardware-crypto backed decentralized identity system that folks on the Fediverse may be excited by, but this has been designed to target the technology that average consumers and businesses are accessing today while leaving the door open for more exciting technology down the line. It’s JSON, HTTP, and libsodium.

Without regulatory intervention a system like this will never be comprehensive – there is little reason for the nastier data brokers in @yaelwrites@mastodon.social ‘s BADBOOL to implement a DRP interface, but for companies that respect consumers DRP would be a slick part of an automated Data Management/Access/Deletion system that would be cheaper and more resilient than paying a bunch of paralegals to look at blurry smartphone photos of ID cards all day long. With the California Attorney General's recent announcement that requests submitted by services like Permission Slip should be respected, it's natural for businesses and advocates to build systems that can scale these requests up to a society that wants them but feels disempowered to exercise them in a meaningful way. Data Rights are not going away and ignoring even these baseline rights isn't going to work out so well.

I’ve been really happy to work with @kevinriggle@ioc.exchange on moving the DRP forward toward this 1.0 implementation vision, sharpening our safety/security focus, and building something which is informed by more than just my experience/scars serving DSAR and Portability requests at my last job.

Published my 3D printed bike basket boot 3DPrinting Programming OpenSCAD Cycling

This is an older project of mine, but I wanted to link to it today so I published it

I'd like to have the ability to attach a milk crate to the back of my bike sometimes. This 3D print is designed to attach to the bottom of a milk crate and sit snugly on Marra's rear pannier rack. Once sat, it is then bungee'd on to the frame and lower rack points. This plastic milk crate is big enough to hold two grocery bags securely, though it's a bit too tall for me to leave on all the time. That's fine because six bungee points is all it takes to remove it and bring it in to a restaurant or shop with me.

Testing basic integration of feed2toot

In theory this should end up on the The Arcology Garden's Fediverse profile

I have Forth and Lisp running on a z80 hobbyist board called the MakerLisp Machine

In 2019 I went to the Vintage Computer Festival PNW at the lovely Living Computer Museum (which I miss dearly) and picked up a weird little machine, a laser-cut wood box with a small dev board in it called the MakerLisp Machine. It runs a simple bare-metal lisp on a ez80 CPU. I picked it up and proceeded to do nothing with it until quite recently when I wanted to start to learn Forth and felt that a good way to do so would be on something akin to the hardware in the Forth books which I am reading along with.

Now I have some resources put together on the MakerLisp Machine page including details on how to get a CP/M running on it and doing important things like loading Zork, and connecting to the board over USB with my phone. I also spent some time asking myself and answering Why program a z80? which is perhaps interesting.

I am now running my own Fediverse instance

I am now Self-Hosting on the Fediverse with (Pleroma for now, eventually) Akkoma. Lately I have been yearning to self-publish, and I am still feeling like I am a ways away from being able to self publish directly within The Arcology Project so I set up a new microblog on my old https://notes.whatthefuck.computer domain running Pleroma. I wanted to run Akkoma but it was kind of a pain to get it running in a declarative fashion. There is a NixOS module in nixpkgs pull-request land which I will hopefully swap to.

I'm treating this as an experiment and as a single-user instance. I'm terribly uninterested in community building or moderation right now, sorry. Some day I may host a Fediverse instance that others could use but for now I am the only person I'm willing to be responsible for and to. If it runs decently enough and without trouble, I'll probably kludge together an RSS-to-Mastoapi thing with the Arcology Feed Generator so that my posts here do federate, and then think about some solution like webmention or so to capture responses back in to my document system.

In Protect Me From What I Want, Tim Bray writes about wanting an algorithm that reflects community values and calls for the tools to build them.

Protect Me From What I Want - Tim Bray (direct: https://www.tbray.org/ongoing/When/202x/2022/11/28/On-Algorithms)

This has me thinking once again about the most effective algorithmic system I have used, the client-side, introspectable, customizable Adaptive Scoring system in Emacs's Gnus news reader.

When reading my mail and feeds I add only one bit of information by hitting either `j` or `i` ("was this message worth reading" j as hjkl down/next, i as ignore) and my system extracts sender and subject keywords and stores a big blob of scores for each of those, then applies those scores to every message in every folder I open. After years of training my inbox and my feed reader, it's better than Twitter's social-engagement-focused algorithms or anything a "smart" feed reader could deliver to me, even NewsBlur's training system pales.

I refreshed my document musing about this and wondering once again how to go about doing this on a backend. I've wanted this stuff literally anywhere elsewhere for nearly a decade now.

Updated my NixOS Automatic Partitioning Installer script to support multiple ZFS pools

For my NixOS rebuild of The Wobserver, my general-purpose linux "homeserver" hosted by the wonderful catgirls at Wobscale Technologies, I have gone with a full ZFS installation for both my main partition and my data pools. I wanted to keep them separate so that the OS is only running on the SSD and this week I made some updates to my automated installation script based on cleverca22/nix-tests' justdoit.nix.

With these changes, I was able to set up a mirrored raidz on 10TB of spinnies, and a root partition and /nix on the SSD. My plan is to build out The Wobserver at home, slowly setting up proxy_pass directives over Tailscale to plumb services from the existing Fedora host to the Wobserver before taking these disks up to Seattle to install in the chassis that is hanging out in the datacenter. This will be the death-knell of my last Fedora Linux installation. 🫡

kexec.justdoit.zfsPools = {
  terra-firma = {
    devices = "$ROOT_DEVICE";
    volumes = {
      root = {
        snapshot = false;
        compression = false;
        mountPoint = "/";
      };
      nix = {
        snapshot = false;
        compression = false;
        mountPoint = "/nix";
      };
    };
  };
  tank = {
    devices = "mirror /dev/sda /dev/sdb mirror /dev/sdc /dev/sdd";
    volumes = {
      home = {
        snapshot = true;
        compression = "lz4";
        mountPoint = "/home";
      };
      media = {
        snapshot = true;
        compression = "lz4";
        mountPoint = "/media";
      };
      srv = {
        snapshot = true;
        compression = false;
        mountPoint = "/srv";
      };
    };
  };
};

It took a fair bit of heavy-lifting and debugging to get this script to run on my homeserver, not the least because the little 4-sata HP Microserver I am booting it off of does not support booting from the SSD installed on the ODD sata port, so I have a GRUB2 installation on an USB drive that I'll have to be sure to move to a new flash drive before installing in the wob.

Slowly making Arroyo useful outside of my own system

I spent some time this week making Arroyo Nix importable as <arroyo> in my NIX_PATH. With this set up, I was able to move a bunch of my support functions in to an nixpkgs overlay as pkgs.lib including my Nix Version Pins which are a bit easier to work with as a result (consider Mastodon in Emacs for example).

I also spent some time updating my vsketch and vpype packages to include some more utilities, and should publish an update with some Plotter Art I made to The Lion's Rear this week. For a while I'd just kept these package changes in a nixpkgs branch but keeping that branch up to date and dealing with the occasional merge conflicts was kind of a big pain, so they get moved in to the Arroyo overlay.

Having this as an easier to use – i hesitate to call any of this easy to use – overlay means that I'm a bit closer to being able to distribute a package of Nix helpers and a bootstrap script to get Arroyo Emacs running from any Linux with the Nix language installed. With that and some packaged up versions of "minimal" Emacs, Home-Manager and NixOS setups it would be possible to bootstrap a new Arroyo outside of my own. Some day soon perhaps.

I've also stated to work on deploying The Wobserver to a handful of drives I have in my apartment, but nixpkgs-unstable had a bug in the Kernel build scripts which i only found after mysteriously missing the binary cache and four hours of compiling. I'll try again on Monday, but I would like to have my Wobscale server moved to NixOS by year-end.

Updated my Nix Version Pins to contain more magic

My bi-weekly process of updating my system usually goes like this:

Obviously this sucks. It sucks a lot. But with my whole house of cards it's hard to do better. If you were working on .nix files inside of nixpkgs or a similar monorepo you could just call out to nix-prefetch-git to update the files. jwiegley/nix-update-el even does this in the editor for you!

After losing two hours yesterday to a mis-copied ref which caused chaos to ensue when my system imported home-manager as emacs-overlay, I decided to get these automated update functions working. It was a bit of a pain to get it working for me, and I documented it along with some useful apocrypha that I learned in building these durable, programmatic org-mode documents.

In "This document contains Magic" I described the careful house of cards I built to get nix-update-el working inside of org-mode documents, and then documented goofy stuff I did to make org-auto-tangle insert the cached revisions for functions which aren't supported by nix-update-el. The end result of that is that I can go through these less-stressful steps to update my machine:

is this really better than reinstalling Fedora Linux every six months? maybe… is it fun? sometimes…

How does targeted advertisement surveillance work?

I still don't understand the attack-vector how buying targeted advertisements can be used to unmask particular individuals (the example in mudge's testimony: democracy-desiring Chinese citizens posting on twitter illegally).

can anyone explain this to me?

Update

Someone pointed out to me that 3rd party cookies still exist and now i am thinking about how much effort i have put in to not thinking about these things and the efficacy of the safe little bubble i've constructed for myself…

wrote a Dead Simple Wallabag Fennel client

I use Wallabag instead of Pocket as a self-hosted read-it-later service. My koreader configuration will download the articles I save as EPUB files where I can highlight and annotate the articles I read.

As I wrote yesterday, the Local parser of KOReader Notes will populate my Knowledge Base with book highlights, and now it will extract highlights from articles I read. Note that this is not extracting or storing the annotations within Wallabag itself, just the local highlights on my e-reader.

I extended the generator to include a Dead Simple Wallabag Fennel client, just enough fennel to get an OAuth2 access token and attach it to some API requests to extract the pages' URLs. This is then injected in to the template which renders the highlights to org-mode, providing me with Refs I can query against, open in the browser, and see in my backlink buffers.

Refactored my Local parsing of KOReader Notes to Org Roam document system

I completed a fairly complicated refactor of the Local parsing of KOReader Notes to Org Roam literate programming document so only modified files are written to disk, and there is some better logging of the process. The most time-consuming part of the process is not parsing and re-arranging the data coming out of the lua metadata files that koreader keeps, but in rendering those to org-mode. Now the process takes about half a second if none of the metadata files are changed, and about 0.01 second for each note, let's call it:

...

processing...   The Hyperion Cantos 4-Book Bundle
parsed  250 highlights
Maybe rendering /home/rrix/mobile-library/books/Simmons, Dan/Hyperion Cantos 4-Book Bundle, The - Dan Simmons.sdr/metadata.epub.lua
Targeting...    /home/rrix/org/highlights/The_Hyperion_Cantos_4-Book_Bundle.org
Skipping ...    /home/rrix/org/highlights/The_Hyperion_Cantos_4-Book_Bundle.org
processing...   The Book of Joy: Lasting Happiness in a Changing World
parsed  307 highlights
Maybe rendering /home/rrix/mobile-library/books/Dalai Lama & Tutu, Desmond & Abrams, Douglas Carlton/Book of Joy_ Lasting Happiness in a Changing World, The - Dalai Lama & Desmond Tutu & Douglas Carlton Abrams.sdr/metadata.epub.lua
Targeting...    /home/rrix/org/highlights/The_Book_of_Joy__Lasting_Happiness_in_a_Changing_World.org
rendering   307 highlights to string
Rendered... 131430

...

real    0m4.135s
user    0m4.110s
sys 0m0.026s

It also has some command-line flags thanks to Penlight's pl.lapp:

[nix-shell:~/Code/koreader-to-org]$ fennel command.fnl -h
Parse koreader metadata files in to org-mode notes
-f,--file (optional string) only parse one metadata.*.lua file
-e,--epubs (optional string) parse epubs from here, otherwise ~/mobile-library/books
-p,--pdfs (optional string) parse pdfs from here, otherwise ~/mobile-library/books
[nix-shell:~/Code/koreader-to-org]$ fennel command.fnl -f ~/mobile-library/books/Baisao/Old\ Tea\ Seller_\ Life\ and\ Zen\ Poetry\ in\ 18th\ Century\ Kyoto,\ The\ -\ Baisao.sdr/metadata.pdf.lua
processing...   The Old Tea Seller: Life and Zen Poetry in 18th Century Kyoto
parsed  3   highlights
Maybe rendering /home/rrix/mobile-library/books/Baisao/Old Tea Seller_ Life and Zen Poetry in 18th Century Kyoto, The - Baisao.sdr/metadata.pdf.lua
Targeting...    /home/rrix/org/highlights/The_Old_Tea_Seller__Life_and_Zen_Poetry_in_18th_Century_Kyoto.org
Skipping ...    /home/rrix/org/highlights/The_Old_Tea_Seller__Life_and_Zen_Poetry_in_18th_Century_Kyoto.org

This system is still really nice to work with, my highlights have deterministic IDs that can be linked to in my notes, and the highlights come out of my Onyx Nova Color without much hassle thanks to Syncthing. Now to actually do some reading… :)

Posted Yeah, I Run Emacs on my Steam Deck, Ever Heard of It?

I did some hilariously stupid hacks to get a whole Emacs running on the SteamDeck so that I can do my SRS flashcards in bed.

Check it out. Or don't, I'm a goblin not a narc.

New CCE Functionality: List Timelines in Mastodon.el

I really should just upstream this but as usual I am lazy. Mastodon.el can support list timelines, and now it does (for me).

New CCE Module: Jump to Missing Org Roam Nodes

Invoking jump-to-missing-node picks a random org-roam link which is of the [[roam:Some Text]] form, i.e. a stub, so that you can fill in missing parts of your graph. This paired with help:org-roam-refile is a helpful way to flesh out your Knowledge Base.

Updated my Japanese Study module to make it easier to make SRS cards and learn katakana

I still fuck up katakana a lot. Some of them are very similar in appearance to hiragana of different sounds, some of them are similar to other katakana. smh, some of them map to radicals…

シ ツ ソ ノ

How frustrating! anyways, I wrote some Emacs Lisp which puts the name of these characters in my minibuffer space when I point to them.

I also wrote some code which calls the command line interface for jisho-api and then parses that out. I could write some python that outputs org-mode syntax directly but this is More Funner so nyaaa. Famous last words. Anyways, it does some nice things like set up org-fc cards for the pronunciation of various Kanji characters and building something similar for vocubulary should be pretty straightforward eventually.

New CCE module: Twitter to Sqlite & iNaturalist to Sqlite

Dogsheep sits in the same space as things like karlicoss/hpi, and my Email and News and Information Pipelines, and the IndieWeb concept of PESOS. In this case, it's some easy scripts which pull data from the public facing APIs and stores them in Sqlite databases.

I'll probably use this to generate pages in my Knowledge Base like I want to do with my KOReader Notes – in fact I might just write a dogsheep module for koreader notes some time…

In the mean time, twitter-to-sqlite and inaturalist-to-sqlite are installable through Arroyo now. Some day I'll get around to contributing to nixpkgs, or maybe just make rixpkgs 🤔

New CCE module: Stop using nix-channels for nixpkgs et al so that I can update my laptop

I have a new hack in my crappy NixOS setup to deal with an error I have been getting preventing me from rebuilding my system: "The manual appears to depend on the location of Nixpkgs"

For the last few weeks I haven't been able to update Virtuous Cassette because afterwards I couldn't deploy any future revisions without an absurd error "The manual appears to depend on the location of Nixpkgs"… extremely not my problem. I posted on NixOS discourse and got 0 replies and some sympathy "like"s. Well, I finally hacked together a workaround that can be summed up as "run the nixpkgs channel by myself and pray"… I have no idea why this works when the happy path does not.

New in the Archive: What would you do if a grinning psychopath in half-lotus offered you a lottery ticket?

What if that ticket, if it busted, could cost you your house and put you in personal debt to that same grinning psychopath?

New in the Archive: Is Bolt the latest Theranos, or is their CEO just a dirtbag grinning in half-lotus playing the Venture Capital Startup hypergrowth scam like a virtuoso?

This b2b payments company is offering employees an incredibly risky lottery ticket personally backed by a boss posting slapfights online like a 10 year old with ADHD with the ability to seize your is. property. That is a hell of a Devil's Gambit.

I'm not a betting man but that seems like a bad bet even before the economic recession/Financial drawdown we're slipping in to. I mighta taken it if I was in that position at Uber….. 🙁

First post on the Arcology Garden site update feed

Well well. as evidenced in First Post on the dev feed! I have put together a working feed implementation and can now broadcast thoughts in to the void. Powerful stffu. It's getting late here but I want to at least test publishing new content in to FriendFace, my wee-little feedreader social network inside the Matrix.org Ecosystem.

I have, right now, three feeds worth subscribing to, but may make update feeds for my "evergreen" content:

I wrote in that first dev update how I am sort of … displeased with the current architecture of The Arcology Project – it works, and it's technically sound, but I'm programming it in three different programming languages right now, and that is mentally taxing even with the documentation and re-structuring which I can do with org-mode's noweb syntax… I'm not sure if that means I will or should or want to rewrite the damn thing any time soon, but I might.

But I have a raft of other personal projects, technical and nontechnical, which I need to work through before I'll feel comfortable rewriting this thing. The most important and most daunting is that I need to / want to / shall rebuild my Wobserver with NixOS – this will give me a good foot-hold to make sure the arcology in its current iteration can continue running, but there's quite a lot of complexity in running my own server, and I am loathe to spend 1000$ on new harddrives for it even if I must as my mdraid is degraded.

NixOS has modules for quite a few of the pieces of software I run right now, but some things I need to either package in to NixOS or run unmaintained docker containers, and glue them in to the manifests. Once I have my wobserver less wobbly, perhaps I can evaluate rewriting this thing but it's kind of remarkable how well it works right now; it's about as close to a static site generator as I can get without writing files to disk, and perhaps the next version will come full-circle and just be an SSG once again.