Productivity comes down to the tools you have and how you use them. These are the tools I use on a regular basis.
Productivity is about optimisation and efficiency, and the tools you use can get you there!
There is something immensely satisfying when you’re sat working with someone who has really honed their craft and you get to delight and absorb in the way they work. Their workflow is slick, the tools do the job they wanted them to do, every keystroke is intentional and every action is deliberate and minimal. Pure productivity.
There are many factors that contribute to productivity. Last year I wrote about how my home office setup helps me stay productive. In this blog post I’ll be sharing the tools I use on a daily basis to be productive.
The best thing about wanting to be productive is learning a new tool, trick or efficiency gain. If you’ve got a tool that I should have on my list drop me a comment at the bottom of this post.
With autojump you can easily navigate to any directory that you use frequently, autojump describes itself as:
A cd command that learns - easily navigate directories from the command line
Navigating to a directory is as simple as:
You don't even need to put the full directory name, as you navigate between directories in your terminal autojump will learn which ones are the most important. The time you spend navigating between folders will reduce significantly with autojump.
This isn't a must for everyone, but if you work on AWS, you should definitely have the CLI installed and be comfortable using it. It can sometimes be quicker than using the AWS console, and it can be handy when you need to put together a quick script
Best Practice Tip:
- Avoid using the default profile If you work in an environment where you use a lot of different AWS accounts don't assume that someone has the correct credentials set for their default profile. Ideally use named profiles and agree on a naming convention
A lot of utilities and application use hidden dotfiles to configure how they work and behave. You can get the most out of an application by tweaking it to work the best for you. Whilst dotfiles isn't a single application in its own right, I'm a strong advocate of using dotfiles, version controlling them and openly sharing your customisation with others.Just over a year ago I wrote about how dotfiles can be version controlled and tested using GitHub, Docker and Travis CI. You'll find my dotfiles here.
FoxyProxy provides advanced proxy management for your web browser as a browser extension. I find FoxyProxy useful for accessing web pages and web interfaces that are secured within a VPC or similar private network.
I'll use my SSH client to establish a SOCKS proxy into the private network:
ssh -D 8899 vpc-internal.exmple.net
Using FoxyProxy I can point my browser at
localhost:8899 and use my browser to access any webpage hosted within the private network.
HTTP Prompt is a command line HTTP client that features autocomplete and syntax highlighting. This can be a great command line alternative to Postman.
A Jetbrains IDE is difficult to beat. I use IntelliJ, RubyMine and PyCharm on a regular basis. Using an IDE that supports the language and build systems as a first class citizen is a must for me. I'm not one of those developers who'll use an IDE such as Atom or Sublime for ever project. I've always believed in picking the best tool for the job.
Magnet (macOS only)
Ubuntu is my main operating system of choice, however I do also have a Mac which I use for various activities. With Ubuntu I use Gnome for the desktop environment which works great for my needs, and importantly has good window snapping support.
In Gnome I can use
[super] + [arrow key] to easily snap a window to the left or to the right, or even move it between monitors. Once you get use to moving your applications and windows around without using a mouse it becomes a productive habit that you aren't keen on shaking.
Frustratingly, macOS doesn't natively provide window snapping shortcuts. Fortunately, third party applications like Magnet exist.
ngrok is a great utility for providing public URLs to web servers and other application servers running on your local machine. This can be really handy for debugging and development purposes.
Starting a session is as simple as:
ngrok http 80
I use SSH a lot. A few years ago I adopted SSH config files instead of relying on reserve searching my way through my shells history to find the right SSH command.
When you're not using an SSH config, accessing a server might look like this:
ssh -A -p 9898 email@example.com
But if I use a SSH config file, I can just do:
Provided I define
core in my SSH config:
Host core HostName core.example.net User james Port 9898 ForwardAgent yes
Sublime Text is a great text editor. It's simple, quick and easy to use. It provides support for many languages out of the box, and a rich plugin system means it's ease to add functionality developed by a third party.
Sublime is very comprehensive with the ability to support a build system for your project and many more feature. Typically I just use Sublime as a text editor and haven't played about with many of the advanced features.
tmux / Powerline / iTerm2
A productive terminal environment is critical for me. I need to be able to manage multiple tabs, split windows and customise the experience. Ideally doing everything through the keyboard.
I use to use Terminator as my terminal environment on Linux, but over time I've switched to just using the default gnome terminal with a tmux and powerline setup.
Terminator was great and solving the window management issue, working with multiple tabs and split views.
Several years ago I saw a colleague working with tmux and powerline. I noticed that he had a lot more information at his fingertips, he was able to move between multiple tabs easily and split tabs where needed. All of this was done through the keyboard. He was even able to easily hide other splits views and make a session full screen when he needed - all with keyboard shortcuts.
From that point I was hooked and went all in with tmux and powerline. Tmux is a terminal multiplexer, which provides you with the ability to create different shell windows, split views, etc, etc. Tmux also has a rich plugin system that allows me to add even more functionality on top of what tmux gives me out of the box.
Powerline is a statusline plugin that works with most shells and some applications such as tmux and vim.
- iTerm2 - terminal for macOS
- Powerline - statusline plugin for vim, and provides statuslines and prompts for several other applications, including zsh, bash, tmux, IPython, Awesome and Qtile
- sshh - tmux plugin for duplicating SSH sessions
- Terminator - terminal for linux
- Tmux - terminal multiplexer
On a development machines I'll use ZSH over Bash for my shell.
A few of the features that I find useful are:
- Advanced tab completion
- Path expansion (expanding a partial path such as
- Variable expansion
- Typo correction for known commands
- Support for suffix and global aliases
- Support for plugins and themes