<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:html="http://www.w3.org/1999/html" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Ross Burton</title><link>http://www.burtonini.com/blog</link><description>A potted account of Ross' life</description><language>en</language><ttl>60</ttl><dc:creator>Ross Burton</dc:creator><admin:generatorAgent rdf:resource="http://pyblosxom.sourceforge.net/"/><admin:errorReportsTo rdf:resource="mailto:ross@burtonini.com"/><item><title>Questions</title><guid isPermaLink="false">computers/guadec6/questions-2005-05-30-15-29</guid><link>http://www.burtonini.com/blog/computers/guadec6/questions-2005-05-30-15-29</link><description>GUADEC is cool, and is resulting in people asking lots of questions. When will the latest XGL server be committed ...</description><content:encoded><![CDATA[    <p>
      GUADEC is cool, and is resulting in people asking lots of questions.  When
      will the latest XGL server be committed so we can switch desktops by
      rotating a cube?  Will GNOME make 10x10? (10% installed base by 2010).
      Will the N770 be an amazing success, or a product only used by geeks just
      because it runs Linux?  Will the weather be nice, instead of too hot or
      too wet?  Will Jeff ever stop bleeding?
    </p>
    <p>
      The people demand answers, but only time can tell.
    </p>
]]></content:encoded><category domain="http://www.burtonini.com">/computers/guadec6</category><dc:date>2005-05-30T14:29:00Z</dc:date></item><item><title>GUADEC 6</title><guid isPermaLink="false">computers/guadec6/here-2005-05-29-10-30</guid><link>http://www.burtonini.com/blog/computers/guadec6/here-2005-05-29-10-30</link><description>I'm here!</description><content:encoded><![CDATA[<p>
I'm here!
</p>
]]></content:encoded><category domain="http://www.burtonini.com">/computers/guadec6</category><dc:date>2005-05-29T09:30:00Z</dc:date></item><item><title>Summer Photos</title><guid isPermaLink="false">life/photos-2005-05-27-18-04</guid><link>http://www.burtonini.com/blog/life/photos-2005-05-27-18-04</link><description>The combination of Spring and working from home is a nice combination. I've taken quite a few photos of our ...</description><content:encoded><![CDATA[    <p>
      The combination of Spring and working from home is a nice
      combination. I've taken quite a few photos of our rather small garden and
      when I've made Tate work again I'll put them online, but here is one to
      keep you going.
    </p>
    <p>
      <a class="noline" href="http://www.burtonini.com/photos/Random/img_2397.jpg">
        <img class="thumbnail"  src="http://www.burtonini.com/photos/Random/thumb-img_2397.jpg" width="128" height="85"/>
      </a>
    </p>
    <p>
      Vicky titled it <cite>A Bee's Feast</cite>.
    </p>
]]></content:encoded><category domain="http://www.burtonini.com">/life</category><dc:date>2005-05-27T17:04:00Z</dc:date></item><item><title>Friday Linkage</title><guid isPermaLink="false">life/linkage-2005-05-27-16-10</guid><link>http://www.burtonini.com/blog/life/linkage-2005-05-27-16-10</link><description>I can't be bothered to blog much today as it's far too hot for that sort of thing (disclaimer: it's ...</description><content:encoded><![CDATA[    <p>
      I can't be bothered to blog much today as it's far too hot for that sort
      of thing (disclaimer: it's only 29 degrees, but I'm still ill), so I'll
      provide a few links instead.
    </p>
    <p>
      My local cinema is one of the 209 to be selected for a <a
      href="http://www.ukfilmcouncil.org.uk/news/?p=D4A157780cd7d24E47LmQ4394634">grant
      to go digital</a>.  Very cool, and as part of the deal they've agreed to
      show more non-Hollywood movies, which is always good news.
    </p>
    <p>
      LinuxDevices.com has the <a
      href="http://www.linuxdevices.com/files/article057/">presentation Nokia
      gave at LinuxWorld NY</a>.  Pretty interesting reading for anyone after
      every bit of information about the super-cool 770.
    </p>
    <p>
      <small>NP: <cite>Simple Things</cite>, Zero 7</small>
    </p>]]></content:encoded><category domain="http://www.burtonini.com">/life</category><dc:date>2005-05-27T15:10:00Z</dc:date></item><item><title>Unexpected Guest</title><guid isPermaLink="false">life/guest-2005-05-26-15-30</guid><link>http://www.burtonini.com/blog/life/guest-2005-05-26-15-30</link><description>Whilst doing my best to shake off my nasty cold, an unexpected guest flew past me in the garden. Apparently ...</description><content:encoded><![CDATA[    <p>
      Whilst doing my best to shake off my nasty cold, an unexpected guest flew
      past me in the garden.
    </p>
    <p>
      <a class="noline" href="http://www.burtonini.com/photos/Misc/butterfly.jpg">
        <img class="thumbnail" src="http://www.burtonini.com/photos/Misc/thumb-butterfly.jpg" width="127"
