Software ... and other things that should be as simple as possible, but not simpler.

Welcome to the technical blog of John Jacobsen, a software developer currently living in Chicago, IL.
I have created software for more than two decades, mostly working in the field of high energy physics and particle astrophysics. My current specialty is distributed, Web-based applications for scientific computing, though I have done a fair amount of low level software engineering (Linux device drivers and embedded systems), as well as data mining/analysis and simulation.
For the past ten years I have worked primarily for clients on the IceCube Neutrino Telescope, the world’s largest detector of astrophysical neutrinos, which was recently constructed at Amundsen-Scott South Pole Station. For the last five of these years, my biggest project has been as the lead programmer and architect of the IceCube Experiment Control and Monitoring system, known as IceCube Live. This distributed system, created in Python and hosted at the South Pole and in Madison, Wisconsin, welds together a heterogeneous collection of subsystems together across a network of 200 or so servers at a data center at the Pole, and, using modern Web application tools, provides interactive sites used by detector operators, subsystem experts and data analysts in both hemispheres to control the instrument and to understand its current and historical performance.
In the course of my career I have traveled ten times to the South Pole and have written extensive blog posts about the experience.
I like to write elegant, powerful, maintainable code. Generally this means striving for simplicity whenever possible. When practical, I practice iterative, test-driven development and fully-automated deployment workflows with frequent releases. I have deep and extensive experience with Python, though I have recently been very enthusiastic about Clojure, a Lisp-based functional language implemented on top of the JVM and in JavaScript, and have worked on two implementations of Clojure in Python.
Other interests include Machine Learning, logic programming (MiniKanren, core.logic), AI in general, and creating visualization tools (I am currently working on a JavaScript charting library using D3.js). I’m also an on-again, off-again visual artist (painting, drawing and photography).
The site for my consulting business has more details. See also:
- GitHub, where I host multiple open source projects and contribute to several others;
- StackOverflow, where I answer questions about Python and Clojure;
- @eigenhombre on Twitter;
- My LinkedIn profile;
- My physics/computing curriculum vitae.
Occasionally I will post about various side projects on the following blog. I also tweet about various obsessions, software or otherwise.
Blog Posts
- 15 May 2013 » Early Prototypes of a Zoomable Run Viewer for IceCube
- 20 Apr 2013 » Introduction to Context Managers in Python
- 19 Apr 2013 » Processes vs. Threads for Integration Testing
- 18 Apr 2013 » Thoughts on Integration Testing
- 13 Apr 2013 » Integration Testing in Python with Context Managers
- 16 Nov 2012 » Lightning fast startup times for Clojure programs
- 07 Nov 2012 » A Foray into Machine Learning?
- 21 May 2012 » Resources for Learning Clojure
- 31 Mar 2012 » Continuous Testing in Python, Clojure and Blub
- 22 Dec 2011 » Programming Languages
- 30 Jul 2010 » Managing the Most Remote Data Center in the World