Updates 2021/Q3

Project updates from the current consecutive three-month period, with info on the current status of my projects and next steps. You might find this interesting in case you’re using any of my open-source tools.

Updates 2021/Q3

Q3 has been packed with personal and professional things. Most of time time went into business related tasks as well as personal projects and annoyances. There was a bit of time to pursue my open-source projects however.

Personal things

I’ve managed to complete building my new workstation, which is powered by Gentoo Linux, in an attempt to leave macOS.
Additionally, I got myself an early birthday present: A new keyboard. Having an actual HHKB-layout keyboard will finally allow me to type really fast. In the following weeks, I’ll be setting up the rest of my office with things like audio and video equipment, since I’m looking forward to try out a few things – more about that under professional things.

Additionally, I accomplished another one of my goals for this year: Moving from Sublime Text to (Neo)VIM. With the transition from macOS to my new Linux workstation I ditched Sublime Text and solely used VIM ever since. Hence my init.vim has grown significantly.

Other than that, my personal life was filled by maintaining and fixing broken things. From busted-up ACs, malfunctioning gas stove tops and bursted water pipes to boiler-related issues I’ve had it all. These type of things also required me to have all sorts of people repeatedly come to my place, which (considering the recent developments in the global health situation) is far from an ideal situation unfortunately.

On top of that, I also had to deal with a good amount of bureaucracy that required me to visit public institutions over and over again. Due to some mistakes that were made, these topics will haunt me for a couple more weeks or maybe even months.

Speaking of the next months, I’m currently looking into self-hosted Git. Since I have turned off my own instance of sr.ht – more on that in a second – I lack of an own infrastructure for securely pushing source code and collaborating with others. Right now I’m solely using GitHub for that, which I do not like, considering their track-record of arbitrary account bans and their new copilot feature.

Professional things

Professionally I had a good chunk of stuff to do as well. I formed a couple of entities that I require for some new endeavors. Additionally a client project that I’ve been working on was restructured and opened up new opportunities for growth, which I, together with a handful of very good people, are currently pursuing. Depending on how things evolve there, a new corporate structure as well as new team members might be coming between Q4/21 and Q1/22. If you happen to be a freelance software engineer, located somewhere in range of UTC-6 and UTC+6, with experience in Rust, Go, Python and/or TypeScript, know what’s what on AWS and would like to work in a collective of forward-thinking folks doing exciting stuff – get in touch!

Along with these changes, I spent quite some time on setting up infrastructure and building services from scratch for the new ventures. One publicly available service was soft-launched roundabout two weeks ago and I’m currently preparing the initial content for that. I might post a link to it with one of the next updates here.

Additionally, I’m currently looking into the possibilities to make parts of my professional work publicly available and see, whether it might suit as form of entertainment (e.g. streaming) or maybe even as a form of further education/training. I have discussed this with people and it seems like I could provide some interesting insights into the industries I’m working with and the business opportunities that I was involved in. More to follow. However, as you might imagine, there’s a lot of thought and legal work that will have to go into this, in order to be able to talk about/show interesting things without violating any NDAs.

Desktop vibes

Open source projects

sr.ht / builds.sr.ht

Back in April, I published an extension that allowed builds.sr.ht to spin up droplets on DigitalOcean in order to run individual jobs, making it a cost-efficient alternative to its original implementation, that required having a worker-node running 24/7. Long story short, this project has died and I’m not going to pursue it further on.

Back at the time, I was running my Git infrastructure on Drew DeVault’s sr.ht platform. However, due to its unreasonable complexity and the amount of time that’s required to set it up and keep it running, and due to the platform’s excruciatingly slow development as well as the lack of an open community around it, I gave up on running my own sr.ht instance. Hence I will not continue developing this workaround that was intended to make builds.sr.ht instances more affordable.

As soon as I decided on a new Git infrastructure, I will however build something similar to this, in case it should not be available already.

zeit

Zeit received an update which made it possible for me to write a waybar + wofi integration for it. This allows to have zeit display the currently tracked task on waybar and even start and stop tracking.
This, together with a PR that fixed the negative result issue for ongoing tasks displayed with list --total made it into the 0.0.4 release.

