Newcomers workshop @ GUADEC 2019

This year’s GUADEC is approaching and I can already feel people’s excitement while talking about our annual conference.  It is important that we benefit from having so many GNOMies together in the same location to help the next generation to get started in our project. For this reason, we are planning a workshop during the first day of the BoFs (check our wiki page for more info).

The Newcomers Workshop aims at helping newcomers solve their first Gitlab issue. Historically, Carlos Soriano has championed the initiative (thank Carlos when you see him) and I have participated, guiding dozens of people in the universities here in Brno. In the past, other community members were organizing the workshop all over the world. We plan to expand the initiative by having even more GNOME contributors organizing similar events at a local level.

In the workshop we go step-by-step in the GNOME Newcomers Guide, making sure nobody gets stuck on anything.  As simple as that. The more GNOME developers participate the better, since we can benefit from their project-specific expertise.

The workshop is taking place on August 26th, and anybody interested in making their first contribution is welcome! Save the date!

Settings: new Search panel

I haven’t been working on GNOME Settings for quite some time now. Currently, I am focusing mostly on GNOME Boxes, Usage, and Fedora Silverblue. To be fair I still have some love for Settings and I enjoy context-switching once in a while to hack on code bases which I don’t face daily. Unfortunately I can’t do this more often.

A few years ago I pushed a WIP version of the Settings “Search” panel that never got merged because we were in a moment of transition in the project and at the time we thought that introducing Drag & Drop capabilities to GtkListBox would make sense still in gtk3. Fast forward, we are far from even starting to port Settings to gtk4, but people got to use the panels! For this reason, I rebased and iterated a bit over the Search panel in order to make it identical to the mockups. The final result is previewed below and will be available in our next stable release, 3.34.

P.S.: I haven’t blogged much in the last couple of years mostly because I always felt that blog posts required a certain amount of *amazingness*. Now I’m convinced that small pills, highlighting something as small as the work above, have a place in this blog (better than not blogging at all). :-)

Introducing GNOME Usage’s Storage panel

GNOME Usage is a new GNOME application to visualize system resources such as memory consumption and disk space. It has been developed by Petr Stetka, a high school intern in our Red Hat office in Brno. Petr is an outstanding coder for such a young fellow and has done a great job with Usage!

Usage is powered by libgtop, the same library used by GNOME System Monitor. One is not a replacement for the other, they complement our user experience by offering two different use cases: Usage is for the everyday user that  wants to check which application is eating their resources, and System Monitor is for the expert that knows a bit of operating system internals and wants more technical information being displayed. Besides, Usage has a bit of Baobab too. It contains a Storage panel that allows for a quick analysis of disk space.

The Storage panel has been recently rewritten both in the backend and user interface. It is much faster at listing the filesystem tree and much nicer to interact with.

The screenshot above shows how it looks like in my Videos folder. Selecting a file in the sidebar makes the slice in the pie chart pop. The filesystem tree is presented in a DzlStackList, so getting back to the parent folder is smooth and pleasant.

Each file type gets a different color, and these are consistent. Directories are indicated by a bigger ball in the list. Clicking an item opens the corresponding file. Selecting its checkbox allows for batch deletion. Very intuitive!

GNOME Usage is available in the Fedora repositories. Before you ask, there isn’t a Flatpak because libgtop needs access to the processes running in the host. I plan to work on introducing a Usage daemon that will enable Usage to be Flatpaked AND would allow us to provide historical performance data instead of just real time.

All in all, there’s more coming to Usage soon. Peter is now moving into other opportunities and continuing his studies, so I will continue his work in Usage. If you are interested in contributing to the project, you can reach me out on IRC #usage. Stay tuned!

User account fallback images in GNOME 3.32

Your face might resemble this one in the left (avatar-default) as much as it could be pretty much everyone else using the same computer as you. With this in mind, we introduced a small feature in GNOME 3.32 that intends to make it easier for users to identify themselves in a list of system users, such as in the login screen or in Settings.

From now on, GNOME won’t set the “avatar-default” icon for users created in the Initial Setup or in Setting. It will create a colourful image with the user’s initials on it.

The colour palette is the same used in the new icon guidelines (if you haven’t heard yet, we are living now a Big App Icon Revolution in GNOME!). User names (full names) are mapped to colours in the palette, and therefore are consistent everywhere you enter the exact full user name. So get used to your colour!

Nothing else about the user image setup is going to change. You still can:

  1. Select a picture with a file chooser.
  2. Take a picture with your webcam.
  3. Select one of the GNOME stock avatars.

Another detail that came with these changes is that now user images will be rounded everywhere in GNOME. These efforts are part of the “Consistent user images across GNOME” initiative.

User Accounts panel in Settings
GNOME Initial Setup
Login screen

