Don't wanna be here? Send us removal request.
Text
Currently reading: Failure to Launch: A Tour of Ill-Fated Futures by Kel Mcdonald 📚
0 notes
Text
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.
0 notes
Text
Like I said, I don’t love my latest game, but it feels good to add something to the /games page after six months.
0 notes
Text
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.
0 notes
Text
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.
0 notes
Text
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)
0 notes
Text
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 stuff 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, and DynamoDB. The first “maybe this sucks” moment came when I started working on tweaking the HTML and CSS, I didn’t have a good way to preview changes locally without a cdk deploy, 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 started making 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.
0 notes
Text
It turns out, it wasn’t that difficult to adapt my little loop programming system to 3D. Maybe the year of 3D is back on?
For the moment though, I think I will switch my focus to Godot Wild Jam 82. The theme is “unseen”. This is probably a terrible idea, but right now I’m thinking: echolocation?
0 notes
Text
TIL I have an IMDB page, from supporting Adult Rappers on kickstarter 10 years ago.
0 notes
Text
How DC Tech Events works
The main DC Tech Events site is generated by a custom static generator, in three phases:
Loop through the groups directory and download a local copy of every calendar. Groups must have an iCal or RSS feed. For RSS feeds, each item is further scanned for an embedded JSON-LD Event description. I’ll extend that to support other metadata formats, like microformats (and RSS feeds that directly include event data) as I encounter them.
Combine that data with any future single events into a single structured file (YAML).
Generate the website, which is built from a Flask application with Frozen-Flask. This includes two semi-secret URL’s that are used for the newsletter: a simplified version of the calendar, in HTML and plaintext.
Once a day, and anytime a change is merged into the main branch, those three steps are run by Github Actions, and the resulting site is pushed to Github Pages.
The RSS + JSON-LD thing might seem arbitrary, but it exists for a mission critical reason: emoji’s! For meetup.com groups, the iCal feed garbles emojis. It took me some time to realize that my code wasn’t the problem. While digging into it, I discovered that meetup.com event pages include JSON-LD, which preserves emojis. I should probably update the iCal parser to also augment feeds with JSON-LD, but the current system works fine right now.
Anyone who wants to submit a new group or event could submit a Pull Request on the github repo, but most will probably use add.dctech.events. When an event or group is submitted that way, a pull request is created for them (example). The “add” site is an AWS Chalice app.
The newsletter system is also built with Chalice. When someone confirms their email address, it gets saved to a contact list in Amazon’s Simple Email Service(SES). A scheduled task runs every Monday morning that fetches the “secret” URL’s and sends every subscriber their copy of the newsletter. SES also handles generating a unique “unsubscribe” link for each subscriber.
(but, why would anyone unsubscribe?)
0 notes
Text
I’m at the AWS DC summit today and tomorrow.
Seems like people are really excited about this AI stuff?
0 notes
Text
Rest in peace Bill Atkinson.
Hypercard was the thing that really hooked me on computers as a creative tool.
0 notes
Text
Loopnik Begins
Some progress on the “beat game” remake (for the moment, called “Loopnik”). It’s much easier now that I have a better idea of what I’m doing and how to structure things. Aside from level advancement, this does everything the original does, with half the lines of code.
The “graphics” are kind of charmless and generic right now, but they’re placeholders. The donut is from Kenney.
0 notes
Text
From so bad it's good to so good it's good
My first game jam entry was beat game, submitted to the So Bad It’s Good Game Jam in July 2023. Until then, I’d worked on tutorials, toy projects, and had done some tinkering on a recreation of Spin Doctor.
The game ranked 4th overall and won the “uniqueness” category. I’m proud of that, but clearly the “so bad” theme worked in my favor. I periodically wonder what a good version of that game would look like, and I’m looking for a way to get back into game dev after a couple of months out of it.
So, that’s my summer project, I think. I’m eyeing a few upcoming game jams, but if I get some momentum on this, I’ll probably just keep plugging away on it.
0 notes