You are viewing [info]cgwalters's journal

Previous 10

Mar. 17th, 2010

This blog has moved

Livejournal seems a bit like a sinking ship...so I jumped off. My new blog is http://blog.verbum.org. (And yes, it sucks that wordpress.com doesn't support <video> yet, I was a bit deceived before I signed up by the fact that wordpress.org does...but I'm hopeful).

Hot on the heels of the previous tarball

A quick note, dbus 1.2.22 is out, see the release announcement. OS vendors should use this for GNOME 2.30.


I also wanted to give a shout out to the cool patch from GNOME Shell contributor Maxim Ermilov, which lets you drag and drop windows from the "linear" workspace view, by temporarily zooming out. We had this in the "grid" view for a while, but hopefully this functionality will let us focus on making linear the central view.


Maxim did this in a few hundred lines of JavaScript. I've noticed a distinct lack of contributions from some of the old-school GNOME hackers, and I'm just saying...if he can do it so easily, well, you guys are getting schooled by the new kids on the block.


Video:

Mar. 1st, 2010

Math is hard

Apparently, someone decided to go shopping instead. But really guys...really?

Feb. 12th, 2010

In which new tarballs appear

HotSSH 0.2.7


So I took a bit of free time to fix up some things in my semi-toy project hotssh. If you like it, you should upgrade since this release fixes some major bugs with the connection tracking, and some more minor things.


The project's at the point where though if I wanted to do anything noticeably more compelling, I'd have to either take the leap of using a real SSH library (maybe libssh?) rather than invoking OpenSSH as a subprocess. The problem is that gets into a lot of complexity in trying to stay in sync with whatever OpenSSH does (key management, known_hosts etc.). Probably someday though.


dbus 1.2.20


In the category of less user visible but probably more important, a new stable DBus is available. There are fixes larger and smaller (the real changelog is from 1.2.18 which was a paper bag release). I think one of the most important for mobile Linux users is the patch to switch to the monotonic clock; basically DBus will be more reliable if you suspend the system or reset the system clock. Besides other reliability fixes, there are some other small nice things like a better dbus-monitor. Thanks to Tom Hughes of Palm for the former, and Lennart Poettering of Red Hat and Will Thompson of Collabora for the latter!


And now back to some more user-visible GNOME Shell work; as Jon mentioned it looks like some new contributors are outpacing me, while I've been working on some of the underlying St toolkit infrastructure. Time to catch up!

Jan. 7th, 2010

On the Fedora Board

Now that I'm on the Fedora Project Board, you may be wondering what my plans are. The first answer is - ideally - not much! Ideally, no one posts semi-nude material on the planet, we all cooperate nicely on the mailing lists, and in general the construction of a Free Software operating system and applications basically runs itself, and I can spend most of my time working on code too. However, we aren't quite in an ideal state, so let me give you a sense of my thoughts and goals.


First, at a high level, I'd like Fedora to be more like Mozilla, which is arguably the most successful Free Software project ever. They do a lot of things extremely well, and we would do well to learn from them. I'll elaborate a bit more on this later. But I think a lot of us inside the project should ask ourselves "How does Mozilla do it"?


Second, I'll do all I can to prevent or work through intrapersonal conflicts inside the project. These have been a very serious problem for us, and we have to remember that we share the same goals. Being on the Board doesn't give me any more actual powers here at the moment, possibly just a slightly higher platform from which to say, pretty please. (I have personally been part of the problem in the past, and that's something I've been trying very hard to fix).


Third, be a part of the vision/what-is-Fedora/target audience discussions. I have a fairly strong opinion on these in general, which let me give a one sentence description here:


Fedora - A project to produce a Free Software general purpose operating system and applications through the process of rough consensus and working code.
Target Audience - Ok, this one is hard to fit in a single sentence, but I think the current proposal is a good start.


Finally, as mentioned earlier, spend most of my time on the code!

