On embracing the web

HTML is not the Holy Grail

There were a few talks at GUADEC that were around the topic of web and trying to figure out ways to build bridges to the web world from the GNOME community and technologies.

It was praised by some, most notably Luis Villa, that HTML/CSS/JS was the way to go. However I think that this is grabbing the stick from the wrong end in many ways.

The interesting parts of the web are not its front end technologies as such (the fact that they are standards and you can assume everybody has a browser is though). The interesting bit of the Web as a platform is the ability to syndicate, publish and aggregate content.

I actually think that the so called fact that people love HTML+CSS+JS is sort of a myth. The reason there's so many people doing stuff with it is not because it is a great technology, it's because:

  • You can reach a huge user base deploying a web app
  • It has a lean learning curve

People go through the pain of building apps with these technologies because it's worth the pain, and actually, for a lot of applications it's the better option. But it's still a pain.

However, suggesting that this is how GNOME should move ahead is in my opinion not the fastest path to provide a great user experience. Which is what GNOME is all about.

It's all about the data!

In my opinion, what we really fail at is at providing tools to create rich user experiences for data driven applications, and ways to feed data from the web more specifically. This has a lot to do with the poorness of our platform when it comes to ways to talk HTTP, libsoup for example is not such a great API for application developers for many reasons.

Then there's Gtk+'s lack of proper views for large datasets and GtkTreeModel is not necessarily a general purpose data model API. This is why, by the way, we developed libmodel at Codethink and created a GtkTreeModel wrapper around it.

I think the ones really pioneering in this field are the Intel guys with libsocialweb and Adrien Bustany on online providers for Tracker. But we still miss the "glue" for our great front end technologies (Gtk+/Clutter/MX) so that application developers can put together apps consuming and pushing online data real quick.

The browser is nice and all but…

There is a reason why Google, one of the main pushers of the web
technologies, still have Java based apps in the android platform. There is a reason flash is not going away and Silverlight and JavaFx are here to stay as well. The
closer you are to the hardware, the better the user experience can be. The quicker you can put together your apps, the better.

Pushing the boundaries of HTML is a nice thing and I'm happy to see Flash, Silverlight and JavaFx going away as substitutes of content that could be deployed as web content in the first place, but innovation and design by committee are not real good friends. We need a platform that can move as quick as hardware does, as much as we need a web platform as well that can cherry pick the innovations

Opportunities for collaboration, our friends from Mozilla


There is however a huge opportunity for the GNOME community, if we start making steps towards a better toolchain for data driven applications, I think building bridges with the Mozilla community can be a major win. I know what you're thinking, Gecko. No, I actually think WebKit is the way to go as our rendering engine, Gecko is there to follow Firefox's agenda. Fair enough.

There's a space in which building bridges with the Mozilla community can be even a biggest win for both ends, the web services space. Mozilla is creating amazing web services and tools, Firefox Sync, Bespin, Contacts.

GNOME seriously lacks of a community of people dedicated to build web services around the platform, and Mozilla is has that sort of focus. Together I think we can join forces solve this ongoing problem of closed source web services and all the privacy concerns around them by building a truly rich and open ecosystem of server and client side technologies.

Some pending browser breakthroughs

Loads of stuff going on recently on the <video> tag land, Google has made a bold move to push openness into the web, though they added Adobe into the mix, which inspires mixed feelings on me. All in all good news, competition is back on track after 10 years of Microsoft stagnancy on this field. I wish there was more corporations whose business model wasn't based on restricting competition through twisted uses of Copyright, Intellectual Property and business practices.

However, I would like to enumerate a few things that should be exposed or improved in the major browsers soon if they want to accelerate the web application further.

Webcam Access

I think this is actually the last thing we need to get rid of flash at this point and it's relatively straightforward to implement. I don't even think that a standard should be proposed for this to implement it. There's a lot of engine specific stuff on CSS and is not a big pain, most people are relying on jQuery and other cross browser libraries. The only challenge here is the security model, but Flash solved that long ago.

RDF Storage

When I saw a proposal to use SQL as one of the storage models for the browser something died inside me. I understand where the proposal is coming from and why it seems to make sense. Most web developers are familiar with SQL.

I think SQL is sort of alright on the server side as you can always expose data any way you want, but client side, you'll end up with a bunch of data silos for every site and you'll lose a lot of data in the way. A RDF/SPARQL model is the natural storage model for the web, though in my opinion some specific purpose APIs should be added for contacts, location and multimedia storage.

Obviously I'm a bit biased here since Codethink is been the major pusher for an RDF datastore on GNOME through our involvement in the Tracker project.

Smart Card Certification

Smart Cards are becoming widely used, in some countries like Spain the official ID card is an actual Smart Card with a digital certificate that can be used to sign documents (no biometric crap or anything like the crappy Labour proposal in the UK).
However this can be sort of configured already in some browsers, the setup is rather hard. Some projects like Tractis.com could really use some improvements in the ease of use.

