Developers Toolkit Cheat Sheet

These are a director’s notes on my talk “The Developer’s Toolkit”, you can also watch the video here.

It has sources for all the tools mentioned in the talk, and a little commentary that didn’t quite fit in. Hope this is helpful:

General References

  • Small, Sharp, Software Tools by Brian Hogan is still in beta but looks to be a good reference to Unix command line things. Which still can be useful, even if I don’t think they are the be-all and end-all.

Terminals

ZShell

I actually switched to ZShell as my prompt using the Oh My Zsh library to install it. ZShell is reasonably easy to install, Oh My Zsh has a ton of shortcuts and small scripts available as plugins, and it’s compatible with Bash for nearly everything you are going to want to do.

Prompts

My prompt is a very slight edit of the Oh My Zsh theme prompt called Peepcode, originally created by Geoffrey Grosenbach and described in a fantastic blog post that seems to have fallen off the internet somehow, which is a bummer.

Aliases

A little more nuance about aliases. There are basically three problems with becoming heavily reliant on aliases:

  • You need to remember them in the moment or they aren’t valuable.
  • They are not available when you remote access a different server
  • If you use something like Oh My Zsh, it can be hard to remember where all your aliases are defined, making the system opaque.

That said, I use a lot of aliases. I also define a lot of aliases that I forget about.

Here’s how I try to mitigate the issues with aliases.

  • I try to make the names memorable by not getting caught up in how short they are. I make aliases to reduce the need to memorize details, not to reduce the number of characters I type.
  • I sometimes use a snippets package like Alfred or TextExpander for some commands to make them available when I am logged into a remote server.
  • I have no answer for this one, but I do try to limit aliases to things I use myself.

Bash History

I use the Oh My Zsh history-substring-search to get the history behavior described in the talk. I use this very extensively, often as a direct substitute for aliases.

Jump and Find

Jump is pretty great and I use it continuously. I use Fuzzy Finder less often, but it’s fun to use and sometimes pretty useful.

iTerm2

ITerm2 is ridiculously useful for a piece of software that seems so basic. In addition to the tricks I mention in the talk, it also can show a list of processes running in that terminal (so they can, for example, be easily killed). It also has a fantastic search and time travel feature that lets you see past commands in the terminal. You can have it automatically pull out specific text in your output, it can do drag and drop SCP copy to remote servers, it’s fantastic.

Editors

Okay, look, I don’t really care what editor you use. Find something that makes sense. I know people who are way smarter than me who love Vim.

For my nickel, you have at least two editors — Atom and Visual Studio Code that are both free, quite solid, extendable, basically conforming to general UI norms, and have text-only sharing options that don’t depend on screen share (as tmux replacements).

A couple of other links.

The Atom regular expression tool is called regex-railroad-diagram. Sadly, it hasn’t been updated for a while and doesn’t seem to have been ported to any other editor. That’s too bad, because it’s pretty useful.

You can get more details on Solargraph at http://solargraph.org, including links to Atom and VS Code support. My experience here is that the VS Code tool works great but occasionally refuses to load for some reason, and that the Atom support is a little flakier. Still, if you are the kind of person that loves autocomplete, it does improve the experience for Ruby code.

Autocomplete is great. If you are in Atom, you should enable the autocomplete-plus extension, which gives you the ability to autocomplete off of tokens in any open file. The related extension in VS Code is called All Autocomplete. VS Code also has a Path Autocomplete extension that works on files, and it’s quite useful.

Emmet is a great tool that I never remember that I have, the plugins work in Haml or HTML and there’s more functionality than I showed in the clip, including some more powerful shortcuts, some CSS shortcuts, and a shortcut to increment or decrement a number that your cursor is over. Emmet integrates seamlessly with autocomplete in VSCode

You can get full instructions for Fira Code at the GitHub repo, including anything you need to do to get it to work with your editor, it also has some links to other fonts that use ligatures. I recommend trying it once to see if you like it. I find it does make code easier to read.

Git

I don’t necessarily think this is true about every tool that I use, but I do think that it’s worth a little bit of time to get a basic, working understanding of Git’s internals, because the command line does a terrible job of exposing them, and understanding Git’s model makes it significantly easier to understand what’s going on.

The Pro Git book is a few years old now, but it’s still a really great way to understand Git. Here’s a shorter Medium post on the same topic. I would also keep an eye on James Coglan’s Building Git, which isn’t out yet, but should be a good information source.

The Pro Git book has a chapter on hooks. There’s also a more specific website at https://githooks.com.

There are a metric infinity of Git GUI tools. Both Atom and VS Code have perfectly lovely integrations. In terms of the specifically useful, both editors make it quite easy to see who has last worked on a file using Git Blame, and too see the current Git branch and SHA in the editor. They also both have really nice diff tools that allow you to both see changes and resolve conflicts in the editor.

Outside the editor, I’ve started using Fork, since it is both free (for now) and has a reasonably decent UI. (Some of these tools are a bit hard for me to read). A big plus of Fork is that it allows you to do interactive rebases. One down side is that it’s conflict resolver isn’t as good as the ones in Atom or VS Code

GitHub has some comprehensive documentation, here’s a decent, if somewhat out of date cheat sheet of GitHub tips.

You can get information on Hub at https://github.com/github/hub. There’s also some usage docs.

Web Sites

Not a whole lot to add about these things, but let’s make sure the links are here: http://rubular.com and https://www.foragoodstrftime.com. There are also a ton of “run JavaScript snippet” sites like http://jsfiddle.net.

Mac Things

You can get Alfred at https://www.alfredapp.com— the pro version is absolutely worth it, and there are repositories for existing workflows at https://www.alfredapp.com/workflows/ and http://www.packal.org.

I don’t use Keyboard Maestro as much, but it’s a very comprehensive tool for controlling and customizing your Mac.

Both Keyboard Maestro and Alfred can run as clipboard managers, and I really recommend using something to store and reuse things you save to the Mac clipboard. There are many, many options for this.

I use Better Touch Tool more, you can get it at https://folivora.ai. There’s also a community site at https://community.folivora.ai that has a bunch of replacements for the standard Touch Bar and other things. BTT is also really good at mapping custom touch pad swipes — I mapped, for example, a three finger swipe to move the current window to the next monitor.

Dash, which is admittedly kind of pricey, sounds like the most pointless thing ever, it’s basically just a browser window that aggregates documentation for all kinds of programming languages and libraries. What makes it valuable is that the search is really good and it integrates with a lot of editors to make look up directly from the editor easy.

The Window manager I show is Mosaic. It’s also a little pricey, but you can also get it via Setapp. If you want something that does most of the same stuff for only a buck, try Magnet. There are a bunch of other apps that have various kinds of functionality along these lines, try a few and see if you like them.

Finally, Transmit is just a very nicely done Mac app, and it’s worth checking out.

One app that I don’t use, but that a lot of Mac automation people swear by is Hazel, which lets you set up automated reactions to files and directories.