19
votes
What programming/technical projects have you been working on?
This is a recurring post to discuss programming or other technical projects that we've been working on. Tell us about one of your recent projects, either at work or personal projects. What's interesting about it? Are you having trouble with anything?
I've been favoring golang over python recently for writing programs to fix small everyday nuisances. Google Gemini seems to be quite good at writing golang but mostly, I imagine, this is due to my inexperience with it.
Normally, I'd just use mv to move files off a large hard drive to many smaller drives but that's difficult to do when the big drive is read-only. So I wrote a little program that keeps track of the remaining files, asks the user to "insert disk 2" (could be a different mountpoint), and also allows quiting and resuming.
splitcopy/main.go
I should double check the sync.Cond/mutex stuff as maybe that could be written more concisely but I'm pretty happy with this.
I only had to prompt Gemini specifically about how to treat paths to be relative to input and output prefixes, tell it to prefer certain go libraries, and tell it to use a struct instead of passing more than 3 parameters around.
edit: got rid of the sync.Cond. I think it's simpler overall now but I may have introduced a couple race conditions for a second there--the flow is more complex than what it looked like at first glance. Also, I added progress information
edit2: Another thing I whipped up last night is throttledisk! I think I've had the inkling for a tool like this before but it always seemed to be unclear how to build it--or maybe I made it before but forgot the name of the script :)) In any case this script helps if you have multiple concurrent
mvoperations going from one disk to another and you don't want either disk to run out of space. It will pause the process until there's enough room. I run it like this:Where I'm moving files or torrents from one disk to another, passing in the destination disk to
throttlediskso that it knows how much space there should be before continuing. Right now these are hard-coded as pause at 20GB free, resume at 30GB free. It works fabulously! The only caveat I have is that it runs the application in the background and any input your program might be expecting won't be passed to it. Let me take a look to see if there's an easy fix for that...My space simulator turned out super nice, and is one of the few things I have shared, and immediately saw a lot of resonance. It was at the top of /r/internetisbeautiful yesterday and it feels super nice to see others enjoy it too.
It's a free web app sort of like universe sandbox (but much much simpler since it needs to run in the browser)
try it here
I added a way to turn the planets into sounds, which I think is something I'll continue working on in other projects. I have like multiple Pis at home, and microcontrollers, but I might just buy a new one here, so I can buidl stuff on the road. I'm also looking into how feasible it is to travel with a 3D printer
So that's something that got me super excited. Then, I also created a site to give me and friends a daily quest (I started reading solo leveling last week)
here
My moodboard is being used by my girlfriend and I, and I am super happy with it. And next I think I'll build a page to showcase all of the stuff I work on :D Since I want to share more stuff. It's super thrilling to see people enjoy what you're making, even if it's just stuff you built for fun for yourself. But I think if you enjoy using what you build, you're building something that's pretty good
I bought my first Flesh and Blood deck. For those unfamiliar it is a card game in the style of Magic The Gathering, Yu-Gi-Oh, etc and my wife finally convinced me to give it a try.
As a fun project I decided to create a generic program around Flesh and Blood written in Python. Plenty of these kind of tools exist online, but I just wanted to do it for fun. I am not a traditional developer, my actual job consists of using FileMaker which is a database with strong GUI elements and occasionally tying in a Python program with that.
So, for the first time, I kind of just 'vibe-coded' this with an AI. Honestly, I'm really surprised how well this worked, I had a little graphical app in like two hours that could do simple basic things like store card data is a sqlite database, perform searches, create and save decks, load decks from a text file, etc. I had used AI in the past, but not as a "I'll give you prompts, I'll get your responses and review them, and then prompt again/clarify something/point out a needed correction, then implement" where I did very little lifting.
As someone who hasn't used TKinter, sqlite, etc in a regular way for the last 5-10 years it pretty much handled itself after some gentle pushing, which is convenient because I feel like I always used to struggle with things like placing objects where I wanted them in TKinter. Which is definitely a skill issue for me.
Anyways, I plan on expanding this out. Eventually I'd like to do things like analyze games and decks along with a lot of little things. It's nothing fancy, but its just kind of cool to work with. Just kind of getting versed in the game while looking through things is kind of cool.
After my last project, I’ve been making various small utilities.
The most useful among those is probably
ril, a read-it-later CLI app that stores URLs for, well, reading them later. Because I don’t like cluttering my bookmark toolbar with stuff and like to snooze things for a bit occasionally, browser bookmarks did not fit the bill. There are a few Firefox addons I could maybe combine to do something similar, but I never managed to find ones I liked for the purpose.Now a bespoke program that does exactly what I need exists.
I used AmpCode as an alternative to Claude Code for this project. Despite using the same model (Claude Opus 4.5), the two programs feel very different, with AmpCode feeling much more like a tool (output is extremely terse), as opposed to Claude Code, which feels more like a junior programmer (“Now let me do X...”).
After spending about 30-45 minutes writing what I wanted, I handed that off to the agent. I expected to have to iterate on it at least for a few turns, but no. Claude Opus read the SPEC file I supplied, and got to work, churning out about 700 lines of Golang code and twenty-ish BATS tests -- one-shot.
The result works exactly as specified, though I later noticed that I did not specify a
--helpflag, so it just complains that--helpis not a valid URL when invoked with that...I tried out AmpCode, but stopped using it when the “Librarian” wanted vaguely scary permission to access to my GitHub account in order to read a public repo. Did you notice that? Is there a workaround?
I didn't connect it to GitHub, so the Librarian did not come into play for me at all. From what I understand, it is used for searching the code of dependencies hosted on GitHub, similar to the Context7 MCP server, but more flexible.
To write
ril(and a few other tools)I just created a new git repository without a git remote every time, and it worked fine that way. I'm a bit paranoid though, and run coding agents in a container (git push/pull via SSH into the container, so it never talks to GitHub directly).Other things that may be surprising (even though spelled out in the manual), or may even be deal-breakers:
freetier does keyword searches in the code-bases you runampin, in order to better target the ads; that's part of why I got into the habit of running it inside of an Incus container, and only give it access to data I wouldn't mind becoming public.The starting credits for the paid tier do last for a good while, but I found it worth to use the free tier for simpler tasks that don't warrant a model of Opus caliber, but of course that opts you into the ads and keyword searches...
My wife wants to participate in Dry January, and I would like to quit drinking as well. To support this, I've created a sobriety tracking application: https://drystreak.app.
It's very simple, works offline, and has allowed me to explore ampcode, which I enjoyed.
I developed this app because when I quit smoking five years ago, a similar application helped me stay smoke-free. Unfortunately, many of these apps are cluttered with ads and not very user-friendly. That's why I wanted to create one myself and hopefully share it with others who might find it useful.
Hey that's awesome! I used a quit smoking tracker a long time ago that I can't recall the name of. But I do recall that it included some stats to help with motivation - for instance, you could enter the average cost of a pack of smokes you used to buy and how often you smoked and it would tell you how much you were saving daily, weekly, monthly, etc. Maybe that could be a feature to add? I know when I quit drinking a few years ago, there was a lot of "well shit, I just saved 250$ this month. Maybe I'll treat myself to ___" moments that really helped.
It also had health statements in there like "after 6 months, your lungs are back to 50% capacity" or something like that. Though obviously with any sort of health statement, likely better to steer clear unless you really know what you're talking about.
Best of luck in your sobriety journeys - it's hard at first but it gets much much easier. Dry January is honestly the hardest bit - especially if there are lots of post-holiday events and stuff and cousins who won't take no for an answer (speaking from experience...)
I tried out exe.dev by writing a little website for extracting quotes from webpages as Markdown. It’s handy for making Tildes posts. It works fine for reasonable web pages such as blog posts, but not for paywalled articles or archive.is pages, which can only be loaded by a real browser running JavaScript.
So I decided that I would rather have a Chrome extension and started over.
For that project, I thought it would be better to work on my Mac laptop, but running an AI coding agent there seems a bit dangerous, so I looked into how to sandbox it, and decided on using VS Code with a devcontainer.
I haven’t used Docker before and decided on using OrbStack as an alternative. It seems compatible with VS Code devcontainer support, provided OrbStack is installed with admin access, which is needed to set up a socket the same way as Docker.
Getting Claude Code running in a devcontainer was more of a pain than I expected. Installing the tool itself is straightforward via npm, but OAuth authentication fails because it redirects back to localhost. The trick is to cancel the first URL it gives you, and then it will print another URL that doesn’t redirect back again. Instead, the website displays a code that you can copy and paste.
The next step was to configure it so I don’t have to log in again every time I restart the container. To do that, I had to mount both /home/node/.claude.json and /home/node/.claude/ to the local filesystem, so the contents would be preserved.
So now I’m trying out Claude Code to write a Chrome extension, and it seems okayish, certainly not as easy as creating mini-websites with exe.dev. In part that’s because writing a Chrome extension is more obscure and the documentation isn’t that great. I might try the pi coding agent instead of Claude Code because it’s a more minimal tool.
curious how you'll find it. I'm quite a big fan of claude code myself.
Haven't tried it with extensions though
I decided that I like a web UI better and I don't need so many agent features, so I abandoned Claude and went back to using exe.dev. I blogged about my setup here.
Still a big fan of exe.dev and Shelley and Claude Opus 4.5. This quasi-vibe-coding stuff is addictive like a good video game.
I have recently pulled the trigger and got myself a UGREEN NASync DXP2800. Which is a prebuild NAS using an Intel N100 cpu and 8gb of memory.
Instead of using the provided OS I opted to put Unraid on it. I have a bit more faith in future updates and stability from Unraid. I also like Unraid's ease of use compared to TrueNAS.
For storage I set it up with a 1tb cache pool and an 8tb array. On the software side I have set up containers for Jellyfin, a few arrs (prowlarr, sonarr, radarr and bazarr), qbitorrrent with vpn and thelounge (to idle in IRC).
So far I am really happy with it. I was a bit worried the memory wouldn't be enough and with current ram prices didn't want to buy extra. But that hasn't been an issue at all so far.
I am battling .500 this week.
Working with the developer of Dudelings: Arcade Sportsball to get the demo up to snuff and adding it to Portmaster's Ready to Run catalog. I ran into a shader error in the latest version that worked fine on the previous version of the retail program. Taking a break from it.
My brother bought me a replacement Playdate for Christmas after I cracked the screen on my old one. I'm of mixed feelings on that, as I wouldn't have spent that much money on it, as I've fallen off the ecosystem a little and it was still perfectly usable with a little corner of the screen blacked out. But on the other hand, I did purchase a replacement screen in case it got worse, and returning gifts is for quitters, so I figured I should try to install that screen on the old device. I have tried, and it has bested me for now.
But in the win column, I'm using a Steam Deck dock as an SD card reader for now, and that saved me from having to set up a laptop that had an SD card reader built in, but none of the work was being setup on it, so a bit of a win that I put a bandaid on a situation. That's pretty good I suppose.
Also noticed my brother's battery starting to turn spicy within his laptop chassis, and managed to extract it and keep the laptop going on wall power only. Can't really dispose of it yet because of the holiday, but it's in the garage away from anything else swimming in a bucket full of kitty litter until it can be better taken care of.
I've done a lot of work on my Tiny Flowers mod for Minecraft. Maybe too much to the point where I haven't had a break this summer because I've just been working on this. I haven't published it yet, since I'm considering waiting for version 26.1. Still, I am building it from 1.21.11 at the moment, so if you want to try it out (and do some bug hunting for me ;D) there are a couple of ways to get the .jar file.
build.zipartifact from the workflow page. Just select the latest build, scroll down to artifacts, and download it.There have been some minor changes since the last post, but the most recent one (as in from today) was making Eyeblossom behaviour configurable. Now any flower can have something in its definition to say "turn into this other tiny flower at day/night" and it will just work. I see this mostly being useful for mods that add Eyeblossom-like flowers that change based on the time of day, though it can also be used for fun. You could have a set of flowers that change themselves over time, though that would likely get stuck in a pretty rapid loop as a flower changing also notifies other nearby flowers to change too. This work also opens up the possibility for me to define other special behaviours for flowers for more special interactions later on.
But by far the biggest news is something I mentioned in the previous thread. Since flowers can now be defined by other mods using data and resource packs, I wanted to make a way to make those packs easily. Mods can include data and resource packs without much hassle, so why not make a website that creates mods for my mod? Well, I've now made that site. There are a couple of features I think are pretty cool:
I'm actually really happy with how this all turned out. It has been a bit of an obsession, and I haven't been able to do anything else really, but there's been some good learning.