Monday, August 30, 2010

The Start Menu

Don't you hate it when you download some application on your computer and it installs itself under some obscure company name in the Windows start menu?

You visit a website and decided to download something - Video Editor 8.1. But since the default behavior of most installer creators is to put the shortcut under a folder with the company's name you find yourself scouring the start menu from top to bottom until you find Video Editor 8.1 hiding under Blue Fish Studios... jeez, I can't count how many time that happened to me.

People, if you're writing an installer for your application, unless you're either Microsoft, Google, Oracle or Adobe I don't remember your company's name, and I'll hate your program before I even start using because you've hidden it from me!



Tuesday, August 03, 2010

Estimates vs. Commitments

The best way to make sure you never again get an honest effort estimate from the people in your team is to hold them to whatever estimate they gave you last time.

Estimates are deceptively similar to prices, in that they represent the cost of getting something done. But there's an essential difference between prices and estimates - you can't haggle over an estimate. And you shouldn't want to. That's like haggling with your cake on how long it should stay in the oven. It's just not helpful.

There is always (by definition) an amount of uncertainty built into every estimate. That is, after all, what makes it an estimate. You can chip away at this uncertainty by planning ahead in greater detail, or by confronting risks as early as possible, but you can't eliminate it altogether. There's always that essential gap between estimation and knowledge that's unbridgeable. What's left is intuition based on the experiences of past performance. Any reasonable estimate always incorporates that remaining gap as some inexplicable buffer that does not lend itself to further analysis. Accept it. You want this buffer there, and you want it to reflect as honestly as possible the amount of remaining uncertainty in the project.

When you hold people to their estimates you're giving them all the incentive in the world to artificially inflate them (and they will do so, even subconsciously). Past estimates need to be treated as what they are - historical answers to questions about uncertain matters. All you can do is learn from them and move on by trying to predict better in the future.

Getting estimates right relies on the interests of both sides - the receiver and the estimator - being completely aligned. Haggling destroys that alignment. Some people believe that haggling - purposefully lowering an estimate and holding people to it - can get people to work extra hard. That's like thinking you can get your plumber to finish his job quicker by paying him less. That's not how you conjure up motivation.

If there is inefficiency or procrastination in your team - those are problems to be handled on their own and you shouldn't sacrifice your ability to estimate in an attempt to combat them. People procrastinate when they dislike doing what they need to do - solve that problem by designing a work environment in which people actually like their work. People hesitate to begin working on a challenging task when they don't quite know how to tackle it; the uncertainty makes it very easy to rationalize doing it later. Solve that problem by cultivating an atmosphere that allows people to start with the hardest part of the job; that tolerates experimentation; that makes it painless for people to admit when they don't yet know how to do something and gives them enough time to learn. These are all tough, real problems that cannot be dealt with by just demanding they go away. You can't fight inefficiency simply by not allocating time for it. All you'll get is the same degree of inefficiency over a shorter time span with less actual work.

An estimate isn't a contract. Its relation to the world is "read-only". As such it has no influence on the price of work. People who are interested in good, honest estimates should start by divorcing them from any form of commitment.

Friday, July 16, 2010

Muslim "Facebook" Fail (Madina.com)

So I'm signing up to this new Facebook-for-Muslims. You know, for shits and giggles.

Anyway, I know there are some cultural differences when it comes to polygamy and such, but come on, people:


You can be both single, married and engaged if you're Muslim??

That's some advanced logic right there. Guess I'm out of my league.

If you're wondering, the form was submitted successfully...

But wait, it gets better. I tried to change my password and got this:


I guess the lord is to be thanked that successful form submission, given how funky and inconsistent their DB has to be by now.

Next I'm going to try to married and divorced at the same time. Who wants to be one of my wives? Come friend me on madina.com!



Monday, May 24, 2010

User-Defined Literals, a new feature in C++0x

Going through the latest draft. There's going to be a way to define your own custom literals.

For example:


long double operator "" w(long double);
std::string operator "" w(const char16_t*, size_t);
unsigned operator "" w(const char*);

int main()
{
1.2w; // calls operator "" w(1.2L)
u"one"w; // calls operator "" w(u"one", 3)
12w; // calls operator "" w("12")
"two"w; // error: no applicable literal operator
}


Could come in handy...

Saturday, May 22, 2010

German Sensitivity

My grandmother has been receiving, for the last few decades, a small monthly payment from the German government. Compensation, you know, for trying to exterminate her.

She recently asked me to translate for her this letter they sent. It's in dense official German and printed in small letters she can't really read. The letter informed her she was given a new identification number. It is to be used in all future communications with them.

Get it? They're assigning holocaust survivors identification numbers. How efficient...

How to protect all your Google searches

Google started allowing people to search using https.

Every one should configure this as their default search method. It's very easy to do.

Why should you do this? Because:

1. Your searches will be much more secure from any snooping 3rd parties.
2. The more encryption there is in the world, the better. It makes it harder for "bad guys" to filter out the "uninteresting" communication when they eavesdrop. (think of it this way: if all communication was encrypted it would be much harder for hackers to choose what to intercept)
3. Why not? You won't notice the difference (but hackers will) and it doesn't change the way you search.

Here's how to configure Chrome so that every time you search it goes through https.

1. Menu -> Options -> Basics -> Manage (default search engine).
2. Click Add and copy paste the following values into the boxes:
2.1. Name: Google Secure
2.2. Keyword: Google
2.3. URL: https://www.google.com/search?q=%s
3. Click Ok.
4. Now choose "Google Secure" (it's what you just created) and click on "Make Default". That's the important part.

Now Chrome will always use https when you search from the search-bar.

Friday, April 30, 2010

Week-day names in YouTube videos

Random statistic of the day: how many YouTube videos have week-day names in their title?



The big winner is Sunday. Wednesday is in last place.
What does all this mean? It means playing around with Google Chart API is fun.