<?xml version="1.0"?>
<!-- name="generator" content="pyblosxom/1.3.2 2/13/2006" -->
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">

<rss version="0.91">
  <channel>
    <title>Ross Burton</title>
    <link>http://www.burtonini.com/blog/</link>
    <description>A potted account of Ross' life</description>
    <webMaster>ross@burtonini.com</webMaster>
    <managingEditor>ross@burtonini.com</managingEditor>
    <language>en</language>
    <item>
      <title>Tasks 0.18 (and 0.17)</title>
      <link>http://www.burtonini.com/blog//computers/tasks-2010-07-12-20-00</link>
      <pubDate>Mon, 12 Jul 2010 20:00 +0000</pubDate>
      <description><p>
  Whilst <a href="http://www.pimlico-project.org/tasks.html">Tasks</a> isn't
  exactly under active development, I'm still maintaining it because I actually
  use it (unlike certain other projects, ahem).  So, Tasks 0.18 is released.
</p>
<ul>
  <li>Huge translation update, including several missing strings</li>
  <li>Add a "tomorrow" button to the date popup</li>
  <li>Support adding tasks from the command line</li>
  <li>Use "category" over "group" consistantly</li>
  <li>Ensure the entry is correctly styled</li>
  <li>Ellipzies categories in the combo box</li>
  <li>Correctly encode non-ASCII notes</li>
  <li>Fix compilation with GTK+ 2.18</li>
</ul>
<p>
  Tarballs and more information as usual are available at
  the <a href="http://www.pimlico-project.org/tasks.html">Pimlico Project</a>
  web site.
</p>
<p>
  In related news, we're slowly migrating over to the GNOME infrastructure.
  We've migrated the source code, next up is the tarballs and bugzilla.
</p>
</description>
    </item>
    <item>
      <title>Gypsy 0.8 Released</title>
      <link>http://www.burtonini.com/blog//computers/gypsy-2010-06-09-17-05</link>
      <pubDate>Wed, 09 Jun 2010 17:05 +0000</pubDate>
      <description><p>
  As acting release engineer of
  the <a href="http://gypsy.freedesktop.org/">Gypsy</a> project (a GPS mux, if
  you didn't know) I'm proud to announce the release of Gypsy 0.8.  So, what's
  new?
</p>
<ul>
  <li>Support the Nokia N810 integrated GPS.  If someone can verify that this
  works for the N900 too, that would be great.</li>
  <li>Ability to dump the parsed NMEA to the console for debugging</li>
  <li>Fixed over-eager old-school Garmin detection</li>
  <li>Support reading NMEA from named pipes and FIFOs</li>
  <li>Support seting the baud rate on ghetto GPS devices that don't default to a baud rate that actually works (Globalsat ND-100 and BlueNext BN-903S, I'm looking at you)</li>
  <li>Support NMEA &lt; 2.3</li>
</ul>
<p>
  Many thanks to Jussi Kukkonen for patch review, and Bastien Nocera for patch
  review and new features.
</p>
<p>
  The big question of course is what of the future?  So far we've got some rough
  ideas.  An overhaul of the device interaction layer is definitely required as
  actaully getting NMEA is becoming more complex: for integrated 3G/GPS chips
  you need to talk to oFono/ModemManager to get a socket, for some embedded GPS
  devices you need a proprietary binary that writes to a pipe, and so on.  There
  are some new features we're considering too: server-side proximity detection
  and update rate limiting.
</p>
</description>
    </item>
    <item>
      <title>Sound Juicer "I Got Nobody On My Side And Surely That Ain't Right" 2.28.1</title>
      <link>http://www.burtonini.com/blog//computers/sound-juicer/sj-2.28.1</link>
      <pubDate>Wed, 25 Nov 2009 15:43 +0000</pubDate>
      <description><p>
  Sound Juicer "I Got Nobody On My Side And Surely That Ain't Right" 2.28.1 has
  been released.  Tarballs are
  available <a href="http://www.burtonini.com/computing/sound-juicer-2.28.1.tar.bz2">on
    <tt>burtonini.com</tt></a>, or from
  the <a href="ftp://ftp.gnome.org/pub/gnome/sources/sound-juicer/2.28/">GNOME
    FTP servers</a>.  Props to Bastien for doing most of the work here.
</p>
<ul>
  <li>Many translations</li>
  <li>Use gnome-session instead of gnome-power-manager to avoid
    the machine going to sleep (Richard Hughes)</li>
  <li>Fix a few crashers when extracting an unknown CD (Bastien Nocera)</li>
  <li>Fix CD-Text metadata gathering (BN)</li>
  <li>Don't truncate submission URLs (BN)</li>
  <li>Extract UUIDs to put in ripped files' metadata (Philipp Wolfer)</li>
  <li>Fix some bugs in test program (Alex Larsson)</li>
</ul>
<p>
  Bastien originally called this release <cite>Not the maintainer, lalala, plug
  ears</cite> but we all know he is, right?
</p>
</description>
    </item>
    <item>
      <title>New Maintainer for Postr!</title>
      <link>http://www.burtonini.com/blog//computers/postr/new-maintainer-2009-11-12-10-49</link>
      <pubDate>Thu, 12 Nov 2009 10:49 +0000</pubDate>
      <description><p>
  After months of neglect by myself, Postr has a new maintainer!  Step forward
  Germán Póo-Caamaño, everyone's favourite Chilean, who has been hard at work
  migrating to <a href="http://git.gnome.org/cgit/postr">git.gnome.org</a>,
  merging patches and fixing bugs (the Upload button works!), and creating
  a <a href="http://projects.gnome.org/postr/">new project page</a>.
</p>
<p>
  Now all I need is for someone to adopt Sound Juicer...
</p>
</description>
    </item>
    <item>
      <title>London Transport Stab Stab Die Die</title>
      <link>http://www.burtonini.com/blog//life/london-2009-09-27-15-51</link>
      <pubDate>Sun, 27 Sep 2009 15:51 +0000</pubDate>
      <description><p>
  Sometimes I really, <em>really</em> hate London. A trip to London on Saturday,
  in theory: Leave Ely 16:26, arrive Kings Cross 17:34, change to Piccadilly
  line and arrive Covent Garden at 17:54.  Dinner then the 21:52 train back
  home, arriving 23:10.
</p>
<p>
  A trip to London on Saturday, in practise.  Leave Ely 16:26, arrive Kings
  Cross 10 minutes late. Change to Piccadilly line and stand outside the closed
  barriers for 15 minutes because of overcrowding. Give up on the tube, catch a
  number 59 bus to Aldwych: 10 minutes to reach Euston (faster to walk) and gave
  up after sitting in gridlock on Russel Square for 15 minutes.  Eventually get
  rather empty Piccadilly line from Russel Square to Covent Garden, arriving
  18:50.  Oh, and then <a href="http://www.wahaca.co.uk/">the restaurant</a>
  said it would be a two hour wait for a table for four.