GNOME 3.32.0 is coming out next week! o/

DevConf.CZ 2019

Last month I attended DevConf CZ for the third time. The conference has been growing a lot in the last years and it has been attracting a wider variety of people. It is a free-admission conference in the lovely Brno, Czech Republic, the place that I now call home. If you haven’t attended it yet, you should definitely consider it for next year.

This year I had a talk titled “Running virtual machines in the Flatpak sandbox”, where I described the process of Flatpaking GNOME Boxes. There’s a video available on YouTube.

We had a small Desktop track on Friday afternoon with a good amount of talks about Flatpak. The audience was engaged and interested in the topics. Besides of my talk, Owen Taylor spoke about the state of Flatpaks in Fedora and Jiří Janoušek spoke about the Linux fragmentation and how Flatpak can tackle the problem. Last but not least, Kalev Lamber told us what’s new in gnome-software.

Summing up GUADEC 2018

That’s my seventh edition of GUADEC (and counting) and I just can’t get enough!

This year’s edition was once again a blast. The best opportunity to put faces into the names we interact daily throughout the communication channels of our community, and to meet new folk.

Once again a volunteer, this year a chaired the sessions in the auditorium during the first day, organized one of the newcomers activities, and the football game. Don’t forget to check out the conference photos.

Lots of work got done, as you must have read from other posts in Planet GNOME. It was no different for Boxes. Our annual Birds of a Feather session was more of a whole afternoon chat under the shadow in front of the university cafeteria. We managed to count with the presence of very experienced members of our community to give us some valuable insights on how we can sanely introduce new features and optimize the existing ones.

We discussed the challenges and possibilities of the OVF support, enabling us to Import and Export virtualization appliances allowing users to easily share their VMs with each other, and perform migrations and backups. That is work that has already started and will be partially shipped in 3.30, and later complemented in the next cycle.

There we often heard of feature requests for enhancements we already landed. Therefore justifying my recent work in the new machine assistant to make the “Download an OS” page, and remote connections more discoverable. Expect more work in this area, making it easier for users to find and benefit from features we already have, such as: bridged network, file sharing, clipboard integration, notifications passthrough, multiple brokers, etc…

Another relevant topic fairly discussed during our meeting was the  integration of Boxes into the Purism mobile development workflow as a simulator in which they could easily run their Flatpak bundles built with GNOME Builder.  Alberto Fanjul participated in the discussions describing their requirements and suggesting features. Expect some interesting work in this regard for our next development cycle.

A few more specific topics were discussed related to changes under the hood related to speeding up things and making some processes more fail-proof.

Boxes among other apps got stickers!

GUADEC was also an opportunity for me to meet our Google Summer of Code mentee Adi Manglik, and chat about his challenges adding Power consumption capabilities to GNOME Usage and of being a newcomer in our community.

I would like to thank the GUADEC organizers for hosting an amazing conference. The Social Events were great, from the sangria at the beach party to the guided tour to Alcazaba ending with a delightful party at the sunset with incredible flamenco dances, it is all fantastic with friends.

Last but not least, I’d like to thank my employer Red Hat for sponsoring my trip! I hope to see you all again very soon!

Attending GUADEC!

Just passing by to say that I am looking forward to see you all later this week in Almeria. The conference program sounds very promising and the host city is looking outstanding.

We will be hosting a Boxes BoF during the July 9th afternoon, so make sure to swing by if you are interested on contributing to Boxes or have any questions/ideas to discuss.

Besides the normal talks schedule, I will be involved in organizing newcomers and sport activities. Stay tuned!

Contributing to Boxes

I have to admit that Boxes is a bit late for the Flatpak party, but that’s not a problem. The technical difficulties of getting a virtualization hypervisor to run inside the flatpak sandbox are mostly overcomed. This way, contributing to Boxes has never been easier.

In the following sections I will describe the step-by-step process of making your first code contribution to GNOME Boxes.

Get GNOME Builder

Builder makes it very easy to download and build GNOME applications with just a couple of clicks. It will also make your life easier while writing the code.

Download Builder

Download and build Boxes

GNOME Builder: cloning a project and building it

That’s it! Now that you have the project built and can run it, we can start looking into fixing bugs.

Finding an issue to hack

You can have an overview of the ongoing work in the project by browsing our kanban board. We also have issues tagged as Newcomers if you are making your first contribution and want to start hacking on something easy.

Create a GitLab account and fork the project

Visit gitlab.gnome.org and create an account. GitLab will pop up a banner asking you to add your SSH keys to your profile, or you can go directly to edit your profile.

After your profile has been properly setup, it is time to fork the project!

Go to the Boxes project page and click the Fork button. This will create your own copy of the git repository under your personal namespace in GitLab.

Finally, get your fork URL and add to your local git repository as a remote:

