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

8 comments

  1. secret_online
    Link
    I had a DM through CurseForge (of all places) wondering whether I could port v2 (a complete rewrite) of my Tiny Flowers Minecraft mod to 1.21.1, which is a somewhat popular version of Minecraft...

    I had a DM through CurseForge (of all places) wondering whether I could port v2 (a complete rewrite) of my Tiny Flowers Minecraft mod to 1.21.1, which is a somewhat popular version of Minecraft for mods. I originally released v2 for 26.1 (released early this year) because it made for a good cutover point, and I could always try to backport it later. Well, now is later.

    Of course CurseForge, being CurseForge, highlights the most recently released file for your mod, not the one for the most recent version of the game, and I want the most recently released file to be for 26.3. I don't want it to be just an empty release So now was as good a time as any to implement a feature I've been thinking of: allowing the tiny flowers to be put in a Flower Pot. This wasn't so bad, a bit more than a day's work over the weekend. At least I'll have something substantial to release for newer versions of the game and I can ensure that the latest version of the game is highlighted on CurseForge.


    Now on to backporting. My plan is to go back through some major versions step by step, so I don't dealing with 2 years' worth of game changes all at once. Starting with the current version of the game (26.3), I've gone back to 26.2 and 26.1.2. These weren't so bad, there were some minor changes here and there, mostly slight refactoring to some of the game's classes that I happen to depend on.

    My next milestone is the version just before 26.1: 1.21.11, which, as of writing, is what I'm still working on. There have been four major flavours of pain:

    1. Major refactors. Mojang is constantly refactoring the game, for the better, but this means that going back in time is an annoyance.
    2. Classes have moved. This is somewhat related to the above, but with one extra twist: mappings. Prior to 26.1 the Minecraft .jar files were obfuscated. In order to actually work on the codebase the obfuscated classes need to be remapped, and of course, there are competing standards. The mod template I'm using uses mojmaps, Mojang's official mappings. But anything related to the Fabric modloader, including the very useful mcsrc.dev, uses Yarn mappings which have much less legal potential surrounding them when it comes to tooling. Luckily there's mappings.dev to help translate between them. So quite often I'm copying class/method names into mappings.dev to find out what they're really called so I can use them. It's just an extra layer of work on top of my existing lack of familiarity with Minecraft's code.
    3. This is the last one I need to figure out. Rendering completely changed. Because the tiny flowers are data-driven I can't easily use the blockstate system to render the flowers, and instead load the models and send them off myself. This is a problem when Mojang completely changes how rendering works. Every class has changed, models are more explicit in the split between unbaked and baked, and tinting (for changing things like grass colour) is completely different. I've written some code that look kinda hacky but doesn't work yet, but at least the game runs now and I can start playing around some more.

    Oh, and remember how my target version was 1.21.1 and I'm only at 1.21.11? There's still another year's worth of game development I need to go backwards through. There are things I know have changed in the game that will affect me (Wildflowers and Leaf Litter were only added in 1.21.4, and that came with a minor change to Pink Petals), but there's probably more that I don't know. I don't have to do this backport, but I've set it to myself as a challenge so I'm going to give it the best I've got.

    6 votes
  2. ShroudedScribe
    Link
    I was going to try out python-based Cloudflare workers, now that they are officially supported (out of beta). But I'm struggling with getting my local dev environment set up. I think it's because...

    I was going to try out python-based Cloudflare workers, now that they are officially supported (out of beta). But I'm struggling with getting my local dev environment set up. I think it's because I'm doing this on Windows - I should probably just do it from a container on my Linux server or something. (WSL gave me issues too.)

    2 votes
  3. archevel
    Link
    Mentioned in another post, but might be interesting for others to take a peek at https://archevel.github.io/laya/ It is a condensed model that runs in the browser similar to typesafe.ai's Jev model.

    Mentioned in another post, but might be interesting for others to take a peek at https://archevel.github.io/laya/

    It is a condensed model that runs in the browser similar to typesafe.ai's Jev model.

    1 vote
  4. [3]
    ali
    Link
    I have some SO ARM101, and I decided to make one of them play chess. It’s still early, but I think I’m almost ready to play fully. There’s still some oddities in calibration. If someone here wants...

    I have some SO ARM101, and I decided to make one of them play chess. It’s still early, but I think I’m almost ready to play fully. There’s still some oddities in calibration.

    If someone here wants to play against me, I’ll do my move once I manage to fix the current move for black, and then it’s basically open to anyone to basically be my opponent for my moves.
    The site is chess.watermelonson.com

    I’ll make a post about it once I’ve finished it, but I am posting short videos about it daily. I think by the end of this week it will be ready, the write up will take a bit more tho

    1 vote
    1. [2]
      archevel
      Link Parent
      Cool! I hope my move input didn't break it :) fun to see it act. Didn't dare to touch the "flip board"-button, bit it was tempting!

      Cool! I hope my move input didn't break it :) fun to see it act. Didn't dare to touch the "flip board"-button, bit it was tempting!

      1 vote
      1. ali
        Link Parent
        Haha flip board is just visual! The move didn’t break anything! I am just still fine tuning the moves so it’s fun to have people join in. Funny enough when the arm noticed the placement slightly...

        Haha flip board is just visual! The move didn’t break anything! I am just still fine tuning the moves so it’s fun to have people join in. Funny enough when the arm noticed the placement slightly off center it tried to adjust it.

        But then it picked up the knight and placed it on that square :D

        1 vote
  5. adutchman
    Link
    I fell into a rabbit hole of trying to optimize import times in a Python project (I know, seems pointless, but I made a fair amount of progress). For it, I use an LLM to instrument the package...

    I fell into a rabbit hole of trying to optimize import times in a Python project (I know, seems pointless, but I made a fair amount of progress). For it, I use an LLM to instrument the package with Pyinstrument, see what the bottlenecks are, and suggest a change. This has worked quite well, but one package I could not get rid of stood out to me: Pint. It's a supposedly small package for converting units, but it took a while (some 500 odd ms I think) to get imported and started.

    Turns out it has all sorts of complicated machinary to read a DSL at import time, which was quite slow. I tried improving it but ran into the limits of the architecture.

    That's when I thought: surely, this does not have to be complicated? So I am currently working on a library which implements the core functionality of Pint, but with a focus on speed and simplicity.

    I used LLMs in some novel ways for me here: use it as a brainstorming partner, as a researcher on other tools and as a researcher to see how packages actually use the package. It also helped to have it implement the arithmetic itself, since that is not my strongest suit. I think the result is pretty nice, I hope to finish it in a few weeks (hopefully, we all know how these things often go).

    1 vote
  6. arqalite
    Link
    I'm building a finance and personal goal tracking app for my partner. It's currently codenamed "Lifesync" and I have a usable demo here. I am very much a backend developer so UI work is a bit...

    I'm building a finance and personal goal tracking app for my partner. It's currently codenamed "Lifesync" and I have a usable demo here.

    I am very much a backend developer so UI work is a bit tough for me, but I'm having fun getting animations working and stuff. The browser drag and drop API is horrendous though, it's a miracle stuff works.

    I'm taking a break to play through and finish CONTROL Resonant right now, but after that I want to go on a bug squashing session as my partner identified a few issues. Then I want to add a new page dedicating to mortgage tracking, since he wants to see how many months he has left, the principal and the interest, and how those change when paying in advance.

    For the foreseeable future it will be a tool built for his use and preferences, but I do want to open-source it at some point should anyone else find it useful.