height="127"/>
      </a>
    </p>
    <p>
      Apparently that is a Holly Blue, also known as <cite>Celastrina argiolus</cite>. Sadly that is not a scaled image, but is just cropped.  I think I need a
      <a
      href="http://www.canon.co.uk/for_home/product_finder/cameras/ef_lenses/macro_lenses/ef-s_60mm_f2.8_macro_usm/">macro
      lens</a>...
    </p>
]]></content:encoded><category domain="http://www.burtonini.com">/life</category><dc:date>2005-05-26T14:30:00Z</dc:date></item><item><title>WiFi Madness</title><guid isPermaLink="false">computers/acx111-2005-05-26-12-00</guid><link>http://www.burtonini.com/blog/computers/acx111-2005-05-26-12-00</link><description>I've finally got my new D-Link DWL-G650+ wifi card working on my laptop. I have revision B.1 of this card, ...</description><content:encoded><![CDATA[    <p>
      I've <em>finally</em> got my new D-Link DWL-G650+ wifi card working on my
      laptop.  I have revision B.1 of this card, which makes a big difference,
      the earlier revisions use a different chip.  This card has an ACX111 chip
      inside, which is somewhat supported by Linux, but its not trivial.
    </p>
    <p>
      Hoary comes with the <tt>acx_pci</tt> module builtin, and a collection of
      firmware.  However, the module will try and load <tt>TIACX111.BIN</tt> to
      the card, which is wrong.  It will successfully load, but the card won't
      work.  The trick on Hoary is to steal <tt>FwRad16.bin</tt> from the driver
      CD and put it in <tt>/lib/hotplug/firmware</tt>, and then delete
      <tt>TIACX111.BIN</tt> from the same location.  Only then will the right
      firmware be uploaded.
    </p>
    <p>
      Sid is more fun, the module has to be built yourself (there is a package
      which makes this very easy using <tt>module-assistant</tt>), but don't do
      what the guides suggest and install <tt>acx111-firmware</tt>.  Take
      <tt>FwRad16.bin</tt> and move it to <tt>/lib/firmware/TIACX111.BIN</tt>.
      Unlike the earlier versions the module in Sid will not fall back onto
      other firmware images.
    </p>
    <p>
      Now that it is working, I've just got wait for the performance to
      increase: in a side-by-side test my cheapo Actiontec Orinoco PCMCIA card
      is transferring files 100Kb/s faster.
    </p>
    <p>
      <small>NP: <cite>Wrath Of The Math</cite>, Jeru The Damaja</small>
    </p>]]></content:encoded><category domain="http://www.burtonini.com">/computers</category><dc:date>2005-05-26T11:00:00Z</dc:date></item><item><title>Maemo</title><guid isPermaLink="false">computers/maemo-2005-05-25-15-40</guid><link>http://www.burtonini.com/blog/computers/maemo-2005-05-25-15-40</link><description>Silly name, great idea. Nokia have just announced the Nokia 770 Internet Tablet , a frankly gorgeous hand-held tablet which ...</description><content:encoded><![CDATA[    <p>
      Silly name, great idea.  Nokia have just announced the <a
      href="http://www.nokia.com/nokia/0,,74866,00.html">Nokia 770 Internet
      Tablet</a>, a frankly gorgeous hand-held tablet which just happens to be
      based on <a href="http://www.maemo.org/">Debian, GTK+, GStreamer and
      DBus</a>.
    </p>
    <p>
      <strong>Update:</strong> of course this announcement wasn't a complete
      surprise considering I work for <a href="http://www.o-hand.com/">Opened
      Hand</a>, who have been working with Nokia on this for the last two years.
    </p>
]]></content:encoded><category domain="http://www.burtonini.com">/computers</category><dc:date>2005-05-25T14:40:00Z</dc:date></item><item><title>New Toys</title><guid isPermaLink="false">life/toys-2005-05-24-13-05</guid><link>http://www.burtonini.com/blog/life/toys-2005-05-24-13-05</link><description>Today was a good day for toys. My LinkStation is now booting Debian Unstable, and have finally put a decent ...</description><content:encoded><![CDATA[    <p>
      Today was a good day for toys.
    </p>
    <p>
      My <a
      href="http://www.buffalotech.com/products/product-detail.php?productid=71&categoryid=16">LinkStation</a>
      is now booting Debian Unstable, and have finally put a decent version of
      Samba on it so I can mount drives with CIFS.  Apart from being a nice
      small network storage device, now that it's Debian I can do Interesting
      Things with it.  My first hack will be to add a USB sound card, so that I
      can play Internet radio streams into my hifi.
    </p>
    <p>
      Then those nice people from CityLink arrived and gave me a <a
      href="http://www.burtonini.com/photos/Misc/ixus.jpg">Canon Ixus 400</a> we
      bought off eBay.  As much as I love the 300D, it's not exactly a pub
      camera.  The Ixus is far smaller and I'll probably be bringing it to
      GUADEC.
    </p>
    <p>
      My final toy was a <a href="http://www.velbon-tripod.com/maxi.htm">Velbon
      MAXi 343</a> tripod.  For a bargain price of &pound;50 this is a pretty
      good tripod, it's very small when packed (45cm) but expands to 155cm+30cm,
      which is plenty for most people.  It's full of little nice features like
      rubber feet which screw in to reveal spikes, legs which expand by flicking
      a switch, and an all-metal head.
    </p>
    <p>
      <a class="noline" href="http://www.burtonini.com/photos/Misc/tripod-1.jpg">
        <img class="thumbnail" src="http://www.burtonini.com/photos/Misc/thumb-tripod-1.jpg" width="128" height="85"/>
      </a>

      <a class="noline" href="http://www.burtonini.com/photos/Misc/tripod-2.jpg">
        <img class="thumbnail" src="http://www.burtonini.com/photos/Misc/thumb-tripod-2.jpg" width="128" height="85"/>
      </a>

      <a class="noline" href="http://www.burtonini.com/photos/Misc/tripod-3.jpg">
        <img class="thumbnail" src="http://www.burtonini.com/photos/Misc/thumb-tripod-3.jpg" width="109" height="128"/>
      </a>
    </p>

    <p>
      In other news, I'm developing a snotty cold.  I hope it will go before
      GUADEC...
    </p>
    
    <p>
      <small>NP: <cite>100th Window</cite>, Massive Attack</small>
    </p>]]></content:encoded><category domain="http://www.burtonini.com">/life</category><dc:date>2005-05-24T12:05:00Z</dc:date></item><item><title>Coprophagia</title><guid isPermaLink="false">life/food-2005-05-20-12-50</guid><link>http://www.burtonini.com/blog/life/food-2005-05-20-12-50</link><description>(I hope I didn't upset anyone eating whilst reading there) So Micke, Richard, Glynn, and Jeff (!) all think that ...</description><content:encoded><![CDATA[    <p>
      (I hope I didn't upset anyone eating whilst reading there)
    </p>
    <p>
      So Micke, Richard, Glynn, and Jeff (!) all think that my <a
      href="http://www.burtonini.com/blog/life/brain-food-2005-05-19-12-21">sweet
      and all-so-good cookie</a> looks like, well, poo.
    </p>
    <p>
      I dread to think what they'll make of my <a
      href="http://www.burtonini.com/photos/Misc/soup.jpg">lunch today</a>...
    </p>
    <p>
      <small>NP: <cite>Mezzanine</cite>, Massive Attack</small>
    </p>
]]></content:encoded><category domain="http://www.burtonini.com">/life</category><dc:date>2005-05-20T11:50:00Z</dc:date></item><item><title>Completed Plans</title><guid isPermaLink="false">computers/eds-2005-05-20-12-19</guid><link>http://www.burtonini.com/blog/computers/eds-2005-05-20-12-19</link><description>Not only does Bonobo now use approximately 130Kb less memory (as measured by pmap) thanks to the work of Alex ...</description><content:encoded><![CDATA[    <p>
      Not only does Bonobo now use approximately 130Kb less memory (as measured
      by pmap) thanks to the work of <a
      href="http://bugzilla.gnome.org/show_bug.cgi?id=168948">Alex and co</a>,
      but my <a
      href="http://www.burtonini.com/blog/computers/eds-2005-05-16-16-55">EDS
      leak patch</a> finally got approved.  Hooray!
    </p>
    <p>
      <small>NP: <cite>Keep it Solid Steel</cite>, Mr Scruff</small>
    </p>
]]></content:encoded><category domain="http://www.burtonini.com">/computers</category><dc:date>2005-05-20T11:19:00Z</dc:date></item><item><title>Brain Food</title><guid isPermaLink="false">life/brain-food-2005-05-19-12-21</guid><link>http://www.burtonini.com/blog/life/brain-food-2005-05-19-12-21</link><description>As a child I was often told that fish is brain food. Something to do with it being a good ...</description><content:encoded><![CDATA[    <p>
      As a child I was often told that fish is brain food.  Something to do with
      it being a good source of protein.  Well, I love fish, but it doesn't seem
      to help me when I need it, for example when chasing a bizarre memory
      corruption bug.  However, I did find that this was useful to me when
      chasing memory leaks in Evolution:
    </p>
    <p>
    <img src="http://www.burtonini.com/photos/Misc/brain-food.jpg" />
    </p>
    <p>
      <em>That</em> is brain food my friends.
    </p>
    <p>
      Oh, and sorry for spamming the various planets this morning.  The server's
      software RAID had a bit of a kerfuffle last night and although everything
      was recovered (props to Thom and Paul) the mtimes were all changed...
    </p>
    <p>
      <small>NP: <cite>Across A Wire</cite>, Counting Crows</small>
    </p>
]]></content:encoded><category domain="http://www.burtonini.com">/life</category><dc:date>2005-05-19T11:21:00Z</dc:date></item><item><title>It's Nice When A Plan Comes Together</title><guid isPermaLink="false">computers/eds-2005-05-16-16-55</guid><link>http://www.burtonini.com/blog/computers/eds-2005-05-16-16-55</link><description>It's really nice when, after a week or so of poking, prodding, and getting confused, that the right 2-line change ...</description><content:encoded><![CDATA[    <p>
      It's really nice when, after a week or so of poking, prodding, and getting
      confused, that the right <a
      href="http://lists.ximian.com/archives/public/evolution-patches/2005-May/010788.html">2-line
      change</a> can have a large effect.
    </p>
    <p>
      Before:<br/>
      <img src="http://www.burtonini.com/computing/screenshots/eds-before.png" alt="Massif chart"/>
      <br/>
      Note how <tt>evolution-data-server</tt> has leaked 800K in 25 seconds whilst running a test application.
    </p>
    <p>
      After:<br/>
      <img src="http://www.burtonini.com/computing/screenshots/eds-after.png" alt="Massif chart"/>
      <br/>
      <em>Much</em> better.  As I said, it's nice when a plan comes together.
    </p>

    <p>
      <small>NP: <cite>Groove Salad</cite>, Soma FM</small>
    </p>]]></content:encoded><category domain="http://www.burtonini.com">/computers</category><dc:date>2005-05-16T15:55:00Z</dc:date></item><item><title>Public Perception of Immigration</title><guid isPermaLink="false">life/immigration-2005-05-12-13-15</guid><link>http://www.burtonini.com/blog/life/immigration-2005-05-12-13-15</link><description>The excellent Observer Blog has an interesting post about a recent MORI survey: Regular readers of different papers were asked ...</description><content:encoded><![CDATA[    <p>
      The excellent <a href="http://blogs.guardian.co.uk/observer/">Observer
      Blog</a> has an <a
      href="http://blogs.guardian.co.uk/observer/archives/2005/05/12/what_came_first_the_antichicken_headlines_or_public_hostility_to_the_egg_.html">interesting
      post</a> about a recent MORI survey:
    </p>
    <blockquote>
      <p>
        Regular readers of different papers were asked 'what percentage of the
        British population do you think are immigrants to this country?'
      </p>
      <p>
        The highest bid came from Daily Star and Sun readers - 26 per cent. Next
        up, Daily Mirror on 25 per cent, then in order, The Express - 21 per
        cent; Mail - 19 per cent; Telegraph - 13 per cent; Guardian - 11 per
        cent; Times 10 - per cent; The Indie - 9 per cent; FT - 6 per cent.
      </p>
      <p>
        The UK average guess is 21 per cent. And the actual figure? That would
        be 7 per cent. So as a nation we're only 3 times out of proportion on
        this one.
      </p>
    </blockquote>
    <p>
      <cite>Daily Star</cite>, <cite>Mirror</cite>, and <cite>Sun</cite> readers
      think that more than <em>1 in 4</em> of the country are immigrants?  It's
      interesting both how the more right-wing papers give the impression of
      more immigration, and how almost everyone over-estimates to some degree.
    </p>
    <p>
      <small>NP: <cite>Entroducing.....</cite>, DJ Shadow</small>
    </p>
]]></content:encoded><category domain="http://www.burtonini.com">/life</category><dc:date>2005-05-12T12:15:00Z</dc:date></item><item><title>Asynchronous DBus Calls</title><guid isPermaLink="false">computers/dbus-2005-05-12-11-50</guid><link>http://www.burtonini.com/blog/computers/dbus-2005-05-12-11-50</link><description>This week I have been mostly playing with asynchronous calls in the DBus GLib bindings. DBus is inherently an asynchronous ...</description><content:encoded><![CDATA[    <p>
      This week I have been mostly playing with asynchronous calls in the DBus GLib bindings.  DBus
      is inherently an asynchronous system, but the present GLib bindings wrap that with the
      <tt>GProxy</tt> object into a quite simple asynchronous interface, a simple synchronous
      interface, and a tool to <a
      href="http://www.burtonini.com/blog/computers/dbus-2005-04-04-14-14">generate incredibly
      simple bindings</a>.
    </p>
    <p>
      The synchronous interface is trivial: <tt>dbus_g_proxy_invoke</tt>. This will make a call with
      arguments, specified as addresses for arguments to send and locations to put return values in.
      It blocks until a reply is returned, and works well.
    </p>
    <blockquote><pre>
