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?

11 comments

  1. [3]
    Apos
    Link
    I'm doing work on my main game right now. It's called Rashtal. Streaming my development here: https://www.twitch.tv/apostolique One big thing I'm working on is temporal pathfinding. Temporal...

    I'm doing work on my main game right now. It's called Rashtal. Streaming my development here: https://www.twitch.tv/apostolique

    One big thing I'm working on is temporal pathfinding. Temporal pathfinding means that you can do pathfinding around deterministic obstacles that will exist later in the future. Do you guys know anything about that? I have a working solution, but I'd really like to know who else is working on that. I can barely find any information from the searches I did so far.

    I posted a video about my free space pathfinding algorithm here: https://youtu.be/UbMAoXffbY4.

    4 votes
    1. [2]
      DataWraith
      (edited )
      Link Parent
      From what I can tell, temporal pathfinding is done in 3D (through time) instead of in 2D (spatially only). So you have an (implicit) 3D-structure you're pathfinding through, with the obstacles...
      • Exemplary

      From what I can tell, temporal pathfinding is done in 3D (through time) instead of in 2D (spatially only). So you have an (implicit) 3D-structure you're pathfinding through, with the obstacles blocking certain cells in that volume for the duration they are there. David Silver (of AlphaGo fame) has a good tutorial (PDF) on that, focused on multi-agent pathfinding, where other agents are the obstacles.

      Your free space pathfinding algorithm looks like a form of NavMesh to me, except that it is not hard-coded, but automatically generated. There are several efficient ways for using Navigation Meshes for pathfinding, and there used to be a great tutorial for that, but right now my Google-fu is failing me.

      A few more points:

      • You can also use Hierarchical A* (PDF) or Multi-Resolution A* if speed is more important than simplicity.

      • movingai.com is/was a competition for pathfinding algorithms on grids and has some interesting entries.

      • RedBlobGames has some fantastic material on Pathfinding in general and A* specifically.

      • Other interesting keywords you might want to look into (in no particular order):

        • Contraction Hierarchies
        • Any-Angle Pathfinding (Theta* was one, I think)
        • Subgoal-Graphs
        • Fringe Search
        • Jump Point Search
        • Jump Point Search+ (aka JPS with goal bounding) -- Video

      Edit: I'm a huge nerd, so those are all very interesting to me, and TBH I went a bit overboard with the links and keywords. From your video, it looks like you have a fine implementation already. I crossed out the keywords least likely to help you, but I'll still leave the comment as is otherwise, as a resource for anyone else doing pathfinding.

      5 votes
      1. Apos
        Link Parent
        Sorry for late reply. Not actually ready to reply for real yet, but I'm going through the list. There are never too many pathfinding links. Pathfinding is awesome!

        Sorry for late reply. Not actually ready to reply for real yet, but I'm going through the list.

        There are never too many pathfinding links. Pathfinding is awesome!

        3 votes
  2. [3]
    vord
    Link
    For work I'm hacking together a REST API using Flask for developer CI/CD pipelines to run schema/code updates against our ERP system without disclosing passwords. Acts as a dumb pipe with an audit...

    For work I'm hacking together a REST API using Flask for developer CI/CD pipelines to run schema/code updates against our ERP system without disclosing passwords.

    Acts as a dumb pipe with an audit trail. Developers get a token with role access in various environments and service accounts, and runs their files via preferred tool (sqlplus, liquibase, etc), and sends back stderr and stdout.

    It's paired with a docker image to be used as a Gitlab runner with simple REST clients acting as the proxy (sqlplus.py, liquibase.py) for the actual tool.

    It's a nasty solution born out of a bureaucratic organization going 'DevOps' from the top and bottom, but the middle has 0 comprehension and fights every change tooth and nail.

    If anybody knows of an existing free tool that can 100% prevent database password disclosure, have role-based access, and keep a searchable audit trail... let me know. I'm on a tight deadline because the current preferred alternative is worse.

    3 votes
    1. [2]
      Deimos
      (edited )
      Link Parent
      You're trying to avoid disclosing the database password to who, the users running the tools? I'm honestly not sure if it will be helpful or a dead-end, but it might be worth looking into SCRAM...

      You're trying to avoid disclosing the database password to who, the users running the tools?

      I'm honestly not sure if it will be helpful or a dead-end, but it might be worth looking into SCRAM authentication to see if it might be usable to keep the password hidden. I don't have meaningful experience with it personally, but its purpose seems to be allowing authentication without exchanging the password itself. Here was a recent article I saw about using it for a database in a situation with an intermediary (the pgBouncer connection-pooler for PostgreSQL), so that might have some similarities: https://info.crunchydata.com/blog/pgbouncer-scram-authentication-postgresql

      2 votes
      1. vord
        (edited )
        Link Parent
        Fundementally yes. Legacy system with 5ish service accounts holding 'the keys to the kingdom' so to speak, and several dozens of developers who need those accounts to deploy stuff (because schemas...

        You're trying to avoid disclosing the database password to who, the users running the tools?

        Fundementally yes. Legacy system with 5ish service accounts holding 'the keys to the kingdom' so to speak, and several dozens of developers who need those accounts to deploy stuff (because schemas per application was apparently too hard). Lots of sensitive data, need good audit trails, but can't do db level auditing (for reasons I don't understand).

        Wasn't that bad in the 'old world' where bureaucracy trumped deployment speed, but that's changing at an odd pace resulting in some truely akward design decisions.

        This is an organization that is still coming around to the idea of using a source control system more sophisticated than a samba share.

        2 votes
  3. [3]
    m15o
    Link
    I'm working most of my free time on https://midnight.pub - it's a social-network/virtual pub built with nextjs, faunadb and Algolia. I wanted to build something that's minimal like write.as but...

    I'm working most of my free time on https://midnight.pub - it's a social-network/virtual pub built with nextjs, faunadb and Algolia. I wanted to build something that's minimal like write.as but more social - knowing when you are notified, for example. I've also included elements from roamresearch; bi-directional linking for example, which makes an interesting domain model. Everything is an "entry" even replies are. And an entry can connect to N other entries through references. Overall, I'm having lots of fun building it. :P

    3 votes
    1. [2]
      mxuribe
      Link Parent
      The concepts here sound very intriguing! I've bookmarked this to come back once i have a little more bandwidth to dive in. Kudos!

      The concepts here sound very intriguing! I've bookmarked this to come back once i have a little more bandwidth to dive in. Kudos!

      2 votes
      1. m15o
        Link Parent
        Thanks a lot! I appreciate it. :)

        Thanks a lot! I appreciate it. :)

        2 votes
  4. kemosabe
    Link
    I was tinkering the other week, and got a basic servlet up and running on Heroku where you can paste in the generated SQL query and binds from Hibernate's logging output, and it will construct an...

    I was tinkering the other week, and got a basic servlet up and running on Heroku where you can paste in the generated SQL query and binds from Hibernate's logging output, and it will construct an executable query for you. Was kinda fun, and is sometimes even useful.

    https://marcos-dev-utils.herokuapp.com/

    3 votes
  5. dedime
    Link
    I'm currently funemployed, so I'm working on upgrading my programming skills. I come from a sysadmin background. Golang has been particularly fun to work with, so I've decided to solve a small...

    I'm currently funemployed, so I'm working on upgrading my programming skills. I come from a sysadmin background. Golang has been particularly fun to work with, so I've decided to solve a small problem I have with it.

    It's essentially a homedir dotfile manager, for files like your ~/.bashrc or ~/.vimrc. The idea was to keep it as simple as possible, and leverage Git for storage as it's fairly ubiquitous and trustworthy. It also makes use of a ~/.config/go-take-me-home/includes file, which is where you can list which files in your home dir you want to manage

    There's two modes to running it:

    1. When you run go-take-me-home -repo $GIT_URL -pull, it will attempt to pull files from the git repo and copy them to your home directory, overwriting any existing files with the same name. It only copies / overwrites file you have listed in your includes file.

    2. When you run go-take-me-home -repo $GIT_URL -push, it will copy files to a tmp directory, stage them in git, commit with an auto-generated message, then push to your remote git repository. Again, it only copies / commits files you have listed in your includes file.

    If you set the env var $GTMH_REPO, you don't have to specify the -repo flag.

    Ease of setup / installation is a priority, so I'm making it as easy as I can. Build instructions for golang / docker are included, as well as prebuilt binaries, which are built on each tag I make in GitLab. Ideally, it'll be a simple copy/paste shell script to get it installed. Git is not required to be installed, it uses go-git for the git implementation.

    I'm planning on combining this with some handy scripts in my .bashrc to do some cool stuff, TBD. But I'm mostly just excited to have a great way to managed my dotfiles across all my machines, I frequently reinstall my OS. It's pretty much done, but I haven't done much testing at all and error handling could probably be greatly improved.

    3 votes