What are you doing this week?
12 points by caius
12 points by caius
What are you doing this week? Feel free to share!
Keep in mind it’s OK to do nothing at all, too.
I’m still here, hurrah!
I’m playing around with Nix and IPFS, as a way to “content-address” inputs. In particular, using a Git tree ID as:
f01781114
to specify it as a hex-encoded 20-byte SHA1 of a Git object). If we ask an IPFS gateway for a “CAR file”, we’ll get the closure of all of the referenced subtrees and blobs.git-hashing
feature)This feels more ergonomic than having to calculate and manage extra hashes, like from a tarball or from IPFS’s “UnixFS” approach to storing files and directories.
My motivation is to have my personal repos reference each other by their Git tree hashes, and have my various machines copy data between themselves as needed via IPFS; rather than pushing and pulling via a central location (chriswarbo.net/git), which requires authentication, etc.
I’ve written up my initial experiments here
At work I’m stuck on a bug involving color overrides on part instances in Catia assemblies.
At home I’m reading through the Vulkan spec and deciding how I’m going to use it from Common Lisp. The obvious, preferred choice, is to use the existing binding, but I’m having problems getting it to compile. Now I’m looking at how much overhead there will be using “cl-autowrap” to generate a binding. I’m also considering writing bindings by hand as I need the functions and structures, but that’s probably too tedious.
Are you planning on using Vulkan from Common Lisp for anything in particular? Or is it just a fun exercise to port it over
I’ve been working on a graphics library for OpenGL for a while now, but recently decided I wasn’t happy with it and want to start from scratch using what I’ve learned so far.
The idea was to be a quick way to get 3D objects on the screen without re-writing the boilerplate code around GLFW, OpenGL, input handling, etc. It’s mostly worked - I can override a few methods to fill in buffer data and setup shaders, and automatically have 3D mouse and joystick support, OpenGL state handling, etc. Unfortunately, a few of the design decisions ended up being pretty clunky but also difficult to refactor out, so I decided to start over.
Since I’m already starting over, it’s a good time to jump to Vulkan. I think a lot of what I’ve learned transfers over to Vulkan pretty well, and the extra boilerplate from Vulkan should get hidden away in the library.
Working on an interactive book/article inspired by https://ciechanow.ski/ Progress is being made but there is still so much work to do
the way Bartosz visualizes stuff is something I was envisioned while being child listening about computers, and later, while multimedia hype. It took another 20 years to get to the sites that are really books with the feedback; but not the feedback from the book to you (i.e. how well you know stuff now basing on tests in the book), but vice versa — you can kinda provide the feedback to the book and it’s changing representation based on that. Super cool, and tasteful too!
interesting week for me: I am designing and building pull-requests for https://tangled.sh. Super exciting to design something so fundamental, from the ground up.
I’ve inplemented what I want to call “round-based” review, which makes a PR immutable and changes are appended as new submissions. it’s coming along nicely and I hope to see some feedback on this from users later in the week when we deploy this.
I’ve also had an itch to build a go compiler for a while now, dunno when I’ll get the time between $WORK and tangled dev.
I am interested to review this but can’t figure out why I need a bluesky account or what it has to do with pull requests.
tangled is a git-collab platform built on atproto: the same protocol that bsky speaks. you can read more here: https://blog.tangled.sh/intro. with tangled; users would bring their existing atproto identity to join the network (they can also selfhost repositories and get the same “big-code-forge” experience, with a fraction of the resources).
since i first commented; we have made a first release as well, you can see a tiny pull request with round-based submissions here: https://tangled.sh/@steveklabnik.com/hello-world/pulls/1
Decided to self host things again and setup a VPS for my personal page and hopefully a forgejo instance soon!! I decided to go with hetzner this time and am exploring podman paired with podman-quadlet so I can run services as rootless containers managed via systemd.
Snagged a Optiplex 790 SFF for dirt cheap at a local thrift store. Plan to clean it out, reapply paste and install OpenBSD. Figure it’ll be a good shared desktop for the kids :)
Attempting to finish my Ansible playbooks for my migration from digital ocean to scaleway. I had hoped to use nix but… nixOS wasn’t available and this is probably for the best as at least it’s quicker for me this way.
I’m still plugging away at my personal search engine, I feel like running a permanent instance is about a week away. It’s been like this for a month. I’m pretty happy with this weeks refactor of the crawler, adding prioritised URLs and a round robin load balancer for the crawl list. I’m hoping to do some work on the index data structures next, but that requires me to go and do some reading - I have “Search Engines: Information Retrieval in Practice” waiting to be read. I still have a lot of ideas for the crawler / parser but they need to be shelved for the time being.
$work is wrapping up for a new job next month.
Continue working on Kikai, my RTS with programmable units. Yesterday I integrated it with my asset library software I implemented to deal with itch.io assets that do not provide any kind of mappings. The asset library allows me to upload several assets, find spritesheet parameters for them (offsets, sprite size and padding), name the sprites I want and export in a JSON that includes the image data, mappings and settings. The game now imports this JSON directly so I can manage my whole asset library like this. The software also allows re-loading the JSON modify it and redownload it. It’s fully stateless.
This week I want to finish the customizable interactive UIs per unit (if you want you can expose custom interfaces for the units so you can create multiple behaviours and switch between them, or you could even have UIs that show custom information or presents sensor or radio data).
After this I need to figure out how to cross compile the rust project using some kind of CI and upload to itch nightly builds automatically with the demo sandbox.
Actually no, I’ll probably work on networking. I feel like if I start building more stuff beyond the basics it will get harder and harder to implement later. Particularly the custom UI is quite dependent on the networking implementation since those are programmed by the user, but the user code will mostly run on the server. I need to design how the system works around this :)
At work: Still fumbling around with huge changes going into multiple small dependent PRs at a company with way too much money but still no tooling for stacked PR workflows.
At home: Hopefully cutting a new release of my tiling window manager with big improvements to multi-monitor (as in, multiple configurations of monitors at different locations) disconnection/re-connection support and state persistence. 🤞
And then… going through the changelog and trying to pick the most interesting things, and figuring out how to explain and/or demo them in a simple way on a release overview video.
Experimenting with Limitless Pendant API — to be honest the pendant is much better than I expected and I have quite some fun with parsing my audible cue for the day. Of course it is also a big security problem, imagine being wired with the mic that is pretty much dumping all the sounds to someone’s AI.
Also trying to wrap my head around the proxmox.
Mostly running the Buildbarn mini-conference we have organized in the bay area and spending time with my team there.
On the EndBASIC front, I got a talk accepted at BSDCan about the little “dev kit” I’ve been building based on NetBSD, so I need to plan the next ~2 months of dev time to have a solid demo of what to show off.
$WORK: Setting up ProGet for production. User accounts, API keys, documentation, oh my!
$NONWORK: With the help of a couple friends I have motivation to work on Garnet more, so hopefully I can do that. I have an idea for how to combine type inference with unification with the normalization-by-evaluation approach I’ve been messing with, so let’s see if it works.
Maybe also play around with Wireguard. I’m sick of dealing with port forwarding.
Working to get https://codeinput.com to a semi-functional stage. There is a lot get an app running and as someone doing mostly back-end stuff, it is easy to underestimate the amount of stuff that needs to be trimmed on the front. For example, something like openGraph tags need to be set correctly so that you stand a small change in the search world.
Writing a small couch-friendly video player based on MPV, SDL3 and OpenGL.
I’ve first tried GStreamer and GTK4 from Python, but that leaked memory for no good reason. GStreamer was also not that eager to allow me adding external subtitles.
At this point I just gave up and started prototyping in C. When I’m happy with the foundations, I’ll port it to Python with ctypes. The idea here is to make it trivial to obtain content from sources I follow, store it and track what I’ve watched.
I have been using Kodi for quite a while, but it feels sluggish and increasing buggy lately and I gave up on the idea of organizing stuff into library that requires external authority years ago. I want files, directories and track content selectively.
prototyping in C. When I’m happy with the foundations, I’ll port it to Python with ctypes.
That’s the opposite trajectory from what I would expect. Care to share the thinking behind it?
Putting the finishing touches on a set of improvements to Decker which extend support for representing text in a variety of non-English languages. There were many complex tradeoffs for arriving at the final design, and certainly not all users will be satisfied, but I think the end result will be useful for many people and many applications.
non work:
I’m working on building a vocabulary test website for multiple languages. I’ve already added Japanese but now I’m working on adding French.
Another week that’s a bit crazy because I said yes to too much (because I want to do it!)
A second car has now thrown a warning light ahead of the MOT in the next fortnight, that’s half the fleet to fix before I can get them assessed and kept on the road. Pretty sure it’s a lambda sensor because that’s the only thing that’s changed recently (and it got serviced/checked by garage a fortnight ago which rules out a bunch of other stuff.) Luckily I have the original sensors from where I swapped the Catalytic Converter last year, but fitting them is a PITA. Joy.
The head unit bracket needs re-printing in something more sensible, and I think I also need to incorporate a back cover into it somehow, or print a new back cover that doesn’t stick out so far to move the screen closer to the dashboard. Doing that will also move it further out of the hot airflow from the vent above it which will be a lovely benefit.
Also going to see a quarter final of the Snooker Players Championship with a couple of friends, also heading to NWRUG (Ruby User Group) on a different night.
I’m trying to figure out how the ELK stack fits into all these AI innovations. I don’t know if it fits in at all and, if it does, in what way.
I’m working on Apache Iceberg integration for our new analytics file format. Java <> Rust FFI is…fun, to say the least
Playing around with general adversarial networks to try and figure out how to use one to predict the subsequent ECG data from a heartbeat.
work-wise, I have some React spaghetti to untangle, nothing fancy.
Experimenting with making a multi-repl repl :P, where each repl runs in it’s own Goroutine and it’s own pane on the same terminal screen. Goroutine part works, translation of keyboard events also quite worked, but the output is still confusing as I’m translating from stdout with ansi escape codes to TCell buffer “drawing”.