Announcing the announcer

You are sitting in front of the PC busy coding the next great GNOME application or more likely watching funny cat pictures and you hear your cat purr… oh wait, you do not have a cat, so you figure out it is your phone vibrating so you start looking for it among all the mess that’s on your desk. When you finally find it you can read the Whatsapp message or SMS you just received and now you would like to reply sending that funny cat picture you had open in the browser on your PC…

 

Despair no more, the lobster is here to help you! Nacho, Kurt and I started a new side project called Nuntius which lets you read notifications from your android phone directly on your beautiful GNOME desktop. This is going to be even better with GNOME 3.16 and its redesigned notification system.

Both the android application and the GNOME application are free software and are available on github, but the simplest way to try it is to install the android application from the Google Play Store, while the linux application is already available in Fedora and packaging for any other distribution is more than welcome.

Nuntius uses bluetooth to communicate, this is not only a technological choice, but also a design one: notifications will be sent to the PC only when you are nearby and your messages stay local and private and will not be sent to “teh cloud”.

In the best tradition of free software, this is a very early release with just the bare minimum functionality (for instance replying directly to a message from a GNOME notification is not implemented yet) and we welcome any feedback and help.

3.14 almost there

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.

clocks-search

 

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.

gedit-open

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 consistent user experience to users that use gedit across different platforms.

gedit-osx

Code also evolved under the hood: Sébastien continued in his great effort to push code from gedit to gtksourceview, and after the search API that he tackled during last year GSOC, this time he landed the rework of file loading and saving. This work is particularly important because it will be leveraged by Christian for Builder, a project I am extremely excited about, not only because we really need a tool to improve the the developer experience on GNOME, but also for its symbiotic relation with gedit, with code and design concept that are going to be shared.

 

 

 

 

Let’s make OPW better

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 negatives 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 wonder if we delay tackling some specific problem or idea that would benefit our users today, just 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 “new 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)

 

 

3.12 almost here

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

For those living under a rock here is how gedit 3.12 looks

gedit 3.12 with the Solarized Dark color scheme

gedit 3.12 with the Solarized Dark color scheme

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

 

Update: it was pointed out that ctrl+shift+L is already bound to “Save All”. I changed the uppercase shortcut to ctrl+U

gedit: new look

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

switcher

 

popover

Many dialogs are now taking advantage of header bars

stats

The Gtk tabs design went through more refinements and using the new support for a centered widget in GtkBox, the tab label is properly centered also when showing a warning.

tabs

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

solar

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

Fosdem ’14

I’ll be at FOSDEM this year! If you want to chat about the new gedit or anything else I’ll be hanging around the desktop devroom.

I am looking forward meeting my fellow belgian gedit developers swilmet and nud.

http://fosdem.org/

I will land at 5:30 PM at the Charleroi airport, if someone wants to join me on the bus shuttle to Brussels feel free to leave a comment.

In other news, if you are a young linux “smanettone” who enjoys sysadmin work on clusters and HPC systems, we have an open position in Rome.

Posted in General. 1 Comment »

Give me a stopwatch and a map…

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

Clocks 3.10Clocks 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.

 

 

 

 

3.8… clocks, gedit, more…

gnome 3.8 is on track to be released on time as usual (the release candidate will be out later today): 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!

clocks-3-8

 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.

gedit-3-8

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 time to do that this year (unless a really strong and independent candidate shows up).

 

Summer

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…

Third time’s the charm

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 GNOME

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!