<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
  <title>Blog-o!</title>
  <link rel="stylesheet" href="/static/font/font.css" type="text/css" media="screen" />
  <link rel="stylesheet" href="/static/blog.css" type="text/css"
    media="screen and (min-device-width: 481px)" />
  <link rel="stylesheet" href="/static/iTouch.css" type="text/css"
    media="only screen and (max-device-width: 480px)" />
  <link rel="alternate" type="application/atom+xml" title="Atom"
    href="http://weblog.latte.ca/index.xml" />
  <link rel="stylesheet" href="/static/pygments.css" type="text/css" />
  <link rel="apple-touch-icon" href="/images/iPhoneMug.png"/>
  <meta name="viewport" content="initial-scale=1.0" />
 </head>
 <body>
  <div class="title">
   <span class="title">Blog-o!</span><br />
   <span class="description">Notes from latte.ca<br /><a href="http://weblog.latte.ca/blake">blake</a></span>
  </div>
  <div class="content">
<div class="blosxomFirstDayDiv">
<div class="blosxomDate">Wed, 25 Aug 2010</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="moreSecure" href="http://weblog.latte.ca/blake/tech/thunderbird/moreSecure.html"><b>More secure!</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p>As someone who works on an email client, I’m interested in making
   my communications more secure.  So, with the assistance of
   <a href="http://perso.hirlimann.net/~ludo/blog/">Ludovic</a> and
   <a href="http://gozer.ectoplasm.org/blog/">Gozer</a>, I got a client certificate that
   would allow me to sign and encrypt my messages.  (Check out the envelope
   and lock in the image below.)
</p>
<p><img src="/images/blake/SignedAndEncrypted.png" title="Signed and Encrypted" alt="An outgoing message, with an envelope and a
lock"/>
</p>
<p>Most of the time, I’ll probably just sign my messages – after all, that’s
   what I’ve set it up to do by default – but it’s nice to know that if
   there’s something I need to encrypt, that option is now available to me.