</p>
<p>
  That said, the return journey wasn't exactly a barrel of laughs.  The tube was
  behaving so that took the expected ten minutes, but then we just missed the
  train back home and the next train wasn't for over an hour. Jump into a taxi
  to Liverpool Street to catch the 22:26... to discover there are engineering
  works and we'd have to get a bus for two hours.  Attempt to get the tube back
  to Kings Cross... more engineering works so that was out.  <em>Another</em>
  taxi back to Kings Cross and we finally get on the last train home, arriving
  at 00:35.
</p>
<p>
  Just for extra fun I'm in London for the Moblin 2.0 Release Party on Monday
  and there are <em>yet more</em> engineering works, so if I miss the 22:15 I'll
  be on a bus for half the journey.  Stab stab stab.
</p>
</description>
    </item>
    <item>
      <title>Sound Juicer "And It Ain't Even 9 In The Morning, Sorry I'm Late" 2.28.0</title>
      <link>http://www.burtonini.com/blog//computers/sound-juicer/sj-2.28.0</link>
      <pubDate>Tue, 22 Sep 2009 20:54 +0000</pubDate>
      <description><p>
  Sound Juicer "And It Ain't Even 9 In The Morning, Sorry I'm Late" 2.28.0 has
  been released.  Tarballs are
  available <a href="http://www.burtonini.com/computing/sound-juicer-2.28.0.tar.bz2">on
    <tt>burtonini.com</tt></a>, or from
  the <a href="ftp://ftp.gnome.org/pub/gnome/sources/sound-juicer/2.28/">GNOME
    FTP servers</a>.  Very little in the 2.27 cycle...
</p>
<ul>
  <li>Many translations</li>
  <li>Updated documentation</li>
  <li>Disable paranoia on playback (Bastien Nocera)</li>
  <li>Fix leaks and crashes in the metadata fetches (BN)</li>
</ul>
<p>
  Did I mention that SJ could really do with a dedicated (co)maintainer?
</p>


</description>
    </item>
    <item>
      <title>Facebook in &#161;Mojito!</title>
      <link>http://www.burtonini.com/blog//computers/mojito-facebook-2009-09-14-10-04</link>
      <pubDate>Mon, 14 Sep 2009 10:04 +0000</pubDate>
      <description><p>
  Thanks to those nice people at
  Novell, <a href="http://moblin.org/projects/mojito">Mojito</a> (everyone's
  favourite social aggregator, as used
  in <a href="http://moblin.org">Moblin</a>) now has Facebook support.  We now
  support Facebook, Flickr, Last.fm, MySpace and Twitter &#8212; any requests for the next service?
</p>
<p>
  <small>NP: <cite>Cold Water Music</cite>, AiM</small>
</p>
</description>
    </item>
    <item>
      <title>ORBit--; DBus++</title>
      <link>http://www.burtonini.com/blog//computers/eds-2009-08-17-20-47</link>
      <pubDate>Mon, 17 Aug 2009 20:47 +0000</pubDate>
      <description><p>
  Today I finally merged the <tt>dbus-hybrid</tt> branch of Evolution Data
  Server into <tt>master</tt>, which ported the addressbook part of EDS to use
  DBus instead of Bonobo.  There are bound to be some bugs in this so if you are
  running EDS from master and find a bug, <em>please</em> file it in GNOME
  Bugzilla.
</p>
<p>
  Now to finish reviewing the calendar port and merge that too...
</p>
<p>
  <small>NP: <cite>Session 2</cite> - The Herbaliser Band</small>
</p>
</description>
    </item>
    <item>
      <title>Dear Interweb: Travel Mug Suggestions</title>
      <link>http://www.burtonini.com/blog//life/coffee-2009-08-10-21-37</link>
      <pubDate>Mon, 10 Aug 2009 21:37 +0000</pubDate>
      <description><p>
  I'm looking for a travel mug for when I go to the office and need some
  recommendations. So far every one I've found is sealable enough so that it
  won't splash around when it is upright (say in a car mug holder), but as this
  has to survive a cycle ride across town in my bag it has to have a perfect
  seal.  Does anyone know of a mug like this, or should I resign myself to being
  forced to grab a coffee from <a href="http://www.taylor-st.com/">Taylor Street
  Baristas</a> when I get to London?
