The Arcology Garden

Arcology Garden Site Updates


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 It's also mirrored to my Fediverse instance.

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 ‘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 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 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:

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?


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/
Skipping ...    /home/rrix/org/highlights/
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/
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/
Skipping ...    /home/rrix/org/highlights/

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 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.