Jan. 4th, 2010

Apparently it didn't keep the doctor away, but...

Andre Klapper did a neat summary of GNOME Bugzilla activity and I ended up with an average of exactly one patch submitted to GNOME a day for 2009. Cool! A fair chunk of that is probably tweaks of existing patches re-submitted, since git bz makes it so easy.


Looking forward to 2010!

Dec. 7th, 2009

FUDCon Toronto, on the bus

At FUDCon Toronto 2009, finally got a reliable connection at the hack room to give an update. On the bus from Westford to Toronto, I spent some time optimizing the GNOME Shell JavaScript engine Gjs, specifically how we do invocations from JavaScript into our C core.


As always, sysprof is an a great tool, and revealed we had some relatively low-hanging fruit. (Side note - in Fedora 12, sysprof no longer requires an external kernel module, which is awesome). Said fruit was partly in Gjs, partly in the GObject Introspection layer. We could clearly be doing more caching in the latter, but Gjs was also using the basically toy/demo invocation function g_function_info_invoke.


I've now got it so the invoker can take a bunch of JavaScript jsval pointers, and schlep them more directly into libffi argument types. The end result is currently a 25% speedup on my benchmark, which is fairly good as far as 5 hours in performance work goes. I'm now looking at some other bits, and I think I'll be able to squeeze out another 7-10% at least with just another hour or two of work.


Now, in the the farther future, I could imagine teaching SpiderMonkey's JIT compiler about how to invoke directly from JS to C (and the reverse); the amount of generic work we still do to take say a single double across is fairly high, but the JIT could know about the platform ABI, and be able to trace right up until a native method, which would be a large speedup.


And for now, I'll leave you with a picture of a tasty waffle from this morning:

From FUDCon Toronto 2009

Dec. 2nd, 2009

Netbook in the coal mine

For a long time my primary workstation was a (now 3 year old) Dell Inspiron E1705, or "bricktop" as ajax liked to call it. However the hinge broke a while ago when I closed my car door while the bag was too close, and when the laptop started to fall apart I decided to get a new machine. Actually, I got two. The first thing I did was get a serious desktop computer, a Dell XPS 630. It's quite a beast, especially since I got 8GB of RAM with it. I pretty typically have over 2GB of memory used purely for page cache, which is probably my entire working set of files. It's hooked up to a nice 24" Dell 1920x1200 monitor. This computer is named megatron.


Needless to say, the machine is fast and nice to use. However, it's rather unrepresentative of the general personal computing space. So I wanted another machine that was mobile, and also closer to what "most" people use. So I picked up a MSI Wind U123, known as pocket. It has just 1GB of RAM, which is probably the realistic minimum we want to support going forward (ideally we'd be workable with 512MB, and we probably are if you're just running one application or one or two websites, but...). The machine also has an Intel 945 video, which is also near the lowest end graphics card we'll be supporting for GNOME Shell.


The difference between the two computers is rather extreme, but I use the netbook very often, and working on it has forced me to optimize some things in the shell. It serves a similar role for performance issues that canaries used to do in coal mines (hence the title of this post). Specifically, I've been working on search performance, with fairly good results. We had a few sillies in the old search system like creating lots and lots of ClutterActors we'd never display, not caching lowercased strings, etc. (the other goal by the way of my search work is to move us closer to the current search mockup, which should be cool).


But the biggest performance problem I've been running into so far is synchronous I/O. A lot of GNOME libraries like gnome-menus were designed for gnome-panel, which typically you don't interact with often, and so it's not a big deal if the process is blocked. However if the shell is blocked, because we're acting as a compositor, we won't repaint the desktop or process input, which is a serious user experience problem. An example of this was that we would synchronously stat (check for existence) of recent documents; this could easily take several hundred milliseconds if the data isn't currently in the kernel cache.


