GNOME 3.26 is great

Greetings!

I am incredibly excited for GNOME 3.26, and it’s been hard to wait for it. I openly admit this fact. This release saw serious, important improvements all over the places, new features landed, some others didn’t, thousands of bugs were fixed all across the platform, and I’d like to share my personal highlights for this release.

Calendar

As the result of a successfull Google Summer of Code project from Yash Singh, Calendar now supports events with recurrences. So far he did an outstanding job! There ain’t no secret in using it, and in fact it should be as simple as one could expect. Here’s a small video showcasing this new feature:

 

To Do

Another successful Summer of Code project from Rohit Kaushik introduced Todoist integration. This was made in cooperation with a GNOME Recipes intern, and many improvements to the entire stack landed.

Todoist in GNOME To Do
Todoist in GNOME To Do.

Builder

What can we say about Christian Hergert’s work on GNOME Builder? It’s simple wonderful! This cycle, GNOME Builder received a redesign UI, code indexing, documentation cards, debugging capabilities and a great fullscreen mode. The code highlight is working like a charm too.

GNOME Builder 3.26
GNOME Builder 3.26 showing documentation card and displaying the functions with ‘gcal_manager’ prefix.

After using Builder for a couple of years now, I can finally say that, as a user of the application, it now covers all of my big needs. I am really happy to see how Builder is coming along, and how my development workflow was improved by this tool. Really, it allows me to code much faster now!

Thanks Christian, you deserve all the best!

Games!

Games is an app that I have a love and hate relationship. I love how simple and straightforward and powerful it is – specially because I love retro games – but I hate how it tempts me to spend my time playing instead of working.

I think Games is the GNOME app that makes the best usage of Tracker currently. It literally just works. I can plug my joystick, select a game and play it. And, because it uses libretro, I can play the games I love the most: Playstation games. Even the ones with multiple disks!

GNOME Games
I’m terribly awful playing Megaman X6 😦 Still fun though

Thanks Adrien for creating this great app 🙂

Flatpak

I didn’t say this before, but nowadays I only use the unstable version of GNOME apps through Flatpak’s Nightly channel. Also, I run Steam and Spotify through Flathub.

It works like magic. Almost literally.

You should give it a try.

Stability. I love Stability.

When I wrote my impressions about the 3.24 release, I was really frustrated about the overall experience of 3.24. Having a session that crashes every 2 minutes when you already have your own tight deadlines didn’t help.

Things improved drastically during the cycle, of course – thanks to the tireless efforts of Philip Chimento. He was brave to make himself responsible for a very core component (GJS) and work on it. He fixed all the worst bugs already, and the JS platform is finally advancing again thanks to him. We should really get him a drink, don’t you agree? 🙂

And I now realize that I wrote about those issues in the worst possible way I could’ve. And, from the very bottom of my heart, I beg the pardon of the community about that.

Sorry, folks.

My Contributions

This cycle, I did a few things that I’m happy. Specially because I myself will benefit from them as well! 🙂

Settings

You’re probably aware of it already, but GNOME Control Center’s UI was revamped and rebranded as “Settings”. I think that this rebrand, together with GNOME Tweak Tools becoming “Tweaks”, make it clearer and more obvious the different purposes of those apps.

New Network panel
The new, single column Network panel

The panels are now much more consistent, and the overall experience should be more streamlined now. It’s looking simple and intuitive, and yet we present the same ammount of features! I wrote about it in this blog post. Even though this work was huge, and I am feeling mentally tired after this battle, I’m also very happy we managed to get this done for 3.26.

Thanks for everyone involved!

Fullscreen Mode in Builder

This was one tiny contribution from my side, and Christian was the one that actually made it great. But it makes Builder much more usable on a standard 1366×768 screen, where I can’t half-tile it. This is how it used to look like:

Yay!

Moar Music Performance

Another cycle, another round of performance improvements in GNOME Music. This time, an issue in the Album Art loading code was killed with fire. Check this out:

 

Quarter Tiling, where are you?

This is complicated. As you know, I’m not a window manager expert. And Mutter is huge, with dozens of edge cases that I didn’t know of. This led to me spending a stupidly long time testing a high number of different setups and configurations.

The good news: the patches are working.

The bad news: they couldn’t make it for 3.26.

