Updates from the Evolution/WebKit front

The newest member of the Evolution Team at Red Hat, Dan Vrátil, has been making exciting progress in transitioning Evolution from our aging HTML renderer, GtkHTML, to the more modern and full-featured WebKit/GTK+. He's still trying to get his blog added to Planet GNOME so I wanted to highlight a couple of his recent posts:

Evolution meets WebKit

Evolution gets a new e-mail formatter

You can already try out the new WebKit integration in Evolution 3.5.

It currently uses WebKit/GTK+ to render received emails for display and printing, but not yet to compose emails for sending. That's a whole nother barrel of monkeys. But that's next on Dan's list, and then we can finally retire GtkHTML!

Major Evolution-Data-Server API breaks about to land

I mentioned in my previous blog post a few months ago that I've been overhauling Evolution-Data-Server's account format and APIs.  I've been doing all this work on a very long-running branch (18 months old now!) which was not ready in time for GNOME 3.4.  But it's ready now, and I'll be merging it this weekend just after the Evolution 3.5.2 tarballs are released.

I'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.  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.  Please contact me if you maintain one of these projects so I can help make the transition as smooth as possible. (mbarnes@redhat.com or #evolution on IRC).

In short, Evolution-Data-Server will migrate account data from the XML blobs we've historically stuffed into GConf to plain text files which live under the XDG-compliant $XDG_CONFIG_HOME directory.  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.

I've written a fair amount of documentation, so just to get the links out of the way...
Immediate benefits to users and to GNOME are:
  • Much easier to backup account data or copy it to other machines.  Having account data locked in a configuration database makes this pretty painful at present.  This has been an ongoing problem for at least as long as I've been involved with Evolution (circa 2006).  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.  Evolution-Data-Server will notice the new files and (assuming they're valid) activate them immediately without having to restart any programs.
  • The new D-Bus service will centralize interactive authentication prompts.  This means client programs will no longer have to deal with authentication at all.  Internally, the new D-Bus service will use GcrSystemPrompt 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.  In a GNOME Shell session, GNOME Shell will take over and display a dialog window consistent with the shell's overall look and feel.
  • The new D-Bus service will monitor GNOME Online Accounts and automatically add or delete equivalent Evolution-Data-Server accounts.  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.  That issue is now solved.
  • As part of this effort I've also converted Evolution-EWS to the new Evolution-Data-Server APIs and have added support for GNOME Online Accounts' new Exchange option.  This is a major feature for GNOME 3.6.
The new account management system also opens the door to all kinds of cool new enhancements to Evolution and Evolution-Data-Server.  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.

Coming Soon in Evolution 3.4

I’m overdue for an update on what the Evolution team has been up to lately.  This development cycle should be interesting, as we have several projects converging for the next major release in March: Evolution 3.4. It’s still pretty early in the 3.3 cycle, so everything is still tentative at this point. But here’s some of the major features we have cooking, in addition to our steady stream of bug fixes and incremental enhancements.

New D-Bus Service for Email

Srinivasa Ragavan 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.

Evolution, Meet WebKit

Dan Vratil has taken on the task of porting Evolution’s email rendering from our old and outdated HTML engine (“GtkHtml”) to the more modern WebKit/GTK+. Dan tells me he’s taking advantage of WebKit’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.

We’re treating email rendering and email composing as separate projects. Right now it’s looking like we’ll continue using GtkHtml for email composing in Evolution 3.4, but fear not -- we’ll get to it. We’re as eager to drop GtkHtml as anyone.

Automated Account Setup

Punit Jain is merging the automated mail account setup feature from “express” mode into the regular Evolution Account Assistant. This is the feature where you give Evolution your email address and it checks the address’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.

Goodbye GConf

Rodrigo Moya has been porting all of Evolution’s simple GConf keys to dconf and fixing up our code to access the new keys via GLib’s own GSettings API. So one less package dependency for Evolution 3.4. As for the not-so-simple GConf keys, see below.

New Backend for Microsoft Exchange

David Woodhouse and his team at Intel, along with Chenthill Palanisamy at Novell, have developed a new Evolution backend that can talk to Microsoft Exchange 2007 and 2010 by way of Microsoft‘s “Exchange Web Services”, a publicly documented SOAP-based API.

The new backend package is called “evolution-ews”.

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’s regular release schedule.

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.  :)

New Backend for Kolab Groupware

Christian Hilberg and his team at kernel concepts and tarent GmbH have developed a brand new Evolution backend for Kolab Groupware servers.

The new backend package is called “evolution-kolab”.

