<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Federico Mena-Quintero - Activity Log</title>
    <link>http://www.gnome.org/~federico/news.html</link>
    <description>Boring news about Federico</description>

    <copyright>2008 Federico Mena-Quintero</copyright>
    <managingEditor>federico@gnome.org</managingEditor>
    <webMaster>federico@gnome.org</webMaster>
    <language>en</language>
    <lastBuildDate>Tue, 22 Apr 2008 10:51:41 CDT</lastBuildDate>

    <item>
      <title>Tue 2008/Apr/22</title>
      <link>http://www.gnome.org/~federico/news-2008-04.html#22</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-04.html#22</guid>
      <pubDate>Tue, 22 Apr 2008 10:50:00 CDT</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      And now for a gratuitous baby picture.
	    </p>

	    <p>
	      <a href="http://www.flickr.com/photos/federico_mena_quintero/"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-04-4771-ladle.jpg" alt="Luciana in the ladle"
		  width="320" height="214" class="photo"></a>
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Thu 2008/Apr/17</title>
      <link>http://www.gnome.org/~federico/news-2008-04.html#17</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-04.html#17</guid>
      <pubDate>Thu, 17 Apr 2008 15:26:00 CDT</pubDate>
      <description><![CDATA[
	<ul>
	  <li id="multiscreen-hackfest-01">
	    <p>
	      <a href="http://www.gnome.org/~federico/news-2008-04.html#multiscreen-hackfest-01"><strong>Multiscreen hackfest for openSUSE</strong></a>
	    </p>

	    <p>
	      <img src="http://www.gnome.org/~federico/news-photos/2008-04-17-gnome-display-properties.png" alt="gnome-display-properties and RandR 1.2"
		width="558" height="533" class="photo"></a>
	    </p>

	    <p>
	      Here is a belated announcement for the <a href="http://en.opensuse.org/GNOME/Multiscreen">multiscreen
		hackfest</a> we are having at openSUSE this week and the
	      next.
	    </p>

	    <p>
	      Do you have multiple monitors connected to the same machine?  A
	      laptop and a projector or an external display?  Do you get a lot
	      of pain from trying to get it all to work?
	    </p>

	    <p>
	      If so, be sure to participate in the <a
		href="http://en.opensuse.org/GNOME/Multiscreen">multiscreen hackfest</a>!
	    </p>

	    <p>
	      Some work we are doing:
	    </p>

	    <ul>
	      <li>
		<p>
		  Integrate Søren&nbsp;Sandmann's, Bryce&nbsp;Harrington's, and
		  James&nbsp;Westby's <a href="http://live.gnome.org/RandR1.2">work for gnome-desktop,
		  gnome-settings-daemon, and gnome-control-center</a> so that the
		  Display capplet will let you configure your multiple monitors easily.
		</p>
	      </li>

	      <li>
		<p>
		  Pay attention to all the bugs in X drivers that we run into
		  while testing the configuration tools.  Document any quirks
		  that need to be set in xorg.conf by hand.
		</p>
	      </li>

	      <li>
		<p>
		  Fix all the <a href="https://bugzilla.novell.com/show_bug.cgi?id=374148">bugs in applications when used in
		    multiscreen</a> mode ("I clicked on a button but the dialog
		  appeared in the wrong monitor").
		</p>
	      </li>
	    </ul>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Tue 2008/Mar/25</title>
      <link>http://www.gnome.org/~federico/news-2008-03.html#25</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-03.html#25</guid>
      <pubDate>Tue, 25 Mar 2008 12:30:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li id="soc-2008-projects">
	    <p>
	      <strong><a href="http://www.gnome.org/~federico/news-2008-03.html#soc-2008-projects">Projects for Summer of Code 2008</a></strong>
	    </p>

	    <p>
	      This year I will mentor at most two of the following four projects:
	    </p>

	    <p>
	      <a href="http://live.gnome.org/SummerOfCode2008/Ideas/EvolutionDataServerCalendar"><strong>Making
	      evolution-data-server's calendar smaller and
	      faster</strong></a> (for GNOME).  E-d-s was written in the very
	      early days of Evolution, and it needs some profiling
	      love.  In this project you will profile the calendar
	      part of e-d-s to make it use less memory, and be faster
	      as well with an optimized query engine.
	    </p>

	    <p>
	      <a href="http://live.gnome.org/SummerOfCode2008/Ideas/MemoryFragmentation"><strong>Reducing
	      memory fragmentation in GNOME</strong></a> (for GNOME).  The GNOME
	      platform libraries do many allocations of small objects.
	      Your task will be to do an analysis of memory
	      fragmentation, similar to what was done for
	      Firefox&nbsp;3.
	    </p>

	    <p>
	      <a
	      href="http://en.opensuse.org/Summer_of_Code_2008#Making_removable_hard_drives_Just_Work.28tm.29"><strong>Making
	      removable hard drives Just Work(tm)</strong></a> (for
	      openSUSE).  Currently, when you plug in a blank hard
	      drive through USB, nothing happens.  The device node
	      gets created in <tt>/dev/sdb</tt> or whatever, but you
	      don't see anything happen in your screen.  Your task
	      will be to improve things around HAL, PolicyKit, and
	      gnome-volume-manager to detect this situation, and to
	      make the right thing happen.
	    </p>

	    <p>
	      <a
	      href="http://en.opensuse.org/Summer_of_Code_2008#Reliable_unmounting_of_removable_media"><strong>Reliable
	      unmounting of removable media</strong></a> (for
	      openSUSE).  When you want to unmount or eject a
	      removable volume that is being used, you get a
	      meaningless error message.  There is no way to know
	      which programs are still using the volume.  Your task
	      will be to make GNOME tell you which processes are using
	      the volume, and give you a chance of killing them.
	    </p>

	    <p>
	      <strong>If you are a student</strong>, please see
	      GNOME's very nice page on <a
	      href="http://live.gnome.org/SummerOfCode2008/Students">information
	      for students</a>.  This will be useful to you even if
	      you choose one of the projects for openSUSE.  Don't miss
	      out on this great opportunity to become a
	      well-recognized member of the free software community
	      and win USD&nbsp;4500!
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Wed 2008/Mar/19</title>
      <link>http://www.gnome.org/~federico/news-2008-03.html#19</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-03.html#19</guid>
      <pubDate>Wed, 19 Mar 2008 13:30:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      <a
	      href="http://pvanhoof.be/blog/index.php/2008/03/19/nonetheless-theres-something-i-dont-like-about-the-architecture-of-evolution-data-server">Philip</a>,
	      you are looking at this from the viewpoint of email.
	      Email, addressbooks, and calendars are pretty different
	      beasts.
	    </p>

	    <p>
	      Email has <a
	      href="http://www.jwz.org/doc/mailsum.html">very
	      particular access patterns</a>, which are totally
	      different from calendars and addressbooks.
	    </p>

	    <p>
	      With email, the prevailing model is that you display a
	      usually huge linear list of messages, and even the
	      summarized information can be pretty big.  Searching is
	      Nontrivial(tm).
	    </p>

	    <p>
	      In calendars, you <em>almost always</em> look at a
	      subset of "events which occur in a certain range of
	      dates", by virtue of the calendar's view
	      (monthly/weekly/daily).  Practically the only exception
	      to this is when you want to do "show me events which
	      contain $substring"; that's when you actually want to
	      show a linear list of all the events that match.
	    </p>

	    <p>
	      Evolution still doesn't get this right, by the way.  If
	      I'm thinking, "when did I meet with Joe?", I type "Joe"
	      in the search box &mdash; but Evolution keeps showing
	      the current monthly/weekly/daily view, and I have to
	      manually fiddle with the date ranges to actually find
	      which days contain the event I'm looking for.  Substring
	      searches should switch to the "list view" mode.
	    </p>

	    <p>
	      Addressbooks are funny, because the access patterns for
	      "my addressbook" and "my company's directory" are very
	      different.  Your addressbook contains at most a few
	      hundred entries, and you may be able to deal with it
	      comfortably by scrolling through a linear list, which is
	      sorted by last name.  You turn on searching when you
	      don't remember a person's last name, so you type their
	      first name in the search box.
	    </p>

	    <p>
	      In contrast, your company's directory is potentially
	      huge and you never want to show it as a linear list.
	      You actually want to type a person's name in a search
	      box, and then pick a match from a small list.
	      (Something must be wrong somewhere, as people keep
	      mailing me when they mean <a
	      href="http://primates.ximian.com/~flucifredi/">my
	      colleague with the beautiful name</a>).
	    </p>

	    <p>
	      What does this have to do with evolution-data-server?
	      E-d-s was always meant to be a <strong>local
	      daemon</strong> to store your calendar and addressbook.
	      It's the local Model in a Model/View split for all the
	      processes which want to access your calendar/addressbook
	      data.  It was also meant to act as a <strong>local
	      cache</strong> for remote calendars, which could be
	      slow/huge/etc &mdash; that is, for stuff which is far
	      away or not in the same scale as your own little
	      appointments.
	    </p>

	    <p>
	      I really don't know how much of that data gets
	      duplicated in the daemon's clients, but if it is a
	      lot, then the clients are doing something wrong.  For
	      example, a calendar event (<tt>VEVENT</tt> in
	      <a
	      href="http://www.ietf.org/rfc/rfc2445.txt">iCalendar</a>
	      parlance) contains a lot of administrative crap:  a
	      UUID, a sequence number, a stringified timezone
	      identifier, blah blah blah, in addition to the actual
	      human-readable stuff that I can see in my calendar
	      (summary, start/end times, alarms).  Here's a complete
	      <tt>VEVENT</tt>:
	    </p>

	    <pre class="code-example">
BEGIN:VEVENT
UID:20070925T174038Z-22251-100-1-25@cacharro
DTSTAMP:20070925T174038Z
DTSTART:20070926T160000Z
DTEND:20070926T170000Z
SEQUENCE:2
SUMMARY:openSUSE project meeting #opensuse-project
CLASS:PUBLIC
TRANSP:OPAQUE
CREATED:20070925T174109
LAST-MODIFIED:20070925T174109
BEGIN:VALARM
X-EVOLUTION-ALARM-UID:20070925T174109Z-5309-100-1-13@cacharro
DESCRIPTION:openSUSE project meeting #opensuse-project
ACTION:DISPLAY
TRIGGER;VALUE=DURATION;RELATED=START:-PT15M
END:VALARM
END:VEVENT
</pre>

	    <p>
	      That's 484&nbsp;bytes of data, which is mostly fluff.
	      These structures tend to explode in size when you parse
	      them, but a neurotic calendar could keep the
	      nice-and-small VEVENT string instead of a parsed
	      structure, and re-parse it and re-generate it every time
	      the event changes.
	    </p>

	    <p>
	      And again:  my local calendar, which goes back to 2001,
	      only contains about 500 events, and is 670&nbsp;KB in
	      size.  The craziest calendar I've seen is <a
	      href="http://www.gnome.org/~michael/">Michael's</a>,
	      which has a couple thousand events, but that's not even
	      an order of magnitude larger than mine.
	    </p>

	    <p>
	      Summary:  there's no reason for e-d-s or calendar
	      clients to have huge memory requirements; they are just
	      doing something silly.  You can keep a whole calendar,
	      in memory, in less space than a fat JPEG from your
	      digicam.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Tue 2008/Mar/18</title>
      <link>http://www.gnome.org/~federico/news-2008-03.html#18</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-03.html#18</guid>
      <pubDate>Tue, 18 Mar 2008 14:38:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      <a
	      href="http://www.burtonini.com/blog/computers/eds-replacements-2008-03-18-17-00">Ross
	      posted about people wanting to write replacements for
	      evolution-data-server</a>, and I agree with him that
	      doing so is a mistake.
	    </p>

	    <p>
	      When we originally wrote Evolution, a lot of backend-ish
	      things were left in a "we'll fix this later" state.  It
	      was more important to have a simple, working backend and
	      a totally awesome frontend GUI, than to have a
	      super-optimized backend and a shitty GUI.
	    </p>

	    <p>
	      The code in e-d-s is a good example of something that
	      could <a
	      href="http://www.joelonsoftware.com/articles/fog0000000348.html">get
	      a lot of easy love</a> if people simply took the time to
	      <a
	      href="http://www.joelonsoftware.com/articles/fog0000000069.html">understand
	      what is wrong with it</a> in the first place.
	    </p>

	    <p>
	      Some things that could be done to e-d-s reasonably easily:
	    </p>

	    <ul>
	      <li>
		<p>
		  Evolution-data-server has a reputation for becoming
		  a very big process with a small resident size.  On
		  my box, <tt>pmap(1)</tt> says that e-d-s has a
		  14&nbsp;MB heap with 12&nbsp;MB resident.
		  <em>That's tiny by today's heap standards</em>.
		  However, there are 8 or so threads with an 8&nbsp;MB
		  stack each, which is of course not even used.  An
		  easy cure for people's fears of the total VM size
		  would be to fix the size of the stack in the
		  threads.
		</p>
	      </li>

	      <li>
		<p>
		  Avoid scanning the entire list of calendar events
		  when someone makes a query.  The most fundamental
		  API in the e-d-s calendar is, "give me all the
		  events that fall within $range_of_timestamps".  For
		  example, the Evolution calendar's week view will
		  say, "give me all the events for the current week".
		  E-d-s then goes and looks at <em>all</em> the events
		  it knows about, sees if they intersect the specified
		  time range (generating recurrences if needed), and
		  builds a list of results.  This makes each query run
		  in O(num_events) time &mdash; nobody cleans up their
		  old events, so this degrades pretty quickly over time!
		</p>

		<p>
		  There are various ways to fix this.  You could read
		  the calendar.ics file into memory, but instead of
		  storing a dumb linked list of events, you could
		  store an <a
		  href="http://en.wikipedia.org/wiki/Interval_tree">interval
		  tree</a> based on the <em>time range</em> for
		  events.  An event that occurs only once has a range
		  of [t1,&nbsp;t1&nbsp;+&nbsp;duration].  An recurring event that repeats
		  indefinitely has a range of [t1,&nbsp;&infin;).  If
		  you are careful with the way you organize your data,
		  you can avoid even looking at the memory pages for
		  the event info, and just look at the pages where the
		  interval tree is stored.
		</p>
	      </li>

	      <li>
		<p>
		  My calendar.ics file is 700&nbsp;KB, and
		  addressbook.db is 400&nbsp;kb.  So, why does e-d-s
		  have a resident heap of 12&nbsp;MB?  "Use a database
		  for the calendar" is total overkill, and less
		  reliable than a simple text file.  Someone needs to
		  actually look at how much space e-d-s uses in memory
		  for its various data structures, and then see why
		  they become so big when loaded.
		</p>
	      </li>
	    </ul>

	    <p>
	      When your bathroom becomes kind of dirty and gross, do
	      you demolish it and build a new bathroom?  No, you clean
	      it up.  It's a shame that software <em>seems</em> so
	      easy to demolish and rebuild.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Wed 2008/Mar/12</title>
      <link>http://www.gnome.org/~federico/news-2008-03.html#12</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-03.html#12</guid>
      <pubDate>Wed, 12 Mar 2008 18:26:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      I'm surrounded by beautiful women these days.
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-03-12-3917-luciana.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-03-12-3917-luciana.jpg" alt="Luciana and Oralia"
		  width="214" height="320" class="photo"></a>
	    </p>
	  </li>

	  <li>
	    <p>
	      <a href="http://blog.pavlov.net">Pavlov</a> has a <a
	      href="http://blog.pavlov.net/2008/03/11/firefox-3-memory-usage/">great
	      summary of reduction of memory usage in Firefox 3</a>.
	      It would be very interesting to try to reduce (for
	      example) memory fragmentation in our platform
	      libraries.
	    </p>
	  </li>

	  <li id="gtkfilechooser-bug-week-summary">
	    <p>
	      <strong><a
	      href="http://www.gnome.org/~federico/news-2008-03.html#gtkfilechooser-bug-week-summary">GtkFileChooser
	      bug week: closing summary</a></strong> 
	    </p>

	    <p>
	      <img src="http://www.gnome.org/~federico/misc/gtkfilechooser-20080312.png" alt="GtkFileChooser's new completion"
		width="504" height="237" class="photo">
	    </p>

	    <p>
	      <strong>Completion in the file chooser</strong>
	    </p>

	    <p>
	      The new completion code for GtkFileChooserEntry is in
	      GTK+ trunk now!  It works much more smoothly than before
	      the bug week:
	    </p>

	    <ul>
	      <li>
		<p>
		  Instead of being a mishmash of asynchronous calls,
		  the entry is now very careful about completion.
		  There are two cases:  autocompletion and explicit
		  completion.  Autocompletion is is when the entry
		  automatically inserts-and-selects the common prefix
		  as you type, and happens only in the Open modes.
		  Explicit completion is what you invoke with Tab at
		  any time; it inserts the common prefix and moves the
		  cursor past it.
		</p>
	      </li>

	      <li>
		<p>
		  Completion will not happen unless the correct folder
		  is completely loaded.  When some form of completion
		  needs to happen, the entry first parses its input to
		  see if it needs to initiate a folder load.  If the
		  folder is already completely loaded, then completion
		  happens immediately.  Otherwise, the entry
		  initiates a folder load or waits for the current
		  folder to finish loading.
		</p>
	      </li>

	      <li>
		<p>
		  Tab completion is allowed to happen even if the
		  cursor is not at the end of the entry.  Also, Tab
		  completion has a new feedback mechanism.  You'll get
		  an Emacs-like tip when there are ambiguities in
		  completion, or no matches, or when you type invalid
		  input.  See the screenshot above!
		</p>
	      </li>
	    </ul>

	    <p>
	      The only remaining thing is to fix the popup suggestion
	      window.  The code has some FIXMEs that identify the
	      correct place for the suggestion window to be activated
	      or scrolled.  Unfortunately, GtkEntryCompletion doesn't
	      let us do these things easily, and it will need some
	      changes.  I'll work on that next.
	    </p>

	    <p>
	      <strong>What's next</strong>
	    </p>

	    <p>
	      I'll be merging all of the bug week's stable patches
	      into a GTK+ package for openSUSE.  These patches are all
	      in the gtk-2-12 branch already.
	    </p>

	    <p>
	      I'd like the completion code to get some more testing
	      before I backport it to GTK+&nbsp;2.12.  If you can test
	      SVN trunk, it would be greatly appreciated :)
	    </p>

	    <p>
	      <strong>Finally</strong>
	    </p>

	    <p>
	      Thanks to all the people who participated in the bug
	      week!  Bryan Yunashko for testing, Michael Meeks for
	      fixing hard-to-find bugs, Will Lachance for adding
	      polish to the file list, Chris Wang for figuring out the
	      default response for dialogs, Carlos Garnacho for adding
	      polish to the path bar, and everyone who tested fixes.
	    </p>

	    <p>
	      Pretty soon I'll organize a bug week for
	      multiscreen-related bugs.  Or a bug fortnight &mdash;
	      there are so many bugs there.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Tue 2008/Mar/11</title>
      <link>http://www.gnome.org/~federico/news-2008-03.html#11</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-03.html#11</guid>
      <pubDate>Tue, 11 Mar 2008 11:33:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      I just read through the <a
		href="http://mail.gnome.org/archives/foundation-list/2008-March/msg00026.html">GNOME
		Foundation's Annual Report for 2008</a> (<a
		href="http://foundation.gnome.org/about/gnome_annual_report_2007.pdf">PDF</a>),
		and it is very nice to see a well-produced,
		pretty-looking summary of the big things that have
		been going on in GNOME.  I'm flattered to have been
		asked by the Foundation to write a preface for the
		report.  This preface is more or less a summary of
		what I blurted out during the closing ceremony of last
		year's GUADEC.  <a
		href="http://foundation.gnome.org/about/gnome_annual_report_2007.pdf">Go
		read it!</a> :)
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Thu 2008/Mar/06</title>
      <link>http://www.gnome.org/~federico/news-2008-03.html#06</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-03.html#06</guid>
      <pubDate>Thu, 06 Mar 2008 22:05:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li id="gtkfilechooser-bug-week-4">
	    <p>
	      <strong><a href="http://www.gnome.org/~federico/news-2008-03.html#gtkfilechooser-bug-week-4">GtkFileChooser bug week: day 4</a></strong>
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~michael/">Michael</a>
	      found an interesting <a
	      href="http://bugzilla.gnome.org/show_bug.cgi?id=520767">race
	      condition in GtkFileSystemGnomeVFS</a>:  if two threads
	      request the same folder, and the folder was not loaded
	      already, then one of them won't get as much data from
	      the file system as it requested.  This is why the file
	      chooser sometimes doesn't display icons &mdash; a bug
	      that had me quite puzzled the few times I saw it.
	    </p>

	    <p>
	      Will Lachance <a
	      href="http://bugzilla.gnome.org/show_bug.cgi?id=410517">fixed
	      the display of dates for files which were modified today</a>.
	    </p>

	    <p>
	      People are getting <a
	      href="http://bugzilla.gnome.org/show_bug.cgi?id=500906">duplicated
	      entries in the file list</a> when using the Unix backend
	      (especially in Debian/Gentoo).  <strong>Can someone
	      please try the patch in <a
	      href="http://svn.gnome.org/viewvc/gtk%2B?view=revision&revision=19678">revision
	      19678</a> to see if it fixes things?</strong> I
	      committed that the other day for a bug in the Unix
	      backend, but I'm not sure if it helps with the bug about
	      duplicated files.
	    </p>

	    <p>
	      Chris Wang found that <a
	      href="http://bugzilla.gnome.org/show_bug.cgi?id=505857">GtkFileChooserDialog
	      required a default response button to be defined</a> so
	      that pressing Enter in the filename entry would work
	      correctly.  He sent a patch so that the dialog will
	      detect when it doesn't have a default button defined,
	      and will automatically define one itself.  This is why
	      you hit Enter in Brasero's file chooser and nothing
	      happened.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Wed 2008/Mar/05</title>
      <link>http://www.gnome.org/~federico/news-2008-03.html#05</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-03.html#05</guid>
      <pubDate>Wed, 05 Mar 2008 22:26:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      It turns out that other people have full git-svn clones
	      of GTK+ and Glib:
	    </p>

	    <ul>
	      <li><a href="http://git.desrt.ca/gitweb/">GTK+ and Glib git-svn clone at desrt.ca</a></li>
	      <li><a href="http://testbit.eu/gitdata">GTK+ and Glib git-svn clone at testbit.eu</a></li>
	    </ul>

	    <p>
	      If we find that a good number of maintainers and regular
	      contributors are using Git for their daily work, we may
	      as well just switch :)
	    </p>
	  </li>

	  <li id="gtkfilechooser-bug-week-3">
	    <p>
	      <strong><a href="http://www.gnome.org/~federico/news-2008-03.html#gtkfilechooser-bug-week-3">GtkFileChooser bug week: day 3</a></strong>
	    </p>

	    <p>
	      <a href="http://en.opensuse.org/GNOME/GtkFileChooser_bug_week">There was no day 2!</a>
	    </p>

	    <p>
	      I have <a
	      href="http://bugzilla.gnome.org/show_bug.cgi?id=314873">Tab
	      completion in the file chooser</a> mostly done now.  It
	      seems to work much better than before; Tab completion is
	      predictable and doesn't get in your way, it is faster,
	      and it has nice tooltip-like feedback to tell you what
	      it did (a la Emacs).  The <a
	      href="http://bugzilla.gnome.org/show_bug.cgi?id=314873">bug</a>
	      has the current patch attached, if you'd like to test it.
	    </p>

	    <p>
	      Now I need to finish the popup suggestion list,
	      hopefully tomorrow with some hacking of
	      GtkEntryCompletion.
	    </p>

	    <p>
	      People have been mailing me interesting patches or
	      reminders of patches for the file chooser &mdash;
	      thanks, guys!  I want to
	      integrate these patches tomorrow as well.  Please catch
	      me on <tt>irc.gnome.org #gtk+</tt> or
	      <tt>irc.freenode.net #opensuse-gnome</tt>.
	    </p>

	    <p>
	      You can get the Git repository for the completion patch
	      like this:
	    </p>

	    <pre class="code-example">