Depending on the willingness of Florian, and the acceptance of the Release Team, I can try and request a feature freeze break for 3.26.1, but there of course is a chance that this is not going to be accepted. Which is totally reasonable, few people are willing to introduce potentially buggy new features in stable releases.

Even if it doesn’t make for 3.26, I’ll continue to work towards quarter tiling and we, at the very least, can expect it to be very well tested for 3.28.


I’d love to hear your comments and suggestions. What are your impressions about this GNOME release? Drop a comment below!

Advertisements

Introducing Settings (or, the new Control Center)

Greetings my friends,

if you’re following the GNOME development closely, you’re now more than aware of this movement of reworking GNOME Control Center. It was a remarkably colossal work, specially because we used a bottom-up approach: fix the panels, then switch to the new shell.

With the release of GNOME 3.25.91, I’m proud to say: the new Settings layout is the official one now.

This is how it looks like:

Captura de tela de 2017-08-23 21-00-21
The new Settings app

A Long Road

… It all began one year and a half ago. I wrote about it at the time, remember? 🙂

When Jon McCann and Allan Day expressed their vision of how a Settings application should work in the form of mockups, I was particularly excited with them. Specially because, with these mockups, we could easily make Settings work on low resolution displays, which is a very important feature for Endless. Since I adapted GNOME Control Center downstream for them, and we all agree that upstream would be better, it made sense for them to support me working on the new Settings layout.

Chronologically speaking, this is how the work unrolled:

Overall, it took 18 months of work from 15 different people (some more involved than others) and more than 30.000 lines of code changed. This work was massive. Thanks to all the contributors who gave their time and energy for free in order to make it happen.

The new Network panel

You read that right. The last big panel that required an update was Networks. This because it used the old 2-column layout, as you can see here:

Old Network panel
The old, 2-column Network panel

While this layout worked well enough with the previous Control Center layout, it would be inconsistent with the new Control Center layout, since both the panel and the shell would have a sidebar. Thus, we could not set the new Control Center shell until we fixed these panels with 2 columns.

But fortunately, using my remaining energy and abusing the super awsome Rui Tiago Matos’ review capabilities, we managed to review this old mammoth panel and the result is actually nice! This is how it looks now:

New Network panel
The new, single column Network panel

This panel, however, is not final; we’ll do another UI review for the next cycle, and split the cellphone Bluetooth connections into a new panel called Mobile Broadband. The advanced connection editor dialog also received a very needed UI review as well:

Improved connection editor dialog
The improved advanced connection editor dialog

This, as you can imagine, is also not final. The idea for the next cycle is to continue improving this dialog so that we can present the same (or even more) ammount of options in a much saner and simpler way, avoiding confusion and misconfigurations.

Introducing Settings, the new Control Center

Settings is the rebranded name of Control Center. I won’t be mouthful here when I can show you that, right? There you go:

 

Thanks to Jakub Steiner, the Details and Devices rows have dedicated icons that looks super great! Check this out:

New Icons
The new symbolic icons in Devices and Details rows

Allan, Rui and I spent the past couple of weeks fine tuning tons of minor details and the overall behavior of the new Settings layout. More than 40 minor improvements landed in the mean time, and we can expect even more during the next week.

Next Steps

Improve the Sound panel, do another UI iteration over the Network and Wi-Fi panel, introduce the Mobile Broadband panel and fix all the countless bugs that appeared because of this work.

All in all, I’m personally loving how this work went; how many contributors appeared and gave their personal touch to this work; and also, how supportive and positive the community reception was.

(Pshh, only between us; the GNOME community – both users and contributors – is just awsome!)

Of course, as one can imagine, this work was not without flaws. Lots of them were caught early in the cycle, but some issues will only be found by users testing this new work. So, if you’re not sure about how to start contributing, let me reassure that testing the new Settings and filing bugs would be a tremendous contribution. Bonus points if you provide a patch fixing that issue!

Acknowledgements

Many contributors were involved in this colossal work, but I’d like to personally thank Felipe Borges, Bastien Nocera, Allan Day, Mohammed Sadiq and Rui Tiago (in no particular order) for their role on this work, ranging from UI review, panel porting and code review.

I’d also like to thank my employer, Endless, to support me work on this since the very beggining. While this was not my main focus of work, without the support, it wouldn’t be possible at all.

