tmux, available under most Linux distributions’ package managers and also available in OS X, is a fantastic tool not only for system administration but also for development. tmux enables long-running sessions on a machine, and plugins such as tmux continuum mean that even when the machine is restarted, the previously-running session’s scrollback buffers will be displayed so that no context as to what was happening is lost. It is much more intuitive than the classic GNU Screen, and has more features. It also boasts great support for pair programming (Ham Vocke has an excellent article on this). Following is the configuration I use as well as some justifications as to why; these exact settings were cobbled together from a host of other articles across the web.

Read more...

Sphinx is a great documentation tool for Python projects. The style is exceedingly legible and works well with the inline documentation style that Python exhibits. It even works great for putting together slides using reveal.js. Getting Sphinx set up for a Python module with multiple submodules, however, can be a nuisance. Most of the solutions that can be found on the internet involve creating companion .rst files for the project, which violates the convenience of Python’s inline documentation framework. This post demonstrates how to get around that for the most part, minimizing the needed amount of Sphinx markup and still producing great documentation.

Read more...

git-results is a toolkit I’ve been working on for storing and organizing experiment data. In my work, I often want to tweak a script’s behavior and compare output between different invocations to understand the effects of those tweaks. The git-results extension for git provides a means for automatically logging and categorizing these different invocations, providing a memory for which changes were most effective as well as a definitive way to refer to those changes.

Read more...

Cython has a number of very useful compiler directives that modify the compiler’s default behavior. These cover behaviors from enabling code profiling to changing the default python object type used to represent a C string. However, when using pyximport, the simplest way to use Cython in a project, these settings have to be configured per file or per code block, not globally. With a little ingenuity, this restriction can be overcome.

Read more...

As previously mentioned, Neovim is a great Vim clone that works well as an IDE when you have it configured.

Recently, I’ve been using it inside screen, a great utility for multi-tasking remotely. Unfortunately, whenever pressing escape to leave insert vim’s mode, there is a sizeable 300ms delay during which pressing another key (such as : to enter the write command) causes a rubbish character to be inserted.

Read more...


Qucs (also hosted on GitHub) is a “(Q)uite (u)niversal (c)ircuit (s)imulator” that lets you both layout schematics and simulate the represented circuit. Best of all, it’s completely free.

I’m not aware of any other tool that matches up with its capabilities. There are other tools, but they have downfalls as far as I am concerned. I only spent 5-10 minutes investigating each piece of software; at the end, I decided Qucs was the best fit for my habits. Your mileage may vary, so here’s a quick list of the other tools I looked at:

Read more...

Neovim is a pretty cool successor to Vim, focusing on compatibility while adding asynchronous plugin functionality and trying to clean up the code base. Having been fed up at various times with both Sublime Text (2 and 3) and Atom, and after realizing how much development I do over SSH, it seemed reasonable to check out using vim (or nvim, in this case) as my IDE. The advantages essentially boil down to:

  • Consistent IDE over SSH or locally,
  • No need to ever use the mouse while coding (takes longer to learn, but is faster; this is aided by vim-easymotion and Ctrl-P),
  • It’s been around forever, and frankly, probably always will be.

Some work really benefits from visual (mouse) input, but I have never found that to be the case while programming.

Read more...