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

27 comments

  1. [9]
    KilledByAPixel
    (edited )
    Link
    Always wanted to make a fantasy operating system. Been working on this for about a month, and it is probably some of the best code I've written. https://github.com/KilledByAPixel/OS13k Also...

    Always wanted to make a fantasy operating system. Been working on this for about a month, and it is probably some of the best code I've written.

    https://github.com/KilledByAPixel/OS13k

    Also getting started on a solo JS13k project I will talk more about soon, but not much to say about that yet. Last year I won 2nd place though, so hoping to impress.

    8 votes
    1. [2]
      m15o
      Link Parent
      Hey, this is absolutely awesome! Crazy to see there are games, a console, sticky notes... add the possibility to set a mail client, and create an old school netscape-like browser, and I'll use it...

      Hey, this is absolutely awesome! Crazy to see there are games, a console, sticky notes... add the possibility to set a mail client, and create an old school netscape-like browser, and I'll use it as my main os. ;)

      4 votes
      1. KilledByAPixel
        Link Parent
        Thank you, we will continue to add to it, right now just focused on the JS13k submission!

        Thank you, we will continue to add to it, right now just focused on the JS13k submission!

        2 votes
    2. [2]
      scoodah
      Link Parent
      Every once in a while I think I'm at a point where I consider myself an expert in my field, and then I see stuff like this. This is awesome!

      Every once in a while I think I'm at a point where I consider myself an expert in my field, and then I see stuff like this. This is awesome!

      4 votes
      1. KilledByAPixel
        Link Parent
        Thank you, I feel the same way! I've made it a goal to become an expert in vanilla JS, CSS, and HTML, but it seems like there is always more to learn.

        Thank you, I feel the same way! I've made it a goal to become an expert in vanilla JS, CSS, and HTML, but it seems like there is always more to learn.

        3 votes
    3. [2]
      Apos
      Link Parent
      That was really fun to play with! That must have been a lot of work.

      That was really fun to play with! That must have been a lot of work.

      3 votes
      1. KilledByAPixel
        Link Parent
        Yes, thank you, it was an epic journey! I learned a lot of arcane knowledge, and the design went through many iterations. I hope the code helps others, will be interesting to see how it develops...

        Yes, thank you, it was an epic journey! I learned a lot of arcane knowledge, and the design went through many iterations. I hope the code helps others, will be interesting to see how it develops now that it's in the wild.

        2 votes
    4. [2]
      rish
      Link Parent
      Looks amazing. Played some Free Cell and deleted the music files, and they are not.. coming back. Please help.

      Looks amazing. Played some Free Cell and deleted the music files, and they are not.. coming back. Please help.

      3 votes
      1. KilledByAPixel
        Link Parent
        Thanks! Delete does what it says! There are 2 ways to get back music... System / Test / System Test -> System Reset = will wipe everything to default settings You can use the load button to add...

        Thanks! Delete does what it says! There are 2 ways to get back music...

        System / Test / System Test -> System Reset = will wipe everything to default settings
        You can use the load button to add music if you paste in a music string.

        2 votes
  2. [3]
    m15o
    Link
    I'm still spending all my free time on https://midnight.pub - a virtual pub, tiny social network/writing platform that allows me to think about something else than work. Last week i decided to...

    I'm still spending all my free time on https://midnight.pub - a virtual pub, tiny social network/writing platform that allows me to think about something else than work. Last week i decided to move to emacs and I'm currently struggling to relearn most of the things. I had been using intellij for a while, I like it (a lot), but want to give a go to emacs for at least a few weeks before deciding what's best for me.

    6 votes
    1. [2]
      spacecowboy
      Link Parent
      To save your pinkies from pressing Ctrl too much I highly recommend pressing Ctrl with the base of your palm. See "How to Press the Control Key" at: http://ergoemacs.org/emacs/emacs_pinky.html

      To save your pinkies from pressing Ctrl too much I highly recommend pressing Ctrl with the base of your palm.

      See "How to Press the Control Key" at: http://ergoemacs.org/emacs/emacs_pinky.html

      2 votes
      1. andre
        Link Parent
        That feels uncomfortable to me. Instead, I use Karabiner on MacOS and dual-key-remap on Windows to rebind Caps Lock to Control when held, or Escape as a single press. I spend my day in vim, and...

        That feels uncomfortable to me. Instead, I use Karabiner on MacOS and dual-key-remap on Windows to rebind Caps Lock to Control when held, or Escape as a single press. I spend my day in vim, and this is invaluable.

  3. [3]
    ThatFanficGuy
    Link
    Started working on a game. No idea what to call it yet. You're an avatar of a larger system, tasked with clearing network nodes of different kinds of defects: malicious agents (viruses etc.),...

    Started working on a game. No idea what to call it yet.

    You're an avatar of a larger system, tasked with clearing network nodes of different kinds of defects: malicious agents (viruses etc.), corrupted sectors, ill-mutated code etc..

    The selling point is that every action relies on your system's capabilities: you have to manage your processing power, memory capacity, and network bandwidth in a semi-realistic fashion, using GUI. Said capabilities are driven by (fictional) hardware and (fictional) software. Can't break into the node's hard storage if you don't have the drivers for this particular storage architecture, can't read another node's responses if they're in a language your system doesn't recognize...

    Figuring out what goes where is challenging and exciting. I'm inspired by games like RimWorld and Dwarf Fortress, which enable the player with interoperative gameplay mechanics rather than dictate what is possible. One good thing about such systems is that you can implement the engine gradually, incrementally, rather than wait for the whole thing to be operational before presentation.

    Right now I'm tinkering with the background systems: how hard storage works, how processes are interpreted in terms of resource consumption... It's more system modelling than coding at this stage: making sure the foundation can stand the weight of the rest of the works. Not much to show yet but this in-progress rendition of the stats sidebar.

    4 votes
    1. [2]
      HrBingR
      Link Parent
      I absolutely love this idea! Would purchase in a heartbeat.

      I absolutely love this idea! Would purchase in a heartbeat.

      1 vote
      1. ThatFanficGuy
        Link Parent
        When it's out, you will be the first to know. :)

        When it's out, you will be the first to know. :)

        1 vote
  4. spctrvl
    Link
    Here I am adding my hardware projects to all these software projects. I mentioned it in the weekend thread, but I'm building a keyboard! It's going to be a 40% form factor keyboard with Kailh Plum...

    Here I am adding my hardware projects to all these software projects.

    I mentioned it in the weekend thread, but I'm building a keyboard! It's going to be a 40% form factor keyboard with Kailh Plum switches in a 3D printed case. I'm pretty early in the project, as the case is still being printed at the moment, but aside from some earlier issues dialing in the print settings for my new glass print bed and new spool of filament, I think the biggest issue is going to be soldering; I'm not very good at it, and I've got to do 40ish diodes and 12 column wires. That said, with my interest in DIY electronics, it's past time I learned to solder anyway. While I've never programmed a microcontroller before, for a keyboard it doesn't look too bad, lots of firmwares ready to go that'll only need minor tweaking if any to suit my needs.

    Other stuff I'm working on that's technical-ish is building an electric bike. This project's been a bit of a kludgy disaster; for example, I ended up wiring the battery to the controller with MC4 solar panel connectors, since I couldn't find anywhere to buy the terminals it was actually using, and I had the MC4s around, they fit and could handle the power draw. Components are all together, but I can't get the SLA batteries I'm using to give me much juice, which I'm starting to suspect is because they're not charged to operating voltage, which I looked up and found to be higher than I thought. I only charged them to 13 volts each, since I figured it'd be enough, and with the 36v charger not in yet, I have to charge each of the 6 units in the pack individually with a 12V 1A charger I've got, which is sloooooooow. I know I can do them in parallel, but it's a bitch to rewire them, and I thought the 36v charger would be in today, so I didn't bother. I also got a small 4.4Ah 36v lithium battery to compare to the SLA cells (which I got for free, secondhand), but ordered it much later, so it's not in yet. Curious to see how the weight is going to impact the range, since the lead batteries have around twice the power storage once you factor in depth of discharge, but they weigh over 30lbs/14kg, whereas the lithium battery doesn't even weigh 1kg.

    3 votes
  5. HrBingR
    Link
    I've been working on a basic template generator for where I work. We use templates when updating tickets and using the site I built is a lot quicker than manually editing a text template...

    I've been working on a basic template generator for where I work. We use templates when updating tickets and using the site I built is a lot quicker than manually editing a text template differently each time.

    Trying to lobby for API integration with our ERP/CRM system so wish me luck!

    2 votes
  6. [9]
    krg
    Link
    Any ideas for projects I can work on that’ll look good for job applications? I realize it’s a broad question, but I’d like to show off some skills and I’m not sure what companies are generally...

    Any ideas for projects I can work on that’ll look good for job applications? I realize it’s a broad question, but I’d like to show off some skills and I’m not sure what companies are generally looking for. Clean, well-organized, well-designed code, etc...

    Or, maybe, some open-source projects to contribute to. Preferably, something that doesn’t have a daunting code-base...

    Anyhow, I’ve been working on strengthening my skills in understanding Rust. Jetbrains’ IDE has this educational add-on that allows you to take courses in the IDE itself, which is pretty cool. Previous to using this, though, I’ve just been using a terminal editor and cargo run (the simplicity of which, I prefer).

    2 votes
    1. [2]
      joplin
      Link Parent
      What type of job are you looking for? If you're looking for a job in graphics, then your physics project sounds like it will do just fine. If you're not, then maybe make a project related to...

      Any ideas for projects I can work on that’ll look good for job applications?

      What type of job are you looking for? If you're looking for a job in graphics, then your physics project sounds like it will do just fine. If you're not, then maybe make a project related to whatever type of work you want to do.

      4 votes
      1. krg
        Link Parent
        Honestly, I'd just hope for a hiring manager to look at my portfolio and think "Hm...the code is well-documented, well-organized, and fairly performant while not making any egregious errors in...

        Honestly, I'd just hope for a hiring manager to look at my portfolio and think "Hm...the code is well-documented, well-organized, and fairly performant while not making any egregious errors in logic. Not bad!"

        Because of the culture I'm exposed to, I mostly think of programming in the context of the start-up space and FA(M)ANG companies. I'm sure the breadth of types of programming work in these companies is vast, but it seems like many people are focused on front-end web development. Which is cool, but I think I'd like to be working on other problems.

        Like... what kind of programming jobs are available in the natural science industries, such as geology and/or biology? Health? Hell, even public service. Lord knows they need help getting their software up to snuff.

        Honestly, I feel like if I work on these skills (explained in my other comment) :

        some skills, from software architecture, to algorithmic implementation, to refactoring, to documentation, etc

        I should be able to drop into any space and whip up some software that meets some specs. Of course, smarter people than me would be writing the specs. I do think (hope) I'm smart enough to be an asset, and not a liability, though.

        BUT, maybe that's a romantic way of looking at the hiring process.

        3 votes
    2. [6]
      krg
      Link Parent
      as a bit of a follow-up, I've also been refreshing my knowledge of physics/math and implementing some of it in Rust. Feels like taking hardcore notes. I've pretty much only implemented vectors and...

      as a bit of a follow-up, I've also been refreshing my knowledge of physics/math and implementing some of it in Rust. Feels like taking hardcore notes.

      I've pretty much only implemented vectors and a couple of basic vector operations, so far. But I tried to stay strict with the definition that a vector is defined as consisting of magnitude and direction, and working backwards from that to get (x, y, z) components and stuff. My terminology might be a bit off and some stuff might be redundant, as I'm continuing to rack my brain and think through it, but...

      here's what I got, so far.

      I initially had my own add() method, but decided to try overloading the built in + operator. I imagine it's less efficient as it requires copying/cloning memory, but 🤷. Also... I feel like the direction() and magnitude() function in Point need to be moved...or Point needs to be re-thunk. At least the dot product and add functions seem to be working...

      Well, implementing somewhat basic math concepts (and eventually physics) is pretty fun. Having well-defined constraints and trying to get things to function in those bounds makes me feel productive vs. me looking at a blank editor thinking "hmm...what should I work on?"

      3 votes
      1. [5]
        wirelyre
        Link Parent
        You might find it instructive to be slightly more abstract, and to use traits to do that. In algebra, the definition of a vector space is basically "things which can be added together, or...

        You might find it instructive to be slightly more abstract, and to use traits to do that.

        In algebra, the definition of a vector space is basically "things which can be added together, or multiplied by a scalar". The definition of a metric, "the distance between two things", can be used for more than vectors. So you might have something like this.

        Then you can be more precise about any calculations you write by only relying on trait bounds. "Do I need a distance to compute this thing?"

        overloading the built in + operator. I imagine it's less efficient as it requires copying/cloning memory

        Don't worry about it. It's (8 bytes × 4) = 32 bytes long. Your computer eats 32 bytes as a midnight snack. Accessing 32 bytes on the stack is probably significantly faster than computing a square root.

        4 votes
        1. [4]
          krg
          Link Parent
          Ya, obviously this is a toy project and it's not worth thinking about efficiency (too much), but considering the language and use-case I figure it's something good to have in mind. Who knows,...

          Ya, obviously this is a toy project and it's not worth thinking about efficiency (too much), but considering the language and use-case I figure it's something good to have in mind. Who knows, someday I may work on a project where squeezing every bit of performance outta a system is prudent. Though, I guess in that scenario I'd be writing straight binary, or something...?

          As far as your idea of using traits...sounds interesting! Traits in Rust aren't something I've familiarized myself with, so it's a bit hard for me to reason about the code. But the idea of abstracting things away certainly appeals to me! In this case, though, I didn't want it to prevent me from putting my initial thoughts into code. I'll definitely revisit my implementation of these things down the line as my knowledge and skill increase. In fact, that's also part of the reason I'm doing this. I'd like to have a historical record of my naïveté in the form of a Git repo. ;)

          That's what I like about this little project. It's ultimately not gonna be anything useful, as I'm sure tools to do these things already exist in a much more robust form (after all, physics engines do exist), but it's a way for me to hone some skills, from software architecture, to algorithmic implementation, to refactoring, to documentation, etc.. all while brushing up on some math skills.

          Doing all this in the context of physics is a lot more fun, to me, than say..writing another todo application. Although, writing a terminal todo app in Rust might not be a bad idea... 🤔

          3 votes
          1. [3]
            wirelyre
            Link Parent
            Yes, absolutely do this!! I have records of my first projects in unfamiliar languages, and even though I don't really use them, just having the record made learning much smoother. And hoardier....

            I'd like to have a historical record of my naïveté in the form of a Git repo. ;)

            Yes, absolutely do this!! I have records of my first projects in unfamiliar languages, and even though I don't really use them, just having the record made learning much smoother. And hoardier.

            Keep it up, by the way! You're doing great, you're learning, you're writing good code.

            3 votes
            1. [2]
              krg
              Link Parent
              Hey, thanks for the kind words! You seem pretty proficient in Rust (and math). Do you have any public projects (or contribute to any) whose code I could peruse?

              Hey, thanks for the kind words!

              You seem pretty proficient in Rust (and math). Do you have any public projects (or contribute to any) whose code I could peruse?

              1 vote
              1. wirelyre
                Link Parent
                Hmm, I have a few public contributions, but I think I can find a few crates you might enjoy reading more. uuid library for parsing and generating UUIDs simple and expressive data structures...

                Hmm, I have a few public contributions, but I think I can find a few crates you might enjoy reading more.

                • uuid
                  • library for parsing and generating UUIDs
                  • simple and expressive data structures
                  • especially see builder/mod.rs, v4.rs, and v5.rs
                • exa
                  • program to replace ls
                  • a lot of data structures for program state
                    • very abstract: if you want to find an actual print call, you have to hunt it down
                  • extremely well documented
                  • maybe start with info/filetype.rs and options/filter.rs, then follow cross references until your eyes glaze over
                • nphysics2d
                  • library for 2D physics
                  • has example programs (code in examples2d; if you want to run them, cargo run --release --bin all_examples2 and grab coffee)
                  • uses a Rust linear algebra library
                  • when browsing the library code, definitely cargo doc and use that to find interesting data and methods
                2 votes
  7. hungariantoast
    (edited )
    Link
    Two weeks ago, on a whim, I picked up a copy of Effective C: An Introduction to Professional C Programming. I have been working through the book bit by bit and just finished chapter five...

    Two weeks ago, on a whim, I picked up a copy of Effective C: An Introduction to Professional C Programming. I have been working through the book bit by bit and just finished chapter five yesterday.

    I started learning basic C last year, but stopped due to school. So far the book has just been rehashing the basics that I have already learned, but there are definitely some tidbits in there that I didn't know (or have forgotten) and seem like they'll be valuable knowledge in the future. I'm taking lots of notes.

    I start my next semester of classes Monday and school has a tendency to reduce my productivity to zero, so I would like to finish the book this weekend... but that's not going to happen.


    Last week I read a series of blog posts: Designing a Magic System. It's about designing and balancing a magic system for a variant of the roguelike Angband. It got me thinking about building my own roguelike. I've built a few test games over the past years by following tutorials and reading /r/roguelikedev, but never got around to building my own game.

    So, after reading that series of blog posts, I started thinking about ideas for a game and came up with an idea that I've given the hilariously awful, working title of "Botanirogue". (Botanist + rogue)

    Basically, it'd be a roguelike with an emphasis on evasion, rather than your typical offense/evasion roguelike gameplay. The player would be, I don't know, a druid or something, and be able to summon magical plants. However, they would also be very weak and fragile, so summoning plants would be their main method of survival. Evading and kiting enemies into traps and ambushes where their static plants do the work for them. Only in the later levels would they actually become dangerous on their own.

    So, it'd be a cute little mix of classic dungeon-diving, unforgiving roguelike gameplay, with a sort of tower defense twist. If I ever make the game, I definitely think it would play best as a coffeebreak roguelike, in that each level or dungeon would be kind of like a puzzle (where to place plants, how to kite enemies, etc.) and shouldn't take too long to complete.

    One fascinating thing that I would like to explore is relying almost entirely on procedural generation to determine the types of enemies, types of plants, and the items that the player might find in the game. For instance, some plants that the player might be able to "cast" or grow would be water-based, and they'd be extra effective against fire-based enemies, but those plants could only be created from or around sources of water, and the player might sometimes have to create that source of water before they can cast the plant.

    So yeah, I'd like to take advantage of procedural generation to hopefully create a lot of varied, emergent interactions, and hopefully be able to come up with an emergent system that's typical of the rest of the genre, but doesn't require hundreds of hours of hand-written, hard-coded items and rules to produce.

    Also, dungeon generation.

    Will I ever actually make this game? Lol, probably not. (But I'd love name suggestions!)

    1 vote