<?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>Sound Juicer &quot;I Don't Know What You Heard But It's Mandatory&quot; 2.23.2</title><guid isPermaLink="false">computers/sound-juicer/sj-2.23.2</guid><link>http://www.burtonini.com/blog/computers/sound-juicer/sj-2.23.2</link><description>Sound Juicer &quot;I Don't Know What You Heard But It's Mandatory&quot; 2.23.2 has been released. Tarballs are available on burtonini.com ...</description><content:encoded><![CDATA[<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>

]]></content:encoded><category domain="http://www.burtonini.com">/sound-juicer</category><dc:date>2008-08-18T13:59:53Z</dc:date></item><item><title>Sound Juicer &quot;We're Singing In Tune But Now It's Over&quot; 2.23.1</title><guid isPermaLink="false">computers/sound-juicer/sj-2.23.1</guid><link>http://www.burtonini.com/blog/computers/sound-juicer/sj-2.23.1</link><description>Sound Juicer &quot;We're Singing In Tune But Now It's Over&quot; 2.23.1 has been released. Tarballs are available on burtonini.com , ...</description><content:encoded><![CDATA[<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>
]]></content:encoded><category domain="http://www.burtonini.com">/sound-juicer</category><dc:date>2008-08-04T19:33:17Z</dc:date></item><item><title>GUADEC</title><guid isPermaLink="false">computers/guadec-2008-07-29-21-40</guid><link>http://www.burtonini.com/blog/computers/guadec-2008-07-29-21-40</link><description>Hmm, so I never did blog a GUADEC roundup. In two words: it rocked. Congratulations to Baris and everyone else ...</description><content:encoded><![CDATA[<p>
  Hmm, so I never did blog a GUADEC roundup.  In two words: it rocked.
  Congratulations to Baris and everyone else who organised it!
</p>
<p>
  In other late GUADEC news I finally reviewed the rest of my GUADEC photos and
  <a href="http://www.flickr.com/photos/rossburton/sets/72157606166808992/">uploaded
  them to Flickr</a>.  I'll try and not take a month to upload next time,
  honest!
</p>
]]></content:encoded><dc:date>2008-07-29T20:40:00Z</dc:date></item><item><title>OH Wares</title><guid isPermaLink="false">computers/oh-wares-2008-07-11-14-14</guid><link>http://www.burtonini.com/blog/computers/oh-wares-2008-07-11-14-14</link><description>I've just been informed that Rob Bradford has one large &quot;I3&lt;OH&quot; left. If you want one, then find him fast! ...</description><content:encoded><![CDATA[<p>
  I've just been informed that Rob Bradford has <em>one</em> large "I3&lt;OH"
  left.  If you want one, then find him fast!  The grapevine also says that
  there is a crack team of
  rouge <a href="http://o-hand.com/2008/05/09/ohmen-arrived/">OH Men</a> on the
  loose, so watch out!
</p>
]]></content:encoded><dc:date>2008-07-11T13:14:00Z</dc:date></item><item><title>GUPnP Action</title><guid isPermaLink="false">computers/gupnp-2008-06-30-14-00</guid><link>http://www.burtonini.com/blog/computers/gupnp-2008-06-30-14-00</link><description>Action around GUPnP has been really hotting up recently. Jorn is back from the dead studying and demonstrating that he ...</description><content:encoded><![CDATA[<p>
  Action around GUPnP has been really hotting up recently.  Jorn is back
  from <strike>the dead</strike> studying and demonstrating that he hasn't lost
  his touch by refactoring the various audio/visual widgets spread around our
  toy projects
  into <a href="http://svn.o-hand.com/repos/misc/trunk/libowl-av/">libowl-av</a>,
  adding Vala bindings, and then writing
  a <a href="http://svn.o-hand.com/repos/gupnp/trunk/gupnp-media-renderer/">MediaRenderer</a>
  implementation on top of that.  This means we now have reference
  implementations of the full media specification in the form of
  gupnp-media-server (server), gupnp-av-cp (control), and gupnp-media-renderer
  (playback).
</p>
<p>
  Also Johan Kristell posted to the list for the first time with an
  implementation of
  the <a href="http://www.upnp.org/standardizeddcps/digitalsecuritycamera.asp">Digital
  Security Camera specifications</a>, both server and
  client.  <a href="http://www.kristell.se/network-camera/">GUPnP Network
  Camera</a> currently only supports still images, but as it is based on
  GStreamer video can't be far away.
</p>
]]></content:encoded><dc:date>2008-06-30T13:00:00Z</dc:date></item><item><title>Erm...</title><guid isPermaLink="false">computers/fail-2008-06-23-18-00</guid><link>http://www.burtonini.com/blog/computers/fail-2008-06-23-18-00</link><description>case &quot;$1&quot; in *.sh) # Source shell script for speed. ( trap - INT QUIT TSTP scriptname=$1 shift . $scriptname ...</description><content:encoded><![CDATA[<pre>case "$1" in
        *.sh)
                # Source shell script for speed.
                (
                        trap - INT QUIT TSTP
                        scriptname=$1
                        shift
                        . $scriptname
                )
                ;;
        *)
                "$@"
                ;;
  esac</pre>
<p>
  OPTIMISATION FAIL.
</p>
<p>
  <small>NP: <cite>Roseland NYC Live</cite>, Portishead</small>
</p>
]]></content:encoded><dc:date>2008-06-23T17:00:00Z</dc:date></item><item><title>Zebu 0.1</title><guid isPermaLink="false">computers/zebu-2008-06-22-14-20</guid><link>http://www.burtonini.com/blog/computers/zebu-2008-06-22-14-20</link><description>As one of the maintainers of debian.o-hand.com I use the always wonderful pbuilder and cowbuilder to rebuild packages originally build ...</description><content:encoded><![CDATA[<p>
  As one of the maintainers
  of <a href="http://debian.o-hand.com/">debian.o-hand.com</a> I use the always
  wonderful <tt>pbuilder</tt> and <tt>cowbuilder</tt> to rebuild packages
  originally build for Debian Sid for Debian Etch, Ubuntu Gutsy, Hardy, and so
  on.  Continually typing the commands to update the cowbuilders can get
  tiresome fast so last week I scratched the itch and
  produced <cite>Zebu</cite>.
</p>
<p>
  <img src="http://burtonini.com/computing/screenshots/zebu-0.1.png" alt="Zebu"/>
