In the Mood

well, I failed at blagging each day of the User Experience hackfest, but mostly because of the sheer amount of discussions, designs and work done.

during the first common session on monday we all decided to split off into four groups:

  • file management
  • window and application management
  • widgets/gadgets/applets
  • effects and animations

I decided to work on effects and animations, along with Eve, Neil, Matthew and Andreas1. the wiki page of our group lists most of the stuff that came up in the group discussions and brain storming2. when not in the effects and animations group I was hanging around with the window and application management guys. since Tomas, Robert and Matthew have been working on a Clutter-based compositor for Metacity, I decided to give it a spin and work on some of the “animation tenets” that came up during the hackfest — like showing the direction of the workspace switching and provide a visual cue to the user that the windows are not going away forever, and are just being moved in another area of the screen. I know that Compiz is probably going to have these kind of effects some ten levels deep in the configuration manager, but the configuration UI always makes me want to carve my eyes out with a melon spoon while being bludgeoned to death, and the defaults are usually so bad that I develop seasickness after 15 minutes of continuous use — hence, the usage of the Clutter-powered Metacity.

the other groups did an awesome job as well: a lot of the ideas floating around will require hard work and time in order to be implemented, but they all contain a refreshing view of the desktop and challenge some of the fundamental tenets of the user interaction, based on the feedback from users and designers — and especially without resorting to something completely new or alien that will require years to get right for developers and to adjust the workflow for users, or just announcing new frameworks with the usual jingoistic tones common to open and closed software projects alike.

  1. who’s totally getting married — just as vuntz is expecting a baby []
  2. or idea showering []

Stuck with me

guadec 2008: I’m late, but I wanted to thank everyone in the GUADEC team for making this edition of the conference really rocking. thanks to everyone.

clutter: well, after the 0.8.0 release during GUADEC things have slowed down — but just a little bit; we’re fixing bugs in trunk and preparing for a 0.8.2 release of Clutter core. we also released the various integration libraries, and I’m trying to find more time to fix up the bindings. at the moment, the only bindings that have been officially released are the Perl bindings, the C++ bindings (thanks to Murray Cumming), the C# bindings (thanks to Thomas Machelen) and the Ruby bindings (thanks to Neil Roberts). I plan to release the Vala bindings really soon now — just some finishing touches to make the API nicer to use.

pyclutter: I wrote a couple of weeks ago that the Python bindings for Clutter have been, let’s say, problematic. taking a week or so away from them seems to have worked well enough, though, and now trunk is in a much better shape. unfortunately that have been some reports of segfaults and weird memory allocation issues — so any help in terms of testing is much, much appreciated. I also finally got around and generated the API reference for pyclutter using a slightly modified script coming from pygobject — but the content is missing sections like the object properties and signals. it just needs editing and some kind Python developer to start contributing documentation and fixes. again: any help is much appreciated.

travel: next week I’m headed to Sunnyvale for work; I’ll be there from the 17th to the 22nd. after I get back I’ll finally get a couple of weeks off, which I’ll spend with my wife travelling between New Haven and New York.

gnome-utils: finally found some time to do bug triaging and applying some old patches. nothing stellar: for what I have in mind I’d need a lot more time, or a lot more contributions (and less drive-by patches). for instance:

  • gnome-screenshot needs a maintainer, badly. preferably somebody with a dual screen set-up, that can test the behaviour on multiple screens;
  • gnome-system-log either needs a rewrite and a maintainer or needs to be dropped from gnome-utils and moved into its own module and its presence in the desktop suite re-evaluated; as it is, it’s mostly a liability and a relic of the past; if somebody comes up with a maintained replacement, we can talk about integrating that;
  • gfloppy needs to go. seriously: it’s useless. I had hopes for gnome-format, but now David Zeuthen is planning for a complete disk manager using the DeviceKit-disks API and PolicyKit so we can either wait for that, or write something really simple using those two APIs.

as you can see, gnome-utils is not at all dead — it just lacks manpower sticking around enough to get a SVN account and an entry in the MAINTAINERS file.

Odalisque/2

so, it turns out that the plans of releasing Clutter 0.8 right after GUADEC were a little bit on the conservative side, since

thanks to all the contributors for bugs opened, patches written, tests performed — you all rock my world.

now you’ll just have to wait a tiiiiny little bit for the integration libraries1, for the bindings2 and for Tidy3.

  1. they all work with the new API, they just need to be distchecked []
  2. this will take some more time but they’ll be there []
  3. will demo something tomorrow at my lightning talk around 14:30 if you’re at GUADEC []

Odalisque

this GUADEC has been quite a ride, and we’re just halfway through.

