14
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 made some improvements to my kid's media player thingy. For context, a while back I made a NFC token reader raspberry pi thing and a bunch of little 1 inch NFC tokens with stickers of her shows and movies so she could have autonomy over her TV time without giving her a tablet or whatever.
I hooked into the PBS Kids API for any token that she uses that involves a currently running show. This will fetch a random episode that could be played on the PBS Kids app and plays it through VLC instead (sorry, McCormick, she isn't seeing the "It's taco night" ad four times an hour this way).
I also did some housekeeping of the tokens and repurposed some because I am running low. I mapped a bunch of her Tonie figurines to play media. The Monsters Inc Tonie will now play the normal Monsters Inc thing on the toniebox and also play the movie if she puts it on her media player. The same thing applies to any character that she has a Tonie for and also visual media.
Any no-longer-aired shows still just work by grabbing a random episode from my server. Wishbone, Between the Lions, Magic School Bus, etc.
I decided to go down a rabbit hole the other day...
It's always bothered me that I can't see the number of objects (files and folders) in a folder in Windows Explorer. It certainly isn't needed everywhere, but my current organization system contains folders that may be empty, and it would be helpful to see that at a glance.
So I discovered that you can write to some of the properties that show in File Explorer through Powershell. The one I decided to use is "Pages". So that part is effectively figured out.
It's also easy to get the count of objects in a folder with a simple powershell script. So all good there.
Now I need to determine how to update these values. I'm not doing this across the entire filesystem, so it shouldn't be incredibly intensive, but I also don't want to slow things down. For these particular directories, I use syncthing to keep them saved across multiple computers and my NAS, so I am going to explore if I can trigger an action when it completes a file sync.
And then I have to put it all together. That's somewhat dependent on the "trigger" event I end up using.
I pin Everything search to my taskbar and just copy/paste the quoted folder name to see a count of descendants. You can also turn on folder size indexing to sort those descendants and find empty folders. A very lightweight service runs in the background to maintain a live FS index.
Hmm, if I can tap into that monitoring, it could work. I was having an issue with Everything the last time I used it, though.
I'm working on building my own MIDI keyboard using 3D printing. I'm just getting started, but I do have a prototype with a single piano key that returns to its original position, using a spring.
I plan on messing around with capacitive sensing next.
Not sure if you have plans for how to handle the MIDI, but a few years ago Look Mum No Computer retrofitted MIDI to an old organ. It might be useful in figuring out how to add MIDI to your keyboard when you get to that stage
Im finishing up my 4th complete rewrite of my Neovim config, this time switching from an all-Nix based framework (nixvim) to a framework that uses nix to download plugins and dependencies, but leaves all configuration to lua. Im appreciating the lua language a lot more this time around, and the plugin landscape has changed a lot since I last seriously messed with my config.
Im also planning out a rather big project. My wife and I are starting to experiment with home automation. One of the items we would really like to automate are roller blinds for the windows. Unfortunately, for our size windows, motorized roller blinds compatible with Home Assistant are in the 350€ range per window, something we are not willing to spend. However, dumb roller blinds with a pull chain are ~40€ per window for our size of windows, and a ESP32, stepper motor driver, stepper motor, and power supply comes out to roughly [1] 20€ per window.
My plan is to hook up a stepper motor to drive the blinds pull chain, or even directly attach it to the blinds drum, and drive it from an ESP32. Id attach a small magnet to the end of the blind, so I could use a cheap reed switch as an endstop. Originally I wanted to do it with ESPHome, but as it turns out, ESPHome does not have great support for stepper motors that home via an endstop.
So, the project expands once again. Ive been having a ton of fun with embedded rust using the embassy async framework, and the ESP32 has what looks to be good support for embassy. There are existing libraries for mqtt and wifi, and integrating a custom mqtt device should be easy enough in Home Assistant. Im gonna build a rust firmware for stepper-motor driven roller blinds.
However, there is one problem. The one stepper motor driver that I was able to find, stepper, is unmaintained, does not interact with the driver I want [2], and is not async, meaning that my program would likely completely stop whenever the stepper motor is moving. So, for hopefully the final time, my project expands again. Now, I plan to build a async stepper motor driver for embedded rust, that is hopefully broadly compatible with multiple driver chips and microcontrollers. This will be a difficult project, as stepper motors require really precise timing, and at high speeds, may require me to toggle a pin roughly every µs.
[1] I say roughly, because I havent actually built the project yet other than a slapped together breadboard, so there is probably some components Ill need to order yet.
[2] the TMC2209 stepper motor driver chip, which I have experience with from 3d printer building
I am debating attempting to bring up an as-yet unsupported LineageOS device- the newest in the Sony Xperia line. After many years of buying the cheapest OnePlus devices I could get my hands on, I decided on the Xperia due to the fact that it's the only device on the market with an un-lockable bootloader that hasn't yet been stripped of features (sd card slot, aux port, usb-c 3.0+ with displayport, wireless charging)- and as a happy bonus, it seems Sony are actually somewhat supportive of the open source / modding community with the Open Devices Programme.
Unfortunately I'm no Android / Kernel dev. And I know it's not a simple process. And this is a very new device. :]
Finally got my recipe website to the point that I can view a recipe. It seems like that would be relatively easy, but I had to create several tables (and even a joining table) to get to that point, since I want to add the ability to do some filtering later on. I still have a decent way left to go, as I have not achieved full CRUD functionality on all of my tables yet, plus all the extra features I will want to add over time such as filtering, making meal plans and grocery lists, and probably some other useful UX features
I've been building out my home lab using Proxmox + VMs to set up some apps like
And since I'm in the DevOps realm, have been using Terraform + Ansible to automate everything where possible. I don't really like the ergonomics of Ansible anymore, I didn't really love the telmate/proxmox Terraform provider because we have to select which Proxmox Host to target when creating VMs. I'd rather just throw a pile of metal to it, and and let the system somehow pick where to place the VM. That sound suspiciously like a container orchestration system like Kubernetes!
It's possible to use something like Kubevirt to let Kubernetes handle scheduling VMs. However, how would I get Kubernetes installed on my machines in the first place?
I also didn't like having to manage the Proxmox Hypervisor and VM OS updates, so I'm looking for a solution with no hypervisor or OS to manage. It turns out there's a neat project called Talos which is basically a Kubernetes distribution. They strip out everything in userland, and only expose configuring the OS via APIs. It's only meant to host Kubernetes on it, and then your apps would go on top.
My holy grail solution would be to plug in new machines into the network, and then it magically becomes available to start handling work. Restarting an existing machine would drain any workloads scheduled on there, and reboot into an updated image of sorts. All of this with zero manual steps.
I might have a lot of work and integration ahead of me :)