Archive

Archive for the ‘Uncategorized’ Category

Nokia buys Trolltech

January 28th, 2008

This is shocking and confusing. What is the future of Qt now? What is the future of Maemo? Will Qt get merged with kdelibs? Nobody knows at the moment, but I hope (rather naïve of me) that this offer will not get accepted by the board of directors. Trolltech can do better than letting Nokia swallow them.

Uncategorized ,

Knuth is 70

January 11th, 2008

I’d like to wish him long long years of life, so that he can finish TAoCP!

And noone of my colleagues knows him — this is extremely sad :(

Uncategorized

A case against tabbed browsing

January 7th, 2008

Have you ever thought about tabbed browsing? Have you ever wondered why we actually need it? Why does just about any big application on the planet create tabs inside their main window? We are using a “windowing system”, right? Why not just go with windows instead?

The answer to this question is “Because tabs have made our browsing experience bearable.” But in the whole awe of excitement about some relief, most of us have forgotten to explore the real reasons why our experience sucked big time in first place. And the answer to this more fundamental question is: tabs (and also MDI) just weaken the symptoms of sicknesses called “task bar” and “window management”. Lucky MacOSX users suffer more from the latter, Linux users from the former, Windows users take the whole blow as usual.

If we forget about the performance hit when creating a new window using modern widget toolkits — which in itself is a rather different subject —, we’d conclude that all tabs do is grouping windows of some application into windows, supposedly creating some kind of context by doing so. In reality, all these windows are grouped using tabs because the would otherwise clutter our precious task bar (which seems cluttered just about anytime when more than one window is open) and also make switching between them a pain. But in our age of web applications and 3D desktops this approach does more harm than good.

Let’s assume I have a Quicksilver-like window selection. That’d mean I press a shortcut on the keyboard and start typing in the name of the application I’d like to switch to. Now, if I wanted to look into my mail inbox, instead of selecting GMail’s window directly, I’d have to select the Firefox window and then select my GMail inbox using Firefox’s internal tab selection system. Apart from being unintuitive and using twice as much typing and clicking than necessary, additional shortcuts inside Firefox deprive me of several possible additional global shortcuts. Since the shortcuts used are not standardized across applications (Opera or Eclipse might or rather will be using other shortcuts), I’d have more shortcuts to learn, less global shortcuts to define and also I will be making mistakes from time to time, which will lead to some frustration and lower productivity.

Another example: I’m watching some video on YouTube. Since it’s just a screencast, I’d just want to “keep an eye” on it, so I’d set the YouTube window to 50% opacity and also to “always on top” and look into some other web-page, like a discussion on Slashdot. Or rather I could have done this, if it has actually been a window in first place. But it’s not, I’m using tabs like everyone else, since windows produce a lot of clutter. No, sorry, no detaching tabs for you. I’m screwed in this case, possible productivity is killed.

I could have opened a new window and copy&pasted the URL, but I have to admit: deciding between windows and tabs for each website is not something I’d like to think about, especially not when I’m clicking on a link in an IM window (opens in new tab by default). I don’t really want to teach my grandfather about the concept of tabs either. It’s two different presentations of the same concept — it’s actually quite confusing to have “window selection buttons” a.k.a. tabs in the task bar and also in the application, but we are used to it. We do not ask questions, we are glad about every tiny bit of improvement. But we should be asking questions and striving for more improvement, since we are good at what we do and want to be better all the time.

The main question we should have been asking in this case is a generic one: why the hell does my web browser do window management?

UNIX folks always chant “One tool to a task” and also “He who doesn’t know UNIX is bound to reinvent it”. If we follow this principle, there should be an application completely dedicated to window management. Might seem like a stupid idea to Windows folks, but in X11 Window System, there is a whole concept called (surprise!) “window manager” 1. Let’s use it, right?

Here we have a problem: almost none of these window managers are worth their name. Most don’t make interaction easier for the user, some don’t do much window managing at all! All they do is provide some decorations for the windows (shiny themes!) and also some buttons and, if you are lucky, keyboard shortcuts for switching/maximizing/shading them. There is rarely some pre-configuration for positioning possible (“I’d like all of those Firefox window maximized por favor and please put all terminals into some available desktop space if present”), but that is what differs a window manager from a decorator. Real window managers with almost unlimited possibilities are called ”sawfish”, ”ion”, ”xmonad” etc. It’s no wonder that all of them are “weird” in some way. They posess the power to improve people’s productivity greately, they just require some dedication from the users.

One application for one task. There might be some broad or narrow definitions of a particular task, but in general a window manager should be managing windows (sorting, tabbing and positioning them, if you like to) and a browser should be browsing the web. Otherwise, we’d have a clash: the web browsing expert team would be designing my desktop experience, which is like sending some gardeners to chop some wood — concepts are similar, but not similar enough to have expertise. And everyone wants the best tools for the job built by experts in that particular field, right?

Have you noticed the new Mozilla “product” called Pulse? Everybody seems excited, since it’s actually what everyone wants. You tell your computer what you want (“I’d like to check my mails at GMail”), your computer knows it’s a web-page and leads you to it. For you, everything is transparent. You are using your OS to start a task you know by name and then you are using it. This could work for about any page in the web, not only for “big” web applications. It’s all that is needed when the whole surrounding infrastructure is sane. Right now, it is not, but nobody seems to see a reason to improve and that’s a really sad thing.

To sum it up (again): Firefox, or rather any application with tabs, should forget everything about tabs or even windows. Your system should be able to group windows if you want to and the way you prefer 2. Your task bar (or whatever you are using) should be able to present you the information about running applications in the way you want. And all three of them should be produced by different expert teams. If neither your task bar nor window manager are up to the challenge, you are either screwed (proprietary world) or it’s about time you file a couple of bug reports (free world).

Let’s innovate in window management, in visualizing running applications and switching between them and let Mozilla and other teams concentrate on fixing bugs in their core businesses.

  1. The mere fact that there is such a thing accounts to X11 being so old — X11 is an example of true UNIX spirit. I don’t think it’d even be network-enabled if we had to create a windowing system from scratch today.
  2. There are certainly some unsolved problems with this approach, since, well, nobody thought about that. One obvious case is “Undo close tab”. What we’d do about that? One way would be making it a OS-wide feature. How many times have you closed a tab occasionally? Now compare that to the number of times you closed an *application* occasionally. Your ratio may vary, but both cases are very common and actually semantically equal. How many times have you deleted a wrong file? We do have a solution for that: a “Recycle bin”. It has a couple of shortcomings, since it’s not implemented on system level as opposed to application level, but it works. Why not apply the same principle to working applications? Because it’s difficult. It’s about as difficult as virtualizing operating systems — you’d have to snapshot the whole application memory, but we can’t do that properly, since we do not know the time point at which it has to be done, except maybe for when the shutdown of the application is requested. But there is an another way: we could have some system log for applications. Each application has a unique process ID and each state of the application could be saved and restored by the application itself (especially when it’s a simple UNIX-like application). Every application could save its state just before it’s shut down and provide some API for starting it in a particular restored state — there you go, you have a complete “Undo closed application”. Implementing this system would be as simple as adding an API to existing session saving systems in desktop environments. That’s just a small idea from a guy who doesn’t do any system programming. But the first step in solving a problem might be realizing there is a problem. Don’t you wish bringing back application was a bit less painful than opening them again?

Uncategorized

MusicBrainz is moving to Python :)

