A List of my Favorite Tools
May 2022 (updated: August 2023)
A list of (mostly software) tools that I use more than once a week. I recommend these to friends so often that I decided to write them up.
Avoiding configuration
I’m averse to tools that require any complex setups, like editing endless config files or learning confusing shortcuts. In my experience, if the benefit of some tool is not obvious immediately after I install it, it’s a bad tool, and configuring it will be a waste of time.I do use vim and a custom keyboard layout, but looking back I’m not fully certain the time to learn them was worth it.
Browsing
- AdBlock: uBlock origin. A particularly useful feature is the Element Picker which allows quickly and permanently hiding website elements, like StackOverflows distracting and useless Hot Network Questions.Accessible under this icon:
- Site-specific search shortcuts: I assume this saves me ~5 minutes every day and takes just a few minutes to set up. For example, I set up a shortcut for Google Maps and called it
gma
. Now I typegma home to <some restaurant>
into the Browser’s address bar, and upon pressing enter, Google Maps opens with the route. Most commonly used searches: StackOverflow, HackerNews & Reddit (for recommendations), Anaconda (Python packages). I’ve compiled a list of all my search shortcuts here.Bonus tip: Some sites have bad search engines, like StackOverflow. Instead I setup a shortcut for a Google search specific to that site, likehttps://www.google.com/search?q=%s%20site:stackoverflow.com
- Web Archives extension: For quickly getting a cached version of some website that went down or was removed. Supports the Google site cache (fastest), as well as the Wayback machine.
Coding
- Dash (Free alternative: Zeal): Searching through code documentation offline. Much quicker than using Google. A lot of docsets are supported.
- Excalidraw. It’s a web-based drawing tool. It’s super quick to use, and the resulting sketches look great.A drawing I made for explaining a distributed caching strategy. I often just screenshot the results to paste them into software design docs, or pull requests. I’ve used these sketches in academic papers.
- VSCode Plugins:
- Github Plugin: It allows me to review pull requests without leaving the editor, giving me access to IDE features like Go to definition, which makes working more convenient.
- VSpaceCode: The main problem with keybindings is that they’re hard to remember. VSpaceCode makes them easier by grouping them semantically, like
<Space> g r
for go to references or<Space> r r
for refactor rename. - Clangd: For C++, save yourself a headache and use Clangd instead of Microsoft’s official Cpp extension. Clangd is much better.
- Github Copilot: Autocomplete powered by OpenAI’s Codex model.
- Dropdown terminal (Linux: Guake, MacOs: iTerm2, or Phoenix script: Hiding/Showing the terminal with a single key combination, globally. No more searching for the terminal window, particularly useful for starting daemons or long-running commands.
- Clipboard managers (MacOS: Raycast, Linux: Greenclip, Windows: builtin): A clipboard manager will keep a history of copied items, instead of deleting the current clipboard content when you copy the next thing. Useful for: Copying large amounts of code, copying screenshots from Excalidraw for later use, keeping my Zoom link quickly accessible.
- Command line tools:
- fzf: A fuzzy text search engine. I use it to search through my command history (CMD+R) and to find files in the current directory recursively (CMD+T).
- autojump: It learns from your
cd
-history and allows you to quickly jump to directories you’ve previously visited. - zsh-autosuggestions: Provides suggestions for commands based on the command history. Particularly useful for long commands like
docker run ...
. - ripgrep: Fast file-content search, a replacement for
grep
. There’s also a related tool for searching through PDFs. - entr: Run commands when files change. Example:
find '*.cu' | entr -c ./run_benchmarks
while I’m tuning kernels. - Writing your own shell scripts: After I learned bash using this book, I started writing small functions for commonly used tasks. Example: Use py-spy to look at the frame stack of a Python process that’s taking longer than expected:
pytop() { # List all Python processes, use fzf to select one by name PYPID=$(ps -ux | sed '1p;/python/!d' | fzf --header-lines=1 \ | sed 's:[[:space:]]\+:\n:g' | sed -n 2p) # Call the profiler sudo /home/simon/miniconda3/bin/py-spy top -p $PYPID }
Just having such functions easily accessible means I use them much more often.
- MacOS specific:
- Alt-tab for a sane window switcher, because the default “shortcut” for switching to a minimized window is fairly mental, to say the least.
- Bluesnooze for switching off Bluetooth when the computer sleeps.
- Rectangle for window moving and snapping.
- Raycast as a replacement for Spotlight that includes unit conversion (
175B * 4B in GB
) and better file search.
Hardware
- Earplugs: When working I always wear earplugs combined with earmuffs. Combined, I cannot hear any office conversations except for people with very deep voices. It also signals to coworkers that frequent interruptions are counterproductive. I use these earplugs and earmuffs.
- Keyboard: I have a cheap-ish mechanical keyboard from Keychron, called K2. I’ve owned it for >1.5y and it’s much more fun to type on than standard keyboards.
- Avoiding wireless hardware:See Ben Kuhn’s blog post on the topic I have a strong dislike for wireless peripheries. It adds a new source of failure, and the latency penalty is much higher than people expect. For Zoom calls, I use wired Bose headphones, a LAN connection, and a wired microphone.The only exception is a Logitech MX Master 3 mouse. I measured its latency using an iOS app, and it has the same latency as my Laptop’s built-in keyboard so it gets a pass.
Others
- Vorta backup (MacOS, Linux): For me, this required a one-time setup, which took maybe 2h, including renting a Storage box from Hetzner. Now I have an encrypted & compressed backup running in the background for all of my files, every 4 hours. Costs: 3.50€/months for 1TB.
- VSCode’s Grammarly plugin: Spell-checking, commas, and sentence-rewording inside the editor. I use this extensively while writing Latex, or Markdown posts.