jm.dev
j@jm.dev · @jmq_en
linkedin.com/in/jqq · github.com/jmqd
Tokyo, Japan 🇯🇵
Tools

Philosophy on tools

Given eight hours to chop down a tree, spend six sharpening the axe.

A poor craftsman blames his tools. But not because good tools are unneeded. It is precisely because a good craftsman knows the value of a good tool that it is poor form to blame them. A good craftsman knows how to select good tools. And if those tools don't exist, a good craftsman creates their own good tools.

Every good tool is born from a craftsman having had only the wrong tools.

If something is worth doing even once, it's worth building a tool to do it.

I have built an entire world around my tools.

Software tools

Operating system: Gentoo Linux

Why do I use Gentoo Linux?

Most operating systems and distributions use pre-compiled binaries as the primitive unit of installable package. For example, if you want to install firefox, your operating system would have you download a bunch of pre-compiled object code, wrapped in a script that would move the executables and files to the right locations. This is the typical flow to "install software" on your computer.

Gentoo, unlike most operating systems, downloads the source code rather than its compilation artifacts. Then, the installation process actually compiles that source code into the build artifacts which are placed in the right locations.

This is the most important reason as for why I've ultimately landed on Gentoo as my operating system of choice: Because it is a source-based distribution. Gentoo is often referred to as a metadistribution. It is a distribution that enables you to build the exact distribution you want.

Why do I care if it is source-based?

It makes it extremely easy for me to inspect what my software is doing, and to make patch it and recompile, on the fly. In short, it is the ideal setup for a hacker and open-source enthusiast, because the ability to modify software that is running on my computer is inherently baked into the very DNA of the operating system itself! It is not a workaround or weird hack for me to make a change to Firefox and re-compile it. It is the standard installation flow. This makes the edit-compile-test loop for open-source software highly optimized for me, which makes it more likely that I will fix and upstream changes.

NixOS

I've been considering experimenting with NixOS as a new daily driver. It has a lot of overlap with what I like from Gentoo, but has a better package manager and robust pattern for managing the state and configuration of the system.

Windowing system: i3

I use i3 as my windowing system. The short answer as to why is: I am a proponent of a mouse-less existence insofar as most applications are concerned.

A mouse is an interface best suited for continuous-shaped requirements, e.g. aiming a pointer in games, drawing, and other inherently 2-dimensional arbitrary precision input modalities.

Textual interfaces (e.g. code), reading, navigating filesystems, etc. is inherently discrete (folders have files, files have words, words have letters). For discrete applications such as these, I (and many others) prefer mouse-less modes of interaction. A mouse can point at many different precise points for a given character in a word, but it's still the same logical place.

Almost all of my modalities of interacting with my computer are inherently discrete, therefore, I optimize all of my tools to be a keyboard-only interaction modality.

i3wm (and any tiling window manager in general) is the natural conclusion to the question, "How do we build a window manager optimized for the keyboard?"

Editor: Emacs

I use emacs, but with vi keybindings. Don't ask, it's a long story. I'm at home with either, but I prefer emacs for its extensibility and vi for its modal UX. I solved for this by extending emacs to have the same modal editing UX as vi. I don't like elisp and emacs has had some performance problems in the past. That being said, I don't know of anything better.

Language: Rust

These days, I try to write most of my personal things in rust, because it aligns with my values, and I believe that it will grow to be an important language. Its performance, reliability, safety, and language design landed it a special place in my heart and mind.

Resources on Rust: [1], [2]

Everything else (software)

I do everything else in my web browser or in my terminal of choice. (These days, it's alacritty, but my terminal choices seem to be much less sticky than OS/editor, and often times I'm using one of the shells within emacs directly.)

I typically only have three applications open on my computer, each in their own i3 workspace:

  1. emacs
  2. terminal emulator
  3. browser

Hardware tools

Keyboard: Happy Hacking Keyboard

There is no better keyboard for a bible-thumping UNIX software engineer that I am aware of.

Headphones: Sennheiser HD800s

DAC/Amp: Audeze Deckard

Webcam: Fujifilm XT-2

Microphone: RE20

Desktop: Dual AMD Milan 128-core + 1024GB ECC RAM Supermicro