January 4th, 2008

Look here and here. That’s actually just about enough that has to be said. Perl is on the way out, CherryPy and Mako are coming in. Since the very best changes are coming in this way, and MusicBrainz will actually pay someone next year to work full-time on the server part (and there are a couple of obvious candidates), I’m really excited about MusicBrainz finally taking off 2008. And since it’s Python, I’ll try participating in the server part.

Uncategorized

Unorthodox opinion of Rails

January 1st, 2008

Wow. Just “Wow!” You just don’t read so much frustration and profanity on one day all too often. Both of which seem reasoned:

With Rails I get scrawny cock suckers with carpal tunnel syndrome talking to me like they’re gonna eat my young. Their feeble PHP infected minds can’t grasp advanced shit like objects or closures. When you combine stupid businesses with stupid people using a stupid framework based on a big fat fucking lie on a shitty platform you get the perfect storm of dumbfuck where a man like me can’t find work.

Uncategorized

Practical Common Lisp (PDF)

December 24th, 2007

If you are looking for the PDF version of “Practical Common Lisp”, which is not anymore available from the “usual” address at apress.com, you can use this link: http://www.apress.com/resource/freeebook/9781590592397

Alternatively, go to apress.com, search for “Practical Common Lisp” and look for “Free eBook download” link in the left sidebar.

Uncategorized

Loving and hating Rails

December 24th, 2007

I’m actually trying to get the grasp of Ruby, but I have a hard time liking it. It’s mostly about people — Ruby itself seems a nice language, but Rails’ community is getting on my nerves. I haven’t seen many things that made me go “WTF?!?”, which could be attributed to pure Ruby, most go to Rails.

Let me give you just one example.

Every now and then I’ve tried to find some information on deploying Ruby and its “gems” system-wide. Apart from me hating the whole concept of “gems”, which rather defeats the whole package management of Linux and MacOS X, it seems to be possible, but at a very high price. Ruby fanboys like their local repositories of “vendor” code. Look at this:

But I highly recommend to freeze
rails (and any other gems you use) in vendor/.

Firstly, your app works with these versions correctly. Can you guarantee
that if a sysadmin decides to upgrade some gems (or downgrade one for
another app?) that your application still works as expected.
[...]
I think freezing all that stuff is just great to do. As far as I know
there are no performance downsides to this.