Gomphotherium

Version 0.3.0 of my Mastodon client Gomphotherium got released, which includes a handful of enhancements. For example, when using the command line interface (e.g. to toot something) it does so significantly faster.

One important update for Gomphotherium is that I’m going to pause development on it. There are multiple reasons for that, one being that in its current state it’s already fully usable as a basic CLI and TUI client for the Fediverse and with this accomplished I would like to focus my time on other things.

Another reason I’m pausing development is, because I have left the Fediverse and deleted both accounts I still had, the one on mastodon.online as well as the one on Merveilles.town.

Over time mastodon.online became “chaos Twitter”. A single federated instance should never grow that big as nothing good could ever come out of that. While mastodon.online probably ranks best on the freedom of speech scale, it lacks of any netiquette or commonly understood values. It’s hard to put together a timeline of people with similar interests – unless you’re interested in a blend of questionable statements, nudity, radical opinions and cats.

Merveilles on the other hand is overall centered around a few key-people and -topics and for most parts an echo chamber of all hat, no cattle diversity with do-gooder opinions and a noticable leader cult – with some exceptions, obviously. Additionally, during my time there, I experienced multiple instances of passive censorship, in which people were asked to unlist posts (e.g. a simple multi-toot story) or – as in my own case – refrain from posting specific topics at all (decentralized currency). Repeated, awkward interactions over things as simple as a screenshot eventually drove me off that place.

Back at the time, I left Twitter out of similar reasons: A load of hypocrisy paired with people hijacking content to either propagate some social or political agenda of theirs, or to hook on to every little word and start discussions in order to enlighten their followers with their opinions and their superior wisdom - but actually just to have a valve for their inflated egos.

Long story short, Gomphotherium won’t receive any more updates in the foreseeable future. I still believe that the Fediverse might be a viable alternative to Twitter, but it requires instances to be understood as collectives of equally appreciated individuals, sharing common values and a netiquette that fosters different ideas and perspectives instead of suffocating them with hypocritical behavior or unnecessary censorship. Instances should not be run as lawless places, but neither as benevolent dictatorships.

Kiwi

Yes, Kiwi! It’s still very much alive and I’m continuing to develop it, despite the lack of updates over the past year. In its latest release, v1.0.2, Kiwi learned an awesome new trick:

Talking to OBS!

It’s now possible to specify the OBS web-socket address in Kiwi’s kiwi.txt configuration file – which btw has changed a little bit! – so that Kiwi automatically connects to the OBS socket when it starts. OBS requests can then be configured onto individual keys, similarly to as it has been possible with regular HTTP requests. Here’s an example of how such a configuration might look like:

curl -X "POST" "http://k3eb0w.lan:8080/settings" \
     -H 'Content-Type: application/json; charset=utf-8' \
     -d $'{
  "settings": [
    {
      "id": "key_2_in_row_1",
      "object": {
        "keydown": {
          "obs": {
            "request": "{\\"message-id\\": \\"1\\", \\"request-type\\": \\"ToggleStudioMode\\"}"
          }
        },
        "obs_events": [
          {
            "match": [
              {
                "string_value": "StudioModeSwitched",
                "property": "update-type"
              },
              {
                "property": "new-state",
                "bool_value": true
              }
            ],
            "led": {
              "frames": [
                {
                  "sleep": 100,
                  "keys": {
                    "key_2_in_row_1": {
                      "red": 255,
                      "green": 255,
                      "blue": 0
                    }
                  }
                }
              ]
            }
          },
          {
            "match": [
              {
                "string_value": "StudioModeSwitched",
                "property": "update-type"
              },
              {
                "property": "new-state",
                "bool_value": false
              }
            ],
            "led": {
              "frames": [
                {
                  "sleep": 100,
                  "keys": {
                    "key_2_in_row_1": {
                      "red": 0,
                      "green": 0,
                      "blue": 0
                    }
                  }
                }
              ]
            }
          }
        ]
      }
    }
  ]
}'