Contact Support

I believe the Mozilla guys are already working on this area, what I would actually love to see is a tag where you can specify a contact detail like this:

<contact href="phone://004400000"/>

Same for skype, Facebook, XMPP, etc. plus a javascript API to access the phone features such as phone call, add an entry to the addressbook, send sms… Maybe RDFa instead of a new tag would do it as well. The point is that there should be a common way to define a contact on the document so that the client can do smarter things with it.

These are the main things I would add, although I would like to see a more widespread support for location support and touch based events as wells, I think the three items listed about could actually bring a significant amount of useful and innovative apps both online and offline.


Seems that my recent efforts to promote the GNOME platform are paying off. As I write this, 755 people have seen the Vala kick start tutorial and I have received loads of positive comments.

As a response to that success there are three things I've been doing, first, setting up twitter and identi.ca microblogging accounts for GTK+, follow them in gtktoolkit@identica and gtktoolkit@twitter (credits goes to Javier Jardon for the idea and comaintaining the accounts).


Second, setting up a Vimeo channel. There are many reasons I'm using Vimeo, first you can have channels for free, second, it provides the best quality video wise which is quite important when you showcase code writing, third, it provides HTML5 (though not through Theora) and most important, you can download the original file if you're logged in (which I'll make sure in the future will be .OGG). If you have a GNOME related video in Vimeo just poke me.

I'm already putting some pieces together for the next video, as a teaser, it'll use one of these new shiny dynamic languages recently added to the GNOME stack.

PS: I'm very excited about the ongoing work and activity happening in the GNOME UX Hackfest at the Canonical offices in London.

Happy hacking!

Contact Synchronization: Ovi.com vs. Google

I'm the kind of person that loses his items quite easily (wallet, keys…), those who are like me know pretty well that having a backup of the phone contacts is something essential. A year ago I lost my phone and by the time I was just using the Addressbook app in Mac OS X as it was the only software piece I could get to sync with my phone by Bluetooth, however, that event ended up with me writing a python script to translate a CSV file into something the Nokia PC Suite could understand to shove it into my new phone.

Since then I've been looking for a more universal way, and now that data access through 3G is moderately affordable, I've been having a look at online services for doing this instead of USB/Bluetooth methods. My main requirements were that I could backup and sync within several phones, a web UI to manage the contacts and a public API that allowed 3rd party integration.

Ovi Contacts

Ovi.com is Nokia's online integrated service, they offer maps, music store, calendar, pictures… and of course contacts sync. Since my two phones are Nokia I reckon I would give this a try. Setting it up was a piece of cake, you register your phone model+number and they send you an SMS with the configuration settings ready to be loaded in your phone, after that, you just have to the synchronization option in the connectivity menu and you're phone would upload all your contacts to Ovi.

The Good

  • The Web interface is quite neat (though contact navigation could use some AJAX love)
  • The setup was really smooth and the steps to follow are pretty straightforward plus the web interface to manage your contacts is not too bad.
  • Standard compliant (Ovi accounts are XMPP, sync is done through SyncML)

The Bad

  • The lack of publicly available SDK or documented API
  • SyncML is the only public way to access it from a 3rd party app
  • SyncML endpoint settings are not documented (found them in a forum entry)

The Ugly

  • Only supports Nokia phones which is a big show stopper

Google Sync

Google Contacts is a neat hidden feature of your Google account in addition to Google Sync allows the synchronization and management of your personal addressbook. They have setup instructions for a wide range of phones models. However with non android phones you have to set the syncml endpoint manually which is kind of a showstopper to non tech savvy people.

The Good

  • Setup documented for a wide variety of phone models from many vendors.
  • Google Data API with many SDKs for different platforms
  • Standard compliant (Google accounts are XMPP, sync is done through SyncML)
  • Matches Google Talk/XMPP custom aliases with phone contacts (someone's avatar showed up in my phone out of the blue. neat!)

The Bad

  • The contact database can easily be mixed with your automatically added gmail contacts which can be quite messy over time.
  • No SMS setup, SyncML settings have to be inserted manually.

The Ugly

  • Web interface sucks, managing your contacts is a pain in the arse.
  • Google knows enough about us already? 🙂


Eventhough Ovi was keeping me happier in general terms the first time I tried it, the lack of documentation and support for developers and non Nokia phones is kind of a show stopper in general terms. I'm not suggesting they should support every service on phone in the world, but supporting some of the basic services the best selling ones (iPhone, Android, Blackberries…) would be a huge win to gain mindshare around the service.

As for Google Contacts/Sync, the fact that it's already supported by many apps and phones around is a big point for it, the web interface and it trying to be too smart at matching your google talk/gmail contacts with your phone contacts is a bit annoying some times but still nice.

I'm gonna use Google Sync for now as I don't want to be stuck with Nokia in case a switch phones in the future.