git clone http://www.gnome.org/~federico/git/gtk+.git
cd gtk+
git checkout origin/bgo314873-filechooser-tab-in-the-middle-of-entry</pre>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Tue 2008/Mar/04</title>
      <link>http://www.gnome.org/~federico/news-2008-03.html#04</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-03.html#04</guid>
      <pubDate>Tue, 04 Mar 2008 14:01:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      <strong><a href="http://www.gnome.org/~federico/news-2008-03.html#full-gtk-history">Git repository with GTK+'s full history</a></strong>
	    </p>

	    <p>
	      Ever since <a href="http://www.gnome.org/~federico/news-2007-07.html#11">I discovered
	      the joys of git-svn</a>, I've been using it to interact
	      with svn.gnome.org instead of using the normal
	      <tt>svn</tt> client.
	    </p>

	    <p>
	      Since then I've been living with partial clones of GTK+'s
	      repository, as I could never bear to clone GTK+'s
	      entire history, which goes back to 1997.  There have
	      been over 19,000&nbsp;commits in GTK+ during its lifetime.
	    </p>

	    <p>
	      Over the weekend I left a <a
	      href="http://www.gnu.org/software/screen/">screen</a>
	      session in www.gnome.org, doing a full git-svn clone of
	      GTK+'s history.  The result is about 460&nbsp;MB of pure
	      love (about 180&nbsp;MB for GTK+'s full history (!) and
	      a lot more for the git-svn administration information
	      (!!)).
	    </p>

	    <p>
	      Now you can have the full history of GTK+ on your
	      machine, in very little space, with branches, tags, and
	      everything!
	    </p>

	    <p>
	      <strong>Instructions</strong>
	    </p>

	    <p>
	      Download <a href="http://ftp.gnome.org/pub/GNOME/misc/gtk+-git-svn-clone-20080304.tar.bz2">gtk+-git-svn-clone-20080304.tar.bz2</a>&nbsp;(198&nbsp;MB).
	    </p>

	    <p>
	      Unpack it somewhere.
	    </p>

	    <p>
	      Edit <tt>gtk+/.git/config</tt> and find the lines that
	      say this:
	    </p>

	    <pre class="code-example">