Because, if you still didn’t know…

banner down

GUADEC + Unconferences | 2017

This year’s GUADEC was amazing. I’m really happy I could attent it this year (even though my tasks are accumulating and I’m really afraid to look at my emails again…). I’m still in Manchester so, if anyone wants to meet me and buy me a tea, do get in touch!

There were quite a few talks that I enjoyed. I can’t really name one that I liked the most, but on the top of my list are:

I had a special interest in Richard’s talk. He raised many relevant questions and exposed how complicated it can potentially be the problem of donations and payments. More about that in the future.

Calendar & To Do

I had the chance to sit down and see a power user interacting with GNOME Calendar. It was an unique and enlightening experience. I was able to see a few areas where Calendar can do better in terms of UI/UX.

Unfortunately, GNOME To Do didn’t have the same luck. I’m still somewhat unhappy with the current UI of To Do, but I’m running out of ideas on how to improve it without a complete rewrite (which I simply don’t have time to do now). If you’re a GNOME user with any kind of background on design, ~please~ get in touch: I’d love to gather some feedback on To Do!

GTK4

I had the chance (and honor) to be present at the discussions for GTK4. In these discussions, we did a big list of topics and discussed each one of them in details.

This slideshow requires JavaScript.

I admit that, during these discussions, I felt like a kid at times – the GTK hackers are incredibly smart and skilled people. The other side of the coin is that, while I was feeling like lagging behind them, I also felt honored and happy to be surrounded by such amazing people.

The biggest problem to solve now is the accessibility stack. After digging into the topic and clarifying how it works, we concluded that this topic was too big and complex for that moment, and deserved a hackfest of its own. We’ll organize one during the next months.

Wrapping up, I can’t state how productive these discussions were. Thanks to Matthias Clasen, Benjamin Otte, Christian Hergert, Cosimo Cecchi and everyone else that drove the discussions. We now have a solid GTK4 roadmap that I’ll move to the GNOME Wiki in no time.

GNOME Shell

An unexpected thing happen during the Unconference days. When talking to my good friend Mario we asked ourselves: how can we improve our own Endless tasks by upstreaming our features?

Endless OS shell has many features that GNOME Shell doesn’t, and maintaining downstream patches is expensive and simply not cool. One of these features was specially important, as it is difficult to maintain and lots of GNOME users frequently ask for.

This specific feature was considered in the past, but had many design constraints and we end up never solving it design-wise, nor implementing it.

This is about to change.

After a rather spontaneous group discussion, we found solid solutions for all the relevant edge cases of this feature 🙂  I’m sure Mario will write about it in the future, and probably will implement it as well, so stay tuned!

Because, in case you forgot:

banner down

(And yes, I purposely didn’t say which feature I’m talking about – but I’m sure many of you can guess that :P)

Mutter

After a long explanation and discussion with Florian Müllner (and of course, getting him a well deserved beer for being the GNOME Shell and Mutter maintainer!) the path for quarter-tiling is much clearer now.

The original idea is to implement tiling support using constrained edges, rather than tiling states. But this is hard, and now I believe it’s effectively impossible to do that.

Olivier Fourdan tried to propose a Wayland protocol for that, but discussion ended up freezing and no progress was made for a long time. I admit I’m kinda scared to try to send  these changes upstream… see the bug’s feedback (sometimes I forget that the GNOME community is much more welcoming than many other FOSS communities).

I now have a real problem to solve, and the time is not enough. Perhaps it’s time to declare bankruptcy?

Acknowledgements

I’d like to thank the GNOME Foundation for sponsoring me. I sincerely hope that my engagement and contributions pay off this investment!

I also thank my employer Endless to let me join. The upstream contributions we’re doing are valuable for the community, and in turn it helps us lowering the number of downstream changes to maintain.

sponsored-badge-shadow

Say hello to the new Wi-Fi panel

The new Wi-Fi panel

Hello my GNOME friends 🙂

Y’all know that we’re taking big steps to move Settings (a.k.a Control Center) to a brand-new, super shiny layout. As a courtesy of our beloved designer, Allan Day, we have mockups of a new Settings layout that is both modern and preserves (most of) the functionality we already have. He blogged about it in the past.

I found those mockups quite nice, so I decided to work on them!

As YouTube people say nowadays: I’m a simple man. I see a good mockup, I implement it.

