<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>John Stowers</title><link>https://johnstowers.co.nz/</link><description>Recent content on John Stowers</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 30 Jan 2026 21:05:00 +0000</lastBuildDate><atom:link href="https://johnstowers.co.nz/index.xml" rel="self" type="application/rss+xml"/><item><title>sandbubble - a python sandbox for untrusted code</title><link>https://johnstowers.co.nz/2026/01/30/sandbubble/</link><pubDate>Fri, 30 Jan 2026 21:05:00 +0000</pubDate><guid>https://johnstowers.co.nz/2026/01/30/sandbubble/</guid><description>A single-file, virtualenv-first python sandbox for running your own LLM and agent generated code</description></item><item><title>Loopbio, Another Couple of Years</title><link>https://johnstowers.co.nz/2021/12/23/loopbio-2020-2021/</link><pubDate>Thu, 23 Dec 2021 21:05:00 +0000</pubDate><guid>https://johnstowers.co.nz/2021/12/23/loopbio-2020-2021/</guid><description>Loopbio in 2020 and 2021: remote use of Loopy, the locust virtual reality system, the science it was used for, and what we added to the products.</description></item><item><title>FreemooVR and LocustVR</title><link>https://johnstowers.co.nz/2020/11/16/freemoovr-locustvr/</link><pubDate>Mon, 16 Nov 2020 21:05:00 +0000</pubDate><guid>https://johnstowers.co.nz/2020/11/16/freemoovr-locustvr/</guid><description>A friendly fork of FreemoVR, and the first VR system for freely walking locusts</description></item><item><title>Three More Years at Loopbio</title><link>https://johnstowers.co.nz/2019/12/20/loopbio-2017-2019/</link><pubDate>Fri, 20 Dec 2019 21:05:00 +0000</pubDate><guid>https://johnstowers.co.nz/2019/12/20/loopbio-2017-2019/</guid><description>Loopbio from 2017 to 2019: the Motif and Loopy products, and the science they were used for.</description></item><item><title>FreemoVR - Virtual Reality for Freely Moving Animals</title><link>https://johnstowers.co.nz/2017/08/28/freemovr/</link><pubDate>Mon, 28 Aug 2017 21:05:00 +0000</pubDate><guid>https://johnstowers.co.nz/2017/08/28/freemovr/</guid><description>A virtual reality system for freely moving flies, fish and mice</description></item><item><title>Year One at Loopbio</title><link>https://johnstowers.co.nz/2016/12/22/loopbio-year-one/</link><pubDate>Thu, 22 Dec 2016 21:05:00 +0000</pubDate><guid>https://johnstowers.co.nz/2016/12/22/loopbio-year-one/</guid><description>Loopbio&amp;rsquo;s first year: camera-synchronisation hardware, frames and lighting rigs, and the first scientists using the tools.</description></item><item><title>Another Change</title><link>https://johnstowers.co.nz/2015/12/14/another-change/</link><pubDate>Mon, 14 Dec 2015 21:05:00 +0000</pubDate><guid>https://johnstowers.co.nz/2015/12/14/another-change/</guid><description>Co-founding Loopbio, and the observation that led me there.</description></item><item><title>Installing OpenCV 3 on Ubuntu 12.04</title><link>https://johnstowers.co.nz/2015/07/27/opencv3-ubuntu1204/</link><pubDate>Mon, 27 Jul 2015 17:05:00 +0000</pubDate><guid>https://johnstowers.co.nz/2015/07/27/opencv3-ubuntu1204/</guid><description>Compiling OpenCV 3.0 on Ubuntu 12.04</description></item><item><title>On Abstractions, Simplicity, and Positioning</title><link>https://johnstowers.co.nz/2014/07/10/abstractions-and-positioning/</link><pubDate>Thu, 10 Jul 2014 21:05:00 +0000</pubDate><guid>https://johnstowers.co.nz/2014/07/10/abstractions-and-positioning/</guid><description>The most important design principle is minimising the cost of the inevitable failure of your abstraction - and how Python, OpenCV, Arduino, GNOME Shell and ROS each position themselves around it.</description></item><item><title>Operating a Many-camera Real-time Tracking System</title><link>https://johnstowers.co.nz/2014/06/10/many-camera-tracking/</link><pubDate>Tue, 10 Jun 2014 21:05:00 +0000</pubDate><guid>https://johnstowers.co.nz/2014/06/10/many-camera-tracking/</guid><description>Patterns for managing a real-time multi-camera tracking setup</description></item><item><title>FlyMAD - The Fly Mind Altering Device</title><link>https://johnstowers.co.nz/2014/05/27/flymad/</link><pubDate>Tue, 27 May 2014 21:05:00 +0000</pubDate><guid>https://johnstowers.co.nz/2014/05/27/flymad/</guid><description>Simplified ROS Distribution</description></item><item><title>Distributing Pure Python ROS Applications</title><link>https://johnstowers.co.nz/2013/10/11/ros-freeze/</link><pubDate>Fri, 11 Oct 2013 00:46:32 +0000</pubDate><guid>https://johnstowers.co.nz/2013/10/11/ros-freeze/</guid><description>Simplified ROS Distribution</description></item><item><title>Lightweight Development Prefixes</title><link>https://johnstowers.co.nz/2013/09/29/lightweight-development-prefixes/</link><pubDate>Sun, 29 Sep 2013 18:05:00 +0000</pubDate><guid>https://johnstowers.co.nz/2013/09/29/lightweight-development-prefixes/</guid><description>lightweight development prefixes on Linux</description></item><item><title>GNOME Tweak Tool 3.10 Improvements</title><link>https://johnstowers.co.nz/2013/09/24/tweak-tool-310/</link><pubDate>Tue, 24 Sep 2013 12:25:32 +0000</pubDate><guid>https://johnstowers.co.nz/2013/09/24/tweak-tool-310/</guid><description>ROS + Gtk</description></item><item><title>Python Print / String Format Reference</title><link>https://johnstowers.co.nz/pages/python-print-format-reference.html</link><pubDate>Tue, 26 Feb 2013 10:31:37 +0000</pubDate><guid>https://johnstowers.co.nz/pages/python-print-format-reference.html</guid><description>Bash Cheat Sheet</description></item><item><title>Python Bindings to the Pointcloud Library</title><link>https://johnstowers.co.nz/2013/02/03/python-pcl/</link><pubDate>Sun, 03 Feb 2013 02:00:00 +0000</pubDate><guid>https://johnstowers.co.nz/2013/02/03/python-pcl/</guid><description>python-pcl</description></item><item><title>ROS and Gtk for Laboratory Control</title><link>https://johnstowers.co.nz/2013/01/27/lab-with-gtk-ros-1/</link><pubDate>Sun, 27 Jan 2013 23:15:32 +0000</pubDate><guid>https://johnstowers.co.nz/2013/01/27/lab-with-gtk-ros-1/</guid><description>ROS + Gtk</description></item><item><title>I'm at GUADEC</title><link>https://johnstowers.co.nz/2012/07/27/im-at-guadec/</link><pubDate>Fri, 27 Jul 2012 02:38:26 +0000</pubDate><guid>https://johnstowers.co.nz/2012/07/27/im-at-guadec/</guid><description>&lt;p&gt;An organised person would have blogged about going to GUADEC before the event started. I am not that person. I am there now. Come see me if you want to talk about / hack on&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;GNOME tweak tool&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Scientific computing with PyGObject (improving interaction with numpy, etc)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Windows builds of PyGObject + GTK3&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Real time charting (&lt;a href="https://github.com/nzjrs/uber-graph" rel="noopener"&gt;https://github.com/nzjrs/uber-graph&lt;/a&gt;
)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>A Change</title><link>https://johnstowers.co.nz/2011/10/19/a-change/</link><pubDate>Wed, 19 Oct 2011 16:15:32 +0000</pubDate><guid>https://johnstowers.co.nz/2011/10/19/a-change/</guid><description>&lt;p&gt;2011 has been an interesting year. Between the &lt;a href="http://en.wikipedia.org/wiki/Christchurch_earthquake" rel="noopener"&gt;stupid earthquakes&lt;/a&gt;
 and the pressure of finishing my PhD, I have been silent because I have had nothing interesting to talk about (cf. twitter&amp;hellip;).&lt;/p&gt;
