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

26 comments

  1. [8]
    lynxy
    Link
    I'm considering building a mechanical keyboard kit- I've been using a simple dell squishy thing for a while and it's getting old. Unfortunately, the mechanical keyboard space scares me- there's so...

    I'm considering building a mechanical keyboard kit- I've been using a simple dell squishy thing for a while and it's getting old. Unfortunately, the mechanical keyboard space scares me- there's so much for choice paralysis to get hung up on! So many pretty clickies!

    The ideal, I think, would be a TKL (ten-keyless) device running on something RP2040 based, QMK, removable switches, UK layout, with the capability to connect over both wired & wireless (2.4Ghz dongle?). Programmable RGB or RGBW or what-have-you. I might be looking for something over-spec'd.

    Otherwise- I've been keeping up with the patch sets for Linux on the Snapdragon X Elite devices. My Dell XPS is running a custom built linux-aarch64 kernel on an ArchLinuxARM base, though I've long given up on the pre-built images because some of them are years out of date, and instead I just install as I would any Arch system by pacstrapping from a system with a similar architecture. There appear to still be issues with audio, webcam, the fingerprint sensor, hardware acceleration, and power management, but it's slowly working towards a usable device.

    And finally- the Prusa replacement to my old cheap-y Elegoo device which never printed well has arrived! And I have immediately sheared a printed belt tensioner pulley in attempting to align the X axis rail. The printer has impressed me in some ways, and in others I'm somewhat disappointed, but Prusa's support has been amazing.

    7 votes
    1. [4]
      first-must-burn
      Link Parent
      Which printer did you buy? I have an mmu plus prusa one in my workshop just waiting for a quiet weekend. I d definitely need to unload my mk3s+ to make room, but I'll have to see whether my mk4...

      Which printer did you buy? I have an mmu plus prusa one in my workshop just waiting for a quiet weekend. I d definitely need to unload my mk3s+ to make room, but I'll have to see whether my mk4 lives on as a single filament machine, or whether the prusa one is enough of an improvement to warrant upgrading or replacing it.

      1 vote
      1. [3]
        lynxy
        Link Parent
        Yeah, I grabbed the core one! One day I'll grab an MMU kit, too, but first I just want to get to a point where I can reliably print something (more than can be said for the Elegoo Neptune 4). I...

        Yeah, I grabbed the core one! One day I'll grab an MMU kit, too, but first I just want to get to a point where I can reliably print something (more than can be said for the Elegoo Neptune 4). I also have a hardened steel nozzle, and I'm looking forward to printing some carbon fibre impregnated material.

        Unfortunately the core one still has issues- namely, the plates which hold the X axis linear rail are not always bent to a proper 90 degree angle.

        1 vote
        1. [2]
          first-must-burn
          Link Parent
          I'm sorry to hear that. My experience with Prusa is that their quality control is pretty good, but I suppose there's always a tail in the curve. If you need somebody to print and mail replacement...

          Unfortunately the core one still has issues- namely, the plates which hold the X axis linear rail are not always bent to a proper 90 degree angle.

          I'm sorry to hear that. My experience with Prusa is that their quality control is pretty good, but I suppose there's always a tail in the curve. If you need somebody to print and mail replacement printed parts, DM me.

          1 vote
          1. lynxy
            Link Parent
            I appreciate the offer! Fortunately, Prusa support are top tier and they've already sent the part I managed to break :]

            I appreciate the offer! Fortunately, Prusa support are top tier and they've already sent the part I managed to break :]

            1 vote
    2. [3]
      Eji1700
      Link Parent
      Your keyboard desires should make it very easy to find a lot of options. To be clear you want to build it right? You can absolutely buy something like that, but i think the only spec that might be...

      Your keyboard desires should make it very easy to find a lot of options.

      To be clear you want to build it right? You can absolutely buy something like that, but i think the only spec that might be harder to find in a personal build/kit is going to be the wireless module, and even then in believe that’s common enough these days.

      1 vote
      1. [2]
        lynxy
        Link Parent
        I'd love to build one, yes! Every time I've looked I have been somewhat overwhelmed by the wealth of options haha. I can totally understand the wireless module potentially adding difficulty, and...

        I'd love to build one, yes! Every time I've looked I have been somewhat overwhelmed by the wealth of options haha. I can totally understand the wireless module potentially adding difficulty, and it's not an absolute requirement as a result :]

        1 vote
        1. Toric
          Link Parent
          If you want a wireless keyboard, the least friction is probably using the nice!nano as a MCU, rather than a RP2040 solution. I dont think Ive seen anyone use the RP2040 with wireless with QMK...

          If you want a wireless keyboard, the least friction is probably using the nice!nano as a MCU, rather than a RP2040 solution. I dont think Ive seen anyone use the RP2040 with wireless with QMK before, the community gravitates towards the Nice!Nano. That said, I come from the split keyboard community, so things may be different in the rectangle world.

          1 vote
  2. [10]
    Perryapsis
    Link
    I finally got a bash script working to extract and extend a GPS trace from the metadata embedded in my dash cam recordings. It took a solid 15 minutes to parse through all 256 GB on the card into...

    I finally got a bash script working to extract and extend a GPS trace from the metadata embedded in my dash cam recordings. It took a solid 15 minutes to parse through all 256 GB on the card into ~12 MB of coordinates, and another few minutes to add a couple more week's worth of driving. But now it works! Now I can sate my mild curiosity about my driving history.

    The end result is boring compared to the amount of work required to get it running, but I think it will be more interesting when I have a whole year's worth of data. And in the meantime, I learned how to write crappy bash scripts.

    4 votes
    1. [9]
      tauon
      Link Parent
      Would you feel comfortable sharing the script? I’m thinking about getting a dash cam as well…

      Would you feel comfortable sharing the script? I’m thinking about getting a dash cam as well…

      1 vote
      1. [8]
        Perryapsis
        Link Parent
        Fair warning that this is kludged together by an hobbyist. It assumes the metadata and directory structure of my specific dash cam, so you may have to mess around with it to get it to work for...

        Fair warning that this is kludged together by an hobbyist. It assumes the metadata and directory structure of my specific dash cam, so you may have to mess around with it to get it to work for you. It is modified from this Stack Overflow answer and depends on modifying the gpx.fmt file found here depending on whether you are at the start, middle, or end of the file.

        But anyway, to pull a .gpx track from files M to N (passed as arguments):

        exiftool -p 'gpxstart.fmt' -ee '(path to memory card)/DCIM/105UNSVD/GRMN'$1'.MP4' -m > $1'-'$2'.gpx'
        for i in $(seq $(($2-$1-1))); do exiftool -p 'gpxmid.fmt' -ee '(path to memory card)/DCIM/105UNSVD/GRMN'$(($1+$i))'.MP4' -m >> $1'-'$2'.gpx' ; done
        exiftool -p 'gpxend.fmt' -ee '(path to memory card)/DCIM/105UNSVD/GRMN'$2'.MP4' -m >> $1'-'$2'.gpx'
        sed -e '/<trkpt lat="-180" lon="-180">/,+2d' -i $1'-'$2'.gpx'
        

        And to append new data to a track that already exists from M to N (passed as arguments):

        head -n -3 "(path to file)/longterm.gpx" > "(path to file)/longterm.bak"
        for i in $(seq $(($2-$1-1))); do exiftool -p 'gpxmid.fmt' -ee '(path to memory card)/DCIM/105UNSVD/GRMN'$(($1+$i))'.MP4' -m >> "(path to file)/longterm.bak" ; done
        exiftool -p 'gpxend.fmt' -ee '(path to memory card)/DCIM/105UNSVD/GRMN'$2'.MP4' -m >> "(path to file)/longterm.bak"
        sed -e '/<trkpt lat="-180" lon="-180">/,+2d' -i "(path to file)/longterm.bak"
        mv "(path to file)/longterm.bak" "(path to file)/longterm.gpx"
        
        2 votes
        1. [7]
          bme
          Link Parent
          One potential improvement (I know you weren't asking for review so feel free to ignore) would be to use xmllint + xpath to extract the data rather than using sed. Then you'd be robust against...

          One potential improvement (I know you weren't asking for review so feel free to ignore) would be to use xmllint + xpath to extract the data rather than using sed. Then you'd be robust against non-semantic changes to the data (whitespace etc), not that it's likely to change unless you are getting OTA updates for your dashcam firmware :)

          1 vote
          1. [6]
            Perryapsis
            Link Parent
            Could you please show an example of how you would do that? The purpose of the command is to look for the exact line <trkpt lat="-180" lon="-180"> and remove it, plus the two lines below it. The...

            Could you please show an example of how you would do that? The purpose of the command is to look for the exact line <trkpt lat="-180" lon="-180"> and remove it, plus the two lines below it. The second line is the timestamp, so it varies and can't be caught by a specific string, and then the third line is just </trkpt> to close the xml tag, but that also appears on points I want to keep. Thanks for the help!

            You're right that I have the luxury of knowing exactly how the data is formatted. That allows me to get away with some not-best practices. At some point I'll need to deal with leading zeroes in the file numbers (e.g. GRMN0001.MP4), but I won't hit that point until this winter, so I have time to procrastinate figure it out.

            1. [5]
              bme
              Link Parent
              Is there any chance you could pass a representative sample of the xml? i.e. something like <?xml version="1.0" encoding="UTF-8"?> <trkpts> <trkpt lat="-180" lon="-180">$representative data</trkpt>...

              Is there any chance you could pass a representative sample of the xml? i.e. something like

              <?xml version="1.0" encoding="UTF-8"?>
              <trkpts>
                <trkpt lat="-180" lon="-180">$representative data</trkpt>
              <trkpts>
              

              i.e. I just want to see the document structure, and then I can give you an exact solution, alternatively I can make up a document and give some examples but it's more effort and less useful, imo.

              1 vote
              1. [4]
                Perryapsis
                Link Parent
                Sure, here's an example with fake data. After 9 lines of header information, we get two junk points that need to be removed. Then there are four track points to give you an idea (actual files will...

                Sure, here's an example with fake data. After 9 lines of header information, we get two junk points that need to be removed. Then there are four track points to give you an idea (actual files will have hundreds or thousands of points), and then the three trailing lines to close up tags.

                <?xml version="1.0" encoding="utf-8"?>
                <gpx version="1.0"
                 creator="ExifTool 12.40"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns="http://www.topografix.com/GPX/1/0"
                 xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
                <trk>
                <number>1</number>
                <trkseg>
                <trkpt lat="-180" lon="-180">
                  <time>2025-06-20T22:52:04.000Z</time>
                </trkpt>
                <trkpt lat="-180" lon="-180">
                  <time>2025-06-20T22:52:05.000Z</time>
                </trkpt>
                <trkpt lat="34.11832" lon="-118.30039">
                  <time>2025-06-20T22:52:05.000Z</time>
                </trkpt>
                <trkpt lat="47.59511" lon="-122.33165">
                  <time>2025-06-20T22:52:06.000Z</time>
                </trkpt>
                <trkpt lat="25.75249" lon="-80.37789">
                  <time>2025-06-20T22:52:07.000Z</time>
                </trkpt>
                <trkpt lat="44.90512" lon="-68.67164">
                  <time>2025-06-20T22:52:08.000Z</time>
                </trkpt>
                </trkseg>
                </trk>
                </gpx>
                
                1. [3]
                  bme
                  Link Parent
                  I haven't forgotten this, I just realised the problem is more complicated than I thought to do from pure bash. I'll be back with something totally stupid later because I can't leave it alone.

                  I haven't forgotten this, I just realised the problem is more complicated than I thought to do from pure bash. I'll be back with something totally stupid later because I can't leave it alone.

                  1 vote
                  1. [2]
                    Perryapsis
                    Link Parent
                    Said everyone who has ever learned bash. Coming from python, it has definitely been a learning experience.

                    the problem is more complicated than I thought to do from pure bash.

                    Said everyone who has ever learned bash. Coming from python, it has definitely been a learning experience.

                    1. bme
                      Link Parent
                      It's mostly that I thought I could do it without a really complicated xpath expression.

                      It's mostly that I thought I could do it without a really complicated xpath expression.

                      1 vote
  3. IsildursBane
    Link
    So I got back the 3D printed case for my audio project today from a friend. It is starting to resemble a finished product. I have some slight modifications for a final version that I need to make,...

    So I got back the 3D printed case for my audio project today from a friend. It is starting to resemble a finished product. I have some slight modifications for a final version that I need to make, as in a few places the mounting locations are off by a milimeter or so. The next iteration should be the final version, and then I will have a portable audio player (once I also implement the ability to connect to new WiFi networks). I also need to look into and research one issue with the print. It appears that the length of the top of the case shrunk by a few mm in printing, so need to figure out the cause there.

    4 votes
  4. Parou
    Link
    I kept working on the non directly VTT parts of my virtual tabletop system. Logins, community stuff, creating games, managing stuff, etc. For the past few weeks, we have been playing exclusively...

    I kept working on the non directly VTT parts of my virtual tabletop system.
    Logins, community stuff, creating games, managing stuff, etc.

    For the past few weeks, we have been playing exclusively in it and aside from a few tiny client crashes that were easily fixed like 5 minutes after the sessions ended, it works fine and it's nice to finally be able to just do stuff without having to wait for someone else to fix big issues like attached tokens not detaching when they should and everyone having to refresh all the time, as we had for a few months on another service.

    Next will be a small support ticket system (also in order to report errors with the actual error messages instantly) and after that I can fully focus on the actual VTT again and write a couple more features we were talking about in my group.

    4 votes
  5. sorkceror
    Link
    I spent quite a bit of time transplanting my NAS from a SilverStone DS380 case into a 10-inch rack mount. The primary reason for doing so was that the silverstone case has very poor ventilation...

    I spent quite a bit of time transplanting my NAS from a SilverStone DS380 case into a 10-inch rack mount.
    The primary reason for doing so was that the silverstone case has very poor ventilation for the drives which were reaching temps of 50 degrees celsius at times (even though only half the bays were filled!), but also because I've become a little enamored with mini racks and have been migrating my homelab across.

    So far everything looks like it went well, the drive temperatures are much improved (down to mid-high 30s), and the various 3d printed parts have worked wonderfully - hotswap drive bays, an SFX PSU mount and a cover for the motherboard.

    One wrinkle was that I had thought the motherboard in my NAS had a power button on the rear io panel which turned out to be incorrect, so I had to detach the front panel of the NAS case and rest it on top until I can get hold of some buttons.

    Pics:
    Lab
    Jank power button

    Now that this particular itch is scratched, I hope to resume working on my game.

    4 votes
  6. ali
    Link
    Got my 3D printer and it really scratched my maker itch. I’m learning fusion 360 and I have clicked print on the gird design I ever made myself- it’s not great but it’s mine :D a phone case. So...

    Got my 3D printer and it really scratched my maker itch. I’m learning fusion 360 and I have clicked print on the gird design I ever made myself- it’s not great but it’s mine :D a phone case. So I’m really curious if it will fit.

    Other than that I haven’t really been up to too much. I get tons of ideas but then hit a slump. I want to find something I’m passionate enough about to work on (maybe even full time in the near future)

    2 votes
  7. devalexwhite
    Link
    I've been hacking on two projects that I'm pretty excited about! The first one, BookLeaf, is a web-based bookmark manager. One of the cool things I recently added was the ability to auto-discover...

    I've been hacking on two projects that I'm pretty excited about!

    The first one, BookLeaf, is a web-based bookmark manager. One of the cool things I recently added was the ability to auto-discover RSS feeds, then let you know which sites have recent updates with a link directly to the new article. It's not a full-fledged RSS reader, but instead a "hey this person posted, you should go check out their blog!".

    Another project I made is ReactBar. It's a simple way to add reactions to any webpage, developed primarily for my blog but I went ahead and turned it into a free service.

    It's fun building quick projects to solve my needs. I used to build hoping to make money and create a SaaS, but my focus now is just making something I enjoy.

    2 votes
  8. Toric
    Link
    Got (almost) all the bits for my rusty roller blinds project, so I can start prototyping in earnest. Ive been mostly thinking about how I can strucutre the stepper motor code to be maximally...

    Got (almost) all the bits for my rusty roller blinds project, so I can start prototyping in earnest. Ive been mostly thinking about how I can strucutre the stepper motor code to be maximally portable, and I think im gonna have to break it up as follows:

    • Step Planner:
      Calculates the step timings, including the acceleration and deceleration phase. This module is fully hardware independent, all it does is perform some math and spits out a data structure detailing the steps and timings needed to make a motor move.
    • Step Executor:
      Sends the steps through the dir and step pins to the motor controller with the requested timings. Due to the available hardware timers varying by platform, this may not even be able to use embedded-hal traits, and will likely be specific to a given microcontroller family. I can probably make a generic one that just works with embassy timers, but the max steps/sec and jitter performance wont be great.
    • Configurator:
      This communicates with the motor controller via whatever specific mechanism it uses (for the TMC2209, UART) to set up features like microstepping or silent modes. Can probably be called completely independently of the other 2 modules, as most of the time, you dont want to reconfigure a driver in the middle of a move.
    2 votes
  9. hobblyhoy
    Link
    I'm hacking together a mini diy bedjet. I mounted a few small computer fans to a board with a DC buck converter as a fan speed controller then rigged a little surrounding to it that that directs...

    I'm hacking together a mini diy bedjet. I mounted a few small computer fans to a board with a DC buck converter as a fan speed controller then rigged a little surrounding to it that that directs the air under my covers. I built something similar back in the day but didn't know about the Bernoulli principal at the time so hopefully get a free increase in airflow with quieter fans this time around.

    2 votes
  10. Eji1700
    Link
    Looking at Falco for fsharp. Front end is such a weak spot for me but I need to practice it more

    Looking at Falco for fsharp. Front end is such a weak spot for me but I need to practice it more

    1 vote