Advogato blog for pbor

Advogato blog for pbor

First of all an apology to all the people who commented on the previous post: as you can see I do not blog often and when I logged into wordpress today I found a lot of comments waiting in the moderation queue for which I did not receive the notification mail…
This week GNOME 3.14 will get released, and once again I am astonished by the amount of work that went into this version: little by little every rough edge is getting polished and the increasingly good feedback we receive from users is a welcome change :-)
GNOME 3 made some bold design choices, some were huge leap forwards (and other more blasoned environments are playing catch-up) other were more controversial, but one of the fundamental differences with the past is that we try things and we are willing to evaluate their success and iterate the design even in radical ways, instead of having every little detail set in stone once it is merged. Even more exciting are the glimpses of the future: wayland support getting ready, gesture support merged in GTK, a better developer story materializing in the form of a proper SDK and new development tools like the GTK inspector, and much more.
For what it concerns myself, I have to admit that this time I did not manage to do that much code-wise, I guess my biggest achievement for this cycle, was to bring the ephemeral Lapo to GUADEC… and by bring I mean “physically drive to Strasbourg” :-)
Apart from that, I still managed to sneak in a couple of small “Sunday Afternoon” hacks, for instance Clocks now has a nifty gnome-shell search provider.
The rest of my time was mostly spent trying to keep up with reviewing patches and giving feedback to all the great contributors to gedit: I am lucky to be part of such a great project with long time contributors sticking around and new talented ones getting involved all the time.
Speaking of gedit, after the major changes of 3.12, 3.14 has been a cycle focused on stabilization and polishing. Overall the revised user interface got mostly positve feedback.. I for one, as a heavy gedit user, adapted to the new UI without problems. 3.14 will have a few incremental changes, that among other things try to address some of the issues pointed out by Jim Hall’s usability study presented at GUADEC: “Open” will be a single button removing the dichotomy between the open dialog and recent files and providing quick search among recent files. “Save” now uses a text label since it turns out a lot of people did not grok the icon (and no, I am not going back to the floppy image!) and the view menu has been reorganized and now uses a popover. With regard to the “Open” button, we know things are not perfect yet, search among recent is great, but when the “cache misses”, going through a double step is painful… we already have a few ideas on how to improve that next cycle, but for now I can vividly recommend to try the “quickopen” plugin, one of the hidden gems of gedit, which already provides some of the things we would like to integrate in the next iteration.
Another aspect we (and by “we” I mean Jesse and Nacho) focused on, is to revive our cross-platform effort: not only both the Windows and OSX port have been updated, but they were also substantially improved. The even more important aspect is that a lot of this work was done at the GTK level and all application developers targeting these platforms will benefit from it. In this regard a large thank you goes to Руслан Ижбулатов (LRN on IRC) who has been tirelessly fixing issues on Windows.
These ports try to properly blend into their respective environment, and this was done with relatively little effort, a proof that some of the design decisions we took in the architectural changes we made last cycle were correct. We would very much welcome patches to do the same kind of integration work for Unity and other environments, though we’ll have to strike a good balance between integration with the environment and keeping a single design identity, providing a con[...]

As many other already expressed on planet GNOME, I find Philip‘s post pretty disconcerting, especially since he mentions some of the projects I work on and that over the last years have seen many successful and rewarding contributions from OPW interns and GSOC students.

Our developer tools surely need more work to make them compelling, but that is achieved by forming a vision of how those should work, designing solutions to achieve that vision and contributing code to implement the design. Maybe Philip could blog about which amazing new patches he created for the projects he mentions or volunteer for mentoring some talented new contributor to work on those projects…

With that said, I think we should take the time consider how to make programs like OPW and GSOC even more successful and effective than what we have today. Here are a few ideas… I am not sure that all of them are good, as a matter of fact I can think of a few downsides to some of them, but I think they are at least worth discussing.

Group projects: GSOC has a policy of 1 student : 1 project, that makes a lot of sense for administrative reasons, but I think it is pretty detrimental to the goal of involving new contributors. Working in a small group of 2 or 3 people on a project allows interns to learn to collaborate effectively, tackle more challenging problems and lighten the workload of mentors since I think many of the day to day problems can be overcome discussing within the team