</p>
<p>
  As of version 0.1 it is barely functional but it does let you update or login
  to a cowbuilder.  It requires that the cowbuilders are
  named <tt>/var/cache/pbuilder/*.cow</tt> and doesn't support "traditional"
  pbuilder rootstraps yet, but that is planned.  Anyway, cowbuilders are the
  future.
</p>
<p>
  If anyone else thinks this could be useful there is
  a <a href="http://burtonini.com/computing/zebu-0.1.tar.gz">tarball</a> and
  a <a href="http://burtonini.com/bzr/zebu">Bazaar repository</a>.  I must also
  thank the wonderful Ulisse Perusin for the rocking icon he created.
</p>
<p>
  <small>NP: <cite>Cosmos</cite>, Murcof</small>
</p>
]]></content:encoded><dc:date>2008-06-22T13:20:00Z</dc:date></item><item><title>Wanted: Icon</title><guid isPermaLink="false">computers/wanted-icon-2008-06-18-09-40</guid><link>http://www.burtonini.com/blog/computers/wanted-icon-2008-06-18-09-40</link><description>I'm hacking on a small tool at the moment and need an icon for the launcher. A simple icon of ...</description><content:encoded><![CDATA[<p>
  I'm hacking on a small tool at the moment and need an icon for the launcher.
  A simple icon of a cow's head would be perfect: anyone know of something like
  this, or willing to quickly draw one for me?
</p>
]]></content:encoded><dc:date>2008-06-18T08:40:00Z</dc:date></item><item><title>Postr 0.12.2</title><guid isPermaLink="false">computers/postr/postr-2008-06-15-15-10</guid><link>http://www.burtonini.com/blog/computers/postr/postr-2008-06-15-15-10</link><description>Another point release of Postr which should fix Flickr authentication for good this time. Also the file size limit has ...</description><content:encoded><![CDATA[<p>
  Another point release
  of <a href="http://burtonini.com/blog/computers/postr">Postr</a> which should
  fix Flickr authentication for good this time.  Also the file size limit has
  been increased to 20Mb to match the new Flickr limits.
</p>
<p>
  The <a href="http://burtonini.com/computing/postr-0.12.2.tar.gz">tarball is
    here</a>, and packages for Debian are being worked on next.
</p>
]]></content:encoded><category domain="http://www.burtonini.com">/postr</category><dc:date>2008-06-15T14:10:00Z</dc:date></item><item><title>UPnP in Epiphany</title><guid isPermaLink="false">computers/gupnp-ephy-2008-06-12-22-10</guid><link>http://www.burtonini.com/blog/computers/gupnp-ephy-2008-06-12-22-10</link><description>One of the more useful features of the UPnP specification is that devices have a standard way of specifying a ...</description><content:encoded><![CDATA[<p>
  One of the more useful features of the UPnP specification is that devices have
  a standard way of specifying a "presentation URL", a human-readable web page
  representing the device.  For example, my SoundBridge has a web page which
  shows the currently playing music and lets me switch radio station, whilst my
  router's presentation URL is the administration page.
</p>
<p>
  Useful, but not exposed anywhere.  Until now...
</p>
<p>
  <img src="http://burtonini.com/computing/screenshots/ephy-upnp.png" alt="GUPnP in Epiphany" width="609" height="400"/>
</p>
<p>
  This is a small Epiphany extension which adds all presentation URLs it finds
  to the <cite>Nearby Sites</cite> menu, just like the URLs discovered using
  Avahi.  It needs a bit more work as it doesn't yet handle being unloaded or
  devices disappearing, but it is certainly usable now.
</p>
<p>
  If anyone else wants to have a go with it, the source can be fetched using
  Bazaar from <a href="http://burtonini.com/bzr/ephy-gupnp/">here</a>.  Watch
  out for the currently hard-coded paths...
</p>
]]></content:encoded><dc:date>2008-06-12T21:10:00Z</dc:date></item><item><title>GUPnP Documentation</title><guid isPermaLink="false">computers/gupnp-2008-06-10-17-15</guid><link>http://www.burtonini.com/blog/computers/gupnp-2008-06-10-17-15</link><description>What started off as a quick tutorial to writing a service using GUPnP turned into a week of reviewing and ...</description><content:encoded><![CDATA[<p>
  What started off as a quick tutorial to writing a service using GUPnP turned
  into a week of reviewing and writing more GUPnP documentation.  It's all
  landed in our Subversion repository now but if anyone wants to see how to
  write
  a <a href="http://burtonini.com/computing/gupnp-docs/client-tutorial.html">UPnP
  client</a>, <a href="http://burtonini.com/computing/gupnp-docs/server-tutorial.html">implement
  the UPnP networked light bulb service</a>, or just browse the beginnings
  of the <a href="http://burtonini.com/computing/gupnp-docs/glossary.html">glossary</a>, then I have a local copy of
  the <a href="http://burtonini.com/computing/gupnp-docs/">latest documentation
  online</a>.
</p>

<p>
  <small>NP: <cite>Aerial</cite>, 2562</small>
</p>
]]></content:encoded><dc:date>2008-06-10T16:15:00Z</dc:date></item><item><title>Sound Juicer &quot;Harder Now With Higher Speed&quot; 2.23.0</title><guid isPermaLink="false">computers/sound-juicer/sj-2.23.0</guid><link>http://www.burtonini.com/blog/computers/sound-juicer/sj-2.23.0</link><description>Sound Juicer &quot;Harder Now With Higher Speed&quot; 2.23.0 has finally been released.. Tarballs are available on burtonini.com , or from ...</description><content:encoded><![CDATA[<p>
  Sound Juicer "Harder Now With Higher Speed" 2.23.0 has finally been released..  Tarballs
  are available <a href="http://www.burtonini.com/computing/sound-juicer-2.23.0.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>.  Hot new features!
</p>
<ul>
  <li>Port to GIO (Michael Terry)</li>
  <li>Update URL handling for New GIO World Order (Bastien Nocera)</li>
  <li>Fix display problems with the cluebar (Pekka Vuorela)</li>
  <li>Add audio preview when overwriting (Luca Cavalli)</li>
  <li>Use GtkVolmeButton instead of BaconVolume (MT)</li>
  <li>Fix crash when no profile is selected (Matthew Martin)</li>
  <li>Add []&lt;&gt; to the special character list (MM)</li>
  <li>Make the year and disc entries a11y (Patrick Wade)</li>
  <li>Fix error handling in CD playback (Tim-Philipp Müller)</li>
  <li>Require intltool 0.40</li>
</ul>
<p>
  I really need some heavy testing on the GIO rewrite, so please try and extract
  tracks to as many different targets as possible.  Although I expect
  confirmation that using an unmounted remote location currently fails, it
  should be possible to use this to write to Samba, OBEX-FTP, and so on.
</p>
]]></content:encoded><category domain="http://www.burtonini.com">/sound-juicer</category><dc:date>2008-06-05T12:34:03Z</dc:date></item><item><title>Postr 0.12.1</title><guid isPermaLink="false">computers/postr/postr-2008-05-27-10-00</guid><link>http://www.burtonini.com/blog/computers/postr/postr-2008-05-27-10-00</link><description>I just made a quick Postr 0.12.1 release to fix authentication with non-trivial HTTP handler strings. If you can't login ...</description><content:encoded><![CDATA[<p>
  I just made a quick Postr 0.12.1 release to fix authentication with
  non-trivial HTTP handler strings.  If you can't login to Flickr with Postr,
  then this release <em>should</em> fix it for you.
</p>
<p>
  The <a href="http://burtonini.com/computing/postr-0.12.1.tar.gz">tarball is
    here</a>, and packages for Debian are being built now.
</p>
<p>
  In other news postr.dev has seen a lot of development and is looking pretty
  damn neat at the moment.
</p>
]]></content:encoded><category domain="http://www.burtonini.com">/postr</category><dc:date>2008-05-27T09:00:00Z</dc:date></item><item><title>GUPnP Bindings Generation</title><guid isPermaLink="false">computers/gupnp-binding-2008-05-23-16-40</guid><link>http://www.burtonini.com/blog/computers/gupnp-binding-2008-05-23-16-40</link><description>I've now finished the first draft of the bindings generation tool for GUPnP, which is now part of libgupnp itself. ...</description><content:encoded><![CDATA[<p>
  I've now finished the first draft of the bindings generation tool for GUPnP,
  which is now part of <tt>libgupnp</tt> itself.  I've added both blocking and
  non-blocking wrappers, so if you wanted to get the external IP there is the
  choice of this for blocking calls:
</p>
<pre>char *ip;
GetExternalIPAddress (proxy, &amp;ip, &amp;error);</pre>
<p>
  Or this for non-blocking calls:
</p>
<pre>static void
external_ip_cb (GUPnPServiceProxy *proxy, char * ip,
                GError *error, gpointer userdata)
{
  // ...
}
...
  GetExternalIPAddress_async (proxy, external_ip_cb, NULL);</pre>
<p>
  I've ported my test applications to use the bindings, which are available in
  <a href="http://burtonini.com/bzr/gupnp-demos">this Bazaar repository</a>.  It
  appears to work quite well, I just need to test it against all of the official
  service descriptions and add a few small features.
</p>
]]></content:encoded><dc:date>2008-05-23T15:40:00Z</dc:date></item><item><title>GUPnP Autogeneration</title><guid isPermaLink="false">computers/upnp-gen-2008-05-22-16-25</guid><link>http://www.burtonini.com/blog/computers/upnp-gen-2008-05-22-16-25</link><description>The problem with GUPnP is that (like DBus) when programming from C you need to specify the types of each ...</description><content:encoded><![CDATA[<p>
  The problem with GUPnP is that (like DBus) when programming from C you need to
  specify the types of each argument when making a method call:
</p>
<pre>gupnp_service_proxy_send_action (proxy,
                                   "AddPortMapping", &amp;error,
                                   /* In arguments */
                                   "NewRemoteHost", G_TYPE_STRING, "",
                                   "NewExternalPort", G_TYPE_UINT, external_port,
                                   "NewProtocol", G_TYPE_STRING, "TCP",
                                   "NewInternalPort", G_TYPE_UINT, internal_port,
                                   "NewInternalClient", G_TYPE_STRING, internal_host,
                                   "NewEnabled", G_TYPE_BOOLEAN, TRUE,
                                   "NewPortMappingDescription", G_TYPE_STRING, desc,
                                   "NewLeaseDuration", G_TYPE_UINT, 0,
                                   NULL,
                                   /* Out arguments */
                                   NULL);</pre>
