My Toolbelt

published by Henne
on Cover image: wrench me by NeONBRAND

Here is my personal hardware & software stack. The things I use and enjoy on a daily basis since a long time. The software is pretty much the standard in Free Software development stack. Don't expect to find anything you don't know here. I write this because people keep asking me, especially in mentoring situations.

Operating System: openSUSE Tumbleweed

It's my Linux of choice. Why? Because it's the German Engineering version of Linux: Long heritage, a certain kind of stiffness and it's super tidy. The rolling nature of Tumbleweed gives me the stability and the velocity I need. It brings all the standard Linux tools through a kick ass package manager (zypper). And it embodies what makes the Free Software eco system great: software diversity. openSUSE tries very hard to treat all software as first class citizen of the distribution.

Okay I admit it, I have been involved in making this Linux distribution for decades. So take this as pure bragging on my part. What it also means for me is that it's super easy to "scratch my itch" a.k.a. understand things, fix bugs, implement features and find the right people to poke. I can only recommend this to you, find a Linux home, help to maintain it and make it your own.

Desktop Environment: GNOME

The thing I like most about GNOME is that it get's out of my way. It's restraint, simplistic, straight forward. And yet, if I want to do a thing I have never done before, it'll have an opinion on how to do it. I also dig the esthetics, I think I actually switched to it because it's soo damn beautiful to look at.

The GNOME Desktop

GNOME 3 Desktop by gnome.org

Shell: zsh

Well, any shell. I couldn't live without all those glorious one-liners like for i in *; do echo mv $i `echo $i |sed 's/.rb/_spec.rb/'`; done or history | awk '{print $2}' | sort | uniq -c | sort -nr |head -n 20. Utilizing all those programs that do only one thing, but one thing well. cp, mv, echo, grep, cat, awk, sed, find, head, tail, curl, test, sleep and so on and so on. What a wonderful chest of lego bricks, ready for you to plug together your own world. Also, I literally grew up in bash. It was shell scripting that introduced me to software development. And I will forever be fascinated by it, despite all the sneeze from the more sophisticated languages. Shell scripting is messy, raw, dangerous. Shell scripting is beautifully punk!

Browser: Mozilla Firefox

I think, not counting the Linux kernel, Firefox is the only piece of software I used all my life (if you think of netscape communicator as ancestor). It's because the single most important quality of Firefox is progress. Tabs, add-ons, session restore, firebug, sync, mobile version and now built in privacy. Mozilla has been steadily pushing it's flagship product forward. It might not always be the first to market, it might not always be perfect from the start but it is always moving forward relentlessly. That is a rare quality. We all should pray that Mozilla continues this despite the google browser monopoly. BTW how the flying f**k is that monopoly OK with 65% of you? Don't you remember any computing history? </rant>

Source Code Management: git

In the meanwhile all projects I contribute to use git. I like git for being the right amount of clever CLI. That opens the pager only in the right moment, corrects me if I typo or let's me extend it, just by nameing a command git-diff-to-deploy. And I really dig the file based approach which means that I can often recover my idiot mistakes by nervously mocking around in .git. It shows that the people maintaining this are seriously dog-fooding their own product day in and day out.

Source Code Collaboration: github

With github I have a love-hate relationship. I admire the idea, the product and many of the people who build it. I build a tool in the same space of the industry (developer tooling) using the same technology (Ruby on Rails) and github people set the gold standard in collaboration workflows since years. I only humbly follow their set out examples.

But I really don't like them riding and emphasizing the network effect. And I flat out hate that such a large piece of software in my stack is closed source. Quite frankly I do not understand how anyone at Microsoft can justify to their mirror that github is not Free Software. It's not like anyone will ever be able to take any business away from github.com which value is the number of people using it. As you can see with me and my projects, that ship has sailed a long time ago. Why do you have to deny me my software freedoms if I can't use them to hurt you in any way?

I am a Ruby on Rails developer, I know a thing or two about collaborating on software. I want to send a pull-requests fixing gripes or missing functionality I have with github itself. Why the hell can't I do that? Why do people have to resort to write browser extensions to be able to collaborate on github functionality. This is insane! </rant>

Mailer: Mozilla Thunderbird

Thunderbird is the only piece of software in this list I'm not very passionate about. It helps me reading, finding and writing mail from my four imap accounts in one single interface. It does so better than any mail user agent, web mailer or mobile app I have tried so far. Yet I have the feeling there should be something better. Can't seem to find it though, despite really searching. Guess Churchill was right: Thunderbird is the worst MUA, except for all the others.

Editor: Visual Studio Code and vim

I fire up vim when I need to do a quick script, jog down a note, edit configuration files or for a quick fix. Visual Studio Code is what I use for deep dive bug fixes or feature development. About vim I like most the raw power that comes with it. Doing something like gqaw or v<end>~ is gold. But I have a problem with vim: I easily remember a small set of things for a long time, but I have not much capacity to remember 50 keyboad shortcuts forever ¯\_(ツ)_/¯ That's why I need a user interface that guides me and offers me a place to search visually for what I want to do. CTRL+p+fold level+click is exactly that.

A screenshot of visual studio code

Visual Studio Code by Henne Vogelsang licensed CC BY 4.0

Containers: docker & docker-compose

I'm hacking a bunch of different software projects on a daily basis. I need them compartmentalized so I can build, start/stop and destroy them at will. Without each of them compromising the other, or my system, with their gazillion dependencies, services and side cars.

Linux containers are the most efficient way to do this for me. As I'm not super interested in architectural intricacies of container runtimes and a frequent visitor of doineedkubernetes.com, I'm kind of habituated to docker and docker-compose. Investing a day or two into building a development environment that you can set up, run, suspend and tear down at will is hacker magic! Mounting your local file system into it, so your can shell around and use whatever editor you want is 🤯


Laptop: Dell XPS 13 (9380)

I work from at least two different places during the day. My office, meeting room, home office etc. That's why I dig this powerful 13" laptop you can swing around with ease. It also features a nice enough keyboard, can be charged via USB-C (power bank ready) and you can even be buy it with (the wrong) Linux preloaded! What more can you ask from hardware?

Keyboard: Ducky One 2 Horizon TKL

Guess if you're an old fart like me you just need something that feels a bit like a model M keyboard. But please without the nicotine stained look. This ducky quacks for me at the office where I plug in my laptop into a docking station.

A Keyboard

Ducky One 2 Horizon TKL duckychannel.com.tw

That's what I consistently make use of during the day, nothing spectacular right? Of course not, those things are about getting shit done! Not about impressing you, sport! 😜

Feedback?

Any criticism, remarks or praise about this post? Get in touch, let's talk on twitter, linkedin or via mail. I'm looking forward to your input!