char **names;
dbus_g_proxy_invoke (proxy, "ListNames", error, G_TYPE_INVALID, G_TYPE_STRV, &amp;names, G_TYPE_INVALID);
</pre></blockquote>
    <p>
      The asynchronous interface is pretty simple. First call <tt>dbus_g_proxy_begin_call()</tt> to
      send the message.  This returns a <tt>DBusGPendingCall</tt> object, on which you call
      <tt>dbus_g_pending_call_set_notify</tt> to set a function which is called when a reply is
      received.  Inside the callback, <tt>dbus_g_proxy_end_call</tt> will get the return arguments.
    </p>
<blockquote><pre>
static void callback(DBusGPendingCall *call, DBusGProxy *proxy) {
  GError *error = NULL;
  char **name_list;
  int name_list_len, i;

  if (!dbus_g_proxy_end_call (proxy, call, &amp;error,
                              DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
                              &amp;name_list, &amp;name_list_len,
                              DBUS_TYPE_INVALID)) {
      g_printerr ("Failed to complete ListNames call: %s\n", error->message);
      g_error_free (error);
      g_main_loop_quit (loop);
  }

  g_print ("Names on the message bus:\n");
  for (i = 0; i < name_list_len; ++i) {
      g_print ("  %s\n", name_list[i]);
  }
  g_strfreev (name_list);

  dbus_g_pending_call_unref (call);
  g_main_loop_quit (loop);
}