</p>
</description>
    </item>
    <item>
      <title>Gypsy 0.7</title>
      <link>http://www.burtonini.com/blog//computers/gypsy-2009-08-06-15-52</link>
      <pubDate>Thu, 06 Aug 2009 15:52 +0000</pubDate>
      <description><p>
  Earlier in the week someone pointed out over email that considering the entire
  geolocalisation thing is starting to come together, it's not great that Gypsy
  (the modern GPS daemon for the modern desktop) appears dead.  Well, it's not
  quite dead, and to prove it I fixed the bugs that were stopping me from
  uploading it into Debian.  Specifically, the hard requirement to run it
  as <tt>root</tt> and the lack of DBus auto-starting (to be fair, when it was
  written this wasn't supported on the system bus).  These are now fixed at last
  and Gypsy 0.7 is available to download
  from <a href="http://gypsy.freedesktop.org/">freedesktop.org</a>.
</p>
<p>
  Packages for Debian are in the upload queue now, and I believe everyones
  <a href="http://hadess.net/">favourite frockney</a> is working on updating Fedora now.
</p>
<p>
  <small>NP: <cite>Oneric</cite>, Boxcutter</small>
</p>
</description>
    </item>
    <item>
      <title>OAuth 1.0a in librest</title>
      <link>http://www.burtonini.com/blog//computers/oauth-2009-08-04-11-34</link>
      <pubDate>Tue, 04 Aug 2009 11:34 +0000</pubDate>
      <description><p>
  <a class="noline" href="http://www.flickr.com/photos/rossburton/3465149212/">
    <img class="thumbnail" src="http://farm4.static.flickr.com/3507/3465149212_af1f819e6f.jpg" width="500" height="333"/>
  </a>
</p>
<p>
  Because the world is rapidly moving to
  <a href="http://oauth.net/core/1.0a">OAuth 1.0a</a> exclusively after a rather
  painful attack was discovered against 1.0, I've recently been updating our
  bling HTTP/REST/XML IPC
  library <a href="http://moblin.org/projects/librest">librest</a> to support
  it.  In particular Twitter only supports 1.0a, and Fire Eagle shows the user
  a <em>very</em> scary message unless 1.0a is used.  Now that the code is
  finished I thought I'd give a example of the new API when used with Twitter.
</p>
<pre>#include &lt;rest/oauth-proxy.h&gt;</pre>
<p>
  Including the OAuthProxy headers is a good start.
</p>
<pre>int
main (int argc, char **argv)
{
  GError *error = NULL;
  RestProxy *proxy;

  g_thread_init (NULL);
  g_type_init ();

  proxy = oauth_proxy_new ("UfXFxDbUjk41scg0kmkFwA",
                           "pYQlfI2ZQ1zVK0f01dnfhFTWzizBGDnhNJIw6xwto",
                           "https://twitter.com/", FALSE);</pre>
<p>
  First, initalise the GLib threading and type system.  Threading is required by
  libsoup at the moment because it will use threads to lookup names in the
  background, I imagine this requirement will disappear with the next GLib release.
</p>
<p>
  Next, an OAuthProxy is created.  The two strings of garbage are our OAuth
  Consumer Key and Consumer Secret, then the URL endpoint to access
  and <tt>FALSE</tt> to say that this URL is complete and doesn't require
  expansion.  Yes, that was Consumer <cite>Secret</cite>.  Not very secret, is
  it.
</p>
<pre>  if (!oauth_proxy_request_token (OAUTH_PROXY (proxy), "oauth/request_token", "oob", &amp;error))
    g_error ("Cannot get request token: %s", error->message);</pre>
<p>
  Here we ask for a Request Token.  The function to call
  is <tt>oauth/request_token</tt>, and because this is a basic test application
  which doesn't support URI callbacks we're setting the callback URI
  to <tt>oob</tt> (out-of-band).  It is the callback URI argument that tells the
  server that we're using OAuth 1.0a, in 1.0 this parameter
  (<tt>oauth_callback</tt> at the HTTP leve) doesn't exist.
</p>
<p>
  The callback is used to pass from the server to the client
  a <cite>verifier</cite> which is then required to obtain the Access Token. In
  the case of Twitter, this is a seven digit number.  If a URI was specified
  then it would be invoked with the verifier as a query argument, but because
  we're getting it out-of-band Twitter will show it to the user and ask them to
  enter it into the application.
</p>
<pre>  g_print ("Go to http://twitter.com/oauth/authorize?oauth_token=%s then enter the PIN\n",
           oauth_proxy_get_token (OAUTH_PROXY (proxy)));
  fgets (pin, sizeof (pin), stdin);
  g_strchomp (pin);</pre>
<p>
  Here we tell the user to go to the authorisation URL (to which we add the
  request token we have so far), and then enter the PIN that Twitter gives them.
</p>
<pre>  if (!oauth_proxy_access_token (OAUTH_PROXY (proxy), "oauth/access_token", pin, &error))
    g_error ("Cannot get access token: %s", error->message);</pre>
<p>
  Now we ask for an Accesss Token.  The function to call
  is <tt>oauth/access_token</tt>, and we're passing the PIN the user entered as
  the validator.  If we were using OAuth 1.0 then the validator would
  be <tt>NULL</tt>.
</p>
<p>
  If this method succeeds then we have an Access Token, and are authenticated.
  To avoid the authentication dance the Access Token and Token Secret should be
  saved somewhere secure (gnome-keyring would be a good idea) for future use.
</p>
<pre>  RestProxyCall *call;
  call = rest_proxy_new_call (proxy);
  rest_proxy_call_set_function (call, "statuses/update.xml");
  rest_proxy_call_set_method (call, "POST");
  rest_proxy_call_add_param (call, "status", "Hello from librest!");
  if (!rest_proxy_call_sync (call, &error))
    g_error ("Cannot make call: %s", error->message);
  return 0;
}</pre>
<p>
  First a Call object is created, which encapsulates all of the data required to
  make a REST call.  The function is set to <tt>status/update.xml</tt>, the HTTP
  method set to <tt>POST</tt> (the default is, logically, <tt>GET</tt>), and a
  status message is set as a parameter.  We make a synchronous call,
  and <a href="http://twitter.com/rossburton/status/3125299577">we're done</a>.
  The bonus of using OAuth to authorise with Twitter is that you get the nice
  "from whatever" annotations on the tweets, to promote your application.
</p>
<p>
  The full source of this example is
  available <a href="http://git.moblin.org/cgit.cgi/librest/plain/examples/post-twitter.c">in
  git</a>, along with other examples for Flickr and Fire Eagle.  If you want to
  understand the differences between OAuth 1.0 and 1.0a but don't fancy reading
  both specifications in full, I can heartily
  endorse <a href="http://mojodna.net/2009/05/20/an-idiots-guide-to-oauth-10a.html">An
  Idiots Guide To OAuth 1.0a</a>.
</p>
<p>
  <small>NP: <cite>Simple Things</cite>, Zero 7</small>
</p>
</description>
    </item>
    <item>
      <title>GList Anti-patterns</title>
      <link>http://www.burtonini.com/blog//computers/list-2009-07-16-16-11</link>
      <pubDate>Thu, 16 Jul 2009 16:11 +0000</pubDate>
      <description><pre>g_list_length(children);
for (int i = 0; i < (int)num; i++) {
  GList * child = g_list_nth(children, num - i - 1);</pre>
<p>
  <a href="http://www.google.com/codesearch/p?hl=en&sa=N&cd=3&ct=rc#NVng75fSisY/mozilla/widget/src/gtk2/nsWindow.cpp&q=g_list_length%20-glib&l=3972"><strong>FAIL</strong></a>
</p>
<pre>if (g_list_length(nb_pages) != 0) {</pre>
<p>
  <a href="http://www.google.com/codesearch/p?hl=en&sa=N&cd=2&ct=rc#emmXna8sEVo/wxGTK-2.4.0/src/gtk/notebook.cpp&l=322"><strong>FAIL</strong></a>
</p>
<pre>for( i=0; i < g_list_length( GTK_CLIST(clist)->selection; i++ ){
  gint row = (gint)g_list_nth_data( GTK_CLIST(clist)->selection, i);</pre>
<p>
<a href="http://mail.gnome.org/archives/gtk-app-devel-list/1999-April/msg00037.html"><strong>TURBOFAIL</strong></a>
</p>
</description>
    </item>
    <item>
      <title>Tasks 0.16</title>
      <link>http://www.burtonini.com/blog//computers/tasks-2009-07-13-08-27</link>
      <pubDate>Mon, 13 Jul 2009 08:27 +0000</pubDate>
      <description><p>
  Some stability fixes, translation updates, and small new features in Tasks
  0.16.
</p>
<ul>
  <li>Don't crash if you edit a task and then delete it</li>
  <li>Lots of translations</li>
  <li>Don't use SexyIconEntry</li>
  <li>Move task ellipsising to the middle</li>
  <li>Show tooltips for tasks with notes</li>
</ul>
<p>
  As usual, download from
  the <a href="http://pimlico-project.org/tasks.html">Pimlico Project</a>.
</p>
</description>
    </item>
    <item>
      <title>Myzone on Eee Keyboard</title>
      <link>http://www.burtonini.com/blog//computers/eee-moblin-2009-06-15-18-00</link>
      <pubDate>Mon, 15 Jun 2009 18:00 +0000</pubDate>
      <description><p>
  Asus had previously announced the Eee Keyboard, which isn't a keyboard but
  more a netbook with a full sized keyboard and <em>wireless HDMI</em>. The end
  result being that this is the ideal companion to your huge 1080p LCD
  television in the front room for light browsing and so on.
</p>
<p>
  Now the Eee Keyboard also has a small touchscreen by the side of the keyboard,
  which had generally been shown displaing a calendar and the time.  Fairly
  useful but nothing that interesting.  However, they have recently demonstrated
  Moblin 2 running on the Eee, including the Myzone social desktop update thingy.
</p>
<p>
  <img src="http://burtonini.com/images/eee-myzone.png" alt="Myzone on Eee Keyboard"/>
</p>
<p>
  Now this is pretty neat.  I don't know how the touchscreen is related to the
  main display, but a custom Moblin 2 panel and Myzone tailored to fill the
  touchscreen would be really cool.  Now, where can I get an Eee Keyboard
  from...
</p>
<p>
  <small>NP: <cite>Arecibo Message</cite>, Boxcutter</small>
</p>
</description>
    </item>
    <item>
      <title>Emacs Command of the Weekday</title>
      <link>http://www.burtonini.com/blog//computers/emacs-2009-04-23-16-00</link>
      <pubDate>Thu, 23 Apr 2009 16:00 +0000</pubDate>
      <description><p>
  When <a href="http://blogs.gnome.org/thos/2009/04/23/vim-command-of-the-day/">Thomas</a>
  talks about "us all" learning a new Vim command, he meant "us heretics".  We
  pure and just people on the path of truth are far more interested
  in <a href="https://twitter.com/ecotd">ecotd</a>, Emacs Command of the Day, by
  our very own <a href="http://www.busydoingnothing.co.uk/blog">Neil</a>.
</p>
<p>
  Okay, I admit at times it looks like a parody, but honestly it isn't!
</p>
</description>
    </item>
    <item>
      <title>Sound Juicer "Bonnie and Clyde" 2.26.1</title>
      <link>http://www.burtonini.com/blog//computers/sound-juicer/sj-2.26.1</link>
      <pubDate>Fri, 10 Apr 2009 11:04 +0000</pubDate>
      <description><p>
  Sound Juicer "Bonnie and Clyde" 2.26.1 has been
  released.  Tarballs are
  available <a href="http://www.burtonini.com/computing/sound-juicer-2.26.1.tar.bz2">on
    <tt>burtonini.com</tt></a>, or from
  the <a href="ftp://ftp.gnome.org/pub/gnome/sources/sound-juicer/2.26/">GNOME
    FTP servers</a>.  Some crashes have been fixes:
</p>
<ul>
  <li>Read the track artist instead of album artist in Musicbrain3</li>
  <li>Don't crash if the release date is unknown</li>
  <li>Read tracks when falling back to gvfs</li>
</ul>
<p>
  Finally, a call for someone with deep LAME knowledge.  The GStreamer LAME
  element is, well, lame because it sets a number of properties to default
  values that make it very difficult for LAME to work well.  Someone who
  understands how all of the LAME settings operate needs to sit down, vet the
  settings and remove the pointless ones, unset most of the rest, leaving the
  'preset' setting as the only one which has a default value.  At the moment
  there are many contradictory default settings which mean LAME produces rather
  badly encoded files.  Any takers?
</p>
</description>
    </item>
    <item>
      <title>Tasks 0.15</title>
      <link>http://www.burtonini.com/blog//computers/tasks-2009-03-30-12-00</link>
      <pubDate>Mon, 30 Mar 2009 12:00 +0000</pubDate>
      <description><p>
  Just a small few fixes, translation updates, and little features in Tasks 0.15.
</p>
<ul>
  <li>Add --edit-task</li>
  <li>Use gtk_show_uri if available</li>
  <li>Lots of translation updates</li>
  <li>Add magic patterns "in x days" and "in x weeks"</li>
</ul>
<p>
  As usual, download from
  the <a href="http://pimlico-project.org/tasks.html">Pimlico Project</a>.
</p>
</description>
    </item>
    <item>
      <title>Sound Juicer "Don't Go Back To Dalston" 2.26.0</title>
      <link>http://www.burtonini.com/blog//computers/sound-juicer/sj-2.26.0</link>
      <pubDate>Tue, 17 Mar 2009 15:55 +0000</pubDate>
      <description><p>
  Sound Juicer "Don't Go Back To Dalston" 2.26.0 has been
  released.  Tarballs are
  available <a href="http://www.burtonini.com/computing/sound-juicer-2.26.0.tar.bz2">on
    <tt>burtonini.com</tt></a>, or from
  the <a href="ftp://ftp.gnome.org/pub/gnome/sources/sound-juicer/2.26/">GNOME
    FTP servers</a>.  Only translation updates this time, sorry.
</p>
</description>
    </item>
    <item>
      <title>Sound Juicer "I Call Out To You And You Don't Save Me?" 2.25.3</title>
      <link>http://www.burtonini.com/blog//computers/sound-juicer/sj-2.25.3</link>
      <pubDate>Fri, 13 Feb 2009 16:48 +0000</pubDate>
      <description><p>
  Sound Juicer "I Call Out To You And You Don't Save Me?" 2.25.3 has been
  released.  Tarballs are
  available <a href="http://www.burtonini.com/computing/sound-juicer-2.25.3.tar.bz2">on
    <tt>burtonini.com</tt></a>, or from
  the <a href="ftp://ftp.gnome.org/pub/gnome/sources/sound-juicer/2.25/">GNOME
    FTP servers</a>.  I actually did some coding this time!
</p>
<ul>
  <li>Put the disc number in the file name</li>
  <li>Support multiple genres</li>
  <li>Use libcanberra for event sounds</li>
  <li>Handle custom patterns in the prefs dialog</li>
  <li>Remove Musicbrainz data if the track data is changed</li>
  <li>Fix disc number editing logic</li>
  <li>And lots of bug fixes by many people</li>
</ul>
</description>
    </item>
    <item>
      <title>Sound Juicer "I Should Be Crying, But I Just Can't Let It Show" 2.25.2</title>
      <link>http://www.burtonini.com/blog//computers/sound-juicer/sj-2.25.2</link>
      <pubDate>Tue, 03 Feb 2009 13:22 +0000</pubDate>
      <description><p>
  Sound Juicer "I Should Be Crying, But I Just Can't Let It Show" 2.25.2 has been
  released.  Tarballs are
  available <a href="http://www.burtonini.com/computing/sound-juicer-2.25.2.tar.bz2">on
    <tt>burtonini.com</tt></a>, or from
  the <a href="ftp://ftp.gnome.org/pub/gnome/sources/sound-juicer/2.25/">GNOME
    FTP servers</a>.
</p>
<ul>
  <li>Port to Brasero (Luis Medinas)</li>
  <li>Fix Solaris builds (Brian Cameron)</li>
  <li>Drop libgnome (Iain Holmes, Emilio Pozuelo Monfort)</li>
  <li>Fix conflicting mnemonics in the message area (Bastien Nocera)</li>
  <li>Fix mb3 backend (Bastien Nocera)</li>
</ul>
</description>
    </item>
    <item>
      <title>3G Woes</title>
      <link>http://www.burtonini.com/blog//computers/3g-2009-01-15-11-15</link>
      <pubDate>Thu, 15 Jan 2009 11:15 +0000</pubDate>
      <description><p>
  Has anyone out there used a recent Nokia phone (E65 to be precise) as a modem
  with Network Manager 0.7?  I can't seem to get the magic right, and get one of two failures:
</p>
<pre>NetworkManager: &lt;info&gt;  (ttyACM0): powering up... 
NetworkManager: &lt;info&gt;  Registered on Home network 
an 15 10:50:04 blackadder NetworkManager: &lt;info&gt;  Associated with network: +COPS: 0,2,"23415" 
  NetworkManager: &lt;WARN&gt;  dial_done(): Dialing timed out &lt;/WARN&gt;</pre>
<p>
Or:
</p>
<pre>NetworkManager: &lt;info&gt;  Activation (ttyACM0) Stage 1 of 5 (Device Prepare) complete. 
NetworkManager: &lt;info&gt;  (ttyACM0): powering up... 
NetworkManager: &lt;info&gt;  Registered on Home network 
NetworkManager: &lt;info&gt;  Associated with network: +COPS: 0,2,"23415" 
NetworkManager: &lt;info&gt;  Connected, Woo! 
NetworkManager: &lt;info&gt;  Activation (ttyACM0) Stage 2 of 5 (Device Configure) scheduled..
. 
NetworkManager: &lt;info&gt;  Activation (ttyACM0) Stage 2 of 5 (Device Configure) starting...
 
NetworkManager: &lt;info&gt;  (ttyACM0): device state change: 4 -&gt; 5 
NetworkManager: &lt;info&gt;  Starting pppd connection 
NetworkManager: &lt;debug&gt; [1232015456.962700] nm_ppp_manager_start(): Command line: /usr/s
bin/pppd nodetach lock nodefaultroute user web ttyACM0 noipdefault usepeerdns lcp-echo-failure 0 lcp-echo-interval 
0 ipparam /org/freedesktop/NetworkManager/PPP/4 plugin /usr/lib/pppd/2.4.4/nm-pppd-plugin.so 
NetworkManager: &lt;debug&gt; [1232015456.964964] nm_ppp_manager_start(): ppp started with pid
 29590 
NetworkManager: &lt;info&gt;  Activation (ttyACM0) Stage 2 of 5 (Device Configure) complete. 
pppd[29590]: Plugin /usr/lib/pppd/2.4.4/nm-pppd-plugin.so loaded.
pppd[29590]: pppd 2.4.4 started by root, uid 0
NetworkManager: &lt;WARN&gt;  pppd_timed_out(): Looks like pppd didn't initialize our dbus mod
ule</pre>
<p>
  Anyone know what the problem could be?
</p>
</description>
    </item>
    <item>
      <title>GUPnP Repositories</title>
      <link>http://www.burtonini.com/blog//computers/gupnp-2009-01-13-17-45</link>
      <pubDate>Tue, 13 Jan 2009 17:45 +0000</pubDate>
      <description><p>
  Zeeshan created a clone of the GUPnP repository
  at <a href="http://gitorious.org/projects/gupnp">Gitorious</a> today, so to
  any contributors to GUPnP: feel free
  to <a href="http://gitorious.org/projects/gupnp/repos/mainline">clone the
  repository</a> there so that we can all benefit from a distributed version
  control system being used as it should be.
</p>

<p>
  <small>NP: <cite>Rendez-Vous (Mexico)</cite>, Erik Truffaz featuring Murcof</small>
</p>
</description>
    </item>
    <item>
      <title>Postr 0.12.3</title>
      <link>http://www.burtonini.com/blog//computers/postr/postr-2008-12-19-15-00</link>
      <pubDate>Fri, 19 Dec 2008 15:00 +0000</pubDate>
      <description><p>
  A small point release to fix some small bugs before it's 2009...
</p>
<ul>
  <li>The Upload button now works</li>
  <li>Don't delete images if the upload fails</li>
</ul>
<p>
  The <a href="http://burtonini.com/computing/postr-0.12.3.tar.gz">tarball is
    here</a>, and Debian packages are building now.
</p>
<p>
  <small>NP: <cite>Live at the Royal Albert Hall</cite>, The Cinematic Orchestra</small>
</p>
</description>
    </item>
    <item>
      <title>SSH Tip Of The Day</title>
      <link>http://www.burtonini.com/blog//computers/ssh-2008-12-11-12-00</link>
      <pubDate>Thu, 11 Dec 2008 12:00 +0000</pubDate>
      <description><p>
  Do you regularly ssh into machines which have dynamic IP addresses, and get
  really annoyed with OpenSSH warning that the IP's key doesn't match the host
  key?  I certainly do, with machines announce their names using mDNS and a DHCP
  server in my router.  Today I finally checked the documentation and found out
  how to skip this check.
</p>
<p>
  The magic option is <tt>CheckHostIP</tt>, which you can set
  in <tt>.ssh/config</tt> on a per-host level.  I've got this in
  my <tt>config</tt>:
</p>
<pre>Host *.local
  CheckHostIP no</pre>
<p>
  Now all machines I ssh into using a <tt>.local</tt> domain won't have their
  IP's key checked against the host key, because the IP is dynamic.  Sorted!
</p>
<p>
  <small>NP: <cite>Music Like Amon Tobin</cite>, Last.fm</small>
</p>
</description>
    </item>
    <item>
      <title>All Hail Our Glorious New Maintainer</title>
      <link>http://www.burtonini.com/blog//computers/contact-lookup-applet-2008-12-10-16-55</link>
      <pubDate>Wed, 10 Dec 2008 16:55 +0000</pubDate>
      <description><p>
  Or, Contact Lookup Applet 0.17 is now released.  Some bug fixes and features
  thanks to the core widget being used in Nautilus Send-To:
</p>
<ul>
  <li>Pass future maintainership to Bastien Nocera</li>
  <li>Don't search unopened books</li>
  <li>Automatically detect sources (Bastien Nocera)</li>
  <li>Only error out if all the addressbooks failed to open (BN)</li>
  <li>Show one menu item for each e-mail address, and select by default in the
    contact details dialogue (BN)</li>
</ul>
<p>
  The tarball
  is here: <a href="http://www.burtonini.com/computing/contact-lookup-applet-0.17.tar.gz">contact-lookup-applet-0.17.tar.gz</a>.
</p>
</description>
    </item>
    <item>
      <title>Old Farts Club</title>
      <link>http://www.burtonini.com/blog//life/old-fart-2008-11-26-15-00</link>
      <pubDate>Wed, 26 Nov 2008 15:00 +0000</pubDate>
      <description><p>
  Well I'm now a member of the Old Farts Club.  Who do I contact to get my
  membership badge and newsletter?
</p>

<p>
  <small>NP: <cite>Repercussions</cite>, DJ Distance</small>
</p>
</description>
    </item>
    <item>
      <title>Asynchronous Flickr Library, version 0.3</title>
      <link>http://www.burtonini.com/blog//computers/postr/flickrpc-2008-11-11-21-50</link>
      <pubDate>Tue, 11 Nov 2008 21:50 +0000</pubDate>
      <description><p>
  <em>Finally</em>, Flickrpc 0.3 is released.  Some nice features that we all
  know and love from Postr here:
</p>
<ul>
  <li>Proxy support</li>
  <li>Add more upload arguments: safety, privacy, public/friends/private,
  search_hidden</li>
  <li>Cache the users full name, username and NSID (jcrosby)</li>
  <li>Fix UTF-8 encoding problems</li>
  <li>Verify our cached token before using it</li>
</ul>
<p>
  Grab a <a href="http://burtonini.com/computing/flickrpc-0.3.tgz">tarball
  here</a> or the <a href="http://burtonini.com/bzr/flickrpc">Bazaar tree
  here</a>.
</p>
</description>
    </item>
    <item>
      <title>Sound Juicer "Old Man Take A Look At My Life" 2.25.1</title>
      <link>http://www.burtonini.com/blog//computers/sound-juicer/sj-2.25.1</link>
      <pubDate>Tue, 04 Nov 2008 21:33 +0000</pubDate>
      <description><p>
  Sound Juicer "Old Man Take A Look At My Life" 2.25.1 has been
  released.  Tarballs are
  available <a href="http://www.burtonini.com/computing/sound-juicer-2.25.1.tar.bz2">on
    <tt>burtonini.com</tt></a>, or from
  the <a href="ftp://ftp.gnome.org/pub/gnome/sources/sound-juicer/2.25/">GNOME
  FTP servers</a>.  Everyone's favourite Frockney did a huge amount of work on
  this, and I'm still talking to him after he admitted that the master plan is
  to replace Sound Juicer with Rhythmbox in Fedora!
</p>
<ul>
  <li>Chain the metadata lookups (Bastien Nocera)</li>
  <li>Finish the libmusicbrainz3 metadata fetcher (BN)</li>
  <li>Add a GVFS metadata fetcher as fallback (BN)</li>
  <li>Make libcdio option, as it breaks the GPL+Exception license (BN)</li>
  <li>Export ASIN, Discogs, Wikipedia in the internal metadata (BN)</li>
  <li>Lots of other cleanups to the metadata code (BN)</li>
  <li>Remove copy of the id3mux plugin, assume it exists now (BN)</li>
  <li>Remove Encoding field from desktop file (Pacho Ramos)</li>
  <li>Add Audio to desktop categories (Patryk Zawadzki)</li>
  <li>Correctly parse CDDA URLs (Matthew Martin)</li>
  <li>Don't free the option context</li>
</ul>

</description>
    </item>
    <item>
      <title>OfflineIMAP, ConsoleKit, GNOME Keyring</title>
      <link>http://www.burtonini.com/blog//computers/offlineimap-2008-11-04-20-00</link>
      <pubDate>Tue, 04 Nov 2008 20:00 +0000</pubDate>
      <description><p>
  Over the weekend I finally got fed up with Evolution struggling to connect to
  work's "IMAP" server (Exchange 2007), and switched to using OfflineIMAP to
  sync the mail to a local Maildir.  This as expected worked pretty well, and
  I'm now hidden from the nasty lag on the server.  However, I've had to write
  my top secret Intel password into <tt>.offlineimaprc</tt>, which sucks.  Then
  I had a cunning plan...
</p>
<p>
  GNOME Keyring will store passwords in a pretty secure manner, so somehow I
  need to fetch the password from there.  A quick look at the OfflineIMAP manual
  revealed that I can write Python functions which return the password, so I
  should be abe to hook into the keyring from OfflineIMAP.  This should be
  fairly simple:
</p>
<pre>import gobject, gnomekeyring

# The keyring needs to know the application name
if gobject.get_application_name() is None:
  gobject.set_application_name("offlineimap")

def keyring(user, host):
  keys = gnomekeyring.find_network_password_sync(user=user, server=host, protocol="imap")
  # First one will do nicely thanks
  return keys[0]["password"]
...
remotepasseval = keyring("rburton", "imapmail.intel.com")
</pre>
<p>
  After writing
  a <a href="http://burtonini.com/bzr/keyring-utils/set-password.py">small
  tool</a> to add the key to the keyring, to my surprise this worked first time.
  I bounced with glee, but ten minutes later I had error messages from
  OfflineIMAP running from cron in my inbox...
</p>
<p>
  GNOME Keyring uses an environment variable to find the daemon, which isn't set
  in a cron environment. GNOME Keyring will fall back to using DBus to find the
  daemon, but the DBus session bus environment variable isn't set.  DBus will
  fall back to reading the session bus address from the X root window, but
  DISPLAY isn't set so that doesn't work either...  EPIC FAIL.
</p>
<p>
  But, I thought, I upgraded to Network Manager 0.7 last week which bought in
  ConsoleKit.  If I ask ConsoleKit for my sessions I should be able to find a
  session with has an X connection, then I can set DISPLAY appropriately and
  then the chain described above will work, and I'll have my password.
  Shockingly, this worked first time too:
</p>
<pre>import dbus, os
if not os.getenv("DISPLAY"):
  # Get the ConsoleKit manager
  bus = dbus.SystemBus()
  manager_obj = bus.get_object('org.freedesktop.ConsoleKit', '/org/freedesktop/ConsoleKit/Manager')
  manager = dbus.Interface(manager_obj, 'org.freedesktop.ConsoleKit.Manager')
  
  # For each of my sessions..
  for ssid in manager.GetSessionsForUnixUser(os.getuid()):
    obj = bus.get_object('org.freedesktop.ConsoleKit', ssid)
    session = dbus.Interface(obj, 'org.freedesktop.ConsoleKit.Session')
    # Get the X11 display name
    dpy = session.GetX11Display()
    if dpy:
      # If we have a display, set the environment variable
      os.putenv("DISPLAY", dpy);
      break</pre>
<p>
  (man, I really with python-dbus had a better syntax for getting objects with a specific interface)
</p>
<p>
  So there you go, integrating OfflineIMAP with the GNOME Keyring via ConsoleKit
  and DBus. Surprisingly this was pretty easy to do, thanks to DBus and the
  magic provided by ConsoleKit it is 100% hack free.
</p>
</description>
    </item>
    <item>
      <title>Tasks In GNOME SVN</title>
      <link>http://www.burtonini.com/blog//computers/tasks-2008-10-17-20-15</link>
      <pubDate>Fri, 17 Oct 2008 20:15 +0000</pubDate>
      <description><p>
  Thanks to the heroic work of Olav and Thomas, Tasks (along with Contacts and
  Dates) is now in GNOME SVN.  Translators, feel free to do your thing.  Oh, and
  would it be possible to get Tasks added to Damned Lies?
</p>
</description>
    </item>
    <item>
      <title>What A Difference A Day Makes</title>
      <link>http://www.burtonini.com/blog//life/difference-2008-10-06-11-22</link>
      <pubDate>Mon, 06 Oct 2008 11:22 +0000</pubDate>
      <description><p>
  Saturday:
</p>
<p>
  <a class="noline" href="http://www.flickr.com/photos/rossburton/2918387214/" title="Week 38 + 3 by Ross Burton, on Flickr">
    <img class="thumbnail" src="http://farm4.static.flickr.com/3229/2918387214_4ae87f386f.jpg" width="333" height="500" alt="Week 38 + 3" />
  </a>
</p>

<p>
  Sunday:
</p>
<p>
  <a class="noline" href="http://www.flickr.com/photos/rossburton/2918392898/" title="Alexander Dylan Burton by Ross Burton, on Flickr">
    <img class="thumbnail" src="http://farm4.static.flickr.com/3157/2918392898_fd75aa484c.jpg" width="500" height="333" alt="Alexander Dylan Burton" />
  </a>
</p>
</description>
    </item>
    <item>
      <title>Translation Nightmare</title>
      <link>http://www.burtonini.com/blog//computers/tasks-2008-10-01-21-17</link>
      <pubDate>Wed, 01 Oct 2008 21:17 +0000</pubDate>
      <description><p>
  I just got a new bug titled <cite>Very weird translation template, need
  comments in .pot file to clarify</cite>, and giggled to myself.  I was
  wondering how long it would be for this bug to be filed.  The problem is that
  whilst most of the translatable strings in Tasks are pretty boring: "Tasks",
  "today", "Priority" and so on, all of a sudden the template goes a bit mental:
</p>
<pre>"^(?&lt;task&gt;.+) (?:by|due|on)? (?&lt;month&gt;\\w+) (?&lt;day&gt;\\d{1,2})(?:st|nd|rd|th)?$"</pre>
<p>
  Apparently the average translator doesn't think that learning PCRE-style
  regular expressions, and reading the source that uses this string to understand
  how it is to be used, is appropriate. [note: this is sarcasm]
</p>
<p>
  Maybe I should have added some translator comments to clarify exactly what I
  meant by this.  These monster strings (all in <tt>koto-date-parser.c</tt>)
  are <tt>GRegex</tt> regular expressions which are used to parse the user's
  input to try and extract meaningful date information.  To translate these
  strings you'll need to have a basic understanding of regular expressions: if
  you don't then skip them and hopefully someone who does will finish the
  translation.  If you know regular expressions then translating these strings
  is easy, honest.
</p>
<p>
  The golden rule is to never translate the words which look like
  this: <tt>(?&lt;foo&gt;</tt>.  These are markers which identify portions of
  the input (such as task or month) and need to remain in English, although they
  can be moved around if required.  The rest of the strings are translatable.
  I'll give an example using the French translation by St&eacute;phane
  Raimbault.  First, the string in English and a worked example:
</p>
<pre>"^(?&lt;task&gt;.+) (?:by|due|on)? (?&lt;day&gt;\\d{1,2})(?:st|nd|rd|th)? (?&lt;month&gt;\\w+)$"</pre>
<p>
  First, we have a sequence of any characters identified
  as <tt>task</tt>, which magically expands to be as many as possible.  This is
  optionally followed by one of the words "by", "due" or "on".  This is followed
  by one or two digits identified as <tt>day</tt> followed by "st", "nd", "rd"
  or "th".  Finally a sequence of characters which is identified
  as <tt>month</tt>.  If the user had entered "pay
  bills on 2nd june" then <tt>task</tt> would be "pay bills", <tt>day</tt> would
  be "2", and <tt>month</tt> would be "june".  Tasks can then turn "june" into a
  month number through other translations, and it now knows what date the user
  entered.   In French, this translates as follows:
</p>
<pre>"^(?&lt;task&gt;.+) (?:pour|prévu|pour le)? (?&lt;day&gt;\\d{1,2})(?:er|e)? (?&lt;month&gt;\\w+)$"</pre>
<p>
  See, I said it was easy!  All I need now is a legion of translators who
  understand regular expressions enough to correctly translate the new Tasks... [this, again, is sarcasm]
  Luckily, plans are afoot to move the Tasks source to the GNOME Subversion
  server, so the full fury of the GNOME translation team can attack this.
</p>

<p>
  <small>NP: <cite>Trailer Park</cite>, Beth Orton</small>
</p>
</description>
    </item>
    <item>
      <title>Tasks 0.14</title>
      <link>http://www.burtonini.com/blog//computers/tasks-2008-09-29-08-45</link>
      <pubDate>Mon, 29 Sep 2008 08:45 +0000</pubDate>
      <description><p>
  It's been nearly 10 months after the previous Tasks release, for which I
  profusely apologise.  I wanted to fix one final bug before releasing, which
  sadly took five months to get around too...  I eventually fixed it last night,
  so here is <a href="http://pimlico-project.org/tasks.html">Tasks 0.14</a>.
</p>
<ul>
  <li>Magic date parser when adding tasks</li>
  <li>Support libunique in the GTK+ port (Jonny Lamb)</li>
  <li>Support OWL window menus in the GTK+ port</li>
  <li>Save and restore the edit window size</li>
  <li>Add a clickable note icon (#548)</li>
  <li>Ellipsize the undo/redo menu items (#741)</li>
  <li>Make sure the date popup doesn't go off the screen (#752)</li>
</ul>
<p>
  The most interesting change in this release is the magic date parser, which
  first landed back in March.  This lets you use <cite>Google Calendar</cite>
  style descriptive tasks such as "release tasks today", "do shopping next
  tuesday" or "pay bills on 2nd". There are many patterns that are matched but
  I need two things from any users of Tasks.
</p>
<ol>
  <li>
    Translations.  At the moment there are only English and French translations
    for the strings, which are critical for the parser to work.  Translators,
    please update the translations!
  </li>
  <li>
    Feedback. The parser handles all of the natural language expressions that I
    thought would be useful.  There are probably plenty more which are not
    handled, so if you find one which isn't handled (or is handled incorrectly)
    then please <a href="http://bugzilla.openedhand.com">file a bug</a>.
  </li>
</ol>
<p>
  Oh, and one last thing.  The OpenMoko and Maemo ports have likely bitrotted.
  New functionality has been added to the platform abstraction and I don't think
  those ports were updated.  If someone actively uses Tasks on either Maemo or
  OpenMoko and is willing to test builds before release,
  please <a href="mailto:ross@burtonini.com">contact me</a>.
</p>
</description>
    </item>
    <item>
      <title>Sound Juicer "Why Should You Know Better By Now" 2.24.0</title>
      <link>http://www.burtonini.com/blog//computers/sound-juicer/sj-2.24.0</link>
      <pubDate>Sun, 21 Sep 2008 13:41 +0000</pubDate>
      <description><p>
  Sound Juicer "Why Should You Know Better By Now" 2.24.0 has been
  released.  Tarballs are
  available <a href="http://www.burtonini.com/computing/sound-juicer-2.24.0.tar.bz2">on
    <tt>burtonini.com</tt></a>, or from
  the <a href="ftp://ftp.gnome.org/pub/gnome/sources/sound-juicer/2.24/">GNOME
  FTP servers</a>.
</p>
</description>
    </item>
    <item>
      <title>Sound Juicer "Stab Stab Stab! This Is More Than A Message" 2.23.3</title>
      <link>http://www.burtonini.com/blog//computers/sound-juicer/sj-2.23.3</link>
      <pubDate>Mon, 08 Sep 2008 11:01 +0000</pubDate>
      <description><p>
  Sound Juicer "Stab Stab Stab! This Is More Than A Message" 2.23.3 has been
  released.  Tarballs are
  available <a href="http://www.burtonini.com/computing/sound-juicer-2.23.3.tar.bz2">on
    <tt>burtonini.com</tt></a>, or from
  the <a href="ftp://ftp.gnome.org/pub/gnome/sources/sound-juicer/2.23/">GNOME
  FTP servers</a>.
</p>
<ul>
  <li>Don't crash when exiting</li>
  <li>Don't distribute full GFDL with docs</li>
  <li>Correctly parse CDDA URLs (#550131, thanks Matthew Martin)</li>
</ul>
</description>
    </item>
    <item>
      <title>Why I Hate September</title>
      <link>http://www.burtonini.com/blog//life/phone-2008-09-03-10-00</link>
      <pubDate>Wed, 03 Sep 2008 10:00 +0000</pubDate>
      <description><p>
  I hate September because it is in September that I finally get my mobile phone
  bill from GUADEC.
</p>
<blockquote>
  <b>Total of 5 Calls while abroad 	00:23:20 	&pound;31.402</b>
</blockquote>
<p>
  Money grabbing tight fisted evil bastards.  This includes a rate of
  &pound;1.25 a minute to <em>receive</em> a call.
</p>
<p>
  <small>NP: <cite>Los Angeles</cite>, Flying Lotus</small>
</p>
</description>
    </item>
    <item>
      <title>Sound Juicer "I Don't Know What You Heard But It's Mandatory" 2.23.2</title>
      <link>http://www.burtonini.com/blog//computers/sound-juicer/sj-2.23.2</link>
      <pubDate>Mon, 18 Aug 2008 14:59 +0000</pubDate>
      <description><p>
  Sound Juicer "I Don't Know What You Heard But It's Mandatory" 2.23.2 has been
  released.  Tarballs are
  available <a href="http://www.burtonini.com/computing/sound-juicer-2.23.2.tar.bz2">on
    <tt>burtonini.com</tt></a>, or from
  the <a href="ftp://ftp.gnome.org/pub/gnome/sources/sound-juicer/2.23/">GNOME
  FTP servers</a>.  Lots of fixes from the Amazing Matthew Martin:
</p>
<ul>
  <li>Stop playback when the disc is re-read (Matthew Martin)</li>
  <li>Only eject the disc if tracks were ripped (MM)</li>
  <li>Don't try and move the non-existant temp file when skipping (MM)</li>
  <li>Free the option context (Pierre Benz)</li>
  <li>Don't block until n-c-b quits when copying discs</li>
  <li>Fix playback track switching (MM)</li>
</ul>

</description>
    </item>
    <item>
      <title>Sound Juicer "We're Singing In Tune But Now It's Over" 2.23.1</title>
      <link>http://www.burtonini.com/blog//computers/sound-juicer/sj-2.23.1</link>
      <pubDate>Mon, 04 Aug 2008 20:33 +0000</pubDate>
      <description><p>
  Sound Juicer "We're Singing In Tune But Now It's Over" 2.23.1 has been released.  Tarballs
  are available <a href="http://www.burtonini.com/computing/sound-juicer-2.23.1.tar.bz2">on
    <tt>burtonini.com</tt></a>, or from
  the <a href="ftp://ftp.gnome.org/pub/gnome/sources/sound-juicer/2.23/">GNOME
  FTP servers</a>.  Nothing that amazing here, sorry:
</p>
<ul>
  <li>Fix play+pause+play (#523182, thanks Matthew Martin)</li>
  <li>Add %ay, album year (#522909, Juan F. Giménez Silva)</li>
</ul>
</description>
    </item>
  </channel>
</rss>