<p>
  Now, that really is quite tiresome.  It basically means that you need to have
  the service reference to hand when coding, because you need to know the name
  and type of each argument. Luckily for DBus part of <tt>dbus-glib</tt> is a
  binding tool which can create type-safe wrappers so that making method calls
  is much easier.  Wouldn't it be nice if there was something similar for GUPnP,
  which generated inline functions with prototypes like this:
</p>
<pre>static inline gboolean
AddPortMapping (GUPnPServiceProxy *proxy,
                char * in_NewRemoteHost,
                unsigned int in_NewExternalPort,
                char * in_NewProtocol,
                unsigned int in_NewInternalPort,
                char * in_NewInternalClient,
                gboolean in_NewEnabled,
                char * in_NewPortMappingDescription,
                unsigned int in_NewLeaseDuration,
                GError **error);</pre>
<p>
  Well, now there is.  I've put
  the <a href="http://burtonini.com/computing/gupnp-bind.py">initial code
  here</a> but will be moving this into GUPnP itself shortly.  The next task is
  to add asynchronous wrappers just as in dbus-glib, but that shouldn't be too
  hard.
</p>
]]></content:encoded><dc:date>2008-05-22T15:25:00Z</dc:date></item><item><title>Anjuta+Poky Integration</title><guid isPermaLink="false">computers/anjuta-2008-05-20-17-40</guid><link>http://www.burtonini.com/blog/computers/anjuta-2008-05-20-17-40</link><description>Yesterday I tested and rolled a new release of the Poky integration plugin for Anjuta , created by our fearless ...</description><content:encoded><![CDATA[<p>
  Yesterday I tested and rolled a new release of
  the <a href="http://labs.o-hand.com/anjuta-poky-sdk-plugin/">Poky
    integration plugin for Anjuta</a>, created by our
  fearless <a href="http://www.robster.org.uk/">Sir Bradford</a>.  This is a
  very special piece of magic which lets you use a Poky SDK in Anjuta to
  cross-compile binaries without any pain, and will even deploy, execute and
  debug the binaries in a QEMU for testing. As part of the release process I
  had to test it, so I'll step through what I did as a brief tutorial on how
  to use Anjuta with Poky.
</p>
<p>
  The prerequisites are Anjuta, the Anjuta Poky SDK plugin, and QEMU.  These are
  all available for installation from
  our <a href="http://debian.o-hand.com">Debian repository</a> for Debian/Ubuntu
  users, everyone else will have to build from source, sorry!  You'll also need
  a Poky ARM SDK and QEMU ARM images from
  the <a href="http://pokylinux.org">Poky</a> web site.  The SDK is a tarball
  which contains a cross compiler with base libraries (glibc, GTK+, and so on)
  and should be extracted onto your machine (it extracts the SDK
  into <tt>/usr/local/poky</tt>).  The QEMU image consists of a kernel and
  a <tt>ext3</tt> file system which will boot Poky inside QEMU.
</p>
<p>
  To start I fetched a checkout
  of <a href="http://pimlico-project.org/tasks.html">Tasks</a> and loaded up
  Anjuta.  I don't have an existing Anjuta project for Tasks, so I used
  <cite>File &rarr; New &rarr; Project From Existing Sources</cite> to create a project using
  the checkout.  At this point I could do native development using
  <cite>Build &rarr; Run Configure</cite> and <cite>Build &rarr; Build
    Project</cite> to configure and compile the source, but we want to
  cross-compile.
</p>
<p>
  To activate cross compiling go to <cite>Edit &rarr; Preferences &rarr; General
    &rarr; Installed Plugins</cite> and enable the <cite>Poky SDK</cite> plugin.
  This will add a new page <cite>Poky SDK</cite> to the preferences dialog.
  We're using an external toolchain so set the SDK root
  to <tt>/usr/local/poky/eabi-glibc/arm</tt> and the toolchain triplet
  to <tt>arm-poky-linux-gnueabi</tt>.  We're also using QEMU instead of a real
  device so set the paths to the kernel and root filesystem (remembering to
  uncompress the filesystem).  We're now done configuring, so the preferences
  dialog can be closed.  However notice that if you switch from using a SDK to
  building with a full Poky tree you can use the cross-compiler it produces
  directly, and you can also use an external device instead of QEMU: the only
  requirement is that you can SSH into it.
