TL;DR: Part of a series of posts about tools, services, and packages that I use in day-to-day operations to boost efficiency and free up time for the things that really matter. Use at your own risk - happy to answer questions. For the full, continuously expanding list so far see here.

This is the first installment of a series of posts; the full list is expanding over time.

## Software

### Atom

Multi-purpose, highly-extensible text editor.

Learning curve: ⭐️⭐️⭐️ Usefulness: ⭐️⭐️⭐️⭐️⭐️
Site: https://atom.io/

I stumbled upon atom by accident because one of my students was using it and it has become (one of) the crucial infrastructure piece(s) for me. Atom is hands-down the best text editor that is currently out there. I would even go as far as saying that it is today what emacs was many years back. It goes way beyond text editing due to an extensive package library that allows you to customize and extend atom in infinitely many different ways. It takes a few days getting used to it but it is worth it. In fact it is open constantly on my machine. Moreover, it is available for basically all platforms and you can simply move configurations between machines to make sure it is the same everywhere. Here are a few examples what I use atom for:

1. Markdown editor and previewer
2. Latex texing environment
3. Development environment (when I don’t need the full power of PyCharm; more on this later)
4. Collaboration environment (see an older post here)
5. Interactive execution of python, julia, and R code with the hydrogen package.

### Docker

Deploy code in a self-contained mini-virtual machine.

Learning curve: ⭐️⭐️⭐️⭐️⭐️ Usefulness: ⭐️⭐️⭐️⭐️
Site: https://www.docker.com/

Docker became an essential tool for me for deploying software. The way you should think about docker is a lightweight virtual machine in which your code runs and that you deploy, a so-called container. The problems that Docker solves are:

1. Platform independence: Easy deployment without having to worry about the target system at all except for that it should run the docker service. No worrying about dependencies and correct versions on the target system: if it runs in the container on your machine it will run on the target system.
2. Shorter time to test/production: Significantly relaxing deployment requirements for prototypical code: just run it in a container and have the infrastructure around it handle the security piece. This allows for significantly shorter turn arounds to put things into test and production, e.g., for A/B testing. In several of my projects it cut down deployment from several months to a few days.
3. Non-Persistency: Changing dependencies and libraries on the host system does not affect the container. Moreover, restarting the container resets it to its initial state: you cannot break a container.
4. Scalability: Need more throughput? Just spawn multiple instances of the container.
5. Sandboxing: I also use docker for sandboxing on my own machine. I prefer not to install every new tool on the horizon and mess up my system configuration, rather I test it in a container.

In terms of performance, it costs you some but usually it is ok for most applications. Docker is not trivial to set up though and will require some time to get it right.

## Python Libraries

### TQDM

Progress bar for python with automatic timing, ETA, etc for loops and enumerations.

Learning curve: ⭐️ Usefulness: ⭐️⭐️⭐️⭐️⭐️
Site: https://github.com/tqdm/tqdm

Have you ever written loops in python, e.g., sifting over a large data set and you have no idea how long it is going to take until completion or how fast an iteration is? This is where TQDM comes in handy. Simply wrap it around the enumerator and when running the code you get a progress bar with all that information:

Output:

## Services

### Trello

Manage lists (e.g., todo lists) online, across various platforms with various plugins.

Learning curve: ⭐️⭐️ Usefulness: ⭐️⭐️⭐️⭐️
Site: https://trello.com/

Trello became my go to solution for todo lists etc. Works on all possible devices, integrates with Evernote, google drive, and my calendar. Has notifications and allows for collaboration/sharing. Also, extremely useful for developing software, e.g., for scrum boards.