Before switching to the new layout, though, we needed to get rid of the panels with a sidebar. Namely: Online Accounts, Keyboard, Network, Printers and User Accounts. Thanks to Felipe Borges, who reimplemented a few panels himself, we were able to progress faster than expected!

This time, I added the new Wi-Fi panel. Check this out:

The new Wi-Fi panel
The new Wi-Fi panel

 

Compare this with the current Network panel, which still has a sidebar:

The current Network panel
The current Network panel. Notice that the panel sidebar looks bad with the new Settings shell (that already contains a sidebar).

 

With the new Wi-Fi panel, we’re close to making the new Settings shell the default one; the biggest blocker now is the Network panel, which I’m already working on. And finally, after more than a year working on the new Settings layout – and with the help of many super awsome contributors! – we’re almost there 🙂

And our traditional sequence of pictures:

 

Oh, and did you notice? The connection editor dialog was also redesigned! It’s much simpler and saner now, do try it out and let me know what you think.

The new Wi-Fi panel has a few advantages:

  • It’s beautiful 🙂
  • It handles multiple Wi-Fi adapters slightly better
  • It’s just easier to use
  • (Future) When the host doesn’t have a Wi-Fi adapter, the panel won’t be visible

Afterword

I’d like to say a big and warm thank you to all contributors that made this possible, and specially to Bastien Nocera and Rui Matos for reviewing all this work and many other patches.

There’s still quite a lot of work to do, and it won’t be easy, but we’ll eventually make it 🙂

Improving productivity with GNOME Builder

Hello community,

as you can guess, I’m a heavy user of GNOME Builder. I use it every day to build various things, most of which you guys know of already 🙂

Because I spend so much time on it, it is essential that Builder simply Just Works ®, and perfectly. Builder sometimes shows a rough edge here and there, but all in all, it’s a masterpiece. It’s awsome in many aspects! Christian Hergert really deserves our respect (and, why not?, many free beers too!)

However, it wasn’t enough.

I like to focus on my tasks, and I usually do it by making the window fullscreen. Even if Builder is already great, it doesn’t support fullscreen.

So that’s what I did.

Let the work speak for itself:

 

Thanks to Christian’s quick fingers, it is already in master. From now on, this will only get better.

Enjoy!

Even faster GNOME Music

Hello my GNOMEish friends!

This afternoon, I felt an urge to hear some classical music. Perhaps because I’m overworking a lot these days, I wanted to grab a good hot tea, and listen to relaxing music, and rest for a few minutes.

My player of choice is GNOME Music.

In the past, I couldn’t use it. It was way too slow to be usable. After a round of improvements in a sleepless night, however, Music was usable again to me.

But it was not fast enough for me.

It was taking 15~20 seconds just to show the albums. That’s unacceptable!

The Investigation

Thanks to Christian Hergert we have a beautiful and super useful Sysprof app! After running Music under Sysprof, I got this:

Sysprof result of GNOME Music
Sysprof result of GNOME Music

Clearly, there’s an area where Music hits the CPU (the area that is selected in the picture above). And, check it out, in this area, the biggest offenders were libjpeg, libpixman and libavcodec. After digging the code, there it was.

The performance issue was caused by the Album Art loading code.

The Solution

Looking at the code, I made a simple experiement: tried to see how many parallel lookups (i.e. asynchronous calls) Music was performing.

The number is shocking: Music was running almost 1200 asynchronous operations in parallel.

These operations would be fired almost at the same time, would load Zeus knows how many album covers, and return almost at the same time. Precisely when these lookups finished, Music had that performance hit.

The solution, however, was quite simple: limit the number of active lookups, and queue them if needed. But, limit to what? 64 parallel lookups? Or perhaps 32?

I needed data.

The Research

DISCLAIMER: I know very well that the information below is not scientific data, nor a robust benchmark. It’s just a simple comparison.

I decided to try out a few lookup limits, and see what works best. I have a huge collection, big enough to squeeze Music. I’m on an i7 with 8GB of RAM, 7200RPM spinning hard drive.

It was measured (i) the time it took for the album list to show, (ii) the time for all album covers to be loaded, and (iii) a quick score I made up on the fly. All of them are of the type lower is better. I ran each limit 10 times, and used the average of the results.

