It’s hard to read stuff like this and not think, maybe the internet was a bad idea after all.
All of the Marvels 📚
I’ve finished listening to All of the Marvels by Douglas Wolk.
From the premise, “man reads 27,000 comic books”, I expected an A.J. Jacobs-style story about how attempting a ridiculous project impacts the author’s life and relationships, with some tidbits about the comics thrown in. That would have been OK with me!
This is not that sort of book, though. Wolk spends each chapter pulling on a thread of the Marvel story, either for a character or team (Spiderman, Thor, The X-Men), or a theme (film, music, Presidents), highlighting specific issues that are notable. It’s one man’s highlight reel of the Marvel universe, and I enjoyed the journey.
If I had been reading this book on paper or device, I would have dog-eared a lot of pages, or taken notes. I listened to the audiobook, mostly while driving or walking, so I couldn’t note as much. I was still able to remember or jot down a few things. Here are the comics ‘All the Marvels’ has added to my reading list:
- Hickman’s Fantastic Four
- Priests Black Panther
- Simonson’s Thor
- Ryan North’s The Unbeatable Squirrel Girl
- Warren Ellis Thunderbolts
- Some amount of the Dark Reign saga
It’s nice top see that Sound Blocks shipped! I spent a few minutes playing with it this morning, and it seems to be what I hoped for: midinous for someone who doesn’t want to have to figure out all the MIDI stuff.
My first song was… nothing worth sharing. But maybe I’ll be able to make some game music with it.
Currently listening: All of the Marvels by Douglas Wolk 📚
Ad Hoc
Today is my first day as an Ad Hoc employee. I’ve watched from the sidelines over the years as they’ve hired a number of my favorite people, both former CFPB colleagues and “internet friends” whose work and careers I’ve taken an interest in. I’m looking forward to being part of the team!
The actual client I’ll be working for is… a different civilian federal agency with a financial focus. You might be thinking “out of the frying pan and into the fire”, and aren’t completely wrong about that. My discussions with folks from Ad Hoc, the “prime” contractor subcontracting to Ad Hoc, and the client agency have convinced me that the work is necessary and should be funded for some years to come. I think it will be stable at least through the length of the contract, so long as I do good work.
Finished Listening: War for Eternity by Benjamin R. Teitelbaum 📚
Endings
Hello from Camp T. Brady Saunders. It’s the last day of summer camp. The kiddo mostly had a good time, but we’re both ready to go home.
Today is technically also the last day that I am a CFPB employee(last day actually working was 7/3). I wasn’t laid off this time, I’ve got a new job that starts Monday. I’m pretty excited about it, but I’ll save writing about that for next week.
Finished reading: Hidden Systems by Dan Nott 📚
Finished reading: Failure to Launch: A Tour of Ill-Fated Futures by Kel Mcdonald 📚
An excellent graphic journey through all sorts of could’ve-beens: including Y2K hysteria, decentralized wind power, robot dogs, virtual pop stars, a mechanical duck that poops (maybe), and Louisiana hippos.
Currently listening: War for Eternity by Benjamin R. Teitelbaum 📚
Currently reading: Failure to Launch: A Tour of Ill-Fated Futures by Kel Mcdonald 📚
I ♥️ BTRFS Subvolumes
I’ve been mucking around with my operating system setup for reasons too tedious to describe here. One hilarious bit of hijinx involved trying to use the Nobara repository exactly in the way it says not to…
It is NOT recommended to try to upgrade your Fedora installation to Nobara and support for doing so will not be provided.
Turns out, there are reasons.
But, the point of this post is actually a nice thing I discovered:
- When you install fedora, by default your
/home/
directory is placed on a BTRFS subvolume - If you ever need to install again, the Fedora installer recognizes the subvolume and can preserve it.
In the past, if you wanted to re-install a distro and preserve all of your files, you either needed the foresight to put /home'
on it’s own partition or device, or have backups. Now, it’s no big deal.
Like I said, I don’t love my latest game, but it feels good to add something to the /games page after six months.
The Invisible Alligator
I’m not that proud of The Invisible Alligator in its current form, but the Godot Wild Jam 82 deadline is here, and it’s nice to ship a game after almost 6 months of not doing much gamedev.
It could use more levels, sound and music, animation, more NPC variety, and more effort spent on graphics. The core gameplay isn’t that fun yet, but Benjamin calls it “satisfying”, so that’s something.
I started out thinking about it as a 2D version of Hitman Go, with animals. It ended up in a place that (if built out more) would feel a bit like Hoplite.
Maybe I’ll keep tinkering, towards a more polished post-jam version.
Finished reading: Drawing Blood by Kevin Eastman 📚
Confession: I picked this up thinking it was non-fiction and that Shane Bookman was a real author.
One of the nice things about going to events again is seeing the fancy offices people work in.
(brought to you by the seltzer dispenser at The College Board)
Currently reading: Drawing Blood by Kevin Eastman 📚
Musings of an LLM Using Man
I know, the internet doesn’t need more words about AI, but not addressing my own usage here feels like an omission.
A good deal of the DC Tech Events code was written with Amazon Q. A few things led to this:
- Being on the job market, I felt like I needed get a handle on this stuff, to at least have opinions formed by experience and not just what I read on the internet.
- I managed to get my hands on $50 of AWS credit that could only be spent on Q.
So, I decided that DC Tech Events would be an experiment in working with an LLM coding assistant. I naturally tend to be a bit of an architecture astronaut. You could say Q exacerbated that, or at least didn’t temper that tendency at all. From another angle, it took me to the logical conclusion of my sketchiest ideas faster than I would have otherwise. To abuse the “astronaut” metaphor: Q got me to the moon (and the realization that life on the moon isn’t that pleasant) much sooner than I would have without it.
I had a CDK project deploying a defensible cloud architecture for the site, using S3, Cloudfront, Lambda, API Gateway, Cognito, and DynamoDB. The first “maybe this sucks” moment came when I started working on tweaking the HTML and CSS, and I didn’t have a good way to preview changes without doing the whole cdk deploy
routine, which could take a couple of minutes.
That led to a container-centric refactor, that was able to run locally using docker compose
. This is when I decided to share an early screenshot. It worked, but the complexity was starting to make me feel nauseous.
This prompt was my hail mary:
Reimagine this whole project as a static site generator. There is a directory called _groups, with a yaml file describing each group. There is a directory called _single_events for events that don’t come from groups(also yaml). All “suggestions” and the review process will all happen via Github pull requests, so there is no need to provide UI or API’s enabling that. There is no longer a need for API’s or login or databases. Restructure the project to accomplish this as simply as possible.
The aggregator should work in two phases: one fetches ical files, and updates a local copy of the file only if it has updated (and supports conditional HTTP get via etag or last modified date). The other converts downloaded iCals and single event YAML into new YAML files:
- upcoming.yaml : the remainder of the current month, and all events for the following month
- per-month files (like july.yaml)
The flask app should be reconfigured to pull from these YAML files instead of dynamoDB.
Remove the current GithHub actions. Instead, when a change is made to
main
, the aggregator should run, freeze.py should run, and the built site should be deployed via github page
I don’t recall whether it worked on the first try, and it certainly wasn’t the end of the road (I eventually abandoned the per-month organization, for example), but it did the thing. I was impressed enough to save that prompt because it felt like a noteworthy moment.
I’d liken the whole experience to: banging software into shape by criticizing it. I like criticizing stuff! (I came into blogging during the new media douchebag era, after all). In the future, I think I prefer working this way, over not.
If I personally continue using this (and similar tech), am I contributing to making the world worse? The energy and environmental cost might be overstated, but it isn’t nothing. Is it akin to the other compromises I might make in a day, like driving my gasoline-powered car, grilling over charcoal, or zoning out in the shower? Much worse? Much less? I don’t know yet.
That isn’t the only lens where things look bleak, either: it’s the same tools and infrastructure that make the whiz-bang coding assistants work that lets search engines spit out fact-shaped, information-like blurbs that are only correct by coincidence. It’s shitty that with the right prompts, you can replicate an artists work, or apply their style to new subject matter, especially if that artist is still alive and working. I wonder if content generated by models trained on other model-generated work will be the grey goo fate of the web.
The title of this post was meant to be an X-Files reference, but I wonder if cigarettes are in fact an apt metaphor: bad for you and the people around you, enjoyable (for some), and hard to quit.
It turns out that echolocation has definitely been done before.