</p></div>
<div class="storyFoot">[Posted at 17:34 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/moreSecure.html">link and comments</a> (4 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Wed, 11 Aug 2010</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="zergRush" href="http://weblog.latte.ca/blake/random/zergRush.html"><b>OMG!  Zerg Rush!</b></a>
<div class="storyCategory">[/random]</div></div>
<div class="storyBody"><p>File this one under stupid Unicode tricks, I think.</p>
<font size="20px">
♖♘♗♔♕♗♘♖<br/>
♙♙♙♙♙♙♙♙<br/>
♟♟♟♟♟♟♟♟<br/>
♟♟♟♟♟♟♟♟<br/>
♟♟♟♟♟♟♟♟<br/>
♟♟♟♟♟♟♟♟<br/>
♟♟♟♟♟♟♟♟<br/>
♟♟♟♟♟♟♟♟<br/>
</font></div>
<div class="storyFoot">[Posted at 14:34 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/random/zergRush.html">link and comments</a> (0 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Mon, 19 Jul 2010</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="zsh" href="http://weblog.latte.ca/blake/tech/thunderbird/zsh.html"><b>A handy zsh function (for OS X)</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p>A co-worker of mine was having problems remembering where the <a href="http://mxr.mozilla.org/comm-central/source/client.mk">makefile</a> puts the binary for
   <a href="http://mozillamessaging.com/">Thunderbird</a> when you build it yourself.
   Now, I type in the path far too often, so I know where it is (on my
   computer, anyways), but since I type it in far too often, I grabbed
   someone's <a href="http://www.zsh.org/">zsh</a> function that launched <a href="http://www.mozilla.com/">Firefox</a>, and modified it to launch Thunderbird from either
   the build directory or the source directory, but only on Mac OS X.
</p>
<p>Anyways, here it is, I hope some of you find it useful.
</p>
<table><tr><td class="linenos"><pre> 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13</pre></td><td class="code"><div class="codehilite"><pre>thunderbird<span class="o">()</span> <span class="o">{</span>
  <span class="nb">local</span> -a currdir;
  <span class="nv">currdir</span><span class="o">=</span><span class="nv">$PWD</span>:t;
  <span class="k">for </span>nm in LanikaiDebug ShredderDebug Lanikai Shredder; <span class="k">do</span>
<span class="k">    if</span> <span class="o">[</span> -d <span class="s2">&quot;./mozilla/dist/$nm.app&quot;</span> <span class="o">]</span>; <span class="k">then</span>
      ./mozilla/dist/<span class="nv">$nm</span>.app/Contents/MacOS/thunderbird-bin <span class="nv">$*</span>
      <span class="nb">break</span>;
    elif <span class="o">[</span> -d <span class="s2">&quot;../objdir-$currdir/mozilla/dist/$nm.app&quot;</span> <span class="o">]</span>; <span class="k">then</span>
      ../objdir-<span class="nv">$currdir</span>/mozilla/dist/<span class="nv">$nm</span>.app/Contents/MacOS/thunderbird-bin <span class="nv">$*</span>
      <span class="nb">break</span>;
    <span class="k">fi</span>
<span class="k">  done</span>
<span class="o">}</span>
</pre></div>
</td></tr></table></div>
<div class="storyFoot">[Posted at 10:20 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/zsh.html">link and comments</a> (0 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Fri, 16 Apr 2010</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="personas" href="http://weblog.latte.ca/blake/tech/thunderbird/personas.html"><b>Cool stuff coming soon.</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p>I’ve been reviewing a patch from <a href="http://www.andreasn.se/blog/">Andreas</a>
   and <a href="http://ccgi.standard8.plus.com/blog/">Standard8</a> which adds
   lightweight theme support (aka personas) to Thunderbird.  It’s so cool that
   I couldn’t resist taking a screenshot, and posting it for you all to see!
</p>
<p><img src="/images/blake/Thunderbird/Personas.png" title="Oooh, fancy." alt="Pretty new persona"/>
</p>
<p>It looks like there’s a good chance the code will make it in to Thunderbird
   3.1 beta 2, so with any luck, soon your Thunderbird will be a pretty as
   mine.
</p></div>
<div class="storyFoot">[Posted at 09:55 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/personas.html">link and comments</a> (2 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Sat, 03 Apr 2010</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="migrationAssistantV1" href="http://weblog.latte.ca/blake/tech/thunderbird/migrationAssistantV1.html"><b>Your feedback is needed on our new Migration Assistant!</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p>For the next version of Thunderbird, <a href="http://clarkbw.net/blog/">Bryan Clark</a>, <a href="http://www.andreasn.se/blog/">Andreas Nilsson</a>, and I have done a lot
   of work to make it easier to upgrade your profile from Thunderbird 2, and
   we would like to hear what you think of it, and how we can make it even
   better.
</p>
<p>There are some things we’re particularly interested in (mostly on the “Disk
   space” tab), such as:
</p>
<ol>
 <li>
     Are your existing settings preserved?
 </li>

 <li>
     If you have no previous settings do we choose “Do not Synchronize” by
     default?
 </li>

 <li>
     For those of you who choose not to synchronize your messages, does that appear to work correctly?
 </li>
</ol>
<p>We also have some more general questions, like:
</p>
<ol>
 <li>
     Does it look okay?  Do the sizes seem correct?
 </li>

 <li>
     Do the options make sense, and how can we make them clearer?
 </li>

 <li>
     Do the buttons work the way you think they should?
 </li>
</ol>
<p>You can download the builds for various Operating Systems at the following
   links:
</p>
<p><a href="http://s3.mozillamessaging.com/build/try-server/2010-03-31_18:40-bwinton@latte.ca-bw-MigAsst/bwinton@latte.ca-bw-MigAsst-mail-try-win32.installer.exe">Windows</a>
</p>
<p><a href="http://s3.mozillamessaging.com/build/try-server/2010-03-31_18:40-bwinton@latte.ca-bw-MigAsst/bwinton@latte.ca-bw-MigAsst-mail-try-mac.dmg">Mac OS X</a>
</p>
<p><a href="http://s3.mozillamessaging.com/build/try-server/2010-03-31_18:40-bwinton@latte.ca-bw-MigAsst/bwinton@latte.ca-bw-MigAsst-mail-try-linux.tar.bz2">Linux</a>
</p>
<p>And please leave your feedback on <a href="http://www.getsatisfaction.com/mozilla_messaging/topics/feedback_on_the_new_migration_assistant_for_people_upgrading_from_2_x_to_3_1">Mozilla Messaging’s GetSatsifaction
Topic</a>
   by the end of day on this coming Wednesday (April 7th), so that we have
   time to tweak the code and the design before the deadline.
</p>
<p>Thanks!
</p></div>
<div class="storyFoot">[Posted at 22:08 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/migrationAssistantV1.html">link and comments</a> (3 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Tue, 30 Mar 2010</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="WeiXian-VisualStudio" href="http://weblog.latte.ca/blake/tech/thunderbird/ucosp/WeiXian-VisualStudio.html"><b>Programming Thunderbird in Visual Studio.</b></a>
<div class="storyCategory">[/tech/thunderbird/ucosp]</div></div>
<div class="storyBody"><p>For your reading pleasure this week, we have a guest post from <a href="mailto:wxwoo@uwaterloo.ca">Wei Xian
Woo</a>.  Wei is a student working on
   <a href="http://www.mozillamessaging.com/">Thunderbird</a> as part of
   <a href="http://ucosp.wordpress.com/">UCOSP</a>, and has just had <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=408338">his first
bug</a> marked as
   FIXED.  Anyways, that’s enough out of me.  Here’s Wei’s post:
</p>
<blockquote>
<h3>Programming Thunderbird in Visual Studio.</h3>
<p>During this term’s Undergraduate Capstone Open Source Projects (UCOSP)
   Code Sprint held at the University of Toronto in January, I wrote a
   simple Python script for the Thunderbird team to make setting up a
   Visual C++ project for Thunderbird slightly easier for those of us
   working on Windows. Blake suggested making this script public so others
   could benefit from it, so here it is! The script is generic enough to be
   used for any project, not just Thunderbird. Feel free to use it and make
   modifications as you see fit :)
</p>

<h3>Using the script to create a Visual C++ project for Thunderbird</h3>
<p>Create an empty Visual C++ project in Visual Studio.
</p>
<p>From the command prompt launched by mozilla-buildstart-msvc9.bat, do:
</p>
<div class="codehilite"><pre>python /path/to/refreshvcproj.py
--vcproj=/path/to/thunderbird.vcproj --dir=/path/to/gecko-sdk
--dir=/path/to/mozilla/comm-central/mozilla/xpcom
--dir=/path/to/mozilla/comm-central/mail
</pre></div>
<p>All files in the specified directories will be included in the project.
   I suggest including only the directories you will be working with.
</p>

<h3>Configuring the project for debugging:</h3>
<p>Open the VC++ project file in Visual Studio, and then open the project's
   Properties.
</p>
<p>Go to: Configuration Properties -&gt; Debugging.
</p>
<p>Set Command to pathtoobjdirmozilladistbinthunderbird.exe
</p>
<p>Set Environment to XPCOM_DEBUG_BREAK=warn
</p>

<h3>And… you’re done!</h3>
<p>For better C++ IntelliSense, you might also want to consider getting
   Visual Assist X (an add-on for VS).
</p>

<h3>Happy coding!</h3>
</blockquote><p>And you can find the script <a href="/static/blake/refreshvcproj.py">over here</a>.
</p>
<p>Thanks, Wei!
</p></div>
<div class="storyFoot">[Posted at 10:11 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/ucosp/WeiXian-VisualStudio.html">link and comments</a> (0 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Wed, 10 Mar 2010</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="Debugging" href="http://weblog.latte.ca/blake/tech/thunderbird/Debugging.html"><b>How to (not quite) fix a bug.</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p>I’ve run into <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=545933">a bug</a>.  It’s a really annoying bug, because it prevents me from changing
   folders when I try to test any of my Thunderbird changes.
</p>
<p>I tried putting dump statements everywhere, to see if I could figure out
   what was going on, but they were to no avail.  Then, I thought about
   looking for the error code.
</p>
<p>So the <a href="http://silver.warwickcompsoc.co.uk/mozilla/misc/nserror?0x805E0006">error lookup page</a> says
   that the error that’s reported is:
</p>
<div class="codehilite"><pre>Module          Severity        Number
CONTENT (25)    Failure (1)     6
</pre></div>
<p>And
   <a href="http://scotland.proximity.on.ca/dxr/mozilla-central/content/base/public/nsContentErrors.h.html#l59">DXR</a>
   says that Content Error 6 is:
       NS_ERROR_CONTENT_BLOCKED
</p>
<p>Which occurs, among other places,
   <a href="http://mxr.mozilla.org/comm-central/source/mozilla/content/base/src/nsDocument.cpp#1129">here</a>
</p>
<p>But when I set a breakpoint there, it didn’t hit it.  So instead of
   trusting mxr or dxr, I did a grep (well, an ack, but same thing), and
   started setting breakpoints on a few of the hits.
</p>
<p>The one that hit my breakpoint ended up being <a href="http://mxr.mozilla.org/comm-central/source/mozilla/docshell/base/nsDocShell.cpp#7643">this
one</a>
   which, weirdly enough, isn’t even listed in the mxr results of <a href="http://mxr.mozilla.org/comm-central/ident?i=NS_ERROR_CONTENT_BLOCKED">this
search</a>
</p>
<p>Now that I’m at the breakpoint, we’re halfway there, I hope.  ;)
</p>
<p>How I got there was:
</p>
<div class="codehilite"><pre>(gdb) bt
#0  nsDocShell::InternalLoad (…) at …/mozilla/docshell/base/nsDocShell.cpp:7643
#1  0x152d9daa in nsDocShell::LoadURI (…) at …/mozilla/docshell/base/nsDocShell.cpp:1369
#2  0x13dc7581 in nsLocation::SetURI (…) at …/mozilla/dom/base/nsLocation.cpp:316
#3  0x13dc8af3 in nsLocation::SetHrefWithBase (…) at …/mozilla/dom/base/nsLocation.cpp:595
#4  0x13dc8cf9 in nsLocation::SetHrefWithContext (…) at …/mozilla/dom/base/nsLocation.cpp:542
#5  0x13dc9120 in nsLocation::SetHref (…) at …/mozilla/dom/base/nsLocation.cpp:510
#6  0x003fa28e in NS_InvokeByIndex_P (…) at …/mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_unixish_x86.cpp:179
#7  0x120f88bb in XPCWrappedNative::CallMethod (…) at …/mozilla/js/src/xpconnect/src/xpcwrappednative.cpp:2727
#8  0x1210c0c6 in XPCWrappedNative::SetAttribute (…) at xpcprivate.h:2550
#9  0x12105530 in XPC_WN_GetterSetter (…) at …/mozilla/js/src/xpconnect/src/xpcwrappednativejsops.cpp:1792
#10 0x001141a7 in js_Invoke (…) at jsinterp.cpp:1388
[…]
</pre></div>
<p>And it looks like we get there because the return value of
   NS_CheckContentLoadPolicy is 0x80004003, or NS_ERROR_INVALID_POINTER.
</p>
<p>Then, after dinner, I tracked it down a little further, and if you place a
   breakpoint on the “\n\nAAAAAA\nrv5=%x\n” line in <a href="https://bug545933.bugzilla.mozilla.org/attachment.cgi?id=427516">this patch</a>, you can
   see that it’s the folder = do_QueryInterface(subFolder, &amp;rv); line
   which is causing the failure, because the subFolder’s mRawPtr is null.
</p>
<p>But I have no idea why <em>that</em>’s happening, so I posted what I had, and
   hoped that someone else could take it and run with it.  And Bienvenu did,
   and now it’s much less of a problem for me, and I can go work on other
   things.
</p></div>
<div class="storyFoot">[Posted at 22:17 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/Debugging.html">link and comments</a> (0 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Sun, 20 Dec 2009</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="folderModes" href="http://weblog.latte.ca/blake/tech/thunderbird/folderModes.html"><b>How folder modes work.</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p>Earlier today, I was asked by <a href="http://www.andreasn.se/blog/">Andreas Nilsson</a> to give him a hand with a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=535021">folder pane header
bug</a> he was trying to
   fix.  In the middle of digging around in the code, I thought “I should
   really write this down, so that I can understand it later.”, and so here it
   is.
</p>
<p>The main place we’ll need to change is in <a href="http://mxr.mozilla.org/comm-central/source/mail/base/content/folderPane.js#55">this object</a>.
</p>
<p>We start in the <a href="http://mxr.mozilla.org/comm-central/source/mail/base/content/folderPane.js#60"><tt>load</tt></a>
   method, which calls <a href="http://mxr.mozilla.org/comm-central/source/mail/base/content/folderPane.js#67"><tt>registerMode</tt></a>,
   to add the mode with its localized name.  There is also a <a href="http://mxr.mozilla.org/comm-central/source/mail/base/content/folderPane.js#984">default list of
modes</a>,
   which will come into play later.
</p>
<p>When the user chooses to <a href="http://mxr.mozilla.org/comm-central/source/mail/base/content/folderPane.js#200">cycle the mode</a>,
   it calls the <a href="http://mxr.mozilla.org/comm-central/source/mail/base/content/folderPane.js#250">setter for <tt>mode</tt></a>,
   passing it the modename, which comes from the <tt>_modeNames</tt> list
   (which contains both the defaults and any newly-registered modes).  Then,
   in the setter, if the mode is a default mode, it will fail <a href="http://mxr.mozilla.org/comm-central/source/mail/base/content/folderPane.js#254">the if-test</a>,
   and get the localized name from the “bundle_messenger” string bundle.  If
   it’s a newly-registered mode, they will have passed in a localized name
   which we will have stored in <a href="http://mxr.mozilla.org/comm-central/source/mail/base/content/folderPane.js#178"><tt>this._modeDisplayNames</tt></a>,
   and so we will <a href="http://mxr.mozilla.org/comm-central/source/mail/base/content/folderPane.js#255">use that</a>.
</p>
<p>The point of the bug is to switch the label-and-two-buttons to a dropdown
   menu, so at this point I think we should start with an empty
   <tt>menulist</tt> in the XUL, and in the <tt>load</tt> method add
   <tt>menuitems</tt> corresponding to the values in the <tt>_modeNames</tt>
   array.  Then, in the <tt>registerMode</tt> and <a href="http://mxr.mozilla.org/comm-central/source/mail/base/content/folderPane.js#187"><tt>unregisterMode</tt></a>
   methods, we should add and remove new menuitems, which I’m hoping will just
   automatically show up in the dropdown.  Finally, we need to change the
   setter for <tt>mode</tt> to not calculate the new name, but just select the
   appropriate menuitem set the <tt>mode</tt> attribute on the
   <tt>_treeElement</tt>, and call <tt>_rebuild()</tt>.  At that point, I
   think we’re done, but only time will tell.
</p>
<p><small>Okay, so this was really posted on Dec 22<sup>nd</sup>, but I wanted
   to back-date it so as not to bump Amy’s “Welcome” post off the top a mere
   day after she posted it.</small>
</p></div>
<div class="storyFoot">[Posted at 16:45 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/folderModes.html">link and comments</a> (0 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Thu, 10 Dec 2009</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="Experiments" href="http://weblog.latte.ca/blake/tech/opengl/Experiments.html"><b>Experiments in OpenGL (on the iPhone 3GS).</b></a>
<div class="storyCategory">[/tech/opengl]</div></div>
<div class="storyBody"><p>While I was at the Toronto iPhone Tech Talks, I attended the OpenGL ES
   sessions by <a href="http://twitter.com/funnest">Allan Schaffer</a>.  Seeing the
   “Shock” demo was really inspiring, and caused me to want to try my
   hand at some simple OpenGL Shader demos.
</p>
<p>The base XCode OpenGL ES Application template sets you up pretty
   nicely for some simple experimentation, the only things that gave me
   any trouble were:
</p>
<ol>
 <li><p>remembering to set the identifier to ca.latte.whatever so that I
   could build, and
</p>

 </li>

 <li><p>remembering that the OpenGL ES 2.0 path only ran on the device, so
   of course none of the changes I was making were showing up on the
   simulator<sup id="fnr1-874529948"><a href="#fn1-874529948">1</a></sup>, and finally
</p>

 </li>

 <li><p>Figuring out that depth was position.w, and not position.z.  (Did I
   mention that I’m a bit of a newbie at this?)
</p>

 </li>
</ol>
<p>Anyways, after it was all up and running, I made the x and w
   co-ordinates vary on a different period than the y co-ordinate, and
   now the square moves around in 3 dimensions in a pleasing (to me) way.
</p>
<p><img src="/images/blake/iTouch/OpenGL/1-square.jpg" title="A square, that’s all." alt="A pretty square."/>
</p>
<p>Since this is intended for me to play around with shaders, I’m not
   going to bother updating the OpenGL ES 1.0 code path, but if you’ve
   got an iPhone 3GS, or a 3rd generation iTouch, feel free to grab the
   code at <a href="http://bitbucket.org/bwinton/opengl/">BitBucket</a>, and play
   around.  I'll be adding branches and tags and keeping it updated as I
   play with new stuff.
</p>

<div class="footnote"><hr/><ol>
 <li id="fn1-874529948"><p><a href="http://twitter.com/runmad">Rune</a> let me know that Open GL ES
   2.0 is supported in the latest version of the simulator.  I guess I
   must have been testing with an earlier version of the SDK, or XCode,
   or something.<a href="#fnr1-874529948" class="footnoteBackLink" title="Jump back to footnote 1 in the text">&#8617;</a>
</p>

 </li>
</ol>
</div></div>
<div class="storyFoot">[Posted at 13:16 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/opengl/Experiments.html">link and comments</a> (0 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Wed, 28 Oct 2009</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="firstCommit" href="http://weblog.latte.ca/blake/tech/thunderbird/firstCommit.html"><b>More hurray!</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p><a href="http://weblog.latte.ca/blake/tech/thunderbird/FirstPatch">A while ago</a> I had my
   first patch to Thunderbird committed.
</p>
<p><a href="http://hg.mozilla.org/releases/comm-1.9.1/pushloghtml?startdate=2009-10-28+11%3A00&amp;enddate=2009-10-28+11%3A20">Today</a> I pushed my first patch, all by myself.
</p>
<p>It’s kind of exciting, having checkin privileges.  It means that I
   don’t have to wait for someone else to check in my changes once
   they’re accepted.  But on the downside, it means that I’m the one who
   has to do the commit, and watch the <a href="http://tinderbox.mozilla.org/showbuilds.cgi?tree=Thunderbird3.0">Tinderbox</a>, and
   if anything goes wrong, I’m even more on the hook than I previously
   was.  (Well, that last part isn’t really true, but I feel way more
   nervous than when I could just add “checkin-needed” to the bug, and
   not worry about it anymore.)  And basically there’s just a lot of new
   stuff for me to keep track of, and figure out.  But since anything I
   do is going to show up in the official history, I need to figure it
   out <em>before</em> I do it, which always adds a little pressure, which in
   this case is probably a good thing.
</p></div>
<div class="storyFoot">[Posted at 14:57 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/firstCommit.html">link and comments</a> (0 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Sat, 26 Sep 2009</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="buildingFast" href="http://weblog.latte.ca/blake/tech/thunderbird/buildingFast.html"><b>Building Thunderbird Faster</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p>I’m always looking for ways to speed up my Mozilla build, since it allows
   me to test my changes even quicker.  I was really excited when I found out
   about <tt>make -s tier_app</tt>, since it sped up my compiles by a huge
   amount.
</p>
<div class="codehilite"><pre>make
real    10m22.630s
user    4m28.072s
sys     1m27.807s
</pre></div>
<p>vs.
</p>
<div class="codehilite"><pre>make -s tier_app
real    0m14.426s
user    0m6.502s
sys     0m3.957s
</pre></div>
<p>But yesterday, on IRC, I heard about <tt>libs_tier_app</tt>, which is ever
   faster, if you haven’t changed any IDL files (which I usually don’t).
</p>
<div class="codehilite"><pre>make -s libs_tier_app
real    0m9.407s
user    0m5.440s
sys     0m3.065s
</pre></div>
<p>Okay, it’s not nearly as good as going from 10 and a half minutes to 15
   seconds, but a 30% (or is it 50%) speedup is still nothing to sneer at.
</p></div>
<div class="storyFoot">[Posted at 13:57 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/buildingFast.html">link and comments</a> (0 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Wed, 23 Sep 2009</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="3.0b4" href="http://weblog.latte.ca/blake/tech/thunderbird/3.0b4.html"><b>Thunderbird 3.0 beta 4!</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p>I’ve been doing <a href="http://moxie.fligtar.com/thunderbird/3.0b4-blockers//sort:bugsFixed">a lot of work</a>
   recently, in preparation for the next (and last!) beta of Thunderbird 3,
   and I’m happy to announce that <a href="http://ccgi.standard8.plus.com/blog/archives/270">it was released</a> yesterday!
</p>
<p><img src="/images/blake/TB3.0b4.png" title="The Update Notification." alt="Update now!"/>
</p>
<p>The reviews from <a href="http://lifehacker.com/5365214/thunderbird-3-beta-4-available-for-download">LifeHacker</a>
   and <a href="http://arstechnica.com/open-source/reviews/2009/09/hands-on-thunderbird-3-beta-4-hatches-with-improved-search.ars">Ars Technica</a>
   have been positive, which is always gratifying to see on something you’ve
   spent a lot of time on.
</p>
<p>For more information, check out the <a href="https://developer.mozilla.org/en/Thunderbird_3_for_users">Thunderbird 3 for
Users</a> page, or
   the <a href="http://www.mozillamessaging.com/en-US/thunderbird/3.0b4/releasenotes/">Release Notes</a> for
   beta 4.
</p></div>
<div class="storyFoot">[Posted at 15:21 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/3.0b4.html">link and comments</a> (0 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Mon, 21 Sep 2009</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="pbranch" href="http://weblog.latte.ca/blake/tech/thunderbird/pbranch.html"><b>More notes on Mercurial.</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p>Recently, I made some changes to <a href="http://weblog.latte.ca/blake/tech/thunderbird/mercurial">my work flow</a> to get around
   some slight annoyances.  Specifically, I switched from using <a href="http://mercurial.selenic.com/wiki/MqExtension">mq</a> to using <a href="http://arrenbrecht.ch/mercurial/pbranch/">pbranch</a>.  The features that pbranch
   gives me that mq didn’t basically boil down to two main things;
   sharing, and tracking.
</p>
<p>With pbranch, it’s way easier for me to share my changes, both with
   other people, and with myself in a virtual machine.  It <em>is</em> possible
   to share the patch with mq, by cloning the patch repo if I remembered
   to run qinit -C, but with pbranch all I have to do is clone the main
   repo, and my changes are right there, waiting for me.
</p>
<p>For tracking, when I’m nearing the end of a patch, and it mostly
   works, I get really nervous if I can’t check in my changes.  With mq,
   I set up an alias to let me commit the patch queue, so that I could go
   back, but it was really hard to tell what I had changed between any
   two commits, since it was showing me the diff of my diffs.  And so I
   didn’t use it as much as I would like to.  With pbranch, I just commit
   the code, like I want to, and it keeps track of what the patch should
   look like.
</p>
<p>So, my day-to-day workflow now looks more like this:<br/>
   If I’m working on a bug that I’ve already got a patch started for, I
   cd to the appropriate branch, type <tt>hg pgraph</tt> to see where I
   am, and <tt>hq update branchname</tt> to get to the pbranch I want to
   work on.  Then I make my changes, and when I’m happy with the results
   of <tt>hg diff</tt>, I type <tt>hg commit</tt> to put the changes into
   the pbranch.  After that, I use <tt>hg pdiff &gt;
   ../branch-name-bugnum-description.diff</tt> to get a patch that I can
   upload to bugzilla.  At this point, I usually load the patch into Vim,
   and search for some of the mistakes I’ve made in the past.
   (<tt>/^+.*[[:space:]]+$</tt>, and <tt>/dump</tt> caught a lot of my
   initial mistakes.  Now I’ve moved on to things that are tougher to
   check for, like putting open-parens on a new line instead of on the
   previous line.)  I usually go through a couple of cycles of <tt>hg
   commit</tt>/<tt>hg pdiff …</tt> before I’m happy with the patch.  Once
   I am, I don’t have to type anything before I upload it, since it’s
   already committed.
</p></div>
<div class="storyFoot">[Posted at 11:48 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/pbranch.html">link and comments</a> (0 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Mon, 14 Sep 2009</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="vms" href="http://weblog.latte.ca/blake/tech/thunderbird/vms.html"><b>Another reason to use Mercurial (or Git or Bazaar)</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p>A lot of the code I write for <a href="http://mozillamessaging.com/">Thunderbird</a>
   has to work on <a href="http://www.mozillamessaging.com/en-US/thunderbird/all.html">all</a> the platforms
   it supports.  Since I don’t own a <a href="http://www.ubuntu.com/">Linux</a> or
   <a href="http://www.microsoft.com/windows/windows-7">Windows</a> box, and don’t really
   want to waste the hard drive space on my <a href="http://www.apple.com/ca/macbookpro/specs.html">MacBook Pro</a> with a dual- or triple-boot
   setup, I’ve decided to install the other operating systems on virtual
   machines.  (I’ve chosen <a href="http://www.virtualbox.org/">VirtualBox</a>, because
   it’s free, and I’m cheap.  As an added bonus, it works quite well, too.)
</p>
<p>If I was forced to use a centralized version control system, this would
   lead to a bunch of pain, since I wouldn’t want to check in a half-finished
   patch, but I would still really want to see what changes I made for one OS,
   to try and figure out what changes I need to make for the others.  And I
   would want to be able to keep a record of what I did, step by step, so that
   I could undo stuff if it turned out to be a bad idea.  (Hey, that sounds
   like a perfect task for a version control system!  ;)
</p>
<p>Since Mozilla uses <a href="http://mercurial.selenic.com/">Mercurial</a>, I didn’t
   have to deal with any of that.  I had my repository on the host machine,
   which I had cloned from the main repo, and I just cloned it into each of
   the virtual machines.  Whenever I started a VM, I pulled the latest set of
   changes from the host machine; As I fixed stuff on that platform, I
   committed to the repository on the virtual machine; And before I shut down
   the VM, I pushed my changes back to the host machine.  When I wanted to see
   which changes I made to get things working for the platform, it was easy,
   and propagating those changes to the other virtual machines was also easy.
</p>
<p>When people talk about the advantages of distributed version control, a lot
   of the time they mention being able to still commit your changes when
   you’re on an airplane, and sharing in-progress changes with other people,
   but for people like me who do mainly self-contained stuff and don’t fly
   anywhere, supporting multi-platforms with virtual machines and still being
   able to track my changes might just be the killer feature.
</p></div>
<div class="storyFoot">[Posted at 12:12 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/vms.html">link and comments</a> (2 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Mon, 03 Aug 2009</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="twitterFail" href="http://weblog.latte.ca/blake/tech/twitterFail.html"><b>That can’t be good.</b></a>
<div class="storyCategory">[/tech]</div></div>
<div class="storyBody"><p>I don’t know what happened there, but it doesn't look quite right to me.
   <img src="/images/blake/twitterFail.png" title="What happened to twitter?!?" alt="WTF?"/>
   Well, it’s fixed now, so I guess no harm, no foul, right?
</p></div>
<div class="storyFoot">[Posted at 12:42 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/twitterFail.html">link and comments</a> (0 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Tue, 21 Jul 2009</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="3.0b3" href="http://weblog.latte.ca/blake/tech/thunderbird/3.0b3.html"><b>Thunderbird 3.0 beta 3 shipped!</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p><a href="http://www.mozillamessaging.com/en-US/about/press/archive/2009-07-21-01">It’s true</a>,
   after a lot of hard work, and a few hard decisions, the first version of
   Thunderbird that has code of mine in it has shipped.  Dan Mosedale has
   <a href="http://weblogs.mozillazine.org/dmose/archives/2009/07/thunderbird_30b3_shipped.html">some comments</a>
   on what’s changed.  If you like Thunderbird, please download it, give it a try,
   and let me know what you think!
</p>
<p>On a more personal note, the thing I did on this release that I’m the most
   proud of was to add a button that lets you reply to a mailing list.
</p>
<p><img src="/images/blake/ReplyToList3.0b3.png" title="The Reply-To-List Button." alt="Reply to a mailing list"/>
</p>
<p>I’m proud of it because it feels like a neat-but-still-usable UI, and because
   it is one more step on the road to getting people to change their mailing lists
   to <a href="http://woozle.org/~neale/papers/reply-to-still-harmful.html">not munge the Reply-To header</a>.  (With this
   patch, you are given the option of replying to the list, or the author.  Unless
   the list has set the Reply-To to point to the list, in which case you can only
   mail the list.)
</p>
<p>A couple of the other areas I worked on for this release were updating the
   Activity Manager so that it didn’t hang when you clicked “Clear Now”, and
   so that it merged a bunch of move/copy/delete notifications into a single
   notification that told you how many messages had been processed; and fixing
   a some layout and logic bugs in the Autoconfig dialog (which you get to
   from “File » New » Mail Account (Quick Setup)…”).  Yeah, the Autoconfig
   dialog is still kind of ugly, but it’s better now than it used to be, and
   I’m working on making it prettier for beta 4.
</p></div>
<div class="storyFoot">[Posted at 21:13 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/3.0b3.html">link and comments</a> (1 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Tue, 07 Jul 2009</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="jobAtMomo" href="http://weblog.latte.ca/blake/employment/mozilla/jobAtMomo.html"><b>My first couple of days at Mozilla Messaging.</b></a>
<div class="storyCategory">[/employment/mozilla]</div></div>
<div class="storyBody"><p>A few weeks ago I started a new full-time contract at <a href="http://mozillamessaging.com/">Mozilla
Messaging</a> (a.k.a. the people who brought you
   Thunderbird).  I meant to post this on the Wednesday after I started, but
   didn’t get around to it until now.  So, here you go, my notes from just
   after I started a new job.
</p>
<p>It has been a pretty crazy couple of days, both because I’m not that used
   to working for a full 8 hours on one thing, and because I’m at the point
   where there’s still so much to learn that I could spend all my time
   researching stuff, and never get anything done.
</p>
<p>But even with all the stuff for me to learn, I feel like I’ve made a fair
   bit of progress.  There were a few bugs assigned to me, based on <a href="http://hg.mozilla.org/comm-central/rev/98a7de404c08">a
previous patch</a>, as
   well as a couple of things left to do to get <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=45715">the feature</a> working, so I jumped
   right in to those.  After I had new patches up for review on all of those
   bugs, I talked with <a href="http://clarkbw.net/blog/">Bryan Clark</a> about what bugs
   I should tackle next.  He and <a href="http://ascher.ca/blog/">David Ascher</a> both
   suggested that the new <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=autoconfig">automatic mail server config</a> dialog could use a
   bit of love.
</p>
<p>This morning, I did some investigation on group email addresses for <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=496440">one of
the bugs</a> I’m working
   on, and took a look at how the autoconfig dialog was put together so that I
   wouldn’t sound like I was completely lost in the meeting.  (XUL, CSS, and
   Javascript.  No surprises there.  :)  Then, after the <a href="https://wiki.mozilla.org/Thunderbird/StatusMeetings/2009-06-09">Status
Meeting</a>,
   Bryan and I chatted a bit about what the various bugs were that he had
   assigned to me, and what sort of things I might look into to try and fix
   them.  A few hours later, I had a fix for <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=490105">one of them</a>, and applied a similar
   fix to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=490106">another</a>.  (As
   an aside, you’ve got to love the 3 hour investigation which ends up being a
   9-character change.  At least while investigating the bug, I learned a lot
   about <a href="https://developer.mozilla.org/en/XUL/hbox">hboxes</a>, <a href="https://developer.mozilla.org/en/XUL/vbox">vboxes</a>, <a href="https://developer.mozilla.org/en/XUL/Attribute/flex">flexes</a>, <a href="https://developer.mozilla.org/en/XUL/grid">grids</a>, and <a href="https://developer.mozilla.org/en/XUL/description">descriptions</a>, which will hopefully
   come in handy in future bugs.  :)  Finally, I ended the day by reading a
   review of a patch I submitted on Monday morning, making some tweaks to my
   code, and resubmitting it.
</p>
<p>The final thing that amazes me is that each day is taking up pretty much a
   full page of my log book, which is <em>way</em> more than usual.  Most of the days
   last month got a line or two.  Really full days would maybe get half a
   page.  But yesterday and today were a solid page, chock full of
   information, each.  I wonder how long this trend will continue.  I hope it
   keeps on going like this for a long time.
</p></div>
<div class="storyFoot">[Posted at 00:04 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/employment/mozilla/jobAtMomo.html">link and comments</a> (0 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Mon, 06 Jul 2009</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="soy" href="http://weblog.latte.ca/blake/random/soy.html"><b>An odd coincidence?</b></a>
<div class="storyCategory">[/random]</div></div>
<div class="storyBody"><p>I have a theory.  (No, it’s not bunnies.)  One of my favourite foods is soy
   beans.  I love it both because they’re tasty, and because they’re so
   changeable.  I mean, what other substance can be used to make a hard white
   solid (tofu), and a viscous black liquid (soy sauce)?  Hey, waitaminnute.
   “Soy beans” are oil!  It’s all just different names for petrochemicals!
</p></div>
<div class="storyFoot">[Posted at 10:50 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/random/soy.html">link and comments</a> (4 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Tue, 30 Jun 2009</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="mercurial" href="http://weblog.latte.ca/blake/tech/thunderbird/mercurial.html"><b>How I use Mercurial (and the MQ extension).</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p>I started working for <a href="http://www.mozillamessaging.com">Mozilla Messaging</a> a
   while ago, and since <a href="http://blog.codekills.net/">David Wolever</a> <a href="http://twitter.com/wolever/status/2394705659">asked
me</a> how I used Mercurial and the
   MQ extension, I thought I would put up some notes on how I’m currently using
   them in my day-to-day work.  Of course, the stuff I’m doing now is a little
   different than what I’ve done in any of my previous jobs, so I’m not sure how
   useful any of the following will be to anyone who isn’t contributing to an open
   source project.
</p>
<p>First, let’s talk a little bit about how I have my Work directory set up.  The
   first thing I did when I started working on the Thunderbird source code was to
   pull down a clean copy of the source into a directory named “src-base”.  The
   purpose of that directory is to always contain a clean copy of the upstream
   source code so that when I want to update the various branches I have (five, at
   last count), I only need to download the changes from the Mozilla repo once,
   and I can then propagate them from src-base to the other branches.  I got the
   idea to do that from the Bazaar-NG developers, and I think it has helped to
   keep my bandwidth usage down.  It might cause a problem if I was sharing my
   branches, but since Thunderbird seems to revolve around submitting patches to
   bugzilla, it works out pretty well.
</p>
<p>The next thing I did was to clone src-base into a directory named
   “add-reply-list-button” (because I was writing a patch to add a Reply-To-List
   button :), go into that directory, and type <tt>hg qinit -c</tt> to create an
   mq repository, and put the mq repository itself under version control.  (I
   didn’t actually do that the first time, and was quite annoyed that I couldn’t
   revert changes I had made in my patch queue.)  The other part of that is that
   I’ve aliased <tt>mq</tt> to <tt>hg -R $(hg root)/.hg/patches</tt>.  This lets
   me type <tt>mq commit</tt> to commit the changes to the patch.
</p>
<p>So, now we’re at my day-to-day work.  If I’m working on a bug that I’ve already
   got a patch started for, I cd to the appropriate branch, type <tt>hg
   qseries</tt> to see where I am, and <tt>hq qpush</tt> or <tt>hg qpop</tt> to
   get to the patch I want to work on.  Then I make my changes, and when I’m happy
   with the results of <tt>hg diff</tt>, I type <tt>hg qrefresh</tt> to put the
   changes into the patch.  After that, I use <tt>hg qdiff &gt;
   ../branch-name-bugnum-description.diff</tt> to get a patch that I can upload to
   bugzilla.  At this point, I usually load the patch into Vim, and search for
   some of the mistakes I’ve made in the past.  (<tt>/^+.*[[:space:]]+$</tt>, and
   <tt>/dump</tt> caught a lot of my initial mistakes.  Now I’ve moved on to
   things that are tougher to check for, like putting open-parens on a new line
   instead of on the previous line.)  I usually go through a couple of cycles of
   <tt>hg qrefresh</tt>/<tt>hg qdiff …</tt> before I’m happy with the patch.  Once
   I am, I type <tt>mq commit -m "Updated patch to fix foo and bar."</tt> to save
   the state of the patch, and then I upload it.
</p></div>
<div class="storyFoot">[Posted at 22:31 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/mercurial.html">link and comments</a> (3 comments) </div>
</div>
</div>
</div>
<div class="blosxomDayDiv">
<div class="blosxomDate">Fri, 29 May 2009</div>
<div class="story">
<div class="xfolkentry">
<div class="storyTitle"><a class="taggedlink" name="FirstPatch" href="http://weblog.latte.ca/blake/tech/thunderbird/FirstPatch.html"><b>Hurray!  (A technical diversion.)</b></a>
<div class="storyCategory">[/tech/thunderbird]</div></div>
<div class="storyBody"><p>It took a while, but my <a href="http://hg.mozilla.org/comm-central/rev/98a7de404c08">first patch to Thunderbird</a> was committed today!
</p>
<div class="codehilite"><pre>changeset:   2727:98a7de404c08
user:        Blake Winton &lt;bwinton@latte.ca&gt;
date:        Fri May 29 10:35:37 2009 +0100
summary:     Bug 45715 - &quot;&quot;Reply to List&quot; [button/(context) menu item]&quot;
             [r=mkmelin,sr=bienvenu,ui-review=clarkbw]
</pre></div>
<p>The patch started off by adding a “Reply to List” button to the message
   header pane as seen below, but after some discussion, the scope was
   expanded to change the “Reply” button to “Reply All” or “Reply to List”,
   depending on the message you’re currently viewing.
</p>
<p><img src="https://bug45715.bugzilla.mozilla.org/attachment.cgi?id=364625" title="Reply to List" alt="First cut of the Reply to List button"/>
</p>
<p>Of course, there’s still some things I’ve got to add, but those can go in a
   separate patch, which will be much smaller, and so much easier to get
   reviewed and committed.  And once it is, we might be able to close a
   <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=45715">9-year old bug</a>,
   which would be pretty sweet.
</p></div>
<div class="storyFoot">[Posted at 10:25 by <span class="vcard"><a class="url fn" href="http://bwinton.latte.ca/">Blake Winton</a></span>] <a href="http://weblog.latte.ca/blake/tech/thunderbird/FirstPatch.html">link and comments</a> (0 comments) </div>
</div>
</div>
</div>
  </div>
  <div class="footer">
   <div class="footBox">
    <div class="footTitle">Categories:</div><br />
    <a href="http://weblog.latte.ca/">/</a> (644)<br /><a href="http://weblog.latte.ca/amy">amy/</a> (338)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/books">books/</a> (83)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/books/_2005">_2005/</a> (31)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/books/_2006">_2006/</a> (13)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/books/_2007">_2007/</a> (6)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/books/_2008">_2008/</a> (6)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/books/_2009">_2009/</a> (23)<br />&#160;&#160;&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/books/_2009/covers">covers/</a><br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/books/_2010">_2010/</a> (3)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/books/children">children/</a> (1)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/career">career/</a> (4)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/cordelia">cordelia/</a><br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/cordelia/conversations">conversations/</a><br />&#160;&#160;<a href="http://weblog.latte.ca/amy/daytoday">daytoday/</a> (1)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/delphine">delphine/</a><br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/delphine/conversations">conversations/</a><br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/delphine/pictures">pictures/</a><br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/delphine/sleeping">sleeping/</a><br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/delphine/writes">writes/</a><br />&#160;&#160;&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/delphine/writes/images">images/</a><br />&#160;&#160;<a href="http://weblog.latte.ca/amy/diversions">diversions/</a> (36)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/everythingelse">everythingelse/</a> (96)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/food">food/</a> (10)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/girls">girls/</a> (22)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/girls/positiveParenting">positiveParenting/</a> (3)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/houseandhome">houseandhome/</a> (38)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/houseandhome/garden">garden/</a> (5)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/houseandhome/reno">reno/</a> (18)<br />&#160;&#160;&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/houseandhome/reno/deck">deck/</a> (12)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/letters">letters/</a> (4)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/news">news/</a> (6)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/running">running/</a> (16)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/stuff">stuff/</a> (3)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/unsolicited advice">unsolicited advice/</a> (10)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/amy/unsolicited advice/food">food/</a> (2)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/whingeing">whingeing/</a> (5)<br />&#160;&#160;<a href="http://weblog.latte.ca/amy/writing">writing/</a> (2)<br /><a href="http://weblog.latte.ca/blake">blake/</a> (149)<br />&#160;&#160;<a href="http://weblog.latte.ca/blake/camera">camera/</a> (2)<br />&#160;&#160;<a href="http://weblog.latte.ca/blake/employment">employment/</a> (9)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/employment/mozilla">mozilla/</a> (1)<br />&#160;&#160;&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/employment/mozilla/thunderbird">thunderbird/</a><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/employment/mozilla/thunderbird/ucosp">ucosp/</a><br />&#160;&#160;<a href="http://weblog.latte.ca/blake/family">family/</a> (8)<br />&#160;&#160;<a href="http://weblog.latte.ca/blake/random">random/</a> (52)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/random/biking">biking/</a> (29)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/random/bread">bread/</a> (1)<br />&#160;&#160;<a href="http://weblog.latte.ca/blake/reviews">reviews/</a> (3)<br />&#160;&#160;<a href="http://weblog.latte.ca/blake/tech">tech/</a> (75)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/tech/basie">basie/</a> (2)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/tech/bzr">bzr/</a> (3)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/tech/drproject">drproject/</a> (2)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/tech/iTouch">iTouch/</a> (9)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/tech/mac">mac/</a> (3)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/tech/opengl">opengl/</a> (1)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/tech/pEdit">pEdit/</a> (1)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/tech/progect">progect/</a> (1)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/tech/python">python/</a> (2)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/tech/scheme">scheme/</a> (3)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/tech/thunderbird">thunderbird/</a> (15)<br />&#160;&#160;&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/tech/thunderbird/ucosp">ucosp/</a> (1)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/blake/tech/weblog">weblog/</a> (7)<br /><a href="http://weblog.latte.ca/callOuts">callOuts/</a> (3)<br /><a href="http://weblog.latte.ca/charity">charity/</a> (2)<br /><a href="http://weblog.latte.ca/cordelia">cordelia/</a> (52)<br />&#160;&#160;<a href="http://weblog.latte.ca/cordelia/conversations">conversations/</a> (2)<br /><a href="http://weblog.latte.ca/delphine">delphine/</a> (94)<br />&#160;&#160;<a href="http://weblog.latte.ca/delphine/conversations">conversations/</a> (26)<br />&#160;&#160;<a href="http://weblog.latte.ca/delphine/pictures">pictures/</a> (8)<br />&#160;&#160;<a href="http://weblog.latte.ca/delphine/sleeping">sleeping/</a> (1)<br />&#160;&#160;<a href="http://weblog.latte.ca/delphine/writes">writes/</a> (2)<br />&#160;&#160;&#160;&#160;<a href="http://weblog.latte.ca/delphine/writes/images">images/</a><br /><a href="http://weblog.latte.ca/images">images/</a><br /><a href="http://weblog.latte.ca/template">template/</a><br /><a href="http://weblog.latte.ca/woody">woody/</a> (3)<br /><a href="http://weblog.latte.ca/yearInReview">yearInReview/</a>
   </div>
   <div class="footBox">
    <div class="footTitle">Links:</div><br />
     Local<br/>
     <ul class="sidebar">
      <li><a href="http://weblog.latte.ca/2004/01/15#about">About Blog-o!</a></li>
      <li><a href="http://arbrown.latte.ca/">Amy’s home page</a></li>
      <li><a href="http://bwinton.latte.ca/">Blake’s home page</a></li>
      <li><a href="http://delphine.latte.ca/">Delphine’s home page</a></li>
      <li><a href="http://baby.latte.ca/">Cordelia’s home page</a></li>
      <li><a href="http://arbrown.latte.ca/me.html">About Amy</a></li>
      <li><a href="http://arbrown.latte.ca/reading.html">Amy’s Book Log</a></li>
     </ul>
     Amy’s Journals<br/>
     <ul class="sidebar">
      <li><a href="http://www.tantastik.org/">Tan</a></li>
      <li><a href="http://www.darn-tootin.com/">Rob</a></li>
      <li><a href="http://www.whatsthefuss.com/">Fussy</a></li>
      <li><a href="http://www.eileene.net/">Iko</a></li>
      <li><a href="http://www.xeney.com/">Beth</a></li>
      <li><a href="http://mayaroo.diary-x.com/">mayaroo</a></li>
      <li><a href="http://fluff328.diaryland.com/">Ellie</a></li>
      <li><a href="http://www.analecta.net/">Stacey</a></li>
      <li><a href="http://www.hashai.com/">Anna Beth</a></li>
      <li><a href="http://leontinemay.blogspot.com/">Leontine</a></li>
      <li><a href="http://littleowl.com/thursday/">Other Beth</a></li>
      <li><a href="http://www.aproposofnothing.net/apropos/">Sasha</a></li>
     </ul>
     Amy’s Fun<br/>
     <ul class="sidebar">
      <li><a href="http://movie-reviews.colossus.net/movies.html">James
          Berardinelli's New Movie Reviews page</a></li>
      <li><a href="http://www.theusuals.net">The Usual Suspects</a></li>
     </ul>
    <a href="http://twitter.com/amyrhoda">amyrhoda's Twitter</a> (caching for another 0:19:34)<br />
<ul class="sidebar">
<li><a href="http://twitter.com/NoFlashCards/status/22829731428">@NoFlashCards</a> @alysonschafer and @alfiekohn I'm all about the book learnin'.</li>
<li><a href="http://twitter.com/AureliaCotta/status/22824803207">@AureliaCotta</a> Even just a newborn with no toddler is horrible without help! No-one should be expected to do it.</li>
<li><a href="http://twitter.com/nonelvis/status/22824466327">@nonelvis</a> Oooh, that's ironic.</li>
<li>I weep. RT @FreeRangeKids: Real photo of sign: Warning! Nature Ahead! http://bit.ly/bwVcEb</li>
<li><a href="http://twitter.com/AureliaCotta/status/22823410297">@AureliaCotta</a> Yeah, I was really swanning. And looking after a newborn, but that's not work!</li>
<li><a href="http://twitter.com/bwinton/status/22823716338">@bwinton</a> I guess you could. I don't know if they keep track of if you have an idle hausfrau.</li>
<li>@AureliaCotta I know, speechless, right?</li>
<li>It works, I threw out a bunch of electronics this morning! Awesome! RT @mayormiller: City ewaste ad ... http://bit.ly/9SAkyH</li>
<li>Do you know I can't claim childcare as a deduction if I'm just swanning about at home while my kid is in care? The gov't is so judgemental!</li>
<li>"... large photos of grinning African children that Salem took on her trips to Rwanda and Tanzania." What's wrong with this sentence?</li>
</ul>

    <a href="http://del.icio.us/bwinton">bwinton's Del.icio.us</a> (caching for another 0:54:10)<br />
<a href="http://del.icio.us/network?add=bwinton">Add me to your network</a><br/>
<ul class="sidebar">
<li><img src="http://markdownr.com/favicon.ico" height="16" width="16"/><a href="http://markdownr.com/">Markdownr</a><br/>Yeah, I should figure out how to do something like this for my blog posts.</li>
<li><img src="https://wiki.mozilla.org/favicon.ico" height="16" width="16"/><a href="https://wiki.mozilla.org/Raindrop/Install">Raindrop/Install - MozillaWiki</a><br/>It's like all the cool stuff I've worked with, all mashed together.</li>
<li><img src="http://www.adamatomic.com/favicon.ico" height="16" width="16"/><a href="http://www.adamatomic.com/canabalt/">Canabalt Widescreen!</a><br/></li>
<li><img src="http://www.canabalt.com/favicon.ico" height="16" width="16"/><a href="http://www.canabalt.com/">Canabalt!</a><br/></li>
<li><img src="http://arrenbrecht.ch/favicon.ico" height="16" width="16"/><a href="http://arrenbrecht.ch/mercurial/pbranch/index.htm">Patch Branches for Mercurial (pbranch)</a><br/>pbranch is the new mq!</li>
</ul>

    <a href="http://twitter.com/bwinton">bwinton's Twitter</a> (caching for another 0:19:34)<br />
<ul class="sidebar">
<li><a href="http://twitter.com/amyrhoda/status/22823161277">@amyrhoda</a> What about me, could I claim it?</li>
<li><a href="http://twitter.com/jonoxia/status/22821754962">@jonoxia</a> "Less."  ;)</li>
<li>RT @mhoye: The Toronto Downtown Cycling FAQ: http://exple.tive.org/blarg/?p=2355 #BikeTO</li>
<li>RT @jaygoldman: Apple has no presence in social (e.g.: who owns @apple?). Culture is totally closed. No surprise #ping is the same.</li>
<li><a href="http://twitter.com/michaelocc/status/22804158375">@michaelocc</a> I dunno yet.  I did, but waiting probably wouldn't hurt anyone.  (Well, no one other than Apple.  :)</li>
<li>RT @coffeeandios: #coffeeandios TODAY 4-7 pm at Starbucks King/Yonge. Come meet other iOS devs; share, socialize and learn! :)</li>
<li><a href="http://twitter.com/jaygoldman/status/22803068708">@jaygoldman</a> What are your thoughts on last.fm?</li>
<li><a href="http://twitter.com/bear/status/22799754657">@bear</a> I don't think the HIG ever applied to Apple's software.  At least, not since I started using Macs.</li>
<li><a href="http://twitter.com/runmad/status/22798915276">@runmad</a> I think the device you're really looking for is http://store.apple.com/us/configure/MC270LL/A?mco=MTgxNTgzNzk  ;)</li>
<li>Follower suggestions aren't really Recent Activity, so having them take up all that space at the top seems wrong to me. #thoughtsonitunes</li>
</ul>

   </div>

   <div class="footBox">
    <div class="footTitle">Archives:</div>
    <!-- div style="text-align:center">
     <table class="blosxomCalendar">
<tr>
<td align="left"><a href="http://weblog.latte.ca/2010/Jul">&lt;</a></td>
<td colspan="5" align="center" class="blosxomCalendarHead">August 2010</td>
<td align="right"><a href="http://weblog.latte.ca/2010/Sep">&gt;</a></td>
</tr>
<tr><td class="blosxomCalendarWeekHeader">Su</td><td class="blosxomCalendarWeekHeader">Mo</td><td class="blosxomCalendarWeekHeader">Tu</td><td class="blosxomCalendarWeekHeader">We</td><td class="blosxomCalendarWeekHeader">Th</td><td class="blosxomCalendarWeekHeader">Fr</td><td class="blosxomCalendarWeekHeader">Sa</td></tr>
<tr><td class="blosxomCalendarCell"> 1</td><td class="blosxomCalendarCell"> 2</td><td class="blosxomCalendarCell"> 3</td><td class="blosxomCalendarCell"> 4</td><td class="blosxomCalendarCell"> 5</td><td class="blosxomCalendarCell"> 6</td><td class="blosxomCalendarCell"> 7</td></tr>
<tr><td class="blosxomCalendarCell"> 8</td><td class="blosxomCalendarCell"> 9</td><td class="blosxomCalendarCell">10</td><td class="blosxomCalendarBlogged"><a href="http://weblog.latte.ca/2010/Aug/11">11</a></td><td class="blosxomCalendarCell">12</td><td class="blosxomCalendarCell">13</td><td class="blosxomCalendarCell">14</td></tr>
<tr><td class="blosxomCalendarCell">15</td><td class="blosxomCalendarCell">16</td><td class="blosxomCalendarCell">17</td><td class="blosxomCalendarCell">18</td><td class="blosxomCalendarCell">19</td><td class="blosxomCalendarCell">20</td><td class="blosxomCalendarCell">21</td></tr>
<tr><td class="blosxomCalendarCell">22</td><td class="blosxomCalendarCell">23</td><td class="blosxomCalendarCell">24</td><td class="blosxomCalendarBlogged"><a href="http://weblog.latte.ca/2010/Aug/25">25</a></td><td class="blosxomCalendarCell">26</td><td class="blosxomCalendarCell">27</td><td class="blosxomCalendarCell">28</td></tr>
<tr><td class="blosxomCalendarCell">29</td><td class="blosxomCalendarCell">30</td><td class="blosxomCalendarCell">31</td><td class="blosxomCalendarEmpty">&#160;</td><td class="blosxomCalendarEmpty">&#160;</td><td class="blosxomCalendarEmpty">&#160;</td><td class="blosxomCalendarEmpty">&#160;</td></tr>
</table>
    </div -->
    <div><a href="http://weblog.latte.ca/2010/Sep">2010-Sep</a><br />
<a href="http://weblog.latte.ca/2010/Aug">2010-Aug</a><br />
<a href="http://weblog.latte.ca/2010/Jul">2010-Jul</a><br />
<a href="http://weblog.latte.ca/2010/Jun">2010-Jun</a><br />
<a href="http://weblog.latte.ca/2010/Apr">2010-Apr</a><br />
<a href="http://weblog.latte.ca/2010/Mar">2010-Mar</a><br />
<a href="http://weblog.latte.ca/2010/Feb">2010-Feb</a><br />
<a href="http://weblog.latte.ca/2010/Jan">2010-Jan</a><br />
<a href="http://weblog.latte.ca/2009/Dec">2009-Dec</a><br />
<a href="http://weblog.latte.ca/2009/Nov">2009-Nov</a><br />
<a href="http://weblog.latte.ca/2009/Oct">2009-Oct</a><br />
<a href="http://weblog.latte.ca/2009/Sep">2009-Sep</a><br />
<a href="http://weblog.latte.ca/2009/Aug">2009-Aug</a><br />
<a href="http://weblog.latte.ca/2009/Jul">2009-Jul</a><br />
<a href="http://weblog.latte.ca/2009/Jun">2009-Jun</a><br />
<a href="http://weblog.latte.ca/2009/May">2009-May</a><br />
<a href="http://weblog.latte.ca/2009/Apr">2009-Apr</a><br />
<a href="http://weblog.latte.ca/2009/Mar">2009-Mar</a><br />
<a href="http://weblog.latte.ca/2009/Feb">2009-Feb</a><br />
<a href="http://weblog.latte.ca/2009/Jan">2009-Jan</a><br />
<a href="http://weblog.latte.ca/2008/Dec">2008-Dec</a><br />
<a href="http://weblog.latte.ca/2008/Nov">2008-Nov</a><br />
<a href="http://weblog.latte.ca/2008/Oct">2008-Oct</a><br />
<a href="http://weblog.latte.ca/2008/Sep">2008-Sep</a><br />
<a href="http://weblog.latte.ca/2008/Aug">2008-Aug</a><br />
<a href="http://weblog.latte.ca/2008/Jul">2008-Jul</a><br />
<a href="http://weblog.latte.ca/2008/Jun">2008-Jun</a><br />
<a href="http://weblog.latte.ca/2008/May">2008-May</a><br />
<a href="http://weblog.latte.ca/2008/Apr">2008-Apr</a><br />
<a href="http://weblog.latte.ca/2008/Mar">2008-Mar</a><br />
<a href="http://weblog.latte.ca/2008/Feb">2008-Feb</a><br />
<a href="http://weblog.latte.ca/2008/Jan">2008-Jan</a><br />
<a href="http://weblog.latte.ca/2007/Dec">2007-Dec</a><br />
<a href="http://weblog.latte.ca/2007/Nov">2007-Nov</a><br />
<a href="http://weblog.latte.ca/2007/Oct">2007-Oct</a><br />
<a href="http://weblog.latte.ca/2007/Sep">2007-Sep</a><br />
<a href="http://weblog.latte.ca/2007/Aug">2007-Aug</a><br />
<a href="http://weblog.latte.ca/2007/Jul">2007-Jul</a><br />
<a href="http://weblog.latte.ca/2007/Jun">2007-Jun</a><br />
<a href="http://weblog.latte.ca/2007/May">2007-May</a><br />
<a href="http://weblog.latte.ca/2007/Apr">2007-Apr</a><br />
<a href="http://weblog.latte.ca/2007/Mar">2007-Mar</a><br />
<a href="http://weblog.latte.ca/2007/Feb">2007-Feb</a><br />
<a href="http://weblog.latte.ca/2007/Jan">2007-Jan</a><br />
<a href="http://weblog.latte.ca/2006/Dec">2006-Dec</a><br />
<a href="http://weblog.latte.ca/2006/Nov">2006-Nov</a><br />
<a href="http://weblog.latte.ca/2006/Oct">2006-Oct</a><br />
<a href="http://weblog.latte.ca/2006/Sep">2006-Sep</a><br />
<a href="http://weblog.latte.ca/2006/Aug">2006-Aug</a><br />
<a href="http://weblog.latte.ca/2006/Jul">2006-Jul</a><br />
<a href="http://weblog.latte.ca/2006/Jun">2006-Jun</a><br />
<a href="http://weblog.latte.ca/2006/May">2006-May</a><br />
<a href="http://weblog.latte.ca/2006/Apr">2006-Apr</a><br />
<a href="http://weblog.latte.ca/2006/Mar">2006-Mar</a><br />
<a href="http://weblog.latte.ca/2006/Feb">2006-Feb</a><br />
<a href="http://weblog.latte.ca/2006/Jan">2006-Jan</a><br />
<a href="http://weblog.latte.ca/2005/Dec">2005-Dec</a><br />
<a href="http://weblog.latte.ca/2005/Nov">2005-Nov</a><br />
<a href="http://weblog.latte.ca/2005/Oct">2005-Oct</a><br />
<a href="http://weblog.latte.ca/2005/Sep">2005-Sep</a><br />
<a href="http://weblog.latte.ca/2005/Aug">2005-Aug</a><br />
<a href="http://weblog.latte.ca/2005/Jul">2005-Jul</a><br />
<a href="http://weblog.latte.ca/2005/Jun">2005-Jun</a><br />
<a href="http://weblog.latte.ca/2005/May">2005-May</a><br />
<a href="http://weblog.latte.ca/2005/Apr">2005-Apr</a><br />
<a href="http://weblog.latte.ca/2005/Mar">2005-Mar</a><br />
<a href="http://weblog.latte.ca/2005/Jan">2005-Jan</a><br />
<a href="http://weblog.latte.ca/2004/Dec">2004-Dec</a><br />
<a href="http://weblog.latte.ca/2004/Nov">2004-Nov</a><br />
<a href="http://weblog.latte.ca/2004/Oct">2004-Oct</a><br />
<a href="http://weblog.latte.ca/2004/Sep">2004-Sep</a><br />
<a href="http://weblog.latte.ca/2004/Aug">2004-Aug</a><br />
<a href="http://weblog.latte.ca/2004/Jul">2004-Jul</a><br />
<a href="http://weblog.latte.ca/2004/May">2004-May</a><br />
<a href="http://weblog.latte.ca/2004/Apr">2004-Apr</a><br />
<a href="http://weblog.latte.ca/2004/Mar">2004-Mar</a><br />
<a href="http://weblog.latte.ca/2004/Feb">2004-Feb</a><br />
<a href="http://weblog.latte.ca/2004/Jan">2004-Jan</a><br />
<a href="http://weblog.latte.ca/2003/Nov">2003-Nov</a><br />
<a href="http://weblog.latte.ca/2003/Oct">2003-Oct</a><br />
<a href="http://weblog.latte.ca/2003/Sep">2003-Sep</a><br />
<a href="http://weblog.latte.ca/2003/Jul">2003-Jul</a><br />
<a href="http://weblog.latte.ca/2003/Mar">2003-Mar</a><br />
<a href="http://weblog.latte.ca/2003/Feb">2003-Feb</a><br />
<a href="http://weblog.latte.ca/2003/Jan">2003-Jan</a><br /></div>
   </div>
   <div class="footBox">
    <div class="footTitle">Blake's Wishlist:</div><br />
    <ul class="sidebar">
      <li><a
        href="http://www.amazon.ca/exec/obidos/ASIN/1430219483/adamgoucher-20/"
        >Coders at Work</a></li>
      <li><a
        href="http://www.amazon.ca/exec/obidos/ASIN/B000098XJQ/adamgoucher-20/"
        >Diablo II: Lord of Destruction expansion pack (for Mac)</a></li>
    </ul>
   </div>
   <div class="footBox">
    <div class="footTitle">Blake's Current Tunes:</div><br />
    <a href="http://www.last.fm/user/bwinton/">bwinton's current tunes (caching for another 0:54:11)</a><br />
<a href="http://www.last.fm/music/DJ+M.i.F./_/Tricky+Sandman+%28Run-DMC+vs.+Metallica%29">DJ M.i.F. - Tricky Sandman (Run-DMC vs. Metallica)</a><br />
<a href="http://www.last.fm/music/DJ+Moule/_/Black+Sabotage+%28Beastie+Boys+vs.+Led+Zeppelin%29">DJ Moule - Black Sabotage (Beastie Boys vs. Led Zeppelin)</a><br />
<a href="http://www.last.fm/music/Cheekyboy/_/Smells+Like+Compton+%28N.W.A.+vs.+Nirvana%29">Cheekyboy - Smells Like Compton (N.W.A. vs. Nirvana)</a><br />
<a href="http://www.last.fm/music/Jimmi+Jammes/_/Sgt.+Pepper%27s+Paradise+%28Beatles+vs.+Guns+N%27+Roses%29">Jimmi Jammes - Sgt. Pepper's Paradise (Beatles vs. Guns N' Roses)</a><br />
<a href="http://www.last.fm/music/Jay-R/_/My+Other+Car+Is+a+Beatle+%28L%27Trimm+vs.+Armand+Van+Helden+vs.+Beatles+vs.+Gary+Numan%29">Jay-R - My Other Car Is a Beatle (L'Trimm vs. Armand Van Helden vs. Beatles vs. Gary Numan)</a><br />
<a href="http://www.last.fm/music/Tripp/_/Super%2BHolla%2BTricka%2B%2528Beastie%2BBoys%2Bvs.%2BGwen%2BStefani%2Bvs.%2BA.%2BSkillz%2B%2526%2BKrafty%2BKutz%2529">Tripp - Super Holla Tricka (Beastie Boys vs. Gwen Stefani vs. A. Skillz &amp; Krafty Kutz)</a><br />
<a href="http://www.last.fm/music/DJ+John/_/It+Takes+Two+to+Kiss+%28Rob+Base+vs.+Prince%29">DJ John - It Takes Two to Kiss (Rob Base vs. Prince)</a><br />
<a href="http://www.last.fm/music/Thriftshop+XL/_/Do+You+Wanna+Cuz+It%27s+Tricky+%28Franz+Ferdinand+vs.+Run-DMC+vs.+The+Knack%29">Thriftshop XL - Do You Wanna Cuz It's Tricky (Franz Ferdinand vs. Run-DMC vs. The Knack)</a><br />
<a href="http://www.last.fm/music/Loo%2B%2526%2BPlacido/_/Black+Beatles+%28Beatles+vs.+Black-Eyed+Peas+vs.+Ludacris+vs.+Kelis%29">Loo &amp; Placido - Black Beatles (Beatles vs. Black-Eyed Peas vs. Ludacris vs. Kelis)</a><br />
<a href="http://www.last.fm/music/Party+Ben/_/Computer+Talk+%28Coldplay+vs.+Kraftwerk%29">Party Ben - Computer Talk (Coldplay vs. Kraftwerk)</a><br />

   </div>
   <div class="footBox">
    <div class="footTitle">Blake's Last 7 Bike Trips:</div><br />
    <table border="1">
     <tr><td>date</td><td>time</td><td>dist</td><td>ave</td><td>max</td><td>odo</td></tr>
      <tr><td>18/08</td><td>1.11.12</td><td>25.72</td><td>21.6</td><td>55.4</td><td>5036.5<!-- Good to be back on the bike again.--></td></tr><tr><td>19/08</td><td>0.59.27</td><td>22.53</td><td>22.7</td><td>55.7</td><td>5059.0<!-- --></td></tr><tr><td>20/08</td><td>1.01.09</td><td>22.57</td><td>22.1</td><td>54.6</td><td>5081.6<!-- --></td></tr><tr><td>22/08</td><td>1.05.32</td><td>24.97</td><td>22.8</td><td>55.3</td><td>5106.6<!-- --></td></tr><tr><td>25/08</td><td>1.30.39</td><td>27.35</td><td>18.1</td><td>58.0</td><td>5133.9<!-- --></td></tr><tr><td>26/08</td><td>1.06.22</td><td>25.00</td><td>22.6</td><td>55.3</td><td>5158.9<!-- --></td></tr><tr><td>27/08</td><td>0.59.41</td><td>22.94</td><td>23.0</td><td>55.5</td><td>5181.9<!-- Going up Mt. Pleasant is hard and unsatisfying.--></td></tr>
    </table>
    <img src="data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%D2%00%00%00%16%08%06%00%00%00%B5%E0%C2%E0%00%00%02%C3IDATx%9Cb%FC%CF0%0AF%C1%28%A0%14%00%00%00%00%FF%FFb%1Ah%07%0C%010Z%D6%8C%02%82%00%00%00%00%FF%FF%1A%94%19%89%F1%0C%C3%7F%06%0A%120%E3%19%86%FF0%8C%CD%1CR%C4%19%CF00P%E2%96Q%403%80%1E%27%03%1AG%00%00%00%00%FF%FF%82%A7%1C%12%F0%7FR%D51%9Ca%F8%0F%C3%84%F4C%D5%20%9BA%AC%7D%D8%F4cu%0B%B1%E2%B8%D4%0Er%3CT%DCI%B6%3F%90%E2%05%3D%FE%F0%C6%3D%B1%E1%83n%166%B3%D1%D24%03%00%00%00%FF%FF%C2j0.Ga%F3%00%21%C7%E0J%D8%D82%16%0E%B5%28%EA%09eH%7C%19%09%8B%1C%C9%E2%C4%16%08%94%60B%E6%13%19%3F%24%EB%C7%A6%0E%9F%7Fi%15%0E%E8%E9%0CK%DC%E3%8A%27%82nDN%97%B82%08z%7Cc3%1B%3Dm%00%00%00%00%FF%FFb%40W%84%AF%14%26PB%13%93%21pa%5C%19%8E%A0%3E%3C%91%40%13ql%F6%E3Kh%A4%14%008%12%0AF%CDNB%98c%D8O%28%D1%E1p%07Q%E9%04%9F%3F%09%85%03.%7B%89%88%07b%C2%04W%C1H%28%8D%E3%8Bo%149%00%00%00%00%FF%FF%22%AC%00w%C0bs%00%3E%07%D3%02%13%9D%91H%C5%C4%9ACb%C2FVGJ%C1%837aS%E0gR%0B%3F%BC%E9%84%88%F4A%A9%FD%C4%C6%136w%12%2C%1C%88%8C7%ACj%00%00%00%00%FF%FF%A2%24%01bu%00%1D3%11%D5%22%83%DAn%21%C1%1D%14%87%19%85%7E%269%ECH%B4%8F%90%FFh%95f0%CC%25%E4%06b%FD%87K%1E%00%00%00%FF%FF%A2%D8%B1T%8AP%AA%B8c%10d%24%92%DD0%C0n%A6u%E1G%8C%F9%E46%EB%A9%19%AED%87%03.5%00%00%00%00%FF%FF%A2d%F8%9B%11f%F6%28%40%80%FF%26%0C%8C%B4T%3F%DC%00%E3%99%A1%15%06%B8%DC%0A%00%00%00%FF%FF%A2%CA%3C%12%E3%19%86%FFC%290F%01%1C0%D28%EE%08%9AO%2B%BB%E9%9D%1E%01%00%00%00%FF%FF%1A%94%13%B2%24%82%D1%9Aq%14%0C8%00%00%00%00%FF%FF%1A%0E%19i%14P%00h%5Dr%8F%94%96%0A%00%00%00%FF%FF%1A%CDH%A3%60%14P%01%00%00%00%00%FF%FF%1A6%19i%B4%9F6%0A%06%12%00%00%00%00%FF%FF%1A.%19i4%03%8D%02J%00%C5%83.%00%00%00%00%FF%FF%1A.%19i%14%8C%82%01%05%00%00%00%00%FF%FF%A24%23%8D%8E%98%8D%82Q%C0%C0%C0%00%00%00%00%FF%FF%A2%B8F%1A%2C%13j%83%C1%0D%A3%60%E4%02%00%00%00%00%FF%FF%1Am%DA%8D%82Q%C0%40yA%0C%00%00%00%FF%FF%1A%CDH%A3%60%14P%01%00%00%00%00%FF%FF%1A%CDH%A3%60%14P%01%00%00%00%00%FF%FF%03%00%C6%A2%F5%A5%84%D9%CC%F8%00%00%00%00IEND%AEB%60%82"/><br />
    <img src="data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%D2%00%00%00%16%08%06%00%00%00%B5%E0%C2%E0%00%00%02%2AIDATx%9Cb%FC%CF0%0AF%C1%28%A0%14%00%00%00%00%FF%FFb%1Ah%07%0Cv%C0x%86%E1%3F%E3%19%86%D1%F2f%14%E0%05%00%00%00%00%FF%FFb%19h%07%E0%02%B0%C4%FB%DF%84%81%91%12%FD0%80n%0E.%F3%29%B5w%14%D0%07%A0%C7%D3%40%C7%1B%00%00%00%FF%FF%229%23%11%EB%60%5C%1E%85%01%5C%FA%D1%D5%91%1A%40%84j%0F%5C%F2%C4%EA%1B%EC%19l%A8%B8%93%10%A0%96%3F%C8%CDp%84%F4%A1%A7%17%00%00%00%00%FF%FFb%A1u%C9Ll%C2%25%D6c%E8%80%DE%09%86TwSj%0F%A1%02%87V%F2%E8%EA%60%60%A0jpj7%AFq%F9%0BWAN%08%00%00%00%00%FF%FF%C2V%23%11%EB%60%98%3AF%1C%7CR%01%AD%FB%21%B8%CC%A7%96%BD%B8%FC%8F%CB%7Cb%D5%E1%0Ag%5C%EA%88%15%C7%05H%8D%7FB%E2%84%DCM%AE%BFp%01J%D3%21Y%00%00%00%00%FF%FF%22%A6i7R%3B%DA%D4NP%B8%E4%89%8D%F0%81%2Ah%E8%A5%7F%A8%D9%8B%02%00%00%00%00%FF%FFB%CEH%D4.%99G%01%7D%00%BD%C3%7B%A8%C6/M%DD%0D%00%00%00%FF%FF%1A%B4%A3v%C4%02F%86%FF%906%3A%03%E3%A0%E8%5C%23%B9%87%26%EAG%C1%C0%02X%7C%A17%24%00%00%00%00%FF%FF%1A%F2%19i%14%0Cm%40%AB%82%04W%82%A7%15%00%00%00%00%FF%FF%1A%9D%90%1D%05%A3%80%0A%00%00%00%00%FF%FF%A2%B8F%1A%2CM%13z%97%40%C3%05%D0%3A%FE%06K%FA%20%04%28M%3F%00%00%00%00%FF%FFb%A4%B4%076X%FA%28%83%C5%1D%A3%60h%02J%D3%0F%00%00%00%FF%FF%1Am%DA%8D%82Q%40%05%00%00%00%00%FF%FF%1A%CDH%A3%60%14P%01%00%00%00%00%FF%FF%1A%CDH%A3%60%14P%01%00%00%00%00%FF%FF%1A%CDH%A3%60%14P%01%00%00%00%00%FF%FF%1A%CDH%A3%60%14P%01%00%00%00%00%FF%FF%1A6%13%B2%A3%A3u%A3%60%20%01%00%00%00%FF%FF%1A6%19i%14%8C%02J%00%A5%051%00%00%00%FF%FF%1Am%DA%8D%82Q%40%05%00%00%00%00%FF%FF%1A%CDH%A3%60%14P%01%00%00%00%00%FF%FF%03%007d%B6%E6%B0.%AD%C9%00%00%00%00IEND%AEB%60%82"/>
   </div>
   <div class="footBox">
     <div class="footTitle">Metadata:</div><br />
     <a href="http://roughingit.subtlehints.net/pyblosxom"><img
       src="/images/pb_pyblosxom.png" alt="Get Blosxom!"
       /></a><br />
     <a href="http://creativecommons.org/licenses/by/1.0"><img
       alt="Creative Commons License" border="0"
       src="http://creativecommons.org/images/public/somerights.gif"
       /></a><br />
     This work is licensed under a<br />
     <a href="http://creativecommons.org/licenses/by/1.0">Creative
       Commons License</a>.
     <!--
     <rdf:RDF xmlns="http://web.resource.org/cc/"
       xmlns:dc="http://purl.org/dc/elements/1.1/"
       xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
       <Work rdf:about="">
         <license rdf:resource="http://creativecommons.org/licenses/by/1.0" />
       </Work>

       <License rdf:about="http://creativecommons.org/licenses/by/1.0">
         <requires rdf:resource="http://web.resource.org/cc/Attribution" />
         <permits rdf:resource="http://web.resource.org/cc/Reproduction" />
         <permits rdf:resource="http://web.resource.org/cc/Distribution" />
         <permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
         <requires rdf:resource="http://web.resource.org/cc/Notice" />
       </License>
     </rdf:RDF>
     -->
   </div>
  </div>
  <div style="clear:both;"> 
  </div> 
  <script type="text/javascript">
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
  </script>
  <script type="text/javascript">
    try {
      var pageTracker = _gat._getTracker("UA-5805429-2");
      pageTracker._trackPageview();
    } catch(err) {}</script>
 </body>
</html>