Time comparison
Comparison of various lookup limits

The “No Limits” columns represent what Music does now. It takes a long time to show up, but the album covers are visible almost immediately after.

First conclusion: limiting the number of lookups always performs better than not. That said, the problem was just a matter of finding the optimal value.

After some trial and error, I found that 24 is an excellent limit.

The Result

In general, the initial loading of albums with the performance improvement is around 73% faster than without it. That’s quite a gain!

But words cannot express the satisfaction of seeing this:

Enjoy!!

Smarter half tiling in GNOME Shell/Mutter

Hello GNOMErs,

I think that, at this point, at least a good part of the community is aware of the many new features that are planned to arrive with GNOME 3.26.

I’m particularly looking forward a better tiling story in GNOME Shell and Mutter.

And, y’know, I’m not exactly a referrence in being passive about my own personal technological wishes. Heck, I love hacking stuff so much that it naturally happens even when I’m sleepless and under headache. Perhaps we can call that organic hacking? 🙂

Anyway, I can’t just sit down and keep waiting for something I could work on, right?

And that’s why this happened:

This is obviously a work in progress. You can track the progress of this smarter half tiling in bug 645153. But, sssshhh don’t tell anyone, this is actually part of the future quarter tiling feature!

Have a wonderful night! o/

GNOME To Do 3.24 release, and it’s shining

startup notification

GNOME To Do is a personal task manager for GNOME. It uses GNOME technologies and integrates very well with the desktop. And now, it’s finally being released!

The 3.24 version comes with a few nice features and, most importantly, whole load of bugfixes. Let’s get started!

Autostart & notifications

GNOME To Do now (optionally) autostarts once you log in and keeps track of your tasks! This is what I see now when I log into my laptop:

startup notification
Thanks for letting me know, To Do!

To Do also detects when you put your machine to suspend, and if you resume in the next day, another notification is triggered. Isn’t it nice when your task management tool allows you to focus more on actually working on your tasks than in managing them? I certainly love not having to worry about the tasks for the next day 🙂

This behavior, of course, is optional and configurable. There is a new “Run in background” plugin that allows you to fine-tune this behavior:

Editing plugin options
Editing “Run in background” plugin options

Improved panels

A lot of bugfixes landed for Today, Scheduled and Unscheduled panels. The most important one in my opinion is the ability to select which tasklist the new task will be added. Check this out:

selecting the tasklist
Selecting the tasklist in Today panel

These panels also don’t show the date anymore. It’s not very useful to show “Today” in every task, when you’re already in Today panel, right? The same logic applies to the Scheduled panel, where you can see the date already:

scheduled panel
It looks very nice!

Todo.txt integration

Thanks to our awsome new contributor, Rohit Kaushik, we now have Todo.txt integration! This is disabled by default (it still need some polishing) but you can easily test it by running the autogen script like:

$ ./autogen.sh --enable-todo-txt-plugin

Now you can just enable it in the Extensions dialog:

Captura de tela de 2017-04-24 09-33-32
Enabling the Todo.txt plugin

Select a Todo.txt file (you have to create on manually if you don’t have one):

Selecting a Todo.txt file
Select a Todo.txt file

And you can use it just like a regular tasklist!

Todo.txt + GNOME To Do
It works 🙂

Thanks Rohit!

A few considerings

A few new features were showcased in this blog post, but to me, the topmost important change is the stability of GNOME To Do. I’ve been using it regularly for the past couple of weeks and it’s pretty stable, but I know that bugs are there, just waiting for someone to trigger them.

If you see To Do crashing or behaving oddly, please file a bug at the gnome-todo product in GNOME Bugzilla. And make sure to join #gnome-todo room at GNOME IRC and say hi. With your help, we can make GNOME To Do the best personal task manager out there!

I’m not looking forward 3.24

If you’re reading this post, please also read the one about GNOME 3.26. I’ll leave this post here for historical purposes, but you should disconsider what I say here.

Not until it’s fixed.

Those who follow my work are used to read my “Looking forward ” posts, and they appear to be quite popular. This cycle, however, I’m not looking forward the next GNOME release.

That’s because I’m disappointed.

Very disappointed.

😦

#1 – GNOME Shell

UPDATE: I was told this is an Arch-specific issue.

