<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>Matthew Barnes</title>
  <link>http://mbarnes.livejournal.com/</link>
  <description>Matthew Barnes - LiveJournal.com</description>
  <lastBuildDate>Fri, 15 Jun 2012 20:30:19 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>mbarnes</lj:journal>
  <lj:journalid>13714033</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <image>
    <url>http://l-userpic.livejournal.com/78250179/13714033</url>
    <title>Matthew Barnes</title>
    <link>http://mbarnes.livejournal.com/</link>
    <width>100</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/5275.html</guid>
  <pubDate>Fri, 15 Jun 2012 20:30:19 GMT</pubDate>
  <title>Evolution is 100% GConf-free!</title>
  <link>http://mbarnes.livejournal.com/5275.html</link>
  <description>We&amp;#39;re a little late to the party but we made it nonetheless!&lt;br /&gt;&lt;br /&gt;Big thanks to &lt;a href=&quot;http://blogs.gnome.org/rodrigo/&quot; rel=&quot;nofollow&quot;&gt;Rodrigo Moya&lt;/a&gt; for getting the bulk of the work done in Evolution 3.4, and to Milan Crha for finishing the remaining pieces in time for Evolution 3.5.3.&amp;nbsp; I chipped in on a few GConf keys as well, but &lt;a href=&quot;http://mbarnes.livejournal.com/4631.html&quot; rel=&quot;nofollow&quot;&gt;made a bigger mess of things&lt;/a&gt;.</description>
  <comments>http://mbarnes.livejournal.com/5275.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/5100.html</guid>
  <pubDate>Tue, 05 Jun 2012 01:25:34 GMT</pubDate>
  <title>Updates from the Evolution/WebKit front</title>
  <link>http://mbarnes.livejournal.com/5100.html</link>
  <description>The newest member of the Evolution Team at Red Hat, &lt;a href=&quot;http://www.progdan.cz/about-me/&quot; rel=&quot;nofollow&quot;&gt;Dan Vr&amp;aacute;til&lt;/a&gt;, has been making exciting progress in transitioning Evolution from our aging HTML renderer, GtkHTML, to the more modern and full-featured &lt;a href=&quot;http://www.webkitgtk.org/&quot; rel=&quot;nofollow&quot;&gt;WebKit/GTK+&lt;/a&gt;. He&amp;#39;s still trying to get his blog added to &lt;a href=&quot;http://planet.gnome.org/&quot; rel=&quot;nofollow&quot;&gt;Planet GNOME&lt;/a&gt; so I wanted to highlight a couple of his recent posts:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href=&quot;http://www.progdan.cz/2012/03/evolution-meets-webkit/&quot; rel=&quot;nofollow&quot;&gt;Evolution meets WebKit&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href=&quot;http://www.progdan.cz/2012/06/evolution-gets-a-new-e-mail-formatter/&quot; rel=&quot;nofollow&quot;&gt;Evolution gets a new e-mail formatter&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You can already try out the new WebKit integration in &lt;b&gt;&lt;a href=&quot;http://projects.gnome.org/evolution/download.shtml&quot; rel=&quot;nofollow&quot;&gt;Evolution 3.5&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;It currently uses WebKit/GTK+ to render received emails for display and printing, but not yet to compose emails for sending. That&apos;s a whole nother barrel of monkeys.  But that&apos;s next on Dan&amp;#39;s list, and then we can finally retire GtkHTML!</description>
  <comments>http://mbarnes.livejournal.com/5100.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/4631.html</guid>
  <pubDate>Thu, 31 May 2012 22:00:07 GMT</pubDate>
  <title>Major Evolution-Data-Server API breaks about to land</title>
  <link>http://mbarnes.livejournal.com/4631.html</link>
  <description>I mentioned in &lt;a href=&quot;http://mbarnes.livejournal.com/4590.html&quot; rel=&quot;nofollow&quot;&gt;my previous blog post&lt;/a&gt; a few months ago that I&amp;#39;ve been overhauling Evolution-Data-Server&amp;#39;s account format and APIs.&amp;nbsp; I&amp;#39;ve been doing all this work on a &lt;i&gt;very&lt;/i&gt; long-running branch (18 months old now!) which was not ready in time for GNOME 3.4.&amp;nbsp; But it&amp;#39;s ready now, and I&amp;#39;ll be merging it this weekend just after the Evolution 3.5.2 tarballs are released.&lt;br /&gt;&lt;br /&gt;I&amp;#39;m announcing this to a wide audience because the API breaks are going to affect a number of other projects in the GNOME community and perhaps beyond.&amp;nbsp; I already have patches prepared for several key GNOME components, and I stand ready to assist any other projects which will need to port their code to the new Evolution-Data-Server APIs.&amp;nbsp; Please contact me if you maintain one of these projects so I can help make the transition as smooth as possible. (&lt;a href=&quot;mailto:mbarnes@redhat.com&quot; rel=&quot;nofollow&quot;&gt;mbarnes@redhat.com&lt;/a&gt; or #evolution on &lt;a href=&quot;https://live.gnome.org/GnomeIrcChannels&quot; rel=&quot;nofollow&quot;&gt;IRC&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;In short, Evolution-Data-Server will migrate account data from the XML blobs we&amp;#39;ve historically stuffed into GConf to plain text files which live under the &lt;a href=&quot;http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html&quot; rel=&quot;nofollow&quot;&gt;XDG-compliant&lt;/a&gt; $XDG_CONFIG_HOME directory.&amp;nbsp; Evolution-Data-Server will also introduce a new D-Bus service to serve these account files to client programs and to take over certain account management responsibilities so that Evolution-Data-Server becomes more of an autonomous desktop service that does not rely so heavily on Evolution.&lt;br /&gt;&lt;br /&gt;I&amp;#39;ve written a fair amount of documentation, so just to get the links out of the way...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://live.gnome.org/Evolution/ESourceFileFormat&quot; rel=&quot;nofollow&quot;&gt;Details about the new file format and an overview of the client-side APIs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://mbarnes.fedorapeople.org/account-mgmt/docs/libedataserver/&quot; rel=&quot;nofollow&quot;&gt;A preview of the new libedataserver API Reference Manual&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://live.gnome.org/Evolution/ESourceMigrationGuide&quot; rel=&quot;nofollow&quot;&gt;A work-in-progress migration guide, FAQ-style&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Immediate benefits to users and to GNOME are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Much easier to backup account data or copy it to other machines.&amp;nbsp; Having account data locked in a configuration database makes this pretty painful at present.&amp;nbsp; This has been an ongoing problem for at least as long as I&amp;#39;ve been involved with Evolution (circa 2006).&amp;nbsp; Evolution-Data-Server will monitor the user directory containing the account files, which means restoring an account is simply a matter of dropping files into that folder.&amp;nbsp; Evolution-Data-Server will notice the new files and (assuming they&amp;#39;re valid) activate them immediately without having to restart any programs.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The new D-Bus service will centralize interactive authentication prompts.&amp;nbsp; This means client programs will no longer have to deal with authentication at all.&amp;nbsp; Internally, the new D-Bus service will use &lt;a href=&quot;http://developer.gnome.org/gcr/stable/GcrSystemPrompt.html&quot; rel=&quot;nofollow&quot;&gt;GcrSystemPrompt&lt;/a&gt; to show a system-modal password prompt whenever a mail, calendar or address book backend needs to authenticate and a password is not readily available.&amp;nbsp; In a GNOME Shell session, GNOME Shell will take over and display a dialog window consistent with the shell&amp;#39;s overall look and feel.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The new D-Bus service will monitor GNOME Online Accounts and automatically add or delete equivalent Evolution-Data-Server accounts.&amp;nbsp; Previously Evolution handled this, which unfortunately meant Evolution had to be already running or at least started for new Google accounts to be noticed and propagated to services like the GNOME Shell calendar.&amp;nbsp; That issue is now solved.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;As part of this effort I&amp;#39;ve also converted Evolution-EWS to the new Evolution-Data-Server APIs and have added support for GNOME Online Accounts&amp;#39; new Exchange option.&amp;nbsp; This is a &lt;a href=&quot;https://live.gnome.org/ThreePointFive/Features/GoaExchange&quot; rel=&quot;nofollow&quot;&gt;major feature for GNOME 3.6&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;The new account management system also opens the door to all kinds of cool new enhancements to Evolution and Evolution-Data-Server.&amp;nbsp; I have lots of ideas and could easily spend another year chasing them all, but the order of the day is to get this branch finally merged so we can shake out the bugs and help other projects adapt in time for GNOME 3.6.</description>
  <comments>http://mbarnes.livejournal.com/4631.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/4590.html</guid>
  <pubDate>Sun, 09 Oct 2011 15:03:12 GMT</pubDate>
  <title>Coming Soon in Evolution 3.4</title>
  <link>http://mbarnes.livejournal.com/4590.html</link>
  <description>&lt;span style=&quot;font-size: medium;&quot;&gt;I&amp;rsquo;m overdue for an update on what the Evolution team has been up to lately. &amp;nbsp;This development cycle should be interesting, as we have several projects converging for the next major release in March: Evolution 3.4. It&amp;rsquo;s still pretty early in the 3.3 cycle, so everything is still tentative at this point. But here&amp;rsquo;s some of the major features we have cooking, in addition to our steady stream of bug fixes and incremental enhancements.&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;New D-Bus Service for Email&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Srinivasa Ragavan&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt; is working toward breaking email handling out of Evolution and moving it out to a separate D-Bus service as we do currently for address books and calendars. That will allow for things like new mail notifications without having to have Evolution running, and also provide a more formal way for other Evolution-Data-Server clients to access mail stores.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Evolution, Meet WebKit&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Dan Vratil&lt;/span&gt; has taken on the task of porting Evolution&amp;rsquo;s email rendering from our old and outdated HTML engine (&amp;ldquo;GtkHtml&amp;rdquo;) to the more modern WebKit/GTK+. Dan tells me he&amp;rsquo;s taking advantage of WebKit&amp;rsquo;s full support for JavaScript and CSS (which GtkHtml lacks) to make rendering more efficient and to unify the email, contact, task, and memo previews with a shared style.&lt;br /&gt;&lt;br /&gt;We&amp;rsquo;re treating email rendering and email composing as separate projects. Right now it&amp;rsquo;s looking like we&amp;rsquo;ll continue using GtkHtml for email composing in Evolution 3.4, but fear not -- we&amp;rsquo;ll get to it. We&amp;rsquo;re as eager to drop GtkHtml as anyone.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Automated Account Setup&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Punit Jain&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt; is merging the automated mail account setup feature from &amp;ldquo;express&amp;rdquo; mode into the regular Evolution Account Assistant. This is the feature where you give Evolution your email address and it checks the address&amp;rsquo;s domain against a database of known service providers and can often populate all the server details for you, making account setup quick and easy.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Goodbye GConf&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Rodrigo Moya&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt; has been porting all of Evolution&amp;rsquo;s simple GConf keys to dconf and fixing up our code to access the new keys via GLib&amp;rsquo;s own GSettings API. So one less package dependency for Evolution 3.4. As for the not-so-simple GConf keys, see below.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;New Backend for Microsoft Exchange&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;David Woodhouse &lt;/span&gt;and his team at Intel, along with &lt;span style=&quot;font-weight: bold;&quot;&gt;Chenthill Palanisamy&lt;/span&gt; at Novell, have developed a new Evolution backend that can talk to Microsoft Exchange 2007 and 2010 by way of Microsoft&amp;lsquo;s &amp;ldquo;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb408417%28v=exchg.80%29.aspx&quot; rel=&quot;nofollow&quot;&gt;Exchange Web Services&lt;/a&gt;&amp;rdquo;, a publicly documented SOAP-based API.&lt;br /&gt;&lt;br /&gt;The new backend package is called &amp;ldquo;&lt;b&gt;evolution-ews&lt;/b&gt;&amp;rdquo;.&lt;br /&gt;&lt;br /&gt;In order to avoid all the craziness of the GNOME 2-to-3 transition, the backend was originally developed exclusively for Evolution 2.32. Chenthill has been busy porting it forward to 3.2 so it can start syncing up with GNOME&amp;rsquo;s regular release schedule.&lt;br /&gt;&lt;br /&gt;Hopefully Microsoft will stick to its Web Services interface for a good long while so we can stop having to write new Exchange backends every few years. &amp;nbsp;:)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;New Backend for Kolab Groupware&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Christian Hilberg&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt; and his team at &lt;a href=&quot;http://www.kernelconcepts.de/en/&quot; rel=&quot;nofollow&quot;&gt;kernel concepts&lt;/a&gt; and &lt;a href=&quot;http://www.tarent.de/web/tarent/home&quot; rel=&quot;nofollow&quot;&gt;tarent GmbH&lt;/a&gt; have developed a brand new Evolution backend for &lt;a href=&quot;http://www.kolab.org/&quot; rel=&quot;nofollow&quot;&gt;Kolab Groupware&lt;/a&gt; servers.&lt;br /&gt;&lt;br /&gt;The new backend package is called &amp;ldquo;&lt;b&gt;evolution-kolab&lt;/b&gt;&amp;rdquo;.&lt;br /&gt;&lt;br /&gt;As with &amp;ldquo;evolution-ews&amp;rdquo;, the initial development was targeted at a fixed and now older version of Evolution, and Christian is ready to begin forward porting it and eventually syncing up with GNOME&amp;rsquo;s regular release schedule.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Saner Account Storage&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;As for me, I&amp;rsquo;ve been toiling away for most the year on those not-so-simple GConf keys I mentioned earlier -- the ones that we stuff account information into in the form of XML blobs.&lt;br /&gt;&lt;br /&gt;Evolution&amp;rsquo;s account storage will soon move to plain text files in a simpler .ini-style syntax. Account data will be easier to read, easier to edit, easier to back up, easier to copy to other systems.&lt;br /&gt;&lt;br /&gt;We&amp;rsquo;ll also introduce another new D-Bus service to manage these account files and also centralize some account-related background jobs that Evolution currently handles (but shouldn&amp;rsquo;t) such as GNOME Online Accounts monitoring.&lt;br /&gt;&lt;br /&gt;I could ramble on about this but I&amp;rsquo;ll save it for a separate blog post.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;As you can see, quite a lot going on at once. Any questions, feel free to&lt;a href=&quot;mailto:mbarnes@redhat.com?subject=Coming%20Soon%20in%20Evolution%203.4&quot; rel=&quot;nofollow&quot;&gt;&lt;u&gt; &lt;span style=&quot;text-decoration: underline;&quot;&gt;email me&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;, or email Evolution&amp;rsquo;s &lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/evolution-hackers&quot; rel=&quot;nofollow&quot;&gt;&lt;u&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;development mailing list&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;, or jump on Evolution&amp;rsquo;s IRC channel: #evolution on GIMPNet (irc.gimp.org).&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description>
  <comments>http://mbarnes.livejournal.com/4590.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>34</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/4149.html</guid>
  <pubDate>Tue, 25 May 2010 16:37:15 GMT</pubDate>
  <title>Evolution is rocking on Windows</title>
  <link>http://mbarnes.livejournal.com/4149.html</link>
  <description>&lt;p&gt;Fridrich &amp;Scaron;trba has been doing an awesome job of integrating the latest Evolution release on Windows.  We have a new Windows installer!&lt;/p&gt;  &lt;p&gt;Since he&apos;s not on Planet GNOME, I&apos;m acting as his proxy.  Check out &lt;a href=&quot;http://fridrich.blogspot.com/2010/05/experimental-evolution-installer-for.html&quot; rel=&quot;nofollow&quot;&gt;his latest blog post&lt;/a&gt; for details and lots of pretty screenshots.&lt;/p&gt;</description>
  <comments>http://mbarnes.livejournal.com/4149.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/3860.html</guid>
  <pubDate>Fri, 05 Mar 2010 18:59:12 GMT</pubDate>
  <title>A handy sidebar trick in Evolution</title>
  <link>http://mbarnes.livejournal.com/3860.html</link>
  <description>In Evolution, you can display multiple calendars, task lists or memo lists at once by check marking their names in the sidebar. &amp;nbsp;I&apos;m not a heavy calendar or memo list user myself, but I do practice the &lt;a href=&quot;http://en.wikipedia.org/wiki/Getting_Things_Done&quot; rel=&quot;nofollow&quot;&gt;Getting Things Done&lt;/a&gt; methodology with Evolution&apos;s task lists. &amp;nbsp;Here&apos;s my current set of lists:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://mbarnes.fedorapeople.org/images/evo-task-lists-1.png&quot; alt=&quot;So much to do...&quot; /&gt;&lt;/div&gt;&lt;br /&gt;Earlier today, Nick Jenkins filed a &lt;a href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=611873&quot; rel=&quot;nofollow&quot;&gt;bug&lt;/a&gt; complaining about how cumbersome it is to just focus on one list (or calendar). &amp;nbsp;And he&apos;s right. &amp;nbsp;You basically have two choices: 1) go through the sidebar and manually un-check everything you don&apos;t want to see, which is ridiculously cumbersome, or 2) right-click on the item you &lt;em&gt;do&lt;/em&gt; want to see and select &amp;quot;&lt;strong&gt;Show Only This &lt;/strong&gt;&lt;em&gt;&lt;strong&gt;whatever&lt;/strong&gt;&lt;/em&gt;&amp;quot; from the pop-up menu, which check marks that item and clears all others.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://mbarnes.fedorapeople.org/images/evo-task-lists-2.png&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;Handy, right? &amp;nbsp;Well, not so much if you use it frequently enough. &amp;nbsp;Nick was asking for an easier way, so I suggested we make triple-clicking on a sidebar item a shortcut for the &amp;quot;show only&amp;quot; menu item. &amp;nbsp;(Triple instead of double-click so it&apos;s not so easy to trigger by accident.)&lt;br /&gt;&lt;br /&gt;Took about a half hour to hack together and I have to say I&apos;m startled at how much easier this simple enhancement allows me to manage my task lists! &amp;nbsp;I like it enough that I snuck it in at the last minute for Evolution 2.30.</description>
  <comments>http://mbarnes.livejournal.com/3860.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/3610.html</guid>
  <pubDate>Mon, 15 Feb 2010 03:03:36 GMT</pubDate>
  <title>Using GStreamer to sample arcade music</title>
  <link>http://mbarnes.livejournal.com/3610.html</link>
  <description>Recently I discovered the online &lt;a href=&quot;http://www.arcade-history.com&quot; rel=&quot;nofollow&quot;&gt;Arcade History&lt;/a&gt; database has added music samples for some games. &amp;nbsp;For example, they now have music for the mid-80&apos;s racing game &lt;a href=&quot;http://www.arcade-history.com/?n=out-run-sit-down-model&amp;amp;page=detail&amp;amp;id=19576&quot; rel=&quot;nofollow&quot;&gt;Out Run&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I thought it would be cool to integrate that into my &lt;a href=&quot;http://mamedev.org&quot; rel=&quot;nofollow&quot;&gt;MAME&lt;/a&gt; front-end, &lt;a href=&quot;http://mbarnes.github.com/gnome-video-arcade&quot; rel=&quot;nofollow&quot;&gt;GNOME Video Arcade&lt;/a&gt;, and wound up blowing the whole weekend on it.  I&apos;m happy to say it&apos;s finished already, and works great!&lt;br /&gt;&lt;br /&gt;My foray into basic &lt;a href=&quot;http://www.gstreamer.net&quot; rel=&quot;nofollow&quot;&gt;GStreamer&lt;/a&gt; programming was suprisingly pleasant.  The API is nicely designed and &lt;a href=&quot;http://gstreamer.freedesktop.org/documentation&quot; rel=&quot;nofollow&quot;&gt;well-documented&lt;/a&gt;, and simple use cases like mine are made easy.  The &amp;quot;&lt;a href=&quot;http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-playbin.html&quot; rel=&quot;nofollow&quot;&gt;playbin&lt;/a&gt;&amp;quot; plugin pretty much did all the work.  I just fed it Arcade History&amp;nbsp;URIs and wired up a simple user interface to follow state transitions from the audio stream.&lt;br /&gt;&lt;br /&gt;GStreamer is an example of the kind of high-quality software engineering that I strive to emulate in my own work.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://mbarnes.fedorapeople.org/images/gva-gstreamer.png&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/div&gt;</description>
  <comments>http://mbarnes.livejournal.com/3610.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/3367.html</guid>
  <pubDate>Sat, 19 Sep 2009 00:55:04 GMT</pubDate>
  <title>Evolution is 100% Bonobo-free!</title>
  <link>http://mbarnes.livejournal.com/3367.html</link>
  <description>A couple years ago I wasn&apos;t sure I&apos;d ever see the day, but today I&apos;m delighted to announce that Evolution has finally dropped not only its &lt;b&gt;Bonobo&lt;/b&gt; dependency but also its &lt;b&gt;libgnome&lt;/b&gt; and &lt;b&gt;libgnomeui&lt;/b&gt; dependencies  (&lt;a href=&quot;http://www.gnome.org/~fpeters/299.html&quot; rel=&quot;nofollow&quot;&gt;see for yourself&lt;/a&gt;)! This will debut as 2.29.1.&lt;br /&gt;&lt;br /&gt;Quick recap of recent events:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;We created our &lt;b&gt;gnome-2-28&lt;/b&gt; branch earlier than usual to get a head start on Evolution 2.29 development.&lt;/li&gt;&lt;li&gt;We merged the &lt;b&gt;kill-bonobo&lt;/b&gt; branch that I &lt;a href=&quot;http://mbarnes.livejournal.com/2606.html&quot; rel=&quot;nofollow&quot;&gt;talked about awhile back&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;We ported the address book side of Evolution-Data-Server from Bonobo to D-Bus, and are currently finishing up the calendar side.&lt;/li&gt;&lt;li&gt;We are tracking both &lt;a href=&quot;http://tinyurl.com/evolution-kb-regression&quot; rel=&quot;nofollow&quot;&gt;Evolution regressions&lt;/a&gt; and &lt;a href=&quot;http://tinyurl.com/evolution-dbus-hybrid&quot; rel=&quot;nofollow&quot;&gt;Evolution-Data-Server regressions&lt;/a&gt;.  If you&apos;re the bleeding-edge / early-adopter type please help us test the new code and report any more regressions!&lt;/li&gt;&lt;li&gt;Bonobo-free Evolution packages for Fedora 12 are available from my &lt;a href=&quot;http://mbarnes.fedorapeople.org/&quot; rel=&quot;nofollow&quot;&gt;Fedora People&lt;/a&gt; page.  The package versions are relabeled as 2.27.99 for easier integration with Fedora 12 but it&apos;s actually the 2.29 code in disguise.&lt;/li&gt;&lt;/ul&gt;Next project for me is to get Evolution-Exchange back on its feet.  With Bonobo gone the poor thing is all confused now and refuses to build.</description>
  <comments>http://mbarnes.livejournal.com/3367.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>11</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/3190.html</guid>
  <pubDate>Mon, 27 Jul 2009 01:33:01 GMT</pubDate>
  <title>Still a Kid at Age 33</title>
  <link>http://mbarnes.livejournal.com/3190.html</link>
  <description>As a child of the 80&apos;s I was just old enough to get swept up in the craze of what has come to be known as the &lt;a href=&quot;http://en.wikipedia.org/wiki/Golden_age_of_arcade_games&quot; rel=&quot;nofollow&quot;&gt;golden age of arcade games&lt;/a&gt;.  I have fond memories of pouring my weekly allowance into those old coin-operated machines at our local grocery store, mall, laundromat, bowling alley... practically every place I went had at least one or two.  I credit my fascination with those games for getting me started with computers and programming at an early age.  For me, the nostalgia has never really worn off.&lt;br /&gt;&lt;br /&gt;For my 33rd birthday this weekend, Candace and I made our annual pilgrimage to &lt;a href=&quot;http://www.funspotnh.com/&quot; rel=&quot;nofollow&quot;&gt;Funspot Family Fun Center&lt;/a&gt; in Weirs Beach, New Hampshire.  Funspot is home of the largest video arcade in the world.  If you&apos;re at all a fan of classic video games and you live in or are visiting New England, you really must see this place.  While sporting the usual fare for these &amp;quot;fun center&amp;quot; type places, the real treasure is up on the third level (yeah, it&apos;s that big), away from the mainstream crowds, where you&apos;ll find the &lt;a href=&quot;http://www.classicarcademuseum.org/&quot; rel=&quot;nofollow&quot;&gt;The American Classic Arcade Museum&lt;/a&gt;.  The museum holds over 250 video game and pinball machines of yesteryear, and is where much of the hilarious yet highly engrossing documentary &lt;a href=&quot;http://www.imdb.com/title/tt0923752/&quot; rel=&quot;nofollow&quot;&gt;The King of Kong&lt;/a&gt; was filmed.&lt;br /&gt;&lt;br /&gt;Suffice it to say I had a blast.  Set the day&apos;s high score on a number of machines, including a 263,000 point game of Donkey Kong.  Also had to play a few rounds on their &lt;a href=&quot;http://www.wired.com/science/discoveries/news/2008/07/dayintech_0703&quot; rel=&quot;nofollow&quot;&gt;famous Pac-Man machine&lt;/a&gt;, but I swear I was better at that game when I was eight.  Can&apos;t wait to go back.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img border=&quot;1&quot; src=&quot;http://mbarnes.fedorapeople.org/images/funspot-2009-1.jpg&quot; alt=&quot;&quot; /&gt;&amp;nbsp;&lt;img border=&quot;1&quot; src=&quot;http://mbarnes.fedorapeople.org/images/funspot-2009-2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
  <comments>http://mbarnes.livejournal.com/3190.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/3002.html</guid>
  <pubDate>Sat, 20 Jun 2009 23:08:55 GMT</pubDate>
  <title>Fedora Packages for Kill-Bonobo</title>
  <link>http://mbarnes.livejournal.com/3002.html</link>
  <description>Fedora 12 (&quot;&lt;i&gt;Rawhide&lt;/i&gt;&quot;) packages for Evolution&apos;s &lt;i&gt;kill-bonobo&lt;/i&gt; branch are &lt;a href=&quot;http://mbarnes.fedorapeople.org/kill-bonobo/RPMS&quot; rel=&quot;nofollow&quot;&gt;now available&lt;/a&gt;.  Install &lt;a href=&quot;http://mbarnes.fedorapeople.org/kill-bonobo/kill-bonobo.repo&quot; rel=&quot;nofollow&quot;&gt;this repo file&lt;/a&gt; to get updates through yum.  The branch is currently synced with Evolution 2.27.3.&lt;br /&gt;&lt;br /&gt;As stated &lt;a href=&quot;http://mbarnes.livejournal.com/2606.html&quot; rel=&quot;nofollow&quot;&gt;previously&lt;/a&gt;, not everything is functional yet.  Please file bugs for the parts that &lt;i&gt;are&lt;/i&gt;.  I&apos;ll try to post updates at least weekly.</description>
  <lj:security>public</lj:security>
  <lj:reply-count>10</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/2606.html</guid>
  <pubDate>Wed, 17 Jun 2009 13:09:10 GMT</pubDate>
  <title>Evolution Will Soon Bid Farewell to Bonobo</title>
  <link>http://mbarnes.livejournal.com/2606.html</link>
  <description>This is a combination announcement, history lesson, status report and call for help.&lt;br /&gt;&lt;br /&gt;For nearly a year I&apos;ve been laboring over an Evolution branch named &lt;i&gt;kill-bonobo&lt;/i&gt;, whose goal is exactly that: eradicate Bonobo from Evolution once and for all.  According to the &lt;a href=&quot;http://live.gnome.org/TwoPointTwentyseven/&quot; rel=&quot;nofollow&quot;&gt;GNOME release schedule&lt;/a&gt;, I&apos;m due for a status report.  (Note, this only pertains to the application itself.  The data server is already being ported from Bonobo to D-Bus by &lt;a href=&quot;http://burtonini.com/&quot; rel=&quot;nofollow&quot;&gt;Ross Burton&lt;/a&gt;.  The two projects are independent.)&lt;br /&gt;&lt;br /&gt;The &lt;i&gt;kill-bonobo&lt;/i&gt; branch is strictly an internal cleanup effort, albeit a massive one.  It&apos;s &lt;i&gt;not&lt;/i&gt; about adding features or radically changing the end-user experience.  It&apos;s about making Evolution easier to maintain and enhance as we enter into the GNOME 3 era.  So if I&apos;ve done a good job, users will hardly notice any difference when the branch is finally merged.&lt;br /&gt;&lt;br /&gt;Those who are interested in testing the branch can skip to the &quot;&lt;b&gt;How to Help&lt;/b&gt;&quot; section.&lt;br /&gt;&lt;h2&gt;Why We Need It&lt;/h2&gt;I was not present for the early evolution of Evolution, so this account is based on historical research and discussions with some of the old-timers.  Hopefully they won&apos;t clobber me for getting the details wrong, or for calling them old-timers.&lt;br /&gt;&lt;br /&gt;Evolution&apos;s original design consisted of a simple skeletal &quot;shell&quot; which served as the framework for out-of-process Bonobo components.  Each component managed different types of information: one for email, one for calendar events, one for contacts, etc.  The components talked amongst themselves via CORBA, which handled all the IPC.  Ettore Perazzoli, in his &lt;a href=&quot;http://lwn.net/2001/features/OLS/pdf/pdf/evolution.pdf&quot; rel=&quot;nofollow&quot;&gt;paper for the 2001 Ottawa Linux Symposium&lt;/a&gt;, wrote:&lt;br /&gt;&lt;blockquote&gt;It is interesting to note that the various pieces of Evolution are currently out-of-process components, and that CORBA deals with the inter-process communication nicely and transparently; it would be possible to turn these components into shared libraries without any substantial changes to the code.&lt;/blockquote&gt;And that&apos;s exactly what happened.  The components were turned into shared libraries sometime later to help address some design issues and to make the application more debuggable.  Evolution then became &amp;#8212; and has remained &amp;#8212; one monolithic process.  Most of its functionality is still supplied by in-process Bonobo components loaded at run-time.  Bonobo was kept around in part for the menu merging capabilities of &lt;a href=&quot;http://library.gnome.org/devel/libbonoboui/stable/&quot; rel=&quot;nofollow&quot;&gt;libbonoboui&lt;/a&gt;, but also because it was already very deeply ingrained in the application by then.   To this day, Bonobo still handles all the &lt;i&gt;inter-component&lt;/i&gt; communication, even though it&apos;s all one process.&lt;br /&gt;&lt;br /&gt;Fast forward to present day.  Bonobo has fallen out of favor with the rest of the GNOME community and its libraries are now deprecated (or planned to be deprecated &amp;#8212; the distinction is unclear).  GTK+ has gained a menu merging capability in &lt;a href=&quot;http://library.gnome.org/devel/gtk/stable/GtkUIManager.html&quot; rel=&quot;nofollow&quot;&gt;GtkUIManager&lt;/a&gt;, GObject has gained a module loading system in &lt;a href=&quot;http://library.gnome.org/devel/gobject/stable/GTypeModule.html&quot; rel=&quot;nofollow&quot;&gt;GTypeModule&lt;/a&gt;, and developers are scrambling to migrate code away from deprecated libraries and API in preparation for GNOME 3.&lt;br /&gt;&lt;br /&gt;Moreover, the inability of Evolution components to interact directly with the central shell continues to be a major design impediment.  Certain bugs cannot be fixed and enhancements cannot be implemented with Bonobo in the way.  Even something as simple as setting the proper relationship between a dialog window and the main application window can&apos;t be done under the current design without breaking the component/shell abstraction.&lt;br /&gt;&lt;br /&gt;In short, Bonobo&apos;s time has passed and it needs to get gone.&lt;br /&gt;&lt;h2&gt;What&apos;s Finished&lt;/h2&gt;&lt;h3&gt;A New Shell&lt;/h3&gt;I have rewritten Evolution&apos;s shell from scratch.  While still adhering to the original design principles, it now loads components (I&apos;m calling them &quot;shell backends&quot; just to get away from the CORBA nomenclature) at startup via GTypeModule.  Each main shell window provides a central GtkUIManager instance for shell backends to merge and un-merge their menus and tool bars.  The new shell provides a bunch of other convenient services that it didn&apos;t, or couldn&apos;t, before.  The API is now mostly stable, &lt;i&gt;and&lt;/i&gt; it&apos;s &lt;a href=&quot;http://mbarnes.fedorapeople.org/docs/eshell/&quot; rel=&quot;nofollow&quot;&gt;documented&lt;/a&gt;!  (A trend I hope to continue.)&lt;br /&gt;&lt;br /&gt;The shell itself is a subclass of &lt;a href=&quot;http://library.gnome.org/devel/unique/stable/UniqueApp.html&quot; rel=&quot;nofollow&quot;&gt;UniqueApp&lt;/a&gt; from &lt;a href=&quot;http://live.gnome.org/LibUnique&quot; rel=&quot;nofollow&quot;&gt;libunique&lt;/a&gt;, so Evolution is still a single instance application.  In fact, that feature has improved.  Starting a second Evolution instance with no command-line options will now raise and focus the current window instead of opening a new one; a behavior greatly preferred by users.  Also, Evolution will now terminate when it&apos;s finished handling a command-line URI and there are no other Evolution windows running.&lt;br /&gt;&lt;h3&gt;Infrastructure&lt;/h3&gt;Beyond the shell, it&apos;s mostly been a matter of slogging through the rest of the code and adapting it to the new shell API and the more modern GTK+ APIs.  Turns out, Evolution has a &lt;i&gt;lot&lt;/i&gt; of code, and a lot of infrastructure that piggybacks on Bonobo.  Needless to say, that&apos;s why it&apos;s taking so long.&lt;br /&gt;&lt;br /&gt;All of the menus and tool bars, and many of the stand-alone buttons and combo boxes, are now proxy widgets for GtkActions.  EMenu and EPopup &amp;#8212; the mechanisms that allow plugins to extend menus &amp;#8212; are being phased out in favor of EPluginUI, which works with GtkUIManager.  In fact, many of the plugins themselves are being phased out &amp;#8212; their features being properly integrated into the application.&lt;br /&gt;&lt;br /&gt;Asynchronous activity tracking &amp;#8212; that&apos;s those percent-complete and error messages in the status bar &amp;#8212; is now more object-oriented.  The shell even lends a hand in routing and tracking these activities.  I have a number of ideas for leveraging this new framework.  Eventually I&apos;d like to eliminate pop-up error dialogs altogether in favor of something less obnoxious, such as &quot;inline&quot; alert messages similar to those in Firefox, gedit, Sound Juicer and Evince.  Also, better shutdown management &amp;#8212; where Evolution tells you what network activities are keeping it from shutting down and allows you to cancel them.&lt;br /&gt;&lt;br /&gt;Just getting the thing to build was another challenge.  What I assume was once a nice layered design with clean separation of concerns has grown into a tangled mess of circular dependencies.  I&apos;ve managed to resolve most of the linking issues by shuffling source code around and routing application-wide events through the shell.  But there&apos;s still the issue of library modules linking to library modules (plugins linking to shell backends and shell backends linking to one another), which is not portable and in fact prevents Evolution from building on Mac OS X.&lt;br /&gt;&lt;h3&gt;Shell Backends&lt;/h3&gt;The contact, memo and task backends are done, and I&apos;m currently wrapping up some loose ends on the mailer.  All are usable and ready for testing.  I personally have been using the &lt;i&gt;kill-bonobo&lt;/i&gt; branch for daily email and task management since February.&lt;br /&gt;&lt;br /&gt;Calendars, however, are another story.  See below.&lt;br /&gt;&lt;h2&gt;What&apos;s Unfinished&lt;/h2&gt;The branch is about 75% complete.  It&apos;s usable, but there&apos;s still significant work to be done.&lt;br /&gt;&lt;h3&gt;The Calendar&lt;/h3&gt;The calendar is half-finished and is not yet usable.  This is the last major piece left.&lt;br /&gt;&lt;br /&gt;I was attempting to split up the massive GnomeCalendar class into smaller, more manageable pieces.  But I got burnt out and had to set it aside for awhile, and then never got back to it.  At this point I&apos;m in favor of just getting it working as quickly as possible.  I can take another shot at refactoring it later when I&apos;m feeling masochistic again.&lt;br /&gt;&lt;h3&gt;Plugins&lt;/h3&gt;Many of the plugins still have to be adapted to EPluginUI and the new shell.  This is a highly parallelizable area where I could use some help from volunteers.  The working and non-working plugins are listed in &quot;configure.ac&quot; (search for PLUGINS NOT BUILDING YET).&lt;br /&gt;&lt;h3&gt;Evolution Exchange&lt;/h3&gt;Evolution Exchange (formerly the &quot;Ximian Connector for Microsoft Exchange Server&quot;) presents an interesting problem.  The evolution-exchange-storage process is the last out-of-process Bonobo component that talks to the shell.  Ximian originally released this software under a non-free license, and used the split process design to bypass the linking restrictions imposed by the GPL.  Later, after Ximian was acquired by Novell, it was &lt;a href=&quot;http://www.novell.com/news/press/archive/2004/05/pr04034.html&quot; rel=&quot;nofollow&quot;&gt;released under an open-source license&lt;/a&gt;.  But the design remained unchanged, even after Evolution was collapsed into a single process application.&lt;br /&gt;&lt;br /&gt;I&apos;m uncertain of what to do with this.  To me, the best solution would be to convert the storage process to shared library modules for the Evolution and Evolution Data Server processes.  But that could take some doing, and time is short.  Plus, Evolution Exchange is being phased out by Evolution MAPI anyway.  Another option is to hack together a quick and dirty D-Bus API for the shell, which the storage process can use.  But I&apos;m hesitant to expose a poorly thought out D-Bus API just for a corner case.&lt;br /&gt;&lt;h3&gt;Third-Party Extensions&lt;/h3&gt;Third-party extensions such as &lt;a href=&quot;http://gnome.eu.org/index.php/Evolution_RSS_Reader_Plugin&quot; rel=&quot;nofollow&quot;&gt;evolution-rss&lt;/a&gt;, &lt;a href=&quot;http://freshmeat.net/projects/brutus&quot; rel=&quot;nofollow&quot;&gt;evolution-brutus&lt;/a&gt;, and &lt;a href=&quot;http://www.go-evolution.org/Evolution_JESCS&quot; rel=&quot;nofollow&quot;&gt;evolution-jescs&lt;/a&gt; will likely require some re-design.  I will lend a hand here as much as possible.&lt;br /&gt;&lt;h2&gt;How to Help&lt;/h2&gt;The best way to help right now is to test drive the &lt;i&gt;kill-bonobo&lt;/i&gt; branch and file Evolution bug reports at &lt;a href=&quot;http://bugzilla.gnome.org/&quot; rel=&quot;nofollow&quot;&gt;http://bugzilla.gnome.org/&lt;/a&gt;.  Since this is an unofficial branch I have my own little system for tracking reports in Bugzilla.  But really, if you do file a bug just mention that you&apos;re running the &lt;i&gt;kill-bonobo&lt;/i&gt; branch and I&apos;ll take care of the rest.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Existing bugs that the branch may be able to address are tagged with &lt;code&gt;&lt;b&gt;evolution[kill-bonobo]&lt;/b&gt;&lt;/code&gt; in the Status Whiteboard field. (&lt;a href=&quot;http://tinyurl.com/evolution-kb&quot; rel=&quot;nofollow&quot;&gt;Bug List&lt;/a&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Existing bugs that the branch has successfully addressed are tagged with &lt;code&gt;&lt;b&gt;evolution[kill-bonobo]&lt;/b&gt;&lt;/code&gt; in the Status Whiteboard field and the Summary field prefixed with &lt;code&gt;&lt;b&gt;[KB-Fixed]&lt;/b&gt;&lt;/code&gt;. (&lt;a href=&quot;http://tinyurl.com/evolution-kb-fixed&quot; rel=&quot;nofollow&quot;&gt;Bug List&lt;/a&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Regressions that the branch has introduced get tagged with &lt;code&gt;&lt;b&gt;evolution[kill-bonobo]&lt;/b&gt;&lt;/code&gt; in the Status Whiteboard field and the Summary field prefixed with &lt;code&gt;&lt;b&gt;[regression]&lt;/b&gt;&lt;/code&gt;.  These are what I&apos;m looking for.  (&lt;a href=&quot;http://tinyurl.com/evolution-kb-regression&quot; rel=&quot;nofollow&quot;&gt;Bug List&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Evolution developers and contributors looking to hack on stuff could start by picking a non-working plugin and getting it back on its feet (see the previous section).  That would probably acquaint you with the new shell API, and possibly expose bugs or shortcomings in the design.  Catch me on GimpNet (channel &lt;b&gt;#evolution&lt;/b&gt;) if you&apos;re interested in this.&lt;br /&gt;&lt;br /&gt;For Fedora users, I will attempt to publish a &lt;i&gt;kill-bonobo&lt;/i&gt; RPM repository for Fedora 12 / Rawhide in the near future.  Stay tuned.&lt;br /&gt;&lt;h2&gt;Credits&lt;/h2&gt;Finally, I have to give props to &lt;a href=&quot;http://www.redhat.com/&quot; rel=&quot;nofollow&quot;&gt;my employer&lt;/a&gt; for humoring me through this ordeal, especially since I&apos;ve consistently underestimated the workload.  While the work has been largely exploratory and at times overwhelming, in the end it&apos;s been highly educational and satisfying.</description>
  <comments>http://mbarnes.livejournal.com/2606.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>18</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/2469.html</guid>
  <pubDate>Wed, 15 Apr 2009 16:56:58 GMT</pubDate>
  <title>Evolution Attachment Rewrite</title>
  <link>http://mbarnes.livejournal.com/2469.html</link>
  <description>Today I finished a rewrite of Evolution&apos;s attachment handling code.  What was supposed to be a short detour from a much larger &lt;a href=&quot;http://www.go-evolution.org/KillBonobo&quot; rel=&quot;nofollow&quot;&gt;ongoing project&lt;/a&gt; (more on that later) ballooned into a month-long overhaul.  I had already sketched out &lt;a href=&quot;http://bugzilla.gnome.org/show_bug.cgi?id=516933&quot; rel=&quot;nofollow&quot;&gt;plans for a rewrite&lt;/a&gt; a year ago.  This was just preparation meeting opportunity.&lt;br /&gt;&lt;br /&gt;The goals of the rewrite were primarily internal code cleanup, but there&apos;s some UI bling too:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Attachment handling code is currently scattered throughout Evolution, with lots of duplication.  The rewrite collects everything in one place.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Migrate from &lt;a href=&quot;http://library.gnome.org/devel/libgnomeui/stable/GnomeIconList.html&quot; rel=&quot;nofollow&quot;&gt;GnomeIconList&lt;/a&gt; (deprecated) to &lt;a href=&quot;http://library.gnome.org/devel/gtk/stable/GtkIconView.html&quot; rel=&quot;nofollow&quot;&gt;GtkIconView&lt;/a&gt;, with a custom &lt;a href=&quot;http://library.gnome.org/devel/gtk/stable/GtkTreeModel.html&quot; rel=&quot;nofollow&quot;&gt;GtkTreeModel&lt;/a&gt; specifically for attachments.  And throw in a &lt;a href=&quot;http://library.gnome.org/devel/gtk/stable/GtkTreeView.html&quot; rel=&quot;nofollow&quot;&gt;GtkTreeView&lt;/a&gt; option just for kicks.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Better utilize &lt;a href=&quot;http://library.gnome.org/devel/gio/stable/&quot; rel=&quot;nofollow&quot;&gt;GIO&lt;/a&gt; for file operations, thumbnails, emblems, etc.  Abstract away the distinction between local and remote files.  Stop using threads, and make sure all blocking calls are asynchronous.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Migrate the attachment popup menus to &lt;a href=&quot;http://library.gnome.org/devel/gtk/stable/GtkUIManager.html&quot; rel=&quot;nofollow&quot;&gt;GtkUIManager&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Kill off a couple frivolous attachment-related plugins and support the functionality directly.  We ship way too many plugins as it is and I&apos;m gradually killing off the silly ones.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Make the whole thing extensible, to help resolve some cyclic dependencies within the application.  The mailer now handles the mail-related parts, the calendar handles the calendar-related parts, and so on.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Here&apos;s a few screenshots.  The first two show off the new icon and list views when composing email, and demonstrate simultaneously loading from or saving to remote stores (I used some big audio files here for better illustration of the progress bars).  Both file operations are cancellable.  The third screenshot shows off the attachment UI for received emails.&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;br /&gt;&lt;img src=&quot;http://mbarnes.fedorapeople.org/images/attachment-icon-view.png&quot; alt=&quot;Icon View&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;br /&gt;&lt;img src=&quot;http://mbarnes.fedorapeople.org/images/attachment-list-view.png&quot; alt=&quot;List View&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;br /&gt;&lt;img src=&quot;http://mbarnes.fedorapeople.org/images/attachment-received.png&quot; alt=&quot;Received Attachments&quot; /&gt;&lt;br /&gt;&lt;/div&gt;</description>
  <comments>http://mbarnes.livejournal.com/2469.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>20</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/2091.html</guid>
  <pubDate>Fri, 27 Feb 2009 03:45:28 GMT</pubDate>
  <title>GNOME Video Arcade has moved to GitHub</title>
  <link>http://mbarnes.livejournal.com/2091.html</link>
  <description>To better acquaint myself with &lt;a href=&quot;http://git-scm.com/&quot; rel=&quot;nofollow&quot;&gt;the way of the future&lt;/a&gt;, I&apos;ve moved my GNOME Video Arcade project from &lt;a href=&quot;https://sourceforge.net/projects/gva&quot; rel=&quot;nofollow&quot;&gt;SourceForge&lt;/a&gt; to &lt;a href=&quot;http://github.com/mbarnes/gnome-video-arcade/tree/master&quot; rel=&quot;nofollow&quot;&gt;GitHub&lt;/a&gt;, and also set up a horribly amateurish &lt;a href=&quot;http://mbarnes.github.com/gnome-video-arcade/&quot; rel=&quot;nofollow&quot;&gt;website&lt;/a&gt; for it.&lt;br /&gt;&lt;br /&gt;GNOME Video Arcade is a simple &lt;a href=&quot;http://mamedev.org/&quot; rel=&quot;nofollow&quot;&gt;MAME&lt;/a&gt; frontend written to suit my own aesthetic taste better than other UNIX-based frontends, most of which I find too clunky and cluttered.  And it&apos;s something to hack on when I&apos;m burnt out from my &lt;a href=&quot;http://projects.gnome.org/evolution/&quot; rel=&quot;nofollow&quot;&gt;real job&lt;/a&gt;.</description>
  <comments>http://mbarnes.livejournal.com/2091.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/1899.html</guid>
  <pubDate>Mon, 17 Nov 2008 18:41:56 GMT</pubDate>
  <title>ExoBinding and Settings Management</title>
  <link>http://mbarnes.livejournal.com/1899.html</link>
  <description>Over the weekend I learned about &lt;a href=&quot;http://www.xfce.org/&quot; rel=&quot;nofollow&quot;&gt;Xfce&lt;/a&gt;&apos;s excellent &lt;a href=&quot;http://www.xfce.org/documentation/api/exo/exo-Binding-Properties-Functions.html&quot; rel=&quot;nofollow&quot;&gt;ExoBinding&lt;/a&gt; extension for &lt;a href=&quot;http://library.gnome.org/devel/gobject/unstable/&quot; rel=&quot;nofollow&quot;&gt;GObject&lt;/a&gt; properties, a feature I&apos;ve been wishing for for quite a long time.  It allows you to bind two object properties together, with optional transformation functions, so their values automatically stay in sync.&lt;br /&gt;&lt;br /&gt;A simple use case is desensitizing a portion of a dialog when a check button is inactive.  With &lt;a href=&quot;http://www.xfce.org/documentation/api/exo/exo-Binding-Properties-Functions.html&quot; rel=&quot;nofollow&quot;&gt;ExoBinding&lt;/a&gt;, you can do this by simply binding the &lt;a href=&quot;http://library.gnome.org/devel/gtk/unstable/GtkCheckButton.html&quot; rel=&quot;nofollow&quot;&gt;GtkCheckButton&lt;/a&gt;&apos;s &amp;quot;active&amp;quot; property to a &lt;a href=&quot;http://library.gnome.org/devel/gtk/unstable/GtkContainer.html&quot; rel=&quot;nofollow&quot;&gt;GtkContainer&lt;/a&gt;&apos;s &amp;quot;sensitive&amp;quot; property, both of which are boolean values.  Done.  No callbacks, no manually setting widget sensitivity, just one call to &lt;a href=&quot;http://www.xfce.org/documentation/api/exo/exo-Binding-Properties-Functions.html#exo-binding-new&quot; rel=&quot;nofollow&quot;&gt;exo_binding_new()&lt;/a&gt;. I like to think of it as wiring objects together.&lt;br /&gt;&lt;br /&gt;So I had an idea.&lt;br /&gt;&lt;br /&gt;Last year I learned of and raved about a little utility library named &lt;a href=&quot;http://wiki.openmoko.org/wiki/Libgconf-bridge&quot; rel=&quot;nofollow&quot;&gt;GConfBridge&lt;/a&gt;, which binds &lt;a href=&quot;http://library.gnome.org/devel/gobject/unstable/&quot; rel=&quot;nofollow&quot;&gt;GObject&lt;/a&gt; properties to &lt;a href=&quot;http://projects.gnome.org/gconf/&quot; rel=&quot;nofollow&quot;&gt;GConf&lt;/a&gt; keys and automatically keeps &lt;em&gt;them&lt;/em&gt; in sync.  Combining these features seemed like a pretty powerful way to implement a user preferences dialog, but then there&apos;s the problem of providing access to these settings to the rest of the application.  In &lt;a href=&quot;http://projects.gnome.org//evolution/&quot; rel=&quot;nofollow&quot;&gt;Evolution&lt;/a&gt;, at least, the settings values are kind of scattered all over the place.  Centralization seems like the right way to go.&lt;br /&gt;&lt;br /&gt;Again looking for existing solutions, I took a closer look at &lt;a href=&quot;http://library.gnome.org/devel/gtk/unstable/GtkSettings.html&quot; rel=&quot;nofollow&quot;&gt;GtkSettings&lt;/a&gt; which, if I understand it correctly (the documentation is a bit sparse), allows widgets to install their own configuration settings that desktop themes can tweak.  &lt;a href=&quot;http://library.gnome.org/devel/gtk/unstable/GtkSettings.html&quot; rel=&quot;nofollow&quot;&gt;GtkSettings&lt;/a&gt; centralizes these settings and exposes them as &lt;a href=&quot;http://library.gnome.org/devel/gobject/unstable/&quot; rel=&quot;nofollow&quot;&gt;GObject&lt;/a&gt; properties.&lt;br /&gt;&lt;br /&gt;Perfect.  &lt;em&gt;Now&lt;/em&gt; we&apos;re on to something.&lt;br /&gt;&lt;br /&gt;I wrote a simplified version of &lt;a href=&quot;http://library.gnome.org/devel/gtk/unstable/GtkSettings.html&quot; rel=&quot;nofollow&quot;&gt;GtkSettings&lt;/a&gt; which dumps the parser but keeps the property registration, and added it to an Evolution branch I&apos;m working on.  This singleton object serves as a repository for application settings, accessible via &lt;a href=&quot;http://library.gnome.org/devel/gobject/unstable/&quot; rel=&quot;nofollow&quot;&gt;GObject&lt;/a&gt; properties, complete with &amp;quot;&lt;a href=&quot;http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject-notify&quot; rel=&quot;nofollow&quot;&gt;notify&lt;/a&gt;&amp;quot; signal emissions when a settings value changes.&lt;br /&gt;&lt;br /&gt;Then, for each application setting, I register a new property with the &lt;a href=&quot;http://library.gnome.org/devel/gtk/unstable/GtkSettings.html&quot; rel=&quot;nofollow&quot;&gt;GtkSettings&lt;/a&gt;-like singleton, bind that property to the appropriate &lt;a href=&quot;http://projects.gnome.org/gconf/&quot; rel=&quot;nofollow&quot;&gt;GConf&lt;/a&gt; key using &lt;a href=&quot;http://wiki.openmoko.org/wiki/Libgconf-bridge&quot; rel=&quot;nofollow&quot;&gt;GConfBridge&lt;/a&gt;, bind it again to the appropriate widgets in the preferences window using &lt;a href=&quot;http://www.xfce.org/documentation/api/exo/exo-Binding-Properties-Functions.html&quot; rel=&quot;nofollow&quot;&gt;ExoBinding&lt;/a&gt;, and (ideally) bind it yet again to some object property deep in the application where the setting will take effect.&lt;br /&gt;&lt;br /&gt;I prototyped all this last night with some of Evolution&apos;s settings and, I&apos;ll be darned, it seems like a viable approach.  Just a bit of wiring during initialization and that&apos;s that.&lt;br /&gt;&lt;br /&gt;All this magic mimics much of what &lt;a href=&quot;http://live.gnome.org/dconf&quot; rel=&quot;nofollow&quot;&gt;dconf and GSettings&lt;/a&gt; promise to make easier, and taking advantage of &lt;a href=&quot;http://wiki.openmoko.org/wiki/Libgconf-bridge&quot; rel=&quot;nofollow&quot;&gt;GConfBridge&lt;/a&gt; and &lt;a href=&quot;http://www.xfce.org/documentation/api/exo/exo-Binding-Properties-Functions.html&quot; rel=&quot;nofollow&quot;&gt;ExoBinding&lt;/a&gt; now might help set the stage for a smoother transition to GSettings when the time comes.&lt;br /&gt;&lt;br /&gt;In the meantime, I&apos;m rooting for &lt;a href=&quot;http://bugzilla.gnome.org/show_bug.cgi?id=348080&quot; rel=&quot;nofollow&quot;&gt;this bug&lt;/a&gt; to get some attention.</description>
  <comments>http://mbarnes.livejournal.com/1899.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/1637.html</guid>
  <pubDate>Sun, 09 Nov 2008 18:24:30 GMT</pubDate>
  <title>GObject-based Camel</title>
  <link>http://mbarnes.livejournal.com/1637.html</link>
  <description>Over the weekend I hit a milestone with a science experiment I started earlier in the year to turn Camel into a GObject-based library with minimal API breakage.  The short-term goal of this effort is to make it easier to generate language and D-Bus bindings for Camel.&lt;br /&gt;&lt;br /&gt;I now have running code which I&apos;ve posted to a new evolution-data-server branch called &amp;quot;&lt;a href=&quot;http://svn.gnome.org/viewvc/evolution-data-server/branches/camel-gobject/&quot; rel=&quot;nofollow&quot;&gt;camel-gobject&lt;/a&gt;&amp;quot;.  The branch contains a couple very small patches (evolution.patch and evolution-exchange.patch) that must be applied before building Evolution against the GObject-based Camel library.&lt;br /&gt;&lt;br /&gt;Evolution seems to be working just fine with my standard setup, but I haven&apos;t tested all the built-in Camel providers and various third-party extensions.  If others want to chip in with the testing I&apos;d be grateful.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: larger;&quot;&gt;&lt;strong&gt;Techie Details&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My approach was basically to pull off the same stunt that was done to GtkObject when GObject was introduced: turn the base CamelObject class into a GObject subclass, and convert the CamelObject API into a set of thin wrappers for equivalent operations in GObject.  For example:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;camel_object_ref()      now calls g_object_ref()&lt;/li&gt;&lt;li&gt;camel_object_unref()    now calls g_object_unref()&lt;/li&gt;&lt;li&gt;camel_type_register()   now calls g_type_register_static()&lt;/li&gt;&lt;/ul&gt;...etc...&lt;br /&gt;&lt;br /&gt;Obviously this breaks Camel&apos;s ABI.  There&apos;s no way around that.&lt;br /&gt;&lt;br /&gt;The (intentional) API breakage is very minimal:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;CamelType is now an alias for GType.  It is no longer a pointer to the class structure.  That was supposed to be an implementation detail anyway, but Camel (and Evo, and Evo-Exchange) exploits that in a number of places.  The class structure can be properly accessed using camel_type_get_global_classfuncs(), which is now an alias for g_type_class_peek().&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;The corollary to that is when to fetch the parent class structure. Most classes define a static &amp;quot;parent_class&amp;quot; pointer for chaining up in class methods.  The &amp;quot;parent_class&amp;quot; pointer should be set in the class initialization function, NOT before the type registration in get_type().  Just like you would in normal GObject code.  There were LOTS of places in Camel were that needed fixing.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Camel interfaces are dead, but they were never really used anyway.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;The other half of the problem was CamelObjectBag.  It formerly shared a mutex with CamelObject&apos;s reference counting, I think because CamelObject ref&apos;s and unref&apos;s were non-atomic.  GObject&apos;s reference counting is atomic, so with that issue out of the way I gave each CamelObjectBag its own mutex, cleaned up the code a bit, and split it off into a separate source file (camel-object-bag.c).  After an evening&apos;s worth of debugging it seems to be working fine now.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: larger;&quot;&gt;&lt;strong&gt;Now What?&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So with the &amp;quot;interesting&amp;quot; part now done, next comes the long and tedious part: rewriting all the internal CamelObject boilerplate into GObject boilerplate and making sure we&apos;re not using any newly deprecated API. But that can be done gradually and with help from others.&lt;br /&gt;&lt;br /&gt;In time I&apos;d also like to explore taking greater advantage of GObject signals and properties in Camel, and also deprecating CamelArgV and CamelArgGetV.&lt;br /&gt;&lt;br /&gt;I haven&apos;t discussed this with the other Evolution/Camel developers yet, so there are currently no plans to include it in 2.26.  That may change, but for now it remains purely experimental.</description>
  <comments>http://mbarnes.livejournal.com/1637.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/1280.html</guid>
  <pubDate>Wed, 07 Nov 2007 02:27:47 GMT</pubDate>
  <title>GNOME Video Arcade 0.5.2</title>
  <link>http://mbarnes.livejournal.com/1280.html</link>
  <description>Has this happened to you?  You upgrade to the latest and greatest MAME release and suddenly a bunch of your favorite games stop working.  Now I do understand that the MAME project is primarily concerned with documenting the ins and outs of old video game hardware, and the fact that you can actually &lt;i&gt;play&lt;/i&gt; the games is a mere side-effect of the process.  But you also can&apos;t ignore the fact that a rather large community has grown up around this &quot;side-effect&quot; over the past decade.  Yet almost every MAME release continues to break ROM sets and (especially) front-ends &lt;i&gt;without warning&lt;/i&gt;.  I think the MAME developers could do a better job of alerting the community about changes that break backward compatibility.&amp;nbsp;  Expecting users to sift through change logs and individual developer blogs to learn what broke just doesn&apos;t cut it.&lt;br /&gt;&lt;br /&gt; Until now GNOME Video Arcade has also been guilty of not alerting users about games that have broken due to a MAME upgrade.&amp;nbsp; But as of version 0.5.2, this is no longer true.&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img alt=&quot;GNOME Video Arcade Screenshot&quot; src=&quot;http://mbarnes.fedorapeople.org/gva-rom-errors.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;left&quot;&gt;This dialog now appears when GNOME Video Arcade detects errors during its analysis of your ROM files.&amp;nbsp; The &lt;b&gt;Save As&lt;/b&gt; button allows you to save the analysis results to a text file for later viewing.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</description>
  <comments>http://mbarnes.livejournal.com/1280.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/1147.html</guid>
  <pubDate>Sun, 16 Sep 2007 05:10:48 GMT</pubDate>
  <title>GNOME Video Arcade 0.4.4</title>
  <link>http://mbarnes.livejournal.com/1147.html</link>
  <description>Released a &lt;a href=&quot;http://www.gnomefiles.org/app.php/GNOME_Video_Arcade&quot; rel=&quot;nofollow&quot;&gt;GNOME Video Arcade&lt;/a&gt; update that finally adds basic search functionality to the application.  I scaled back my grand plans for an advanced search window and instead implemented a simple Google-style entry box.  With the game database and automatic conversion of query results to a &lt;a href=&quot;http://library.gnome.org/devel/gtk/stable/GtkTreeModel.html&quot; rel=&quot;nofollow&quot;&gt;GtkTreeModel&lt;/a&gt; already in-place and working, and for as long as the &quot;Search Results&quot; button has been non-functional, I&apos;m a bit embarassed to admit that it only took about an hour to glue the components together to get search working.</description>
  <comments>http://mbarnes.livejournal.com/1147.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/841.html</guid>
  <pubDate>Sat, 01 Sep 2007 20:47:46 GMT</pubDate>
  <title>GNOME Video Arcade 0.4.3</title>
  <link>http://mbarnes.livejournal.com/841.html</link>
  <description>I released a minor update to &lt;a href=&quot;http://www.gnomefiles.org/app.php/GNOME_Video_Arcade&quot; rel=&quot;nofollow&quot;&gt;GNOME Video Arcade&lt;/a&gt; today with a few bug fixes and user interface tweaks, among which is the main window size being preserved across sessions, courtesy of &lt;a href=&quot;http://projects.o-hand.com/libgconf-bridge&quot; rel=&quot;nofollow&quot;&gt;libgconf-bridge&lt;/a&gt;.  It also adds all available game data from MAME to the game database now, so the database construction phase takes longer once again.  But this is necessary for implementing the advanced search functionality I have planned for 0.5.</description>
  <comments>http://mbarnes.livejournal.com/841.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://mbarnes.livejournal.com/717.html</guid>
  <pubDate>Fri, 31 Aug 2007 02:01:08 GMT</pubDate>
  <title>Blogging again</title>
  <link>http://mbarnes.livejournal.com/717.html</link>
  <description>I&apos;m trying out the blogging thing again, hoping I can stick with it this time.  Now that I have a job that allows me to talk about the interesting things I work on, perhaps I&apos;ll fare better at it.  Prior to my current job, I spent eight years working on various military projects at &lt;span style=&quot;font-style: italic;&quot;&gt;Boeing&lt;/span&gt; such as the ill-fated &lt;a href=&quot;http://en.wikipedia.org/wiki/Boeing_X-32&quot; rel=&quot;nofollow&quot;&gt;X-32 Joint Strike Fighter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;These days I work at &lt;span style=&quot;font-style: italic;&quot;&gt;Red Hat&lt;/span&gt; maintaining &lt;a href=&quot;http://www.gnome.org/projects/evolution/&quot; rel=&quot;nofollow&quot;&gt;Evolution&lt;/a&gt;, an open source mail and calendaring application for the GNOME Desktop Environment.&lt;br /&gt;&lt;br /&gt;Outside of work I like to hack on a pet project of mine called &lt;a href=&quot;http://www.gnomefiles.org/app.php/GNOME_Video_Arcade&quot; rel=&quot;nofollow&quot;&gt;GNOME Video Arcade&lt;/a&gt;, a simple xmame and sdlmame front-end, because I still haven&apos;t outgrown those old golden-era arcade games that I spent all my allowance money on growing up.  And they make for good five minute mental breaks while hacking.</description>
  <comments>http://mbarnes.livejournal.com/717.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