More flexible schedule and size: both GSOC and OPW have a well established cadence that also resonates with our release schedule. This has some obvious positve sides, but makes me wonder if there are negaives too… All proposed tasks must be of a reasonable size for the given period and we often have a hard time coming up with good proposals. I also sometime wonder if we sometime delaying tackling some specific problem or idea that would benefit our users today because it may be a good internship project in the future

Find a way to have more maintenance/implementation tasks: most of the tasks are “features”, which sometimes leads to a strange inversion where we force inexperienced developers to struggle with architecture and API design while the time of the experienced developers goes into maintenance work and bugfixing. It would be great to find a way to let new contributors ramp up their experience and get familiar with the codebase and platform and at the same time have experienced developers work on advanced features without incurring in same the pitfalls over and over

Alternative compensation: when I started contributing to gnome on my free time the main driving factors were the possibility to learn how real software worked, the possibility of making a difference creating something that other people use daily and the ability of scratching my own itches in the software I used. The original idea behind monetary compensation in GSOC was to be able to have some brilliant students work full time of free software during the summer instead of going flipping burgers and I do not think anyone can argue with the original idea, but we need to make sure we select contributors that are committed to working on gnome. How do we avoid frustrating contributors who do not get any money for their efforts? What if the reward was an internship in one of the sponsoring companies? Or some credits for the academic career? (Obviously this would require to have those organization on board with the idea)

I wanted to make one more post before the imminent release of 3.12 showing how gedit changed in this cycle, but the recent series of posts by Matthias feature plenty of gedit images and left me without fresh screenshot material :-)

Beside the changes in the main user interface, there are other small gems that may be not as shiny, but are very useful to regular gedit users.

With the adoption the new user interface we changed the “new document” keyboard shortcut to the ubiquitous ctrl+T, and while at it we borrowed another neat trick from web browsers: with ctrl+shift+T you can now reopen the tabs you closed recently.

Another small feature I find myself using more and more is the new keyboard shortcut to change the case of text: with ctrl+L you can change the selection to lower case and with shift+ctrl+L change it to uppercase. Ctrl+~ will toggle the case of the selected text. These actions are also available from the right click menu.

There is however another large set of changes that is very dear to me even if it may be not as evident to final users: also in this cycle we managed to keep technical debt under control:

we make proper use of new GTK+ widgets and features including GtkPopover, GtkStack, GtkCenterBox, GtkHeaderBar and CSD decorations

we reworked command line handling taking full advantage of the features supported by GApplication, including being able to pipe to stdin even when there is an instance already running

we got rid of GtkUIManager and switched all the menus and shortcuts to GAction with a clean implementation that leaves us good amount of freedom to adapt and change our UI to different systems

we continued our effort to move as much widgetry as possible to .ui files and make use of Gtk templates

we removed a lot of custom (and slow) code that implemented the full-screen toolbar animation and replaced it with smart use of GtkOverlay and GtkRevealer

we reimplemented the side pane using GtkListBox, removing one of the biggest uses of the scary GtkTreeView API in our codebase and in the process of doing so we restored the ability to drag and drop

more importantly we did all the above shaving about 3000 lines from the total amount of C code, while keeping all the features and adding a few new ones

This week GNOME released its 3.11.90 version and entered the UI freeze period.

Some time ago nacho unveiled the major changes in the gedit user interface that we have been designing and implementing, but now that the dust is settling I think it is a good time to take another look at the many details we have been polishing since those early screenshots were posted.

We now use the new GtkPopover widget to select the currrent side panel and to tweak the current view settings

The new user interface aims to be elegant and minimalistic, but this does not mean that is not thought for advanced users, quite the opposite: I think heavy keyboard users will enjoy the no-frills UI that lets you focus on the content, whether it is code, your LaTeX thesis or that tricky apache configuration.

All the usual advanced tools are still there (for instance the Snippets and External Tools dialogs can be reached from the App Menu) and by popular demand we incuded in GtkSourceView the Solarized and Solarized-dark color schemes. Not to mention the new code-assistance framework, but that’s something for another post :-)