UPDATE 2: This is not an Arch-specific issue. This is now fixed in bug 781194, and will be available in the next GNOME stable release.

Let’s start with GNOME Shell, which is the single topmost important piece of software for end users. I was super excited with the new Night Lights mode, because as you may know, I suffer from insomnia (and fixed many bugs when I couldn’t sleep!).

When it landed on Arch Linux’s gnome-unstable repos, I’m pretty sure I was one of the first ones to test it.

But Shell keeps crashing every ~4 minutes. After 5 or 6 crashes, it logs me out. Needless to say, I lost work multiple times. That’s incredibly annoying.

If anyone is experiencing that, please join us in bug 781194 for we’re trying to find out why those crashes are happening. Fortunately, Philip Chimento is super nice and is working day and night to find out what’s going on.

But that’s still disappointing.

#2 – WebKit2GTK+

UPDATE: This was a regression in WebKit2GTK+.

I try to use Epiphany. I really try. But no matter how much I try, it fails me every time.

Looks like I can’t use keyboard to handle my Google Inbox mails. That’s a show-stopper to me.

#3 – Calendar

UPDATE: Thanks Debarshi for explaining this. He states:

There is a reason why crashes reported by ABRT are marked as ‘private’. Like all backtraces, the ones on those bugs often have passwords and private data in them. I have seen a few over the years. Hence those bugs are only accessible to Fedora contributors by default. Which makes sense, because, as you pointed out, they are Fedora bugs, and users already trust the Fedora community to ship secure software.

Why am I disappointed with my own piece of software? Well, I’m not disappointed with Calendar itself, but with the bugs around it.

It all started with bug 778419.

As you might know, I’m very urgent when it comes to crashes on Calendar. Sometimes I stop urgent tasks to fix crashers as quick as possible. Recently, I received many complaints that Calendar was crashing, but I couldn’t reproduce any one of them and worse, the debug logs weren’t helpful.

Here enters bug 778419.

Appearently, there is a issue management thing called FAF in Fedora. Nice. And looks like it catches many bugs. Super nice! But then, why am I disappointed?

Well, it starts out with me not being a Fedora user, nor watching Red Hat’s bug tracker. GNOME is agnostic to distros, and should stay that way. That’s why we have GNOME Bugzilla instance running, right? So people can report GNOME bugs, in… well, GNOME bug tracker.

But that’s ok – I can eventually see FAF and have some downstream feedback. But here is the catch: appearently, some bugs are private. Isn’t is nice when you can’t see the issues of your own app? Even nicer when appearently downstream doesn’t really care to report those issues upstream. This is clearly stated in the bug.

Let me restate this: GNOME is agnostic to distros. I refuse to watch Red Hat’s bug tracker.

#4 – Software

I was super, super excited to try GNOME Software’s Flatpak integration. I never really used Software since it (i) does not behaves super great in Arch, and (ii) isn’t better than Arch’s pacman.

But I thought Flatpak would change this scenario. Flatpak is not great at command line, building a Flatpak repo is still way too hard for humans, and OSTree’s progress reports don’t really report the progress, but throw random numbers for you to figure out what’s going on. But I was hopeful that all we needed was a good UI for it.

Do I have to say how disappointed I was to see Software falling apart when installing and updating Flatpaks?

I won’t waste any paragraph describing how it fails. You just need to have Software, Flatpak and a repository to see the action.

At Last

Some of you might think this is a rage post. It is not. I use GNOME every day, and I am fixing GNOME every single day of the past 3 or 4 years. I wouldn’t use it if I didn’t love it. It’s indeed the best desktop environment for Linux to me. And I of course will fix every single issue I described here.

But I think we can do better. Much better. Of course, everyone can come here and say “well, you can fix that by yourself until I don’t”, but is that a good approach to this situation? We’re failing in maintaining and improving the platform, and that’s a serious, collective issue. We have unbelievably good hackers around, it’s not the lack of skilled people, nor resources, that is cracking us.

What can we do to improve?

I’ll leave this question broad and open like that, and I’d like to hear the opinions of the community. Let’s just try to keep the level of the respect acceptable.

By the way: Shell crashed 11 times, and I was kicked out of my session twice, until I could finish this article

GNOME Music: the road to 3.24

(Disclaimer: this is a guest post from Marinus Schraal, the maintainer of Music)