int main (int argc, char **argv) {
  DBusGConnection *connection;
  GError *error = NULL;
  DBusGProxy *proxy;
  DBusGPendingCall *call;
  
  g_type_init ();
  loop = g_main_loop_new (NULL, TRUE);

  connection = dbus_g_bus_get (DBUS_BUS_SESSION, &amp;error);
  proxy = dbus_g_proxy_new_for_name (connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS);

  call = dbus_g_proxy_begin_call (proxy, "ListNames", DBUS_TYPE_INVALID);
  dbus_g_pending_call_set_notify(call, (DBusGPendingCallNotify)callback, proxy, g_object_unref);
  g_main_loop_run (loop);
  return 0;
}
</pre></blockquote>
    <p>
      Asynchronous method calls are possible in the GLib bindings, but are not wrapped by the
      bindings generator at the moment.  As an example, this is the prototype for the generated
      binding of the <tt>ListNames</tt> call:
    </p>
    <blockquote><pre>
gboolean org_freedesktop_DBus_list_names (DBusGProxy *proxy, char *** OUT_names, GError **error);
</pre></blockquote>
    <p>
      Where <tt>OUT_names</tt> is a pointer to a string array.  Now, wouldn't it be nice if the
      bindings could generate asynchronous wrappers too:
    </p>
    <blockquote><pre>