gtk+: the gtk+ team meeting on tuesday went really well — and part of the discussion was incorporated in Kris always excellent State of the union talk. the team went over and over this issue since last GUADEC and during the hackfest, and even though something at some point will probably go wrong the plan is good and allows leeway to reduce the overall effort for moving the entire platform. I think that given the circumstances this is the best plan that can be realistically implemented.

gnome: everyone will be discussing the release team plan as well. I can only say: let’s do it!

clutter: the Clutter Guts talk went really smoothly; we tried to fill Matthew shoes — and had to be in three to do it — but I think people came out of the talk with more knowledge about the deep magic and the pixie fairies dust that power Clutter and make it as awesome as it is. as I said during the talk, Clutter 0.8 is really in the final stages now, and it’s going to be released as soon as we finish testing some of the backends. people will just have to wait a little bit, but by the time everyone gets back home from GUADEC they will be able to get the tarball from the server.

Finally Woken

the first, alpha quality release of Tweet is available here.

Tweet 0.2.0

I’d like to stress out that this is an alpha quality release; I’ve been using it for a while, now, and nothing serious like the destruction of my hard drive happened but I cannot guarantee that it won’t happen to you. you’ve been warned.

from the new-and-shiny department:

  • use NetworkManager to detect a connection change
  • scroll wheel support
  • nice gradients on the speech bubble
  • more readable datetime stamps on each status
  • update the status view with just the new statuses instead of reloading everything

from the stuff-still-missing department:

  • an icon — can I have an icon? please, pretty please with sugar on top?
  • follow/unfollow users
  • direct messages
  • show a particular user
  • show followers and following
  • add a control to open a browser on the current status
  • show error messages instead of silently failing

and finally, from the would-be-nice department:

  • use Gypsy to update the location
  • exporting the status archive

if you want to give a hand, just clone the repository:

  git clone git://github.com/ebassi/tweet.git

and hack away! :-)

Pogo Stick

apparently, some people — and I’m looking at you, Pippin — said that the Tweet repository is hard to find: you actually have to search in my blog.

well, not anymore: Tweet on GNOME Live

complete with a screenshot of the new UI, as suggested by Matthew Allum:

Tweet - Pogo style

Road to Somewhere

well, after eating my dog food for a while, it seems that Tweet is starting to get more useful.

first of all, now Tweet has an authentication dialog which allows you to enter your username and password the first time you run it:

Authentication/1

and even verify them beforehand:

Authentication/2
Authentication/3

then you get the list of statuses from the people you’re following:

Loading

you can scroll around using your mouse, and tap a row to get more informations about the status and the user:

Navigation

click on the screenshot…

as you can see, the UI is geared towards the touchscreen usage, but I plan to add key navigation soon.

still, there’s a lot to add: support for viewing your own statuses, direct messages, the list of people you’re following and the people following you — even the error messages are just printed to the console, even though I’m working on that.

the bits I’m most proud of:

  • the GTK+ integration: I’m retrieving the style information straight from the GtkWindow embedding the Clutter stage, and even if I had to fight with the utter mess that is the themeing code, I was able to gather enough to make Clutter play nice with a GTK+ environment1;
  • the small animation API I implemented on top of the Clutter animation framework, requiring a single function (plus two completely generic classes) to tween an actor between two states; for instance:
    tweet_actor_animate (info, TWEET_LINEAR, 250,
                         "y", tweet_interval_new (G_TYPE_INT, y + padding, 100 + padding),
                         "height", tweet_interval_new (G_TYPE_INT, 10, (height - (100 * 2))),
                         "opacity", tweet_interval_new (G_TYPE_UCHAR, 0, 196),
                         NULL);
    

    this is the code that animates the status information actor that appears overlayed on top of the status view2; I’d like to thank pippin for the idea about the API behaviour;

  • Twitter-GLib, the generic API for accessing Twitter throught its RESTful API, which thanks to LibSoup has been a breeze to write even in a clunky and not-at-all-web-two-point-oh-buzzword-compliant language like C;
  • the fact that Tweet is written in a very reusable manner (apart from the base scrollable list which comes from Tidy), with every piece neatly abstracted into its own class.
  • finally, the fact that after almost a year of basically working on libraries only I can still sit down and get an application from scratch to a usable state in a couple of weeks in my spare time — even if I have to write a library to get it done. :-)

by the way: is any artist out there interested in making an icon for Tweet? I really would like to avoid using Twitter’s own icon.

  1. in the screencast the scrollbar handle color, for instance, comes from the theme as well as the font []
  2. this kind of utility API is easy to achieve given the power and flexibility of the underlying framework — but it obviously limits what you can and cannot do, and if you ty to coerce it into being more generic you start losing bits and pieces and a simple API starts getting in your way instead of helping you; that’s why Clutter‘s animation framework might seem complicated at first: it’s trying very hard to allow you to build whatever animation you have in mind instead of limiting you []

