As 2015 is approaching with new goals, promises, and changes, I am keeping my annual tradition of bragging about the past year in a blog post.
If I were to describe 2014 in a word, I would go with… challenging. I have finally graduated from my computer science bachelor’s degree. I am thankful for the amazing folks I met at the university and for all I have learned in the past 5 years. This past year has been tough: taking the last courses and writing my final thesis while working at the same time.
I have not had the free time I wanted to contribute to GNOME, to read, or to practice sports. But all in all, It was a great year. I had again the awesome opportunity of attending GUADEC, this year in the lovely Strasbourg, France. I also spoke about GNOME at some local conferences.
I had my first real job opportunity at Parafernalia, working as a contractor within the Endless Mobile apps team writing GNOME-based applications for a great operating system. I have leaved Parafernalia in the end months of 2014. Now I am looking for new challenges, without having to worry about being reallocated and having to drop off university because of it.
In my past year New Year’s Resolutions blog post I have set up that I’d like to read 50 books, find a first job, and graduate. I did not achieve the easiest one. In the past year I have read 32 of 50 books, failing my Goodreads 2014 reading challenge. I guess I will aim lower in 2015!
2014 was a great year with its ups and downs. I have been pretty busy and stressed, but now that the end has come, I am finally on vacation after years without this much free time. In doing so, during the Christmas holiday I have started a new toy project: a GNOME Shell extension.
Patterned Wallpapers was inspired by Pattrn, an Android app created by our fellow oldschool GNOME hacker Lucas Rocha. It is a GNOME Shell extension which gets you a new patterned-wallpaper automatically every day/week, as specified in the metadata.json file. The patterned-wallpapers are downloaded from the COLOURLovers public API. COLOURLovers is a community where people from around the world create and share colors, palettes, and patterns.
gnome-shell-extension-patterns already has a preferences dialog which allows you to set the kind of patterns you want (popular or random), set the frequency of updates (daily or weekly), and clear the cached wallpapers. These settings are gsettings, which means that they can be changed using dconf-editor or manually with the gsetting command line tool. All pattern images are stored in the backgrounds/ folder inside the extension’s folder ($HOMEemail@example.com/backgrounds/).
In the future, I want users to be able to browse through patterns, mark them as favorite, search by keyword, and list their wallpaper history. These goals are issues in the project’s Github repository. Contributions are appreciated!
The Infamous Windows “Hello World” Program (A good and archaeological post by Petzold)
The Infamous Windows “Hello World” Program (A good and archaeological post by Petzold)
For the 6th year in a row, Igalia has organized a hackfest focused on web engines. The 5 years before this one were actually focused on the GTK+ port of WebKit, but the number of web engines that matter to us as Free Software developers and consultancies has grown, and so has the scope of the hackfest.
It was a very productive and exciting event. It has already been covered by Manuel Rego, Philippe Normand, Sebastian Dröge and Andy Wingo! I am sure more blog posts will pop up. We had Martin Robinson telling us about the new Servo engine that Mozilla has been developing as a proof of concept for both Rust as a language for building big, complex products and for doing layout in parallel. Andy gave us a very good summary of where JS engines are in terms of performance and features. We had talks about CSS grid layouts, TyGL – a GL-powered implementation of the 2D painting backend in WebKit, the new Wayland port, announced by Zan Dobersek, and a lot more.
With help from my colleague ChangSeok OH, I presented a description of how a team at Collabora led by Marco Barisione made the combination of WebKitGTK+ and GNOME’s web browser a pretty good experience for the Raspberry Pi. It took a not so small amount of both pragmatic limitations and hacks to get to a multi-tab browser that can play youtube videos and be quite responsive, but we were very happy with how well WebKitGTK+ worked as a base for that.
One of my main goals for the hackfest was to help drive features that were lingering in the bug tracker for WebKitGTK+. I picked up a patch that had gone through a number of iterations and rewrites: the HTML5 notifications support, and with help from Carlos Garcia, managed to finish it and land it at the last day of the hackfest! It provides new signals that can be used to authorize notifications, show and close them.
To make notifications work in the best case scenario, the only thing that the API user needs to do is handle the permission request, since we provide a default implementation for the show and close signals that uses libnotify if it is available when building WebKitGTK+. Originally our intention was to use GNotification for the default implementation of those signals in WebKitGTK+, but it turned out to be a pain to use for our purposes.
GNotification is tied to GApplication. This allows for some interesting features, like notifications being persistent and able to reactivate the application, but those make no sense in our current use case, although that may change once service workers become a thing. It can also be a bit problematic given we are a library and thus have no GApplication of our own. That was easily overcome by using the default GApplication of the process for notifications, though.
The show stopper for us using GNotification was the way GNOME Shell currently deals with notifications sent using this mechanism. It will look for a .desktop file named after the application ID used to initialize the GApplication instance and reject the notification if it cannot find that. Besides making this a pain to test – our test browser would need a .desktop file to be installed, that would not work for our main API user! The application ID used for all Web instances is org.gnome.Epiphany at the moment, and that is not the same as any of the desktop files used either by the main browser or by the web apps created with it.
For the future we will probably move Epiphany towards this new era, and all users of the WebKitGTK+ API as well, but the strictness of GNOME Shell would hurt the usefulness of our default implementation right now, so we decided to stick to libnotify for the time being.
Other than that, I managed to review a bunch of patches during the hackfest, and took part in many interesting discussions regarding the next steps for GNOME Web and the GTK+ and Wayland ports of WebKit, such as the potential introduction of a threaded compositor, which is pretty exciting. We also tried to have Bastien Nocera as a guest participant for one of our sessions, but it turns out that requires more than a notebook on top of a bench hooked up to a TV to work well. We could think of something next time ;D.
I’d like to thank Igalia for organizing and sponsoring the event, Collabora for sponsoring and sending ChangSeok and myself over to Spain from far away Brazil and South Korea, and Adobe for also sponsoring the event! Hope to see you all next year!
Design & Goals
Our main goal with the new tablet UI was to simplify the interaction with tabs—read Yuan Wang’s blog post for more context on the design process.
In 36, we focused on getting a solid foundation in place with the core UI changes. It features a brand new tab strip that allows you to create, remove and switch tabs with a single tap, just like on Firefox on desktop.
The toolbar got revamped with a cleaner layout and simpler state changes.
Furthermore, the fullscreen tab panel—accessible from the toolbar—gives you a nice visual overview of your tabs and sets the stage for more advanced features around tab management in future releases.
At Mozilla, we traditionally work on big features in a separate branch to avoid disruptions in our 6-week development cycles. But that means we don’t get feedback until the feature lands in mozilla-central.
We took a slightly different approach in this project. It was a bit like replacing parts of an airplane while it’s flying.
We first worked on the necessary changes to allow the app to have parallel UI implementations in a separate branch. We then merged the new code to mozilla-central and did most of the UI development there.
This approach enabled us to get early feedback in Nightly before the UI was considered feature-complete.
In order to develop the new UI directly in mozilla-central, we had to come up with a way to run either the old or the new tablet UIs in the same build.
We broke up our UI code behind interfaces with multiple concrete implementations for each target UI, used view factories to dynamically instantiate parts of the UI, prefixed overlapping resources, and more.
The new tab strip uses the latest stable release of TwoWayView which got a bunch of important bug fixes and couple of new features such as smooth scroll to position.
Besides improving Firefox’s UX on Android tablets, the new UI lays the groundwork for some cool new features. This is not a final release yet and we’ll be landing bug fixes until 36 is out next year. But you can try it now in our Nightly builds. Let us know what you think!
I am really excited to announce that I’m joining Facebook in January. I’ll be bootstrapping Android UI efforts—frameworks and user-facing stuff—in the London office. There are still a lot of details to sort out but that’s the general plan.
Why Facebook? They have an amazing hacker-driven culture, they’re striving to do open source the right way, there’s a lot of space for experimentation, and they have massive reach in the Android space.
I’m really looking forward to learning a lot at Facebook. And there is so much to be done! I can’t wait to start :-)
I joined Mozilla 3 years, 4 months, and 6 days ago. Time flies!
I was very lucky to join the company a few months before the Firefox Mobile team decided to rewrite the product from scratch to make it more competitive on Android. And we made it: Firefox for Android is now one of the highest rated mobile browsers on Android!
This has been the best team I’ve ever worked with. The talent, energy, and trust within the Firefox for Android group is simply amazing.
I’ve thoroughly enjoyed my time here but an exciting opportunity outside Mozilla came up and decided to take it.
What’s next? That’s a topic for another post ;-)
Recently Groupon announced a new tablet-based platform named “GNOME”. If you’re reading this, you probably already know that GNOME has been a big and popular free software project for the past 17 years, *and a registered trademark since 2006*.
It’s outrageous that a billion dollars company such as Groupon would not have heard of GNOME before. Even after the GNOME Foundation got in touch with them, they insisted and filed more trademark applications .
We have to file formal proceedings to oppose 10 of these trademark applications by December 3, 2014. We will need 80k USD to oppose the registration of the first set of 10 applications. Thus, we need your help to raise these funds!