What are you doing this weekend?
14 points by caius
14 points by caius
Feel free to tell what you plan on doing this weekend and even ask for help or feedback.
Please keep in mind it’s more than OK to do nothing at all too!
I had a bit of a breakdown yesterday due to poor performance at my job coupled with some spiraling and self-flagellation, so I am going to spend some time this weekend trying to pull out of that nose-dive.
Also gonna do some pre-calc in preparation for tutoring on Monday, hang out with my partner, go cycling, maybe go to the shooting range on Sunday.
Hopefully trying to remember how to do self-care, vs just hiding from problems.
Eurovision party
elm-physics got a real nice update recently, which inspired me to remake a game I made in Unity like 14 years ago and lost the source files to.
Work some more on Lunacy, my Lua interpreter + JIT. I'm down to 1.3x PUC Lua, and it's probably time to bite the bullet and rewrite a few hundred lines of code so I can do NuN Boxing for my value representation, which I suspect is one of the things that is costing me a lot. I want my JIT to at least be faster than the official interpreter and then I'll be pretty happy (and can start benchmarking against luajit and cry).
writing sick (horrible) shit in emacs and also maybe probably distrohoppin from void -> debian stable
Teach a new friend Go (the game, not the language), finish 3d printing mounts for my NUCs in a new 10" mini rack, experiment with Hanami, and play Oxygen Not Included
Chilling. Digital art. Touching grass, weather permitting. Otherwise some coding I guess?
Finish adding UTF-8 support to my C string manipulation library, continue reading plan9 papers, enjoy time with GF, and cook some tartiflette.
Going to keep working on my Zig serializer for Syrup (the protocol that OCapN and Spritely Goblins uses). It's been very fun so far and it's getting to a very usable state.
I will continue working on my professional social network weareonhire!. The idea is to add more social features like posting, suggest co-workers to leave them recommendation.
This week I refactored architecture to use contrail - the library for synchronization with atproto. This will let me easily add data from other atproto apps like keytrace (verified personal links) and leaflet (publishing platform).
Entered Lisp Game Jam on a whim, so I’ll be doing research and prototyping: https://itch.io/jam/spring-lisp-game-jam-2026
Today was a bank holiday so I already completed my main objective: figuring out cloud-init for Raspbian. This is pretty nice, I can provision a Raspberry quite headlessly, which will be useful for dropping one as a DHCP/DNS/VPN box on a network I manage. This is what I came up with, which is nice because I can pull all config from the Ansible inventory I use for the rest of the provisioning.
Maybe I should work on my Tilde where everyone gets root. Due to the flurry of privilege escalation attacks lately, this has suddenly become an even more interesting use case. I'm also doing more Nix stuff at work and coincidentally met a NixOS fan with some affinities this week, so although I'm not fully convinced on the Nix ecosystem readiness for some purposes, maybe I should think about it.
The other thing on my list would be further playing with some MKV trickery I learnt about recently to retouch some video material. But I'd need to figure out some automation because it involves 243 files :\
EDIT: most importantly, I should start looking for a new password manager :(
tl;dr: declarative programming library
(defn step [frontier]
(let [solved (df/select :from frontier :where |(zero? ($ :ind)))
unsolved (df/select :from frontier :where |(pos? ($ :ind)))
expanded (df/select [[:s :ind :z] :s |(place ($ :s) ($ :ind) ($ :z))]
:from unsolved
:cross {:z digits} # cartesian product
:where |(not (conflict? ($ :s) ($ :ind) ($ :z))))
next-unsolved (df/select :s [:s :ind first-dot] :from expanded)]
(df/insert! ;(df/dataframes->rows next-unsolved) :into solved)))
Having already added a Sudoku solver (above) and Mandelbrot thingy based on sqlite's outlandish query examples with my query syntax and having implemented a minikanren and datalog on top (I implemented a text based dungeon crawler 3 times to compare query DSL, datalog and minikanren), with syntax I'm quite happy with:
(def kb (new-knowledge-base))
(with-kb kb
(facts! ["alice" :parent "bob"]) # put this triple in kb
(defrel ancestor [?x ?z] # put this relation/rule in kb
(or (parent ?x ?z)
(and (parent ?x ?mid) # symbols autokeywordized so :parent
(ancestor ?mid ?z))))
(query [?x] (ancestor ?x "bob"))) # query the kb
Or:
(defmacro- run-one `Expect and return only 1 answer, or nil`
[variable & goals]
~(let [r (logic/mk-run 1 [,variable] ,;goals)]
(when (not (empty? r)) ((r 0) ',variable)))) # run-all outputs all
(defn- check-inventory* []
(let [items (run-all ?n (:carries :player ?x) (:name ?x ?n))]
(if (empty? items)
(print "Empty-handed.")
(print (string "Carrying " (join-and items) ".")))))
(defn- go* [dir]
(let [room (run-one ?room (:at :player ?room))
dest (run-one ?dest(,dir ,room ?dest))
desc (when dest (run-one ?desc (:desc ,dest ?desc)))
missing (when dest (run-all ?req
(:requires ,dest ?req)
(not (:carries :player ?req))))]
(cond
(nil? dest) (print "You can't go that way.")
(not (empty? missing)) (print "You need the " (join-and missing) ".")
:else (do
(logic/retract! :player :at room)
(logic/fact! :player :at dest)
(print "You go to the " dest " and see " desc ".")))))
...having done these things, I feel ready to factor this out of my toolbox repo into its own thing. This is quite the challenge as the datalog and minikanren implementations became more coupled (on the parsing and data management sides). Due to issues with circular imports and wanting to be able to do (import logic) and (import logic/datalog :as dl) and (import logic/minikanren :as mk) on the same repo, with things like facts! (to add rules) being bare or mk/facts! depending on the import, I am quite confused on how to go forward. I will spend the weekend tackling this problem.
The API surface also still needs work. I am quite attached to s-expr but array programming taught me it isn't the only way. Horn clauses exhibit quite some elegance, but :- doesn't really fit in an s-expr... @frankmcsherry mentioned issues with tacit binary relations (which graph query languages use) but I still need to experiment. Once I find something I love, I can solve more problems, make a spec and then some other implementations for it!
I will also read more BQN docs and possibly pair program.
More running as I got back into it recently and read some papers from Peter Naur who I discovered recently!
Cosplaying at local comic con
Reconnecting with coding by hand just for the fun of it. Just got a first version of HRW/rendezvous hashing in Elixir that covers the basic algorithm, skeletons for O(log n) lookups, and weighted and "bounded" variants https://github.com/joladev/hrw
Also want to play around with a library to easily add per blog post OG images that goes with NimblePublisher.
I'm running a workshop closing sale which is basically friends swinging by to re-home almost all of the tools and materials I collected over a couple of decades. My goal is to end up with only what will fit in my camper van and the smallest uhaul trailer.
I'll have my family over for Mother's Day and a belated birthday celebration for my younger brother. Hoping to also get to prototyping a new CI system using a WASM/WASI orchestrator to address many of my complaints with GitHub Actions/GitLab CI/every other CI provider.
Work is getting to be pretty stressful, a mix of being in the "find PmF" stage of being at a startup and the piles of vibe coded slop slowing down progress (while giving leadership the impression that we should be moving faster because of it). I've had a +6,045, -4,457 PR that's been sitting in my queue for like 3 weeks now because I don't have the time or energy to review it in addition to all the other expectations and ops. Serving inference with tight SLAs is... not easy, the GPUs are very temperamental and will gladly stall if you hold them even slightly wrong. The job market scares me. If I end up getting laid off it could be a long time before I find work in this industry despite having previously very in-demand skills and a decent network.
All this is to say I'll probably be working this weekend, again.
My wife and daughter are away so I have the house to myself (the menagerie not withstanding) and I am spoiled for choice. Forecast is lovely, so I should try to find outside stuff, or at least some painting since I can reliably open the windows for the first time.
And yet. I've been roughing out a historian for codebases with Claude and it seems to be at a tipping point in terms of whether it's worth pursuing. It's an idea I've been fascinated with since working at a company with a huge 15 year-old codebase with some #TODO comments that were almost as old. My idea was to take the idea of the field historian from the military: recording what was done and why and deriving lessons from the positive and the negative. The basics are actually really pleasing but they're running against either tiny repositories or a small subset of files in a larger repo. The only backend I have right now is just claude -p for examining individual files and this puts a ceiling on performance.
But I really want to have a full story from a large codebase because that unlocks some of the cool stuff I've already roughed in in terms of defining fiefdoms/ areas of expertise, people who work together, looking for outliers (Person X never works late at night, they did here -- why? Was the result positive?). I've got the backend running in parallel and it can resume smartly. I guess I really need to just suck it up and cut it loose on something bigger overnight.