<?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>rhelmer's blog</title>
	<atom:link href="http://roberthelmer.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://roberthelmer.com/blog</link>
	<description>"Quote me as saying I was misquoted." - Groucho Marx</description>
	<lastBuildDate>Tue, 29 Jun 2010 18:00:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>gzip-encoding on tinderbox-stage needs testing</title>
		<link>http://roberthelmer.com/blog/?p=124</link>
		<comments>http://roberthelmer.com/blog/?p=124#comments</comments>
		<pubDate>Tue, 29 Jun 2010 18:00:24 +0000</pubDate>
		<dc:creator>rhelmer</dc:creator>
				<category><![CDATA[mozilla]]></category>
		<category><![CDATA[tinderbox]]></category>

		<guid isPermaLink="false">http://roberthelmer.com/blog/?p=124</guid>
		<description><![CDATA[Bug 574524 should make loading pages from Tinderbox much faster, especially the brief and full log reports. If you use Tinderbox and are interested in faster load times, please help test tinderbox-stage and comment in the bug if you think anything is broken due to this change.]]></description>
			<content:encoded><![CDATA[<p><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=574524">Bug 574524</a> should make loading pages from Tinderbox much faster, especially the brief and full log reports. If you use Tinderbox and are interested in faster load times, please help test <a href="http://tinderbox-stage.mozilla.org/Firefox/">tinderbox-stage</a> and comment in the bug if you think anything is broken due to this change.</p>
]]></content:encoded>
			<wfw:commentRss>http://roberthelmer.com/blog/?feed=rss2&amp;p=124</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>testing bug 529456</title>
		<link>http://roberthelmer.com/blog/?p=119</link>
		<comments>http://roberthelmer.com/blog/?p=119#comments</comments>
		<pubDate>Wed, 25 Nov 2009 04:45:19 +0000</pubDate>
		<dc:creator>rhelmer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://roberthelmer.com/blog/?p=119</guid>
		<description><![CDATA[Just making sure that the change in bug 52946 worked, if so this post should not show up on Planet Mozilla&#8230;]]></description>
			<content:encoded><![CDATA[<p>Just making sure that the change in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=529456">bug 52946</a> worked, if so this post should not show up on Planet Mozilla&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://roberthelmer.com/blog/?feed=rss2&amp;p=119</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>canvas love</title>
		<link>http://roberthelmer.com/blog/?p=108</link>
		<comments>http://roberthelmer.com/blog/?p=108#comments</comments>
		<pubDate>Thu, 19 Feb 2009 06:39:51 +0000</pubDate>
		<dc:creator>rhelmer</dc:creator>
				<category><![CDATA[mozilla]]></category>
		<category><![CDATA[open web]]></category>

		<guid isPermaLink="false">http://roberthelmer.com/blog/?p=108</guid>
		<description><![CDATA[I am reading about Bespin all over the place, with a lot of focus on SVG versus canvas, canvas not working in Internet Explorer, etc. I don&#8217;t know Bespin&#8217;s plans in this area, but lots of projects which use canvas (such as flot) also test with and provide excanvas, which uses IE&#8217;s VML support to [...]]]></description>
			<content:encoded><![CDATA[<p>I am reading about <a href="https://bespin.mozilla.com/">Bespin</a> all over the place, with a lot of focus on SVG versus canvas, canvas not working in Internet Explorer, etc.</p>
<p>I don&#8217;t know Bespin&#8217;s plans in this area, but lots of projects which use canvas (such as <a href="http://code.google.com/p/flot/">flot</a>) also test with and provide <a href="http://excanvas.sourceforge.net/">excanvas</a>, which uses IE&#8217;s <a href="http://en.wikipedia.org/wiki/Vector_Markup_Language">VML</a> support to provide the basic canvas API. I have read that excanvas does not work in IE8&#8242;s standards mode, however it does work in quirks mode.</p>
<p>There seems to be lots of little explosions of creativity around the combination of faster Javascript interpreters and canvas, like these <a href="http://gyu.que.jp/jscloth/touch.html">&#8220;3D in 2D&#8221; demos</a>, <a href="http://box2d-js.sourceforge.net/">Box2D physics</a> (this works in IE8 thanks to excanvas).</p>
<p>I&#8217;ve been working on a project which does graphs and other data visualization in the browser. I ended up using jquery and flot although <a href="http://raphaeljs.com/">raphael</a> (which uses SVG or VML, so supports IE) was in the running as well. Working with raphael is neat because everything you create is a DOM object so it&#8217;s a lot like working with HTML, but in the end flot just has many more out-of-the-box features like selection support, timescales, and so on. Not having IE support is not an option, and I&#8217;d rather not depend on Flash or other plugin if at all possible; I am quite pleased that there are a ton of reasonable ways to acheive this given those constraints.</p>
<p>I know this stuff is obvious to most of us around here, but I&#8217;m surprised that excanvas doesn&#8217;t come up more in these discussions. It is obviously not as ideal as having honest-to-goodness canvas or SVG support in all major browsers, but it&#8217;s a very creative way to drag IE along, putting a Javascript wrapper around their similar-but-different native feature.</p>
]]></content:encoded>
			<wfw:commentRss>http://roberthelmer.com/blog/?feed=rss2&amp;p=108</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tinderbox</title>
		<link>http://roberthelmer.com/blog/?p=87</link>
		<comments>http://roberthelmer.com/blog/?p=87#comments</comments>
		<pubDate>Sun, 15 Feb 2009 20:50:03 +0000</pubDate>
		<dc:creator>robert</dc:creator>
				<category><![CDATA[mozilla]]></category>
		<category><![CDATA[tinderbox]]></category>

		<guid isPermaLink="false">http://roberthelmer.com/blog/?p=87</guid>
		<description><![CDATA[I have been meaning to respond to a bit of Aki&#8217;s post which linked to me a while back. I totally agree on quite a bit, although I&#8217;d argue that unless someone really steps up, takes a leadership role, and sets a clear future direction, then sticking with Tinderbox indefinitely is going to continue to [...]]]></description>
			<content:encoded><![CDATA[<p>I have been meaning to respond to a bit of <a href="http://drkscrtlv.livejournal.com/302915.html#tinderbox">Aki&#8217;s post</a> which <a href="http://roberthelmer.com/blog/?cat=9">linked to me</a> a while back.</p>
<p>I totally agree on quite a bit, although I&#8217;d argue that unless someone really steps up, takes a leadership role, and sets a clear future direction, then sticking with Tinderbox indefinitely is going to continue to give you diminishing returns. Tinderbox 1 has been in maintenance mode for a very long time, although cls, bear and reed do a great job of keeping it secure and limping along. Tinderbox 2 was maintained by bear for a while when he was at OSAF but he suggested Buildbot as a better alternative, and Tinderbox 3 looks like a great proof of concept but has been inactive for a very long time.</p>
<p>I feel that it&#8217;s better to contribute to an already active community that has a lot of momentum behind it, instead of trying to build support behind home-grown products like Tinderbox and Bonsai, given the amount of work it is to build and maintain an active community and the current state of these projects. There were no active competing projects when these tools were released, and they really set the bar at a time when &#8220;continuous integration&#8221; had yet to be coined. Overall they&#8217;ve been hugely successful and delivered a lot of value to Mozilla and others, but without a driving force behind new development, they are not keeping up with demand. I could give you a bunch of little examples, but I think that the fact that the &#8220;blame&#8221; column (which is a critical feature) has been empty since the switch to hg says it all.</p>
<blockquote><p>rhelmer covered <a href="../?cat=9">the current tinderbox/buildbot split</a>, and is among the voices I&#8217;ve heard/read calling for a move away from the waterfall view, which I don&#8217;t completely understand. I do understand that the waterfall is far from ideal as a solitary view. But it does represent the activity of builds and build machines over a brief amount of time quite well. Even better when you have a guilty column <img src='http://roberthelmer.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>So, why not have both? Or multiple? Not to clutter, but to present different ways of accessing the data. Each with their own strengths.</p></blockquote>
<p>I don&#8217;t think that the waterfall is bad, it is actually quite brilliant for certain use cases; however the waterfall is at one end of the spectrum, with something like Dolske&#8217;s <a href="http://isthetreegreen.com/">isthetreegreen.com</a> on the other side, and things like <a href="http://tests.themasta.com/tinderboxpushlog/">tinderboxpushlog</a> somewhere in the middle. So in essence I agree, but I think the waterfall is actually not that useful in most cases. It&#8217;s a pretty low-level, diagnostic type of interface.</p>
<p>Why do people visit <a href="http://tinderbox.mozilla.org">Tinderbox</a>? Here is what I think:</p>
<ol>
<li>Should I pull the tree (&#8220;Will It Build?&#8221;)</li>
<li>Can I check in (&#8220;Is the tree open?&#8221;)</li>
<li>Who broke the build (and how)?</li>
<li>Has there been a regression in performance or other metrics?</li>
</ol>
<p>Out of these, only the latter two are served by the waterfall, and that&#8217;s only a starting point for this kind of investigation (which the waterfall does an OK job at).</p>
<p>I think that the first two are a much larger subset of users, and a huge and complex display is actively hurting them. Regression hunters need a much larger arsenal of tools, and the waterfall may not be the best place for them to start, and certainly isn&#8217;t the last place to visit (they&#8217;ll need build logs, graphs, etc.).</p>
<p>There&#8217;s a ton of innovation going on around build and release right now, for example I really like how <a href="https://hudson.dev.java.net/">Hudson</a> approaches the problems here, and also has direct support for release processes. Like Buildbot, it doesn&#8217;t do everything Tinderbox does, and it has it&#8217;s own tradeoffs. It&#8217;s not a drop-in replacement for Tinderbox.</p>
<p>A drop-in replacement for Tinderbox is an interesting notion, but I think it&#8217;s worth taking a step back and figuring out if you&#8217;re really getting the value you could be. I think <a href="http://sethgodin.typepad.com/seths_blog/2009/02/solving-a-different-problem.html">this</a> says it better than I can:</p>
<blockquote>
<div class="entry-body">
<p>The telephone destroyed the telegraph.</p>
<p>Here&#8217;s why people liked the telegraph: It was universal, inexpensive, asynchronous and it left a paper trail.</p>
<p>The telephone offered not one of these four attributes. It was far from universal, and if someone didn&#8217;t have a phone, you couldn&#8217;t call them. It was expensive, even before someone called you. It was synchronous&#8211;if you weren&#8217;t home, no call got made. And of course, there was no paper trail.</p>
<p>If the telephone guys had set out to make something that did what the telegraph does, but better, they probably would have failed. Instead, they solved a different problem, in such an overwhelmingly useful way that they eliminated the feature set of the competition.</p>
<p>The list of examples is long (YouTube vs. television, web vs. newspapers, Nike vs. sneakers). Your turn.</p></div>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://roberthelmer.com/blog/?feed=rss2&amp;p=87</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>I accidentally the whole Meme(me)</title>
		<link>http://roberthelmer.com/blog/?p=83</link>
		<comments>http://roberthelmer.com/blog/?p=83#comments</comments>
		<pubDate>Fri, 19 Sep 2008 23:53:00 +0000</pubDate>
		<dc:creator>rhelmer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://roberthelmer.com/blog/?p=83</guid>
		<description><![CDATA[From blizzard. 1. Take a picture of yourself right now. 2. Don’t change your clothes, don’t fix your hair…just take a picture. 3. Post that picture with NO editing. 4. Post these instructions with your picture.]]></description>
			<content:encoded><![CDATA[<p><a href="http://roberthelmer.com/blog/wp-content/uploads/2008/09/photo-7.jpg"><img class="alignnone size-medium wp-image-84" title="photo-7" src="http://roberthelmer.com/blog/wp-content/uploads/2008/09/photo-7.jpg" alt="" width="300" height="225" /></a></p>
<p>From <a href="http://www.0xdeadbeef.com/weblog/?p=754">blizzard</a>.</p>
<p>1. Take a picture of yourself right now.<br />
2. Don’t change your clothes, don’t fix your hair…just take a picture.<br />
3. Post that picture with NO editing.<br />
4. Post these instructions with your picture.</p>
]]></content:encoded>
			<wfw:commentRss>http://roberthelmer.com/blog/?feed=rss2&amp;p=83</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>making updates easier</title>
		<link>http://roberthelmer.com/blog/?p=39</link>
		<comments>http://roberthelmer.com/blog/?p=39#comments</comments>
		<pubDate>Wed, 30 Jul 2008 20:37:51 +0000</pubDate>
		<dc:creator>rhelmer</dc:creator>
				<category><![CDATA[automation]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[releng]]></category>

		<guid isPermaLink="false">http://roberthelmer.com/blog/?p=39</guid>
		<description><![CDATA[For a few months now, I&#8217;ve been working in my spare time on a way to make configuring and serving updates to Mozilla-based applications easier. Mozilla updates are MAR files, which are linked to by the Automatic Update Service (aka AUS2). Several tools are involved in the making of updates for production releases, chiefly Patcher, [...]]]></description>
			<content:encoded><![CDATA[<p>For a few months now, I&#8217;ve been working in my spare time on a way to make configuring and serving updates to Mozilla-based applications easier.</p>
<p>Mozilla updates are <a href="http://wiki.mozilla.org/Software_Update:MAR">MAR</a> files, which are linked to by the <a href="http://wiki.mozilla.org/AUS">Automatic Update Service</a> (aka AUS2). Several tools are involved in the making of updates for production releases, chiefly <a href="http://mxr.mozilla.org/mozilla/source/tools/patcher/">Patcher</a>, driven by the <a href="http://wiki.mozilla.org/Build:Release_Automation">release automation framework</a> for releases. Nightly updates use a simpler script which automatically determines where builds should be updated to; Patcher needs every update path to be explicitly specified in it&#8217;s config file.</p>
<p>Both Patcher and the nightly script call the <a href="http://mxr.mozilla.org/mozilla/source/tools/update-packaging/">update-packaging tools</a> to do the work of generating MAR files, which in turn use the &#8220;mar&#8221; utility (supports tar-like arguments to manipulate MAR files, e.g. &#8220;mar -t file.mar&#8221;, &#8220;mar -x file.mar&#8221;, etc.) and the &#8220;mbsdiff&#8221; utility, which generates binary patches using a <a href="http://mxr.mozilla.org/mozilla/source/other-licenses/bsdiff/">modified version</a> of <a href="http://www.daemonology.net/bsdiff/">bsdiff</a>.</p>
<p>The update-packaging tools are in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=444050">need of a makeover</a> too, but that is a story for another day.</p>
<p>Getting back to how updates are served &#8211; Patcher&#8217;s other job is to generate thousands of text files, which are used to configure AUS. Every possible update path, like <a href="https://aus2.mozilla.org/update/3/Firefox/3.0b3/2008020514/WINNT_x86-msvc/ar/beta/update.xml">this one for 3.0b3</a>, is actually generated dynamically from two text files (partial.txt and complete.txt) which reside in a directory layout that is similar, but in a slightly different order, than the information in that URL (&#8230;/product/version/buildid/buildTarget/locale/channel/update.xml). These complete.txt and partial.txt files have gone through two revisions in their file format, in the first variables for the generated XML like updateType, URL to the MAR file, etc. are on a specific line number. In the second (&#8220;version=1&#8243;), key/value pairs are used.</p>
<p>AUS2 configuration files only reflect the current state of the system; for releases the history is in <a href="http://mxr.mozilla.org/mozilla/source/tools/patcher-configs/moz19-branch-patcher2.cfg">Patcher config files</a> (Config::General). The release automation scripts automatically update and check this file into CVS, so it&#8217;s not too painful to deal with in most situations. There are some <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=384065">outstanding bugs</a> but overall it does what it is supposed to do.</p>
<p>However, it took me a very long time to get a handle on the above, and I think the separation between Patcher and the AUS server is not very useful. In fact, the method of explicit updates for all is downright unhelpful; every single release (e.g. 2.0.0.15), the following happens:</p>
<ol>
<li>partial updates are generated from 2.0.0.14-&gt;2.0.0.15</li>
<li>every previous release (2.0.0.[1,2,3,4,...]) is pointed to the same 2.0.0.15 update</li>
</ol>
<p>That means generating and publishing two text files for each (release * platform * locale) combination, which all contain exactly the same data. Also I think that taking a hint from the way the nightly system works would be useful here; 2.x should automatically point to the latest *unless* explicitly overridden, it should not require explicit configuration to do the norm. Finally, the nightly and production system should not be so different; every nightly update is a lost opportunity to test pre-releases of the production system, and having forked systems is bad for bugfixing and feature porting (note that there are no nightly updates for locales other than en-US, for example).</p>
<p>So, I&#8217;ve been thinking for a long time about how to make tools that are easier to use, understand and extend. One idea is to have the AUS server configuration be a database, not a giant tree of text files, and have the data in one place (not stored in a config file which is expanded to a giant tree of text files by a separate app). Another is to provide a simple API, and a few command line tools which use this API to modify update data and export it.</p>
<p>The conceptual model right now is that each release contains one update, which contains two patches (one partial, one complete). Both the database schema and the API reinforce this model.</p>
<p>Here&#8217;s what I have working so far. In case it&#8217;s not obvious, this is most definitely an early &#8220;throw the first one away&#8221; prototype:</p>
<ul>
<li>an <a href="http://roberthelmer.com/svn/scripts/trunk/aus/aus.py">API</a> for dealing with updates, in Python (Release, Update, Patch classes)</li>
<li>a <a href="http://roberthelmer.com/svn/scripts/trunk/aus/database.py">simple database layer</a> for storing and retrieving these objects from a MySQL database</li>
<li>an <a href="http://roberthelmer.com/svn/scripts/trunk/aus/input/files.py">import plugin for AUS2 configuration</a>, and an <a href="http://roberthelmer.com/svn/scripts/trunk/aus/output/files.py">export plugin to straight update.xml</a> files</li>
</ul>
<p>The schema is based on <a href="http://svn.mozilla.org/projects/aus/trunk/sql/aus.sql">Lars&#8217; fine work</a> on the <a href="http://wiki.mozilla.org/AUS:v3">subject</a>, although I did <a href="http://roberthelmer.com/svn/scripts/trunk/db/aus.sql">modify it slightly</a>. This schema is not totally done yet either, for example foreign keys aren&#8217;t actually hooked up, but there&#8217;s enough there to see that it works. There&#8217;s a <a href="http://roberthelmer.com/svn/scripts/trunk/aus/run.py">run.py</a> command in that directory that calls the importer and exporter correctly.</p>
<p>This means that you can read existing AUS2 data into a database (if you have it), and create or manipulate update information using the API from Python (or directly with SQL, if you like). You can generate update.xml files and put them straight onto a webserver.</p>
<p>What I&#8217;ve put together needs quite a lot more work, but I wanted to open it up for comment. Here&#8217;s what I think is remaining, at least:</p>
<ul>
<li>database should hold the history of updates, not just the current state</li>
<li>need a web service which talks directly to the database, as an alternative to pre-generating all update.xml files.</li>
<li>should use existing libs for the DB ORM (SQLAlchemy maybe?), generating XML, etc. not the home-grown things I threw together</li>
<li>I think it would be advantageous to make the model/schema/API more sophisticated and normalized (e.g. updates could belong in multiple channels), but I don&#8217;t want to go beyond the essentials quite yet.</li>
<li>the new update-packaging tools should be able to read data from this system in order to automatically determine the appropriate &#8220;from&#8221; release to base partial MARs on, and also there should be some way to register that new updates are available, that access would be internal and append-only (e.g. only needs SELECT, INSERT).</li>
</ul>
<p>I think that to solve the first, update paths should be explicitly configured once, but there needs to be business logic in the server app (or update.xml file generator) which overrides this when a newer release is available. For instance, if a user is on version 1.0 and version 1.1 is available which has a partial for 1.0, then the partial 1.0-&gt;1.1 should be served. However, if version 1.2 is available, then the complete 1.0-&gt;1.2 update should be served.</p>
<p>The second problem has more to do with the burden inherent in handling tens of thousands of text files (e.g. backing them up or restoring them can take a very long time), although I believe that it is useful to have the option to pregenerate the path/update.xml files, especially for people without so many updates as mozilla.org is pushing each release.</p>
<p>Anyway, comments welcome! Certainly feel free to nudge me if it looks like I&#8217;m going off the rails here, but I think this approach could make things a little better in update-land. I&#8217;ll take patches too, but if anything serious comes of this I&#8217;ll probably clean up and move over to Mozilla&#8217;s repo, and rewrite a bunch, so don&#8217;t take the current implementation too seriously..</p>
]]></content:encoded>
			<wfw:commentRss>http://roberthelmer.com/blog/?feed=rss2&amp;p=39</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>tinderbox json examples back online</title>
		<link>http://roberthelmer.com/blog/?p=38</link>
		<comments>http://roberthelmer.com/blog/?p=38#comments</comments>
		<pubDate>Tue, 15 Jul 2008 19:17:55 +0000</pubDate>
		<dc:creator>rhelmer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://roberthelmer.com/blog/?p=38</guid>
		<description><![CDATA[Thanks to the intrepid Mozilla IT Team (in particular Trevor and Justin) for sending me the contents of people.mozilla.com/~rhelmer, I now have the Tinderbox JSON examples back online. Since it&#8217;s on my own server now and I have to pay for the bandwidth, I am not auto-refreshing the data anymore, because I don&#8217;t want people [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to the intrepid Mozilla IT Team (in particular Trevor and Justin) for sending me the contents of people.mozilla.com/~rhelmer, I now have the Tinderbox JSON examples back online.</p>
<p>Since it&#8217;s on my own server now and I have to pay for the bandwidth, I am not auto-refreshing the data anymore, because I don&#8217;t want people actually using it <img src='http://roberthelmer.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Maybe I can hook up some kind of access to a Mozilla community server, I&#8217;ll look into this later.</p>
<p>Here is the <a href="http://roberthelmer.com/mozilla/mockups/tinderbox/ajax.html">AJAX example</a>, which apparently still works <img src='http://roberthelmer.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . The <a href="http://roberthelmer.com/mozilla/mockups/perf/">Perf example</a> which uses the tboxJsonApi is apparently borken <img src='http://roberthelmer.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  I did a little debugging on it last night, not sure where it&#8217;s breaking yet, it&#8217;s probably the assumptions that my lame-o regex parsers use.</p>
<p>Anyway, I know that at least Cesar is working on stuff that uses this data, and I&#8217;d like to continue to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=445041">make it better</a> so file bugs.</p>
]]></content:encoded>
			<wfw:commentRss>http://roberthelmer.com/blog/?feed=rss2&amp;p=38</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>releases on tap</title>
		<link>http://roberthelmer.com/blog/?p=37</link>
		<comments>http://roberthelmer.com/blog/?p=37#comments</comments>
		<pubDate>Fri, 11 Jul 2008 06:54:45 +0000</pubDate>
		<dc:creator>rhelmer</dc:creator>
				<category><![CDATA[automation]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[releng]]></category>

		<guid isPermaLink="false">http://roberthelmer.com/blog/?p=37</guid>
		<description><![CDATA[One of the things that was pounded into me while working at MoCo is the idea of having a bug tracker and using it. I literally can&#8217;t work without one anymore. It&#8217;s the first thing I really pushed for at my new job (they were using various ad-hoc systems for project management, but not a [...]]]></description>
			<content:encoded><![CDATA[<p>One of the things that was pounded into me while working at MoCo is the idea of having a bug tracker and using it. I literally can&#8217;t work without one anymore. It&#8217;s the first thing I really pushed for at my new job (they were using various ad-hoc systems for project management, but not a real bug tracker for the software dev side). I&#8217;ve realized that I just can&#8217;t keep everything in my head, various notepads and text files, etc. and expect to get anything done, or let anyone know what my priorities are.</p>
<p>In return, I really tried to hammer in the idea of fast, automated release cycles. We spent a lot of time (and the release engineering team does still spend a lot of time) wrapping the build system and other tools so that they can be run and the output verified automatically, chasing that ideal of the <a href="http://www.formula1.com/news/features/2008/7/8015.html">Formula One-style hand-off </a>to QA and to the users.</p>
<p>The way releases work now is incredible, just night and day from when I started at MoCo a little over two years ago. However, there&#8217;s one thing that&#8217;s always bugged me, and since I just had the opportunity to set up an automated build/release environment, I thought I&#8217;d expound a little bit on it.</p>
<p>The one thing is that nightly builds of Firefox just aren&#8217;t the same as the release builds. The way updates work is different, branding is turned on, bits are signed (on Windows), the directory structure for files is different. Firefox releases are actually rebuilt from source for each release.</p>
<p>So what? None of these, even added up, are a big deal, right? Obviously releases work fine, and there are a ton of great people (and the tools they&#8217;ve made) that make sure that nothing is missed because of this. But wouldn&#8217;t it be great if we could just take the nightly updates and builds that have already been put through the ringer by thousands of people, and give those straight to QA? Or if we can&#8217;t have that, how about at least have the release builds put through the same tests and available to QA immediately after checkin?</p>
<p>Am I pushing some fanciful, architecture-astronaut utopian vision? I don&#8217;t think so, because this is how I&#8217;ve done releases in the past, and this is how I do releases now. Let me tell you about it.</p>
<p>I use <a href="https://hudson.dev.java.net/">Hudson</a>, which I can&#8217;t recommend highly enough (well, if you&#8217;re not allergic to Java, I guess). It makes this kind of process easy. It&#8217;s not necessary to use it to achieve this of course, I&#8217;m just throwing this out as a data point.</p>
<p>On each checkin:</p>
<ul>
<li>a unique build number is generated</li>
<li>a new build is generated (I also have it run unit tests, and install the software to run functional tests)</li>
<li>release files and other artifacts like build logs are archived, and checksums of the files are stored</li>
<li>if anything goes wrong, the team and the developer who checked in the latest change are notified</li>
</ul>
<p>The software is available to QA as soon as this automated process is complete. When it&#8217;s time to release, I can tag the build via the web UI (although it&#8217;s easy enough to do outside of Hudson if you have the build number, which in turn contains the branch/datestamp/revision info needed).</p>
<p>Having the next release always &#8220;on tap&#8221; makes it easy for me to largely ignore the build/release side of things, and focus on developing software, writing tests, and tracking down problems.</p>
<p>Now, Mozilla&#8217;s situation is way more complicated, which I alluded to a bit earlier. This post isn&#8217;t a &#8220;see what I can do!&#8221; rant as much as a &#8220;look what&#8217;s possible!&#8221; idea. I think that this kind of setup is totally doable for Mozilla&#8217;s products, but there are some serious issues:</p>
<ul>
<li>branding is turned on at compile time. having nightly builds not called &#8220;Firefox&#8221; is a *good* thing, as otherwise end-users would be very confused.</li>
<li>&#8220;&#8211;enable-tests&#8221;, needed for unit tests, cannot be run in release builds at the moment (for technical reasons outside the scope of this post; I&#8217;m sure there are bugs on this)</li>
<li>release builds are signed and have a different filename format and directory structure (e.g. &#8220;firefox-3.0.pre.en-US.win32.installer.exe&#8221; for nightly versus &#8220;3.0/win32/en-US/Firefox Setup 3.0.exe&#8221;)</li>
<li>release builds are cryptographically signed, to assure users that these files really were created by MoCo (regardless of what mirror or download site they may have come from).</li>
<li>nightly updates are only for en-US, and use a different set of tools to generate updates, and a different mode of the update server to serve updates (some ideas for fixing this problems are in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=410806">bug 410806</a>, but again this is outside of the scope of this post)</li>
</ul>
<p>So all of these are pretty much good things (branding, signing, etc.) or technical issues that could surely be fixed (nightly updates, unit tests). Arguably, nightly users and release users tend to be very different people, with very different needs and expectations, so all of the &#8220;intentional problems&#8221; here are really good things. This pretty much eliminates the possibility (as far as I can see) that Firefox release engineers could take a nightly build and be able to ship that as a release build.</p>
<p>Even if the branding issue were solved (e.g. repackaging), signing still needs to be done, partial diff files would need to be regenerated, and probably other things that I&#8217;m overlooking. The automated tests that were run on the nightlies may not be applicable (you may scoff at the paranoia, but there was a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=340976">bug</a> regarding the size of the Vista icon in official branding found late in the Fx3 beta cycle which caused a bunch of grief. This situation was improved by making a Minefield version of the same icon, which is a good fix, but I think my point still stands).</p>
<p>Here&#8217;s another option &#8211; why not create a real, honest-to-god Firefox release build, on each checkin (or at least alongside each nightly build)? This at least makes it available to QA as soon as humanly possible, and it could probably be opened up somehow to interested community testers (human-triggered builds are right now, just put into a special area).</p>
<p>Maybe I&#8217;m just spoiled working on little tiny projects, but I think even the already super-fast and extensively tested Firefox releases could be made super-faster and the tests extensivlier, at the cost of freeing up the release engineers of the need to babysit the One and Final Release Build.</p>
]]></content:encoded>
			<wfw:commentRss>http://roberthelmer.com/blog/?feed=rss2&amp;p=37</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>openSUSE build service</title>
		<link>http://roberthelmer.com/blog/?p=36</link>
		<comments>http://roberthelmer.com/blog/?p=36#comments</comments>
		<pubDate>Wed, 09 Jul 2008 23:24:10 +0000</pubDate>
		<dc:creator>rhelmer</dc:creator>
				<category><![CDATA[automation]]></category>
		<category><![CDATA[releng]]></category>

		<guid isPermaLink="false">http://roberthelmer.com/blog/?p=36</guid>
		<description><![CDATA[Looks like the openSUSE build service can package up your software for a bunch of different Linux distributions, cross-compile, track upstream project dependencies (e.g. rebuild your GTK app when GTK changes), and runs on their servers so you don&#8217;t have to maintain the thing. Add in Windows and Mac support and they might have something [...]]]></description>
			<content:encoded><![CDATA[<p>Looks like the <a href="http://en.opensuse.org/Build_Service">openSUSE build service</a> can package up your software for a bunch of different Linux distributions, cross-compile, track upstream project dependencies (e.g. rebuild your GTK app when GTK changes), and runs on their servers so you don&#8217;t have to maintain the thing.</p>
<p>Add in Windows and Mac support and they might have something there <img src='http://roberthelmer.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>This might be a great idea for a higher-level &#8220;cloud computing&#8221; service, setting up and maintaining this kind of infrastructure is a huge problem for many companies.</p>
]]></content:encoded>
			<wfw:commentRss>http://roberthelmer.com/blog/?feed=rss2&amp;p=36</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OS as platform</title>
		<link>http://roberthelmer.com/blog/?p=12</link>
		<comments>http://roberthelmer.com/blog/?p=12#comments</comments>
		<pubDate>Tue, 08 Jul 2008 08:00:22 +0000</pubDate>
		<dc:creator>rhelmer</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[releng]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://roberthelmer.com/blog/?p=12</guid>
		<description><![CDATA[I&#8217;ve been thinking a lot about the role of operating systems lately. Why is there no operating system vendor that focuses on being a platform for applications, rather than trying to compete directly in the application space? Maybe this is a naive question, but it really makes application developer&#8217;s lives a huge pain to have [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been thinking a lot about the role of operating systems lately. Why is there no operating system vendor that focuses on being a platform for applications, rather than trying to compete directly in the application space?</p>
<p>Maybe this is a naive question, but it really makes application developer&#8217;s lives a huge pain to have to compete with platform vendors all the time, and it&#8217;s surprising to me that the market puts up with it. It also brings up the whole &#8220;core competency&#8221; argument, can one company really do two fairly specialized things well?</p>
<p>These are who I consider to be the top-tier OS vendors:</p>
<ul>
<li>Microsoft Windows</li>
<li>Apple Mac OS X</li>
<li>Ubuntu Linux</li>
</ul>
<p>Why don&#8217;t any of them provide just the base OS + gotta-have applications (editor, email, web), and give the <abbr title="Independent Software Vendors">ISV</abbr>s the ability to:</p>
<ul>
<li>register new applications in a central catalog</li>
<li>deliver updates to specific applications</li>
<li>send crash data back to the vendor</li>
</ul>
<p>This would allow the OS vendor to focus on the core OS functionality, and provide means to the users to select applications that suited their needs (shipping preinstalled with the top editor, email and web clients, of course). Having formal reviewers as well as user ratings would be a great way to promote good and trustworthy applications.</p>
<p>I don&#8217;t anticipate any of these top-tier OS vendors focusing on this space, although for different reasons.</p>
<p><span id="more-12"></span></p>
<p>Microsoft is particularly adept at watching application vendor&#8217;s innovations and making functional facsimiles (some say &#8220;Worse is Better&#8221; versions). For example &#8220;Word Perfect&#8221;, &#8220;Lotus 123&#8243;, and &#8220;Netscape&#8221;. Once they&#8217;ve decided to commit serious developer time though they tend to slowly overwhelm and overtake the slice of the market that they target. I think that the convenience of a single vendor is what people like, and I guess dominating the stack is one way to control the pipeline.</p>
<p>Prior to OS X, Apple seemed to avoid this (with the notable exception of Claris) but since has embarked on Office competitors, and it&#8217;s own web browser (Safari/WebKit). Maybe this is a copy out of the Windows playbook, but it seems just as likely that it&#8217;s a bid to control the full user experience, which is very Apple.</p>
<p>Ubuntu comes closest to my ideal, but still insists on packaging everything themselves, and doesn&#8217;t do a 1:1 mapping for bug and crash reports. They have their own build, their own crash reporting system, etc.</p>
<p>Why can&#8217;t I log into an interface for each of these vendors, register my latest release, and let them handle updating the user catalog, advertising updates to existing users, and a means to funnel back crash reports?</p>
<p>If history is any guide, OS vendors will continue to oscillate between focusing on their core competency (providing an interface between the bare metal and the human) and trying to take over the full application stack flavor of the week. There&#8217;s just too much money and power on the table when you control the whole thing for people to leave it alone.</p>
]]></content:encoded>
			<wfw:commentRss>http://roberthelmer.com/blog/?feed=rss2&amp;p=12</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
