Skip navigation.

GNOME People

May 16, 2012

16:21

Started the process of getting jiggy with Clojure at work and didn’t like the idea of using Eclipse for my day to day work… so I started looking at how to make vim and clojure get along and came across a great post! Here are the distilled notes plus minor tweaks to get anyone out there trying to do the same thing going:

  1. Download VimClojure (http://www.vim.org/scripts/script.php?script_id=2501)
  2. Download VimSlime (https://github.com/jpalardy/vim-slime)
  3. Extract these files into your ~/.vim folder
  4. Add the following lines to ~/.vimrc:
    • ” Settings for VimClojure
    • let vimclojure#HighlightBuiltins = 1
    • let vimclojure#ParenRainbow = 1
    • ” Send entire file to repl
    • nmap ggVG
  5. Start a repl session inside screen:
    • screen -S clojure
    • lein repl
  6. Open a clojure file with vim and highlight the method you want to evaluate
  7. Press ctrl + c twice
    • For session name prompt, enter ‘clojure’ which is the name of the screen session
    • For window name prompt, accept the default number displayed
  8. The selected code should be evaluated in the screen session
  9. Press ctrl + c, v to get prompt again

NOTES:

  • I chose to start a repl using lein but you can use whatever you’re familar with to get a repl started
  • I have lein inside a directory in my Dropbox as well as all of my vim files and plugins. I then created soft links to them in my $HOME directory which makes this whole thing very easy to access from different systems as long as Dropbox is installed :)
Source: PlanetGNOME
Categories: GNOME People
09:22

Hot on the heels of Daniel Siegel, I've recently submitted my bachelor's dissertation to my university about the development of Bendy Bus. It's a much less impressive piece of work (and not bound as nicely) than Daniel's, but I too will be giving a talk about my dissertation at GUADEC, titled “Bendy Bus: fuzzily impersonating D-Bus services”. Come along to it to learn how to use Bendy Bus to fuzz test D-Bus clients. I might even prepare some slides, or something.

In time for submission of my dissertation, I released version 0.1.0 (and then the inevitable 0.1.1 and 0.1.2 brown paper bag releases) of Bendy Bus. You can get the source on gitorious, and the 0.1.2 tarball on my website. The manual's also available online (as well as in the tarball). Have a play!

(I'll also be giving a talk about libfolks, “folks of the future: more contacts everwhere”; more details to follow later.)

Source: PlanetGNOME
Categories: GNOME People
07:20

I did not find this mentioned anywhere on the Internet. Hopefully someone might find this helpful.

This stupid bug had me confused for the last couple of months. It turns out that the Google-specific btmpl parameter does not work as documented. Neither do they recognize the Nokia N9′s user-agent as a mobile phone browser.

Not unsurprisingly, Android phones work, and so does the iPhone.

Here are the relevant user-agents, in case someone out there needs them.

  • Nokia N9: Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13
  • HTC Wildfire: Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; HTC Wildfire Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
  • iPhone 4S: Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3

It appears as if they are grepping for the names of well-known mobile platforms instead of just looking for “Mobile”. I am surprised because Google does not seem to have an Android branded or iPhone branded page as some people (like Facebook) have.


Source: PlanetGNOME
Categories: GNOME People
06:35

My JSConf 2012 video is out! Check it out:

Visit blip.tv to watch in your browser

The talk is called "Stranger in these parts: A hired gun in the JS corral", and in it I talk about my experiences as a Schemer in the implementation world, with a focus on JavaScriptCore, the JS implementation of the WebKit project.

If you want, you can fetch the slides or the notes. If you were unable to play the video in the browser, you can download it directly (25 minutes, ~80 MB, CC-BY-SA).

Special thanks to the A/V team for the fine recording. My talk was the first one that used the wireless mics, and it turned out there was some intermittent interference. They corrected this in later talks by double-miking the speakers. In my case, it was fortunate that they recorded the room as well, and with (I would imagine) a fair amount of post-processing the sound is perfectly intelligible. Cheers!

Finally, there were a number of other interesting talks whose recordings are starting to come out. I especially liked David Nolen's funhouse of ClojureScript and logic programming. It was pleasantly strange to see him mention Peter Norvig's 1992 book, Paradigms of Artificial Intelligence Programming, because I did too, and I think someone else did as well. Three people mentioning a somewhat obscure 20-year-old book, what are the odds?

I also liked Vyacheslav's amusing talk on V8's optimizing compiler. He actually showed some assembler! Folks that read this webrag might find it interesting. Dan Ingalls' talk was fun too. The ending scene was pretty surreal; be sure to watch all the way through.

Thanks again to the JSConf organizers for the invitation to speak. It was a pleasure to get to hang around the lively and energetic JS community. Happy hacking, all!

Source: PlanetGNOME
Categories: GNOME People
06:15

A new version of Lightspark has been released yesterday. You can give it a try by getting the source code from launchpad. Ubuntu packages should be available shortly from our PPA

Beside a lot of small improvements this new release improves the graphics capabilities, with a focus on Flash features used by games.

Here is the changelog:

* Fixed a few memory leaks
* Improved support for BitmapData::draw
* Support for BitmapData::copyPixels
* Support for soft masking
* Support for memory usage profiling (massif compatible)

Moreover, there has been some work on implementing fully accelerated Stage3D support, it’s still in early design phase... but stay tuned.


Source: PlanetGNOME
Categories: GNOME People
05:20

Over the last couple of weeks I have reimplemented just enough of the C++ libglom code as Java in Online Glom‘s gwt-glom, removing the need for java-libglom (which wrapped libglom for Java via SWIG). It’s now working and deployed on the Online Glom test server.

This makes both development and deployment much easier. It also made the source code all camelCase so it’s not offensive to the eyes of Java coders.

To replace libglom’s use of GdaSqlBuilder, I used jOOQ. That worked well, thanks to its maintainer, Lukas Eder, who was very helpful and who quickly added some API that I needed.

Now that the code is all Java I really hope that more people will look over the code and point out anything that can be improved. I still don’t know Java like I know C++ so please don’t be shy about telling me that I have made mistakes.

GWT, Javascript, and serialization

Removing the use of java-libglom let me simplify the code, because I can now send object, such as LayoutItem, to the client without needing to copy it into a separate LayoutItemDTO object that existed just because the original wasn’t serializable, so it could be sent from the server (Java) to the client (JavaScript, compiled from Java).

However, this raised some new issues. I wanted some of the objects to contain some extra cached data, so that the client code did not have to calculate it itself, often by retrieving some other related object. Right now these are extra member variables in the classes, but that prevents me from splitting the code off into a new java-glom library.

Furthermore, any class that is sent between the client and server must fully conform to the requirements of the GWT Java-to-JavaScript compiler, even if that method will not actually be run on the server. For instance, I tried to add clone() methods, for use on the server, but that broke the JavaScript compilation because it doesn’t have an equivalent for Object.clone().

Those restrictions on the Java code that is allowable on the client side (because it will be compiled to JavaScript) were particularly awkward when the compiler (or Maven, or something) refused to give me clues about what was wrong. For instance, it took me 2 frustrating days to fix this small error by breaking the code apart until only the problem code remained. At other times, there was no real error on stdout, but there were clues (in a variety of hard-to-read formats) in the HTML generated by mvn site. Or sometimes, I could see errors when building inside Eclipse, but not outside.

The GWT system works great, but something is inconsistent about how it shows errors, and it can’t be right that some compilation errors only show up when running, rather than when building.

Next steps

As much as I would like to move on to implementing editing, I need to spend some time now on getting some regression tests set up in the maven build. These must create and run temporary PostgreSQL database instances like I do in the Glom autotools build. For instance, I need to check that the new SQL-building code, using jOOQ, is really safe from SQL injection like the libglom code seems to be.

My recent changes also caused the OnlineGlomService async API to be particularly inefficient, sometimes sending far more data back to the server than should be necessary. I will try to avoid that and try to make this API smaller, to avoid so many round trips.

Source: PlanetGNOME
Categories: GNOME People

May 15, 2012

16:37

As Trever blogged yesterday, the Zeigeist team has been busy with tweaking the DB and the engine. During that process tools and benchmarks have been developed to make the tweaking and testing more interesting. Trever will be blogging about that tomorrow so make sure to check his blog.

Our end goal is  trying to scale the engine to be able to handle a few billion events just as fast as it can handle a few hundred thousand. While we are not there yet we managed to have some pretty nice stable results for the first iteration. A lot of results show more than 100% speed enhancement. In other words a lot of queries from our standard benchmarks now consume more than 50% less time to execute. Here are some graphs of our benchmarks.

Green indicates the 0.9 release

Yellow indicates the new trunk

Most notable performance enhancement is querying Zeitgeist with a specified timeframe (from data x to date y).

 

Same queries with an open timeframe also improved

 

We also have a copy of the Synapse queries benchmarked

The queries here are typical queries used to extract info from Zeitgeist. So right now the team is really happy with the initial results. For Synapse on my local DB (over a year old), all my synapse queries perform under 0.08 seconds. We still can get more out of this. The trick here was improving our indexes and our sql query generator.

Next month we will be going through another iteration.

 

 

Source: PlanetGNOME
Categories: GNOME People
15:07

GNOME 3 introduced a new style of icons we call symbolic. Last year, Meg Ford joined the effort we kicked off with Lapo and did a great job extending the theme coverage, without us having any style guidelines in place yet. This year, we’ll have another Woman Outreach program participant joining the effort, so I’ve edited a little video introduction on how we design these icons along with a little overview of all the icon styles currently in place.

Watch on youtube
Source: PlanetGNOME
Categories: GNOME People
09:20

 

Like every year, I am driving to Berlin this week to attend LinuxTag 2012 to attend the excellent program. If you want to meet up and chat about projects, technologies, Free Software or other things, send me an email or leave a comment with this post and we will arrange for it.

Source: PlanetGNOME
Categories: GNOME People
02:07

this is a pretty big day for me as i am handing in my master thesis today. i was working on it almost, quite, nearly and almost a year (actually a few months less, but you should got this by now). with this final act of my computer science and psychology studies i am also finally leaving those nice student rebates and student parties behind. ghosh, what nice memories i do have here. shoddy cafeteria meals, always short on money, piles of work and bad weather when you got some free time. just some of the reasons why the studies are the best years of your life, don't you agree? ;)

but i know, my personal life isn't as interesting as this: i will present parts of my thesis during this year's guadec. but more on that later. for now just this: it will be legend - wait for it - ary!

my thesis has the title "typical development processes of free and open source software projects" and aims to provide a primary scrutiny into the development processes and project management strategies of free and open source software projects. several free and open source software projects were analyzed systematically in order to identify concertedly models and processes. gnome was of course under these projects. the results were very interesting and i will try to present them to you in near future, dear reader.

until the final evaluation however i am not allowed to publish the thesis. but my professor and i are looking for ways to publish the results in near future. so in one way or another you will shortly be able to skim through my work. if you are really interested in the topic, just drop me a note, and i will arrange a "proofread" copy for you, just for you.

with a master of science in my pocket i am looking for a great place to bring in my talents and skills. i am already in contact with some awesome companies and organizations, but if you do have some offers about or including free and open source software, project management or innovative research and products, i would love to talk to you!

Source: PlanetGNOME
Categories: GNOME People

May 14, 2012

10:51

In the last few weeks, as part of my work here at Igalia, I’ve been playing a bit with the concept of hybrid applications. In this case, I’ve created a basic prototype of a mail application, with its user interface completely written using JQuery Mobile, and with backend code in C and GObject. The result is iwkmail.

Screencast of iwkmail in action

Though it’s a simple experiment, I’ve added some mail basic functionality, so I could try to catch as much as possible of real requirements for how  we could improve the developers WebKit+GNOME experience creating hybrid applications.

My first conclusion is that it’s surprisingly easy and fast to develop such applications. Second, I could reuse tons of source code and modules from my old projects. This approach surely provides a way to create cool GNOME applications, using the most fashionable web client technologies.

So, you’ll get:

  • Browsing messages
  • Read/unread flags
  • Deleting messages
  • Creating and deleting mail accounts.
  • Storage protocols supported: IMAP and POP.
  • For sending mails, we support SMTP. There’s support for an outbox holding the messages to be sent.
  • A plain text composer, allowing to add attachments.

The UI is completely written in Javascript + HTML, using JQuery Mobile.

The backend side is done using Camel library inside Evolution Data Server, so we rely on a library well tested for more than 10 years.  All the code related to this is implemented in C+GObject, and I reused a good set of code from Modest, the default mail client for Nokia N810 and N900. I’ve got involved on its development for 3 years, so that’s a bunch of code I know well enough.

For communication, I use the AJAX-like JSONP protocol, and custom SoupRequest URI scheme handlers. Basically I expose some methods as iwk:addAcccount, iwk:getMessage, etc, and arguments are passed as usual in a web request. The result I obtain from this calls is a JSON object with the results of the call. Simple, and works very well.

I’ve pushed the work on github: https://github.com/jdapena/iwkmail. Feel free to try it!

Oh, I guess it’s very obvious that I did not spend too much time thinking on the project name… So, anyone proposing something that matches the IM acronym (I don’t want to rewrite the class names!) would deserve a beer.

Last, lots of thanks to Igalia for giving me the opportunity to do this experiment. As usual, fun stuff to work with.

Source: PlanetGNOME
Categories: GNOME People

May 13, 2012

14:05

What I’ve done this week:

  • split the language-support-cpp-java plugin in an indentation-c-style plugin and a language-support-cpp-java plugin without the indentation part
  • read the documentation about the plugin system of anjuta

Splitting the plugin took more time and was more challenging than expected. The main problem was to understand what each method does. So I had to read much documentation. I’m not already done with this work, but I’m on a good way…

Source: PlanetGNOME
Categories: GNOME People

May 12, 2012

08:35

I just uploaded the Spanish translation of the FOSS localisation manual I wrote a while ago. Many thanks to Lucía Morado Vázquez and Silvia Rodríguez Vázquez for their work to make it happen.

It is titled "La localización al servicio de un cambio sostenible" (PDF) with subtitle "Guía de localización de software libre y de código abierto". The manual is now available in four languages (English, French, Arabic and Spanish).

I still need to find a way to publish it with the covers — we had to create the covers as separate PDF documents for the sake of our printers, and the first way I tried to combine the documents resulted in hyperlinks being lost in the resulting PDF.

Speaking of printing: we printed copies of the other three languages for our training events around Africa, but the Spanish version came later and was completely a volunteer effort separate from the activities of ANLoc. What is the best way to try to get some of these printed? I'm sure a few people would be interested in a hard copy.

Source: PlanetGNOME
Categories: GNOME People
05:53

That’s right, it’s finally out! Thanks go out to all our contributors for the great work (there’s too many — see the shortlog!). The highlights of the release follow. Head over to the announcement or release notes for more details.

  • Dynamic sample rate switching by Pierre-Louis Bossart: This makes PulseAudio even more power efficient.

  • Jack detection by David Henningsson: Separate volumes for your laptop speakers and headphones, and more stuff coming soon.

  • Major echo canceller improvements by me: Based on the WebRTC.org audio processing library, we now do better echo cancellation, remove the need to fiddle with the mic volume knob and have fixed AEC between laptop speakers and a USB webcam mic.

  • A virtual surround module by Niels Ole Salscheider: Try it out for some virtual surround sound shininess!

  • Support for Xen guests by Giorgos Boutsiouki: Should make audio virtualisation in guests more efficient.

Special thanks from me to Collabora for giving me some time for upstream work.

Packages are available on Gentoo, Arch, and probably soon on other distributions if they’re not already there.

Source: PlanetGNOME
Categories: GNOME People

May 11, 2012

14:10
Our "support portal" and any thin client updates go hand in hand.  We control features centrally and then they are pushed to thin clients.  My current biggest project now that the GNOME desktop is deployed and LibreOffice is live is merging in all of the features we wanted to deploy in our next thin client update.  I have finished the code to allow Kiosk/POS type connections to Microsoft Windows without requiring a connection first to the City system.  For those at our Recreation sites that move around between workstations, this will be a big help.  I also have added a Help button from the thin clients that allow the users to send us email without first logging in; and they can check on the status of the servers.  We placed our reboot schedules in ICS files for Evolution users, but now the thin clients will be able to display this information as well.  I'll blog more about this with shots when it's all finished.

One feature request that's coming in this next release is the ability to support dual monitors beyond just [ LANDSCAPE ] [ LANDSCAPE].  We'll be adding [ PORTRAIT ] [ PORTRAIT ] and [ PORTRAIT ] [ LANDSCAPE ].  We are all on the same video cards, so once I get it working it deploys to everyone else with the same Xorg files, nice.  The support portal is being modified to understand what combinations work and set the appropriate configuration files for them to download at next OS update. I spent some time hacking on the thin client detail screen which now better understands the monitors, their type and what exactly is displaying on each half.  When requested, the portal breaks their current screen into two pieces and then displays it on the UI on the appropriate monitor.  Mouse over on the monitor displays all supported resolutions, and the new OS build queries their devices and returns the make and model of monitor.  This is going to save us lots of time.



I cleaned up the [ Summary ] tab which displays actionable tiles of user problems.  These are not warnings, but issues where it's mandatory for action to be taken.  I have cleaned up exactly what is displayed and done some alignments of the widgets.  In the shot below it's alerting our support staff that some printers have stuck queues, that some users had some software problems because of missing network permissions and that some users had the power drop on their workstations.  Hovering mouse over these tiles displays the problem along with the most likely way to resolve the issue.


I monitor support calls and have hallway conversations with users all the time.  The intermediate UI that comes up when you double-click on a picture from Nautilus had some issues.  It's always interesting to me to see how users react and use software, and the things that I didn't think of during the design stage.  Very often I have better ideas, but am always trying to work these issues within the hours of the day.  These changes require very few coding changes, it's just mostly about the presentation and UI.  The show below shows the old UI (left) and the new one (right).  The new UI is not yet live and a shell right now in Glade until I feel all the changes look good and then I'll move the code over -- which will be easy.  If you are interested in user interaction, here are the changes:
  • Users seem to like having art on each button, they seem to remember steps by artwork and not the words; each button now has art.
  • The users were not finding the button to PrintToSelectedPrinter easily, so the button was moved to the right of selected the printer.  No call is made to the GNOME printer UI, it has way too many options for this purpose.
  • The users were not seeing easily that you could DeliverWithEvolutionBypass (SMTP dump to Groupwise) based on the entry email box below.  This should be more clear.
  • The 'Size of This File' area while a good start; did not really tell them anything they could understand and use.  The new UI will alert them of "suitability" with Evolution and LibreOffice.  Everyone is shooting 10 megapixel now which is not needed for email and document construction.  I'll make generalized statements (Good, Too Big, Too Small, etc) about the pictures.
  • The functions that allow you to alter a photo are now under the photo; the functions to do something with the resulting output are all on the right side.
  • Users with dual screens were taking screenshots and then wanting to only print 1/2 of the screen.  The current code would print the whole width landscape which is too small.  Buttons are now available to crop the screen.  Going into GIMP and doing this by hand is too many steps for such a basic function.
  • Various alignments and layout techniques improved because I'm slowly learning Glade as time allows.


Once the code is done, I'll connect it for my user account only for testing and then release it to beta testers for wider use and then deploy citywide.  These changes are super easy on a centralized server and are literally just commenting in and out a few lines.   I'll be interested to obtain their feedback.
Source: PlanetGNOME
Categories: GNOME People
08:52

Once upon a time, three intrepid individuals made Empathy publish your location to your contacts, and show your contacts’ locations on a map. Today, I noticed that the Location tab is missing from Preferences—I guess Debian’s Empathy is built without GeoClue support for some reason—and as a result the map looks rather forlorn, what with none of my contacts publishing their location:

A map is an obvious demo to build, but I don’t think it’s that useful (even when it had more than zero contacts on it, I never looked at it).1 So what would be more useful? For starters, here’s some “relevant art” from Skype, showing a contact’s local time in their tooltip:

Adding that to Empathy might be a useful first step. But unlike Skype, it’s possible to use this information outside the IM app. So, if I spend a lot of time chatting to friends in Melbourne and New York, why not automatically add those timezones to GNOME Clocks? (The last two mock-ups in that section look particularly bare—perhaps the names of some contacts could show up in the space where “local time” does for Boston.)

For this to be useful, of course, someone would have to fix the publishing of location information in the first place. But if fixing it produced a more compelling feature than a map, it would not be such a thankless task.

  1. Top designers agree! To quote Allan Day, “I could live without contacts on a map ”.
Source: PlanetGNOME
Categories: GNOME People

May 10, 2012

15:16
After a long holiday, I completely forgot to show you this, my latest small contribution to GNOME. From Gran Canaria, at the University of Las Palmas de Gran Canaria (ULPGC) with love...

Source: PlanetGNOME
Categories: GNOME People
14:22

I am pleased to announce version 3.2.1 of the Python bindings for
GObject. This is a maintenance release for the stable branch bringing
you a couple of bug fixes.

Download

http://download.gnome.org/sources/pygobject/3.2/pygobject-3.2.1.tar.xz

sha256sum: 0f07401289fa33e8caee7a9342f5c838bb44cd0a386cb99093505edb5e42817aHighlights
  • Add missing override for TreeModel.iter_previous() (Martin Pitt)
  • GSettings: allow extra keyword arguments (Giovanni Campagna)
  • pygtkcompat: Correct Userlist module use (Jose Rostagno)
  • GTK overrides: Add missing keyword arguments (Martin Pitt)
  • pygi-convert.py: Drop obsolete drag method conversions (Martin Pitt)
  • Fix len_arg_index for array arguments (Bastian Winkler)
  • Add missing GObject.TYPE_GTYPE (Martin Pitt)
  • Add GtkComboBoxEntry compatibility (Paolo Borelli)
Changes

http://download.gnome.org/sources/pygobject/3.2/pygobject-3.2.1.changes

About PyGObject

GObject is a object system used by GTK+, GStreamer and other libraries.

PyGObject provides a convenient wrapper for use in Python programs when
accessing GObject libraries.

Like the GObject library itself PyGObject is licensed under the GNU
LGPL, so is suitable for use in both free software and proprietary
applications. It is already in use in many applications ranging from
small single purpose scripts up to large full featured applications.

PyGObject now dynamically accesses any GObject libraries that uses
GObject Introspection. It replaces the need for separate modules such as
PyGTK, GIO and python-gnome to build a full GNOME 3.0 application. Once
new functionality is added to gobject library it is instantly available
as a Python API without the need for intermediate Python glue.

Source: PlanetGNOME
Categories: GNOME People
12:38

Turns out I’ll get to spend the next two weeks in Tokyo, starting next Sunday. It will be third time I visit this weird and fascinating place, but I’m still excited to be there again.

Some time ago, in another trip, I proposed anyone who might be reading me to meet up and talk about all things GNOME or WebKit. Turns out I met some interesting people that way (hi everyone from Caixa Mágica!), so let’s try again: if you are reading this, are in Tokyo, and would like me to talk to your friends/colleagues/whatever about GNOME or WebKit I’d be happy to do so. We can also improvise a hackfest or anything else we can come up with. In exchange I only ask of you to show me around (always better with a local) and an unwavering commitment to freedom and justice.

Drop me a line at xan AT gnome DOT org, or leave a comment in this space.

Source: PlanetGNOME
Categories: GNOME People
12:20

Hello Planet!

This summer I’m going to work on overhauling the Apps view in GNOME Shell. In this I’ll be assisted by fmuellner, who is kind enough to be my mentor. Thanks Florian!

First of all, I will remove modes from the overview. Originally, the overview was intended to have more modes than the two current ones (Windows, Applications), but it was found that this would probably just add unwanted clutter. Therefore I will be removing the Apps mode from the overview and make the Apps view accessible through an icon in the dash.

Secondly, I’ll be making the Apps view paged. It will replace the current predefined categories,  Users will be able to order their apps in pages, making it easier to find the app they’re looking for – after all, they’re the ones that put it there.

This animation by jimmac will give you an idea of what I’ll be building this summer.

I’m really looking forward to this summer, and to working with the talented people who design and build GNOME Shell. If you have any questions, comments, ideas or just want me to see some pictures of your newborn kittens, don’t hesitate to leave a comment, ping me on gimpnet irc – I’m joost, I usually lurk in the #gnome-shell, #gnome-design, #soc, #gnome-hackers and #gnome-love channels – or add to my project’s wiki page - https://live.gnome.org/JoostVerdoorn_Overhauling_the_Apps_View.

Cheers!

Source: PlanetGNOME
Categories: GNOME People