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?
I've been cracking on a project idea I received a few months ago, which is to make a download client that uses auditory (in addition to visual) feedback to clue the user into how it's doing. So for example, a slow download might sound like a trickle or dropping faucet, a medium sized one a garden hose, and a fast one as a fire hose or waterfall. I'm still in the very early stages and I haven't done much GUI programming with Java before, so it's been uh quite the learning experience haha. If I finish it, I'm thinking about putting it up on GitHub and perhaps sharing it at a later date.
This sounds very cool! I tend to turn all sound off on my devices unless I'm consuming or creating media so I'm not annoying everyone in the house, so I don't know that I'd use it, but I really like the idea. Very creative!
I saw a tweet thread with some silly UI ideas, so I decided to implement a few of them just for fun at https://macil.tech/lesser-hyperlinks/.
I recently resurrected my old blog with a new tech stack, but until now, the actual content on it was just my boring ancient posts. I'm glad to get back into the habit of making little things and showing them off. Even just making that silly links page has already gotten me into the mindset of "what am I going to build next?". I feel thoroughly past the mental block of "even if I made something, where would I host it and how would I organize it in order to make it presentable?".
Next I want to either make a simple multiplayer thing (maybe a toy chatroom or an online card game), or make a page where you can write and quickly test various prisoner's dilemma strategies against each other in a tournament (inspired by this LW post). I'm really obsessed with the idea of games where you can write code to control things in the world to help you, or create independent entities that go out in the world, and this PD tournament page would be small-scale project that works as good practice for the code-handling and UI parts.
(Screeps is a game I love and find really interesting along these lines, though it's ironically more programmer-centric than my ideal game. I think my ideal game with code-writing abilities is a game with an economy, and maybe PvP aspects, like a Minecraft factions server / Rust / Eve, and players can trade or create objects with automation programmed into it by players. It would be fine for most players to never do any programming; to them, the benefit is that there's a wide-range of advanced player-programmed items that they can get, and the continual competition between the programmers selling items means a stream of new content and a continually-shifting meta. Player alliances might make bases/towns with standard automation kits, and larger alliances might have their own coder to customize the automation or make better automation than other alliances.)
I gotta say the zipperlink is great.
Professionally:
I was working on a video chatting application for schools. It’s running pretty well and I currently don’t have that much work to do
Personally:
Nothing much really
University stuff:
I am working still on some VR robotics application for a project
And I am looking for a masters thesis, the nlp faculty at my university gave me some coding challenge which I had to solve. I just finished it
I've been working about a windows-focused keyboard macro daemon, made to open triggering from any kind of external device through an HTTP and WebSocket interface.
I'm building it to have a lightweight and clean alternative to softwares like GameGlass (very slow, restricted, and with some shady things) or MFD (pretty heavy to run), mainly for when I'm playing Star Citizen or similar shortcut-intensive games, so I can have more control with custom hardware and tablets.
git
At the moment I've got a backlog of personal projects that I've been working on.
My current big two projects are:
Project 1
A glue/duct tape header only framework that generates Rapidcheck test case and state case generators for Boost::SML, Boost::DI, Boost::SafeNumerics and possibly a few other libraries once I get those out of the way.
The big idea here is to reduce the friction in fully modelling software systems using property based testing. Libraries like Boost SML, DI, and SafeNumerics greatly simplify certain types of C++ code while introducing little runtime, compile time, or boilerplate-esque overhead. The issue however is that writing tests that operate on these systems results in modelling these systems over and over again. Luckily these libraries are template based which allows us to consume the templated types and produce generated fixtures more or less automagically. You can see this with the Boost::SML example being able to easily generate PlantUML diagrams by parsing the SML template at compile time and then dumping the result to console at runtime. I'm essentially using this same technique to generate test generators for these libraries.
Project 2
I'm trying to put together a Use-Only-What-You-Need CMake template project with as many features as possible already set up and ready for use. i.e. Package manager integration, full support for a bunch of static analysis, runtime sanitiser, fuzzers, and testing utilities (tools like Spin). Have it come with an out of the box fully configured documentation pipeline with diagram/figure/video integration and effective support for internal vs dev vs user documentation as well as online vs man page style vs paper back documentation. Additionally, have it set up to support various debuggers out of the box and have templates for CI integration.
The big differentiator from other templates I'm wanting to include is support for multi-compiler builds and adding a deploy step. The basic idea is that by default it uses the system complier however you can specify additional compilers to validate against as well as various architectures (think an uber build). The additional step my project is taking is making it intuitive to have fractional/partial compiler support, i.e. Only use certain compiler/build env for certain tasks (i.e. native builds for testing vs cross platform/embedded builds for deployment/field testing). This would then be able to use the deploy step to push to a test environment or flash to embedded dev hardware and during debugging, automatically hook into the remote debugger regardless of IDE. (I'm looking at you CCS, you never fail to disappoint me).
Basically my projects at the moment are largely around improving tooling for various projects. This is both for personal reasons as well as helping modernise some projects at work.
Otherwise I have a few project ideas involving CAD and 3D modelling but those are a while down the pipeline.
I recently reworked some of the CSS for my personal website, (still have a few media query issues to clean up) and started working on some QML Testing documentation/Tutorials. I still have a few more examples I need to finish up sometime in the next week or so.
Haven't been working on the next version of Intergrid yet because I need to figure out how to work over a major obstacle: DOM diffing and the subsequent DOM modification in a way that does the least impact on performance. I've learned recently that even a medium-sized batch of nodes takes 300ms to process, where ~270ms of it is DOM rendering. Minimizing that should be a priority: if the impact is this noticable on my lower-end desktop, it would stand out like a sore thumb on lower-end mobile devices and laptops.
The idea, unlike the current version would suggest, is to first attach the nodes to the state, and then render the view (the DOM representation on the page) based on the changes. I'm yet to approach it, and I'm in no hurry to do so since this is once again a pet project, but I'd like to resolve it sooner rather than later.
To that end, I've made the new engine public on GitHub. It's very early in development: you can't even modify the state except by pasting nodes (which is how I've been testing view modification). If you have any improvements to suggest, you're welcome to submit an issue or a pull request.
One possible way of making DOM rendering easier (and take less time) is by reducing the number of elements involved in making the DOM rendition of a node. Right now, I have a folding element (which is a
<div>
faux-button, quick and dirty), the dedicated part of node contents (which is important in how I'm going to render the looks, similar to the original/prototype version), and the children container.Seems minimal, but I'm wondering if there's a way to reduce it further: like, for example, register folding clicks on a pseudo-element of the
.node
itself, thus removing the need for folding, or positioning children nodes as direct children of parent.node
, rather than in a.children
container.I, like I assume most programmers, have a git repo with my dot-files in it.
I created a simple bash script that, when ran, copies all of my important dot files into the repo so that I don’t have to manually copy them any time I make a change.
A couple of weeks ago, I expanded on the script so that the repo has a separate directory inside of it for each hostname so that I don’t get any conflicts between my laptop and desktop files. I may eventually make it just checkout a branch for each host but we’ll see.
That brings me to today. I’m trying to update my script so that it’s easier to add new dot files for it to track. Currently, they’re all hard coded in but I’d like to add an array of files to go copy. I haven’t done much bash scripting before so I’m not sure how easy that will be but if it’s too hard I may just convert the whole thing to python in the future.
I’m also thinking about adding another script to basically “install” the dot files from the repo. That way I can make it easier to set up a new desktop or whatever.
I do something similar but I work directly on $HOME with git. You can give git a different base or .git directory.
Something like this
You can alias it to whatever you want. You could use ~/.git as git-dir but then every subfolder under $HOME would thinks it is in a git repository which is not ideal. I have multiple systems under different branches. You will also need to ignore all files and folders that you don't want to track, or ignore everything and force add individual files / directories.
Honestly I don't love this solution. It is very cumbersome to propagate changes from one machine to the other as different machines don't really share config history, but it's fine for tracking changes and occasional cherrypicking between branches.
Yeah, I didn't realize that was an option at first when I created my repo which is why I have a separate directory haha
I've been learning search engine optimization to help two friends with their businesses. It's helpful to have some practical projects with measurable goals. I've grown tired of learning new programming skills for the sake of learning them, so if I work towards something tangible I'm much more likely to follow through.