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

5 comments

  1. [3]
    Apos
    Link
    I'm reworking my pathfinding algorithm. Figured out a new way to implement it. It's a real space pathfinding algorithm or also called any-angle path planning. snip1 snip2 snip3 I made a video to...

    I'm reworking my pathfinding algorithm. Figured out a new way to implement it. It's a real space pathfinding algorithm or also called any-angle path planning.

    I made a video to explain the general idea a while ago: https://www.youtube.com/watch?v=UbMAoXffbY4. With my new findings I'll have to record a new one.

    Recently I've been remaking my game's map editor, making it a lot more responsive. Decided to revisit the pathfinding and I found a more efficient way of using the data from my space optimization pass. I'm also doing some optimizations like picking better data structures.

    Would be nice to eventually write a research paper to explain what I'm doing in details and compare it to other similar algorithms.

    Been streaming my development on Twitch.

    5 votes
    1. [2]
      streblo
      Link Parent
      That's really neat! I've been toying with the idea of making a small game engine for fun -- not sure if I want to actually make a game but making an engine seems like a fun hobby project. I...

      That's really neat! I've been toying with the idea of making a small game engine for fun -- not sure if I want to actually make a game but making an engine seems like a fun hobby project. I stumbled my way into this series on implementing an ECS and now I have some ideas if I were to write my own.

      Also, did you make your own art/music? Your game looks really good, I love the aesthetic.

      2 votes
      1. Apos
        Link Parent
        Thanks! A bunch of my friends made their own ECS too. For example: https://github.com/pandepic/ElementEngine/tree/main/ECS. Making engines > Making games. 😅 In the MonoGame discord, there are many...

        Thanks! A bunch of my friends made their own ECS too. For example: https://github.com/pandepic/ElementEngine/tree/main/ECS. Making engines > Making games. 😅 In the MonoGame discord, there are many people sharing their work and helping others, some don't even use MonoGame, but the dev community there is really hardcore, making nearly everything themselves.


        The art is done by Domen Kozelj, music is done by Mike Skalandunas.

        Originally I was doing everything myself, but at some point my scope grew and I realized it would take me too long to do the art and music and it would still look less good than what pros can do.

        Here is some art I did myself before:

        All of those took me a lot of time and they still look like programmer art. Then I get Domen Kozelj, we speak for a few weeks and then when he does draw something, he does this one within the first day. It's a completely different league.


        The idea for my game is that you're on an alien planet where there's a massive volcano. The volcano is so big that all life has evolved to use the volcanic energy in some ways. For example the trees have free flowing lava inside of them. In different areas, the lava can burst out creating explosions. In my game, you control a little creature running on top of the trees trying not to get exploded.

        It's a top down rhythm puzzle game where obstacles are repeating loops. You learn the patterns, figure out the safe spots and then you can keep moving forward.

        2 votes
  2. csos95
    Link
    I've been working on a command line epub library/reader for the past two weeks. This is a redo of a project I worked on at the start of 2020 to read stories from fimfarchive (an archive of stories...

    I've been working on a command line epub library/reader for the past two weeks.

    This is a redo of a project I worked on at the start of 2020 to read stories from fimfarchive (an archive of stories from the My Little Pony fanfiction website Fimfiction that updates quarterly).

    Description of the old project and what went wrong.

    The main features of the project were:

    • load story metadata and contents from fimfarchive releases
    • search/filter stories based on title, description, author, rating, completion status, words, likes, dislikes, and wilson lower bound
    • show the metadata of a story and link to prequels/sequels
    • parse the html of a story and style it in a way that looks nice on the command line
    • create bookshelves of stories (I usually used them for stuff like "read it later", "reading", and "read")
    • bookmark your place in a story
    • import/export your bookmarks and bookshelves

    I had initially made it command line only, and it worked great, but then I made the mistake of deciding "I'll just quickly add X" multiple times and ended up with a massive mess in the end.

    Things I added:

    • rest api
    • web client
    • move the command line client to using the api
    • desktop gui
    • graphql api when I got tired of changing the rest api responses to match every client or doing multiple requests to get the necessary information
    • moving all three clients to the graphql api

    So along the way I had to do multiple refactors and the application was frequently in an unusable state.
    To try to cut down on the build time for people that didn't want all the bells and whistles, I split the project into multiple parts and set which ones get imported/used at build time.
    Because of the way I had set up the initial command line client, I struggled with issues of where things were declared/which modules were optional and ended up splitting things up even more instead of reconsidering the idea to split it up how I did.
    In the end, it became ten different modules, and any changes/new features usually required modifying at least half of the modules to make the changes and keep the others from breaking.
    After a while, I got tired of the amount of work I was putting into it for something that was tightly coupled to one specific project, which was in turn tied to one specific site.
    I had been planning on writing a self-hosted writing/reading site tailored to fanfiction, so I decided to work on that instead and then make a module to import stories from fimfarchive into that.
    Then 2020 happened, and that project got put on hold too.

    About two weeks ago, someone on the discord for fimfarchive was asking about getting a copy of the old project because they wanted a way to read stories from the archive.
    That motivated me to take another crack at it, but this time I'm trying to avoid the things that worked against me last time.

    Instead of tying it to fimfarchive specifically, I'm making it a general epub library/reader with modules to search archives and import books from them into the library.
    Instead of trying to split things up to a ridiculous degree to work around the weird architecture of the initial app, I'm doing an imitation of The Elm Architecture and if I end up wanting to split anything out, the module and its use in the main module will be all that needs to be wrapped in a build time option.

    What I have implemented right now is:

    • scan for epub files and import into a database
    • read books, browse table of contents, and jump to chapter
    • bookmark your place in a book

    Right now working on adding the searching/import of fimfarchive stories and after that I'll do the same for Project Gutenberg.

    2 votes
  3. tomf
    Link
    This is hardly technical, but I wanted an iOS shortcut that would play some music then, after a short delay, play some music if I pop my phone on a charger after 11pm. Under Automation Date Format...

    This is hardly technical, but I wanted an iOS shortcut that would play some music then, after a short delay, play some music if I pop my phone on a charger after 11pm.

    Under Automation

    Date 
     Format [Current date], custom > HHmm
    Text Match
     Match ^:?(2[3]|0[0-4])\d\d$ in [Formatted Date]
    If [Matches] [has any value]
     - Volume > Set Volume to 6%
     - Play [a playlist I chose]
     - Wait [45 seconds]
     - Hue 
         Set lights in [room] to [scene]
     - Set timer to 120 minutes (turns music off after 2hrs)
    End If
    
    

    iOS shortcuts are neat but unnecessarily complicated when it comes to the timing.

    2 votes