My development environment

talking about my tooling

12.02.2016

I'm writing this small post for myself to document my workflow and tooling (tl;dr: I'm not using Haskell and emacs and don't program i486 in assembly, so don't expect anything special here).

Sublime Text is damn fast, has some vim-like keyboard shortcuts and looks great with the brogrammer theme. It isn't a full-featured IDE like IntelliJ, but its support for plugins like GitGutter, auto-completion and goto definition is awesome. I like to use Sublime Linter (with Python PEP-8 and Javascript linting), MoveTab (with Chrome-like shortcuts), Djaneiro, Emmet and Handlebars. You can search through a whole project with cmd+shift+F using <project> in the "Where" field (just double click on a line in the search results to jump into the file), so no more grep needed (if you were that old school). Goto anything using cmd+P is also very handy with its fuzzy search. I indent_using_spaces with 4 spaces because PEP-8 tells me to do so.

virtualenv and pip are my loyal companions. Every good Django project I know use them and I type virtualenv env && source env/bin/activate && pip install -r requirements.txt out of sheer habit.
Combined with nodeenv it is also extremely convenient for node.js development: pip install nodeenv && nodeenv nenv && source nenv/bin/activate is the best way to have an isolated node.js instance.

I tried many Git GUIs and found GitKraken to be a good fit. It's currently in beta stage and there are some glitches, but overall it looks awesome. SourceTree is also very good, but I try to use tools that are open source and cross-platform to ensure platform independence (so no to Tower and Sequel Pro).

I don't use oh-my-zsh, but it looks very good and is definitely worth a try (even though I heard that you can do 90% of it using plain bash and bash-completion)


Most of the time I'm just running a django or flask server using python manage.py runserver (yes, flask has a manager, too) and ember s for the frontend part so I don't really need a build system for development. I'm currently trying out Gitlab CI to replace TeamCity (great software, but I want to use open source projects) to do automatic deployments after the testing stage so I don't have to type ember build and migrate the database anymore. — I will post an article about it if my setup is ready.

git is my tool of choice for version control (you can even use svn with it). Pushing before everybody else is a very relieving feeling because you don't have to merge it (ignore the fact that everybody should use their own feature branch). Aside from that it is obvious why someone would want to use a version control system — I heard things like it is like a time machine. But I would git commit --amend that git blame is the most powerful instrument in professional software engineering. Without the blaming a git command, you would never know who wrote that big fat spaghetti code function playing god and which programmer you should penalize (2 days without internet learning fundamentals, of course). Definitely a must-have.

I like nginx a lot (apache too) — they are fast, easy to configure and flexible. nginx is my personal favourite because of its syntax, but they both have their advantages. The templates from cipherli.st are a great start to protect a webserver, but you should also be aware of the BREACH attack and deactivate gzip/compression for your backend API (breachattack.com describes some mitigations).

I use MySQL in production and SQLite for fun, but I want to try out PostgreSQL in the future (although a bug was found lately). MongoDB or CouchDB for node.js and NoSQL - there are some blog posts explaining the differences between those two with the CAP theorem.


So this is my tooling. Pretty basic and nothing esoteric, but works like a charm.