Archive for the ‘gnome’ Category

litl webbook: some technical comments

Wednesday, November 4th, 2009

litl

So, you’ve probably seen the news: litl webbook released! It’s the result of heavy work of an awesome team! Our website has a lot of information about the product from a user perspective, so I thought it would be nice to bring an overview of the more technical aspects of the litl OS that I find specially interesting. Scott has written some technical notes about our OS too.

Javascript

Almost all UI code is written in javascript using our GObject introspection-based binding called gjs (using SpiderMonkey engine). It was a quite interesting learning experience to write a large amount of UI code in javascript. By the time we started, I think no one in the team had any real experience with javascript. So, it took some time until we all agreed on the javascript programming idioms (the flexibility of the language may “cause” a lot of inconsistencies…) and on how to better/correctly take advantage of its features. Most of what we agreed in terms of coding style is in the gjs style guide. Doing stuff in javascript (i.e. not doing the whole UI in C or any other insanity like this) allowed us to prototype, refactor, rewrite things much faster. And that was crucial for us because the ideas around the UI design changed a lot during the first months of development and we ended up rewriting large chunks of code several times on the way. Doing relatively large scale stuff in javascript definitely requires very clear and strong guidelines in order to keep the code base sane – maybe a bit more than usual.

GNOME & FLOSS stuff

The OS is heavily based on well-known open source projects. Some facts: it’s based on Ubuntu (with great support by Canonical) and the UI is all written with GNOME platform and co. As I said, almost all code is written in javascript using gjs. Most of the UI is Clutter-based. We have our own specialized window and compositing manager that was implemented with our use cases in mind. We’re definitely one of the projects with the largest Clutter-dependent code base. We use GTK+ in just a few places where we needed more complex widgets (i.e. text entry). The web browser is Gecko-based and it’s pretty much implemented as a XUL app running in a separate process than the OS chrome. We use Evince and Totem (as browser plugins), GStreamer, Network Manager, and others. One interesting fact about our development process is that, in the ~2 years of heavy hacking, we had to adapt to major changes in the upstream projects we base our OS on. So, since we started, we had to port our UI to Clutter 0.6, then 0.8, and finally 1.0; had to port gjs to use the then-new GObject introspection scanner; migrated from Network Manager 0.6 to 0.7; and maybe some other major changes that I can’t remember now. We contributed to those projects as much as possible during the process.

No storage, just caching

You probably noticed that the device has “only” 2GB of storage. That won’t sound strange if you see this from a “webbook perspective”. One of the ideas behind the product concept is that the device serves as a much improved window to the web. In other words, the device provides a simple and beautiful way to access web content – among other things. So, we are pretty much only using storage for local caching. We don’t really store any real permanent data on the device. And that brings some interesting challenges on how we implemented the OS. So we had to implement some smart ways to cache as much content as possible and expire the right bits at the right time so that the general experience is nice and smooth. Simple example: the OS provides a way to access all your Flickr photos and videos (which can be a lot of photos and videos btw) but we never permanently store anything on disk. We cache things like rss feeds, profile pictures of your litl contacts, a lot of your Flickr photos and videos, website favicons, installed channels, etc. Each type of content may use a different way of expiring items and all that needs to fit in the relatively small storage space we have. You can guess how fun it was to hack on this. Hacking on syncing was even more fun though :-)

Syncing

Another interesting aspect of the device is that each device is connected to a litl account on our servers and all your stuff (browser cards, channels, settings, contacts, etc) is always synced in our servers. That means if you lose your device and get new one, you would just need to connect your device to same account and all your stuff would be nicely restored. Additionally, multiple devices can be associated to same account. In that case, they will automatically share channels and other things. If you add channel card in one, it will automatically appear on the other. We spent quite some time working on our syncing infrastructure (client and server), dealing some relatively complex problems – especially when dealing with making UI immediately react to sync-related changes in the local and remote datastores. The server side syncing stuff (and other server-side features) is implemented with Google App Engine, some bits in Amazon S3 and Django.

Seamless system updates

The OS comes with a smart update system. No package management involved. No user action needed to get system updates. In practice, we download and install a new OS image and fetch your data again from litl servers while the system is idle. The update system falls back to current image in case something goes wrong with new OS images. The update system allows us to keep updating, adding features, fixing bugs, and then push those updates to our users in a burden-free way.

We had a lot of fun hacking on the litl webbook. It’s always great to work in a team full of very smart people. Definitely learnt a lot in the process. We still have a lot of work to do of course but I already feel very proud of what we’ve accomplished so far. Exciting times!

Update: Saying that the UI is 99,99% Clutter-based is not very accurate. It’s a bit less than that :-)

Help us to promote GNOME 2.28

Thursday, September 24th, 2009

Don’t know how? Here are some ideas:

http://live.gnome.org/PromoteTwoPointTwentyEight

I just added this banner in my blog.

GNOME 2.28

Made to Share! GNOME 2.28 Released!

Thursday, September 24th, 2009

GNOME 2.28

GNOME Group Photo

Sunday, September 13th, 2009

Finally had time to upload my GCDS photos to Flickr. The GNOME group photos are included in this album. Better late than never! :-P