&lt;p&gt;But there is a light at the end, I&amp;rsquo;m on track to complete my thesis, &lt;em&gt;&amp;lsquo;Biologically Inspired Visual Control of Flying Robots&amp;rsquo;,&lt;/em&gt; in December/January.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://johnstowers.co.nz/images/imported/chch1.jpg"&gt;&lt;figure class="img"&gt;
 &lt;img src="https://johnstowers.co.nz/images/imported/chch1-sml.jpg" alt="Christchurch, demolished, the old&amp;hellip;" loading="lazy" decoding="async"&gt;&lt;/figure&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m excited to say that I have accepted a job at the &lt;a href="http://www.imp.ac.at" rel="noopener"&gt;Institute of Molecular pathology&lt;/a&gt;
, in a &lt;a href="http://strawlab.org/" rel="noopener"&gt;research group&lt;/a&gt;
 studying the mechanisms of visual flight control in insects. Technology wise, it is a perfect fit; the experimental apparatus involves a multi-camera real-time flight tracking system and estimator for multiple targets in an augmented reality flight arena. It is open-source (ish), and python/numpy. Research wise, it allows me to investigate some of the assumptions and unknowns in the biomimetic control systems I implemented during my PhD. And it is in Vienna, 1st Feb, 2012!&lt;/p&gt;</description></item><item><title>Make Quick Reference</title><link>https://johnstowers.co.nz/pages/make-quick-reference.html</link><pubDate>Fri, 15 Jul 2011 14:38:30 +0000</pubDate><guid>https://johnstowers.co.nz/pages/make-quick-reference.html</guid><description>&lt;p&gt;This page contains a minimal GNU Make reference, adapted for my use from&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.gnu.org/software/make/manual/make.html#toc_Quick-Reference" rel="noopener"&gt;The official quick reference&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;Automatic Variables:&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here is a summary of the automatic variables. See &lt;a href="http://www.gnu.org/software/automake/manual/make/Automatic-Variables.html#Automatic-Variables" rel="noopener"&gt;Automatic Variables&lt;/a&gt;
