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?
I've been writing a bunch of tutorial blog posts for people who are working with MediaWiki software. Recent posts:
I'm trying my hand at a VR endless runner where you steer by tilting your body left and right. Right now it feel good to play, but it's too easy. Also, there are some problems with the lightning, with the shadows flickering. I'm not sure what the theme should be. The music is kind of nordic, so maybe I should go for this, if I could find some usable assets. Made in Godot.
https://www.youtube.com/watch?v=QLxGAxbQVJk
Giving unsolicited thoughts is why I'm here!
It's too easy because there isn't an incentive to take anything other than the most direct, simplest route. Giving some hoops to jump through would add challenge.
There's also no significant change in velocity, so predicting which corridors are reachable and which aren't is pretty easy after a few seconds. Temporary changes in speed or time dilation would give the player the challenge of recalculating which areas are reachable.
It's VR so utilize the player's ability to look up, left, right, and maybe even behind them.
Jump ramps to reach bonus points or hurdle over high obstacles.
Gaps in the floor that have to be avoided.
Flying sharks with laserbeams that sail in from the sides, or things falling from the sky so the player has to divert some of their focus on the peripherals.
Maybe a rearview mirror to avoid things coming up from behind could be an interesting diversion of the player's attention.
Thanks for your work. Super useful, went straight to my brainstorm document!
Something I hadn't considered at all was having gaps in the floor. I just couldn't do it, since my current floor is simply one giant texture (2000x2000 meter) which got repositioned every so often so it seemed like it went on forever. But after your comment I tried disabling it and instead giving each of the (64x64 meter) obstacles its own floor texture, and it looks pretty seamless to me. I haven't tried working with modular assets, but this seems to work so far.
It's a bit of a pickle, making the auto-generated obstacles challenging without risking the player ending up in a dead end. So far I have made some areas on each tile always safe, to ensure there's no dead ends, but this came at the cost of challenge, so more work to do!
These past two weeks I've paused work on the expense tracking app so I could spend more time finishing up a Java project for college.
I think I genuinely like Java now (in the past I've thought of it as too verbose, and didn't fully like the concept of the JVM). I still much prefer Rust's hybrid, kind-of OOP but kind of not approach - but OOP in Java is pretty fun.
Java definitely feels 10x more mature compared to Rust. Once you learn your way around the standard library I'm sure you can prototype a project very quick. Meanwhile, Rust is 70-80% there, but you will almost always need a 3rd party crate once you start working on real projects.
Also not having a first-party package manager feels weird, mostly because I'm used to Cargo and pip. I have yet to try Maven or Gradle, as I didn't need any other libraries besides the standard one.
Not sure it'll find a place in my toolbox though. I think Rust and Python can cover 99% of my needs, and there's zero chance I can make use of it at work. But it's nice knowing the basics of it, in case I ever need it.
That's more of a conscious design decision than a maturity issue.
Some languages, usually "enterprise-grade" stuff like Java or C#, have a massive standard library, and you can build a lot without ever requiring an external package. They can afford to have a big standard library because they can pay developers to build and maintain those features over years or decades.
Most languages don't have that kind of money, allocate those resources differently, and let the open source community fill the gaps left by a small standard lib.
That's fair, Java has Oracle behind it.
However Rust also has a dozen companies as part of the Foundation, since they split from Mozilla.
But the fact that Java is very much batteries-included feels great, and that everything is relatively held to the same standard in terms of API and documentation. Rust is messy, for better and for worse (love it to death anyway).
I think its fairer to say Java has a solid legacy codebase behind it and succeeds due to that and a solid core language design in spite of Oracle's (mis)management.
Do yourself a favor and use Maven. There are some arguments to be made for Gradle but in most cases Maven is easier to setup, maintain and keep consistent.
For a bit of background. In the beginning there was nothing, well there was make but that wasn't really a fit for java.
Then there was Ant, which was tailor-made for java. Ant allows you to structure your project in any way you like and also doesn't impose any code conventions. Which also means that you have to do everything yourself and each project you encounter can be structured differently. So each new project requires you to also learn how Ant is setup.
Out that lack of standardization we got Maven. Basically the project structure we now commonly think of being typically for Java (src/main/java, src/main/resources, etc) is actually a Maven convention.
Maven has build in phases for building (as opposed to having to define them yourself in Ant) and extra functionality is supported through plugins. It is however much less flexible than Ant and the configuration due to the standardized required bits can be a bit big.
Then more recently we got Gradle, which basically is the result of people saying "We think Ant was actually great! You know what would even be better!? If you need to configured everything through a DSL!". Which does allow you to custom tailor your build process again, giving you smaller configuration files and everything. It also means that it is much more difficult to get started on a project as you need to know the configuration again.
Not to say you never should use Gradle. Certainly if you are just experimenting, but if you want to do package management and building in a standardized way then Maven simply is the most straightforward.
I've recently been using Zig to write a lightweight IM/VOIP/Videochat suite. I don't have much experience with designing APIs and whatnot, nor experience with HID interactions, so I'm learning plenty
After many weeks of part time effort, I finally got Rss generation working for my static site generator that's written in C#/.Net. It's nothing impressive, of course, but I'm enjoying hand rolling my own SSG. It's probably still not fit for public consumption, but I use it to run my own personal site. It just takes in Markdown files and spits out a website that is pure Html/Css.
If anyone is morbidly curious you can check out Markerator on Github. Feel free to file issues.
Oh, and you can see the site that is being generated with it my personal site, Bengineering.
I've been helping a small startup move their embedded codebase from the Arduino IDE to a dockerized build using cmake and gcc so they can move toward CI/CD. Still a work in progress, but it's been interesting to dust off some old skills. Looking forward to trying to extract unit-testable interfaces and mocking the Arduino libraries to move as much of the unit testing as we can off target and into the CI.
I implemented a little paper computer on my computer. Seemingly counter-productive, but hopefully the motivation makes sense.
I came up with a way to draw a bunch of different kinds of chart right on my phone, in a way that I can tweak the rendering code right on my phone.
Both using a parsimonious and trustworthy (not just open source, but easy to build) software stack. The part I've added is a tiny molehill compared to Lua and LÖVE.