<?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>Scott James Remnant &#187; Canonical</title>
	<atom:link href="http://www.netsplit.com/category/work/canonical/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.netsplit.com</link>
	<description></description>
	<lastBuildDate>Thu, 27 May 2010 13:35:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Canonical are Hiring!</title>
		<link>http://www.netsplit.com/2010/05/19/canonical-are-hiring/</link>
		<comments>http://www.netsplit.com/2010/05/19/canonical-are-hiring/#comments</comments>
		<pubDate>Wed, 19 May 2010 12:43:49 +0000</pubDate>
		<dc:creator>Scott James Remnant</dc:creator>
				<category><![CDATA[Canonical]]></category>

		<guid isPermaLink="false">http://www.netsplit.com/?p=253</guid>
		<description><![CDATA[It seems like this week&#8217;s popular anti-Ubuntu FUD is that Canonical are missing people who can fix particular classes of bugs, many people have said the same thing in comments on my previous blog post.
So I&#8217;d like to point out that Canonical are Hiring! and we have many open positions listed on our Employment page.
If [...]]]></description>
			<content:encoded><![CDATA[<p>It seems like this week&#8217;s popular anti-Ubuntu FUD is that Canonical are missing people who can fix particular classes of bugs, many people have said the same thing in comments on my previous blog post.</p>
<p>So I&#8217;d like to point out that <strong>Canonical are Hiring!</strong> and we have many open positions listed on our <a href="http://webapps.ubuntu.com/employment/">Employment page</a>.</p>
<p>If you&#8217;d like to work on open source software, for a fun company with some of the smartest people you&#8217;ll ever work with, or you know someone who would, don&#8217;t hesitate to check it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netsplit.com/2010/05/19/canonical-are-hiring/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>btrfs by default in Maverick?</title>
		<link>http://www.netsplit.com/2010/05/14/btrfs-by-default-in-maverick/</link>
		<comments>http://www.netsplit.com/2010/05/14/btrfs-by-default-in-maverick/#comments</comments>
		<pubDate>Fri, 14 May 2010 16:21:18 +0000</pubDate>
		<dc:creator>Scott James Remnant</dc:creator>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.netsplit.com/?p=250</guid>
		<description><![CDATA[UDS is over!  And in the customary wrap-up I stood up and told the audience what the Foundations team have been discussing all week.  One of the items is almost certainly going to get a little bit of publicity.
We are going to be doing the work to have btrfs as an installation option, [...]]]></description>
			<content:encoded><![CDATA[<p>UDS is over!  And in the customary wrap-up I stood up and told the audience what the Foundations team have been discussing all week.  One of the items is almost certainly going to get a little bit of publicity.</p>
<p>We are going to be doing the work to have btrfs as an installation option, and we have not ruled out making it the default.</p>
<p>I do stress the emphasis of that statement, a number of things would have to be true for us to take that decision:</p>
<ol>
<li>btrfs would need to not be marked &#8220;experimental&#8221; in the kernel config; we understand that this is planned for 2.6.35, which is the kernel version we are expecting to ship in Maverick.</li>
<li>btrfs is not currently supported by GRUB2 (our boot loader) or the installer; these pieces would need to be finished <em>before</em> Feature Freeze.</li>
<li>If that happens, we <em>may</em> make it the default for Alpha releases to gain testing; that testing must go smoothly.</li>
<li>The btrfs upstream must be happy with the idea.</li>
<li>We must be happy with the idea.</li>
</ol>
<p>It&#8217;s a tough gauntlet, and it would only made with the knowledge that production servers and desktops can be run on Lucid as a fully supported version of Ubuntu at the same time.  I&#8217;d give it a 1-in-5 chance.</p>
<ol></ol>
]]></content:encoded>
			<wfw:commentRss>http://www.netsplit.com/2010/05/14/btrfs-by-default-in-maverick/feed/</wfw:commentRss>
		<slash:comments>54</slash:comments>
		</item>
		<item>
		<title>On systemd</title>
		<link>http://www.netsplit.com/2010/04/30/on-systemd/</link>
		<comments>http://www.netsplit.com/2010/04/30/on-systemd/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 11:47:31 +0000</pubDate>
		<dc:creator>Scott James Remnant</dc:creator>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Upstart]]></category>

		<guid isPermaLink="false">http://www.netsplit.com/?p=246</guid>
		<description><![CDATA[I&#8217;m sure you&#8217;ve all by now read the announcement of systemd, and have probably come running to my blog to see what the reaction of Ubuntu and the Upstart author is!
As you know, improvements to the boot process has been something that Ubuntu have been working on for a few years now and this led [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m sure you&#8217;ve all by now read the announcement of <a href="http://0pointer.de/blog/projects/systemd.html">systemd</a>, and have probably come running to my blog to see what the reaction of Ubuntu and the <a href="http://upstart.ubuntu.com/">Upstart</a> author is!</p>
<p>As you know, improvements to the boot process has been something that Ubuntu have been working on for a few years now and this led to the development of Upstart.  We&#8217;re not the only ones working in this area, Intel have also been hard at work with different improvements of their own with the Moblin and MeeGo projects.</p>
<p>So it&#8217;s great to see some Fedora and OpenSuSE guys working on this too, and bringing some different ideas to the table!</p>
<p>I can&#8217;t say I disagree with some of Lennart&#8217;s observations about problems with Upstart, it&#8217;s certainly nowhere near perfect.  Now that the stable period leading up to the release of Ubuntu 10.04 LTS is over, I&#8217;m looking forwards to getting back into the code and trying to address them.</p>
<p>It&#8217;s far too early to tell which approach is going to work out better in the end; but that&#8217;s one of the great things about Linux.  The different distributions are able to develop in different directions, and we&#8217;re able to try out many different things.</p>
<p>On a personal note, I&#8217;m particularly pleased that Lennart has continued the punny naming scheme I began with <a href="http://www.thefreedictionary.com/upstart">Upstart</a>. <a href="http://www.urbandictionary.com/define.php?term=System%20D"> System D</a> is a French concept that embraces responding to challenges when they happen, thinking fast and on your feet and adapting and improvising to get the job done.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netsplit.com/2010/04/30/on-systemd/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Making a splash</title>
		<link>http://www.netsplit.com/2009/09/02/making-a-splash/</link>
		<comments>http://www.netsplit.com/2009/09/02/making-a-splash/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 11:51:19 +0000</pubDate>
		<dc:creator>Scott James Remnant</dc:creator>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[plymouth]]></category>
		<category><![CDATA[Upstart]]></category>
		<category><![CDATA[usplash]]></category>
		<category><![CDATA[xsplash]]></category>

		<guid isPermaLink="false">http://www.netsplit.com/?p=204</guid>
		<description><![CDATA[As you probably know by now, even if you&#8217;re not following the karmic development closely, Ubuntu has gained new splash screen software called xsplash.  This is the hard work of Cody Russell and Ken VanDine of the Ubuntu Desktop Experience team.
There&#8217;s been some press coverage of this already, and various comments from different people raising [...]]]></description>
			<content:encoded><![CDATA[<p>As you probably know by now, even if you&#8217;re not following the karmic development closely, Ubuntu has gained new splash screen software called <a href="https://launchpad.net/xsplash">xsplash</a>.  This is the hard work of Cody Russell and Ken VanDine of the Ubuntu Desktop Experience team.</p>
<p>There&#8217;s been some press coverage of this already, and various comments from different people raising some questions about why Ubuntu is going down this route.  Since this was largely my idea, I felt I should try and answer a few of the common ones.</p>
<h3>Isn&#8217;t this just rhgb?</h3>
<p>rhgb was the &#8220;RedHat Graphical Boot&#8221; system they used in RedHat and Fedora until the most recent Fedora releases.  It worked by starting an X Window System server and running the splash screen inside that.</p>
<p>This sounds very similar to xsplash, but with one key difference: the X server used by rhgb was shut down when boot finished, and a new X server started for the user to login with.</p>
<p>Instead, xsplash uses the same X server as the login window, and the same X server as your desktop.  In fact, it&#8217;s started by the GNOME Display Manager while it starts the greeter or auto-logins your desktop alongside.</p>
<h3>Why don&#8217;t you use Plymouth?</h3>
<p>Plymouth is RedHat&#8217;s replacement for rhgb, instead of using an X server it relies on Kernel Mode Setting to provide a framebuffer in the panel&#8217;s native resolution and colour depth and draws directly to that.  When the X server starts, the X server takes over the framebuffer without requiring a mode switch or a screen clear.</p>
<p>In many ways, Plymouth is simply a reimplementation of our original usplash.  Indeed, I found it quite ironic that some people have accused us of &#8220;NIH&#8221;ing xsplash instead of adopting Plymouth, when technically Plymouth is an &#8220;NIH&#8221;d usplash.</p>
<p>So really the question as to why we don&#8217;t use Plymouth is the same as to why we don&#8217;t use usplash.  We did actually consider replacing usplash with Plymouth since the implementation is rather cleaner, but Plymouth only supports Kernel Mode Setting drivers whereas usplash has a fall-back SVGA mode (it always had framebuffer support, thus KMS support, due to the Ubuntu PowerPC port).</p>
<h3>Why not continue using usplash?</h3>
<p>(or Plymouth, see above)</p>
<p>One of our main goals for Ubuntu is boot performance.  For Ubuntu 10.04 (that&#8217;s karmic+1) we&#8217;re targetting a 10s boot from the boot loader to a fully logged in desktop with idle disks.  To boot this fast requires some prioritisation.</p>
<p>We need the X Window System server for just about everything.  Until we&#8217;ve started the X server, we don&#8217;t have a display so can&#8217;t even start basic things like the underlying services and agents that run for a user&#8217;s login session.</p>
<p>Or, put another way, anything we do during boot that isn&#8217;t directly required to start the X server is delaying the boot.</p>
<p>The boot sequence must be setup in such a way that starting the X server is prioritised; once the X server is up, we can begin starting the user&#8217;s session (or the login screen session).  We can also start all those other system services that weren&#8217;t dependencies of the X server.</p>
<p>This pretty much turns the current sequence on its head, where the X server is one of the last things started rather than one of the first.</p>
<p>If we started a splash screen such as usplash before the X server was up, we&#8217;d still have to wait for the Kernel Mode Setting driver to be loaded (or hardware to be sufficiently probed to know that we don&#8217;t have a Kernel Mode Setting driver for it).  This is one of the primary dependencies of the X server too (the other is a mounted, writable filesystem), so in many cases we can start the X server at the same time!</p>
<p>Now, you could suggest that we do start the X server but also start the splash screen as well; and that the splash screen animates while the X server is running and the X server doesn&#8217;t paint to the screen until the desktop is logged in or the login screen is ready.  Unfortunately this simply doesn&#8217;t appear to be possible, the X server &#8220;takes over&#8221; the framebuffer in such a way that the splash screen simply freezes at that point (we can prevent it clearing the screen).  With an early X server start, it would spend more time frozen then it would animating.</p>
<p>This also wouldn&#8217;t work for the non-KMS case.</p>
<p>You could also argue that we could load the KMS drivers earlier, in the initramfs for example.  While possible, this adds a significant time to the boot time for the extra loading and probing required.  If we load the KMS driver in the initramfs, it takes about 8-10s to load the X server; if we load the KMS driver in the full system, it only takes about 6-8s to load the X server.  Easy win.</p>
<p>But what if we have to check the filesystem, or enter a decryption passphrase to mount it?  That&#8217;s why we still have usplash.  In those cases we will start usplash to display the progress or request the key.  The usplash theme will be themed such that when it finishes, and X starts up, it looks ok frozen for the short time until xsplash replaces it with an identical theme.</p>
<h3>But karmic doesn&#8217;t boot any faster</h3>
<p>Patience, my friend.  The 10s target is for Ubuntu 10.04 (karmic+1), not karmic (9.10).</p>
<p>That being said there are a number of updates planned for karmic that will boost the performance quite a bit, especially in terms of starting the X Window System server earlier.  These have always been targetted to land between Feature Freeze and Beta, simply because it&#8217;s delicate work that needed a lot of testing first and that everyone else&#8217;s uploads prior to Feature Freeze kept throwing it off.</p>
<p>Look for a call for testing RSN.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netsplit.com/2009/09/02/making-a-splash/feed/</wfw:commentRss>
		<slash:comments>82</slash:comments>
		</item>
		<item>
		<title>The fallacy of high-level languages</title>
		<link>http://www.netsplit.com/2009/03/26/the-fallacy-of-high-level-languages/</link>
		<comments>http://www.netsplit.com/2009/03/26/the-fallacy-of-high-level-languages/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 16:31:50 +0000</pubDate>
		<dc:creator>Scott James Remnant</dc:creator>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.netsplit.com/?p=200</guid>
		<description><![CDATA[There&#8217;s been a meme going around the open source community for a while now.  That programming in C is somehow dirty, distasteful and worst-of-all inefficient compared to programming in a high-level language such as C# or Python.
Its detractors will tell you how it takes much longer it takes to program anything in C.  They&#8217;ll point [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s been a meme going around the open source community for a while now.  That programming in C is somehow dirty, distasteful and worst-of-all <em>inefficient</em> compared to programming in a high-level language such as C# or Python.</p>
<p>Its detractors will tell you how it takes much longer it takes to program anything in C.  They&#8217;ll point at how much C code it takes to do something as simple as create a GObject sub-class compared to the equivalent in Python or C#.  They&#8217;ll also probably complain that everything in C has to be compiled first, which takes even more time up.</p>
<p>No argument would be complete without them pointing out that C has no standard types for strings, let alone linked lists, binary trees, associative arrays, etc. and that you have to spend all that time implementing your own.  They&#8217;ll probably make a point about how C&#8217;s static type system means that even if you have a array type, you need to know in advance what types you&#8217;re going to put into it and can&#8217;t just mix and match.</p>
<p>Don&#8217;t feel tempted at this point to counter with a discussion about how great and flexible pointers are.  You&#8217;ll receive a lashing about how they&#8217;re even more evil than people who talk in the theatre.  The rant about the C problems of uninitialised memory, out of bounds pointer errors and segmentation faults is a timeless classic.  Especially when they get to the bit about how much time was lost debugging them.</p>
<p>And do you know what?</p>
<p>I simply do not agree with them.</p>
<p>I cannot think of a single project where the majority of time was wasted writing GObject header files compared to the single line of Python I needed.  I can think of lots where I&#8217;ve sat for hours trying to figure out <em>which</em> class I needed to derive from, or reworking the code after I realised I derived from the wrong class to begin with.  The high-level language doesn&#8217;t make this any easier.</p>
<p>As to the number of projects where I&#8217;ve needed to write a linked list or hash table implementation because C lacked a convenient dynamic array or associative array type like Python?  If it takes you any time to write that kind of code, you&#8217;re doing it wrong.  I&#8217;ve spent far more time realising that the structure is a performance bottleneck, and planning on the whiteboard a faster alternative.  Neither language helps with this whiteboard time.</p>
<p>And all those pointer issues?  This comes down to the tools that you&#8217;re using.  If you&#8217;re writing in a language and not using its development environment properly, then it&#8217;s little surprise that you&#8217;re not being as efficient in it.  gdb, valgrind, gprof and gcov are your friends.  Use them well.  I&#8217;ve spent just as much time dealing with other language-specific issues to make me believe that pointers aren&#8217;t any more evil as (for example) monkey patching.</p>
<p>The vast majority of my time on any new project is first of all spent thinking, and on a more mature project its figuring out what I did wrong and how I need to rework it.</p>
<p>Yes, the next biggest use of my time is working out what the best way is to express that.  If I&#8217;m writing in C, that means I&#8217;m deciding whether it needs a linked list, or a hash table, or some other fancy structure.  But if I&#8217;m writing in Python, believe me I spend just as much time normalising my class structure and coming up with all sorts of insane Pythonic ways of doing things.</p>
<p>If you&#8217;ve ever written in Perl and not lost a day or two to optimising your regular expressions, or eliminating code to arrive at the shortest possible expression, you&#8217;ve never written in Perl.</p>
<p>Refactoring takes you just as long in Python as it does in C.  Just because when you do it to C code you end up setting segfaults doesn&#8217;t mean that when you do it to Python code, suddenly your class structures don&#8217;t match anymore.</p>
<p>Proponents of test-driven-development, AGILE, LEAN and ANEMIC programming methodologies will probably argue that it&#8217;s easier to practice their religion with a high-level language.  I&#8217;m not buying that either, I&#8217;ve managed to write several large software projects in C that have a comprehensive test suite &#8211; including testing for allocation failures.</p>
<p>Ah, Rapid Application Development I hear you say?  Well, the only people I&#8217;ve ever heard say how great RAD is are people who&#8217;ve never had to support the software that was written rapidly, or debug issues with it years later.  RAD is great when v2 is going to be a complete rewrite, and v3 a complete rewrite again.  Very few websites have upgrades without announcing a completely new codebase.</p>
<p>It&#8217;s certainly true that it&#8217;s faster to mash up some code in a high-level language.  I use shell scripts and bits of Perl for this kind of thing all the time, and I frequently even do basic mock-ups or essays in Python.  But ultimately it all tends to be throw-away code, that I don&#8217;t really ever intend to take seriously or attempt to support later on.</p>
<p>For larger projects, I just don&#8217;t see any difference in the time it takes to write.</p>
<p>I&#8217;d like to cite an example.  The GIT and Bzr revision control systems are about the same age, one of them is written in C and one of them is written in Python.  It hasn&#8217;t taken them any less time to write the one in Python than it&#8217;s taken the others to write the other in C.  The one in Python doesn&#8217;t have extraordinary features that the one in C lacks.</p>
<p>C# fans would point out how much faster it is to UI code.  Really?  Then why isn&#8217;t Banshee that much dazzingly better than Rhythmbox?  Sure they&#8217;re <em>different</em>, but there&#8217;s nothing there that suggests one language is better than the other.</p>
<p>And do you know what?  I <em>trust</em> code written in C far more than I do any higher level language.  No, that&#8217;s probably not fair.  I trust <em>C programmers</em> far more than I do programmers of other languages.  If you tell me I have the option of choosing a program or library written in C over one written in Python or C#, I&#8217;ll take the C one every time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netsplit.com/2009/03/26/the-fallacy-of-high-level-languages/feed/</wfw:commentRss>
		<slash:comments>71</slash:comments>
		</item>
		<item>
		<title>Ubuntu Desktop Developer</title>
		<link>http://www.netsplit.com/2007/09/10/ubuntu-desktop-developer/</link>
		<comments>http://www.netsplit.com/2007/09/10/ubuntu-desktop-developer/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 16:15:08 +0000</pubDate>
		<dc:creator>Scott James Remnant</dc:creator>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Continuing my mission to put together a kick-ass team to develop the Ubuntu Desktop, the following position is now up on the website:
Posting Date &#38; ID: September 2007 UDD
Job Location: Your home with broadband. Some international travel will be required.
Job Summary: To adapt and develop the GNOME desktop to improve the Ubuntu user experience.
Key responsibilities [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing my mission to put together a kick-ass team to develop the Ubuntu Desktop, the following position is now up on the website:</p>
<p><strong>Posting Date &amp; ID:</strong> September 2007 UDD<br />
<strong>Job Location:</strong> Your home with broadband. Some international travel will be required.<br />
<strong>Job Summary:</strong> To adapt and develop the GNOME desktop to improve the Ubuntu user experience.</p>
<h3>Key responsibilities and accountabilities:</h3>
<ul>
<li>Use open source development methods to create, select and adapt software to produce innovative user experiences and address the common problems of desktop computing</li>
<li>Extend the desktop platform as necessary to support development</li>
<li>Work with designers, artists and other developers to develop ideas and complete the project</li>
<li>Involve the community of development projects, teams and Ubuntu supporters to incorporate a range of perspectives and ideas</li>
<li>Take ownership of many aspects of the desktop user experience (&#8220;look and feel&#8221;) in Ubuntu</li>
<li>Follow projects and trends in user interface design in the open source world, integrate the best technologies into Ubuntu and ensure their quality</li>
<li>Analyse, triage and respond to bug reports</li>
</ul>
<h3>Requirements skills and experience:</h3>
<ul>
<li>A keen and insightful eye for user interaction</li>
<li>A passion for intuitive, usable and visually appealing interfaces</li>
<li>A strong desire to produce distinctive ideas that stand Ubuntu out from the crowd</li>
<li>Experience with the GNOME development platform and desktop environment and technologies such as GTK+</li>
<li>Some experience with mainstream graphics technologies such as OpenGL and Cairo in the C programming language</li>
<li>Ability to be productive in a globally distributed team through self-discipline and self-motivation, delivering according to a schedule</li>
<li>Familiarity with open source development tools and methodology, especially those in common use for Ubuntu and Debian package maintenance</li>
</ul>
<h3>How to apply</h3>
<p>Please send a cover letter and CV with references to hr@canonical.com. Please indicate in your submission the role for which you are applying. We prefer to receive applications and CVs/Resumes in either PDF or plain text format.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netsplit.com/2007/09/10/ubuntu-desktop-developer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Edgy Dance</title>
		<link>http://www.netsplit.com/2006/11/02/the-edgy-dance/</link>
		<comments>http://www.netsplit.com/2006/11/02/the-edgy-dance/#comments</comments>
		<pubDate>Thu, 02 Nov 2006 12:36:50 +0000</pubDate>
		<dc:creator>Scott James Remnant</dc:creator>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Last week, a few of us gathered at Canonical&#8217;s London offices to oversee the final release preparations.  This basically consists of testing the various candidate CD images and performing both install and upgrade tests on them.
As you can imagine, three people performing repeated tests of edgy means that the fabled startup sound got many, [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, a few of us gathered at Canonical&#8217;s London offices to oversee the final release preparations.  This basically consists of testing the various candidate CD images and performing both install and upgrade tests on them.</p>
<p>As you can imagine, three people performing repeated tests of edgy means that the fabled <a href="/blog/files/startup.wav">startup sound</a> got many, many playings.</p>
<p>A tradition started.</p>
<p>Now, whenever you hear that sound, remember to get up and dance, wave your arms in the air or just tap your fingers on the table.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netsplit.com/2006/11/02/the-edgy-dance/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Parallel Peer Programming</title>
		<link>http://www.netsplit.com/2005/10/29/parallel-peer-programming/</link>
		<comments>http://www.netsplit.com/2005/10/29/parallel-peer-programming/#comments</comments>
		<pubDate>Sat, 29 Oct 2005 15:35:52 +0000</pubDate>
		<dc:creator>Scott James Remnant</dc:creator>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Here at Canonical Towers we have several staff who worship at the altar of Extreme Programming, and as such many of the methodologies and rituals prescribed by that religion find their way into our day-to-day working practices.  A few of these came together in an interesting way a few weeks ago, and it was [...]]]></description>
			<content:encoded><![CDATA[<p>Here at Canonical Towers we have several staff who worship at the altar of Extreme Programming, and as such many of the methodologies and rituals prescribed by that religion find their way into our day-to-day working practices.  A few of these came together in an interesting way a few weeks ago, and it was suggested by a cow-orker that I blog about it so he could give the URL to people.</p>
<p>The first ritual is that of the <a href="http://c2.com/cgi/wiki?PythonSprint">sprint</a>, I don&#8217;t think this is orthodox XP but rather something inspired from it that we picked up from the Python community.  With all of the Canonical developers scattered across the globe mostly working from their own homes, it&#8217;s become a useful tool; particularly for the Launchpad team.</p>
<p>The basic idea for those that haven&#8217;t heard of it is simple, and perhaps obvious; you get a selection of the team together in one place, sit them around the same table with particular goals to complete.  In effect it&#8217;s highly compressed facetime and high bandwidth interaction to nail those tasks that need it, before you head off again and work at a more sedate pace.</p>
<p>The second is directly from XP doctrine and is that peculiar observance known as <a href="http://c2.com/cgi/wiki?PairProgramming">pair programming</a>, something that is often coupled with sprints.  For anybody who hasn&#8217;t encountered this before, it&#8217;s something I&#8217;ve always found rather odd.  You get two programmers together, both itching to code, and you take one of them&#8217;s laptop away; and you don&#8217;t just force them to fight over the keyboard either, the laptop-less soul isn&#8217;t allowed to touch it.</p>
<p>The theory here is that it frees the deprived individual of the hassle of coding and allows them to direct the programmer in ways that may not be immediately obbious, or alternately think about the next bit of work that needs doing.  Another interesting side-effect is it can be an interesting way to learn code you&#8217;ve not worked with before, if you&#8217;re the one doing the coding and you&#8217;re being guided what to do by a sage who already knows it.</p>
<p>I have a funny story here, so I&#8217;m going to digress from the main stream for a moment to tell it.  A few months ago I was working in the London office, Mark had been up all night coding and had then given me responsibility to get his changes landed onto the Launchpad mainline.  I&#8217;m not that hot on quite a bit of Launchpad, and fade to utterly clueless the nearer the code gets to the web application itself; and when trying to merge the two there were conflicts which I needed Mark&#8217;s help to resolve.</p>
<p>Now as anybody who&#8217;s met Mark knows, he&#8217;s a pretty good example of a Type-A personality, yet he suggested that we do a spot of pair programming to get the code in and I&#8217;d be the one with the laptop as it&#8217;d help me get to grips with the affected parts.  This hilighted something I&#8217;ve always seen as a problem with pair programming, dealing with it when the a person with the keyboard has a totally different way of working to you.  In particular, I&#8217;m an emacs user, whereas Mark is a die-hard vim user; but also right down to the working directory I would work from, how I test results, etc.</p>
<p>When you&#8217;re the one without the laptop, this can be quite infuriating, as you know exactly how to solve a problem and the idiot with the keyboard is dithering about doing things you don&#8217;t understand just to get there.  If you&#8217;re a Type-A personality, you generally snatch the laptop away at this point and do it yourself; or at least you would, if you could drive the strange editor the other person uses.</p>
<p>I swear Mark was sulking as he gave the laptop back and let me do it.</p>
<p>Anyway, there is some relevance to that and we&#8217;ll come to it in a moment.</p>
<p>The third and final methodology is the concept of <a href="http://c2.com/cgi/wiki?UnitTest">unit tests</a> and more specifically <a href="http://c2.com/cgi/wiki?TestDrivenDevelopment">test driven development</a>.  For anyone who hasn&#8217;t come across this before, I highly recommend it; I was suspicious too when <a href="http://www.robertcollins.net/">Robert Collins</a> took it upon himself to teach me the true way, but now I&#8217;m sold.</p>
<p>Simply the idea is that if you have any code that doesn&#8217;t have another piece of code in a test suite that checks that it&#8217;s working correctly, that code is broken.  More particularly unit testing involves checking just one feature or requirement at a time, and stacking them together to test all of the code paths.  I&#8217;ve actually found that this improves the APIs I design, as I write the code in small blocks and functions to make them easier to test.</p>
<p>Test driven development takes it even further, you write the unit tests first, before you write the code they&#8217;re supposed to test; usually one or two at a time.  Obviously these tests will fail at first, it&#8217;s then your job to write as little code as possible to make them pass.  If your code isn&#8217;t right, you add a unit test that will fail, and modify the code to make it pass.</p>
<p>This really comes into its own when you&#8217;re fixing bugs later, once you&#8217;ve identified the bug you write a test case or two that cause the problem; these will of course fail.  You can then modify the code to make them pass, and at the same time be sure you&#8217;ve not broken other functionality because of the existing test suite.  I&#8217;ve also found it really useful for particularly complicated or tricky pieces of code, especially those intricate algorithms that do particularly heavy lifting.</p>
<p>So onto the event itself, this was a sprint in our London office to indoctrinate <a href="http://niemeyer.net/">Gustavo Niemeyer</a> with the various projects he&#8217;d be working on.  The goal for this sprint was decided to start the conversion of <a href="http://wiki.launchpad.canonical.com/HCT">HCT</a> to <a href="http://www.bazaar-ng.org/">Bazaar-NG</a>, and to do this Gustavo and I would pair program.</p>
<p>Now my last experience of pair programming had been that story with Mark (see, it had some relevance) and I knew I&#8217;d be just as bad if I wasn&#8217;t allowed to have the keyboard.  I was also acutely aware that if Gustavo was just sitting by and watching, he wouldn&#8217;t get much benefit from it either, so he needed to be actively involved in the coding so he could learn the things he&#8217;d be working on.</p>
<p>I came to what I thought was a pretty neat, and obvious, solution to these problems.  We set up my laptop with the code we&#8217;d be working on, and on my display were two side-by-side terminals both running screen sessions.  Gustavo then set up two same-sized terminals on his, ssh&#8217;d into my laptop from both of them and joined the screen sessions.  In the left-hand one he ran vi, and in the right-hand one I ran emacs.</p>
<p>Thus we both had keyboards, and both had editors, yet could see each other working and even steal the keyboard without danger of violence.  We didn&#8217;t just sit side-by-side and code on different things though, that&#8217;s not pair programming and is just ordinary programming with a bit of a voyeuristic twist.</p>
<p>What we did was: in my terminal I started writing the test cases for the code we needed, it was Gustavo&#8217;s job to write the code that would make them pass.  We actually added a third terminal in which we could run the test cases themselves; so I could run them when I&#8217;d added something that would fail, and Gustavo could run them when he thought he&#8217;d made them pass again.</p>
<p>This turned out to be a rather fun way to work, and at one point I was almost able to try and convince myself that the code was writing itself to pass the test cases I was writing.  It also got me thinking that it&#8217;d be really neat to use genetic algorithms to breed code to pass test cases.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netsplit.com/2005/10/29/parallel-peer-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