, for full information.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$@ The file name of the target.
$% The target member name, when the target is an archive member.
$&amp;lt; The name of the first prerequisite.
$? The names of all the prerequisites that are newer than the target, with spaces between them.
$+
$^ The names of all the prerequisites, with spaces between them.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The value of &lt;code&gt;$^&lt;/code&gt; omits duplicate prerequisites, while &lt;code&gt;$+&lt;/code&gt; retains them and preserves their order.&lt;/p&gt;</description></item><item><title>Interfacing Python + C + OpenCV via ctypes</title><link>https://johnstowers.co.nz/2011/07/15/interfacing-python-c-opencv-via-ctypes/</link><pubDate>Fri, 15 Jul 2011 12:01:48 +0000</pubDate><guid>https://johnstowers.co.nz/2011/07/15/interfacing-python-c-opencv-via-ctypes/</guid><description>&lt;p&gt;I was recently asked to help a colleague access his image processing C-library from python; quite a common task. As those of you who are familiar with Python might realise, there are a whole bag of ways that this can be accomplished;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.swig.org/" rel="noopener"&gt;SWIG&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://cython.org/" rel="noopener"&gt;Cython&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ctypes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://launchpad.net/pybindgen" rel="noopener"&gt;PybindGen&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this case the colleague only needed to access a single function from the library returning image data, and then hand this result onto OpenCV. One happy side effect of the new (&amp;gt; v2.1) python-opencv bindings is that they do &lt;a href="http://opencv.willowgarage.com/documentation/python/cookbook.html#pil-image-to-opencv" rel="noopener"&gt;no validation on CvImage.SetData&lt;/a&gt;
, which means you can pass an arbitrary string/pointer. Because of this I advised him I thought using something like SWIG was overkill, and he could just write a wrapper to his library using ctypes, or a thin python extension directly.&lt;/p&gt;</description></item><item><title>End of an Era: PyGTK</title><link>https://johnstowers.co.nz/2011/04/03/end-of-an-era-pygtk/</link><pubDate>Sun, 03 Apr 2011 14:48:08 +0000</pubDate><guid>https://johnstowers.co.nz/2011/04/03/end-of-an-era-pygtk/</guid><description>&lt;p&gt;I just &lt;a href="http://mail.gnome.org/archives/gnome-announce-list/2011-April/msg00002.html" rel="noopener"&gt;released&lt;/a&gt;
 PyGTK 2.24, which will almost certainly be the last major &lt;a href="http://www.pygtk.org" rel="noopener"&gt;PyGTK&lt;/a&gt;
 release. The future of Python on the GNOME platform is &lt;a href="http://live.gnome.org/PyGObject" rel="noopener"&gt;PyGObject + GObject Introspection&lt;/a&gt;
