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

22 comments

  1. [2]
    darreninthenet
    Link
    Nothing amazing compared to some of the people on here I'm sure but I've been learning how to use Docker and compose files (in my home environment) and now have a Pi running Pihole and Thelounge...

    Nothing amazing compared to some of the people on here I'm sure but I've been learning how to use Docker and compose files (in my home environment) and now have a Pi running Pihole and Thelounge in Docker containers.

    Next step is to add Calibre Web which I understand will need a sync tool as well to sync the Calibre database on my Mac.

    At some point I'm going to look into how Docker works under the hood because from my point of view that's some weird black magic going on!!!

    6 votes
    1. rubix
      Link Parent
      If you're looking at Calibre Web, there are a couple of interesting forks that come with some nice extra features. Calibre-Web-Automated and Autocaliweb are both fairly similar and reasonably well...

      If you're looking at Calibre Web, there are a couple of interesting forks that come with some nice extra features. Calibre-Web-Automated and Autocaliweb are both fairly similar and reasonably well maintained. Worth looking at and considering!

  2. [3]
    artvandelay
    Link
    My home server upgrades are finally done! For anyone who hasn't been following along, I'd been slowly working on expanding my home server's capacity after I realized my simple 4TB RAID array was...

    My home server upgrades are finally done! For anyone who hasn't been following along, I'd been slowly working on expanding my home server's capacity after I realized my simple 4TB RAID array was almost full. I bought 2x12TB WD Ultrastar drives and more RAM. After some hiccups, I finally got everything installed and running late last week. I did a quick migration of my data with rsync and everything's working just fine now.

    I've also set up Immich on my server. I've long wanted to move away from Google Photos so my family can stop paying for Google One (since everyone else in my family uses Apple iCloud instead). Instead of moving to another big tech cloud platform, I wanted my own cloud so as part of my server upgrades I also set up Immich. I reused my existing 4TB drives, putting them in a ZFS pool this time and migrated the ~100GB of images/videos I had on Google Photos. So far it's working great! I'm going to keep both platforms running for maybe the next 6 months to ensure that Immich works just as well as GPhotos for me and then I'll eventually migrate off it completely.

    5 votes
    1. [2]
      Eji1700
      Link Parent
      The main wall I ran into with immich is I use cloudflare to host a domain and have the proxy turned on, which unfortunately means that large files cannot be uploaded unless I directly connect, as...

      The main wall I ran into with immich is I use cloudflare to host a domain and have the proxy turned on, which unfortunately means that large files cannot be uploaded unless I directly connect, as apparently cloudflare limits file sizes and immich doesn't do chunking.

      https://github.com/immich-app/immich/discussions/1674

      2 votes
      1. artvandelay
        Link Parent
        Ah interesting, good to know. My experience with Immich so far is that its fairly mature for what it is but definitely is missing a lot of features.

        Ah interesting, good to know. My experience with Immich so far is that its fairly mature for what it is but definitely is missing a lot of features.

        1 vote
  3. [5]
    Gazook89
    Link
    I mentioned in a prior thread but only after the thread had been posted for a few days, so I'm mostly just reposting to ride the wave a bit more... My 5 year old lives by play dates, and basically...

    I mentioned in a prior thread but only after the thread had been posted for a few days, so I'm mostly just reposting to ride the wave a bit more...

    My 5 year old lives by play dates, and basically asks "what are we doing today" from the moment she wakes to the moment she falls asleep. And nothing is better than playing with a friend.

    I have long wanted the ability to throw a "bat signal" up when I'm at a playground that just tells people "we are here, come play if you want". I don't always want to coordinate ahead of time, or choose specific people to reach out to, wait for replies, etc. But I'd like to just broadcast out my location and see if anyone comes, but without any pressure to come.

    So I made an app that I originally called (and themed as) "Bat Signal", but quickly switched to "Kid Collider" and am thinking about renaming to just "Kollider". With an account (just email and password) you can create oft-used locations or single-use locations and then indicate your ETA to that place, and how long you want the signal to be up. That expiration time doesn't have to be your expected amount of time there, just how long you want to broadcast. The location doesn't have to be an address, it's just a freeform field.

    The signal is only visible to those that have "friended" you (must be accepted both ways), and only one signal can be broadcast by each user at a time. There is no scheduling, no messaging, no profile or kid information stored. Really, nothing about it is actually kid-specific, its just my use case.

    I don't really know why I'm sharing it here, I mostly just want the other parents in my life to use it, but I guess any eyes are helpful. It is largely vibe coded, otherwise I just wouldn't have the time to do it.

    Anyway, here it is: https://gazook89.github.io/kid-collider. If anyone is inclined to check it out, I think there is something goofy about the email confirmation where it doesn't redirect to the correct place, but clicking the confirmation link does confirm it, you just have to navigate back to the original site and sign in.

    5 votes
    1. [3]
      first-must-burn
      Link Parent
      That is a really cool idea! Without having looked at the app, my only comment would be the ability to signal where you will be so that people have time to get themselves together / plan. But...

      That is a really cool idea! Without having looked at the app, my only comment would be the ability to signal where you will be so that people have time to get themselves together / plan. But having said that, there is something to be said for simplicity.

      2 votes
      1. [2]
        Gazook89
        Link Parent
        Actually yeah, it has that. You basically say “I will be at this location at about this time”, with a free form message field as well so you can tell people you biked there, or you have enough...

        Actually yeah, it has that. You basically say “I will be at this location at about this time”, with a free form message field as well so you can tell people you biked there, or you have enough snacks to share, or you brought swim suits, etc.

        The part I’m stuck on is making an explainer page (a home page with screenshots), just motivation wise.

        Oh, and it can be installed as a PWA and used like an app on mobile.

        1 vote
        1. first-must-burn
          Link Parent
          If you can swing it, you might try making an explainer video. That's probably an easier way in for most people. You could do something funny with the park scenario to make it more interesting.

          If you can swing it, you might try making an explainer video. That's probably an easier way in for most people. You could do something funny with the park scenario to make it more interesting.

    2. xavdid
      Link Parent
      This is awsosme! We're doing a lot of texting a group chat, but it's noisy

      This is awsosme! We're doing a lot of texting a group chat, but it's noisy

  4. lynxy
    Link
    My partner DJs, sometimes, and for an upcoming event he's hosting a panel in which a number of DJs will be tasked with transitioning between songs of specific "difficulty" (differences in key /...

    My partner DJs, sometimes, and for an upcoming event he's hosting a panel in which a number of DJs will be tasked with transitioning between songs of specific "difficulty" (differences in key / differences in bpm, potentially scoring difficulty using some form of weighted euclidean / manhatten distance system, or similar). Instead of simply entering a number of tracks into a randomiser, or sitting the "hosts" in front of a spreadsheet, he has asked me to spin up a project which will do this with a pretty interface.

    My idea is to build it in a similar way to web games like Kahoot- I'm aiming for a single page application with "views" which are toggled depending on game state, which is kept synced to clients using websockets. I'll probably try out something like Centrifugo to proxy the websocket data for me. The host will pick the next DJ to play, and the next song from a set of filtered/unfiltered tracks out of a crate (apparently what DJs call their song collections). Filtering will allow me to provide the host with a set of songs that fit the game's difficulty range, or even apply a per-DJ sliding difficulty which introduces a negative feedback loop- resulting in the average difficulty for each DJ roughly matching over time.

    On top of this, the audience can join as either an "observer", or a "voter"- the former will also be displayed on the large screen on the stage, and will display current and next round metadata, as well as general game state and join links / QR codes. The latter will see only a passive screen, until voting for the current round is open, at which point the only information they will get is a easy-to-hit voting system which is optimised for mobile devices.

    On top of this, I'm trying to do it without any frameworks (not a difficult concept for me- I've never used a web framework), or any extensive libraries or other nonsense. I'm also, though this might not be a great idea, using my own asynchronous HTTP server implementation which I've been using for numerous REST projects over the last few years, as the backend. If I have the time, I might try to create a memory interface for the backend which stores the game state in a PostgresQL database or similar- I could try for high-availability. I don't know. It's a fun test of my skills, especially given I now have under a month to pull it off!

    4 votes
  5. [3]
    rogue_cricket
    Link
    Still working on my slime site from last time! :) It's a pet site / creature collector / weird little in-between web thing where the main draw is that the slimes are generated procedurally and can...

    Still working on my slime site from last time! :) It's a pet site / creature collector / weird little in-between web thing where the main draw is that the slimes are generated procedurally and can combine with each other to form unique offspring. Last time I posted about it I had figured out how I wanted colour mixing to work; since then I've gotten shape into a good-enough state for an alpha and I need to put it down even though I have grander ambitions for it down the line. It's good enough!

    (I also went on a little side quest about metaballs which I might want to return to, uh, eventually.)

    For my CURRENT overengineering adventure, I'm working on biographies for the slimes. I chose to do this because I want the information on my site to be presented in a way that is fun, but a little bit obscure - think of how the Pokémon rater scores your Pokémon's IVs in an in-universe way rather than just saying "SPEED: 28." My ultimate goal is to make the slimes a little bit autonomous and to store logs of their exploits somewhere, so some of the text-framing work I'm doing now will probably tie into that as well, but for now this is just a fun way to communicate the slime's qualities.

    The thing is, the idea of just going through and making phrases like "this slime is very big. this slime is very wet. this slime is clingy." all in a row absolutely would not work with the whole vibe of the site. Instead I've decided to extract meta-tags from the slimes that I am calling notability points - like if a slime is particularly big, wet, or excitable. I also have a big list of phrases that match to different combinations of these notability points. I have a greedy algorithm grab the most complex phrase-set, removing them from the slime's notability pool, and then go through and repeat that process until only singletons are left.

    So now instead of a big, sticky, clingy list, it might say something like "It likes to cuddle, but after it does you might need to rinse off. It is also very big."

    This is called a weighted set cover and it's pretty computationally expensive, but I plan on making sure I'm only refreshing the bio very, very rarely. Fun to come up with different phrases for different combinations of underlying traits.

    3 votes
    1. [2]
      jmpavlec
      Link Parent
      Sounds pretty cool, do you have any screenshots or a link? Would love to take a look at it.

      Sounds pretty cool, do you have any screenshots or a link? Would love to take a look at it.

      1. rogue_cricket
        Link Parent
        Right now I have a blog up and a splash page parked, but the splash page is pretty bare so I haven't put it out there much yet. I plan on adding demos for squishing and for another feature...

        Right now I have a blog up and a splash page parked, but the splash page is pretty bare so I haven't put it out there much yet. I plan on adding demos for squishing and for another feature (racing) before I start doing much sharing/promotion, but that'll involve some light porting.

        https://blog.goo-grotto.com/
        https://goo-grotto.com/

        Visual design isn't my strongest suit but I spent a while iterating on it and tweaking it. I'm going for lots of thick lines and bright colours and trying to keep it a little on the "retro" side. I looked at old Neopets and Gaia Online as inspirations for where to put things, I wanted it to feel like a "place" rather than a fully abstract interface.

        2 votes
  6. [5]
    xk3
    (edited )
    Link
    I'm building an collaborative P2P mapping app with iroh and Kotlin Multiplatform / CMP. It's my first time building a GUI that can compile to such a wide variety of platforms (Android, iOS,...

    I'm building an collaborative P2P mapping app with iroh and Kotlin Multiplatform / CMP. It's my first time building a GUI that can compile to such a wide variety of platforms (Android, iOS, Linux/macOS/Windows desktops, Server [via Ktor]) where it doesn't feel like I'm having to special case everything. Things mostly just work and that is a great feeling.

    One very cool crate that I came across is iroh-topic-tracker:

    Serverless, decentralized peer discovery for iroh-gossip topics using experimental DHT Signed Peer Announcements.

    This crate uses the implementation of the experimental Draft BEP (PR #174) for announcing and discovering cryptographically signed peer identities (Ed25519 public keys) on the Mainline DHT by Nuhvi. This enables overlay networks like Iroh to discover peers without centralized trackers, utilizing signed announcements to verify identity before connection.

    I'm using it to build a "Discover" page based on the nearest level 7 H3 Cells (~5 km) using the user's location (or they can choose a different location on the map). by broadcasting to an iroh gossip channel of the given H3 Cell name. It's a bit social media-y but it's pretty cool that it all works without a central server.

    2 votes
    1. [2]
      Gazook89
      Link Parent
      Can you describe your app a little more? Does it contribute to OSM or something?

      Can you describe your app a little more? Does it contribute to OSM or something?

      1 vote
      1. xk3
        Link Parent
        Right now it's kinda a mix between CoMapeo and "Google My Maps" where it's up to the users to upstream their data to OSM but a lot of the data templates will be OSM inspired. It's a mesh map so...

        Right now it's kinda a mix between CoMapeo and "Google My Maps" where it's up to the users to upstream their data to OSM but a lot of the data templates will be OSM inspired.

        It's a mesh map so everyone's map will look different depending on what other maps they've subscribed to. Like an RSS client for maps

    2. [2]
      riQQ
      (edited )
      Link Parent
      There is StreetComplete. An app to contribute to OSM by answering questions. It's in the process of being ported to KMP / compose multiplatform. Maybe you can draw inspiration on some tech choices...

      There is StreetComplete. An app to contribute to OSM by answering questions. It's in the process of being ported to KMP / compose multiplatform.

      Maybe you can draw inspiration on some tech choices made there.

      It's using maplibre compose for map display, if you haven't heard about it yet.

      1 vote
      1. xk3
        Link Parent
        That's interesting! I've used StreetComplete before but wasn't aware they are porting to KMP / CMP. I would be using MapLibre Compose but it doesn't support addProtocol() so I'm using the native...

        That's interesting! I've used StreetComplete before but wasn't aware they are porting to KMP / CMP.

        I would be using MapLibre Compose but it doesn't support addProtocol() so I'm using the native SDKs per platform. So in my case using MapLibre Compose would require running an HTTP server inside the app rather than Direct JNI. But maybe I will switch later if it turns out to require too much platform code

        1 vote
  7. guissmo
    Link
    Hello, I just finished migrating my Immich from external libary to internal. I started Immich back when it wasn't stable so I figured I couldn't let it restructure my meticulously organized...

    Hello, I just finished migrating my Immich from external libary to internal. I started Immich back when it wasn't stable so I figured I couldn't let it restructure my meticulously organized folders of albums. Now I have more trust in it and well I decided to go all in. Even wrote about it in my blog.

    2 votes
  8. [2]
    DistractionRectangle
    Link
    Continuing my gaussian splatting adventures, I've finally managed to get lichtfeld studio to compile on arch. Dependency, linkage, vckpg errors oh my. I've learned waaay to much about vckpg and...

    Continuing my gaussian splatting adventures, I've finally managed to get lichtfeld studio to compile on arch. Dependency, linkage, vckpg errors oh my. I've learned waaay to much about vckpg and packaging for arch in the past couple of days, but it finally works!

    Part of the push for compiling it myself is

    A) the AUR PKGBUILD is currently broken

    B) changes to reduce vram usage have landed after the last release, and it's cheaper to fight the compiler than buying more vram

    So now I'm waiting while the splat trains and I'm beyond the point where the last release would run out of memory - progress!

    1 vote
    1. DistractionRectangle
      Link Parent
      Of course a release is tagged and AUR is updated the next day -_- Which is fine, because my build, while it worked, plugins did not as I hadn't handle the python dep correctly.

      Of course a release is tagged and AUR is updated the next day -_- Which is fine, because my build, while it worked, plugins did not as I hadn't handle the python dep correctly.