</p>
<p>
  Now to do the build.  Use <cite>Build &rarr; Run Configure</cite> to configure
  Tasks, passing any extra options you want.  Note that if you want to debug
  your build in the future you'll need to enter <tt>CFLAGS=-g</tt> here to
  disable optimisation (autoconf sets <tt>-O2 -g</tt> by default, which isn't
  useful for debugging).  The configure script is then ran with the right
  environment and options for cross compiling, and with any luck will
  successfully configure.  Then hit <cite>Build &rarr; Build Project</cite> and
  watch the cross-compiler do its thing.  When that has worked, you can prove to
  yourself that the right thing has happened.
</p>
<pre>$ file tasks
  tasks: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.6.14, dynamically linked (uses shared libs), not stripped</pre>
<p>
  We have an ARM binary, ready for deployment.  Start the virtual machine
  with <cite>Tools &rarr; Start QEMU</cite> (this may ask for your root password
  to configure networking) and once it has booted you can install the project
  into the VM with <cite>Tools &rarr; Deploy</cite>.  This will run <tt>make
  install</tt> to a temporary directory and then rsync it to the VM.  Now you
  can either interact with the VM directly (if the application installed a new
  desktop file, then it should appear on the desktop), or use <cite>Tools &rarr;
  Run Remote</cite> to execute a binary directly: entering <tt>tasks</tt> will
  execute the freshly installed Tasks.  Neat, huh?
</p>
<p>
  For the final trick there is even GDB integration.  <cite>Tools &rarr; Debug
  Remote</cite> will let you specify a local binary (to extract debug symbols
  from, say <tt>src/gtk/tasks</tt>) and a remote binary to run, and then start a
  GDB on the VM and connect to it.  The binary will be initially running but
  paused at the entrypoint, so you can add breakpoints and
  then <tt>continue</tt> execution.
</p>
<p>
  Hopefully this post has been a good overview of the integration available
  between Poky and Anjuta.  In the future I hope to see Nemiver integrated into
  Anjuta, and gdbserver support in Nemiver, which would be a killer combination
  for Poky integration.
</p>
<p>
  <small>NP: <cite>One On Twoism</cite>, Various</small>
</p>
]]></content:encoded><dc:date>2008-05-20T16:40:00Z</dc:date></item><item><title>Gypsy and Geoclue in Fedora</title><guid isPermaLink="false">computers/geo-2008-05-19-10-50</guid><link>http://www.burtonini.com/blog/computers/geo-2008-05-19-10-50</link><description>Thanks to Peter Robinson, both Gypsy and Geoclue are scheduled for addition to Fedora 9 Updates. Thanks Peter!</description><content:encoded><![CDATA[    <p>
      Thanks to Peter Robinson, both Gypsy and Geoclue are scheduled for
      addition to Fedora 9 Updates.  Thanks Peter!
    </p>
]]></content:encoded><dc:date>2008-05-19T09:50:00Z</dc:date></item><item><title>Today's Second Geohack</title><guid isPermaLink="false">computers/geo-2008-05-13-15-15</guid><link>http://www.burtonini.com/blog/computers/geo-2008-05-13-15-15</link><description>I managed to wangle a Fire Eagle invitation this morning, so over lunch I grabbed the Python API Kit and ...</description><content:encoded><![CDATA[    <p>
      I managed to wangle a Fire Eagle invitation this morning, so over lunch I
      grabbed the Python API Kit and threw it at the sample Gypsy client.
    </p>
    <pre>$ ./gypsy-fireeagle.py 00:0B:0D:88:A4:A3
got 51.861145 0.156275
Updated FireEagle</pre>
    <p>
      The first line is me running my script (this one is 64 lines, but it is
      half whitespace), telling it where my GPS is.  The second line is the
      current position that my rather cheap and nasty GPS determined.  The third
      line tells me that Fire Eagle has been updated with those coordinates.
    </p>
    <p>
      Suffice to say I'm very impressed with Yahoo's geocoding software.  My GPS
      never settles to an accurate reading and will happily jitter around a 20
      metre wide circle for hours, but the location Fire Eagle is reporting me
      at is <em>two doors away</em>.  I'm not exaggerating: it says number 9 on
      my street when it should be number 5.  That is some incredibly accurate
      mapping they have.
    </p>
]]></content:encoded><dc:date>2008-05-13T14:15:00Z</dc:date></item><item><title>Today's Geohack</title><guid isPermaLink="false">computers/geo-2008-05-13-10-50</guid><link>http://www.burtonini.com/blog/computers/geo-2008-05-13-10-50</link><description>Following hot on the heels of Yahoo's announcement of their Internet Location Platform , I wrote a quick 20-line Python ...</description><content:encoded><![CDATA[    <p>
      Following hot on the heels of Yahoo's announcement of
      their <a href="http://developer.yahoo.com/geo/">Internet Location
      Platform</a>, I wrote a quick 20-line Python hack to convert from latitude and
      longitude to a place name.  Because the ILP doesn't yet expose the ability
      to go from a position to a <acronym title="Where On Earth
      ID">WOEID</acronym> we have to ask the Flickr web services to do this
      first (as Flickr is owned by Yahoo this is using the same backend).  Once
      we have the WOEID, it can be then be looked up on the ILP and useful
      information obtained.  Example speak more than words:
    </p>
    <pre>$ python geohack.py 
Using position 51.872330 0.161950
Got WOEID 12775
Got town Bishop's Stortford</pre>
    <p>
      Now to write a <a href="http://geoclue.freedesktop.org">GeoClue</a>
      provider which will fill in the locality information from the position.
      Long-term grand plans involve integrating all of this geo magic into
      Postr, somehow.
    </p>
    <p>
      <small>NP: <cite>Third</cite>, Portishead</small>
    </p>
]]></content:encoded><dc:date>2008-05-13T09:50:00Z</dc:date></item><item><title>Fire Eagle Invitation?</title><guid isPermaLink="false">computers/fireeagle-2008-05-12-21-50</guid><link>http://www.burtonini.com/blog/computers/fireeagle-2008-05-12-21-50</link><description>Does anyone out there on the Intarwebs work for Yahoo, or have a friend who works at Yahoo? I'd really ...</description><content:encoded><![CDATA[    <p>
      Does anyone out there on the Intarwebs work for Yahoo, or have a friend
      who works at Yahoo?  I'd really like to give
      this <a href="http://fireeagle.yahoo.net/">Fire Eagle</a> thing a go,
      specifically integrating <a href="http://gypsy.freedesktop.org/">Gypsy</a>
      and <a href="http://geoclue.freedesktop.org/">GeoClue</a> with Fire Eagle,
      but it's invitation only at the moment...
    </p>
    <p>
      <strong>Update: </strong> I now have an account!
    </p>
]]></content:encoded><dc:date>2008-05-12T20:50:00Z</dc:date></item><item><title>GUPnP Basics, Part 1</title><guid isPermaLink="false">computers/gupnp-basics-2008-05-12-12-50</guid><link>http://www.burtonini.com/blog/computers/gupnp-basics-2008-05-12-12-50</link><description>For the last few days I've been learning more about UPnP and testing it with the few devices I have ...</description><content:encoded><![CDATA[    <!-- -*- Mode: html -*- -->
    <p>
      For the last few days I've been learning more about UPnP and testing it
      with the few devices I have around the house.  One of these is a cheap
      ADSL router, which apparently has the lamest UPnP stack on in existence.
      It does however support the <cite>WAN IP Connection</cite> interface, so
      you can use UPnP to get the external IP address and manipulate the port
      mapping.  I'll skip over the horrific security violations this involves,
      because it's a useful demonstration that the majority of people will be
      able to test.
    </p>
    <p>
      Today we'll start simple and get our external IP address using GUPnP.  The
      first thing to be done is to create a <cite>Control Point</cite>, which in
      the UPnP model handles discovery of resources, be them devices or services
      (a device can have multiple services).  When creating a control point you
      can specify the URN of the resource you want to target.  In this case we
      want all services providing <cite>WANIPConnection</cite> so we'd
      use <tt>urn:schemas-upnp-org:service:WANIPConnection:1</tt>.  If you want
      to browse for all services then use <tt>ssdp:all</tt> (SSDP being the
      <cite>Simple Service Discovery Protocol</cite>).
    </p>
    <pre>static GMainLoop *main_loop;