Even if not as visible, the same amount of polish and attention to detail happened under the hood.

The use of GMenu / GAction was iterated a few times with the invaluable help of Ryan who has always been ready to answer our many questions, and I am now confident that is properly set to accomodate the need of plugins and the integration on different platforms[1]

Ryan also helped us improve the command line handling, taking advantage of (and actually driving) the new features of GApplication.

Sebastien Lafargue rewrote the document list side pane using GtkListBox and greatly improving the code and reimplemented the the fullscreen mode replacing a ton of custom animation code with GtkRevealer.

[1] help and patches are very much welcome, and I do not mean it in the usual ”patches welcome” tone :-)

It looks my posts are as punctual and frequent as the GNOME releases… one every 6 months.

With GNOME set to be out in October (well, end of September, but bear with me) and including a new Maps application, we just needed a stopwatch…

GUADEC was once again great and Brno turned out to be a beautiful (and hot!) location.

Clocks is a small pet project, with a tiny and clean codebase which makes it fun to work on, so during the conference I decided to rework the stopwatch and timer tools, which in 3.8 were a bit dull. After a few iterations with Allan, here is what will be in 3.10

In the video you can also see that at start up a world clock for my current location appears automatically: this is thanks to the geolocation support implemented by Evgeny during his Summer of Code and which I still hope to sneak in for 3.10.

gnome 3.8 will be out later today, on time as usual, it’s a great incremental release with improvements all over the place, but I’ll let the release notes speak.
For my own part, I put my fingers here and there either making patches or trying to help (annoy?) people doing the real hard work with reviews and suggestions.
Clocks has matured from a prototype to a real app and in this cycle. It turns out that while from the code point of view a clocks app is really a small application (some even think trivial and a waste of resources better spent improving other aspect of gnome) it is actually quite challanging to design and decide how all the small details should work, since the user expectations for such a familiar object are very high. It has also been a good way to experiment with the new design patterns and the new widgets (like the ones in libgd). There are surely many things to improve in the next iteration, a particularly sore point that I am a bit ashamed to not have fixed yet it is the persistence of alarms when the app is not running (or even when the system is suspended), but today’s bug is tomorrows chance to get involved!
The application went through a full rewrite to address many of the issues found in the first implementation. I opted for a rewrite in vala because it is probably the more mature technology if you want to write a GObject based app today and you are a bit sick of writing C boilerplate, but at the same time you need to pull some tricks to call some C code and libraries without proper introspection support. However I think the choice of the language is a secondary aspect of the rewrite compared to the use of some good practices I tried to adopt in the new code (use of many of the new prototype widgets in libgd, use of .ui files, use of GLib resources, use of GLib based library calls for everything, etc). Clocks is small enough I do not exclude to try a JS rewrite even if just as an exercise to see how the platform is maturing. In this regard I am really excited to see Giovanni’s work on defining a good platform for JS apps… I have some opinions in that regard (also due to the fact that I am back doing quite a bit of JS at work), but that’s probably best saved for another post.
Gedit has been ported to GtkApplication: from the user point of view this mostly means that when run within gnome-shell you will see an appmenu (while you will get the usual menu when running on a WM that does not support that). However under the hood this meant quite a lot of code to rework: gedit makes use of many exotic features of GtkApplication, like handling stdin (you have now to use cat file.txt | gedit – , note the dash at the end) and support for blocking the terminal in order to be able to use EDITOR=gedit for git commits etc).
We also ported gedit plugin system to use Python 3, in compliance to a gnome wide goal. This has the unfortunate side effect of breaking third party plugins once again, but I think it is a step worth taking in the long term and the sooner the better: if you have to port your plugin you just need to specify “loader=python3″ in the .plugin file and make sure the code is valid python 3, gedit’s API did not change.
GtkSourceView has seen lots of work on the completion framework thanks to the Sebastien Wilmet, his blog has all the interesting details.
Baobab saw a few of incremental improvements after the major rework of 3.6, including a classy animation from the summary to the results page thanks to the wonders of libgd. With regard to baobab, if you are looking for a challenging, but relatively small and fun project, it would be great to see someone step up and implement animated charts (Stefano had a prototype) and rework the treemap to use the squarified algorithm… It would probably make for a good GSOC project, though you would have to find a mentor since I do not think to have ti[...]

