<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>tenshu.net &#187; Terminator</title>
	<atom:link href="http://www.tenshu.net/archives/category/techie/foss/terminator/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tenshu.net</link>
	<description>Pondering the mystery...</description>
	<lastBuildDate>Fri, 22 Jan 2010 18:37:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>This is your captain speaking, Terminator has now landed!</title>
		<link>http://www.tenshu.net/archives/2010/01/21/this-is-your-captain-speaking-we-have-now-landed/</link>
		<comments>http://www.tenshu.net/archives/2010/01/21/this-is-your-captain-speaking-we-have-now-landed/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 18:35:23 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=383</guid>
		<description><![CDATA[I managed to finish off what I thought were the last few missing keyboard shortcuts during my lunch break today, but then realised that I&#8217;d missed two, but I was so excited an short of time that I decided to just go ahead and land the branch anyway!
So there it is &#8211; trunk is now [...]]]></description>
			<content:encoded><![CDATA[<p>I managed to finish off what I thought were the last few missing keyboard shortcuts during my lunch break today, but then realised that I&#8217;d missed two, but I was so excited an short of time that I decided to just go ahead and land the branch anyway!<br />
So there it is &#8211; trunk is now completely refactored and full of exciting new bugs. I noticed while I was working from it this afternoon that the transparency setting code wasn&#8217;t working, but I expect I can get that cleared up tonight :)</p>
<p>Now a bunch of bug fixing and a config converter and we can release!<br />
Thanks to everyone who has been testing so far.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2010/01/21/this-is-your-captain-speaking-we-have-now-landed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Final approach for Terminator epic-refactor</title>
		<link>http://www.tenshu.net/archives/2010/01/21/final-approach-for-terminator-epic-refactor/</link>
		<comments>http://www.tenshu.net/archives/2010/01/21/final-approach-for-terminator-epic-refactor/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 00:21:09 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=380</guid>
		<description><![CDATA[I&#8217;m done hacking on the Terminator epic-refactor branch for the evening and the following has been achieved today (in chronological order):

Fix a bug in handling URLs dropped on the window
Implement directional navigation
Implement geometry hinting
Fix a bug in group emitting that cause &#8220;Broadcast off&#8221; and &#8220;Broadcast to all&#8221; to become inverted
Implement WM_URGENT bell handler

I&#8217;m really happy [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m done hacking on the Terminator epic-refactor branch for the evening and the following has been achieved today (in chronological order):</p>
<ul>
<li>Fix a bug in handling URLs dropped on the window</li>
<li>Implement directional navigation</li>
<li>Implement geometry hinting</li>
<li>Fix a bug in group emitting that cause &#8220;Broadcast off&#8221; and &#8220;Broadcast to all&#8221; to become inverted</li>
<li>Implement WM_URGENT bell handler</li>
</ul>
<p>I&#8217;m <em>really</em> happy with how this is going. All that is left to have feature parity with trunk, I think, is some keyboard shortcut handlers.</p>
<p>I&#8217;d still love to get more testing results to make sure I haven&#8217;t missed anything, but at this rate I&#8217;m expecting to be able to land the epic-refactor branch on trunk this weekend, after five and a half months.</p>
<p>Then I&#8217;m going to write a tool to convert old config files and we can think about putting out a 0.90 beta release. Exciting stuff!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2010/01/21/final-approach-for-terminator-epic-refactor/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Terminator 0.90 progress</title>
		<link>http://www.tenshu.net/archives/2010/01/19/terminator-0-90-progress/</link>
		<comments>http://www.tenshu.net/archives/2010/01/19/terminator-0-90-progress/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 10:08:14 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=378</guid>
		<description><![CDATA[Further to my previous post I thought I&#8217;d post a quick update about how things are progressing. I mentioned in my previous post that I knew of several things that were not yet working in the Epic Refactor branch:

-e and -x command line options
all forms of drag &#38; drop
directional navigation
some keyboard shortcuts

I&#8217;m pleased to say [...]]]></description>
			<content:encoded><![CDATA[<p>Further to my previous post I thought I&#8217;d post a quick update about how things are progressing. I mentioned in my previous post that I knew of several things that were not yet working in the Epic Refactor branch:</p>
<ul>
<li>-e and -x command line options</li>
<li>all forms of drag &amp; drop</li>
<li>directional navigation</li>
<li>some keyboard shortcuts</li>
</ul>
<p>I&#8217;m pleased to say that the first two of these are now taken care of, but the latter two are still to be done. I&#8217;m less pleased to say that I haven&#8217;t had much external feedback about this branch yet, but I suspect that most people who might be interested probably don&#8217;t read my blog ;)</p>
<p>So if you know people who like Terminator and enjoy testing things out, all they need to do is:</p>
<pre>bzr branch lp:~cmsj/terminator/epic-refactor
cd epic-refactor
./terminator
</pre>
<p>and give some feedback!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2010/01/19/terminator-0-90-progress/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Testing Terminator 0.90</title>
		<link>http://www.tenshu.net/archives/2010/01/05/testing-terminator-0-90/</link>
		<comments>http://www.tenshu.net/archives/2010/01/05/testing-terminator-0-90/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 13:12:40 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=375</guid>
		<description><![CDATA[You might have seen my recent posts about the epic refactoring that has been going on in the Terminator codebase for the last few months.
I think it&#8217;s finally time that we get some more eyeballs on it, mainly so I can check that I haven&#8217;t massively screwed something up. I know there is lots of [...]]]></description>
			<content:encoded><![CDATA[<p>You might have seen my recent posts about the epic refactoring that has been going on in the Terminator codebase for the last few months.</p>
<p>I think it&#8217;s finally time that we get some more eyeballs on it, mainly so I can check that I haven&#8217;t massively screwed something up. I know there is lots of missing functionality right now, and probably a bunch of subtle bugs, but I could use your help quantifying exactly what these are!</p>
<p>If you&#8217;re inclined to help, please branch<em> lp:~cmsj/terminator/epic-refactor</em>, cd into it and run <em>./terminator</em>, then use it like you always would and file bugs, preferably indicating clearly in the bug that you&#8217;re using this branch and not trunk (maybe tag the bug &#8216;<strong>epicrefactor</strong>&#8216;).</p>
<p>Things I know are broken right now:</p>
<ul>
<li>-e and -x command line options</li>
<li>all forms of drag &amp; drop</li>
<li>directional navigation</li>
<li>some keyboard shortcuts</li>
</ul>
<p>Things I know are missing because they&#8217;re not coming back:</p>
<ul>
<li>Extreme tabs mode (sorry, it&#8217;s just too insane to support)</li>
<li>GNOME Terminal profile reading (I&#8217;m trying to simplify our crazy config system and dropping GConf is a good way to achieve that)</li>
<li>Config file reading. At some point I&#8217;ll write something that migrates old Terminator configs to the new format, but for now you&#8217;ll have to live without your old config file. The new one isn&#8217;t documented yet either, but it is a whole bunch better!</li>
</ul>
<p>Now would also be a great time to start writing plugins for Terminator and telling me about them. I&#8217;m happy to ship good plugins, but more importantly I want feedback about the weaknesses/strengths of our plugin system. Right now you can only hook into URL mangling and the terminal context menu, but the latter of those gives you pretty serious flexibility I think. Obviously one massive weakness is a lack of documentation about the plugin API, but I&#8217;ll get to that, I promise!</p>
<p>So there we have it, another step along the way to me being able to merge this branch into trunk and put out a real release of 0.90 and then eventually 1.0!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2010/01/05/testing-terminator-0-90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python wanderings, part two</title>
		<link>http://www.tenshu.net/archives/2009/12/31/python-wanderings-part-two/</link>
		<comments>http://www.tenshu.net/archives/2009/12/31/python-wanderings-part-two/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 23:42:08 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=370</guid>
		<description><![CDATA[2. Plugging it all in
Sometimes we get feature requests and merge proposals for features that are clearly useful for someone, but not appropriate for the general use cases. It&#8217;s always unfortunate to have to say no to these folks, but we have a slim menu UI and I&#8217;m wary of cluttering it with niche features. [...]]]></description>
			<content:encoded><![CDATA[<h2>2. Plugging it all in</h2>
<p>Sometimes we get feature requests and merge proposals for features that are clearly useful for someone, but not appropriate for the general use cases. It&#8217;s always unfortunate to have to say no to these folks, but we have a slim menu UI and I&#8217;m wary of cluttering it with niche features. Still, turning away legitimate users is something I don&#8217;t like doing, so for a while we&#8217;ve been considering how to fix this.</p>
<p>The obvious answer is that we should support plugins, and I&#8217;ve been working on such a system for my epic refactoring. This is a quick wander through some thoughts I&#8217;ve had.</p>
<p>I started out by googling for python plugin systems; One if the top hits was <a href="http://lucumr.pocoo.org/2006/7/3/python-plugin-system">this page</a> by Armin Ronacher . In it he demonstrates a plugin system in under 40 lines of Python. It&#8217;s simple and flexible, but there are some issues, like it makes doctest very sad.</p>
<p>I asked about this in #python and was politely informed that I was Doing It Wrong. I chatted for a while with the helpful residents and came away with a list of plugin frameworks to look at, namely twisted.plugin and zope.interface.</p>
<p>Pulling in external dependencies is a big deal for us &#8211; many of our users are on Ubuntu or similar desktops with lots of python packages already installed, but some are not using GNOME or a Linux desktop at all, so we have to be sure that we need a library before we depend on it.</p>
<p>After playing a little with both of the options I came to the conclusion that while they are both really well made and capable, they are far more formal than we need, and the added dependency issues continued to concern me.</p>
<p>I revisited Armin&#8217;s plugin system and removed the use of .__subclasses__() that was breaking doctest and offending #python instead having a list in each .py file which the plugin system extracts and treats any classes mentioned in that list as plugins. I also extended it to always instantiate the plugins and look for the plugin files in both the system directories and the user&#8217;s home directory.</p>
<p><a href="http://bazaar.launchpad.net/%7Ecmsj/%2Bjunk/terminator-epic-refactor/annotate/head%3A/terminatorlib/plugin.py">This plugin system</a> is currently hooked into two places in the branch, URL mangling and the context menu. This allows plugins to add support for new URL types (e.g. we just added support for Launchpad code URLs like lp:~cmsj/+junk/terminator-epic-refactor), and insert new options into the context menu. I&#8217;m not sure if we need to go further, but if you would like to hook into other parts let me know &#8211; it&#8217;s pretty easy to arrange now :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2009/12/31/python-wanderings-part-two/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Python wanderings, part one</title>
		<link>http://www.tenshu.net/archives/2009/12/23/python-wanderings-part-one/</link>
		<comments>http://www.tenshu.net/archives/2009/12/23/python-wanderings-part-one/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 09:08:22 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=360</guid>
		<description><![CDATA[As mentioned in my earlier post about refactoring Terminator, I want to talk about some of the things I&#8217;ve learned about Python and programming in the last few months. If I were you I wouldn&#8217;t place any great significance in anything I&#8217;m about to say &#8211; after all I&#8217;m a rank amateur in the field [...]]]></description>
			<content:encoded><![CDATA[<p>As mentioned in my earlier post about refactoring Terminator, I want to talk about some of the things I&#8217;ve learned about Python and programming in the last few months. If I were you I wouldn&#8217;t place any great significance in anything I&#8217;m about to say &#8211; after all I&#8217;m a rank amateur in the field of programming.</p>
<p>This is going to be a multi-part post so I at least get something out there, rather than leaving it to rot forever in my drafts folder.</p>
<h2>1. Solving global warming^W variables</h2>
<p>I have objects that represent terminal widgets, objects that represent widgets that contain terminals, objects that contain configuration, and one master object that functions as the brains of the operation.</p>
<p>Inevitably these objects need to know about each other, but how to achieve that? The brain object is simply called &#8216;Terminator&#8217; and almost every other part of the system needs to know about it, same with the config object, and Terminator needs to know about all of the terminal objects, etc. The dependencies are all over the place and one aim of the re-factor was to separate all these parts out and decouple them, but ultimately I was never going to get away from different objects needing to know about each other.</p>
<p>So how to go about it? As far as I know the options are:</p>
<ul>
<li>pass around object references (every time you create something, pass it your references to all the bits it needs)
<ul>
<li>Pros: no hacks or tricks involved</li>
<li>Cons: makes every __init__() more complicated, means passing references that an object doesn&#8217;t need other than to pass to its children.</li>
</ul>
</li>
<li>use global variables
<ul>
<li>Pros: they&#8217;re global</li>
<li>Cons: everyone seems to hate global variables, perhaps because it&#8217;s an implicit dependency not an explicit one, or because of potential namespace collisions, or maybe other reasons.</li>
</ul>
</li>
<li>use singletons
<ul>
<li>Pros: explicit dependency</li>
<li>Cons: often seems to involve hackery to get the singleton object reference</li>
</ul>
</li>
</ul>
<p>In my searching around I came across a fourth option that somewhat relates to singletons&#8230; the Borg pattern.</p>
<p>This is a very simple idea &#8211; it&#8217;s a class that always instantiates to the same thing. You don&#8217;t need a factory or function or something that gives you a reference to the singleton, you just instantiate a class and it&#8217;s the same as all of the others you&#8217;ve instantiated of the same class.</p>
<p>Best of all, the Borg pattern is incredibly simple in Python. Like, really simple. Don&#8217;t believe me? Click <a href="http://code.activestate.com/recipes/66531/">here</a>. Yep, four lines of code. Technically it&#8217;s probably a bit ugly, but the resulting code feels very clean.</p>
<p>So now I have the Borg pattern in use for the main class, a class that provides all the configuration, a class that discovers plugins and lets them be referenced, and a fairly new class I&#8217;m experimenting with that acts as a factory for all of my classes, as a way to break any possibility of circular module dependencies.</p>
<p>Reality has to bite though, the Borg isn&#8217;t a panacea; One has to be very careful about how one creates Borg objects. I chose to create a base class called Borg which Terminator, Config, Factory and PluginRegistry all derive from, but this turns out to have been a very short sighted decision to abstract out the common 4 lines. It wasn&#8217;t until I started building Config to have functions that allow it to be accessed as a dict that I realised all of my Terminator, Config, Factory and PluginRegistry instances were the same thing as opposed to each type being distinct. It&#8217;s also terrifyingly important that the subclasses of Borg not use class attributes. Any attributes defined by these classes *must* be instantiated as None so they are instance variables, and *after* you&#8217;ve called Borg.__init__(self) in your own __init__() you can then set up your attributes however you want because they are then part of the shared state.</p>
<p>On the whole I am happy with the Borg pattern. I&#8217;ve written test code to ensure that all of the assumptions I explicitly made are guaranteed, and all of the implicit assumptions I&#8217;ve discovered I made are also safe. Nonetheless, it&#8217;s not a completely clean solution and I find myself wishing it was somehow a primitive of the language.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2009/12/23/python-wanderings-part-one/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Epic Terminator refactoring afoot</title>
		<link>http://www.tenshu.net/archives/2009/12/19/epic-terminator-refactoring-afoot/</link>
		<comments>http://www.tenshu.net/archives/2009/12/19/epic-terminator-refactoring-afoot/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 14:40:33 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=358</guid>
		<description><![CDATA[The current bzr repository for Terminator began its life in November 2006 with the simplest possible implementation of the concept of packing multiple terminals into one window. In the 3 years since then we have expanded and extended the code in a variety of directions to produce a moderately compelling feature set, but one that [...]]]></description>
			<content:encoded><![CDATA[<p>The current bzr repository for Terminator began its life in November 2006 with the simplest possible implementation of the concept of packing multiple terminals into one window. In the 3 years since then we have expanded and extended the code in a variety of directions to produce a moderately compelling feature set, but one that is really obviously incomplete.</p>
<p>In the same time period we&#8217;ve also seen a really gratifying amount of adoption &#8211; I believe our active userbase numbers in the thousands if not tens of thousands. I am forced to largely estimate these numbers for all the usual FOSS reasons, but it&#8217;s all based on one real metric &#8211; Ubuntu has about a million users reporting popcon data and over 10,000 of those have Terminator installed. I don&#8217;t actually think that they all use it, but nonetheless it&#8217;s the kind of number that makes you think &#8220;hey maybe I need to be doing more for these folks&#8221;.</p>
<p>And I do think that, and I am trying to do more.</p>
<p>Back in August I took a serious look at where we are and came to the same old conclusions &#8211; we lack one or two headline features that people keep asking for (barely a week goes by when I don&#8217;t get asked how someone can save a particular layout of terminals). These features are very subtle and deeply problematic with the existing code architecture &#8211; we&#8217;ve just been hacking in features as we can without any regard for architecture or future maintainability.</p>
<p>I decided that I&#8217;d had enough of being confused and frustrated by the status quo and so I started a side branch in my Launchpad /+junk/ folder called &#8220;epic-refactor&#8221; with the aim of refactoring all of Terminator from scratch. I&#8217;d read through every line of existing code and figure out what we were actually doing and how it could fit together more sensibly, then sketch that out in the barest form possible while I experimented with various Python techniques to arrive at an architecture that makes sense for our project, then port over the existing code feature-by-feature to the new architecture.</p>
<p>It&#8217;s now a little over four months since I started the epic refactor and looking at where I stand today I am really happy. It&#8217;s not ready to be merged into trunk yet, but the amount of work to get it there is less than the amount of work I&#8217;ve done on it so far. I don&#8217;t want to put a timescale on it, but I hope to be calling for some wider testing in 2-3 months or less.</p>
<p>Once we are acceptably close to feature parity with the current releases I&#8217;ll merge the epic-refactor branch over  and we can start to push forward with implementing the features that everyone wants, and finally get to the point of being able to comfortably release a 1.0 version.</p>
<p>I&#8217;d always thought that I&#8217;d hand over maintainership after a 1.0 version, but the last 4 months have been a whirlwind of programming discovery, so I might very well just stick around and see what people want on the road to a 2.0 release. Alternatively, the work I&#8217;ve been doing in the last few days on a plugin system might mean that I can kick back and watch everyone else implement crazy, awesome and sublime features I&#8217;d never thought of!</p>
<p>I&#8217;ll be back with more when I have written a configuration subsystem for epic-refactor, because by then I&#8217;ll be wanting your help to test!</p>
<p>I&#8217;m also going to write a separate post shortly about some of the interesting Python paradigms and ideas I&#8217;ve hit upon along the way. I&#8217;m sure none of it will be a revelation to anyone with serious programming chops, but for a rank amateur like me it would have been useful to have read four months ago ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2009/12/19/epic-terminator-refactoring-afoot/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Terminator 0.14 released!</title>
		<link>https://launchpad.net/terminator/+announcement/4487</link>
		<comments>https://launchpad.net/terminator/+announcement/4487#comments</comments>
		<pubDate>Thu, 03 Dec 2009 13:35:39 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>

		<guid isPermaLink="false">tag:launchpad.net,2009-12-03:/+announcement/4487</guid>
		<description><![CDATA[This has been another long gap release unfortunately, but we do have some goodies for you.
Stephen Boddy is back with some excellent re-working of the UI relating to grouping terminals, Kees Cook brings us some clever work relating to window geometry a...]]></description>
			<content:encoded><![CDATA[<p>This has been another long gap release unfortunately, but we do have some goodies for you.<br />
Stephen Boddy is back with some excellent re-working of the UI relating to grouping terminals, Kees Cook brings us some clever work relating to window geometry and myself and others have been fixing bugs for you. We hope you enjoy this release, especially those of you who hated the "I'll be back" notifications from 0.13!</p>
<p>Home Page: <a rel="nofollow" href="http://www.tenshu.net/terminator">http://<wbr></wbr>www.tenshu.<wbr></wbr>net/terminator</a><br />
Launchpad Page: <a rel="nofollow" href="http://launchpad.net/terminator">http://<wbr></wbr>launchpad.<wbr></wbr>net/terminator</a><br />
Ubuntu PPAs: <a rel="nofollow" href="https://launchpad.net/~gnome-terminator/+archive/ppa">https:/<wbr></wbr>/launchpad.<wbr></wbr>net/~gnome-<wbr></wbr>terminator/<wbr></wbr>+archive/<wbr></wbr>ppa</a></p>]]></content:encoded>
			<wfw:commentRss>https://launchpad.net/terminator/+announcement/4487/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Terminator 0.13 released!</title>
		<link>http://www.tenshu.net/archives/2009/06/23/terminator-013-released/</link>
		<comments>http://www.tenshu.net/archives/2009/06/23/terminator-013-released/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 20:24:47 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=273</guid>
		<description><![CDATA[I&#8217;m very pleased to announce the release of Terminator 0.13!
You can find the download on Launchpad or see more at the Homepage. Enjoy!
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m very pleased to announce the release of Terminator 0.13!</p>
<p>You can find the download on <a href="http://launchpad.net/terminator/trunk/0.13/+download/terminator_0.13.tar.gz">Launchpad</a> or see more at the <a href="http://www.tenshu.net/terminator/">Homepage</a>. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2009/06/23/terminator-013-released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Terminator 0.13 released!</title>
		<link>https://launchpad.net/terminator/+announcement/3031</link>
		<comments>https://launchpad.net/terminator/+announcement/3031#comments</comments>
		<pubDate>Tue, 23 Jun 2009 20:16:11 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>

		<guid isPermaLink="false">tag:launchpad.net,2009-06-23:/+announcement/3031</guid>
		<description><![CDATA[After a wait of really far too long, we're proud to present Terminator 0.13 with a bunch of bug fixes, some minor new features and various optimisations. Downloads in the usual place!]]></description>
			<content:encoded><![CDATA[<p>After a wait of really far too long, we're proud to present Terminator 0.13 with a bunch of bug fixes, some minor new features and various optimisations. Downloads in the usual place!</p>]]></content:encoded>
			<wfw:commentRss>https://launchpad.net/terminator/+announcement/3031/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recent FOSS activities</title>
		<link>http://www.tenshu.net/archives/2009/03/10/recent-foss-activities/</link>
		<comments>http://www.tenshu.net/archives/2009/03/10/recent-foss-activities/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 12:05:59 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=265</guid>
		<description><![CDATA[I&#8217;ve not been doing a huge amount of work on Terminator recently &#8211; I have to be honest and say that a lot of the fun stuff is already done and behind us, and it&#8217;s just got a couple of features before it&#8217;s as complete as it should be, also it&#8217;s now well over 2 [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve not been doing a huge amount of work on Terminator recently &#8211; I have to be honest and say that a lot of the fun stuff is already done and behind us, and it&#8217;s just got a couple of features before it&#8217;s as complete as it should be, also it&#8217;s now well over 2 years into the long-slog towards the often-marvelled-about decade it takes for a piece of software to be truly mature.<br />
That&#8217;s not to say that I haven&#8217;t still got a burning interest to do good works in the FOSS world. Recently I&#8217;ve been poking around at other things. I&#8217;ve got a patch in GNOME&#8217;s Bugzilla which fixes the stupid bug where mailto: URIs get mangled when you open them, and yesterday I submitted a branch to the GNOME Do folks which adds a plugin for users of Request Tracker (being a sysadmin, RT rules my working life).</p>
<p>Hopefully both will get merged soon! Now I need to figure out what I should poke at next in 2009 (my rough aim for the year being to produce more and consume less).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2009/03/10/recent-foss-activities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Terminator 0.12 released!</title>
		<link>http://www.tenshu.net/archives/2009/01/21/terminator-012-released/</link>
		<comments>http://www.tenshu.net/archives/2009/01/21/terminator-012-released/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 00:55:03 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=259</guid>
		<description><![CDATA[I&#8217;ve just uploaded a new version of Terminator!
This time we merry band of elves bring you a delightful mix of bug fixes and new features. Here&#8217;s the change log:
* Bug fixes
* Simultaneous typing support
* Directional terminal navigation
* Improved search UI
* Graphical Profile Editor
* Bug numbers for launchpad.net are now URLs
Head over to the homepage or [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just uploaded a new version of Terminator!</p>
<p>This time we merry band of elves bring you a delightful mix of bug fixes and new features. Here&#8217;s the change log:<br />
* Bug fixes<br />
* Simultaneous typing support<br />
* Directional terminal navigation<br />
* Improved search UI<br />
* Graphical Profile Editor<br />
* Bug numbers for launchpad.net are now URLs</p>
<p>Head over to <a title="Terminator Home Page" href="http://www.tenshu.net/terminator/">the homepage</a> or <a title="Terminator Project Page" href="http://launchpad.net/terminator/">Launchpad</a> for the goodness. I&#8217;ve already pushed out source packages to the Ubuntu PPAs, which should be spinning up buildds soon, so expect binary packages shortly. I&#8217;m sure we&#8217;ll filter into Debian, Ubuntu Jaunty, Fedora, FreeBSD and more soon enough :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2009/01/21/terminator-012-released/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Terminator 0.12 released!</title>
		<link>https://launchpad.net/terminator/+announcement/1840</link>
		<comments>https://launchpad.net/terminator/+announcement/1840#comments</comments>
		<pubDate>Tue, 20 Jan 2009 23:10:05 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>

		<guid isPermaLink="false">tag:launchpad.net,2009-01-20:/+announcement/1840</guid>
		<description><![CDATA[Sadly a small translation change slipped in at the last minute, but I'm otherwise pleased to announce the release of Terminator 0.12!
Bug fixes and some new features (including the very shiny "simultaneous typing").]]></description>
			<content:encoded><![CDATA[<p>Sadly a small translation change slipped in at the last minute, but I'm otherwise pleased to announce the release of Terminator 0.12!<br />
Bug fixes and some new features (including the very shiny "simultaneous typing").</p>]]></content:encoded>
			<wfw:commentRss>https://launchpad.net/terminator/+announcement/1840/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Translation template updated</title>
		<link>https://launchpad.net/terminator/+announcement/1660</link>
		<comments>https://launchpad.net/terminator/+announcement/1660#comments</comments>
		<pubDate>Mon, 22 Dec 2008 10:41:18 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>

		<guid isPermaLink="false">tag:launchpad.net,2008-12-22:/+announcement/1660</guid>
		<description><![CDATA[Something that I've consistently failed at previously is uploading new translation templates in a timely fashion before a release. The translation community is absolutely fantastic and I want to make the best use of them that we possibly can, so beginn...]]></description>
			<content:encoded><![CDATA[<p>Something that I've consistently failed at previously is uploading new translation templates in a timely fashion before a release. The translation community is absolutely fantastic and I want to make the best use of them that we possibly can, so beginning now I'm making more of a focus on regularly uploading templates to allow these multi-lingual rockstars enough time to make sure that the next release of Terminator has as much coverage as possible in your favourite language.</p>]]></content:encoded>
			<wfw:commentRss>https://launchpad.net/terminator/+announcement/1660/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Terminator feature: Directional terminal navigation</title>
		<link>http://www.tenshu.net/archives/2008/12/20/new-terminator-feature-directional-terminal-navigation/</link>
		<comments>http://www.tenshu.net/archives/2008/12/20/new-terminator-feature-directional-terminal-navigation/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 00:59:12 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=256</guid>
		<description><![CDATA[One of the nice side effects of being at an Ubuntu Developer Summit is the interesting conversations you have with people outside of the sessions themselves (which, as a sysadmin present to support the event itself, I was not particularly involved in).
One such conversation was over lunch in a busy Google canteen with Kees Cook, [...]]]></description>
			<content:encoded><![CDATA[<p>One of the nice side effects of being at an Ubuntu Developer Summit is the interesting conversations you have with people outside of the sessions themselves (which, as a sysadmin present to support the event itself, I was not particularly involved in).</p>
<p>One such conversation was over lunch in a busy Google canteen with Kees Cook, one of our rocking security engineers and a thoroughly decent chap. After a while we came to the subject of Terminator and some of the features we&#8217;d like to implement, the ones that have been requested and we&#8217;re not particularly motivated to work on, and the odd ones.</p>
<p>I was trying to remember the things people have asked us to add, that for one reason or another we probably aren&#8217;t going to and mentioned one about the ability to navigate between terminals in a directional way: That is, rather than doing Ctrl-Tab to cycle through the terminals in the order they were created, you could press something to move to the terminal to the left, or above, right or below the currently focussed one.</p>
<p>On the surface it sounds like a good idea and probably not too tricky, but only if you think from the point of view of a grid. That really would be easy, but our UI is produced by way of a tree structure, not a grid. This means you need to do some proper thinking to figure it out. Kees&#8217; face lit up and he said something like &#8220;that sounds like a graph theory problem!&#8221; and expressed an interest in working on it.</p>
<p>I&#8217;m very glad to say that in just under a week after we all went home from UDS, I&#8217;ve just merged his results into trunk.</p>
<p>Thanks very much to Kees for his code and helpful suggestions (such as resurrecting Marcus Korn&#8217;s simultaneous-typing branch, which I did one evening at UDS &#8211; rewriting it and then merging it into trunk). Also thanks to the other Terminator users I met there :)</p>
<p>So that&#8217;s two new features, although not really the big ticket ones that are holding back 1.0 ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2008/12/20/new-terminator-feature-directional-terminal-navigation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using inotify in a pygtk application without pyinotify</title>
		<link>http://www.tenshu.net/archives/2008/10/24/using-inotify-in-a-pygtk-application-without-pyinotify/</link>
		<comments>http://www.tenshu.net/archives/2008/10/24/using-inotify-in-a-pygtk-application-without-pyinotify/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 10:50:46 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=242</guid>
		<description><![CDATA[I am lazy. There&#8217;s no denying it, it&#8217;s simple fact.
That means, for example, when I am working with pygtk and I look at the API for pynotify, I am sad, because it&#8217;s a polling API and I hate polling.
What I like is GTK&#8217;s event model. I like telling it what to run when things happen [...]]]></description>
			<content:encoded><![CDATA[<p>I am lazy. There&#8217;s no denying it, it&#8217;s simple fact.</p>
<p>That means, for example, when I am working with pygtk and I look at the API for pynotify, I am sad, because it&#8217;s a polling API and I hate polling.</p>
<p>What I like is GTK&#8217;s event model. I like telling it what to run when things happen and letting it take care of all the pain for me. Obviously it&#8217;s possible to write some code which will do the polling and then trigger an event, but that compromises my freedom to be lazy.</p>
<p>Step in pygobject, which contains the bindings for GIO. Within the bowels of this beastie are the required components to monitor a file for changes in a very few lines of python:</p>
<pre style="padding-left: 30px;">#!/usr/bin/python
import gtk
import gio

def file_changed (monitor, file, unknown, event):
  if event == gio.FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
    print "file finished changing"

file = gio.File('/path/to/some/file')
monitor = file.monitor_file ()
monitor.connect ("changed", file_changed)
gtk.main()</pre>
<p>That&#8217;s it. I don&#8217;t know what the &#8220;unknown&#8221; argument for the callback is, probably the optional user_data connect() argument and this is but a small part of what inotify/GIO can do, but if you just care about being told when a file is updated, it&#8217;ll do (with caveats that you can never really know when a file has finished being changed, so be careful to validate it before you trust its contents).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2008/10/24/using-inotify-in-a-pygtk-application-without-pyinotify/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Terminator 0.11 released!</title>
		<link>http://www.tenshu.net/archives/2008/09/21/terminator-011-released/</link>
		<comments>http://www.tenshu.net/archives/2008/09/21/terminator-011-released/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 00:06:32 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=232</guid>
		<description><![CDATA[Head over to the Terminator Homepage to get the goodness that is version 0.11. Mostly just bugfixes this time, for things which hurt 0.10 users. Also present is support for X Session Management, although until we have proper profiling support, this is of limited use.
The source tarball is up, of course, and the Hardy/Intrepid PPAs [...]]]></description>
			<content:encoded><![CDATA[<p>Head over to the <a title="Terminator" href="http://www.tenshu.net/terminator">Terminator Homepage</a> to get the goodness that is version 0.11. Mostly just bugfixes this time, for things which hurt 0.10 users. Also present is support for X Session Management, although until we have proper profiling support, this is of limited use.</p>
<p>The source tarball is up, of course, and the Hardy/Intrepid PPAs should have packages by the time you read this.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2008/09/21/terminator-011-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Terminator 0.11 released!</title>
		<link>https://launchpad.net/terminator/+announcement/1094</link>
		<comments>https://launchpad.net/terminator/+announcement/1094#comments</comments>
		<pubDate>Fri, 19 Sep 2008 22:48:08 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>

		<guid isPermaLink="false">tag:launchpad.net,2008-09-19:/+announcement/1094</guid>
		<description><![CDATA[The only new feature this time is X Session Management support, but there are also a few important bug fixes for things that crept into 0.10, and some updated/new translations.]]></description>
			<content:encoded><![CDATA[<p>The only new feature this time is X Session Management support, but there are also a few important bug fixes for things that crept into 0.10, and some updated/new translations.</p>]]></content:encoded>
			<wfw:commentRss>https://launchpad.net/terminator/+announcement/1094/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Terminator 0.10 released</title>
		<link>http://www.tenshu.net/archives/2008/08/28/terminator-010-released/</link>
		<comments>http://www.tenshu.net/archives/2008/08/28/terminator-010-released/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 22:25:59 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.tenshu.net/?p=202</guid>
		<description><![CDATA[It&#8217;s been a week or so shy of two months since we pushed 0.9 out of the door and originally we planned on following up with a 0.9.1 release shortly after to clear up some bugs, but for a variety of not particularly good reasons this never happened.
Instead we&#8217;ve got a new release for you&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a week or so shy of two months since we pushed 0.9 out of the door and originally we planned on following up with a 0.9.1 release shortly after to clear up some bugs, but for a variety of not particularly good reasons this never happened.</p>
<p>Instead we&#8217;ve got a new release for you&#8230; 0.10.</p>
<p>It doesn&#8217;t have any shiny whizz-bang features like 0.9 had, but it does bring a bunch of bug fixes and the groundwork necessary for our 1.0 release.</p>
<p>As usual, head over to the <a href="http://www.tenshu.net/terminator/">homepage</a>, or <a href="http://launchpad.net/terminator/">Launchpad</a> to get the goodness.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tenshu.net/archives/2008/08/28/terminator-010-released/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Terminator 0.10 released!</title>
		<link>https://launchpad.net/terminator/+announcement/965</link>
		<comments>https://launchpad.net/terminator/+announcement/965#comments</comments>
		<pubDate>Thu, 28 Aug 2008 19:23:35 +0000</pubDate>
		<dc:creator>cmsj</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Techie]]></category>
		<category><![CDATA[Terminator]]></category>

		<guid isPermaLink="false">tag:launchpad.net,2008-08-28:/+announcement/965</guid>
		<description><![CDATA[Another release rolls in and this time it's not very exciting for you, but we have a bunch of bug fixes and the groundwork of the config/layout editing/saving work we want to do for 1.0. Please let us know if you find any bugs in this.]]></description>
			<content:encoded><![CDATA[<p>Another release rolls in and this time it's not very exciting for you, but we have a bunch of bug fixes and the groundwork of the config/layout editing/saving work we want to do for 1.0. Please let us know if you find any bugs in this.</p>]]></content:encoded>
			<wfw:commentRss>https://launchpad.net/terminator/+announcement/965/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