static void callback (char **names, GError *error, gpointer userdata) {
  char **i;
  g_print ("Names on the message bus:\n");
  for (i = names; *i; i++) {
    g_print ("  %s\n", *i);
  }
}
...
org_freedesktop_DBus_list_names_async (proxy, callback, NULL);
</pre></blockquote>
    <p>
      That was copied from working code by the way.  Hopefully it will pass the Havoc test and get
      into CVS!
    </p>
    <p>
      <small>NP: <cite>Means of Production</cite>, Aim</small>
    </p>
]]></content:encoded><category domain="http://www.burtonini.com">/computers</category><dc:date>2005-05-12T10:50:00Z</dc:date></item><item><title>Devil's Pie &quot;Can't Join Them? Beat Them&quot; 0.10</title><guid isPermaLink="false">computers/devilspie/devilspie-0.10</guid><link>http://www.burtonini.com/blog/computers/devilspie/devilspie-0.10</link><description>Devil's Pie (everyone favourite window manipulation tool) 0.10 is finally out. This release is very special as it actually compiles ...</description><content:encoded><![CDATA[    <p>
      Devil's Pie (everyone favourite window manipulation tool) 0.10 is finally
      out.  This release is very special as it actually compiles with GNOME 2.10,
      many thanks to Crispin Flowerday for the final patch to complete this.
    </p>
    <ul>
      <li>Re-implement the required private wnck functions (Crispin Flowerday)</li>
      <li>Add min/max hints to the opacity action property</li>
      <li>Display the min/max hints in the generated documentation</li>
    </ul>
    <p>
      Downloads are in the <a
        href="http://www.burtonini.com/computing/devilspie-0.10.tar.gz">usual
        place</a>.  I'll have Debian Sid and/or Ubuntu Hoary packages shortly.
    </p>
    ]]></content:encoded><category domain="http://www.burtonini.com">/computers/devilspie</category><dc:date>2005-05-04T20:23:58Z</dc:date></item><item><title>India Photos</title><guid isPermaLink="false">life/india-2005-05-04-17-30</guid><link>http://www.burtonini.com/blog/life/india-2005-05-04-17-30</link><description>It's rather late, but I finally put the photos from our trip to India and Nepal online. Enjoy! NP: Protection ...</description><content:encoded><![CDATA[    <p>
      It's rather late, but I finally put the photos from our trip to <a
      href="http://www.burtonini.com/photos/200503-India/">India and Nepal</a>
      online.  Enjoy!
    </p>
    <p>
      <small>NP: <cite>Protection</cite>, Massive Attack</small>
    </p>
]]></content:encoded><category domain="http://www.burtonini.com">/life</category><dc:date>2005-05-04T16:30:00Z</dc:date></item><item><title>Vendor Branches in Subversion</title><guid isPermaLink="false">computers/svn-vendor-2005-05-04-13-55</guid><link>http://www.burtonini.com/blog/computers/svn-vendor-2005-05-04-13-55</link><description>Subversion vendor branches are something I've always ignored. Over the years I've developed a healthy fear of branching and merging, ...</description><content:encoded><![CDATA[    <p>
      <a href="http://www.burtonini.com/photos/200503-India/img_1648.jpg" class="noline" style="float: right">
        <img src="http://www.burtonini.com/photos/200503-India/thumb-img_1648.jpg" class="thumbnail">
      </a> Subversion vendor branches are something I've always ignored.  Over
      the years I've developed a healthy fear of branching and merging, although
      it is common in developing Sound Juicer.  Systems like Arch make it less
      scary as it keep track of atomic changesets, so making it harder to loose
      half of a change, but I'm using Subversion at the moment until Bazaar or
      bzr-ng is convincing enough (and well documented enough) for me to switch.
      Of course, at some point I knew I I'd need to use vendor branches but I
      put off learning exactly how they work (beyond "you branch and merge and
      it works") until I needed to.  That point happened last week.
    </p>
    <p>
      I read the Subversion book, which confused me a bit and pointed me towards
      <tt>svn_load_dirs</tt>, which has both a man page and a README, neither of
      which make a great deal of sense.  So here I presume my summary, titled
      Vendor Branches In Subversion Without The Scary Details You Don't Need To
      Know.
    </p>
    <p>
      Step 1 is to grab a copy of the upstream source.  If you are taking
      snapshots from CVS use <tt>cvs export</tt> and not <tt>cvs checkout</tt>,
      otherwise you'll be committing the <tt>CVS/</tt> directories into
      Subversion.
    </p>
    <blockquote><tt>$ cvs export -r HEAD -d foo-20050504 foo</tt></blockquote>
    <p>
      This will grab a copy the <tt>foo</tt> module from the tip, and put it
      into a directory called <tt>foo-20050504</tt>.  As this is an exported
      copy of the source and not a checkout you cannot run any CVS commands on
      it, but that is not a problem as it will be deleted again in a few minutes.
    </p>
    <p>
      If the upstream source is a tarball, extract it and make sure these is
      nothing hanging around which should not be in Subversion (such as
      generated files).  Now to import it into Subversion.
    </p>
    <blockquote><tt>$ svn_load_dirs svn+ssh://svn/repos/foo/ -t upstream/foo-20050504 upstream/current foo-20050504/</tt></blockquote>
    <p>
      This needs some explaining.  The first argument is the location of the
      repository, I assume that this has already been created.  The second
      argument specifies that this import should be tagged
      <tt>upstream/foo-20050504</tt>, the third argument specifies the location
      to import the source too (<tt>upstream/current</tt>), and the forth and
      final argument is the path locally to import. Running this command will
      result in it asking a few questions to verify the tags, and then will
      churn for a few minutes as it does the import.
    </p>
    <p>
      You'll want to import into a vaguely named directory such as
      <tt>current</tt> so that Subversion keeps a history of the upstream
      changes.  Creating a tag for each version imported is essential for
      sanity: it will be used later on and if anything breaks it is trivial to
      extract known-good versions.
    </p>
    <p>
      Now that the source is imported, it is time to create a local branch.
    </p>
    <blockquote><tt>$ svn copy svn+ssh://svn/repos/foo/upstream/foo-20050504 svn+ssh://svn/repos/foo/trunk -m "Bring foo-20050504 into main branch"</tt></blockquote>
    <p>
      This makes a copy of the imported source into <tt>/trunk/</tt>, which you
      can happily hack away on.
    </p>
    <p>
      <cite>time passes...</cite>
    </p>
    <p>
      Now it's the 1<sup>st</sup> June, and there is a new copy of Foo to be
      imported.  Again, get a pristine copy and repeat the
      <tt>svn_load_dirs</tt>.
    </p>
    <blockquote><tt>$ svn_load_dirs svn+ssh://svn/repos/foo/ -t upstream/foo-20050601 upstream/current foo-20050601/</tt></blockquote>
    <p>
      This is where the magic really happens.  <tt>svn_load_dirs</tt> will grab
      the current copy of <tt>current</tt> and compare it with the new drop.  If
      there are any deleted or added files it will show them to you, so you can
      identify any file renames (thus both preserving history and saving space).
      It will then commit the new files into Subversion, and create a new tag.
      Then you can go into your working copy of <tt>trunk</tt> and merge the
      upstream changes with your own.
    </p>
    <blockquote><tt>$ svn merge svn+ssh://svn/repos/foo/upstream/foo-20050504 svn+ssh://svn/repos/foo/upstream/current</tt></blockquote>
    <p>
      This command will get the changes made in inbetween the 20050504 drop and
      the latest drop, and apply them to the current working directory.  There
      are bound to be a few conflicts so resolve those, and then commit.
    </p>
    <blockquote><tt>$ svn commit -m "Merged foo 200601 into trunk"</tt></blockquote>
    <p>
      All done.  Now you should go back and read the Subversion book and
      <tt>svn_load_dirs</tt> manual page, and I can ensure you they'll make a
      lot more sense this time.
    </p>
    <p>
      <small>NP: <cite>If You Can't Join Them, Beat Them</cite>, DJ Format</small>
    </p>
]]></content:encoded><category domain="http://www.burtonini.com">/computers</category><dc:date>2005-05-04T12:55:00Z</dc:date></item><item><title>Holy Cow</title><guid isPermaLink="false">computers/sarge-2005-05-03-21-30</guid><link>http://www.burtonini.com/blog/computers/sarge-2005-05-03-21-30</link><description>Sarge just froze . Woohoo! Let's hope that Etch is a little speedier...</description><content:encoded><![CDATA[<p>
  Sarge <a href="http://lists.debian.org/debian-devel-announce/2005/05/msg00001.html">just froze</a>. Woohoo!  Let's hope that Etch is a little speedier...
</p>
]]></content:encoded><category domain="http://www.burtonini.com">/computers</category><dc:date>2005-05-03T20:30:00Z</dc:date></item><item><title>Look Into My Eyes...</title><guid isPermaLink="false">life/spam-2005-05-03-20-50</guid><link>http://www.burtonini.com/blog/life/spam-2005-05-03-20-50</link><description>I just received some spam with the subject Pay attention to the email . Is this a request? Are they ...</description><content:encoded><![CDATA[    <p>
      I just received some spam with the subject <cite>Pay attention to the
      email</cite>.  Is this a request?  Are they hoping that I'll be sublimely
      influenced and start buying weight loss pills?  I wonder what is next...
    </p>
<pre>
To: ross@burtonini.com
From: foo@bar.com
Subject: Look into my eyes not around the eyes into my eyes three two one
 you're under.  Give us your credit card details and buy our useless weight
 loss pills.  [click] and you're back.

Weight Loss Pills!! Amazing Low Price!!!

http://www.dodgyweightlosspills.com
      </pre>
]]></content:encoded><category domain="http://www.burtonini.com">/life</category><dc:date>2005-05-03T19:50:00Z</dc:date></item></channel></rss>