Summer is almost over, or rather, my summer vacation is almost over. In the last weeks I have been actively working on GNOME like I hadn’t in a long time… Monday I will go back to work, but even if I will not have as much time, I will try to keep my level of involvement as high as possible. This renewed enthusiasm comes largely from one decision: attending GUADEC.
I have been working on GNOME for more or less ten years now, but I attended GUADEC just once before (Stuttgart 2005) and I figured it was time to go again and see if a visit to the self-congratulating echo chamber could renew my interest and motivations… and guess what: it did!
GUADEC was fantastic, the location, the organization, the people, the talks, the food, but you probably heard this many times now…
Discussing implementation details (courtesy of xjuan)
Between a talk and the other I also came to the realization that I needed to work on something fresh and fun, so while in A Coruna I finished the redesign and rewrite of Baobab, GNOME’s disk usage analyzer, that Ryan started last winter.
I am really happy with the result both in terms of the new UI and in the underlying code, which is now written in vala, it is small and clean and makes use of many of the latest GNOME technologies.
Baobab location list
Baobab scan view
Developing small applications is so much fun and so rewarding that it is addictive, so after A Coruna (and after a couple of days getting sunburned enjoying nacho‘s hospitality in the south of Galicia) I decided to help getting gnome-clocks ready: this was even more fun because the work was shared with other current developers and designers, but also with some new contributors.
I just uploaded the first release of Clocks, in time for GNOME 3.5.91.
Mind you, this is a preview release so do not rely on it to wake up for work or to bake your cakes! It has a few know bugs and probably many unknown ones, but it starts to be feature complete and should provide a good starting point to iterate the design process and evolve into a beautiful and enjoyable clock application (well, unless you use the alarm to wake up at 6 AM, not much we can do to make it enjoyable in that case…)
World Clocks
Selecting Alarms
Ringing Alarm
Timer
Does this all mean I am abandoning gedit? No, I still use it daily more than any other application, but it is stable and does what I need it to do… on the other hand I am sure Jesse will come up with some incredible feature and Gustavo has a long secret todo list we reviewed together at GUADEC, so I can relax and just keep complaining about coding style errors while pretending to review patches…[...]

While I was in flight over the Atlantic to come back to the old Europe, the awesome gnome release team finally put out GNOME 3. Not only that, www.gnome.org now sports a fresh new look, but most importantly some great new content.

I am of the opinion that the primary measure of success of an open source project is its ability to attract and keep contributors and I think in this regard GNOME 3 is already a success. The changes in the UI – even the controversial ones – managed to revitalize a project that was slowly falling in a drowsy routine, refocusing efforts of long-standing contributors and attracting new forces. At the same time the great efforts spent cleaning up the programming platform provide a future-proof foundation which makes contributing easier and more fun. Time to make patches, GNOME 3.2 is right ’round the corner!

Lots of blogs/flames/opinions about gnome3 on the web lately… but as they say, there is no such things as bad publicity.

I’ll keep my opinions for myself for now, first of all because I have not yet used gnome-shell enough to make an informed evaluation, but most importantly because if I write them down here, 3 years from now people will be able to point out how wrong I was ;) [maybe I should link some of the blog posts explaining why the spatial nautilus - which is gone in 3.0 - was such a good idea]

With regard to gedit, I am really happy to see how things are coming along… up to a couple of weeks ago I was a bit worried about the stability of the upcoming release, but thanks to the great work of nacho, nud, jesse, gregier, j1mc (thanks for working on the docs!) and to the prompt support of gtk+ and pygobject developers in fixing reported bugs, I am now back to using the devel version of gedit for day to day work and I am confident that it will be a good release. Besides, now that even the dependency on GConf is gone, gedit will fit perfectly in your XFCE, LXDE or EXDE desktop :-)

Coming to more important matters, this blog post after almost an year was mostly an excuse to say that I should be in Cincinnati for about a week starting from the 25th of March… if there is any gnomer who would like to meet for a beer just let me know!