int
main (int argc, char **argv)
{
  GError *error = NULL;
  GUPnPContext *context;
  GUPnPControlPoint *cp;
  
  /* libsoup requires threading, so we have to initialise it */
  g_thread_init (NULL);
  g_type_init ();

  /* Default GLib context, default host IP, default port */
  context = gupnp_context_new (NULL, NULL, 0, &amp;error);
  if (error) g_error (error->message);

  /* Create a control point targeting WAN IP Connection services */
  cp = gupnp_control_point_new
    (context, "urn:schemas-upnp-org:service:WANIPConnection:1");
  /* The service-proxy-available signal is emitted when any services which match
     our target are found */
  g_signal_connect (cp,
		    "service-proxy-available",
		    G_CALLBACK (service_proxy_available_cb),
		    NULL);
  
  /* Tell the control point to start searching */
  gssdp_resource_browser_set_active (GSSDP_RESOURCE_BROWSER (cp), TRUE);

  /* Enter the main loop */
  main_loop = g_main_loop_new (NULL, FALSE);
  g_main_loop_run (main_loop);

  /* Clean up */
  g_main_loop_unref (main_loop);
  g_object_unref (cp);
  g_object_unref (context);
  
  return 0;
}

static void
service_proxy_available_cb (GUPnPControlPoint *cp,
                            GUPnPServiceProxy *proxy)
{
  /* ... */
}</pre>
    <p>
      Now we have an application which searches for the service we specified and
      calls <tt>service_proxy_available_cb</tt> for each one it found.  Now, to
      get the external IP address we need to invoke
      the <tt>GetExternalIPAddress</tt> action.  This action takes no in
      arguments, and has a single out argument called "NewExternalIPAddress".
      Yes, the naming scheme is <em>stupid</em>.  GUPnP has a set of methods to
      invoke actions -- which will be very familiar to anyone who has
      used <tt>dbus-glib</tt> -- where you pass a <tt>NULL</tt>-terminated varargs list
      of (name, type, value) tuples for the in arguments, then
      a <tt>NULL</tt>-terminated varargs list of (name, value, return location) tuples
      for the out arguments.  A simple implementation would be as follows.
    </p>
    <pre>static void
