Pushing the limits of our toolsets
Our dev team recently sat down to share our favourite tips, tricks and tools. This resulted in great conversations and everyone went away with more tools, and productivity or workflow tips & tricks, on their tool-belt. We would like to share these here so you can benefit too.
Some of our favourite tools (ordered by popularity)
Github-CLI
github-cli
is a must-have for any terminal-based developer that uses Github. It aims to bring all the things you need from the github web interface, right to your terminal.
Using `gh pr status’ to check for relevant PR information
Oh My Zsh
Oh My Zsh is a framework for managing your zsh
configuration and has many plugins/themes, for example, the git plugin, which you can configure to show you information about the status of the current repository such as uncommitted files, unpushed commits and which branch you are on. Oh My Zsh makes these plugins/themes far easier to install and manage than if you were to do it manually.
Autojump
autojump
’s claim to fame is ‘a faster way to navigate your filesystem’, it allows you to start typing a path and jump there automatically, it does this based on frequency, recency and current locality. The more you use it, the more it learns and the faster and more accurate it becomes.
ASDF
asdf
is a version management tool for installing and managing software. The list of plugins asdf
supports includes most programming languages and lots of other tools such as docker and terraform. One of the most impressive things about asdf
is that you can specify directory dependent versions, this means you can seamlessly use two different versions of a programming language across projects.
Google Sheets
In the right hands, google sheets can be a more powerful tool than you may think. Our resident sheets whizz Sooz uses it as a colour-coded planning tool to see an overview of what is going on at any point in time.
Fish
fish
** **is a shell which can be used as an alternative to other popular shells such as zsh
and bash
Finally, a command line shell for the 90s
although fish
was released in 2005 their tagline is a play on the fact that the other two previously mentioned shells were released in the 80s. Fish aims to be a modern shell with ‘sane scripting’ that just works out of the box. Some of the features include:
- Tab completion to display options complete with man page entries
- Autocompletion suggestions based on past history and current directory
- Web-based configurator accessed by running
fish_config
-
Included vim keybinding integration (if you’re into that)
-
Great documentation
FZF
fzf
is a command-line fuzzy finder tool which allows you to search through a list of input. Because you can pipe in any input and utilise the output however you like, the possibilities are almost endless. It even supports previews, which can contain whatever you want whether it be git commit messages or file contents. A favourite here at Abletech is one of the shell extensions that come with fzf, Ctrl+r, which launches fzf with your command history.
Using fzf to search the files in a git project with a scrollable preview
This helper views git log
history, previews the commits and prints the hash of the commit selected
This helper displays the available branches, previews the commit history and switches to the branch selected
Ansible
ansible
is an IT automation system which can be used for automating small tasks or automating a complete setup of your workstation. When you have to set up a new computer, you can be up and running within minutes.
Storybook
Storybook is a UI component building tool for frontend developers that supports many languages. An advantage of using Storybook is that it is easy to mock without having to set up a backend and can handle large datasets otherwise impossible locally.
Tmux
tmux
is a terminal multiplexer, this means you can create multiple terminals to be accessed and controlled from a single screen, you can even close the window and then carry on from where you left off at a later date. If you need to run the same command in multiple different files or directory you can use synchronized mode which does the same thing in as many different terminals as you want.
Running git status
in all nine terminals. (A more useful example would be doing deployments simultaneously)
Vim/Neovim
Vim (VI Improved) is a terminal-based text editor which has a long history, it was released in 1991 as a replacement for an older editor called VI which dates back to 1976. For something to survive that long it’s got to having something going for it right? And that it does. It is a powerful text manipulation tool that many swear by but it has a notoriously steep learning curve as it is nothing like what you’re used to. Neovim is a fork of vim that has an emphasis on extensibility, usability and is a drop-in replacement for vim. Neovim adds a few speed improvements, quality of life changes and sensible default settings. I would highly suggest using vim-plug for all your plugin needs.
Vimium
Vimium is a browser extension to add vim keybindings to your browser. Even if you don’t use vim, this extension is still worth downloading as it allows you to navigate in your browser using your keyboard.
Ripgrep
ripgrep
is a command-line tool that recursively searches for a regex pattern and can be used on file names or file contents. It pairs excellently with fzf. For example, the following command will search the ~/Documents
directory recursively for any match of result
and then let you select an option in fzf
. The last part just filters the output to print the filename which can be used to open the file in your favourite text editor. Once the options show up in fzf
you can even filter the search further.
rg 'result' ~/Documents/ | fzf | awk '{split($0,a,":"); print a[1]}'
An example of using the command mentioned above
This does the same as above but shows a scrollable preview and opens directly to the selected line in the file
Rubymine
Rubymine is an IDE for ruby and rails development that comes with great defaults and many additional plugins available for download. Things like test runners, git helpers, project search/replace and project navigation all come standard with fantastic integration. It really can be your one-stop shop for development if you make it so.
Alfred
Alfred is a replacement for the launcher in Mac OS. It includes extra features such as hotkeys, text expansion, custom actions and web searching.
Boostnote
Boostnote is a markdown editor marketed as a note-taking app for programmers. It has the ability to take screenshots and have code snippets within notes.
Microsoft todo
Microsoft todo is a todo list application that features a daily planner, task management and shared todo lists which can be used together with co-workers or family members.
Ranger
ranger
is a command-line file explorer the utilises vim keybindings. It is a very useful tool for exploring directories and previewing/managing files from the terminal.
Navigation with previews and opening a file using ranger
Tmuxinator
tmuxinator
is a tool to manage tmux
sessions and create reusable layouts. I have a separate tmuxinator configuration file for each project where each configuration opens a unique set of tmux
windows/panes in a specific directory.
This script allows me to select a project using fzf and tmuxinator. Once a project is selected it will either connect to the existing session or create a new one. It opens a default layout which includes two windows, the first of which has two panes with the first being ranger the file explorer mentioned above.
VS Code
VS Code is a fan favourite among the devs at Abletech, just a ‘few’ of their favourite extensions include:
-
Settings Sync: sync your VS Code settings to a git repo
-
Git History: pretty git log
-
Git Project Manager: switch between git projects
-
Git Tags: manage git tags
-
Git Tree Compare: compare git branches
-
GitHub Pull Requests and Issues: open PR’s and issues from VS Code
-
GitLens: inline git blame annotations among other things
-
Open in GitHub: jumps to the current file/line in GitHub
-
Generact: generates react components using existing components as templates
-
VSNotes: a markdown based note taking extension which syncs to a git repo
-
Coding Tracker: keeps track of dev time by repo/file
-
Turbo Console Log: insert logging statements for variables, can delete all generated logging in one command
-
React PropTypes Generate: generate prop types declaration from component signature
-
REST Client: in-editor HTTP client
-
Docker: makes it easy to build, manage, and deploy containerized applications
Voted most used/useful tips and tricks
-
Use
/gif <phrase>
to post gifs in slack, this one is a bit hit or miss as you just have to shoot your shot and hope slack selects an appropriate gif for your use of the phrase. -
Add git/shell aliases for your most common git/shell commands, this can be a big time-saver, one of my favourites is shortening
docker-compose run web test
which I use often to run tests todcrt
and naming folders which I find my myself navigating to a lot such as aliascd ~/Documents/Client/Project1
to simplyproject1
so I can navigate there from anywhere in one command. -
Replace manual/repetitive tasks with scripts
-
Create separate profiles in your browser for separate projects, when you switch profiles it will switch your bookmarks, history, open tabs and which sites you are logged in to (with which account), this can be useful if you switch projects often. Most browsers support a variation on this functionality and some support syncing these profiles across computers.
-
Inspect react component in developer tools to identify it
-
Monthly reflection of new shortcuts/productivity tips. There are always new ways of improving your workflow which makes it a good idea to have a monthly reflection on what’s working for you and what else is working for others. If we all combine our productivity tools everyone will benefit.
-
Using Ctrl+Tab to switch files quickly in VS Code
-
Create shortcuts for running tests or set up automatic triggers so you have no excuse to not be running those tests!
Conclusion
Hopefully, you have found something useful in this article and maybe you will even start using it every day. If you have something to share too, make sure you let us know.
A comic that feels just a little bit too accurate https://xkcd.com/1319/