GNOME Integration with Online Services

Tuesday, August 4th, 2009

While deciding about libgdata inclusion in GNOME 2.28, we (Release Team) somehow considered it didn’t make much sense to have libgdata in the desktop suite. So, one thing that came to my mind was that we need some space to aggregate development efforts aiming to integrate online social services in GNOME. Also, it seems that we need to highlight those modules in a more clear way as it seems that just a few people are aware of those GNOME-based technologies. In order to get “something” started before I forget it, I created this wiki page:

http://live.gnome.org/OnlineIntegration

I tried to include all the cool modules I know about that aim to integrate with online social services in some way: from instant messaging to maps, from Google apps to CouchDB. I tried to draft some proposed guidelines for the modules so that we can (maybe) define cross-module goals in the short-term. Providing GObject Introspection support could be one. Proving new plugins to Mojito could be another. Or maybe covering more online services. My impression is that Mojito brings a nice way to integrate data from different social services behind a simple API. Maybe a mid-term goal could be to thing about ways to integration online services in GNOME Shell?

Anyway, comments and suggestions are welcome!

GNOME Annual Report 2008 released!

Thursday, July 9th, 2009

GNOME Annual Report 2008

Better late than never! The GNOME Annual Report 2008 is out! You can download it here (18680 KB, PDF). The report aims to bring a summary of GNOME in 2008.

Many thanks to:

Enjoy!

Mojitito: Mojito in Javascript

Wednesday, July 8th, 2009

mojitito

So, I wanted to play a bit with Moblin’s Mojito just to know how cool and easy it is to use it on GNOME. So, tonight I ended up writing “Mojitito”. It comprises a Javascript wrapper that exposes Mojito’s DBus API and can be easily used in any Javascript-based app (GNOME Shell for example) and a crappy Clutter-based UI which just lists the items in an ultra-simple way (just wanted to write something to use the Mojito wrapper). Anyway, you can get the code here (you need gjs and mojito. Just run the “mojitito” script) if you want to play with it. I only configured a test Twitter account but a real UI implementation should be able to present items from Last.fm, Flickr, MySpace, etc in a fancy way. Anyway, it’s pretty simple to use Mojito and I’m really looking forward to seeing this kind of stuff being nicely integrated in our new shell!

GCDS #2

Monday, July 6th, 2009
  • I’m eating too much. I’ll definitely some weight here. It’s funny that I haven’t heard of anyone getting sick because of any food here. There’s a lot “risky” food here… The “Sueco Especial” for example looked a bit scary at first :-P
  • Don’t believe in what Diego and Vincent are saying! I understand (almost) everything people say in spanish here. It’s amazing! Speaking spanish is another story though…
  • Could find any open restaurant at 1h AM last night! It was Sunday but still… Well, we ended up finding a open bar where we had some simple but good sandwiches.
  • I really liked the GNOME 3.0 talk today. It was useful to show how many cool things are happening for GNOME 3.0.
  • Went to a quick/informal GTK+ meeting today. I hope some the stuff discussed there turn into actual action soon.
  • Daniel is right, I’m 23 years old! :-P
  • For some weird reason, I ended up being the “official” photographer for the GCDS group photo! Terrible idea as I’m a lousy photographer! :-P (I’ll publish it soon bt the way)
  • GSettings looks pretty interesting. Client side windows in GTK+ seems very promissing. Love Moblin’s Mojito. GNOME Shell is moving really fast.
  • GNOME 1,2,3 talk was awesome!
  • More later!

GCDS #1

Friday, July 3rd, 2009
  • Arrived last night at Las Palmas, Gran Canaria. This city looks a lot like Salvador, my home city!
  • Dinner with Stormy, Jonathan, Zana, and Vincent at a nice Spanish (duh!) restaurant. I ate so much that I’m still feeling stuffed today!
  • Foundation Board meeting during the whole day today.

GNOME Website Plan for 2.28

Friday, May 29th, 2009

GNOME.org Frontpage

We’re working hard to have a beta version of the GNOME website by September 21, GNOME 2.28 release. I’m trying to keep everyone very focused in a clear and concrete plan:

http://live.gnome.org/GnomeWeb/TwoPointTwentyseven

The May 27 milestone was a total success! So, what do we have now? The Content team (working with the Marketing team) has the initial plan for the content structure. The Design team has published the initial design proposal for the website. The CMS team has set an initial plan for the basic content, front page, translation and deployment. The Plone work is all being documented in our wiki.

The next milestone (June 15) is about consolidating the content structure, delivering the final design in an implementable form (HTML/CSS), setting up a test website in GNOME servers and having front page and basic content types implemented in our Plone instance. Paul is now working on mapping the content that was previously produced to make sure we reuse it as much as possible. Andreas and Vinicius want feedback on the proposed design and will be working on implementing the design in HTML/CSS during this milestone so that it can be easily applied in our Plone website.

New contributors are more than welcome! If you think you can help with content and design, please subscribe to marketing list. If you want to contribute to the Plone implementation, join the web mailing list. In all cases, please introduce yourself after you’re subscribed.