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

20 comments

  1. [5]
    ThatFanficGuy
    Link
    Still working on Cataclysm mods. Recently I've managed to add the Service Weapon from the game Control, partly as an exercise. Gonna publish a similar morphing weapon – based on Aftershock's...

    Still working on Cataclysm mods. Recently I've managed to add the Service Weapon from the game Control, partly as an exercise. Gonna publish a similar morphing weapon – based on Aftershock's hard-light bow – soon, 'cause it's a fun type of a weapon to have in these games. Also expanding the tailoring system of the game somewhat by adding fictional items of casual-looking clothing aimed for combat, as well as adding a variety of new materials and recipes. Also continuing to work on Homestead and Project APEX, both of which are far from release but receive a steady stream of commits.

    Recently, after realizing that (A) I won't be able to jury-rig an engine for the text-based RPG, (B) I want to make more than one of those, I've been tinkering with the Text Engine. After thinking about it, I figured there must have been a solution for this kind of work already – and there was! Space Rangers, a small franchise about space travel and combat, has had pretty much the same thing I want already built. I won't be able to just borrow it – it's a proprietary part of the games, and in a language I don't understand – so I'm going to reverse-engineer it as best as I can. Add RPG elements to it, and it's pretty much what I need.

    Had some work done on Intergrid. The main blocker so far has been choosing the license so I could publish it on GitHub. My worry was that by mislicensing it I could open myself to a whole load of legal trouble I absolutely don't need. And hey, I'm a nobody doing nothing of value, but it's better to be safe when it comes to the law. So now that the license is there, I'm gonna turn the repo public: just need to file the issues and projects.

    When I want to get a break from that, I do this set of programming exercises for handling strings. They're aimed from the K(?) language, but strings are strings – and it's fun to do. Shame this is only about strings: I wish I could have sets for arrays and numbers from the same person: they know how to make a nice challenge presentable.

    Most of the string functions in JS ended up being one-liners, and I'm trying to make them all in this fashion, but some I can't but have multi-line, with accumulators and other sorts of temporary variables. Only a couple left to do, though, and I think I'm fine with multi-liners as long as they work efficiently. It's not about the size of your function, after all: it's how you make it work.

    4 votes
    1. [4]
      hungariantoast
      Link Parent
      What license did you end up choosing for Intergrid? What legal issues are you worried about encountering?

      What license did you end up choosing for Intergrid? What legal issues are you worried about encountering?

      2 votes
      1. [3]
        ThatFanficGuy
        Link Parent
        AGPL-3.0. It appears to fit the bill best, because it's aimed for "Internet services" that naturally disseminate their source code when the user accesses one. Other common licenses, such as GPL...

        AGPL-3.0. It appears to fit the bill best, because it's aimed for "Internet services" that naturally disseminate their source code when the user accesses one. Other common licenses, such as GPL and MIT, don't seem to have those clauses, and I don't know any better, so I'd rather be safe than sorry.

        What legal issues are you worried about encountering?

        I have no idea. This is enough for me to make sure I have as many of my bases covered. Building Intergrid is a big deal for me, and I want to ensure it's safe from bullshit and abuse.

        3 votes
        1. [2]
          hungariantoast
          Link Parent
          Nice! I agree with your reasoning. The extra coverage the AGPL provides is important. I think you made the right call.

          Nice!

          I agree with your reasoning. The extra coverage the AGPL provides is important. I think you made the right call.

          1 vote
          1. ThatFanficGuy
            Link Parent
            Thank you. Now I just need to get back to working on the damn thing. Big codebases are always scary to return to after a while.

            Thank you.

            Now I just need to get back to working on the damn thing. Big codebases are always scary to return to after a while.

            2 votes
  2. [3]
    cmccabe
    (edited )
    Link
    Since my kids are out of school, they have been spending some time playing around with MIT Scratch. I have given them a few simple assignments, like building a simple side-scroller game or a...

    Since my kids are out of school, they have been spending some time playing around with MIT Scratch. I have given them a few simple assignments, like building a simple side-scroller game or a chase/escape game, to give them something to learn by. However, I am running out of ideas for assignments.

    Do anyone here have suggestions for Scratch assignments? I haven't been very thrilled with the examples on the Scratch website. I am particularly interested in projects that are other formats than games. I would also like to see a sequential "curriculum" that has the kids progressively learn more complex concepts.

    (Edit: added link.)

    4 votes
    1. [2]
      ThatFanficGuy
      Link Parent
      I'd suggest going to basic data types and working with those. This works with any programming language, and simple task with different goals help learn the language (and, to some extent, the...

      I'd suggest going to basic data types and working with those. This works with any programming language, and simple task with different goals help learn the language (and, to some extent, the general principles of programming) better. Like:

      • "Build a program that takes a string of text and returns the string reversed"
      • "Out of all the strings you can provide, return the longest one"
      • "Build a program that, when given a string of text and a single letter, replace all instances of that letter in the string with X and return the resulting string"
      • "Out of all numbers provided, return the smallest one – or 0 if the smallest number is negative"
      • "When provided a number, return a string of random letters with the length of said number" (number is 15 → string is 15 characters long)
      • "Order the entered numbers in ascending order"
      • if arrays are a thing in Scratch, "Given two arrays, return true if they're equal (i.e. if all elements of both arrays are equal to each other and are in the same places) and false otherwise"

      I wish you could just look at NPM and figure out which packages are easy to replicate so you could turn them into exercises/assignments.

      4 votes
      1. cmccabe
        Link Parent
        Thanks! These are good ideas.

        Thanks! These are good ideas.

        2 votes
  3. [6]
    archevel
    Link
    I finally have started building on an elm app for running tabletop RPGs over the internet (similar to roll20/fantasy grounds). The plan is to handle the communication between players using webRTC...

    I finally have started building on an elm app for running tabletop RPGs over the internet (similar to roll20/fantasy grounds). The plan is to handle the communication between players using webRTC so there is very little servers needed (somewhere to serve a static page and possibly a stun/turn server, but I think I can just piggy back on some existing ones). All data will be stored in local storage and there will be no registration or sillyness required. DMs will just share a link with the session info encoded. Have some more ideas of interesting features, but I'll leave that for when I have something minimal thing working.

    2 votes
    1. [5]
      ThatFanficGuy
      Link Parent
      Consider also implementing a basic export/import function for game states. Local storage is not quite as reliable as the file system, and switching PCs and even browsers can be a bitch if you're...

      Consider also implementing a basic export/import function for game states. Local storage is not quite as reliable as the file system, and switching PCs and even browsers can be a bitch if you're the DM (I'm assuming it's the DM who holds most of the vital data about the game). JSON encoding should suffice.

      2 votes
      1. [4]
        archevel
        Link Parent
        Definitely on the table, but I'm thinking I'll first distribute the game state changes to all participants so that things don't fall apart if the DM changes etc. I think all rolls/randomness and...

        Definitely on the table, but I'm thinking I'll first distribute the game state changes to all participants so that things don't fall apart if the DM changes etc. I think all rolls/randomness and state changes will be handled by each participant sending some ActionRequests to the DMs machine that then ensures to send out the result of applying that change. Eg. Player A send "roll 2d6" to DM. DM generates 2 random numbers between 1 and 6. DM sends to all participants "Player A rolled 2d6 with the result x and y". That way those changes can jus be replayed to reconstruct the entire game. Its basically event sourcing :)

        3 votes
        1. [3]
          ThatFanficGuy
          Link Parent
          Makes sense. I have three questions about your implementation of it: How do you approach tokens for game IDs? I'm assuming that, by distributing the game state to all players involved, you're not...

          Makes sense.

          I have three questions about your implementation of it:

          1. How do you approach tokens for game IDs?
            I'm assuming that, by distributing the game state to all players involved, you're not neglecting the fact that some players may play more than one game. Thus I'm assuming you're going to need to differentiate the game somehow. Names of games can change, specific players and DMs can change, the setting, the geography all can change – and thus, can't be sourced from reliably. So, how do you source it?

          2. How are you planning on implementing DM change, in broad strokes?
            Do players vote or otherwise vouch of the new DM? Does the new DM assume control of the realm of the game?

          3. How are you aiming to maintain continuity between players?
            Some players may disappear for a few sessions due to vacations, illness, or other life situations. If the games proceed without them, the missing players will have to be managed back in, and their stored game states – equalized with others'. Are you using version control systems? If so: which? If not: how are you approaching it?

          2 votes
          1. [2]
            archevel
            Link Parent
            Good questions :) My initial thought is to use a Guid to identify a campaign. A DM goes to https://<somedomain>/#/campaign/<guid> and the app reads the stored campaign for the given Guid. A...

            Good questions :)

            1. My initial thought is to use a Guid to identify a campaign. A DM goes to https://<somedomain>/#/campaign/<guid> and the app reads the stored campaign for the given Guid. A campaign consists of some set of Scenes with characters and obstacles etc. A DM can invite participants generating a session invite as a link e.g. https://<somedomain>/#/campaign/<guid>?sessionInfo=<encodedsessioninfo> which lets the app hook people up using webrtc to the DM. The DM sends out the current game state to all participants. In case DM drops out one of the other participants is promoted to DM. Since the basic building block is a Scene anything that can be represented on a board can be encoded as part of the campaign. Other stuff associated with a campaign , e.g. texts, backgrounds, character sheets, etc etc would be managed outside of the app.

            2. Since the games I've been in have been between friends there is a degree of trust. So being able to hand over the DM role to another player could either be handled by that player inviting people to the same campaign (starting from the latest state they have available for a given campaign guid), but in a new session. I haven't thought too deeply about this :) Maybe this should be handled by forking the campaign when a new DM takes over...

            3. I plan on implementing some kind of rolling snapshot. So at the the start of a session the DM sends out a snapshot of what the campaign "looks like", eg. scenes and those scenes states. So if there is a completely new player they get that snapshot, but not all the previous events. Then from that snapshot they can just apply the events happening after that to get the game into the correct state. Since all events are serialized through the current DM there shouldn't be any conflicts etc. If a player is out for a few sessions they just get the latest snapshot when they start up again (like all players).

            2 votes
            1. ThatFanficGuy
              Link Parent
              Consider the fact that, while the player is out, their character is being played by someone else. You said there's an element of trust in your tabletop circle, so this isn't impossible. When they...

              So if there is a completely new player they get that snapshot, but not all the previous events. <...> If a player is out for a few sessions they just get the latest snapshot when they start up again (like all players).

              Consider the fact that, while the player is out, their character is being played by someone else. You said there's an element of trust in your tabletop circle, so this isn't impossible. When they start again, they either lose all history of their game and character (if they only get the latest snapshot and can't reconcile it somehow), or they lose a potentially-important piece of their character's history (if they can in fact reconcile it).

              I'd be jarred by that. This shit is tracked anyway – but I'm missing it because I've been away? And if I'm now missing everything up to this point, as if my game didn't exist... hoo boy I'd be livid.

              Do consider this when implementing game history.

              1 vote
  4. [3]
    joplin
    Link
    After rediscovering the Apple // version of Prince of Persia, I got inspired to start learning SpriteKit. I wasn't aware they had a bunch of really good physics tools in it! It does some really...

    After rediscovering the Apple // version of Prince of Persia, I got inspired to start learning SpriteKit. I wasn't aware they had a bunch of really good physics tools in it! It does some really neat stuff by default.

    I'd love to make something in a similar vein to Prince of Persia, but I have zero art skills, and know very little about game design. So while I probably won't produce anything worth sharing, I'm still going to take some time to learn some of these skills. We'll see where it goes. I'm mainly just trying to teach myself some new things and have some fun in my free time.

    2 votes
    1. [2]
      ThatFanficGuy
      Link Parent
      That's why I make text games. You can do a lot with simple shapes: it's about how the game plays, rather than how it looks. Never stopped my arrogant ass. You don't have to share what you make,...

      but I have zero art skills,

      That's why I make text games.

      You can do a lot with simple shapes: it's about how the game plays, rather than how it looks.

      and know very little about game design

      Never stopped my arrogant ass.

      You don't have to share what you make, but it sounds like you're passionate about making it. Don't let your preconceptions and fears stop you.

      1. joplin
        Link Parent
        Thanks for the encouragement! Right now my main character is a blue square, so I think I'm on the same wavelength as you. 😀 I'm just going to try things out and see what works.

        Thanks for the encouragement! Right now my main character is a blue square, so I think I'm on the same wavelength as you. 😀 I'm just going to try things out and see what works.

  5. eddielomax
    Link
    My team at work begins each planning session with an icebreaker-- it's a great way to get to know everyone a little better, especially since we are all remote and located around the globe. Each...

    My team at work begins each planning session with an icebreaker-- it's a great way to get to know everyone a little better, especially since we are all remote and located around the globe. Each time it's my turn to come up with a question, I end up googling for "icebreaker questions" and have to sort through decent ones ("What skill do you think everyone should have?") to semi-not-great-for-work-ones ("Name something you hate about your boss.") to inappropriate ones ("What do you like best about women's bodies?") to outright illegal ones ("Are you religious?").

    Since I'm lazy and wanted one place to easily give me a question to propose to the group, I made a progressive web app that randomly picks a question out of a pool of around 700 questions (that I think I've mostly vetted to be considered "decent" questions). The neat thing about it being a PWA is it can be installed as a Chrome app (or saved to a home screen on a mobile phone) and it will still work offline. All that said, if anyone would be interested, here's the link:

    https://icebreakers.site/

    Full disclosure-- there's no ads or anything, but I do have a Google analytics script on it, simply out of curiosity if anyone is using it. So if you are anti-Google or anti-analytics, don't go there. Otherwise, I hope it sparks some good conversations for you and lets you learn a little more about your fellow teammates.

    2 votes
  6. Codo_Sapien
    Link
    I'm tasked with overhauling a portion of our import feeds system at work (think foreach (row in fileRows)...), which has led to a 2 month-long foray into SSIS. Our team is focused primarily in...

    I'm tasked with overhauling a portion of our import feeds system at work (think foreach (row in fileRows)...), which has led to a 2 month-long foray into SSIS.

    Our team is focused primarily in C#/JS, so this was new for all of us. This new approach is screaming fast and scary powerful!

    1 vote
  7. SleepyGary
    Link
    I'm currently migrating our legacy AngularJs 1.x codebase to Vue. When I first joined the company 4 years ago it was using version 0.9 of angular, I've managed to upgrade it to 1.7 over the past...

    I'm currently migrating our legacy AngularJs 1.x codebase to Vue. When I first joined the company 4 years ago it was using version 0.9 of angular, I've managed to upgrade it to 1.7 over the past couple years but now that it's EOL next year I've got approval to work on migrating away from the framework altogether.

    I also had the joy of getting setup a brand new greenfield project using uVue with Server Side Rendering, it was a lot of fun not being constrained on technologies and existing architectural decisions. I chose uVue over Nuxt because I found the Nuxt required too much learning about the Nuxt way of doing things and the added magic of automatic routers and whatnot to be too much. One thing I've come to appreciate about Vue is how little magic it does for you, especially when you contrast it to the angularjs framework. How less stuff hidden behind the curtains makes it less scary when things just work or break for somewhat obvious reasons.

    Overall Vue has been a delight to work in and relatively easy to get up and going. I'm excited for Vue 3 and the composition api, we've done a bit using the polyfill package and it feels good despite the communities initial reservations about it.

    1 vote