15
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 got an itch to play the original Zoo Tycoon, but quickly realized that a game from 25 years ago doesn't exactly follow modern sensibilities when it comes to keybinds and general controls. There's no way to rebind keys, and panning the camera is done with the arrow keys or by dragging the mouse to the edge of the screen.
Over the course of a couple of days I got a mod working that implements rebindable keys and a custom, mouse-movement based camera control.
The mod uses DLL injection as a vector into the application, at which point I can intercept and modify keypresses and other input events.
The most complicated part has been ensuring that modified input events don't interact badly with the game's existing keybinds.
Most of these issues could be fixed by either permanently or temporarily stopping specific inputs from reaching the game, but one case caused a lot of trouble.
Text input fields -- like the ones for naming your zoo, animals, zookeepers and so on obviously need [A-Z] and [0-9] characters passed through even when those keys have been rebound. So I needed a way to determine whether a text dialog was open and in focus. That was easy enough for popup windows created by the Windows API, such as the save dialog, but the in-game menus didn't fire any Win32 events I could listen to.
Solving this meant scanning the game's memory at runtime to identify the trigger for text input focus and un-focus. Luckily it lives in the global address space, and since the game is old enough to load at a fixed base address, it sits at a static, predictable location. With that address identified, I could wire up the DLL to monitor it and temporarily disable input remapping for as long as a text field is in focus.
The implementation has relied pretty heavily on generative AI, specifically Claude Code.
I've been pretty hesitant in using these tools, but loathe as I am to admit it, it has reached a point where not doing so is actively hindering my future prospects.
The concepts necessary for this project (DLL injection, memory snooping, C-programming) are all things I only really know on a conceptual level, so it seemed like a good risk-free place to experiment with an AI.
The process was mostly pretty good. The AI got stuck a few times and needed real direction to avoid going in circles with solutions that at best did nothing and at worst regressed previously verified functionality.
There is no doubt though; the AI significantly increased the speed at which useful features were implemented.
Had i done it without AI assistance I don't think I'd have gotten further than getting the DLL injection working and maybe wired up a simple hard-coded key rebind
I've been working on some hardware stuff!
I've been really getting into home assistant, as I am trying to decouple a lot of things in my house and personal life from big tech.
I recently bought a couple ESP32 boards and some breadboards. I haven't really dabbled too much in electronics / hardware since high school, and it has been really fun!
I have an E ink display I am working on that queries my home assistant API, and displays a dashboard. This runs on a simple raspberry pi 3, and..long story short my PC has a local web server running that does all the lifting and sends just an image of the page to the pi for the e ink display to show.
So something I have thought of is, currently we track our cats litter box habits on pen and paper (my partner is a vet tech and insists we should, lol). I figured I could make a small device and instead of pen and paper to log what they do, log the habits in a database and display a graph of their habits on the e ink display..I know it sounds insane lol, but it could be good for easily spotting if there is a problem.
Anyway, these little boards are so so impressive, and things have come so far since when I was in HS. So simple to hook up, and the yaml you write for ESPHome is super easy. I bought a little rotary encoder, and screen, and it is coming along nicely. I bought some project boards and am looking forward to 3D printing out a box at my local library when I get to that point. I'm already thinking of new ideas for the other two boards that came in the bundle.
Really recommend digging into these boards if anyone has ever been curious about hardware!
Oh, I recently really got into the Home Assistant thing, too!
I've been playing with some ESP32-CAM boards in order to run AI-on-the-Edge and automate reading my water/electric/gas meters and get the data into Home Assistant.
I have the water meter one working great, but I've been banging my head against the wall getting the gas and electric ones to read correctly.
For both of them, I think it's the same problem: glare from the flash reflecting on two acrylic surfaces (one on the waterproof enclosure for the ESP32, one on the enclosure for the meter).
I really want to get electricity usage tracking without having to spend a few hundred dollars for a Shelly + install... :/
Oh, this is something I'm interested in too. Do you have any particular reading about it? Monitoring my electric meter is something I've really wanted.
The only reading I can really point you to is the docs.
I've mostly gotten my gas meter camera working, which is pretty exciting, but I'm still struggling to get my electric meter—the one meter I was initially going after, to start with!—and I'm running out of options due to physical limitations and the location of the meter on the exterior of the house. I just can't move the device farther away and I just can't seem to get rid of the glare and still maintain a reasonable perspective and brightness. :(
So I'd probably recommend exploring alternatives like connecting directly to your meter via your power company, intercepting the reading with an RTL-SDR, or one like the Shelly Pro 3EM before trying to go the AIOTED route unless you have all the stuff lying around.
Update: I ended up enlisting Claude's help to train a new digit detection model using actual samples of my meter's digits and I'm finally getting good, consistent results!
So I retract my previous statement about exploring other alternatives. I spent over a week chasing physical tuning (lighting/position/angle/camera exposure settings/etc.) and couldn't get consistent reads, but a couple hours of training on 224 sample digits captured over ~18 hours made more impact than any other change I tried.
I'm curious, what did you buy? I might like to tinker with cameras one of these days.
I just got ESP32-CAM-MB with the OV3660 camera; you can find a two pack of them on Amazon for ~$20 in USB-C or Micro USB variants. The MB makes it easy to plug a USB in to a PC to flash/power.
Just FYI that the OV2640 camera seems to have better hardware support across projects, depending on what you want to do with it. But the OV3660 does have native support in both ESPHome and AIOTE, so it might not matter that much.
Many things, especially my SO ARM 101 - I am super excited to work through some advancements in Robot learning with those arms. I am really close to building a second pair to be able to do 2 handed manipulation.
And I am still working on Luna - My space simulator https://luna.watermelonson.com/
where I am hitting the weirdest issue. It's been removed from the google index. And I just don't understand why. Even users literally typing into google luna watermelonson don't get this website shown. It's so infuriating because I know that thousands are using it and looking for it
It's a small consolation, but it ranks on startpage and duckduckgo. My searxng instance had no problem finding it
that's good to know, thanks. I think it was just the fact that it's a pure javascript app without much text for the search engine that causes these problems. But it's really frustrating since most users visit via google
Is it worth maybe having some fallback text/page in the case of no js, or, a landing page with a description/info that isn't js fueled that one could enter the simulation from?
Yeah I might have to go that way. I really liked the 0 friction approach, but if no one finds the tool - what’s the use
When you first load the app, you present a text summary + button choices. At a minimum, since this is the default view, it should be built in pure html + css, with the buttons being the entry point to launch the app. Maybe some js to override the default view if a cookie is present (I.e. They've already interacted with that view).
Edit: also, while poking around search engines for Luna watermelonson I saw the demo of your robot arms, WOW!
Thanks for the advice!
The arms are great, I printed them, but huggingface designed them, I just realized that I’ve done a masters in robotics and I don’t have any on my own. So instead of just doing all the AI in software, I wanted something to interact with in the real world.
And by building this and learning with it I’m already learning so much about what I want to look for when I build my own.
On my personal links site, I've been working on behind-the-scenes, admin-only stuff. The UI for editing rules for autotagging posts is quite a bit better.
Playwright tests keep failing intermittently, so I'm trying to stabilize them. I've been prompting the AI to either figure out the causes or if it can't, improve diagnostics when there's a failure. But that's been quite a rabbit hole. Looks like Chromium is crashing intermittently, and I don't know why, but we've improved the crash reports. Also, Playwright tests tend to either be slow because they have a lot of automatic short waits to browser to settle, or if you take that out, they have race conditions between the test and the JavaScript executing in the web page. We're adding explicit synchronization, so the Playwright test knows when the web page is ready.
In effect, we are gradually implementing a test framework on top of Playwright. I wonder what other people do?
Added a nice looking frame for content policy on the sign-in page for my forum app. The tricky part is actually making sure the mobile versions stretch well and doesn't look too horrible despite that we don't officially support mobile.
Need to spend a lot of time to research and learn different web animation libraries and figure out how to build a very elaborate effects layer but also at the same time figure out a way to do effects so that it adds to the reading experience instead of excessive animations that only look nice.
Got Calibre and its content server working to get books to my Kobo with KOReader.
Now to see if I can set up some sort of automation/workflow to easily get the latest chapters of the few web serials I follow to convert into epubs and loaded into Calibre without too many manual steps…
I go about this by using ebook-convert, the CLI converter that is part of Calibre. I never took a liking to the Calibre UI but the CLI conversion is invaluable.
Just today I made a Dockerfile to have a minimal Alpine based image to run ebook-convert from because I don't want to deal with PyQt and the rest in my main OS image. My dream is an ebook-convert quality CLI conversion tool without the GUI baggage.
I finally implemented true infinite zoom + pan in my drawing application. snip Builds are on itch.io. I had to try so many things before I got something that works.
I also finally went over my backlog for some of my gamedev libraries. Went through it with Claude and I got something like 1 year's worth of progress in 2 days. snip This one is a shape drawing library for MonoGame. It draws all shapes with a single batch. I've been liking development with LLMs even though I wouldn't have thought so in the past. For me programming is about solving problems and I'm solving way more way faster now.
I've been letting my computer run while I sleep or when I'm at work. It's been training neural nets to learn to play my chess variant (it doesn't actually learn to play but to evaluate positions which is much simpler). I wrote about it in a previous thread. It's pretty cool every time that a new better neural net is found. Then I watch it play and the strategies are pretty cool. I'm training a 15 hidden layers deep neural net right now. As they become better and better, the current strongest one can beat the previous strongest ones while searching fewer positions.
basically, this is just a simple spreadsheet that uses Gemini to pull book into.
This is how it goes
onFormSubmitthat asks Gemini for specific infoThe result...
Next up is a good recommendations column. This is about 10c per 100 books. I prefer this since it avoids the terrible summaries the publishers give out.
I don't need that. I already know the dude can write. The other benefit of this is that I can submit a book when I'm out and about and don't even really need to look at the sheet until I'm out of ideas. I have the same thing for movies using IMDB or Letterboxd to get the IMDB ID then I use OMDB and TMDB for the data.
For the shortcut:
Apps and URLsfromShare SheetShortcut Inputhttps://www.goodreads\.com/book/show/\d+inURLshttps://docs.google.com/forms/d/e/[form-id]/formResponse?usp=pp_url&entry.[textFieldID]=Matches&submit=SubmitTextThat's it. ezpz.
I've been setting up a Jellyfin server in my homelab and am loving it. As much as I can, I'm trying to rip videos from my Blu-ray collection. Unfortunately, automatic-ripping-machine doesn't work for my 12th gen Intel iGPU for video transcoding, and my efforts to upgrade it to a newer docker distro have been in vain. So I'm building my own from scratch, bespoke to me.
I haven't had much time to work on it due to an ongoing bathroom remodel, but we're going on a beach vacation next week and the forecast doesn't look great, so I might have a good opportunity to work on it!
I'm pouring 20 years of experience from different programming languages, the things I love and hate about them, into my own language. Highlights:
Possibly cool, possibly a big nothingburger, but I also foresee lots of these springing up in the near future. Might be difficult to stand out.
Very possible and maybe likely nothing tangible comes from it, but I think it’s super cool regardless. Great application of learning in a complicated space
Building my own personal finance web app using Next.js. Well, mostly Claude, but still. It's turning out great.
Gets banking data from Akahu.nz and displays categorised breakdowns in tabular and chart forms.