<?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>chris' random ramblings &#187; General</title>
	<atom:link href="http://atlee.ca/blog/category/general/feed/" rel="self" type="application/rss+xml" />
	<link>http://atlee.ca/blog</link>
	<description>programming, photography, media, and anything else that strikes my fancy</description>
	<lastBuildDate>Tue, 11 May 2010 15:15:46 +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>What do you want to know about builds?</title>
		<link>http://atlee.ca/blog/2010/05/04/what-do-you-want-to-know-about-builds/</link>
		<comments>http://atlee.ca/blog/2010/05/04/what-do-you-want-to-know-about-builds/#comments</comments>
		<pubDate>Tue, 04 May 2010 22:44:14 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[buildbot]]></category>
		<category><![CDATA[end-to-end]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[talos]]></category>
		<category><![CDATA[unittests]]></category>

		<guid isPermaLink="false">http://atlee.ca/blog/?p=722</guid>
		<description><![CDATA[Mozilla has been quite involved in recent buildbot development, in particular, helping to make it scale across multiple machines.  More on this in another post!
Once deployed, these changes will give us the ability to give real time access to various information about our build queue: the list of jobs waiting to start, and which [...]]]></description>
			<content:encoded><![CDATA[<p>Mozilla has been quite involved in recent <a href="http://buildbot.net/trac">buildbot</a> development, in particular, helping to make it scale across multiple machines.  More on this in another post!</p>
<p>Once deployed, these changes will give us the ability to give real time access to various information about our build queue: the list of jobs waiting to start, and which jobs are in progress.  This should help other tools like <a href="http://tests.themasta.com/tinderboxpushlog/">Tinderboxpushlog</a> show more accurate information.  One limitation of the upstream work so far is that it only captures a very coarse level of detail about builds: start/end time, and result code is pretty much it.  No further detail about the build is captured, like which slave it executed on, what properties it generated (which could include useful information like the URL to the generated binaries), etc.</p>
<p>We&#8217;ve also been exporting a <a href="http://build.mozilla.org/builds/">json dump</a> of our build status for <a href="http://atlee.ca/blog/2010/03/04/byo-build-dashboard/">many months now</a>.  It&#8217;s been useful for some analysis, but it also has limitations: the data is always at least 5 minutes old by the time you look, and in-progress builds are not represented at all.</p>
<p>We&#8217;re starting to look at ways of exporting all this detail in a way that&#8217;s useful to more people.  You want to get notified when your try builds are done?  You want to look at which test suites are taking the most time?  You want to determine how our build times change over time?  You want to find out what the last all-green revision was on trunk?  We want to make this data available, so anybody can write these tools.</p>
<h2>Just how big is that firehose?</h2>
<p>I think we have one of the largest buildbot setups out there and we generate a non-trivial amount of data:</p>
<ul>
<li>6-10 buildbot master processes generating updates, on different machines in 2 or 3 data centers</li>
<li>around 130 jobs per hour composed of 4,773 individual steps total per hour.  That works out to about 1.4 updates per second that are generated</li>
</ul>
<h2>How you can help</h2>
<p>This is where you come in.</p>
<p>I can think of two main classes of interfaces we could set up: a query-type interface where you poll for information that you are interested in, and a notification system where you register a listener for certain types (or all!) events.</p>
<p>What would be the best way for us to make this data available to you?  Some kind of REST API?  A message or event brokering system?  <a href="http://code.google.com/p/pubsubhubbub/">pubsubhubbub</a>?</p>
<p>Is there some type of data or filtering that would be super helpful to you?</p>
]]></content:encoded>
			<wfw:commentRss>http://atlee.ca/blog/2010/05/04/what-do-you-want-to-know-about-builds/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Two great, completely unrelated links</title>
		<link>http://atlee.ca/blog/2010/03/31/two-great-completely-unrelated-links/</link>
		<comments>http://atlee.ca/blog/2010/03/31/two-great-completely-unrelated-links/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 20:47:46 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Religion]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://atlee.ca/blog/?p=693</guid>
		<description><![CDATA[Yesterday was a bit of an overwhelming day.  After getting home at 1am after a long bus ride home, I was unwinding by catching up on some news and email.  I came across these two links, both of which really lifted my mood.
The first, Grokking the Zen of the Vi Wu-Wei, talks about [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday was a bit of an overwhelming day.  After getting home at 1am after a long bus ride home, I was unwinding by catching up on some news and email.  I came across these two links, both of which really lifted my mood.</p>
<p>The first, <a href="http://jeetworks.org/grokking-the-zen-of-the-vi-wu-wei">Grokking the Zen of the Vi Wu-Wei</a>, talks about a programmer&#8217;s journey from emacs to BBEdit to vim.  This post is a great read in and of itself, but what&#8217;s <strong>really</strong> worth it, is the link around the middle of the post to <a href="http://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim/1220118#1220118">http://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim/1220118#1220118</a>.  This was truly a joy to read.  Definitely the best answer I&#8217;ve ever seen on Stack Overflow, and quite possibly the best discussion of vi I&#8217;ve ever read.  It taught me a lot, but I enjoyed reading it for more than that.  It was almost like being on a little adventure, discovering all these little hidden secrets about the neighbourhood you&#8217;ve been living in for years.  Like I said, it was 1am.</p>
<p>The second, <a href="http://blogs.telegraph.co.uk/news/damianthompson/100032121/the-pope-the-judge-the-paedophile-priest-and-the-new-york-times/">The Pope, the judge, the paedophile priest and The New York Times</a>, gave me some reassurance that things aren&#8217;t always as they seem as reported by the media.  Regardless of how you feel about the Church or the Pope, it seems that journalistic integrity has fallen by the wayside here.  From the article:</p>
<blockquote><p>Fr Thomas Brundage, the former Archdiocese of Milwaukee Judicial Vicar who presided over the canonical criminal case of the Wisconsin child abuser Fr Lawrence Murphy, has broken his silence to give a devastating account of the scandal – and of the behaviour of The New York Times, which resurrected the story.</p>
<p>It looks as if the media were in such a hurry to to blame the Pope for this wretched business that <strong>not one news organisation contacted Fr Brundage</strong>. As a result, crucial details were unreported.</p></blockquote>
<p>The entire article is worth a read.</p>
]]></content:encoded>
			<wfw:commentRss>http://atlee.ca/blog/2010/03/31/two-great-completely-unrelated-links/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>RelEng Blogging Blitz is coming soon!</title>
		<link>http://atlee.ca/blog/2009/10/20/releng-blogging-blitz-coming-soon/</link>
		<comments>http://atlee.ca/blog/2009/10/20/releng-blogging-blitz-coming-soon/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 13:39:33 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://atlee.ca/blog/?p=568</guid>
		<description><![CDATA[Several members of the Release Engineering team are going to be blogging next week about various bits of the build, test, and release automation infrastructure for Firefox.
If there&#8217;s something about our infrastructure you&#8217;ve always wondered about, give us a shout and we&#8217;ll do our best to explain it!
]]></description>
			<content:encoded><![CDATA[<p>Several members of the Release Engineering team are going to be blogging next week about various bits of the build, test, and release automation infrastructure for Firefox.</p>
<p>If there&#8217;s something about our infrastructure you&#8217;ve always wondered about, give us a shout and we&#8217;ll do our best to explain it!</p>
]]></content:encoded>
			<wfw:commentRss>http://atlee.ca/blog/2009/10/20/releng-blogging-blitz-coming-soon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upcoming Identity Management with Weave</title>
		<link>http://atlee.ca/blog/2009/05/12/upcoming-identity-management-with-weave/</link>
		<comments>http://atlee.ca/blog/2009/05/12/upcoming-identity-management-with-weave/#comments</comments>
		<pubDate>Tue, 12 May 2009 17:46:26 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[identity]]></category>
		<category><![CDATA[openid]]></category>
		<category><![CDATA[weave]]></category>

		<guid isPermaLink="false">http://atlee.ca/blog/?p=370</guid>
		<description><![CDATA[I was really excited to read a recent post about upcoming identity support with Weave on Mozilla Labs&#8217; blog.
Why is this so cool?
Weave lets you securely synchronize parts of your browser profile between different machines.  All your bookmarks, AwesomeBar history, saved passwords can be synchronized between your laptop, desktop and mobile phone.  Your [...]]]></description>
			<content:encoded><![CDATA[<p>I was really excited to read a recent post about <a href="http://labs.mozilla.com/2009/05/identity-in-the-browser/">upcoming identity support with Weave</a> on <a href="http://labs.mozilla.com/blog/">Mozilla Labs&#8217; blog</a>.</p>
<p>Why is this so cool?</p>
<p><a href="http://labs.mozilla.com/projects/weave/">Weave</a> lets you <strong>securely</strong> synchronize parts of your browser profile between different machines.  All your bookmarks, AwesomeBar history, saved passwords can be synchronized between your laptop, desktop and mobile phone.  Your data is always encrypted with a private key that <strong>only you</strong> have access to.</p>
<p>Combine this with intelligent form-filling, automatic detection of OpenID-enabled sites, and you&#8217;ve got what is essentially <strong>single sign-on onto all your websites from all your browsers</strong>.</p>
<p>Now you&#8217;ll be able to sign into Firefox, and Firefox will know how to sign into all your websites.</p>
<p>Keep up the great work Labs!</p>
]]></content:encoded>
			<wfw:commentRss>http://atlee.ca/blog/2009/05/12/upcoming-identity-management-with-weave/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Exporting MQ patches</title>
		<link>http://atlee.ca/blog/2009/03/23/exporting-mq-patches/</link>
		<comments>http://atlee.ca/blog/2009/03/23/exporting-mq-patches/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 17:30:52 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[hg]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[mq]]></category>
		<category><![CDATA[patch]]></category>

		<guid isPermaLink="false">http://atlee.ca/blog/?p=328</guid>
		<description><![CDATA[I&#8217;ve been trying to use Mercurial Queues to manage my work on different tasks in several repositories.  I try to name all my patches with the name of the bug it&#8217;s related to; so for my recent work on getting Talos not skipping builds, I would call my patch &#8216;bug468731&#8242;.
I noticed that I was [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been trying to use <a href="http://hgbook.red-bean.com/hgbookch12.html#x16-26700012">Mercurial Queues</a> to manage my work on different tasks in several repositories.  I try to name all my patches with the name of the bug it&#8217;s related to; so for my recent work on getting Talos not skipping builds, I would call my patch &#8216;bug468731&#8242;.</p>
<p>I noticed that I was running this series of steps a lot:<br />
<code>cd ~/mozilla/buildbot-configs<br />
hg qdiff > ~/patches/bug468731-buildbot-configs.patch<br />
cd ~/mozilla/buildbotcustom<br />
hg qdiff > ~/patches/bug468731-buildbotcustom.patch<br />
</code><br />
&#8230;and then uploading the resulting patch files as attachments to the bug.  There&#8217;s a lot of repetition and extra mental work in those steps:</p>
<ul>
<li>I have to type the bug number manually <em>twice</em>.  This is annoying, and error-prone.  I&#8217;ve made a typo on more than one occasion and then wasted a few minutes trying to track down where the file went.</li>
<li>I have to type the correct repository name for each patch.  Again, I&#8217;ve managed to screw this up in the past.  Often I have several terminals open, one for each repository, and I can get mixed up as to which repository I&#8217;ve currently got active.</li>
<li>mercurial already knows the bug number, since I&#8217;ve used it in the name of my patch.</li>
<li>mercurial already knows which repository I&#8217;m in.</li>
</ul>
<p>I wrote the mercurial extension below to help with this.  It will take the current patch name, and the basename of the current repository, and save a patch in ~/patches called [patch_name]-[repo_name].patch.  It will also compare the current patch to any previous ones in the patches directory, and save a new file if the patches are different, or tell you that you&#8217;ve already saved this patch.</p>
<p>To enable this extension, save the code below somewhere like ~/.hgext/mkpatch.py, and then add &#8220;mkpatch = ~/.hgext/mkpatch.py&#8221; to your .hgrc&#8217;s extensions section.  Then you can run &#8216;hg mkpatch&#8217; to automatically create a patch for you in your ~/patches directory!</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>, hashlib
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> mercurial <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">commands</span>, util
<span style="color: #ff7700;font-weight:bold;">from</span> hgext <span style="color: #ff7700;font-weight:bold;">import</span> mq
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> mkpatch<span style="color: black;">&#40;</span>ui, repo, <span style="color: #66cc66;">*</span>pats, <span style="color: #66cc66;">**</span>opts<span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot;Saves the current patch to a file called &lt;patch_name&gt;-&lt;repo_name&gt;.patch
    in your patch directory (defaults to ~/patches)
    &quot;&quot;&quot;</span>
    repo_name = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">basename</span><span style="color: black;">&#40;</span>ui.<span style="color: black;">config</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'paths'</span>, <span style="color: #483d8b;">'default'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> opts.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'patchdir'</span><span style="color: black;">&#41;</span>:
        patch_dir = opts.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'patchdir'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">del</span> opts<span style="color: black;">&#91;</span><span style="color: #483d8b;">'patchdir'</span><span style="color: black;">&#93;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        patch_dir = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">expanduser</span><span style="color: black;">&#40;</span>ui.<span style="color: black;">config</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'mkpatch'</span>, <span style="color: #483d8b;">'patchdir'</span>, <span style="color: #483d8b;">&quot;~/patches&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
    ui.<span style="color: black;">pushbuffer</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    mq.<span style="color: black;">top</span><span style="color: black;">&#40;</span>ui, repo<span style="color: black;">&#41;</span>
    patch_name = ui.<span style="color: black;">popbuffer</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">exists</span><span style="color: black;">&#40;</span>patch_dir<span style="color: black;">&#41;</span>:
        <span style="color: #dc143c;">os</span>.<span style="color: black;">makedirs</span><span style="color: black;">&#40;</span>patch_dir<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">isdir</span><span style="color: black;">&#40;</span>patch_dir<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">raise</span> util.<span style="color: black;">Abort</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%s is not a directory&quot;</span> <span style="color: #66cc66;">%</span> patch_dir<span style="color: black;">&#41;</span>
&nbsp;
    ui.<span style="color: black;">pushbuffer</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    mq.<span style="color: black;">diff</span><span style="color: black;">&#40;</span>ui, repo, <span style="color: #66cc66;">*</span>pats, <span style="color: #66cc66;">**</span>opts<span style="color: black;">&#41;</span>
    patch_data = ui.<span style="color: black;">popbuffer</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    patch_hash = hashlib.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'sha1'</span>, patch_data<span style="color: black;">&#41;</span>.<span style="color: black;">digest</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    full_name = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>patch_dir, <span style="color: #483d8b;">&quot;%s-%s.patch&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>patch_name, repo_name<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    i = <span style="color: #ff4500;">0</span>
    <span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">exists</span><span style="color: black;">&#40;</span>full_name<span style="color: black;">&#41;</span>:
        file_hash = hashlib.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'sha1'</span>, <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>full_name<span style="color: black;">&#41;</span>.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>.<span style="color: black;">digest</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> file_hash == patch_hash:
            ui.<span style="color: black;">status</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Patch is identical to &quot;</span>, full_name, <span style="color: #483d8b;">&quot;; not saving&quot;</span><span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span>
        full_name = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>patch_dir, <span style="color: #483d8b;">&quot;%s-%s.patch.%i&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>patch_name, repo_name, i<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        i += <span style="color: #ff4500;">1</span>
&nbsp;
    <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>full_name, <span style="color: #483d8b;">&quot;w&quot;</span><span style="color: black;">&#41;</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span>patch_data<span style="color: black;">&#41;</span>
    ui.<span style="color: black;">status</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Patch saved to &quot;</span>, full_name<span style="color: black;">&#41;</span>
&nbsp;
mkpatch_options = <span style="color: black;">&#91;</span>
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;&quot;</span>, <span style="color: #483d8b;">&quot;patchdir&quot;</span>, <span style="color: #483d8b;">''</span>, <span style="color: #483d8b;">&quot;patch directory&quot;</span><span style="color: black;">&#41;</span>,
        <span style="color: black;">&#93;</span>
cmdtable = <span style="color: black;">&#123;</span>
    <span style="color: #483d8b;">&quot;mkpatch&quot;</span>: <span style="color: black;">&#40;</span>mkpatch, mkpatch_options + mq.<span style="color: black;">cmdtable</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'^qdiff'</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>, <span style="color: #483d8b;">&quot;hg mkpatch [OPTION]... [FILE]...&quot;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://atlee.ca/blog/2009/03/23/exporting-mq-patches/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Maybe he&#8217;s right?</title>
		<link>http://atlee.ca/blog/2009/03/23/maybe-he-is-right/</link>
		<comments>http://atlee.ca/blog/2009/03/23/maybe-he-is-right/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 17:27:47 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Religion]]></category>
		<category><![CDATA[aids]]></category>
		<category><![CDATA[condoms]]></category>
		<category><![CDATA[pope]]></category>

		<guid isPermaLink="false">http://atlee.ca/blog/?p=318</guid>
		<description><![CDATA[The Pope has been taking quite a bit of heat over the past few weeks in the press.  The latest media frenzy is over recent statements he made regarding the Church&#8217;s consistent teaching that condoms are not the answer to the AIDS crisis in Africa, or anywhere else in the world.
It seems like most [...]]]></description>
			<content:encoded><![CDATA[<p>The Pope has been taking quite a bit of heat over the past few weeks in the press.  The latest media frenzy is over recent statements he made regarding the Church&#8217;s consistent teaching that condoms are not the answer to the AIDS crisis in Africa, or anywhere else in the world.</p>
<p>It seems like most people automatically assume that condoms are an important part of the solution to combating AIDS.  It makes sense on some level I suppose; we&#8217;re reminded constantly of the importance of having &#8220;safe sex&#8221;, and how using a condom is the responsible thing to do.  And I&#8217;m sure that condoms do reduce the risk of HIV transmission for any one given sexual encounter.  But what are the effects over time?  If condoms have a 99% success rate, that&#8217;s still 1 out of 100 failures.  I&#8217;m not going to bet my life on a 1% chance of failure.  Something with a 1% chance of occurring in a single event, has a <strong>63%</strong> chance of occurring at least once over 100 events.  Let&#8217;s say the prevention of transmission rate is 99.9%; there&#8217;s still a <strong>9.5%</strong> chance of transmission over 100 sexual encounters in this scenario.</p>
<p>Now, big giant disclaimer here, I don&#8217;t know what the accepted statistics are on the effectiveness of condoms in preventing HIV transmission, either in ideal circumstances, or in actual usage.</p>
<p>I do know that the chances of failure for something definitely add up quickly over time, and they add up fast.</p>
<p>So it shouldn&#8217;t be a surprise to hear that, &#8220;We have found no consistent associations between condom use and lower HIV-infection rates, which, 25 years into the pandemic, we should be seeing if this intervention was working.&#8221;  The full article can be read over at the <a href="http://article.nationalreview.com/?q=MTNlNDc1MmMwNDM0OTEzMjQ4NDc0ZGUyOWYxNmEzN2E">National Review Online.</a></p>
<p>In two places I know of that have had success in combating AIDS, Uganda and the Philippines, the primary focus was on having faithful, monogamous sexual practices.  And it makes sense why this works.  If people have fewer sexual partners, then the risk of transmission in the general population is reduced.</p>
<p>So maybe the Pope is right when he <a href="http://www.catholicnewsagency.com/new.php?n=15403">said</a>, &#8220;If the soul is lacking, if Africans do not help one another, <strong>the scourge cannot be resolved by distributing condoms; quite the contrary, we risk worsening the problem</strong>. The solution can only come through a twofold commitment: firstly, the humanization of sexuality, in other words a spiritual and human renewal bringing a new way of behaving towards one another; and secondly, true friendship, above all with those who are suffering, a readiness &#8211; even through personal sacrifice &#8211; to be present with those who suffer. And these are the factors that help and bring visible progress.&#8221; (my emphasis)</p>
<p>I think he is.</p>
<p>Thanks to <a href="http://mulier-fortis.blogspot.com/2009/03/now-whos-ignoring-evidence.html">Mulier Fortis</a> for the link to the National Review article.</p>
]]></content:encoded>
			<wfw:commentRss>http://atlee.ca/blog/2009/03/23/maybe-he-is-right/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgraded to Wordpress 2.7</title>
		<link>http://atlee.ca/blog/2009/02/08/upgraded-to-wordpress-27/</link>
		<comments>http://atlee.ca/blog/2009/02/08/upgraded-to-wordpress-27/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 06:40:14 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://atlee.ca/blog/?p=295</guid>
		<description><![CDATA[I just spent a few minutes upgrading my blog to wordpress 2.7.  Looks like everything went smoothly!  I did this upgrade with mercurial queues again.  Wordpress 2.7 is supposed to have better upgrade support built in, so I may not need mercurial for future upgrades.
Please let me know if you notice anything [...]]]></description>
			<content:encoded><![CDATA[<p>I just spent a few minutes upgrading my blog to wordpress 2.7.  Looks like everything went smoothly!  I did this upgrade with <a href="http://atlee.ca/blog/2008/10/25/upgrading-wordpress-with-mercurial/">mercurial queues again</a>.  Wordpress 2.7 is supposed to have better upgrade support built in, so I may not need mercurial for future upgrades.</p>
<p>Please let me know if you notice anything strange or missing since the upgrade. </p>
]]></content:encoded>
			<wfw:commentRss>http://atlee.ca/blog/2009/02/08/upgraded-to-wordpress-27/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>I&#8217;m on The Twitter</title>
		<link>http://atlee.ca/blog/2008/12/08/im-on-the-twitter/</link>
		<comments>http://atlee.ca/blog/2008/12/08/im-on-the-twitter/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 03:04:32 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://atlee.ca/blog/?p=244</guid>
		<description><![CDATA[Well, it seems like all the cool kids are tweetering these days, so to keep up with the times, I&#8217;ve signed up on the twitter.
You can follow my twittering here: http://twitter.com/chrisatlee
]]></description>
			<content:encoded><![CDATA[<p>Well, it seems like all the cool kids are tweetering these days, so to keep up with the times, I&#8217;ve signed up on the twitter.</p>
<p>You can follow my twittering here: <a href="http://twitter.com/chrisatlee">http://twitter.com/chrisatlee</a></p>
]]></content:encoded>
			<wfw:commentRss>http://atlee.ca/blog/2008/12/08/im-on-the-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>poster 0.2 is out</title>
		<link>http://atlee.ca/blog/2008/12/05/poster-02-is-out/</link>
		<comments>http://atlee.ca/blog/2008/12/05/poster-02-is-out/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 15:36:28 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[poster]]></category>

		<guid isPermaLink="false">http://atlee.ca/blog/?p=234</guid>
		<description><![CDATA[I&#8217;ve fixed a few bugs with poster, and released the next version, 0.2.  It&#8217;s available from the cheeseshop, or from my web page.
Documentation can also be found here.
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve fixed a few bugs with <a href="http://atlee.ca/software/poster">poster</a>, and released the next version, 0.2.  It&#8217;s available from the <a href="http://pypi.python.org/pypi/poster/0.2">cheeseshop</a>, or from my <a href="http://atlee.ca/software/poster/dist/0.2/">web page</a>.</p>
<p>Documentation can also be found <a href="http://atlee.ca/software/poster">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://atlee.ca/blog/2008/12/05/poster-02-is-out/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Join the Revolution</title>
		<link>http://atlee.ca/blog/2008/12/01/join-the-revolution/</link>
		<comments>http://atlee.ca/blog/2008/12/01/join-the-revolution/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 19:19:29 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Toronto]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[freedom]]></category>

		<guid isPermaLink="false">http://atlee.ca/blog/?p=231</guid>
		<description><![CDATA[Do yourself a favor and check out Johnath&#8217;s post on freedom.  It will change your world.
]]></description>
			<content:encoded><![CDATA[<p>Do yourself a favor and check out Johnath&#8217;s post <a href="http://blog.johnath.com/2008/11/30/on-freedom/">on freedom</a>.  It will change your world.</p>
]]></content:encoded>
			<wfw:commentRss>http://atlee.ca/blog/2008/12/01/join-the-revolution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
