Thoughts about software development

Archive for May, 2010

Over these past few months, I have tried hard to make Chrome my main browser, but I just can’t seem to be able to get rid of Firefox, and I have now decided that I need to embrace my ambivalence fully.

At this point, I have decided to make Firefox my main browser again but to keep using Chrome exclusively for Javascript heavy pages such as Gmail. Here are some of the things that I really find lacking in Chrome:

Open tab in foreground. Firefox doesn’t do that by default but a handy extension enables it, and while I tend to open most of my tabs in the background, there are times where I really want to jump to that new page right away.

Reload all tabs. Another handy feature provided by the Tabs extension. Am I the only one finding this extremely useful?

Tree Style Tabs extension. I’m still trying to get more familiar with this extension and I wish I could activate it on a per-window basis, but there are definitely times when representing my tab path as a tree instead of a horizontal bar is useful.

AdBlock. I know there are similar extensions for Chrome, but so far, they just don’t work as well as Firefox’s AdBlock Plus, and navigating the Internet without an ad blocker is just too painful.

Smarter multi box. For example, if I have a Google Doc called “Important items”, I can type “docs work” in the address bar and the first URL is the correct one. Chrome’s multibox doesn’t seem to be as good so far.

Dragging and dropping bookmarklets works (Chrome “seems” to work but when I drop the bookmarklet, nothing happens and I end up having to create it by hand in the bookmark manager).

Plug-ins… lots and lots of plug-ins. From a developer standpoint, the Chrome plug-in API is much simpler but from a user perspective, Firefox’s is still very, very much ahead (for example, menu customization was just recently added to the nightly Chromium build).

Getting the title bar back. I really don’t understand why the Chrome team decided that saving twelve pixels was worth losing all the precious information that the title bar provides. I only realized how often I used it when I switched to Chrome. Since then, I’ve been trying to tell myself that I can live without it, but I just can’t. Whether it’s for telling apart a similar site with different titles or tracking internal builds with different dates, I just need my title bar. And I just couldn’t find a Chrome extension that restores it.

Getting the standard menu bar back. Again, I really dislike this trend that Microsoft initiated with the Windows Media Player that puts the main menus in all unexpected places. Not only do I keep looking for the menus in the upper part of the window (or screen, for Mac OS) but even when I remember that they are in a different place in Chrome, I still can’t remember which icon is which. And all this for what? Saving twelve pixels of vertical screen estate? It’s just not worth it. Please, give me back my File, Edit and View menus in the upper left corner.

One of the main advantages that Chrome has over Firefox is that task manager, but it just never delivered for me. While it’s neat to be able to single out a single process run amok (very often, the Flash plug-in), kill that process ends up killing Flash for the entire browser, thereby forcing you to reload all the tabs that are open (not even only the tabs that had a Flash object in them). Admittedly, this is better than having to restart the entire browser, but really not by much.

Overall, it seems to me that the Chrome team has focused exclusively on improving the internals but has neglected the user experience quite a bit. I’m hoping this will change in the next few months.

I have always wondered how CTU did to send pictures, blueprints and all sorts of documents to Jack Bauer. Now I know: they use Gmail! Not only is Chloe O’Brian using Gmail, she’s actually using Gmail on Android!

I’ve been at Google for six years but it feels more like “Two years at Google and four years in a small start up called Android that plans to revolutionize the mobile industry”. I don’t know what’s the most surprising: how ambitious that goal was four years ago or how far Android has come today.

It’s hard to believe that Android shipped its first device about a year and a half ago and at that time, Apple had already sold more than ten million iPhones. Who would have guessed that it would only take Android eighteen months to catch up and pass the iPhone in market share?

In this short period of time, we’ve gone through four major releases (and many, many minor ones, some of which you probably never even heard of), and each new version has been a major milestone that got everyone on the team incredibly excited.

FroYo is no exception, prepare to be blown away by what you will see very soon.

Leaving Google is by far the hardest decision I’ve ever had to make, but I feel that the time has come for me to move on to new challenges.

And for those of you wondering where I’m going, I accepted a job at LinkedIn. As you can see, I’m not going very far (LinkedIn is literally next door to Google) and I’m certainly planning to keep blogging, tweeting and buzzing.

It’s not very often I come across a post that talks about math and programming that is both clever and fun to read. Well, here is one, which attempts to use a compiler optimizer to disprove Fermat’s theorem.

I know, awesome, right?

Go ahead and read the post, which explains both the initial endeavor of the author and also why it could not possibly work. There is also a whole discussion on reddit, if you really want to dig in.

I just wanted to add one more comment to this discussion because I don’t think I’ve seen this mentioned so far.

My observation is that this whole experiment ties into two additional concepts:

The idea of “observable behavior” in compilers. A lot of languages are very serious about specifying this concept very precisely in their specification because it enables compilers to generate even more optimized code. In a nutshell, the idea is that no matter how complicated your code is, if you don’t try to show its result at the end, the compiler will not generate code for it. It sounds obvious in theory but it’s actually very tricky to 1) specify and 2) implement.

Another connection that immediately struck me is related to quantum physics and wave collapsing. The idea is very similar to the one above: in short, an atom is known to be in several states simultaneously as long as you don’t observe it. As soon as you do, the atom “chooses” one state and that’s how it will appear to you. This is the concept that lies behind the paradox of Schroedinger’s cat, which is known to be both dead and alive as long as you don’t try to figure out which one it is.

There are so many commonnalities between these seemingly unrelated topics that one can’t help but wonder if there is not a bigger, broader truth that covers them all.