Projects
In this page you'll be able to read a bit more about my projects and the technologies I've used. Of course, I can't reasonably describe all of them here, but i hope that I'll manage to list most of the interesting ones here! Also, please note that many of these projects have been developed in an enterprise setting where the clients were rather strict in regards to security. Because of this, text and logos might be replaced with random pixels and color schemes removed. This is done to ensure that you get an idea of the complexity of the UI, without giving away the particular clients in question.
Thousands of aggregated blog posts for you to read!
More information
Turns out that you can do a lot with feeds like RSS, if you know where to source the data! The users of the popular Hacker News technology enthusiast site shared links to their personal blogs and someone was kind enough to aggregate links to the corresponding RSS/Atom feeds where possible in a list. So of course I had to put that list to a good use!
The type of system where good performance is a must, with no leeway!
More information
This was one of the more recent systems that I worked on in the org and one that caused quite a few challenges along the way. The idea behind it was that not only would it integrate with the other systems that were being developed, for scheduling auctions, but it would also provide real time auctions for hundreds of users.
It was time to bring the sales platform into the current decade!
More information
Having the AngularJS EOL looming over the project's head was slightly concerning, however this also proved to be a great opportunity to rewrite it in more modern technologies! Notably, Vue, which had already been used previously in another few projects, alongside the features provided by the latest versions, such as the Composition API, which is in some ways nicer to use than React hooks, as well as state management solutions as Pinia and PrimeVue for ready made components.
A public platform for conducting B2B sales for one of the clients.
More information
Here's a sales platform that was meant to introduce a certain amount of self-service functionality to conducting B2B transactions. The idea behind it was that it'd integrate with the aforementioned ERP/CRM system and would allow business partners of a given org to sign up for certain sales processes that were conducted, as well as review terms and rules, submit the necessary documents to allow their participation, as well as choose the services and goods that they're interested in.
One of the larger multi-year projects, close to half a million lines of code!
More information
This was a rather complicated system for one of the clients, which involved work over multiple years, both on the continued maintenance of the system, as well as developing entirely new modules for it altogether. While many companies out there might attempt to customize an existing system for their needs, like Oodoo for example, there's also lots of value in doing the opposite - making the system adapt to your business and its needs, fully.
Despite being a developer at heart, I also have some experience in leading technical interviews.
More information
I've occasionally been asked to participate in the hiring process and help out the technical interviews for candidates who'd like to work at the organization. While there are many approaches to hiring, I think that both reviewing take home tasks and taking part in real time interviews are both good approaches.
I decided to make a polite guide about asynchronous communication.
More information
It's important to respect others' time, especially when working remotely. Especially in our line of work, where context switching will slow us down and decrease our productivity, where frequent interruptions will often prevent us from getting things done as quickly as we otherwise would.
Google Fonts is nice, but what about downloadable fonts for personal projects?
More information
I've used Google Fonts to great success so far, but not everyone wants to rely exclusively on web fonts, both because of relying on someone else's infrastructure, as well as over privacy concerns and so on.
Investing in increasing your bus factor will generally pay off well!
More information
Every system and project out there will have domain knowledge that won't be immediately obvious to anyone who's joining the team anew. It might be certain aspects of the business domain, it might be knowledge about the overall architecture, about the technical solutions and other noteworthy details. It is therefore important that we work on formalizing this knowledge and making it easier to transfer it to new colleagues.
What do you do, when there are still servers running your containers? Infrastructure as code!
More information
It wasn't enough for me to just work on modernizing how the applications are run and introduce containers, for you see, the containers still run on some sort of a host that has its own configuration, directories, users, permissions services and lots of other things that should also be managed in a sane way.
Turns out that containers are pretty great, both for development environments and production!
More information
This effort of mine took anywhere between months to years of efforts, depending on how you look at things. Initially, I started out with adding systemd services and Ansible for managing server configuration, but it turned out that this alone wasn't enough to ensure consistency across different environments. The answer to that issue was using containers instead and making the running application instances truly reproducible - you ship what you test!
Your applications work well... right? And you're sure of that? This is where APM comes in!
More information
I've seen people not think about day 2 concerns of development nearly enough as they should. It is not enough to just ship some software and get paid, you also need to think about keeping it running in the future. Not just that, but you need to know just how well the software is running, as well as have the ability to anticipate any potential issues ahead of time.
With some work, even most simple applications can scale to thousands of active users.
More information
When talking about scaling, opinions vary, as do the orders of magnitude in question: someone's system might run well with a hundred active users, someone else might need to serve thousands, whereas yet another organization might be working with tens of thousands of users and beyond. Personally, I haven't had to work with the latter outside of particular load testing circumstances, but even most boring real world systems can be optimized to perform better for gradual scaling up.
What if someone made a shell based alternative to Ansible?
More information
Tools like Ansible are pretty great for managing the configuration across many servers. However, Ansible in particular depends on a Python interpreter being present on the remote system. What if someone were to create a solution which is not dependent on the presence of Python, one that would work purely through a SSH session, in the remote shell, much like a regular human user would?
One of the more performant solutions for load testing.
More information
A part of my Master's thesis was not only deploying a web application, but also load testing it across different container orchestrators, to see how well it performs and whether the container orchestrator deployments have succeeded properly.
What if we used contact tracking instead of contact tracing? How would it scale?
More information
For my Master's thesis, I needed a system to benchmark and run as an example, to check whether my configuration management tool worked correctly. Because of this, I decided to explore whether contact tracing would be a better solution - whether GPS data from mobile devices of infected individuals could be aggregated responsibly to generate heatmaps, so even those without applications would know which parts of the city to avoid, as well as something that could aid in the research on the spread of the virus.
Turns out that lightweight Kubernetes distros do exist. Docker Swarm is still good, though.
More information
As a part of my RTU course, I had to spend some time doing a praxis - where I'd work in a company and do some research. Luckily for me, I was already employed at the time, so I could spend the time exploring various container orchestrators in detail, a question that was relevant for the org in regards to development environments at the time.
I helped increase the uptime of various environments.
More information
Uptime is a bit of a touchy subject. On one end, people seem to obsess over having zero downtime and make development much harder than it should be (though this is understandable for certain services), on the other people don't necessarily care as long as it doesn't impact themselves personally.
In my mind, doing all of the "easy" things to achieve good uptime is a no-brainer, even in regards to something like development, testing and staging environments - after all, you should make sure that QA have a pleasant experience as well.
I setup an entire pipeline to build and store all of the containers needed for development on-prem.
More information
Have you ever needed to build and store your own containers that aren't necessarily for public consumption? Do you need to avoid running into Docker Hub rate limits and not create unnecessary load on their servers? Do you want good performance while building your own containers, as well as to take advantage of layer reuse? This is exactly what I did for a few projects in the org.
A solution for when log shipping is out of the question.
More information
Have you ever found yourself unable to use log shipping, for any number of reasons? Maybe you have an older project, or maybe the team has simply decided that log files are the approach that they'd like to use. Well, you're going to have a problem - some days, weeks or months down the line, the server disk space is going to run out because of all of the log output, or you'll end up with log files that are hundreds of MB or even GB in size and thus hard to browse.
Ever had issues with not knowing which Jira issues should be done after which? I solved that.
More information
Project management software like Jira allows you to add "has to be done before" and "has to be done after" links to issues, so that you know which need to be done after which. But what are you supposed to do, when you have a sprint that has like 20-40 issues in it, all of which can have those links and amongst multiple different ones?
I actually made the homepage for the Apturi Covid (Stop COVID) app.
More information
Shortly after the pandemic became quite concerning, Google and Apple joined forces to implement a contact tracing solution. The idea behind it was to alert people of when they've been in close proximity with someone who has become infected, so that they'd know to self-isolate, to help combat the spread of the virus.
Each country got to develop their own contact tracing solution, while using the underlying technology, and I got to collaborate with around 100 industry specialists in my country on doing just that.
My first experience of running production-ready Kubernetes clusters myself.
More information
Imagine a project coming along, which cannot just pay a cloud vendor to run a Kubernetes cluster for you. Imagine having to manage your own cluster on-prem, needing to do so on a short notice and with room to grow, so that other developers can start working on a microservice project and ship container images successfully.
Not quite Farming Simulator, but something to help with real world logistics.
More information
This was another public system that was intended to allow farmers to sign up and manage their fields more easily. The idea was that they could plan crop rotations, as well as fertilization of the fields, as well as manage their farm equipment digitally.
A wholesome project about lots of local food related events.
More information
Here's a surprisingly relaxed project that I got to be a part of at work. There was this site that was focused on lots of local food related things, like where you can buy local produce. They wanted to implement a new section, which would allow scheduling events and would serve as the main source of information about them: time, location, possibly adding videos or a gallery, as well as the event plan, speakers and so on.
Note: I've blurred the image of the trophy, in case anyone doesn't feel comfortable with that.
Some more help for an acquaintance, this time with micro frontends.
More information
The acquaintance that I had helped previously in creating a responsible hunting system, now wanted some help with a hunting trophy gallery. I also helped them with bringing that idea to life, within the context of an already running system.
An acquaintance asked me to help them with making hunting responsible, so I obliged.
More information
In the modern times, hunters actually help out even the populations of wild animals, so that they don't do damage to the flora. In the winter, they provide food for the animals to help them better weather the cold and I've personally helped clearing a few beaver dams that were in danger of flooding the surrounding areas.
However, when it comes to hunting, it's actually important to do that properly as well. An acquaintance reached out to me and wanted some assistance in doing that, by developing a system that'd both allow keeping track of how many animals have been hunted, as well as would allow experts to add comments explaining how to do that better in the future.
It's useful to learn from failure and do post-mortems as well!
More information
Many might choose to only talk of their successes, though where's the fun in that? Here's a short story about an abject failure, that was a useful learning experience. A while back, people really bought into the benefits of microservices, along the lines of the Gartner hype cycle.
However, something that few consider are the operational complexities brought on by picking such an architecture, as well as the inevitable overhead of managing various project runtimes and configurations, making it so that picking microservices for smaller projects is likely to lead to failure!
A university project that showed me the dark side of model driven development.
More information
Don't get me the wrong way, I absolutely adore model driven development and its practical applications. For example, when you can point your application instance to a live database instance and generate either a full list of baseline migrations, or maybe entity mappings for your OCR or other DB access solution of choice. I love it when you can point a tool or a build step at your service definitions in your code and generate OpenAPI specs for your APIs.
OpenStreetMap + PostGIS = ❤️
More information
This was my first foray into using geospatial data, rendering and interacting with my own maps. Thankfully, open data like the kind provided by OpenStreetMap made for a pleasant experience.
An attempt to create something that reads like Prolog in PostgreSQL.
More information
During my database course, we had to implement a variety of interesting use cases: time series databases, geospatial databases and deductive databases, as well as others.
Time series data and temporal algebra, in MySQL. Enough said.
More information
During my database course, we had to implement a variety of interesting use cases: time series databases, geospatial databases and deductive databases, as well as others.
A security focused course work, to make managing certificates and their expiry easier.
More information
Did you know that Let's Encrypt only became a thing back in 2014? From there they gradually made more and more impact upon the industry, before eventually becoming widespread to the point where almost all of my public certificates are issued by them. However, for this university course project, I set out to create my own web based management system, which would allow you to easily generate as many certificates as you need.
A whole course of modelling business processes.
More information
In one of my university courses, I had to model a number of business processes in a given organization and plan how they could be improved, all done in formalized approaches such as BPMN (Business Process Modeling Notation). While there is something not too positive to be said about lots of red tape, I have to admit that this course was relatively nice and let me explore possible implementations for an information system, without jumping headfirst into writing code.
A rather nice experience integrating Python with the Slack API.
More information
Imagine using the quite nice Flyway solution for managing your database migrations. Now imagine the version string growing to something quite complicated over time, to the tune of V20230214.X.Y.Z.W.M.N
due to project requirements. How are you supposed to figure out ways to name such migrations manually?
A PowerShell script to work around Windows Server limitations.
More information
Imagine having a Jenkins pipeline that deploys a new .war, .ear or .jar file to a server. How do you stop the application service once that happens, redeploy this file to the application server and then start it again, with the new application version?
An expense module for a real estate system, for thousands of properties.
More information
This was a fairly interesting experience that I had. I was called in to take over a real estate property management system, which had information about everything from plots of land, to buildings, to even separate parts of buildings. Not only that, but this system used a framework by the name of Vaadin. While my experience with Java on the front end hasn't been too good (given that JavaScript or TypeScript can be a better fit), this turned out not to be too much of a problem, especially for more data centric solutions.
A serious project that turned out to be a stressful learning experience.
More information
Imagine being called in to help with a project, which needs to be migrated to a more modern and secure runtime. Imagine this project not having automated CI/CD for a variety of factors and now needing to gradually migrate everything over.
Not only that, but imagine newer versions that were developed before your involvement in the project now getting deployed and eventually surfacing underlying problems with the technologies themselves - resulting in outages that need to be mitigated ASAP.
A simple shop example system, for a university course.
More information
Imagine how quickly it's possible to knock together a web based system with a few forms and two user types - surely it shouldn't take more than a few evenings of hacking away. And now, imagine the same, but with every form, every state transition, every validation needing to be formally described. That was largely what the university course in question consisted of.
A pretty lightweight course management system, made with Flask.
More information
In a university course, we had to come up with a full system design for a given domain. In my case, that meant developing a course management system, to manage study courses and the students assigned to those, as well as the lectures that they'd have to attend.
For my Bachelor's thesis, I created real world benchmarks for two popular technologies!
More information
I had been interested in software performance for quite a bit, especially in real world scenarios. I recall looking at The Computer Language Benchmarks Game and thinking that while one runtime might be faster than another, those results might change somewhat in real world scenarios - when you're doing lots of computational operations, or quite on the contrary, are waiting for data to be sent through the network.
Working with IoT can be quite challenging!
More information
This was a shorter project, where I got called in to help with implementing some features in an IoT centric project, in particular, for the cloud management UI that scheduled certain processes to take place.
Turns out collaborating across organizations can be challenging.
More information
What do you do when you want to take a source code repository and mirror it across multiple organizations? You can use the built in functionality in GitLab for this, which is completely workable in most cases (provided that you won't run into issues with Git LFS objects). But what do you do when you want both of those organizations to be able to make their own commits, without breaking the synchronization?
I got to not only do system architecture, but also help with sales.
More information
In my country, some projects are bid on in the public, so that multiple companies can compete with their own offerings. As a part of this, there was a necessity to provide a workable system design draft for one such project.
It was around 2018 that I got to plan bespoke development workflows.
More information
A client of the company needed someone to help them figure out just how they can develop and eventually ship new releases of their system. After gaining some development experience on the already existing projects within the company, I was asked to help them - to figure out something that could be workable both for us and for them, as we'd collaborate on the development.
That one time when I wrote my own PHP framework for a course project.
More information
Even back in the day, people were not exactly happy with the state of our national e-health system, which had troubles running well. So, for the fun of it, I decided to see whether I could create a very basic MVP for our PHP course work. An interesting aspect of it all was that we weren't allowed to use already existing frameworks, so of course I decided to write my own!
A fun little project for the university AI course.
More information
In the RTU AI course, we explored both the theory behind some basic AI concepts, as well as got to implement our own example programs. In my case, it was a checkers-inspired game where the player took part in matches against an AI counterpart, which had backtracking capabilities.
The first system that I setup from scratch myself for a University course.
More information
During a course at RTU, I had to work on an event scheduling system. In the course, the idea was to take an idea, do a lot of planning and eventually turn it into a functioning system. Not only did I finish creating the system, but I actually could set it up on a rented VPS, which helped me learn more about server administration.
A surprisingly modern and pleasant internal system for its time.
More information
This was perhaps the first time where I saw a larger system that simultaneously felt elegant. I might say that it was because of the comparatively limited scope that the system had - it was meant to manage employee vacations, as well as do some reporting and it did so quite well.
My second professional project, with lots more bug fixing.
More information
The maintenance of the previous system was a somewhat relaxed process, as there wasn't that much to be done in its development. In comparison, this ERP (enterprise resource planning) system that I got to work on needed many more new features added, to meet the needs of the business. This did present certain problems, as the codebase had been around for a while and working with it was difficult.
One of my first professional projects when I had stable employment.
More information
After starting out my work at Autentica, one of the first projects I got was for the occasional maintenance of an internal employee survey system, for one of the clients. While the tech stack wasn't particularly new, it was still useful experience.
Someone wanted me to create a visualization of market data evolution over time.
More information
When I was freelancing, someone wanted to create an easily understandable dynamic visualization of market data, which would let the user jump back and forth in time, to see how particular values along various axes change over time.
Someone reached out to me and wanted me to help them finish a horror game.
More information
One of my latter freelance projects was helping a person with finishing a horror game. They had an idea and had done work on laying out levels, but needed someone with the technical acumen to bring that design document and those scenes to life.
This was one of my first proper mobile game prototypes.
More information
When I was freelancing, someone reached out because they wanted to prototype a mobile game with procedural terrain. The idea was that they wanted to see, how big one could make game worlds on such limited hardware, as well as how well procedural terrain fragments could fit together to provide good environments.
One of my freelance projects included visualizing DICOM medical scan data.
More information
Freelancing allowed me to work on a variety of interesting projects, as well as small proof of concept solutions. One of such solutions was visualizing DICOM data in a 3D space. The idea behind this was that a medical professional could take a dental scan and preview it in a more dynamic manner, eventually panning around it and zooming in on points of interest.
One of the oldest interesting projects that I have is a voxel engine that I created in Java, inspired by Minecraft.
More information
Games like Minecraft have become quite popular in the recent years, even though voxel engines have existed long before then. For example, there is Ken Silverman's excellent Voxlap engine that was used in games like Ace of Spades back in the day. Out of curiosity, I also set out to build something similar, using the Java based jMonkeyEngine.