GNOME Music 3.24.1.1 has just been released, a good time to reflect on what has happened last development cycle.

A goal for Music is to make it an exemplary application of GNOME/GTK+ Python programming and make it an entry-level project for new contributors. However the codebase was a mixture of coding styles and oversized multi-functional classes. Python is a powerful and easily accessible language, but the downside is that it can quickly get out of control if not some constraints are set on how to use it. So we started a rework to split up some of the bigger source files and enforce PEP-8 (code-style) & PEP-257 (docstrings) on new commits and bring existing code in line with it. We are not quite there yet on the clean-up front, but we have come a long way and going forward it is gonna get better.

This effort also entailed that we put off some feature additions and mainly worked on core issues, like grouping albums correctly. Album grouping has always been a sore point for Music and is usually mainly visible with for example ‘Greatest Hits’ albums being all presented as one album or with the wrong artist. Over time Music has had a lot of bug reports of this and similar issues. The underlying reason is that Music is purely metadata driven and is actually completely dependant on the data that is provided by Grilo and in turn (for local media) Tracker. If this metadata is incomplete or incorrect then Music cannot correctly display it.

So that is why we worked with the Tracker folks – in particular Garnacho – to get some indexing issues fixed and I think we did come a long way. However, to get the right experience you need to re-index your music files with a recent enough Tracker (at least 1.12) to get the metadata correctly indexed. Music can’t (understandably) force re-indexing and it’s only available via the following command line command.

$ tracker index -m audio/mpeg -m audio/flac -m audio/x-vorbis+ogg -m audio/mp4

It re-indexes the most common audio mime-types. Of course, this is based on the assumption that your music is tagged correctly to begin with. Note that tagging is prone to be taste/ripper/format specific and is often incomplete, we had to make some informed decisions here what we consider ‘correct’.

We also reworked the album art code, which in most places now supports HiDPI art. Because of changes in Tracker security policies we were forced to add some code to do local art retrieval in Music itself. It is ultimately not what we want, but it has to do for now. This also caused some stability issues in the 3.24.0 release, which should hopefully be resolved in the current release.

Part of the clean-up meant we wanted to get rid of libgd as much as possible this cycle as most of it is superseded by regular GTK+ widgets. We made some good progress, replacing (and speeding up) the albums view significantly, reworked the single album view and notifications. Kudos to Feaneron who did some heavy lifting here. There’s still more work left here coming cycle(s).

Despite the focus on making Music future ready code-wise, there were many user-visible improvements all over the place. To list a few:

  • smooth progress bar movement
  • smoother seeking
  • an empty state for the playlist dialog
  • new playlist entry for the playlist dialog
  • a shortcuts window
  • addition of composer information to the album view
  • the ability to search by composer
  • album disc separation
Captura de tela de 2017-04-12 12-27-07
Keyboard Shortcuts for GNOME Music

The most satisfying about this is that most of these contributions were made by a number of different new contributors, so a big thanks to everyone who made Music better this cycle.

Onward to 3.26

The rewrite has brought to the surface some rough edges in Music. There are some things that used to work and might not at this point, maybe because they were held together with band-aids and actually need more work to get right. There are things we want (remote sources/live updating/proper indication of played tracks/etcetera), but we can’t do yet. The core infrastructure is lacking.

The one big thing we want this cycle -besides finishing what we started last cycle- is doing the rework Feaneron blogged about earlier: having a single core model that drives the different views. This would solve a plethora of currently hard to tackle issues, some of which I just mentioned. From there we would be able to land bigger new features, like the GSoC work done on tagging & webdav sources. The Core Apps hackfest was a big part of crystallizing what needs to be done here.

Of course we cannot do this without help and we hope to see you soon on IRC (#gnome-music), on Bugzilla or check the Wiki for more info.

A final note on Tracker

In the past we used to ask people to hard reset their Tracker database if something went wrong or seemed out of whack, meaning it would be fully cleared and rebuilt. A lot of effort has gone into Tracker to make it more robust and stable. At this point we strongly suggest to not do a hard reset lightly; Music is using the tracker database for keeping track of things like playlists, favourites and played count. This might extend even further in the future.

If you have a problem with Tracker, don’t wipe it and the exclusive data that might live in it’s database: file a bug, seek help on IRC (#tracker) and we can work from there.