Archive for December, 2006

Snowballs from hell

World of Warcraft has recently received a few seasonal additions for this late year celebration, and one of them has caused a lot of turmoil among the players: snowballs.

There are two kinds of snowballs: regular ones, which you can buy at your usual vendor and that don’t have much of an effect when you throw them, and “hardpacked” ones, which you can pick up in Alterac Valley. When you get hit by a hardpacked snowball, you are instantly knocked back by a significant distance, and players were quick to realize that these snowballs could be a very effective defensive weapon in the battlegrounds, since not only do they interrupt whatever spell or fight move the player was attempting to make, they can also knock them off a bridge and send them down to a spiraling death…

Demonstration:

But the fun with snowballs doesn’t stop there.

A few days ago, forty players from our guild headed to the flight tower to make our way down to Onyxia’s Lair. Right before I flew off, the guildy before me threw a snowball at his teammate, who had just taken off ahead of me. The snowball immediately made a sharp right angle in order to follow the fast wind rider, but since its velocity was not high enough, it couldn’t quite catch up and therefore, proceeded to follow dutifully my teammate over the entire trip to Onyxia’s Lair.

The snowball immediately hit him as soon as he landed, but I was too busy laughing to capture that moment. I did manage to take a few screenshots of the journey, though…

snowball1 snowball2
snowball3 snowball4
snowball5

Click on the images for higher resolution pictures.

Mobile Gmail video

If you happen to be one of the few who can’t run Gmail Mobile on your cell
phone yet, here is a

neat video
that gives a good tour of the application.

 

QuickSilver frustration

I use QuickSilver all the time, which is probably the case of a lot of Mac OS users. It’s a good product, but far from perfect, as the following anecdote shows.

Recently, I realized that QuickSilver was able to locate a Word document A.doc but not B.doc in the very same directory (a few levels under ~/Documents). This was very frustrating, so I started looking in its Preference panel (probably one of the worst I’ve seen in a Mac OS application). After many unsuccessful clicks, I was eventually pointed to the User tab, which contains Documents. The rescan time at the bottom showing “10 minutes”, it was obviously not a matter of an outdated database.

My first two attempts (double clicking on “Documents” and then right-clicking on it) yielded nothing. Why is Mac so inconsistent with contextual menus? Not only are they rare, but when they are there, they break the UI (for example, you can’t right click on a regular menu, which would pop up a secondary menu on Windows).

Finally, I’m told that I need to click the little (i) icon at the bottom (how informative! How about a text label?). A window pops up, which shows a setting for “depth of search”. Well, it’s an improvement, and even though it still doesn’t explain the bug (these two documents are in the same directory and were created several days ago), it makes me realize that QuickSilver only looks down two levels in a directory.

Fine, I’ll change that to 10, to be on the safe side, except that… this window is read-only. QuickSilver just won’t let me change the properties for the Documents directory. My anonymous informant tells me to duplicate this entry, and then it will be editable.

Lovely.

Next problem: how do I do that? Remember: I can’t right-click, so no “copy/paste” contextual menu. Have you guessed yet? I thought not. For that, I need to bring up the (i) window again, move to the third tab at the bottom (“Attributes”) and there, click on “Create copy”. Obvious, uh?

Are the people who designed this UI from the same planet?

Anyway, I follow the directions, I call the copy “Documents Deep”, I’m taken back to the User tab, and… my entry is nowhere to be found. By now, I have learned to no longer trust anyone, so I click on a few tabs on the left hand, and finally, the one called “Custom” reveals the “Documents Deep” entry I just created. And I’m finally able to modify it. I increase the depth level, trigger a rescan, type the name of the document, and it’s finally located. Phew.

But it doesn’t stop there.

A few minutes later, I start typing the name of another document (“Concurrent.doc”) but the first few letters are not enough to disambiguate it fully, so I keep typing until I hit the dot, and there… QuickSilver switches to Subject mode. It is now looking for a command called “Concurrent” and it will invoke it with the parameter “doc”. Who’s the genius who came up with the idea to use “.” as a separator in QuickSilver?

Anyway, I’ve finally reached a point where I’m functional again, but this whole ordeal reminds me too much of the pain it is to get anything a bit exotic done on Linux. Let’s hope it won’t happen too often.

Algorithms

I just finished a fantastic book called “Algorithms”, by Sanjoy Dasgupta, Christos Papadimitriou and Umesh Vazirani. Even better: this book is free and can be downloaded in PDF form.

At 300+ pages, it’s not lightweight either, but the authors have done a fantastic job at explaining the main foundations of essential algorithms in simple terms that even developer who don’t have a CS degree will find easy to read and to absorb. You will see a few mathematics formulas and proofs here and there, but you can safely skip them if you are not comfortable with them and just take away the very natural and friendly wordings that the authors never omit to make when they are trying to get you to understand the overall idea behind an algorithm.

The book is very extensive and covers the most important algorithms you will ever come across in your life as a developer, starting with the introduction of the “big O” notation, and then progressively moving to more complex topics such as graphs, dynamic programming (nothing to do with dynamic languages), linear programming and culminating this area with the Simplex algorithm (I loved this section).

I would consider the chapters that follow as a “second part” of the book (even though it’s not structured as such) since they cover more advanced (and sometimes, still not completely understood yet) problems such as NP completeness and quantum programming.

A must-read for any developer who never got a chance to understand how all these algorithms work or who simply want to get a refresher…

And hats off to Sanjoy, Christos and Umesh for making such a great contribution to the computing world!