If you're on OS X, I've found Slate to be the best option: https://github.com/jigish/slate
It's open source, has a simple text file based config, and is generally more configurable than most other similar tools.
It's open source, has a simple text file based config, and is generally more configurable than most other similar tools.
Additionally if you are using a Matrox device to get multiple screen support on your Mac, Slate comes in real handy. Rather than get 2 virtual screens the Matrox devices create one virtual screen that spans 2 monitors. Tiling managers like Slate are super helpful for snapping programs to monitors in cases like thos.