As with “evolution-ews”, 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’s regular release schedule.

Saner Account Storage

As for me, I’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.

Evolution’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.

We’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’t) such as GNOME Online Accounts monitoring.

I could ramble on about this but I’ll save it for a separate blog post.

As you can see, quite a lot going on at once. Any questions, feel free to email me, or email Evolution’s development mailing list, or jump on Evolution’s IRC channel: #evolution on GIMPNet (irc.gimp.org).

Evolution is rocking on Windows

Fridrich Štrba has been doing an awesome job of integrating the latest Evolution release on Windows. We have a new Windows installer!

Since he's not on Planet GNOME, I'm acting as his proxy. Check out his latest blog post for details and lots of pretty screenshots.

A handy sidebar trick in Evolution

In Evolution, you can display multiple calendars, task lists or memo lists at once by check marking their names in the sidebar.  I'm not a heavy calendar or memo list user myself, but I do practice the Getting Things Done methodology with Evolution's task lists.  Here's my current set of lists:

So much to do...

Earlier today, Nick Jenkins filed a bug complaining about how cumbersome it is to just focus on one list (or calendar).  And he's right.  You basically have two choices: 1) go through the sidebar and manually un-check everything you don't want to see, which is ridiculously cumbersome, or 2) right-click on the item you do want to see and select "Show Only This whatever" from the pop-up menu, which check marks that item and clears all others.


Handy, right?  Well, not so much if you use it frequently enough.  Nick was asking for an easier way, so I suggested we make triple-clicking on a sidebar item a shortcut for the "show only" menu item.  (Triple instead of double-click so it's not so easy to trigger by accident.)

Took about a half hour to hack together and I have to say I'm startled at how much easier this simple enhancement allows me to manage my task lists!  I like it enough that I snuck it in at the last minute for Evolution 2.30.

Using GStreamer to sample arcade music

Recently I discovered the online Arcade History database has added music samples for some games.  For example, they now have music for the mid-80's racing game Out Run.

I thought it would be cool to integrate that into my MAME front-end, GNOME Video Arcade, and wound up blowing the whole weekend on it. I'm happy to say it's finished already, and works great!

My foray into basic GStreamer programming was suprisingly pleasant. The API is nicely designed and well-documented, and simple use cases like mine are made easy. The "playbin" plugin pretty much did all the work. I just fed it Arcade History URIs and wired up a simple user interface to follow state transitions from the audio stream.

GStreamer is an example of the kind of high-quality software engineering that I strive to emulate in my own work.


Evolution is 100% Bonobo-free!

A couple years ago I wasn't sure I'd ever see the day, but today I'm delighted to announce that Evolution has finally dropped not only its Bonobo dependency but also its libgnome and libgnomeui dependencies (see for yourself)! This will debut as 2.29.1.

Quick recap of recent events:
  • We created our gnome-2-28 branch earlier than usual to get a head start on Evolution 2.29 development.
  • We merged the kill-bonobo branch that I talked about awhile back.
  • We ported the address book side of Evolution-Data-Server from Bonobo to D-Bus, and are currently finishing up the calendar side.
  • We are tracking both Evolution regressions and Evolution-Data-Server regressions. If you're the bleeding-edge / early-adopter type please help us test the new code and report any more regressions!
  • Bonobo-free Evolution packages for Fedora 12 are available from my Fedora People page. The package versions are relabeled as 2.27.99 for easier integration with Fedora 12 but it's actually the 2.29 code in disguise.
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.

Still a Kid at Age 33

As a child of the 80's I was just old enough to get swept up in the craze of what has come to be known as the golden age of arcade games. 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.

For my 33rd birthday this weekend, Candace and I made our annual pilgrimage to Funspot Family Fun Center in Weirs Beach, New Hampshire. Funspot is home of the largest video arcade in the world. If you'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 "fun center" type places, the real treasure is up on the third level (yeah, it's that big), away from the mainstream crowds, where you'll find the The American Classic Arcade Museum. The museum holds over 250 video game and pinball machines of yesteryear, and is where much of the hilarious yet highly engrossing documentary The King of Kong was filmed.

Suffice it to say I had a blast. Set the day'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 famous Pac-Man machine, but I swear I was better at that game when I was eight. Can't wait to go back.


Fedora Packages for Kill-Bonobo

Fedora 12 ("Rawhide") packages for Evolution's kill-bonobo branch are now available. Install this repo file to get updates through yum. The branch is currently synced with Evolution 2.27.3.

As stated previously, not everything is functional yet. Please file bugs for the parts that are. I'll try to post updates at least weekly.