git remote add fork $project_url

Making changes and submitting your code

After building Boxes and finding an issue to work, it is time to dive into the codebase. Edit the files and press the GNOME Builder “play” button to see your changes take effect.

Since the migration to GitLab, we have adopted the merge request workflow.

You need to:

1. Create a git branch and commit your changes

git checkout -b $descriptive-branch-name

Do your work, and commit your changes. Take a look at our commit message guidelines.

2. Push your changes for the world to see!

git push fork

A message with a link to create a merge request will be printed in your terminal. Click it, describe your changes, and Submit!

3. Follow up on the feedback

Me and other developers will review your work and recommend changes if necessary. We will iterate over and over until your contributions are ready to be merged.

4. Celebrate your first contribution!

Further reading

The steps described above are based on the GNOME Newcomers initiative. We have a detailed step-by-step process of making contributions and you should definitely check it out. It has pointers about documentation, tips about finding the right approach to dive into the code base, and examples.

Let’s do it!

Boxes + Flatpak

TL;DR: You can now install GNOME Boxes directly from Flathub! 🎉

INSTALL

Why are we so excited about this?

It might seem at first sight that Boxes is a simple application, and that is partially true if you ignore the deep stack under the hood responsible for making virtualization simple™. The various modules (some of them gigantic such as qemu, libvirt, freerdp…) need to be setup in perfect harmony for us to boot a whole operating system with its essential functionalities.

The GNU/Linux distribution model has historically delegated to downstream packagers the responsibility of integrating dependencies in order to provide an application to their end users. This model has worked for some for many decades, but it has fundamental flaws that “trickle down” making the upstream developers’ life miserable.

Don’t get me wrong, bugs are mostly our fault, but a significant amount of bug reports I receive consist of issues I cannot reproduce in my development environment. A combinatorial explosion of package versions, build flags, and/or pivotal architecture differences between distros.

Therefore this is the first and foremost benefit we get from shipping Boxes as a Flatpak.

Another difficulty we face during our development cycle is having the ability of having designers, translators, and marketing folk being able to run our latest snapshot or a specific work-in-progress tree. With the GitLab continuous integration combined with Flatpak we can spin bundles at any moment, and they can be installed within a couple of clicks, alongside other versions of the same app! This is The Future!

Having our apps widely available is another concern we have. Many distributions which stick to the package model also support Flatpak. Besides that, there are new players which are essentially different. Container-based desktop operating systems are a thing now too.

Software is never done…

There are indeed downsides of running Boxes in a Flatpak in comparison with a well crafted build of dependencies bottom-up. But these are issues that can be solved and are going to be prioritized in our TODO list.

Running Boxes in a Flatpak TODAY you won’t have yet:

  • A bridged network between host and guests.
  • The ability of installing an image from a physical device.
  • Access to your system’s libvirtd (we run our own libvirtd in the sandbox).
  • Shared folders.
  • USB redirection.
  • $YOUR_ISSUE_HERE

The list above is far from complete, and I would like to count on you to experiment with the Flatpak and report issues you might encounter. Use the label “flatpak” to collect points which you can later exchange for beers or other beverages of your choice. 😉

Boxes now supports RDP connections

Boxes has been the go-to option for easy virtual machine setups in GNOME for quite some time, but some people don’t know that our beloved application can also act as a remote viewer.

The “Enter URL” option in the new machine assistant is how you get a new remote machine added to your collection. It supports addresses of Spice and VNC servers and oVirt and Libvirt brokers. You can also paste the URL of an operating system image (iso, img, qcow, etc…) and Boxes will download and boot it for you.

However, there is life out of our GNU/Linux boxes and we need to stay connected. Windows is extremely popular and it ships a RDP server by default, making the adoption of open alternatives a bit unhandy there.

Imagine you have clients running Windows that need your remote support, or you couldn’t convince your family back home to switch to GNU/Linux, etc…

Now Boxes also supports RDP!

Boxes - screenshot

This feature is powered by FreeRDP. For convenience, I wrote a glib wrapper around the essential freerdp API so we can consume it via gobject-introspection in GNOME Boxes and others could reuse it for their own applications.

Heavily inspired in the gtk-vnc API,  I decided to name it gtk-frdp. So original! 😉

If you are interested in writing a RDP client of your own, or maybe port an existent one to gtk-frdp, you can achieve it with a few lines of code such as below (I choose Python for legibility, but it could be any gobject-introspected language of your choice).

from gi.repository import Gtk, GtkFrdp

window = Gtk.Window () display = GtkFrdp.Display () window.add (display)
display.open_host ("192.168.0.1", 3389) display.username = "username" display.password = "password"
window.show_all () Gtk.main ()

That simple!

This and a few other cool features will be available in our next stable release, GNOME 3.30. Stay tuned!