. From my experience over the last few months porting a number of my projects, the future is bright.&lt;/p&gt;
&lt;p&gt;In a cruel twist of irony, the state of PyGTK on Windows and Mac has never been better. The credit for the windows work (and some great documentation improvements this cycle) must go to Dieter Verfaillie&lt;/p&gt;</description></item><item><title>PyGTK All-in-one Installer for Windows</title><link>https://johnstowers.co.nz/2010/12/24/pygtk-all-in-one-installer-for-windows/</link><pubDate>Fri, 24 Dec 2010 20:18:25 +0000</pubDate><guid>https://johnstowers.co.nz/2010/12/24/pygtk-all-in-one-installer-for-windows/</guid><description>&lt;p&gt;The PyGTK team is pleased to &lt;a href="http://www.daa.com.au/pipermail/pygtk/2010-December/019296.html" rel="noopener"&gt;announce&lt;/a&gt;
 the return of the highly popular all-in-one installer for Windows.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The PyGTK All-in-one installer provides an alternative installation method for PyGTK users on Windows. It bundles PyGTK, PyGObject, PyCairo, PyGtkSourceView2, PyGooCanvas, PyRsvg, the gtk+-bundle and Glade in one handy installer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Currently 32 bit Python 2.6 and 2.7 versions are supported on Windows XP and above.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://download.gnome.org/binaries/win32/pygtk/2.22/" rel="noopener"&gt;Download&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://github.com/dieterv/pygtk-installer/blob/master/README.rst" rel="noopener"&gt;README&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://github.com/dieterv" rel="noopener"&gt;Dieter Verfaillie&lt;/a&gt;
 deserves enormous thanks for this work. Firstly, he performed the tedious job of ensuring that all the component MSI installers were exactly correct, and secondly, the really difficult task of deconstructing these individual installers and reassembling their contents into a single cohesive executable.&lt;/p&gt;</description></item><item><title>GTK+ Viewer for Microsoft Kinect</title><link>https://johnstowers.co.nz/2010/11/19/gtk-viewer-for-microsoft-kinect/</link><pubDate>Fri, 19 Nov 2010 01:09:11 +0000</pubDate><guid>https://johnstowers.co.nz/2010/11/19/gtk-viewer-for-microsoft-kinect/</guid><description>&lt;p&gt;I&amp;rsquo;m hacking on the new &lt;a href="http://en.wikipedia.org/wiki/Kinect" rel="noopener"&gt;Kinect&lt;/a&gt;
 at the moment and the &lt;a href="https://github.com/OpenKinect/libfreenect/blob/master/c/examples/glview.c" rel="noopener"&gt;OpenGL viewer&lt;/a&gt;
 didn&amp;rsquo;t work for me so I threw together this &lt;strong&gt;&lt;a href="https://gist.github.com/704902" rel="noopener"&gt;terrible&lt;/a&gt;
&lt;/strong&gt;&lt;a href="https://gist.github.com/704902" rel="noopener"&gt; quality gtk+ one.&lt;/a&gt;
 I&amp;rsquo;ll clean up the code and try to get this into &lt;a href="http://openkinect.org/wiki/Main_Page" rel="noopener"&gt;OpenKinect&lt;/a&gt;
 ASAP.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://johnstowers.co.nz/images/imported/gtk-microsoft-kinect.jpg"&gt;&lt;figure class="img"&gt;
 &lt;img src="https://johnstowers.co.nz/images/imported/gtk-microsoft-kinect-sml.jpg" alt="GTK&amp;#43; viewer for Microsoft Kinect" loading="lazy" decoding="async"&gt;&lt;/figure&gt;
&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Map Updates</title><link>https://johnstowers.co.nz/2010/06/10/map-updates/</link><pubDate>Thu, 10 Jun 2010 16:34:27 +0000</pubDate><guid>https://johnstowers.co.nz/2010/06/10/map-updates/</guid><description>&lt;p&gt;I recently made a number of &lt;a href="http://mail.gnome.org/archives/gnome-announce-list/2010-June/msg00003.html" rel="noopener"&gt;improvements&lt;/a&gt;
 to &lt;a href="http://nzjrs.github.com/osm-gps-map/" rel="noopener"&gt;osm-gps-map&lt;/a&gt;
, the easy to use mapping widget. The motivation for these came at the request of the &lt;a href="http://www.foxtrotgps.org/" rel="noopener"&gt;foxtrotGPS&lt;/a&gt;
 developers (foxtrotGPS is a community developed fork of TangoGPS). These changes enhanced the API for adding &lt;a href="http://github.com/nzjrs/osm-gps-map/blob/master/src/osm-gps-map-image.h" rel="noopener"&gt;images&lt;/a&gt;
 and &lt;a href="http://github.com/nzjrs/osm-gps-map/blob/master/src/osm-gps-map-track.h" rel="noopener"&gt;tracks&lt;/a&gt;
 to the map, and in addition allowed me to clean up the &lt;a href="http://github.com/nzjrs/osm-gps-map/blob/master/src/osm-gps-map-widget.h" rel="noopener"&gt;basic API&lt;/a&gt;
 making it easier to use for the common case. But, there is more, especially relevant to Gtk+/GNOME 3.0.&lt;/p&gt;</description></item></channel></rss>