These people seem to have no clue about security. They don’t have a clue about why package management is good. All they care about is their MacBook, their TextMate und sliding down their Rails (oh, shiny!) Apart from wasting a lot of disk space for all of their “freezing”, there are two main things that piss me off at this stage.

First, it’s the inability to keep their own API stable. Either that, or you shouldn’t be using gems, which are in alpha on production servers. It doesn’t bother Rails advocates enough, it seems. Rails is now at 2.0 and there is still no indication there is any kind of stability. Every other product cares about their users and tries to keep all 1.x version compatible and break the APIs only at 2.x. At Rails the policy appears to be “minor version: minor breakage, major version: major breakage”.

Second problem is the administrator job, which can become a nightmare with Rails. Guys, have you ever heard of a thing called “Security”? Imagine a critical security error in one of Rails versions. A good administrator has to worry about upgrading all of available web servers and guess which servers he won’t be able to upgrade properly? Right, Rails ones, since there might be thousands of separate virtual servers with separate Ruby and gems collections. I don’t envy them. I am actually with Debian on this, who issued a position paper on RubyGems.

Rails community pisses many potential developers and administrators off. They make things easy for the developer, but not to others. I’ll continue to learn Ruby and to get a sense of Rails, but I don’t actually expect to like it a lot. Maybe after I’ve managed to install some Rails application without “frozen” gems — but this could actually take a long time.

Uncategorized

Missing the point

December 20th, 2007

Jeff Atwood is missing the point when he talks about JavaScript performance. He’s talking about how “JavaScript is the Lingua Franca of the web”, whether “it [is] possible for browsers to run JavaScript significantly faster than they do today” and so on. Apparently, he doesn’t read Steve Yegge or reddit, since otherwise he would have read about JavaScript moving into the desktop domain:

As it happens, though, I’ve settled on Rhino. I’ll be working with the Rhino dev team to help bring it up to spec with EcmaScript Edition 4. I believe that ES4 brings JavaScript to rough parity with Ruby and Python in terms of (a) expressiveness and (b) the ability to structure and manage larger code bases. Anything it lacks in sugar, it more than makes up for with its optional type annotations. And I think JavaScript (especially on ES4 steroids) is an easier sell than Ruby or Python to people who like curly braces, which is anyone currently using C++, Java, C#, JavaScript or Perl.

Steve Yegge is excellent in talking about one thing and nailing several others on the way. He starts talking about his home-grown open-source game, moves over ranting about Java programmers onto some Gang-of-Four ranting and finally tells the public about his decision to rewrite his whole Java game in ECMAScript4. Actually, he’s talking only about his personal experiences, but these have a gigantic impact on the people. “A growing sense of doom” is a pretty good summary of the feeling. And while Reginald is particularly baffled about Java and millions of LOC, everybody is free to learn from Steve just about anything he mentions.

I wasn’t as amazed about Java, I rather had a lesson about JavaScript becoming mainstream. Real mainstream, a general-purpose language like Python or Ruby. Interpreters, JITs and compilers for ES4 are being developed, they are getting faster and it’s just a matter of time when JavaScript in browsers becomes a simple plugin, just like Java is now. JavaScript is the heart of Web2.0 now, but it’s extending to outer domains rapidly. Everyone who is not aware of this might be left far behind.

By the way, it feels good to be a part of a minority.

Uncategorized

Ubuntu Hardy, Qt4.3 and anti-anti-aliased fonts

December 19th, 2007

Just for the record: ugly fonts in all of Qt4-applications in the current Ubuntu development release Hardy Heron result from a bug in Qt and this bug is triggered by the ttf-arphic-uming package. Remove it and you are ready to go again. Otherwise, you’d have to re-enable anti-aliasing for these fonts somewhere in /etc/fonts/conf.d/70-ttf-arphic-uming.conf.

Uncategorized , ,

Three steps to Google’s world domination

December 15th, 2007
  1. Create this new what-are-my-friends-sharing feature, Robert Scoble is so fond of, stripping LiveJournal of one of their benefits en passant (Friends’ Feed). At this point Google and LiveJournal, as just about any social platform, are closed up silos.
  2. Open up Google Reader (and thus Google Account) for anyone with an e-mail address, not just @gmail.com, thus making all of my non-googlified friends willing to use Google Reader now appear in my reading list (one more point for Google as opposed to LiveJournal) and enable anyone not willing to get a Google account to get a blog at Blogger (there you are, LJ, you are actually obsolete now). Google would be halfway-open now, since anyone can use their services without opting in for a Google Account.
  3. Convert Google Account to a full-fledged single-identity account (technically very challenging). Et voilà!

By the way, it’s actually creating a social network “that sucks less”™, since you already have messaging and IM, and you get to choose your friends according to what they do and what they like, not according to what they look like. Could be really interesting if Google adds a small text under each Google Reader article: “Shared by XX people”. Oh well, we’d need comments too, but it’s a good start.

Uncategorized