I've been reworking our docs handling specifically to be smarter; we use async I/O now, and only stat ones we're actually going to show in the UI. We could be smarter still, but this has helped a lot. GIO has really nice APIs for this kind of thing.


I mention this for two reasons; first, just because you might be interested in a status update on Shell work. The second is because I'm hoping to Real Soon Now land my extension system patch, so if you create an extension using it, for a good user experience, you'll need to be very careful about I/O too =)

Oct. 13th, 2009

It's coming

GNOME Summit went really well, and I had a great time. One thing that I was really heartened to see is that we've agreed on a GLib/dbus plan, and this will enable a number of cool things. First, dbus-glib is just not very good, and we've needed a better story. I hadn't realized before just how much nicer GVariant can make doing DBus calls. But beyond that, having DBus underneath the GTK+ stack will better unlock things like GApplication which will in turn let us do nifty things like exporting GtkAction over the bus. If that's still a bit abstract, look at say Stuart Langridge's post on Linglish.

Sep. 1st, 2009

Pay no attention to the processes and X Windows behind the curtain...

A major change we're trying in the GNOME 3 Shell is to be application-based instead of window-based. In this we'll be in good company with newer releases of other operating systems, but it's still a major change. What I want to explain in this blog entry is what that means from a user perspective. For the developer perspective, see this wiki page.


Let's first look at one of the most venerable (and yet apparently still obligatory) applications, the Calculator. In GNOME 2, launching the calculator looks like this:


From GNOME Shell

Launching Calculator


When we click on that menu entry, the application is started (for more details about under the hood, see the linked wiki page above). The visual result is this:


From GNOME Shell

Calculator and the window list entry


There's a window for the application, and a task list entry. Now in GNOME 2, if we go to the menu and choose Calculator again, we get this:


From GNOME Shell

Two calculators


Technical people will know that under the covers, there are two gcalctool processes, each of which is creating one window. What this example emphasizes is that in GNOME 2, the bottom panel has a list of windows (or tasks), not applications.


Moving on to GNOME Shell, the "window list" and "menus" part are merged into the overview. Let's take a look at the application well when Calculator is not launched:


From GNOME Shell

GNOME Shell overview application well


Here I've added Calculator to my favorites, so it always shows up. It's not running yet. When I click on it, the active application at the top immediately changes to show that (GNOME techies: this replaces startup notification), and then the widow appears:


From GNOME Shell

Running Calculator in GNOME Shell


So now that Calculator is running, let's go back to the overview and see what changed there.


From GNOME Shell

Application well, with Calculator running


You can see that the Calculator gained a glowing status indication, like the other applications I had running already. When I click on that icon again, I am switched to the running calculator window:


From GNOME Shell

Looks exactly the same!


In other words, it looks exactly the same, it just shows you the window again. (Under the hood, the program is not re-executed, there won't be multiple gcalctool processes, etc.)


Ok you say, but Calculator is a pretty boring application and you don't use it anyways. How am I making your life better? Well, there are two major things.


One of them is that many programs fail in some obvious and other times less than obvious ways if you click the menu entry twice in GNOME 2 (technically, by default this will start two processes). They'll overwrite each other's data, etc. For very few instances does it make sense to have multiple if the app is not explicitly designed for it, and this will avoid you accidentally launching two. Personally I get annoyed when I accidentally launch two xchat-gnome instances and appear on IRC twice.


The second improvement here will come when we get a bit better application integration; the mockup we'd like to implement for say Firefox and multiple windows looks like this:


From GNOME Shell


This needs application-specific work though.


As a brief unrelated aside, I think recent Chromium builds with the tabs-in-window borders (technically, client side decorations) looks cool fullscreen in GNOME Shell with the application menu:


From GNOME Shell

Chromium in GNOME Shell


Next post I'll talk about how GNOME Shell will save you time and get you back into your applications faster.


Creative Commons License
This work is licensed under a Creative Commons Attribution 3.0 United States License.

Previous 10