[svn-remote "svn"]
        url = http://svn.gnome.org/svn/gtk+</pre>

	    <p>
	      If you only want anonymous, read-only&nbsp;access to
	      SVN, leave it like that.  If you have an SVN account,
	      replace the "url" line to be "<tt>url&nbsp;=&nbsp;svn+ssh://<em>username</em>@svn.gnome.org/svn/gtk+</tt>".
	    </p>

	    <p>
	      Go to the toplevel <tt>gtk+</tt> directory and run these commands:
	    </p>

	    <pre class="code-example">
git-svn fetch       # will update all the branches/tags
git-svn rebase      # will update your master branch with the state of SVN trunk</pre>

	    <p>
	      To get a list of all of GTK+'s branches, do <tt>git&nbsp;branch&nbsp;-a</tt>.
	    </p>

	    <p>
	      That's it.  I hope this is useful to the people in the
	      <a
	      href="http://live.gnome.org/GTK%2B/Hackfest2008">GTK+&nbsp;Hackfest</a>
	      will find it useful to avoid network latencies :)
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Mon 2008/Mar/03</title>
      <link>http://www.gnome.org/~federico/news-2008-03.html#03</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-03.html#03</guid>
      <pubDate>Mon, 03 Mar 2008 19:22:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li id="baby-a11y">
	    <p>
	      <strong><a href="http://www.gnome.org/~federico/news-2008-03.html#baby-a11y">Using a baby to test accessibility features</a></strong>
	    </p>

	    <p>
	      What if you lost the use of one of your hands, say, by
	      having to carry a baby while your wife tries to get some
	      sleep?
	    </p>

	    <p>
	      Today I enabled Sticky Keys in GNOME's accessibility
	      options, and I'm happy to say that it Just Worked(tm).
	      No restarting of anything, it's easy to figure out once
	      you enable it, and it's also easy to disable.
	    </p>

	    <p>
	      Now I think I want a <a
	      href="http://en.wikipedia.org/wiki/Chorded_keyboard">chorded keyboard</a>.
	    </p>
	  </li>

	  <li id="gtkfilechooser-bug-week-1">
	    <p>
	      <strong><a href="http://www.gnome.org/~federico/news-2008-03.html#gtkfilechooser-bug-week-1">GtkFileChooser bug week: day 1</a></strong>
	    </p>

	    <p>
	      The <a
	      href="http://en.opensuse.org/GNOME/GtkFileChooser_bug_week">file
	      chooser bug week</a> is rolling along.  Today's progress:
	    </p>

	    <ul>
	      <li>
		<p>
		  Made <a
		    href="http://en.opensuse.org/GNOME/GtkFileChooser_bug_week#Build_service_and_package_repositories">packages
		    available for testing</a> in the <a
		    href="http://build.opensuse.org">openSUSE Build
		    Service</a>.
		</p>
	      </li>

	      <li>
		<p>
		  Backported <a
		  href="http://bugzilla.gnome.org/show_bug.cgi?id=148828">single-click
		    shortcuts</a> and <a
		  href="http://bugzilla.gnome.org/show_bug.cgi?id=362516">skipping
		  over the filename extension</a> for openSUSE 10.3.
		</p>
	      </li>

	      <li>
		<p>
		  Reviewed and committed Garnacho's clever patch for
		  <a
		  href="http://bugzilla.gnome.org/show_bug.cgi?id=417389">enabling
		  the scrollwheel in the path bar</a>.
		</p>
	      </li>

	      <li>
		<p>
		  Worked on completion in the filename entry a bit
		  more.
		</p>
	      </li>
	    </ul>

	    <p>
	      If you have outstanding patches for the file chooser
	      (distros, this applies to you as well!), please catch me
	      on <tt>irc.gnome.org #gtk+</tt> or <tt>irc.freenode.net
	      #opensuse-gnome</tt>.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Fri 2008/Feb/29</title>
      <link>http://www.gnome.org/~federico/news-2008-02.html#29</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-02.html#29</guid>
      <pubDate>Fri, 29 Feb 2008 22:43:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li id="gtkfilechooser-bug-week">
	    <p>
	      <a href="http://www.gnome.org/~federico/news-2008-02.html#gtkfilechooser-bug-week"><strong>GtkFileChooser bug week</strong></a>
	    </p>

	    <p>
	      Next week, March&nbsp;03 to March&nbsp;07, we'll hold a
	      <a href="http://en.opensuse.org/GNOME/GtkFileChooser_bug_week">GtkFileChooser bug week</a> in <tt>irc.freenode.net #opensuse-gnome</tt>.
	    </p>

	    <p>
	      <strong>What:</strong>  We'll fix as many bugs in the
	      file chooser as possible, review and merge pending
	      patches from the GNOME bugzilla, and leave the file
	      chooser in a beautiful state.
	    </p>

	    <p>
	      <strong>Who:</strong>  WE NEED HACKERS AND TESTERS!  <a
	      href="http://en.opensuse.org/GNOME/GtkFileChooser_bug_week">See
	      the wiki page</a> for how to participate.
	    </p>

	    <p>
	      <strong>For GNOME in general:</strong> if you have
	      patches for the file chooser in bugzilla.gnome.org that
	      haven't been reviewed, integrated, or are generally just
	      stalled there, <strong>this is the time to kick my ass</strong>.  We'll
	      update/integrate as many of those patches as possible.
	    </p>
	  </li>

	  <li>
	    <p>
	      In other, related news...  I am almost done with <a
	      href="http://www.gnome.org/~federico/news-2008-02.html#gtkfilechooser-completion">fixing
	      completion in the file chooser</a>.  I now have total
	      gnosis of how completion should work, even with all the
	      async loading, so that it will be fast, reliable, and
	      smooth to use.
	    </p>

	    <p>
	      Get the git repo:
	    </p>

	    <p>
	      <tt>git clone http://www.gnome.org/~federico/git/gtk+.git</tt>
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Thu 2008/Feb/28</title>
      <link>http://www.gnome.org/~federico/news-2008-02.html#28</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-02.html#28</guid>
      <pubDate>Thu, 28 Feb 2008 17:49:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li id="opensuse-lugs">
	    <p>
	      <a href="http://www.gnome.org/~federico/news-2008-02.html#opensuse-lugs"><strong>openSUSE Local User Groups</strong></a>
	    </p>

	    <p>
	      <a href="http://en.opensuse.org/Local_User_Groups"><img
	      src="http://files.opensuse.org/opensuse/en/d/dd/LocalUserGroup.png"
	      alt="openSUSE Local User Groups" style="border: none"></a>
	    </p>

	    <p>
	      We are starting to organize <a
	      href="http://en.opensuse.org/Local_User_Groups">Local
	      User Groups for openSUSE</a>.  Join the discussion if
	      you know other users of openSUSE within your area!
	    </p>
	  </li>

	  <li>
	    <p>
	      Nickolay Shmyrev is making a pretty interesting <a
	      href="http://live.gnome.org/action/diff/MemoryReduction/LowMemoryHacks">page
	      on how to run GNOME on low-memory machines</a>.  Two
	      hit-and-run thoughts... 1)&nbsp;What's with Spamassassin
	      being the default in Evolution, when the Bogofilter
	      plugin is sooooooo much faster?  2)&nbsp;That trick
	      about symlinking locale directories to avoid disk seeks
	      &mdash; is that something that could be fixed in gettext
	      itself?
	    </p>
	  </li>

	  <li>
	    <p>
	      Today I needed to install the legendary <a
	      href="http://www.novell.com/products/desktop/">SLED&nbsp;10</a>
	      to debug some stuff, but I had run out of partitions for
	      the operating systems I normally have around for
	      debugging purposes.  Time to dip my toes in virtualization.
	    </p>

	    <p>
	      I used <a
	      href="http://en.opensuse.org/YaST/Modules#Virtualization">YaST's
	      "create a virtual machine" module</a> to install my
	      first VM, ever &mdash; something akin to losing one's
	      virginity.  YaST installed the necessary packages, set
	      up a disk image, read my installation ISOs correctly,
	      and it Just&nbsp;Worked(tm).  I'm really impressed!  Mad
	      props to those who made all the pieces work so smoothly.
	    </p>

	    <p>
	      Now I need more RAM for my VMs; I can see myself
	      becoming a VM junkie if all works well.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Wed 2008/Feb/27</title>
      <link>http://www.gnome.org/~federico/news-2008-02.html#27</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-02.html#27</guid>
      <pubDate>Wed, 27 Feb 2008 15:52:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      <a
	      href="http://www.gnome.org/~federico/news-2008-02.html#removable-hard-drives"><strong>Sucking with removable hard drives</strong></a>
	    </p>

	    <p>
	      My usual strategy for backups is to rsync my home
	      directory from my laptop to my desktop box.  This
	      started to suck when the hard drive in the desktop box
	      started getting rather full.  So I thought, I'll get an
	      external hard drive and figure out how to backup things
	      properly.
	    </p>

	    <p>
	      Today I got a lovely 500&nbsp;GB hard drive and an
	      USB drive enclosure.  It's black and shiny and has a
	      pretty, reassuring blue LED on the front.
	    </p>

	    <p>
	      I plug the hard drive to the power, then to the USB port
	      on my laptop, and I turn on the drive.
	    </p>

	    <p>
	      And nothing happens.
	    </p>

	    <p>
	      So I look at <tt>/var/log/messages</tt>.  Sure enough,
	      <tt>/dev/sdb</tt> appeared.  But it has no partitions
	      and it is not formatted.
	    </p>

	    <p>
	      I partition the drive, and format it (using YaST, since
	      these days I can't be bothered to look up how to tell
	      <tt>mke2fs</tt> to create a fucking ext3 filesystem).
	    </p>

	    <p>
	      I unplug and re-plug the USB cable to to the drive.  An
	      icon appears on my desktop, titled "500 GB Volume".
	      Huh, I suppose I should have given it a name in YaST.
	      Nautilus offers no way to rename it.
	    </p>

	    <p>
	      I double-click on the icon, and Nautilus brings up an
	      empty window except for a <tt>lost+found</tt> directory.
	    </p>

	    <p>
	      So I drag some files to it.  Ghetto backups, here we go!
	    </p>

	    <p>
	      And of course it tells me, <strong>You do not have
	      permission to write to this folder</strong>.  Root owns
	      that partition, and <strong>I can't write to the hard drive
	      I just purchased</strong>.
	    </p>

	    <p>
	      I guess the One Touch Backup button on the drive
	      enclosure won't do much good...
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Tue 2008/Feb/26</title>
      <link>http://www.gnome.org/~federico/news-2008-02.html#26</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-02.html#26</guid>
      <pubDate>Tue, 26 Feb 2008 16:24:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li id="gtkfilechooser-completion">
	    <p>
	      Some time ago I wrote about <a
	      href="http://www.gnome.org/~federico/news-2005-05.html#completion-annoyances">annoyances
	      with Tab completion in GtkFileChooser</a>.  I'm taking
	      some time to fix things in the file chooser, with Tab completion
	      being the first one.
	    </p>

	    <p>
	      The most annoying bug with Tab completion is that <a
	      href="http://bugzilla.gnome.org/show_bug.cgi?id=314873">it doesn't work if the cursor is not at the end
	      of the entry's text</a>.
	    </p>

	    <p>
	      If you have "<tt>/home/fed</tt>" and the cursor is at the end, and you
	      hit Tab, then the right thing happens:  the text gets
	      completed to "<tt>/home/federico/</tt>".
	    </p>

	    <p>
	      But if you have "<tt>/home/federico/photos/foo.jpg</tt>"
	      and you move the cursor just to the left of the
	      <tt>foo</tt>, and type <tt>th</tt> and hit Tab
	      (expecting "<tt>thumbnails/</tt>" to be inserted), nothing happens.
	      You also get this bug all the time in Firefox,
	      when you do "Save link as":  it suggests a reasonable
	      filename in the file chooser ("<tt>lolcat.jpg</tt>"), but it invariably picks
	      the wrong directory.  You move the cursor to the
	      beginning, intending to type
	      "<tt>~/imag</tt><strong>Tab</strong>", but you get screwed
	      because the file chooser won't do Tab completion in that situation.
	    </p>

	    <p>
	      This is because the code to do completion was pretty
	      simple:  it could only do completion if your cursor
	      really was at the end of the text.  This happens due to
	      the way the code evolved.  The file chooser's text entry
	      keeps track of what you have typed so far, and when it
	      looks like you have finished typing a directory name, it
	      starts loading that directory asynchronously so that it
	      can do completion on the filenames within <em>that</em>
	      directory.
	    </p>

	    <p>
	      However, the code can't handle the situation when the
	      cursor is in the middle of the text, instead of at the
	      end:  it would need to restart the "load a directory"
	      process, based on the cursor's position, depending on
	      which complete directory name is to the left of the
	      cursor.  But the code only changes the directory when
	      the <em>text changes</em>, not when the <em>cursor
	      moves</em>.  It's crufty old code.
	    </p>

	    <p>
	      There's a lot of polish involved, so I'm dealing with
	      things one by one:
	    </p>

	    <ul>
	      <li>
		<p>
		  The text entry starts loading the underlying folder
		  as soon as it starts up, even if you never request
		  completion.  This is a performance problem.
		</p>
	      </li>

	      <li>
		<p>
		  <a
		  href="http://bugzilla.gnome.org/show_bug.cgi?id=350987">The
		  file chooser can't do completion until the
		  underlying folder is loaded</a>.  If you hit Tab
		  while the folder is still loading, you should get a
		  hourglass cursor and possibly a beep ("I'm not ready
		  yet").
		</p>
	      </li>

	      <li>
		<p>
		  The suggestion window for multiple matches should
		  appear when you explicitly hit Tab, but only if
		  there is more than one possible match.
		</p>
	      </li>

	      <li>
		<p>
		  You should get a beep if there are no matches when
		  you request Tab completion.
		</p>
	      </li>

	      <li>
		<p>
		  <a
		  href="http://bugzilla.gnome.org/show_bug.cgi?id=307802">The
		  suggestion window should scroll if you hit Tab again
		  while it is active</a>.
		</p>
	      </li>
	    </ul>

	    <p>
	      I'm not convinced that GtkEntryCompletion has all the
	      machinery it needs to be as polished as that, so some
	      hammering may be needed...
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Mon 2008/Feb/18</title>
      <link>http://www.gnome.org/~federico/news-2008-02.html#18</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-02.html#18</guid>
      <pubDate>Mon, 18 Feb 2008 19:09:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      <a
	      href="http://blag.xkcd.com/2008/02/15/the-laser-elevator/">Big
	      ideas.  Simple diagrams.  Squirrels and lasers.</a>
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Wed 2008/Feb/13</title>
      <link>http://www.gnome.org/~federico/news-2008-02.html#13</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-02.html#13</guid>
      <pubDate>Wed, 13 Feb 2008 17:46:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li id="panel-startup-2">
	    <p>
	      <strong><a
	      href="http://www.gnome.org/~federico/news-2008-02.html#panel-startup-2">Improving login
	      time, part 8: What does the panel do before launching its applets?</a></strong>
	    </p>

	    <p>
	      (<a href="http://www.gnome.org/~federico/index.html#improving-login-time">Index to the "Improving login time" series</a>)
	    </p>

	    <p>
	      In the panel, there are two main slowdowns at startup
	      before the panel starts loading applets:
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/misc/panel-20080213-05-panel-toplevel-lifecycle.png"><img
		  src="http://www.gnome.org/~federico/misc/panel-20080213-05-panel-toplevel-lifecycle-thumb.png" alt="Gnome-panel startup timeline"
		  width="378" height="307" class="photo"></a>
	    </p>

	    <p>
	      The first gap is where PanelToplevel does its
	      initial <tt>size_request</tt>.  What's making it slow?
	      Some sub-widget is probably loading images or
	      something... what is funny is that with either a cold or
	      a warm startup, it takes around 0.4&nbsp;seconds.
	    </p>

	    <p>
	      The second gap happens right after the panel enters
	      <tt>gtk_main()</tt>.  From there it takes a while
	      (around 0.45&nbsp;seconds) until the panel actually
	      starts activating applets.  I haven't hunted down all
	      the intervening idle handlers, and kcachegrind doesn't
	      seem to be cooperating to find the culprit.
	    </p>

	    <p>
	      <a
	      href="http://www.gnome.org/~federico/misc/gnome-panel-checkpoint-20080213.diff">Patch
	      to add instrumentation to gnome-panel, today's version</a>.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Tue 2008/Feb/12</title>
      <link>http://www.gnome.org/~federico/news-2008-02.html#12</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-02.html#12</guid>
      <pubDate>Tue, 12 Feb 2008 20:19:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li id="panel-startup-1">
	    <p>
	      <strong><a href="http://www.gnome.org/~federico/news-2008-02.html#panel-startup-1">Improving login time, part 7: Gnome-panel startup</a></strong>
	    </p>

	    <p>
	      (<a href="http://www.gnome.org/~federico/index.html#improving-login-time">Index to the "Improving login time" series</a>)
	    </p>

	    <p>
	      This is the second instance of Novell Hack&nbsp;Week!
	      I'll be profiling gnome-panel's startup to reduce our
	      login time.
	    </p>

	    <p>
	      This is a timeline of gnome-panel during a warm startup:
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/misc/gnome-panel-timeline-20080212.png"><img
		  src="http://www.gnome.org/~federico/misc/gnome-panel-timeline-20080212-thumb.png" alt="Gnome-panel startup timeline"
		  width="432" height="361" class="photo"></a>
	    </p>

	    <p>
	      The timings are not very good since this wasn't taken
	      during a cold, full-session startup; I'll do that
	      tomorrow.  But there are some interesting things already:
	    </p>

	    <ul>
	      <li>
		<p>
		  The panel takes a good while to read its profile
		  information, which is its current configuration.
		  Why?  This should just be reading a bunch of GConf
		  keys and possibly creating some toplevel panel
		  windows.
		</p>
	      </li>

	      <li>
		<p>
		  After entering the main loop, the panel takes a good
		  while before it starts activating applets.  Why?
		</p>
	      </li>

	      <li>
		<p>
		  Applets get activated in quick succession, and they
		  reply asynchronously when they are ready.  Tomboy,
		  the Mixer applet, and the Notification Area are
		  especially slow.  Why?
		</p>
	      </li>
	    </ul>

	    <p>
	      <a
	      href="http://www.gnome.org/~federico/misc/gnome-panel-checkpoint-20080212.diff">Patch
	      to add instrumentation to gnome-panel</a>.
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/hacks/index.html#performance-scripts">Program
	      to plot these timelines</a>.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Sun 2008/Feb/10</title>
      <link>http://www.gnome.org/~federico/news-2008-02.html#10</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-02.html#10</guid>
      <pubDate>Sun, 10 Feb 2008 20:04:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li id="how-to-weigh-a-baby">
	    <p>
	      <strong><a href="http://www.gnome.org/~federico/news-2008-02.html#how-to-weigh-a-baby">How to weigh a baby</a></strong>
	    </p>

	    <p>
	      You want to weigh your baby, but your bathroom scale
	      doesn't have enough precision.  What do you do?
	    </p>

	    <p>
	      First, take your wok and wash it.
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3723-wok.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3723-wok.jpg" alt="Wok"
		  width="320" height="214" class="photo"></a>
	    </p>

	    <p>
	      Second, place the wok on your kitchen scale.  Adjust the
	      tare to zero.
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3726-scale.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3726-scale.jpg" alt="Wok on kitchen scale"
		  width="214" height="320" class="photo"></a>
	    </p>

	    <p>
	      Third, put the wok back on the table.  Make it soft with
	      a blanket and a pillow.  Put your baby in the wok.
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3727-luciana.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3727-luciana.jpg" alt="Luciana in the wok"
		  width="320" height="214" class="photo"></a>
	    </p>

	    <p>
	      Fourth, carefully place the wok plus baby on the kitchen
	      scale.  Watch the balance!  Write down the weight.
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3729-luciana.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3729-luciana.jpg" alt="Weighing the baby"
		  width="214" height="320" class="photo"></a>
	    </p>

	    <p>
	      Fifth, bathe your baby.  Take the clothes <em>and</em>
	      the diaper and weigh them.  Write down that amount as well.
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3734-clothes.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3734-clothes.jpg" alt="Dirty clothes"
		  width="214" height="320" class="photo"></a>
	    </p>

	    <p>
	      Finally, make a simple calculation:
	    </p>

	    <p>
	      <strong>weight-of-baby&nbsp;=&nbsp;weight-of-clothed-baby&nbsp;-&nbsp;weight-of-clothes</strong>
	    </p>

	    <p>
	      Now that the wok and the baby are clean, you can start
	      cooking.  A 3.5&nbsp;Kg baby serves six people.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Sat 2008/Feb/09</title>
      <link>http://www.gnome.org/~federico/news-2008-02.html#09</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-02.html#09</guid>
      <pubDate>Sat, 09 Feb 2008 21:26:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      <a
	      href="http://cgwalters.livejournal.com/12584.html">Colin
	      Walter has words of wisdom about optional components
	      that should be mandatory</a> in distros and our GNOME
	      builds.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Tue 2008/Feb/05</title>
      <link>http://www.gnome.org/~federico/news-2008-02.html#05</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-02.html#05</guid>
      <pubDate>Tue, 05 Feb 2008 17:34:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      A while ago Josselin&nbsp;Mouette <a
	      href="http://bugzilla.gnome.org/show_bug.cgi?id=148828">made
	      the file chooser use single-click to activate
	      shortcuts</a>.  This was a very nice change; it made the
	      file chooser seem more responsive.  Unfortunately, it
	      also revealed a bit of stupidity on my part from a long
	      time ago.
	    </p>

	    <p>
	      For some time I had the firm belief that the file
	      chooser was very well "mouse-able", but that keyboard
	      navigation was rather bad.  So I made it do things that
	      seemed reasonable at the time:  make the focus change to
	      the correct widget as you activate things, keep a focus
	      beacon always visible...
	    </p>

	    <p>
	      When you activated a shortcut in the left-hand pane of
	      the file chooser, it would automatically focus the file
	      list.  This made sense at the time:  "you went to the
	      place you wanted to go, so you now want to select a
	      file, right?"
	    </p>

	    <p>
	      Unfortunately, this made the code pretty complex.
	      Focusing the file list may cause a file to be actually
	      selected.  This can in turn wipe out what is in the
	      Location entry and replace it with the newly-focused
	      file.  The effect is that the file chooser pulls the rug
	      from under your feet at various times.
	    </p>

	    <p>
	      I just made a simple change that makes <a
	      href="http://bugzilla.gnome.org/show_bug.cgi?id=419737">the
	      file chooser not focus the file list when you activate a
	      shortcut</a>.  This gives surprisingly good
	      results... now, shortcut navigation seems smooth and
	      predictable.  These changes are now in the gtk+-2.12 branch
	      and in the development branch.
	    </p>

	    <p>
	      Moral number 1:  get the keyboard focus right, but
	      don't try to be too smart about it.
	    </p>

	    <p>
	      Moral number 2:  keyboard-able and mouse-able UIs are
	      surprisingly hard to get right.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Mon 2008/Feb/04</title>
      <link>http://www.gnome.org/~federico/news-2008-02.html#04</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-02.html#04</guid>
      <pubDate>Mon, 04 Feb 2008 18:40:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li id="opensuse-code-of-conduct">
	    <p>
	      <strong><a
	      href="http://www.gnome.org/~federico/news-2008-02.html#opensuse-code-of-conduct">Turning
	      a rowdy wild-west saloon into a nice cafe with internet connection</a></strong>
	    </p>

	    <p>
	      I'm happy to announce that the <a
	      href="http://en.opensuse.org/Code_of_Conduct">openSUSE
	      Code of Conduct</a> has been <a
	      href="http://lists.opensuse.org/opensuse-project/2008-02/msg00011.html">adopted</a>
	      by the project.
	    </p>

	    <p>
	      This code is <strike>directly stolen from</strike> based
	      on <a href="http://live.gnome.org/CodeOfConduct">GNOME's
	      Code of Conduct</a>.  Thanks to the people who made it
	      possible!
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Sat 2008/Feb/02</title>
      <link>http://www.gnome.org/~federico/news-2008-02.html#02</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-02.html#02</guid>
      <pubDate>Sat, 02 Feb 2008 15:28:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      These little clay <a
	      href="http://web.archive.org/web/20061130073645/www.jacana.org.uk/pattern/P232.htm">chimneys</a>...
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3508-chimney.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3508-chimney.jpg" alt="Chimney, outside"
		  width="320" height="214" class="photo"></a>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3523-chimney.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3523-chimney.jpg" alt="Chimney, inside"
		  width="320" height="214" class="photo"></a>
	    </p>

	    <p>
	      ... serve as exhaust for hot air, which collects at the
	      top of the house in Oralia's super-cozy <a
	      href="http://web.archive.org/web/20061124143052/www.jacana.org.uk/pattern/P141.htm">room-of-her-own</a>...
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3517-cuartito.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3517-cuartito.jpg" alt="Oralia's study, outside"
		  width="320" height="214" class="photo"></a>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3522-cuartito.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3522-cuartito.jpg" alt="Oralia's study, inside"
		  width="320" height="214" class="photo"></a>
	    </p>

	    <p>
	      ... which overlooks the <a
	      href="http://web.archive.org/web/20061130073319/www.jacana.org.uk/pattern/P167.htm">balcony</a>
	      on the side of our bedroom, and the garage.
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3520-balcony.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3520-balcony.jpg" alt="Balcony"
		  width="320" height="214" class="photo"></a>
	    </p>

	    <p>
	      To get to that little room, you climb the staircase (not
	      built yet).  The <a
	      href="http://web.archive.org/web/20061130073444/www.jacana.org.uk/pattern/P195.htm">staircase
	      volume</a> is lined on one corner with glass blocks,
	      which let in a lovely light at any time of the day.
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3503-glass-blocks.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3503-glass-blocks.jpg" alt="Glass blocks for the staircase, inside"
		  width="214" height="320" class="photo"></a>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3504-glass-blocks.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3504-glass-blocks.jpg" alt="Glass blocks for the staircase, inside"
		  width="214" height="320" class="photo"></a>
	    </p>

	    <p>
	      We fell in love with glass blocks when building the
	      kitchen, as they are cheap and strong.  To get <a
	      href="http://web.archive.org/web/20061212100221/www.jacana.org.uk/pattern/P159.htm">light
	      on two sides</a> of the kitchen, its ceiling has an <a
	      href="http://web.archive.org/web/20061119090436/www.jacana.org.uk/pattern/P190.htm">elevated
	      portion</a> which serves as skylight...
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3537-kitchen.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3537-kitchen.jpg" alt="Glass blocks in the kitchen"
		  width="214" height="320" class="photo"></a>
	    </p>

	    <p>
	      ... which in turn doubles as a <a
	      href="http://web.archive.org/web/20061129043119/www.jacana.org.uk/pattern/P201.htm">waist-high
	      surface</a> in the balcony &mdash; which we'll be able
	      to use to place cold drinks and other amenities for warm
	      days.
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3486-balcony.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3486-balcony.jpg" alt="Balcony with glass blocks"
		  width="320" height="214" class="photo"></a>
	    </p>

	    <p>
	      The bathroom has a large <a
	      href="http://web.archive.org/web/20061119090452/www.jacana.org.uk/pattern/P192.htm">window</a>,
	      which will sit above the bathtub (not built yet)...
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3493-bathroom.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3493-bathroom.jpg" alt="Bathroom"
		  width="214" height="320" class="photo"></a>
	    </p>

	    <p>
	      ... and that window lets us have a little wall with
	      glass blocks to surround the shower, so that the shower
	      will get light on two sides.  This trick of
	      perforated-inside-wall-next-to-a-window is shamelessly
	      stolen from <a
	      href="http://www.joelonsoftware.com/articles/BionicOffice.html">Joel's
	      office</a>.
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-02-3495-shower.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-02-3495-shower.jpg" alt="Shower"
		  width="320" height="214" class="photo"></a>
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Sun 2008/Jan/27</title>
      <link>http://www.gnome.org/~federico/news-2008-01.html#27</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-01.html#27</guid>
      <pubDate>Sun, 27 Jan 2008 22:04:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      <a
	      href="http://blog.vlad1.com/2008/01/22/i-lost-another-hour-to-linux-today/">This
	      is the kind of bullshit we need to fix very soon</a>.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Thu 2008/Jan/24</title>
      <link>http://www.gnome.org/~federico/news-2008-01.html#24</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-01.html#24</guid>
      <pubDate>Thu, 24 Jan 2008 20:48:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      <a
	      href="http://www.flickr.com/photos/oralia/sets/72157603789364155/">Oralia's
	      pictures of Luciana</a>.
	    </p>
	  </li>

	  <li>
	    <p>
	      <a
	      href="http://www.flickr.com/photos/federico_mena_quintero/sets/72157603792038447/">My
	      pictures of Luciana</a>.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Mon 2008/Jan/21</title>
      <link>http://www.gnome.org/~federico/news-2008-01.html#21</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-01.html#21</guid>
      <pubDate>Mon, 21 Jan 2008 14:10:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li id="luciana">
	    <p>
	      <a href="http://www.gnome.org/~federico/news-2008-01.html#luciana"><strong>Tears of Joy</strong></a>
	    </p>

	    <p>
	      Oralia and our daughter, first contact:
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-01-19-2922-luciana-oralia.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-01-19-2922-luciana-oralia.jpg"
		  alt="Luciana and Oralia" width="480" height="321" class="photo"></a>
	    </p>

	    <p>
	      Luciana&nbsp;Mena-Silva was born on 2008/Jan/19
	      at&nbsp;07:45 (13:45&nbsp;UTC).  Weight: 3.540&nbsp;Kg;
	      length:  52&nbsp;cm.  Oralia&nbsp;Silva-Rueda and
	      Federico&nbsp;Mena-Quintero are currently the happiest
	      people in the universe.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Thu 2008/Jan/17</title>
      <link>http://www.gnome.org/~federico/news-2008-01.html#17</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-01.html#17</guid>
      <pubDate>Thu, 17 Jan 2008 17:16:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      The other day I got ready to start fixing multiscreen bugs.
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-01-2822-monitors.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-01-2822-monitors.jpg" alt="Monitors"
		  width="320" height="214" class="photo"></a>
	    </p>

	    <p>
	      Now I need to find a PCI video card, since both of my
	      computers only have a single AGP slot.
	    </p>
	  </li>

	  <li>
	    <p>
	      Over at an agile testing blog, there's an interesting <a
	      href="http://www.exampler.com/blog/2008/01/17/controlling-itunes-with-ruby-alternate-take/">example
	      of scripting MacOS apps with Ruby</a>.  What do we need
	      to make this possible in GNOME?  The scripting is the
	      easy part; the hard part is actually adding support for
	      this to every application.
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Mon 2008/Jan/14</title>
      <link>http://www.gnome.org/~federico/news-2008-01.html#14</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-01.html#14</guid>
      <pubDate>Mon, 14 Jan 2008 14:20:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      I just <a
	      href="http://svn.gnome.org/viewvc/gnome-panel?view=revision&revision=10725">merged
	      intlclock into the Clock Applet</a>.  Woohoo!  Thanks to
	      Matthias, Bastien, Vincent, and Callum for the patches
	      and encouragement.
	    </p>

	    <p>
	      Callum made a release of the new, standalone
	      <tt>libgweather-2.21.1</tt>, and I released <a
	      href="http://ftp.gnome.org/pub/GNOME/sources/libgweather/2.21/libgweather-2.21.2.tar.bz2">2.21.2</a>
	      shortly afterwards to prepare it for general
	      consumption.  Callum also updated gnome-applets to use
	      the standalone version of libgweather.
	    </p>

	    <p>
	      If you get a broken build of any of those modules, it's
	      probably my fault :)
	    </p>

	    <p>
	      I'm sorry that I can't work anymore on intlclock for the
	      moment, so I leave everything up to Vincent and his
	      cadre of superheroes.  Our baby is due in three or four
	      days, so Important&nbsp;Things(tm) need to be done by
	      that time...
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Thu 2008/Jan/10</title>
      <link>http://www.gnome.org/~federico/news-2008-01.html#10</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-01.html#10</guid>
      <pubDate>Thu, 10 Jan 2008 18:32:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li id="intlclock-status-update">
	    <p>
	      <strong><a
	      href="http://www.gnome.org/~federico/news-2008-01.html#intlclock-status-update">Intlclock status update</a></strong>
	    </p>

	    <p>
	      Intlclock's sources are now fully merged into the
	      traditional Clock Applet (<tt>git clone
	      http://www.gnome.org/~federico/git/gnome-panel-intlclock.git</tt>).
	      They just need patch review, which <a
	      href="http://www.vuntz.net/journal/">Vincent</a> was kindly doing today.  All that
	      remains is bug fixing, and actually committing all of
	      this to SVN.
	    </p>

	    <p>
	      Matthias&nbsp;Clasen fixed a bunch of oversights on my
	      part in the merged clock applet, and also in
	      libgweather.  Matthias is the kind of man who will mail
	      you, "here, have these eight patches for various things"
	      &mdash; and all the patches are perfect and most are nontrivial.
	    </p>

	    <p>
	      <a href="http://www.hadess.net/">Bastien</a> pulled libgweather out of
	      gnome-applets, and now it is practically ready for
	      release as a standalone tarball (libgweather is
	      available in the <tt>libgweather</tt> module on
	      svn.gnome.org).
	    </p>

	    <p>
	      Today I made gnome-applets use the standalone
	      libgweather for the Weather Applet.  It just needs patch
	      review from <a href="http://spooky-possum.org/cgi-bin/pyblosxom.cgi/">Callum</a>.
	    </p>

	    <p>
	      For now, both the Weather Applet and the clock duplicate
	      the same code to read the humongous
	      <tt>Locations.xml</tt> which libgweather now exports.
	      For the next release we'll provide a nice API which
	      applications can use (it's mostly already in place, just
	      not quite ready for general consumption).  Evolution
	      will also want to use this for its own "specify a
	      location" purposes.
	    </p>

	    <p>
	      Finally, I just realized what a <em>royal pain in the
	      international ass</em> it must be for our translators to
	      deal with that <tt>Locations.xml</tt>.  I'll make their
	      life slightly harder once I find the weather code for my
	      city, which is not in that file yet :)
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Fri 2008/Jan/04</title>
      <link>http://www.gnome.org/~federico/news-2008-01.html#04</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-01.html#04</guid>
      <pubDate>Fri, 04 Jan 2008 18:33:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      Oralia's unstoppable ninja belly:
	    </p>

	    <p>
	      <a href="http://www.gnome.org/~federico/news-photos/2008-01-04-2796-oralia.jpg"><img
		  src="http://www.gnome.org/~federico/news-photos/thumb/2008-01-04-2796-oralia.jpg" alt="Pregnant Oralia"
		  width="214" height="320" class="photo"></a>
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

    <item>
      <title>Wed 2008/Jan/02</title>
      <link>http://www.gnome.org/~federico/news-2008-01.html#02</link>
      <guid isPermaLink="true">http://www.gnome.org/~federico/news-2008-01.html#02</guid>
      <pubDate>Wed, 02 Jan 2008 18:49:00 CST</pubDate>
      <description><![CDATA[
	<ul>
	  <li>
	    <p>
	      <a
	      href="http://www.theoildrum.com/node/3442">Big-picture
	      view, with charts and numbers, on energy consumption and
	      energy-production trends</a>.
	    </p>

	    <p>
	      For each type of fuel, how much energy does it store per
	      unit of mass, compared to energy per unit of volume?
	      This is why hydrogen-powered cars won't work; hydrogen
	      provides a *lot* more energy than gasoline per unit of
	      mass, but it needs a lot of space to be stored.
	    </p>

	    <p>
	      For each type of fuel, how much energy is produced based
	      on the land area needed to extract it?  (I.e. could you
	      satisfy your energy needs by convering your house with
	      solar cells?).  Oil provides a lot of power for the the
	      land that is required to extract it, between 10 and
	      100&nbsp;watts per square meter.  In contrast, biofuels
	      on a good day provide about 1&nbsp;watt per square
	      meter.  Cities consume more power than you could
	      generate by covering them with solar cells &mdash; what
	      infrastructure would you need to collect the energy
	      generated elsewhere and route it to the city?
	    </p>
	  </li>
	</ul>
]]></description>
    </item>

  </channel>
</rss>
