Most of my life I have been an avid gamer (played an ungodly ammount of CSGO) with an interest in computers. Mainly, I have tinkered with them but never seriously thought about writing code. That was until I started working together with developers and realized its something right up my alley as I like to improve and understand things.

Broken promises and projects in limbo

Even though programming is a puzzle that I have enjoyed, the finish line has remained illusive for too many projects.

There are the classic “my first project” projects that have been abandoned:

  • Todo app
  • Calculator
  • Game Of Life in Godot

In addition even some interesting and even unique projects have fallen in the pit of tomorrow. Titles alone will not give enough context to the problems I wanted to solve so here are some explanations.

Game deployenator

Self-hosting is something I like to do, and this was supposed to help me deploy docker containers for different game servers. This just ended up being a unified way of transferring files (custom configurations and docker-compose.yamls) and running docker compose up -d on the server.

Headtrollhunter’s Industry Assistant (HIA)

Project GitHub. In EVE Online, I wanted to get into industry and I did not want to use spreadsheets anymore, so this project was supposed to replace spreadsheets for me. The first stage would have been only Planetary Interaction, which would have been fairly straightforward. I never completed first stage.

Mainly because of two reasons:

  1. I have (re)written this project at least 3 times now:
    1. Standalone Python application
    2. Python backend + Vue frontend in Django
    3. (latest) Golang standalone app using Wails and React/Typescript
  2. I have not played EVE consistently, and both industry and this tool require consistent incremental updates over a longer period of time.

Versioninaator

Project GitHub. Versioninaator has been an experiment for myself to understand Golang separately from the HIA project, which has too many moving components at the same time. It is meant to keep track of helm versions and report if any versions are either out of date or have not received an update in a year or so.

There are some tools out on the web that already do this, but I wanted to tackle this problem on my own as it is more manageable than HIA.

The Project

Annoying problem

During my last deep dive into EVE Online, I started experimenting with multiboxing (controlling multiple characters). However, constantly switching between different clients became very annoying.

There is an open-source program called EVEoPreview that solves this issue. There’s one tiny problem: I play on Linux, and there is no Linux port and emulating Windows has some major deficiencies:

  • Global hotkeys do not work
  • Preview windows barely work
    • I do not really care about this, it’s but still worth pointing out

I could manually set up my clients to switch between them, but that seemed too tedious. Additionally, using Alt + Tab all the time would slow me down considerably.

A solution: EVEoPreviewAtHome

I knew from my previous experience that this project would need to be completed in one sitting or it will go into “the pile”. EVEoPreviewAtHome was born in 4ish hours and is basically a Golang system tray tool that waits for a keystroke and switches the active window to the next EVE client in the list. It is not an elegant solution, but it has been reliable enough, even after a major Ubuntu version update.

The horror

If you take a big step back you realize that I have just wrapped a couple of linux commands in Golang. I ended up in this route because using only Golang libaries I did not get the required information. This might have been due to the Proton compatability layer but I do not know for sertain.

So the final flow goes something like this:

Startup

  1. I find all windows by running wmctrl -l
  2. Filter out every window with the tile beginning with “EVE -”
  3. Put the matching ID for that window in an array

Main loop

  1. Check if the correct key is pressed
  2. Now check which is the current client in the index
  3. Activate that client by running wmctrl -a <client-id>
  4. Check the current index size against the length of EVE window IDs array
    1. If its smaller then add one
    2. If its bigger or equal reset the index to 0

Now, obviously, this project is not flexible enough to be used by anyone else, and it’s not even intendend for anyone else to use, thus it is private. Not to mention that it is heavily bodged together.

But it’s my bodge and it works well for me. I could add more features to it, but the core functionality, a.k.a the problem, is solved. This project has started the “completed” pile (hopefully).

Final thoughts

Having a working and a finished project (no matter how scuffed) does put a smile on me every time I use it.

  • Finishing projects before moving on is an important skill to learn. Evidently it’s something I am still struggling with.
  • Setting smaller goals with a clear problem statement seems to be the key.