service_proxy_available_cb (GUPnPControlPoint *cp,
                            GUPnPServiceProxy *proxy)
{
  GError *error = NULL;
  char *ip = NULL;
  
  gupnp_service_proxy_send_action (proxy,
				   /* Action name and error location */
				   "GetExternalIPAddress", &amp;error,
				   /* IN args */
				   NULL,
				   /* OUT args */
				   "NewExternalIPAddress",
				   G_TYPE_STRING, &amp;ip,
				   NULL);
  
  if (error == NULL) {
    g_print ("External IP address is %s\n", ip);
    g_free (ip);
  } else {
    g_printerr ("Error: %s\n", error-&gt;message);
    g_error_free (error);
  }
  g_main_loop_quit (main_loop);
}</pre>
    <p>
      Note that <tt>_send_action</tt> blocks until the service has replied.  If you
      need to make non-blocking calls then
      use <tt>gupnp_service_proxy_begin_action</tt> which takes a callback.
    </p>
    <p>
      So, that is searching for services and invoking actions in GUPnP.  Next
      time I'll cover subscribing to state variables, and routers which can't
      count.
    </p>
    <p>
      <small>NP: <cite>Folk But Not Folk</cite>, Various</small>
    </p>
]]></content:encoded><dc:date>2008-05-12T11:50:00Z</dc:date></item><item><title>EphyDeli 0.3</title><guid isPermaLink="false">computers/ephydeli-2008-04-29-20-12</guid><link>http://www.burtonini.com/blog/computers/ephydeli-2008-04-29-20-12</link><description>EphyDeli is a Python extension for Epiphany that adds Post To Delicious menu and toolbar items for posting the current ...</description><content:encoded><![CDATA[    <p>
      EphyDeli is a Python extension for Epiphany that adds <cite>Post To
      Delicious</cite> menu and toolbar items for posting the current page to
      Del.icio.us.  I know of several people who use it frequently and the last
      release was in 2006, so I've obviously mastered the Unix philosophy well
      here!  This release was caused by those mean old Epiphany developers
      changing the API, many thanks to Thibauld Nion for noticing this and
      sending a patch.
    </p>
    <p>
      To download it you can either
      grab <a href="http://burtonini.com/computing/ephydeli-0.3.tar.gz">the
      tarball</a> or fetch the <a href="http://burtonini.com/bzr/ephydeli/">bzr
      tree</a>.
    </p>
]]></content:encoded><dc:date>2008-04-29T19:12:00Z</dc:date></item><item><title>It's Bubbling Hot</title><guid isPermaLink="false">computers/hot-2008-04-24-17-47</guid><link>http://www.burtonini.com/blog/computers/hot-2008-04-24-17-47</link><description>$ cat /proc/acpi/thermal_zone/*/temperature temperature: 84 C temperature: 90 C Maybe it's time to get a dedicated build machine, my poor ...</description><content:encoded><![CDATA[    <pre>$ cat /proc/acpi/thermal_zone/*/temperature
temperature:             84 C
temperature:             90 C</pre>
    <p>
      Maybe it's time to get a dedicated build machine, my poor laptop gets
      quite toasty when building Poky.  Then again it seems happy enough, so
      maybe I should just use an external keyboard to avoid boiling my hands.
    </p>

    <p>
      <small>NP: <cite>Oneric</cite>, Boxcutter</small>
    </p>
]]></content:encoded><dc:date>2008-04-24T16:47:00Z</dc:date></item><item><title>Postr 0.12</title><guid isPermaLink="false">computers/postr/postr-2008-04-23-10-30</guid><link>http://www.burtonini.com/blog/computers/postr/postr-2008-04-23-10-30</link><description>A quick Postr 0.12 release, mainly to fix an annoying bug but there are some neat new features here too. ...</description><content:encoded><![CDATA[<p>
  A quick Postr 0.12 release, mainly to fix an annoying bug but there are some
  neat new features here too.
</p>
<ul>
  <li>Update the status bar after uploading</li>
  <li>Add a Switch User menu item</li>
  <li>Add Add/Remove buttons to the image pane</li>
  <li>Install the Nautilus extension to the new extension path</li>
  <li>Don't select groups when the name is clicked</li>
  <li>Don't display errors when posting to moderated groups</li>
  <li>Show a warning on exit if there are images to upload (thanks Germán Póo-Caamaño)</li>
</ul>
<p>
  The <a href="http://burtonini.com/computing/postr-0.12.tar.gz">tarball is
    here</a>, and packages for Debian have been uploaded.
</p>
]]></content:encoded><category domain="http://www.burtonini.com">/postr</category><dc:date>2008-04-23T09:30:00Z</dc:date></item><item><title>Postr 0.11</title><guid isPermaLink="false">computers/postr/postr-2008-04-20-16-50</guid><link>http://www.burtonini.com/blog/computers/postr/postr-2008-04-20-16-50</link><description>I finally got around to fixing the very annoying text wrapping problem in postr.dev, I thought I best release Postr ...</description><content:encoded><![CDATA[<p>
  I finally got around to fixing the very annoying text wrapping problem in
  postr.dev, I thought I best release Postr 0.11:
</p>
<ul>
  <li>Add Send To Group options</li>
  <li>Add Privacy and Safety options</li>
  <li>Use a multi-line entry for the Description field</li>
  <li>Show the user's name in the status bar</li>
  <li>Fix the resizing of the preview</li>
</ul>
<p>
  The <a href="http://burtonini.com/computing/postr-0.11.tar.gz">tarball is
    here</a>, and packages for Debian have been uploaded.
</p>
]]></content:encoded><category domain="http://www.burtonini.com">/postr</category><dc:date>2008-04-20T15:50:00Z</dc:date></item><item><title>No Iain, I Am Luis Villa</title><guid isPermaLink="false">computers/i-am-luis-2008-04-17-14-40</guid><link>http://www.burtonini.com/blog/computers/i-am-luis-2008-04-17-14-40</link><description>Iain, you are clearly an imposter . And this perfect-sighted intruder , whoever he is, should be hunted down, because ...</description><content:encoded><![CDATA[    <p>
      Iain, you
      are <a href="http://blogs.gnome.org/iain/2008/04/17/i-am-luis-villa/">clearly
      an imposter</a>.  And
      this <a href="http://tieguy.org/blog/2008/04/16/new-headshot/">perfect-sighted
      intruder</a>, whoever he is, should be hunted down, because I am Luis
      Villa!
    </p>
    <p>
      <img src="http://burtonini.com/images/i-am-luis.jpg" alt="I Am Luis!"/>
    </p>
]]></content:encoded><dc:date>2008-04-17T13:40:00Z</dc:date></item><item><title>We're Hiring!</title><guid isPermaLink="false">computers/oh-jobs-2008-04-16-14-45</guid><link>http://www.burtonini.com/blog/computers/oh-jobs-2008-04-16-14-45</link><description>Here at OpenedHand Towers we've just announced some more job openings , so if you have skills in any of ...</description><content:encoded><![CDATA[    <p>
      Here at OpenedHand Towers we've just announced some
      more <a href="http://o-hand.com/jobs/">job openings</a>, so if you have
      skills in any of the kernel, X.org, GTK+, Clutter or OpenEmbedded then
      please have a look.  We're also after user interface/interaction
      designers, junior designers (print/web/UI), and have an student internship
      for a programmer.  Pretty much something for everyone!
    </p>
]]></content:encoded><dc:date>2008-04-16T13:45:00Z</dc:date></item><item><title>GNOME Mobile Moduleset</title><guid isPermaLink="false">computers/mobile-jhbuild-2008-04-15-16-10</guid><link>http://www.burtonini.com/blog/computers/mobile-jhbuild-2008-04-15-16-10</link><description>I just committed to JHBuild three new modulesets, mobile-2.24 , pimlico and matchbox , so that GNOME people wanting to ...</description><content:encoded><![CDATA[    <p>
      I just committed to JHBuild three new
      modulesets, <tt>mobile-2.24</tt>, <tt>pimlico</tt> and <tt>matchbox</tt>,
      so that GNOME people wanting to develop against
      the <a href="http://gnome.org/mobile/">GNOME Mobile</a> platform can use
      tools they know to build everything they need.
    </p>
    <dl>
      <dt><tt>mobile-2.24</tt></dt>
      <dd><p>This changes GConf and EDS to use the DBus ports, and
	  provides <tt>meta-mobile-platform</tt> which builds the complete
	  platform.</p></dd>

      <dt><tt>pimlico</tt></dt>
      <dd><p>This builds Contacts, Dates and Tasks, providing <tt>meta-pimlico</tt>.</p></dd>

      <dt><tt>matchbox</tt></dt>
      <dd><p>This builds Matchbox Panel, Matchbox Desktop, Matchbox Keyboard and
      Matchbox Window Manager, providing <tt>meta-matchbox</tt>.</p></dd>
    </dl>
    <p>
      Also, <a href="http://pokylinux.org/">Poky</a> is building images nightly
      with the complete platform in, which will let you build and test software
      in a PDA-style environment with QEMU, running on x86 or a number of
      ARM-based devices (such as Nokia N800, Sharp Zaurus or OpenMoko).
    </p>
    <p>
      Last week at the Collaboration Summit in Austin (which I couldn't attend
      for <a href="http://www.burtonini.com/blog/life/baby-2008-04-07-09-50">personal
      reasons</a>) there was a day-long GNOME Mobile meeting, as a result of
      which there is now a long list of packages which need to be considered for
      addition to the Platform (such as HAL, Gypsy and Geoclue), and a few
      changes (such as replacing gnome-vfs with gvfs).  I hope to review the
      proposals fairly shortly, so that we can hopefully make an initial GNOME
      Mobile 2.24 platform release alongside the Desktop release in September.
    </p>
    <p>
      In other
      news, <a href="http://laughingsquid.com/a-cat-playing-the-theremin/">this
	is exactly what the Internet is for</a>.
    </p>
    <p>
      <small>NP: <cite>Blue Moon Station</cite>, Solar Fields</small>
    </p>
]]></content:encoded><dc:date>2008-04-15T15:10:00Z</dc:date></item><item><title>Dear Interwebs: Secure SMTP Relay Wanted</title><guid isPermaLink="false">computers/mail-2008-03-30-14-22</guid><link>http://www.burtonini.com/blog/computers/mail-2008-03-30-14-22</link><description>I'm looking for a basic SMTP relay which supports SMTP AUTH, TLS, supports the sendmail interface, and has a local ...</description><content:encoded><![CDATA[<p>
  I'm looking for a basic SMTP relay which supports SMTP AUTH, TLS, supports the
  sendmail interface, and has a local mail queue, so that I can send mail from
  my laptop in Evolution (to localhost, or calls sendmail) and the shell
  (calling sendmail) when online or offline.
</p>
<p>
  I need SMTP AUTH and TLS, which means nbsmtp, masqmail, and nullmailer are
  out.  I want a local queue for when I'm not online which means esmtp, ssmtp,
  msmtp, and nullmailer are out (I'm not convinced that msmtp's queue scripts
  are reliable enough).  Surely there must be a simple SMTP relay which will
  reliably manage a queue if the mail cannot be sent!  If not, does anyone know
  of a good guide to configuring Postfix or Exim to do this?
</p>

]]></content:encoded><dc:date>2008-03-30T13:22:00Z</dc:date></item><item><title>New Gypsy Release</title><guid isPermaLink="false">computers/gypsy-2008-03-27-16-00</guid><link>http://www.burtonini.com/blog/computers/gypsy-2008-03-27-16-00</link><description>Coding Legend Iain has just released Gypsy 0.6 , the all-new GPS multiplexing daemon which focuses on being lean and ...</description><content:encoded><![CDATA[    <p>
      <abbr title="Gypsy!  Blingtacity! gnome-cd!!">Coding
      Legend</abbr> <a href="http://blogs.gnome.org/iain/">Iain</a> has just
      released <a href="http://gypsy.freedesktop.org">Gypsy 0.6</a>, the all-new
      GPS multiplexing daemon which focuses on being lean and easy to use, and
      not on, erm, putting your GPS on the Internet or something weird.
    </p>
    <p>
      Because I'm fairly lame there are not matching Debian packages yet, but
      I'll get around to that tomorrow.  In other news, a very nice man called
      Ian Lawrence
      wrote <a href="http://www.ianlawrence.info/random-stuff/django-bluetooth-and-gps-on-ubuntu-mobile">a
      buzzword-compliant tutorial</a> where he uses Gypsy to talk to a Bluetooth
      GPS, tests it with
      my <a href="http://www.burtonini.com/blog/computers/gypsy-2007-12-17-10-30">Gypsy
      Status 10-minute hack</a>, and then uses Django to redirect the user to
      the relevant geohash.org page.
    </p>
    <p>
      <small>NP: <cite>Remembranza</cite>, Murcof</small>
    </p>
]]></content:encoded><dc:date>2008-03-27T16:00:00Z</dc:date></item><item><title>EDS and Memory</title><guid isPermaLink="false">computers/eds-2008-03-19-21-20</guid><link>http://www.burtonini.com/blog/computers/eds-2008-03-19-21-20</link><description>I was going to reply to Philip's post, but Federico did a wonderful job before I could start. That said, ...</description><content:encoded><![CDATA[    <p>
      I was going to reply to Philip's post,
      but <a href="http://www.gnome.org/~federico/news-2008-03.html#19">Federico
      did a wonderful job</a> before I could start.
    </p>
    <p>
      That said, I still haven't forgiven you for some of the finer details
      of <tt>libecal</tt> Federico.  :)
    </p>
]]></content:encoded><dc:date>2008-03-19T21:20:00Z</dc:date></item><item><title>Dear Intertron: Emacs Help Please?</title><guid isPermaLink="false">computers/emacs-2008-03-19-10-40</guid><link>http://www.burtonini.com/blog/computers/emacs-2008-03-19-10-40</link><description>I recently switched to Emacs from XEmacs, and have pretty much got it working how I like. There are just ...</description><content:encoded><![CDATA[    <p>
      I recently switched to Emacs from XEmacs, and have pretty much got it
      working how I like.  There are just two problems remaining.
    </p>
    <ol>
      <li>I'm using emacsclient, and when I close the last frame Emacs quits.
      With XEmacs when in server mode the process continues when the last frame
	is closed, anyone know how I can get Emacs to do this too?</li>
      <li>Emacs appears to be moving the mouse pointer when I open a new
	frame. This is totally frustrating not only because I use sloppy focus,
	but also because its moving the point to <em>the wrong frame</em>.  How
	can I turn this off?
      </li>
    </ol>
    <p>
      Help greatly appreciated!
    </p>
]]></content:encoded><dc:date>2008-03-19T10:40:00Z</dc:date></item><item><title>Traits of the Common and Generally Mythical Evolution Data Server Replacement</title><guid isPermaLink="false">computers/eds-replacements-2008-03-18-17-00</guid><link>http://www.burtonini.com/blog/computers/eds-replacements-2008-03-18-17-00</link><description>When not writing media centres or GL toolkits, it appears that the latest trend in open source is to write ...</description><content:encoded><![CDATA[    <p>
      When not writing media centres or GL toolkits, it appears that the latest
      trend in open source is to write Evolution Data Server replacements.
      There is a fairly common pattern forming.
    </p>
    <p>
      First, implementation details will be announced as a major, if not the
      main, feature.  The shining example is "based on DBus".  Yes, DBus is
      great.  Yes, ORBit is a dying technology for something as simple as
      transfering a few strings between two processes.  But this is <em>an
      implementation detail</em>.  I'd prefer a project using DBus instead of
      another <a href="http://en.wikipedia.org/wiki/Internet_Message_Access_Protocol">incredibly
      complicated IPC</a>, but implementation details are typically not
      something to get excited about.
    </p>
    <p>
      Often this first point gets out of control and suddenly the point of the
      project is to design a DBus interface, not to write real working code.  Of
      course, an interface without any code behind it, without any reference
      implementation, without several applications and different users, is bound
      to be broken somewhere.  But you'll never know until it is too late and
      you've labelled the interface as STABLE.  Learn from DBus itself, anyone
      who followed the project before 1.0 knows that the core concepts were
      rewritten several times before it was finally marked as stable.
    </p>
    <p>
      Spreading basic FUD is fairly common too. "EDS is not efficient concerning
      network bandwidth" doesn't make sense, because EDS is a local daemon.
      When it does talk over the network, it's fairly sensible.  The LDAP (and
      Groupwise/Exchange I believe) backend maps EDS searches to native searches
      so that only the requested items are fetched.  Backends such as WebCal
      have no option but to fetch the entire file, because that is how they
      work.  "EDS is not efficient concerning memory usage" is rather vague, and
      if you interpret it as "private dirty memory usage is unreasonably high
      when in use" then in my opinion that is untrue and I have Massif logs to
      back me up.
    </p>
    <p>
      If these points were true, they'll generally be fixable within EDS. The
      default local calendar backend is implemented as an iCalendar file on
      disk, which is parsed into memory in its entirety on startup.  This
      certainly works well for a basic implementation but should be replaced
      with a database of some sort, a simple one which stores a hash of UID to
      event would reduce memory usage for large calendars.  Add to that a cache
      of start and end times to optimise that common case and the end result is
      probably both faster and uses less memory, for a few days work.
    </p>
    <p>
      Occasionally complaints are spot-on, but EDS isn't immutable and whilst
      starting a new project from scatch may be more fun, please think of
      everyone else.  EVCard is over-complicated and yet tragically crippled,
      whilst EContact tries to be clever but generally gets in the way.  Luckily
      we can write a new contact object which is easier to use.  The query
      language is limited, but Milan Crha of Red Hat fame has been chipping away
      and now it's more flexible without breaking existing applications.  Maybe
      someone can come up with a good replacement language, and the old language
      deprecated.
    </p>
    <p>
      I'll summarise what I'm trying to say.
    </p>
    <ul>
      <li>EDS isn't perfect, we all know that.</li>
      <li>However, EDS also isn't immutable.  It can be fixed.</li>
      <li>If you find bugs or bad design in EDS, please file a bug report.</li>
      <li>If you have spare time to start a replacement project, please briefly
      consider the possibility of working on EDS first.  The code isn't that
	scary, honest (especially the DBus port when I get around to merging it).</li>
      <li>If you still want to start a replacement project, at least be polite
      and inform the evolution-hackers mailing list that you are starting a
      project to replace it.  You never know, there might be common ground that we can both work on.</li>
    </ul>

    <p>
      <small>NP: <cite>Kharah System</cite>, Hereill</small>
    </p>
]]></content:encoded><dc:date>2008-03-18T17:00:00Z</dc:date></item><item><title>Testers Wanted</title><guid isPermaLink="false">computers/marcopolo-clone-2008-03-18-11-00</guid><link>http://www.burtonini.com/blog/computers/marcopolo-clone-2008-03-18-11-00</link><description>Over the weekend I hacked on a clone of Marco Polo for GNOME. The idea is that you define a ...</description><content:encoded><![CDATA[    <p>
      Over the weekend I hacked on a clone
      of <a href="http://www.symonds.id.au/marcopolo/">Marco Polo</a> for GNOME.
      The idea is that you define a set of contexts, such as "work", "in
      meeting" or "home".  The current context is determined by a set of rules,
      for example being on the "Burton" wireless network means I'm in the "home"
      context, the time being between 09:00 and 18:00 means the "daytime"
      context, and so on.  Finally, when entering or leaving a context actions
      can be executed, such as muting the sound card, mounting a remote drive,
      or changing the default printer.  So far I have sources for the time of
      day and wireless network name, and actions to run a command and set a
      GConf key.
    </p>
    <p>
      Now that the basics are in place, I'm looking for other alpha-testers.
      Experience with Python is a requirement at the moment as there is no UI or
      configuration file yet.  That said, if this application sounds like it
      could be useful to you then
      please <a href="mailto:ross@burtonini.com">email me</a>.
    </p>
    
    <p>
      <small>NP: <cite>!K7</cite>, Various</small>
    </p>
]]></content:encoded><dc:date>2008-03-18T11:00:00Z</dc:date></item><item><title>Devil's Pie Graphical Editor</title><guid isPermaLink="false">computers/devilspie/gdevilspie-2008-03-18-10-30</guid><link>http://www.burtonini.com/blog/computers/devilspie/gdevilspie-2008-03-18-10-30</link><description>Thanks to Chris for pointing out gdevilspie to me, a graphical interface to writing Devil's Pie rule files. I've never ...</description><content:encoded><![CDATA[    <p>
      Thanks to <a href="http://chrislord.net">Chris</a> for pointing
      out <a href="http://code.google.com/p/gdevilspie/">gdevilspie</a> to me, a
      graphical interface to writing Devil's Pie rule files.  I've never used it
      so I can't comment on how well it works, but I'm very glad that someone
      finally wrote it!
    </p>
]]></content:encoded><category domain="http://www.burtonini.com">/devilspie</category><dc:date>2008-03-18T10:30:00Z</dc:date></item><item><title>More Tasks Magic</title><guid isPermaLink="false">computers/tasks-2008-03-13-19-30</guid><link>http://www.burtonini.com/blog/computers/tasks-2008-03-13-19-30</link><description>I finally got around to working on magic date parsing in Tasks , thanks to Mallum porting a JavaScript library ...</description><content:encoded><![CDATA[    <p>
      I finally got around to working on magic date parsing
      in <a href="http://pimlico-project.org/tasks.html">Tasks</a>, thanks to
      Mallum porting a JavaScript library to C last year.  I rewrote it again
      this week, and landed it in Subversion a few days ago.  I'd love any
      brave Tasks users to give it a go, especially people who don't use
      English.  They'd need to translate the new strings, but I want to check
      that the technique I'm using is portable between languages.
    </p>
    <p>
      Feedback on what magic strings should be detected would be great too.
      Currently it detects "today", "tomorrow", "yesterday", "this [weekday]"
      and "next [weekday]".  Next up is "by|due|on [local date representation]",
      but what else would be useful?
    </p>
]]></content:encoded><dc:date>2008-03-13T19:30:00Z</dc:date></item><item><title>Sound Juicer &quot;Died To Make This Sound&quot; 2.22.0</title><guid isPermaLink="false">computers/sound-juicer/sj-2.22.0</guid><link>http://www.burtonini.com/blog/computers/sound-juicer/sj-2.22.0</link><description>Sound Juicer &quot;Died To Make This Sound&quot; 2.22.0 is available now. Tarballs are available on burtonini.com , or from the ...</description><content:encoded><![CDATA[    <p>
      Sound Juicer "Died To Make This Sound" 2.22.0 is available now.  Tarballs
      are available <a
      href="http://www.burtonini.com/computing/sound-juicer-2.22.0.tar.bz2">on
      <tt>burtonini.com</tt></a>, or from the <a
        href="ftp://ftp.gnome.org/pub/gnome/sources/sound-juicer/2.22/">GNOME
        FTP servers</a>.  Last minute fixes, cleanups, and translations abound!
    </p>
    <ul>
      <li>Fix various crashes in the preferences dialogs (thanks Matthew Martin)</li>
      <li>Translate the genres (thanks Brian Geppert)</li>
      <li>Add a paused track state (thanks Brian Geppert)</li>
      <li>Use the system icons for play/record (thanks Micharl Monreal)</li>
      <li>Many many translations!</li>
    </ul>
    <p>
      Thanks to everyone who helped with Sound Juicer 2.22, there has been a
      huge influx of new contributors thanks to the GHOP and gnome-love
      projects.
    </p>
]]></content:encoded><category domain="http://www.burtonini.com">/sound-juicer</category><dc:date>2008-03-10T08:36:21Z</dc:date></item><item><title>For Sale: IBM ThinkPad X22</title><guid isPermaLink="false">computers/forsale-2008-03-09-17-10</guid><link>http://www.burtonini.com/blog/computers/forsale-2008-03-09-17-10</link><description>In an effort to clear up the utter mess which is my home office, I'm selling my old laptop. It's ...</description><content:encoded><![CDATA[    <p>
      In an effort to clear up the utter mess which is my home office, I'm
      selling my old laptop.  It's an IBM ThinkPad X22 (ultra-portable), with
      (and this is from memory) a Pentium 3 Mobility at 733MHz, 640MB RAM, and a
      20GB HDD.  I think.  (<b>update: 40GB HDD</b>). It has built-in wired ethernet but no built-in
      wireless, though I can throw in the Orinoco-based wi-fi card I've been
      using.  There is also the UltraSlice micro-docking station with a
      hotpluggable CD drive/HDD bay.  It will come booting Debian, but it has a
      Windows 2000 license and I'm sure I have the CD somewhere in the attic.
      The main caveat is that the screen hinges have lost their grip so it is
      best used either closed as a router or network music box, or against
      something to keep the screen from falling open. :)
    </p>
    <p>
      So, anyone want to make an offer?  I'll put it on eBay if nobody wants it,
      but I thought I'd offer it out to the Planets first.  If anyone is
      interested ping me and I'll go and turn it on to double-check the
      specifications.
    </p>
]]></content:encoded><dc:date>2008-03-09T17:10:00Z</dc:date></item></channel></rss>