As you can see, the second key in the first row is being configured to send an OBS request as well as to react to OBS events that it gets over the web-hook. In this case, we’re sending the ToggleStudioMode request, which toggles the studio mode in OBS, and we process the StudioModeSwitched event from OBS, in order to turn the key’s LED on or off, depending on whether the studio mode was enabled or disabled.

I haven’t found the time to document this throughoutly, hence you won’t see much info on this feature in the Kiwi repo just yet. However, I will do so in the upcoming weeks and provide a handful of example configurations that show, how to make Kiwi e.g. start the stream by pressing a button and have its LED lighten up in bright red until the stream is being stopped again.

This feature allows you to use the Pimoroni Keybow as a poor-man’s Elgato Stream Deck. Unlike the Stream Deck (not to be confused with the Valve Steam Deck), Kiwi allows you to configure whole chains of custom requests to OBS as well as HTTP endpoints, allowing you to run stuff like “when this button was pressed, start the OBS stream, turn off my Philips Hue lights and send a notification to this IFTTT endpoint, which posts a link to my stream on Reddit”.

Additionally, I began building an app for Kiwi that would allow its configuration without knowing its API or the need to manually perform curl requests. I’m building this app using Tauri and Svelte Kit so that it will ideally be available on Linux, macOS, Windows, iOS and Android alike. If you happen to find Kiwi an interesting project and know Svelte good enough to be able to contribute to this, I’d be happy to talk to you!

Paperwork

Since I haven’t made any real progress with the v2 the way it was initially planned, I rm -rf it and tried a different approach. So far there’s nothing I can show, simply because I haven’t pushed the branch yet. The idea behind it was, though, to simplify the whole architecture in a way, in which it’s possible to easily run Paperwork as a single instance on any computer or server. For that, I completely removed its storage back-end and instead integrated something that is being widely used for years: Git.

The proof-of-concept that I’m currently working on is basically using the file system to store documents and build the folder structure, so that the representation you get on the web UI is very much identical to how your documents are being structured on the file system. Paperwork only takes care of all the meta-information for documents (e.g. OCR) and stores them in “dotfiles” around the actual document. This way, you’re free to modify/manage your documents directly on the file system as well, instead of forcing you into using Paperwork. And since the document storage is a Git repository, every change that’s being done is committed and pushed to the remote that was configured. No more vendor lock-in.

For the POC I moved the code from Node.js/Elixir to Go, simply because I wanted to get things done quickly and have a single a.out that I could run anywhere. Ideally the implementation should be able to work on a standalone machine as well as on e.g. Google Cloud Functions and AWS Lambda.

I’m still in a very early drafting stage here, but if you find this idea interesting and would like to team-up I’d be happy to hear from you.

Unnamed (hardware)

Together with a handful of people I kick-started an idea for an open source device back in April. We prepared the initial design mock and had some dummy samples produced. We identified a couple of uncertainties with the design that held us back from actually working with freelancers on the PCB. This combined with the workload on other projects as well as the global semiconductor shortage has left us putting the project on hold for an indefinite period of time.

Unnamed (game)

I took a look at raylib, precisely its go library, and played around with it to see how hard/easy it would be to build a very basic thing. I’m not exactly sure what I’ve built here, but it seems to be working good.

unnamed

The sprites that I used were downloaded from all around the internet, hence I’m not going to release the code for this. Large parts of it isn’t even that interesting anyway.

However, I had some issues that are related to collisions and bounding boxes. raylib doesn’t offer a lot of pre-built functionality there. For example, steering the car works, however its collision box won’t steer along, meaning that while the car sprite would be displayed at e.g. a 45 degree angle, collisions would still happen on a rectangle that’s north-oriented. From what I found out raylib does not offer an easy solution to this.

I don’t think I’m going to pursue this further, simply because it’s just a very crude try-and-error and raylib doesn’t seem to be the best engine for a GTA-style game. If anything, I’d rather look into Godot to see how quickly something like this could be built in there.


Enjoyed this? Support me via Monero, Bitcoin, Lightning, or Ethereum!  More info.