Most interesting links of December
- The Netflix Chaos Monkey - how to test your preparedness for dealing with a system failure so that you won't experience nasty wakeup when something really fails in Sunday 3 am? Release a wild, armed monkey into your datacenter. Watch carefuly what happens as it randoly kills your instances. This is exactly what Netflix does with their with their cloud infrastructure - also a great inspiration for my recent project. Do you need to be always available? Than consider employing the chaos monkey - or a whole army of monkeys!
(PS: There is also a post with a picture of the scary monky.)
Links to Keep
- BDD: Write specifications, not scripts (from the Concordion site) - relatively brief yet very enriching practical description of how to do behavior-driven development a.k.a. Specification by Example right, the key point here being "Write specifications, not scripts." It says why not (for scripts overspecify -> are brittle, specs should be stable) and how to do it (decouple the stable spec and the volatile system via fixture code, expose minimal stuff to the spec, perhaps evolve a DSL between the fixture and the system). It also lists common "smells" of BDD done wrong. If it still isn't clear to you, read the Script to Specification Makeover example (or perhaps read it anyway). BTW, Concordion is a new tool for doing BDD based on JUnit and HTML, which was created as a response to the weaknesses of Fit[Nesse], i.e. exactly the tendency to do scripting instead of specifications. It looks very promissing to me!
- (Linux/Mac) Autojump - superfast navigation between favorite directories in the command line (via Jake McCrary) - it keeps track of how much time you spend in each directory and when you execute
j <substring of directory path/name>, it jumps into the most frequently used one matching the substring. It awesome! (You can also run
jumpstat to see the statistics.)
- (Linux) Tcpkill - service/network outage testing (via Jake McCrary) - kill connections to or from a particular host, network, port, or combination of all - useful e.g. when you want to test that your software is resilient to the outage of a particular service or server - less brutal than actually killing the database etc. instances. We need to test that our application recoveres properly when one of our MongoDB nodes dies so this may be quite useful.
- Manik Hot Deploy Plugin for Maven Projects (v1.0.2 in 5/2011; older version in the Marketplace) - plugin that can do hot and incremental deployment to any app server (simply by copying to its hotdeploy directory or the directory of an installed webapp) whenever you run mvn install or automatically whenever sources change, multi-module support
- Jake McCrary: Continuous Testing With Clojure and Expectations - continuous test runner lein-autoexpect for Clojure tests written using the library expectations by Jay Field.
- Jake McCrary: Quickly Starting a Powerful Clojure REPL - Clojure REPL only two steps away: 1) Run Emacs, 2) Execute M-x clojure-swank (no more need to open an existing Leinigen project) - the trick is to install the Leinigen plugin swank-clojure and use Jake's elisp function clojure-swank that automatically starts the swank-clojure server. (I had to hack the function for the clojure-swank output contained "null" instead of "localhost", likely due to incorrect DNS setup.)