Some Things Come From Nothing

json-glib: 0.6 is out! please: download it, test it, use it. as far as I know, it has been packaged for Debian unstable, and has entered the NEW queue (kudos to Rob Bradford, esquire and fine gentleman).

debian: with the release of Hardy I decided to switch back to Debian after three years of Ubuntu. even though there are still some rough edges in Lenny, the support for laptops has definitely improved a lot and so I got back to my old love. starting from Gutsy, I found myself increasingly at odds with Ubuntu decisions and even though I upgraded my wife’s laptop to Hardy, I’m really glad I got back to Debian.

clutter/1: apparently, I’ll give a lightning talk about our reference toolkit for Clutter at this year’s GUADEC, in Istanbul. Øyvind proposed it for me because, regardless of being on the paper committee, I actually forgot the deadline for the CFPwhoops, maybe I shouldn’t have said that. :-) with the Tidy lightning talk and the Clutter guts talk given by Matthew, we decided for a high-level/low-level approach, instead of going for the usual this is teh Clutter, look at teh bling kind of talk. if you want to understand Clutter, Matthew’s talk is definitely where you want to be; as we all know:

Clutter = Clean and nice API + Performance + Portability + Integration = ♥

from my Clutter talk at FOSDEM

so, if you want to know how Clutter creates love, get to Istanbul this July. :-)

tweet: I started eating my own dogfood. Tweet is by no means complete or even guaranteed not to turn you into a goat and eat your breakfast — but now it works well enough for reading your own timeline and sending new statuses; and it doesn’t require trunk of anything any more, thanks to a Tidy transplant. I’m using Tweet as a way to see what kind of API is needed to properly integrate a Clutter canvas into a GTK+ application: colors, fonts, etc. if you want to try it out, contribute or just mock my insanity:

  git clone git://github.com/ebassi/tweet.git

clutter/2: we’re really close to a 0.7 release, which will mark the beginning of the slushy phase of the API; as far as documentation goes, we’re in pretty good shape already, at 93% for the Clutter namespace, and another 80% for the Cogl namespace. bindings will need to be updated — but the amount of new API is not that big, so it’s not going to be a long wait. I’m making a note here: huge success.

Sincerest Forms of Flattery

tidy: they say that imitation is the sincerest form of flattery:

TidyFingerToggle

the actual amount of code is quite small, and it’s already available in Tidy.

challenges: Luca dared me into making a Clutter-based coverflow-like plugin for Rhythmbox, but it was Iain that picked the challenge up and wrote some basic code for it. I, on the other hand, don’t like coverflow for browsing my music collection, so I finally decided to write something for the Eye of GNOME — a Ken Burns effect slide show. it’s not at all finished, and if nobody picks it up, I’ll try and do my best to have it ready for GNOME 2.24, if EOG maintainers want it, of course. it’s not the best display of Clutter features — except the animation framework — but if you have hardware acceleration it will make slideshows look a lot nicer.

json-glib: this weekend I released the first developers snapshot of JSON-GLib 0.6; the API is stable, the test suite is rocking and this release finally fixes the last bit needed for full RFC 4627 compliance (Unicode escaping). I’m probably going to release 0.6.0 in a couple of weeks.

Good Intentions/2

gtk+: I’ve been working again on the RecentManager and in trunk you’ll see some new stuff, namely:

  • use GIO to determine the MIME type of a URI, on every platform supported
  • use the file monitoring API to avoid polling the storage file
  • add a GtkSettings property for clamping the recently used resources list to a 30 days limit

more stuff I’d like to add is:

  • small parser changes to GBookmarkFile, to reflect changes in the spec
  • bulk addition, for applications storing multiple items when quitting
  • new API needed to follow the usability review in bug 349541
  • moving the RecentItem icon code to GIO, and add API to extract the thumbnail

twitter: I’ve been using Twitter a lot in the past two weeks; it’s nice, it makes it easier to copy and paste a quote or a thought, and the 160 characters limit is an interesting challenge. As it’s been ages since I last wrote an application1, I decided to start writing a Twitter reader/writer — using GTK+, Clutter and Tidy; without much thinking, I opened gvim and started writing code in C2 — so, the obvious thing that happened was that I ended up writing a library yet again in order to use Twitter’s web API. luckily for me, libsoup has now a really nice API to work with; all you need is GET and POST to their RESTful API, retrieve the result, parse it through JSON-GLib, hide everything inside a new GObject and you have a wrapper around a web service. the application, you say? oh, I was sure I forgot something. well, it’s coming along — it just needs some work still.

  1. lately all I’ve been doing was writing libraries []
  2. hey, that’s what I do for a living, it’s hard to switch off; plus, I could reuse some of the platform libraries []