16 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?

17 comments

  1. [6]
    regularmother
    Link
    3 months ago, I started working on familiar.systems and it's finally at the point where it's clean enough to release the in progress code under its AGPL license. This is also the first time I'm...

    3 months ago, I started working on familiar.systems and it's finally at the point where it's clean enough to release the in progress code under its AGPL license. This is also the first time I'm posting anywhere about it, which is exciting!

    The basic idea is to take the audio of your TTRPG session and extract it into a knowledge graph that GMs can use to plan sessions and players can use to know what happened while maintaining GM secrets. The arch is here: https://familiar.systems/en/blog/2026-05-02-initial-arch/

    I'm taking my super gnarly POCs and turning them into fully authed, actually observable, real production code and it's just been so fun. It's, like, the joy of writing code and running AI experiments is back and I haven't felt that in years.

    I had my first kid 9 weeks ago so it's taken me a while to get to this point but I'm hoping that I can turn it into a real business so I can spend evenings with my kid playing DnD and pretend it's for work research. And if it's just a hobby project that lets me combine all of my hobbies then so be it!

    10 votes
    1. balooga
      Link Parent
      Congratulations! On both counts!

      Congratulations! On both counts!

      4 votes
    2. [2]
      creesch
      Link Parent
      Looks pretty cool! I was browsing the website and came across your blog post about services being used. You mention having no alternative for GitHub, depending on your expectations...

      Looks pretty cool! I was browsing the website and came across your blog post about services being used. You mention having no alternative for GitHub, depending on your expectations https://forgejo.org does fill the role. I have been using it privately and have been quite happy with it. If you don't want to self host (understandable) there is Codeberg for open source projects (which yours is) and it is EU hosted.

      4 votes
      1. regularmother
        Link Parent
        Codeberg was my first thought but I had planned to keep the billing source available like my marketing email provider's model, keila.io. That should, in principle, preclude me from ever using...

        Codeberg was my first thought but I had planned to keep the billing source available like my marketing email provider's model, keila.io. That should, in principle, preclude me from ever using codeberg unless I ask for permission?

        But then I read this blog post describing forgejo security disclosures and didn't feel comfortable keeping my IaC keys there. Not yet, at least.

        1 vote
    3. [2]
      goose
      Link Parent
      Your TTRPG project sounds very similar to my Scribble project! Different goals, but similar methodologies. Congratulations on your first born! My first will turn 9 this year, but I remember the...

      Your TTRPG project sounds very similar to my Scribble project! Different goals, but similar methodologies.

      Congratulations on your first born! My first will turn 9 this year, but I remember the days you're in right now very clearly. I'm sure you know and have been told this, but if hearing it from one more person helps: You will get to sleep a full night again before 2027 rolls around! Happy mother's and/or (early) father's day!

      3 votes
      1. regularmother
        Link Parent
        Thanks! I work remotely for the US company I worked for before moving to Norway right now so my insane work schedule actually works out. I'm sleeping a full 6 hours a night now! Now, I only see my...

        Thanks! I work remotely for the US company I worked for before moving to Norway right now so my insane work schedule actually works out. I'm sleeping a full 6 hours a night now!

        Now, I only see my wife for like, an hour or two a day, but I'm taking the baby for 6 hours a day to give her a full night's sleep, too.

        The work schedule, however, is awful.

        Also, your project looks really great. I've never used flask before and it's interesting seeing it. The laser focus of your app is also great! Limiting it to pre-diarized audio is smart. Pyannote diarization in faster whisper has been a real problem for my in-person testing.

        2 votes
  2. trim
    Link
    I am sacking off Alexa devices. One of the only things my Echo Show did well was event integration from my Tapo cameras so that when a detection event happened, the Echo Show would switch to a...

    I am sacking off Alexa devices. One of the only things my Echo Show did well was event integration from my Tapo cameras so that when a detection event happened, the Echo Show would switch to a live feed. Very handy.

    The first thing I did was to develop a service to monitor the camera event logs, and if detected, send a rich notification with photo of the event to my Apple Watch. Nice. That's pretty good start.

    Next I augmented that so if the service is running on a GUI equipped environment, either Mac or Linux (sorry Windows fans) it will pop up a live feed to my desktop.

    This is all made more complex because the Tapo wireless cameras don't expose RSTP so you have to use their protocols to do it. Fortunately, existing python module pytapo does much of the heavy lifting.

    Still no Echo Show though.

    So I got myself (another) Pi board, a 4GB Pi 4B and a 7" screen. Put that together, then wrote a GUI in pygame to show a little picture carousel, a monthly calendar, date, time, day, weather, sunrise and sunset in a nice little layout.

    To that I added some REST endpoints to trigger Camera View mode.

    Changed my detection service so that when it detects an event, it opens the video stream with pytapo and feeds it through ffmpeg and mediamtx to create my own RSTP feed of it, then it tells my desk display to connect to the stream view.

    All in all, about 3 weeks work on and off. Couple hours per night I'd say. Sometimes more, sometimes less.

    My biggest problem remaining is that the event detection is slow, because the event log in the hub is only updated after the normal event processing of the tapo software. Their app notificaitons, video recording and storage etc. has happened, which is about 30s after the actual detection event -- an eternity really, most times the trigger is long gone.

    So my final thing is to use SDR to attempt to detect the sub 1GHz signalling that happens between the camera and the hub. The battery camera is always on of course, but low power, doing detection only. Once the camera detects, it sends a burst of sub 1GHz to the hub, which then sends wake up and stream type commands to the camera.

    None of this is public protocol of course, but I'm hoping I can at least sniff the detection burst. Once I have that, I can easily hook it into my notification service to get it to begin the live stream much sooner.

    I've not done much sdr and my extant radio hardware is pretty terrible, but I'd like to see if I can make the radio part work with what I already have. This project has already cost me quite a bit in parts and time, lol.

    5 votes
  3. unknown user
    Link
    I've been building TinyFeeds "an optimized, opinionated and minimal RSS feed reader". I realized with most RSS apps I filter by today + unread and never use other features (like tagging,...

    I've been building TinyFeeds "an optimized, opinionated and minimal RSS feed reader".

    I realized with most RSS apps I filter by today + unread and never use other features (like tagging, bookmarking, folders, etc), so I decided to build a reader that focuses on unread articles of the day. It's meant to be minimal, fast and have a binary that's 5MB or less.

    This is my first time building a GUI app with Rust (using Iced framework), and it's been a lot of fun! It's all hand coded and fairly functional at this point.

    TinyFeeds on Codeberg

    4 votes
  4. ruspaceni
    Link
    little break from my canvas notepad app from last week, got an idea stuck in my head for a wordle type info reverse engineery game - but based on simon says sharing it around to friends has been...

    little break from my canvas notepad app from last week, got an idea stuck in my head for a wordle type info reverse engineery game - but based on simon says

    sharing it around to friends has been interesting since even though people are misunderstanding the game slightly, theyve been able to bruteforce it so thats fun. seems to be rather easy even on hard mode but still engaging so with some fettling this might be pretty cool

    the idea is kinda like lockpicking a game of simon says? if that makes any sense. you get 6 tries to get the full 6 tone pattern correct. if you guessed green but the answer was on the other side of the colour wheel, the feedback is red. but if you guessed the colour /next/ to the correct answer then the feedback is yellow/orange.

    im gonna have a think of how i can do a little info card / tutorial thing up front and how best to communicate how it works without a wall of text or a waffling description like this lol

    https://dailygame.duckdns.org/

    3 votes
  5. [2]
    V17
    Link
    One of the issues in DIY audio, whether it's loudspeaker prototyping, room correction (something that can make the sound from your loudspeakers much better in some situations) or just equalizing...

    One of the issues in DIY audio, whether it's loudspeaker prototyping, room correction (something that can make the sound from your loudspeakers much better in some situations) or just equalizing common headphones which is almost always a significant audio quality improvement, is the accessibility of cheap DSP, a standalone box that takes care of EQ, splitting audio signal into different bands and other functions, digitally, which offers more precision and lower cost than traditional analog solutions. Hardware solutions have existed for a long time, but they're not that cheap, so they're not worth it if you have very cheap speakers/headphones, which would often benefit from DSP a lot.

    These days it's pretty easy to do this using software if you have a multichannel audio interface, theoretically. Practically at least on windows it just sometimes breaks, sometimes it's difficult to get it working, on Android the options are limited without root and on iPhones it's afaik impossible to do. And it's a pain to install and setup the software in each new device, when you own two different pairs of headphones you need to switch their settings in the settings application etc.

    Well, I did not solve this problem, but some developer with the help of AI agents just casually (mostly) did with DSPi, which is Raspberry Pi Pico used as an USB Audio interface with integrated DSP. You just buy a Pico for 6 EUR, flash it over USB and it starts working as an external sound card, plus a second (hidden) USB device that communicates with a desktop app used to change its settings. The only issue is that it only has digital outputs, so for each output channel (up to 8) you want to use you need to buy a separate digital-analog converter module as well. However, this is all still cheaper than any dedicated DSP module on market that I know of. And thanks to its modularity you can use high end DACs as well, at which point the cost is dramatically lower than any complete solutions.

    I've been testing it with a couple cheap chinese DACs, fixing a couple old amp modules I've had lying around that needed a few updates to reduce noise, and it works great. My first project is just to put it all in a box and set it up for my father, but I can't wait to do some new audio project with it, something I haven't done since about 2019. May even do a pair of big high end speakers for a friend later.

    3 votes
    1. skybrian
      Link Parent
      Cool. I wish there were a microcontroller board with a USB-C connector at both ends so you could connect other devices easily. It could pass through the power and you could do things like...

      Cool. I wish there were a microcontroller board with a USB-C connector at both ends so you could connect other devices easily. It could pass through the power and you could do things like modifying USB audio by flashing the firmware.

      1 vote
  6. Eji1700
    Link
    More server stuff. Still screwing around with local access (and still getting answers that don't feel like they address all my questions, so not sure if that's on me?), but also getting my keys...

    More server stuff. Still screwing around with local access (and still getting answers that don't feel like they address all my questions, so not sure if that's on me?), but also getting my keys setup properly so I can move the physical box next to the rest of the equipment and not need to physically be on it.

    Also need to do some testing with app rights on the NAS as some stuff works flawlessly other stuff not so much.

    1 vote
  7. [4]
    Viceroy
    Link
    I've been playing around with a remote gaming system using Sunshine/Moonlight to connect to a Bazzite Linux VM. The process has been a lot of fun even though I've been struggling with some OpenGL...

    I've been playing around with a remote gaming system using Sunshine/Moonlight to connect to a Bazzite Linux VM. The process has been a lot of fun even though I've been struggling with some OpenGL issue for like a week which I havent been able to figure out.

    1 vote
    1. [3]
      lynxy
      Link Parent
      I've been tempted to set something like this up! Is the VM machine headless? Do you use any form of HDMI output faker stick? I know that OpenGL has issues with rendering to buffers without a...

      I've been tempted to set something like this up! Is the VM machine headless? Do you use any form of HDMI output faker stick? I know that OpenGL has issues with rendering to buffers without a display- Vulkan is much better in that respect in that it can render to "off-screen buffers".

      I was wondering how possible it would be to dynamically spin up a VM or container containing the streamed application in some kind of well-optimised kiosk DE, with a Sunshine instance, and have it clear itself up again on disconnect, or after a period of inactivity.

      My primary computing device these days is a relatively low-power laptop attached to a dock, and it would be neat to run more graphically heavy programs inside my rackserver instead!

      1 vote
      1. [2]
        Viceroy
        Link Parent
        So, I'll be honest, I'm not sure what you mean by headless in this context. I thought headless servers didn't render any outputs and were exclusively accessed via command line lie ssh? Either way,...

        So, I'll be honest, I'm not sure what you mean by headless in this context. I thought headless servers didn't render any outputs and were exclusively accessed via command line lie ssh? Either way, I can just describe how I set it up! The Bazzite VM is running on a Proxmox server on top of Dell PowerEdge R640 hardware. I passed through a RTX 3050, and then downloaded Steam, Emu Deck, sunshine and moonlight. I should also say, my original goal was to use the server to play games from my phone.

        Without any additional configuration, the Steam components worked out of the box. Using Steam big picture I could access them directly through moonlight and play games. The lag isn't too bad as long as you are using 5Ghz wifi or better. I don't think you could do anything that required low ping, like an fps, but that is not what I was using it for anyway.

        The first issue I encountered was with Emulation Station (ES DE), for some reason the config file was not picking up an OpenGL version, but after quite a bit of troubleshooting I just manually set the value to version 4.2. I thought this was odd, since checking the version from glxinfo | grep 'version' gave my version as 4.6, but ES DE seems to have set versions it runs on and 4.6 wasn't an option. After setting the version manually, the snes, nes and gamecube emulators booted without issue, but the n64 emulator from retroArch fails to load. After digging through system information screen in RetroArch it doesn't seem to be picking up an "OpenGL ES" version, and the n64 emulator requires at least Version 2.0, which I believe is the issue. I still haven't found a resolution yet, as I haven't seen anywhere in the RetroArch configuration that would indicate that the OpenGL ES version can be set manually, but I might look into an HDMI output faker stick based on your comment. Side note, RetroArch is already using Vulkan so idk haha.

        I don't have much insight into how a vm could be spun up/down from the server itself, though Im sure you could find a way to do that.

        The last thing I'll say is I have been pleasantly surprised with the power that can come from the rack server. If you have some spare GPU, it is absolutely possible to use in in the server for media transcoding, game streaming, local llms and a bunch of other uses.

        1 vote
        1. lynxy
          Link Parent
          Ah yeah, I'm referring to a device without a "seat", as it were. A device with no physical input or output- though I'm not sure if rendering to an off-screen buffer and then streaming that over...

          Ah yeah, I'm referring to a device without a "seat", as it were. A device with no physical input or output- though I'm not sure if rendering to an off-screen buffer and then streaming that over the network nullifies the classification? :P

          It sounds like you ran into a lot of edge-case OpenGL version-missmatch problems! I'm glad you managed to work your way around the majority of them.

          I agree that a GPU in a server can be used for so much. My rackserver, though largely consumer desktop hardware (I couldn't bring myself to splurge for even a second-hand Epyc chip..), does a wonderful job transcoding Jellyfin streams, as it's an Intel ARC and has encode/decode support for most codecs! It also has 32GB of VRAM, so I'm experimenting with hosting Qwen3.6 or Gemma4, though it looks like MTP has issues with the SYCL backend at the moment. I'd love to see how well it works for game streaming, though I don't expect it to hold a candle to a proper gaming-oriented card running on baremetal, haha.

  8. archevel
    Link
    I've been further exploring unikernels and I think I found a bug in hermit os vsock implementation. It appears that after an accept the vsock can't do another accept. I've made a small vsock based...

    I've been further exploring unikernels and I think I found a bug in hermit os vsock implementation. It appears that after an accept the vsock can't do another accept. I've made a small vsock based ping-pong server and a Linux based client that tries to send ping and receive a pong. Running it once works, but a second invocation fails against the hermit based code. The equivalent sever running in linux handles the ping/pong fine. This could still be a problem in qemu, but I suspect it's something in hermit os vsock implementation that fails. Will have to dig a bit deeper!