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

29 comments

  1. [6]
    zakhar
    (edited )
    Link
    I put together a minimal website over at cookbook.lol to start storing my recipes. It does a couple cool things: You can track when recipes are variations of other recipes (either on the site or...

    I put together a minimal website over at cookbook.lol to start storing my recipes. It does a couple cool things:

    • You can track when recipes are variations of other recipes (either on the site or from a blog or cookbook)
    • It has some basic organization (tracking saved/tried recipes)
    • It has support for basic comment threads.

    It’s in a closed alpha if anyone wants to try it, just reply here or send me a message. It is definitely missing a lot of features and there’s tons more I want to do here, but the core functionality is there.

    7 votes
    1. [5]
      first-must-burn
      Link Parent
      It's nice looking. What framework / tech stack are you using? I have done mostly Vue so I am always curious what else is out there and what people like / don't like about it.

      It's nice looking. What framework / tech stack are you using? I have done mostly Vue so I am always curious what else is out there and what people like / don't like about it.

      3 votes
      1. [4]
        zakhar
        Link Parent
        Good question, so I split it up into frontend/backend/static servers all sitting behind an nginx server on a linode instance. The backend server is a minimal API implemented in nodejs with...

        Good question, so I split it up into frontend/backend/static servers all sitting behind an nginx server on a linode instance.

        The backend server is a minimal API implemented in nodejs with postgresql for storage.

        The frontend is also a nodejs server. The client-side code is vanilla JS, but I do use closure (aka soy) templates so that I can server-side render the same content that is loaded dynamically when the user interacts with the page.

        I might individually swap out for other stuff down the road if there are tech stacks I want to learn, but I went with this since it let me move pretty fast for an mvp.

        1 vote
        1. [3]
          first-must-burn
          Link Parent
          If you will indulge me, can you explain the function of "server-side rendering the same content" in this context? Or point me to something that explains it? I tried to look up soy templates, and...

          I do use closure (aka soy) templates so that I can server-side render the same content that is loaded dynamically when the user interacts with the page

          If you will indulge me, can you explain the function of "server-side rendering the same content" in this context? Or point me to something that explains it? I tried to look up soy templates, and it wasn't really clear to me how the closure fits into the client/server model you described.

          1 vote
          1. [2]
            zakhar
            Link Parent
            So essentially I can write a soy template for something on the page (like a comment). In my server code, I can render the comment in the initial page load, so that it is sent down in the initial...

            So essentially I can write a soy template for something on the page (like a comment). In my server code, I can render the comment in the initial page load, so that it is sent down in the initial html and the page renders super fast.

            Then, when someone writes a comment on the page, I can use that same soy template client-side to add a new comment to the page without refreshing.

            4 votes
            1. first-must-burn
              Link Parent
              That is neat! Thank you for the explanation.

              That is neat! Thank you for the explanation.

              1 vote
  2. [3]
    borntyping
    Link
    I've been generating some pretty diagrams of production chains from the game X4: Foundations. It's a reasonably niche game so guides and documentation for it have been hard to find, outputs can...

    I've been generating some pretty diagrams of production chains from the game X4: Foundations. It's a reasonably niche game so guides and documentation for it have been hard to find, outputs can have multiple ways to be produced by different factions, and there's not nessacrily a clear progression of interim stages between raw resources and finished products.

    Generating diagrams in d2, graphviz and plotly was mostly pretty simple; but working out sensible data structures and ways to select what I wanted was a lot more effort. D2 was an early experiment I abandoned for graphviz later on, but I'm tempted to make another attempt at using it now I've managed to simplify the graphs so that they don't have a huge amount of crossing lines.

    7 votes
    1. unkz
      Link Parent
      This is beautiful. I’m working on something kind of similar for Idle Apocalypse, but much, much uglier.

      This is beautiful. I’m working on something kind of similar for Idle Apocalypse, but much, much uglier.

      1 vote
    2. Pavouk106
      Link Parent
      Thanks! This will come in very handy once I finally get to play the game. I played some X3 (aroind 50 hours or so?) and I loved all the aspects. I olayed some X: whatever between 3 and 4 and it...

      Thanks! This will come in very handy once I finally get to play the game. I played some X3 (aroind 50 hours or so?) and I loved all the aspects. I olayed some X: whatever between 3 and 4 and it was good too. But from what I gathered, X4 is the beat of them.

      1 vote
  3. [8]
    arqalite
    (edited )
    Link
    I'm considering developing my own Splitwise competitor. My partner and I were using it to split our bills and expenses, but Splitwise started A/B testing ads a few months ago. I initially ended up...

    I'm considering developing my own Splitwise competitor.

    My partner and I were using it to split our bills and expenses, but Splitwise started A/B testing ads a few months ago. I initially ended up in the group without ads, luckily, but my partner started getting a "Get Splitwise Pro!!!!!!!111" message everytime he tried to add anything.

    Then the ads were (obviously) rolled out globally, so now I've also started getting them. As such, we either jump ship to another app, or I build my own. Either way, not paying the absurd annual fee they want to remove ads (dunno how much it is in USD, but its 215 RON/year, which is a lot for Romanians).

    It'll be FOSS and non-commercial, of course, so not really a "competitor" per se, but an app that emulates 90% of what it can do.

    It will also be a good opportunity to practice my Java (or even learn Kotlin) since I plan to target mainly Android, with web and desktop frontends as a nice-to-have but not a priority.

    6 votes
    1. [7]
      tarehart
      Link Parent
      Thanks for starting this project! I've used short reckonings and split wise in the past, I might end up using yours. I highly recommend Kotlin, I found it fast and pleasant to learn.

      Thanks for starting this project! I've used short reckonings and split wise in the past, I might end up using yours.

      I highly recommend Kotlin, I found it fast and pleasant to learn.

      2 votes
      1. [6]
        arqalite
        Link Parent
        I started doing some research, because I don't want to have a central server storing user data - I'm already managing too much tech around my house, I don't want another server :) I wanted to make...

        I started doing some research, because I don't want to have a central server storing user data - I'm already managing too much tech around my house, I don't want another server :)

        I wanted to make it decentralized in some sort but I'd still need a central entity to connect users together.

        Then I decided to make it peer-to-peer with each user storing the database locally, but then I'd need a good database merging and conflict resolution strategy.

        One solution would be having one of the peers being the "leader" and storing the database, and the others would just make requests to add/edit/delete entries to it. But there are issues with it, including having the leader (the server in fact) being on 24/7, and/or checking for requests once a minute and having the clients send requests regularly until they succeed.

        I looked into IPFS and Web3 tech, but all would still require someone hosting the data, either me or the users.

        I think I'll do a prototype for each of these approaches:

        • The group leader hosts the data on the phone, other members send requests to it (with the downsides of locally hosting a database)
        • The database is stored somewhere where all members have access (this could be a Google Drive/Dropbox/other cloud provider integration maybe?)
        • Connect to a database server at the user's choice - this means I will spin up my own server - and if this turns out into an actual product, users can choose my server, a third-party, or self-host.

        These are rough ideas thought out in like 30 minutes, so I didn't evaluate all the downsides.

        3 votes
        1. [2]
          em-dash
          Link Parent
          You could consider looking into how Syncthing works. I don't actually know how it works, but it manages to solve this problem without web3ing it.

          You could consider looking into how Syncthing works. I don't actually know how it works, but it manages to solve this problem without web3ing it.

          1 vote
          1. arqalite
            Link Parent
            From what I understood from their docs, it connects to community-managed servers to make sure the device ID and IP addresses match. This can be turned off but then it's either LAN only, or the...

            From what I understood from their docs, it connects to community-managed servers to make sure the device ID and IP addresses match. This can be turned off but then it's either LAN only, or the connection drops if one of the devices changes IP addresses.

            I'll try a similar approach probably, maintain a master server just to pair devices together, but everything else is stored on-device.

            1 vote
        2. [3]
          tarehart
          Link Parent
          This feels like a classic use case for a cloud provider like AWS. I get the sense you're well aware of that and want to make it decentralized anyway, can you talk more about your reasons for that?...

          This feels like a classic use case for a cloud provider like AWS. I get the sense you're well aware of that and want to make it decentralized anyway, can you talk more about your reasons for that?

          (Sorry for the delayed reply, didn't notice I got logged out)

          1. [2]
            arqalite
            Link Parent
            Mostly because I don't wanna be responsible for managing user data or maintaining servers. A cloud provider could be a partial solution, but I don't want to pay for one, at least not right now....

            Mostly because I don't wanna be responsible for managing user data or maintaining servers. A cloud provider could be a partial solution, but I don't want to pay for one, at least not right now.

            However, I will need to host a small server that pairs users together, and then let users communicate via some peer-to-peer protocol. After the pairing is done, users no longer communicate with my server. That way I can have a user-friendly system for creating groups, but manage (close to) zero user data.

            I haven't started work on the multiplayer part yet, right now I want to nail the functionality for a single user, then expand to allowing multiple people to edit the data.

            1 vote
            1. tarehart
              Link Parent
              That makes sense, being responsible for user data does tend to turn projects into a chore. I have an instinct to host things centrally, but maybe that comes from my Xbox live host migration memories 😁

              That makes sense, being responsible for user data does tend to turn projects into a chore. I have an instinct to host things centrally, but maybe that comes from my Xbox live host migration memories 😁

  4. TumblingTurquoise
    (edited )
    Link
    I just finished making my first game ever using Godot. I have always wanted to do so, but I could never stick with it to the end. It's small, poorly organized, and the scripts are hacked together...

    I just finished making my first game ever using Godot. I have always wanted to do so, but I could never stick with it to the end.

    It's small, poorly organized, and the scripts are hacked together (I am not a programmer) but I am still proud of it. Even more, I learned a shit ton about this engine, and I plan to dive even deeper into it.

    EDIT:

    The game is a simple pong clone (I know, not exciting). Some of the main challenges I faced were:

    1. I wanted to use Google as a last resort; instead I tried as much as possible to rely on my own judgement & Godot documentation. Pretty self-explanatory.

    2. I do not have a programming background & I am terrible with math. I know my way around computers/tech/documentation, and I can manage writing scripts. But designing systems is something entirely new & strange to me.

    I really struggled at first with coming up with the (basic) math for accelerating the paddles, making the ball change direction dynamically and controlling the opponent AI.

    What really helped me out was to define what exactly it is that I wanted; for example, what is acceleration at its core? How do I want the paddle to behave when I start moving it? Or: how can I design an AI opponent that is not a perfect opponent, but also not random? What does that mean? Does it need to anticipate where the ball will be, or is an approximation enough?

    1. I can't organize my work

    The project & code is pretty much a mess. I am confident that I can improve this with some time, especially once I get more practice with Godot's tools. Right now, I bit off more than I could chew. I dipped my toes in a lot of areas that I had no clue about - sound, particles, animating & coloring programmatically.

    1. Godot is new to me, and I am new to it

    It took me several hours to wrap my head around its design philosophy of Scenes - Nodes and Signals. At first, I lost my progress on several Scenes because of some weird parenting changes I made. But I did end up liking Godot's design. Towards the end, when I wanted to play SFX on collisions, I implemented 90% of it without any outside source of information. It was pretty much intuitive at that point, and I could manage with the information I learned up until that point.

    I have to say that I love how the engine is committed to the same design pattern everywhere. Signals are also an interesting concept to me, even if they lent a bit to the chaotic/spaghetti project structure. I really can't see this game become bigger in a sustainable way. Luckily for me, I don't plan on working on it anymore.

    As some closing thoughts, I can say that Godot is pretty fun, intuitive, lightweight and well documented. I have tried using Unity in the past, but it was so bulky & packed of features that I got stuck in the analysis paralysis phase.

    This is the furthest I have ever gotten while making a game by myself. I really enjoyed the process, and my appreciation for FOSS grows stronger every day.

    4 votes
  5. [7]
    Notcoffeetable
    (edited )
    Link
    Decided to stand up a private server. I've always enjoyed server maintenance. I have a small personal website and a couple projects I would like to build out. I was also curious about the modern...

    Decided to stand up a private server. I've always enjoyed server maintenance. I have a small personal website and a couple projects I would like to build out.

    I was also curious about the modern Linux experience since it's been a long time since I admined a Linux system. There have been some conversations here on Tildes about how much easier it is than it used to be. I remained skeptical. Suffice to say, most of my expectations were confirmed.

    To set the stage, I went in expecting anything but evaluating the Linux set up process from the POV of an average computer user. Distro of choice was Debian, it's been around a long time good documentation, etc.

    • Hardware is about ~10 years old (honestly don't remember what the CPU is, but its an MSI board with onboard wifi and about 8GB of memory).
    • First located the correct ISO image. Not hard, but not sure how an average computer user would know what to pick. I went with the iso with the most included packages to reduce the likelihood that a driver I needed wasn't included.
    • Create the bootable media. Since I was on Windows there was a recommended utility to create a bootable USB drive with the downloaded ISO. Again, not difficult instructions were only a couple steps and clear enough.
    • Tried rebooting, no luck. Learned you need to shift-right click restart in windows to get to a boot menu now? Still didn't work. Realized my onboard video wasn't initializing until windows started, I think the monitor I was using was too "fancy." Luckily I have an old VGA monitor with a HDMI adapter in my closet. Swapping out monitors I successfully got into the boot menu and Debian installer.
    • Debian set up was easy enough. It detected my on-board wifi and I selected a repository. Then it complained it couldn't reach the repository. Proceeded anyway but a signal for issues to come. A note here, as this will be a server I don't plan to run it on wifi but my spare desk is in a different room so using wifi for set up was an ergonomic decision.
    • Got into the fresh Debian install. Looks like Linux, kind of bizarre to me that the taskbar only seems visible with a click that's annoying but again, not going to spend much time in the GUI here.
    • Immediately I notice I can't access the internet even though the system is telling me that it is connected to WiFi. Memories of Linux gone by, time to grab the Macbook. Do some research, looks like I am unfortunate enough to have an infamous intel wifi chip that doesn't play well. Recommendations abound, "you need to install the driver from the non-free repo, by the way you need to edit a config file to do so." or "make sure to install the latest driver, but not this one, that one." or the dreaded "yeah no way to fix it, here's my hack to automatically disable and renable wifi."
    • Okay fair enough, this is the experience I expected but also undermines everything I've seen that "it just works now!" Time to run to Best Buy for a 100ft ethernet cable and start trying some stuff. (I'm not gonna trot back and forth with a USB drive testing drivers.)
    • Get back from Best Buy, along with the 100ft Ethernet cord I set out to purchase I also secured: a mouse pad (the desk is glass and the book I'm using as a mouse pad is annoying me), a 10ft ethernet cable (for when the system is relocated to the closet near the router), another surge protector, Arby's Beef 'N Cheddar (which I have been craving and it's cheat day). Declined to purchase a switch and APC back up.
    • Get home, enjoy my Beef 'N Cheddar with curly fries, and run my ethernet cable.
    • Now apt get works, so that is cool. Kind of baffled that the user account isn't automatically included in SUDOer. Add myself to that.
    • My wifi drivers are already the most recent, looks like WiFi is off the table. That's fine "more secure anyway, don't even need to disable it."
    • Install Nginx and Nodejs. Build a test app, both are installed and configured correctly.
    • Create SSH keys for Github but can't clone my personal website. Keys are all registered but it won't authenticate. This is where I am until next weekend.

    It's been fun. I love this kind of work and problem solving. But I gotta say, maybe Linux will be ready for general use but it isn't going to be plug and play in all cases. It is still sensitive to it's hardware substrate.

    4 votes
    1. [2]
      conniereynhart
      Link Parent
      Regarding github... I assume you are already using the SSH - and not HTTPS - URL when cloning, but just to be sure, your clone command should look something like this: git clone...

      Regarding github... I assume you are already using the SSH - and not HTTPS - URL when cloning, but just to be sure, your clone command should look something like this:

      git clone git@github.com:your-github-name/your-project.git
      
      2 votes
      1. Notcoffeetable
        Link Parent
        Thanks for the sanity check! Yes I'm using the SSH URL. I ran some debugging commands and see the right key referenced but it still errors on authentication. I expect it's an issue with key or...

        Thanks for the sanity check! Yes I'm using the SSH URL. I ran some debugging commands and see the right key referenced but it still errors on authentication. I expect it's an issue with key or something will play with it more this weekend.

        2 votes
    2. [4]
      adutchman
      Link Parent
      The problems may have to do with it being 10 years old, haven't heard many issues with modern systems but that's anecdotal

      The problems may have to do with it being 10 years old, haven't heard many issues with modern systems but that's anecdotal

      1 vote
      1. [3]
        Notcoffeetable
        Link Parent
        The intel 7260 wifi chip is still use. Either way, it was modern at a point in time. I don't think it is unlikely that similar issues could occur on contemporary hardware. Not trying to bag on...

        The intel 7260 wifi chip is still use. Either way, it was modern at a point in time. I don't think it is unlikely that similar issues could occur on contemporary hardware.

        Not trying to bag on Linux. I love it. I just remain skeptical that transitioning from OSX/Windows isn't going to require more than the average technical literacy. In a managed ecosystem, it'll work fine. But switching a laptop or PC carried risks. Like what if you had this issue on a laptop? Now you have to carry a USB wifi adapter everywhere.

        2 votes
        1. [2]
          adutchman
          Link Parent
          That's fair. It's just that I haven't had any wifi issues at al in a long while, but I guess that drives the point home that it is extremely device dependent. In that sense you are right: Linux...

          That's fair. It's just that I haven't had any wifi issues at al in a long while, but I guess that drives the point home that it is extremely device dependent. In that sense you are right: Linux isn't plug and play, but what has changed that it is now coming in reach for general power users.

          1 vote
          1. Notcoffeetable
            Link Parent
            Agreed. These are edge cases and in my reading unique to certain serial on 7260 chips. I expect a newer one does not have this issue. For me it's "part of the problem solving" that I enjoy.

            Agreed. These are edge cases and in my reading unique to certain serial on 7260 chips. I expect a newer one does not have this issue. For me it's "part of the problem solving" that I enjoy.

            3 votes
  6. 0x29A
    Link
    Tangentially- Between jobs at the moment, purposely. I am moving sometime in the next few months and have a lot to take care of here in the meantime to prep for selling, moving, etc. So a bit...

    Tangentially- Between jobs at the moment, purposely. I am moving sometime in the next few months and have a lot to take care of here in the meantime to prep for selling, moving, etc. So a bit scary of a time. I have savings and will only have to dip a small amount into them overall prior to the move.

    Although because my most recent job was tech in nature it sometimes makes me not want to deal with tech at home- I'm starting to eye some various projects to work on.

    Hoping to actually get my opnsense/pfsense router build off the ground to replace the ER-X I have. It's been 30% completed for months now and just got put on a shelf. I need to complete this now that I have the time.

    Also eyeing what else I can maybe do in the meantime for 'fun'. Another long-stalled project I may have even talked about before, is a "mostly-text / super-light-weight / web1.0 / small web" style website for tech help, troubleshooting, basic learning and knowledge- hoping it could be a resource for people from all over the tech spectrum - from those that aren't technical at all- all the way to techs needing troubleshooting help.

    I'm so sick of SEO spam tech help sites that give bad advice, inundate you with ads, are covers for just bad affiliate programs to try to generate leads/sales for iffy software suites, etc. - I would love to have a quiet, performant, respectful tech help site that actually gives good advice and isn't just garbage.

    3 votes
  7. ADwS
    Link
    I'm still working on my other project, but a few days ago I quickly threw together a basic "event" generator tool to aid in playing solo-RPGs. It's just a basic HTML page with some javascript...

    I'm still working on my other project, but a few days ago I quickly threw together a basic "event" generator tool to aid in playing solo-RPGs. It's just a basic HTML page with some javascript attached that will generate a short prompt string to aid whenever I get some writer's block. I know there are a million and one of these out there, but I threw this together for myself, and it only took 3 or so hours, including the time it took to come up with 15 or so scenarios.

    Image of the generator menu: https://i.imgur.com/LISf0B8.jpeg
    Image of the log/journal menu: https://i.imgur.com/3iBjEuP.jpeg

    The nice thing about making this for myself is that I am literally not caring about what features other people might want in such a tool. I am purely thinking through my own workflow, and taking notes on how that workflow could be improved. I already have a plan to add another menu to act as an Oracle, which for those that don't play solo-RPGs, is a tool to decide the answer to yes or no questions.

    Technically, the thing is stupid simple and not impressive at all. It is basically just a list of objects defined in a json file. The objects can range from the event that is occurring to locations, items, and characters. Every event can specify which (if any) of those it needs for it to generate. This is to help when I only want events that specify a character, but not an item or location. (There are settings that get turned into a query so that only the events that are wanted will generate.)

    The "app" if it can even be called that, then takes this data, chooses an event that satisfies the criteria, generates the needed location, character, and item, if wanted, and spits out a string to the user. It throws that string into a "logbook" or "journal" that keeps track of the type of event that was generated so that event types don't repeat unless no other events fit the criteria.

    I purposefully am keeping these prompts vague, as a part of the fun of playing solo-RPGs is being able to fill in gaps so that these prompts can fit into your own story more seamlessly.

    2 votes
  8. Weldawadyathink
    Link
    I am still hard at work on AudiobookCovers.com. I wanted to combine my backend from algolia and pinecone into just Postgres. I didn’t want to learn how to host Postgres, so I looked far and wide...

    I am still hard at work on AudiobookCovers.com.

    I wanted to combine my backend from algolia and pinecone into just Postgres. I didn’t want to learn how to host Postgres, so I looked far and wide for a suitable hosted Postgres database. There are many options, and many have pretty generous free tiers. But I thought it was likely that I would exceed the free tiers by just a little bit. I wanted a host with actual usage based cost, without large arbitrary jumps between free and the cheapest paid plan. Most hosts I could find had a hard minimum of about $15/month if you exceeded the free plan. I found Neon, which seemed to fit the bill. I thought I would be able to fit in the free plan, but if I exceeded it, it would cost around $3/month, which is very reasonable. I transitioned the project to neon a few weeks ago.

    Clearly I didn’t read their website well enough, because they are changing their pricing starting February. The new pricing has a more generous free tier, but if you exceeded it in any way, your only option is $19/month. I felt a little burned by this, but I used that annoyance to finally learn how to host Postgres on docker on the smallest Hetzner vps, at around $5/month. As a bonus, I can also host my OpenAI CLIP search worker there. Previously it was on Google cloud run, which is an amazing service, but the cold start times were getting pretty annoying to deal with.

    Anyway around Monday this week I got everything transitioned from neon and cloud run to my own host. Now I got to start on the thing I was working on when neon’s pricing distracted me: rewriting the website. I originally started it with bare html/css/js. I was pretty inexperienced and using a framework was way more confusing to me than just doing it myself. I also think it gave me a better understanding of what frameworks do, and why they work in the way they do. But the site is now complex enough that I felt I needed a framework. The framework decision was pretty simple. I wanted to be able to contribute more to the AudiobookShelf project, and it used Vue, Nuxt, and Tailwind. So that is what I am using.

    I started out playing around with the vue tutorial that is hosted on their website. After I felt like I figured out the what’s and whys of vue, I made a new project and jumped in. It was pretty frustrating to figure out all the stuff with the nuxt v3 upgrade and to get tailwind working in a v3 project, but I finally got it working and deployed it as a static site to Cloudflare pages. Once I actually got it working, it was surprising how straightforward vue development is. I managed to recreate some animations and styles that took me a few days after work in an hour. I am excited to learn more about vue!

    2 votes
  9. ShroudedScribe
    Link
    I'm contemplating the homelab setup upgrades I would need to take advantage of Cox 2g fiber. I think I've finally made my decision on this. Now to determine where they would install the ONT and if...

    I'm contemplating the homelab setup upgrades I would need to take advantage of Cox 2g fiber. I think I've finally made my decision on this. Now to determine where they would install the ONT and if that will work with where I want to relocate the homelab equipment...

    I'm trying to go with something quieter, so I'm looking at replacing my loud switch with two quieter ones - one that has 10g ethernet ports, and another that has 1g with PoE to support cameras in the future.

    1 vote