www.g66g3e.com

A friend of mine called me to tell me that some of the characters on keyboard were now emitting numbers to the screen. It was the classic “your NumLock is on” problem on a laptop.

I thought it would be a nice service to take the domain g66g3e.com and provide it to geeky-enough-people who type “g66g3e” in their browsers instead of typing “google” and then press Ctrl+Enter, which would normally complete the address to www.google.com, but in this case will end up being www.g66g3e.com. Unfortunately, that address is already taken and for that very same reason.

And I thought I was original :S

תלמה. הכח להצליח?

אין לי טלוויזיה בבית. זה לא אומר שאני לא רואה תוכניות טלוויזיה, אבל מה שבטוח זה שאני לא רואה פרסומות. עדיין אני נחשף לשלטי חוצות כשאני נוסע בכבישי ארצנו עמוסי השלטים.

לאחרונה אני רואה את הקמפיין החדש של תלמה. על השלטים כתוב “תלמה. הכח להצליח.” אני שואל את עצמי: למה חברה שעיסוקה מזון צריכה כזה מין סלוגן? איזה כח להצליח צריך כשאני מוסיף מים חמים לכוס של מרק מוכן? רק במדינה שנמצאת במלחמה מתמדת יש הגיון להוסיף את המילה “כח” בפרסומת לחברת מזון.

יש לי שני הסברים אפשריים לפרסומת הזו:

  • איזה משרד פרסום הצליח לשכנע מישהו בתלמה שהם צריכים סיסמא דמויית Just do it של נייקי ונכשל חרוצות
  • יש איזה שהוא קשר לפרסומת בטלוויזיה שאני לא יודע אותו כי אין לי טלוויזיה

בפני עצמו, הסלוגן “הכח להצליח” נראה לי דבילי במקרה הטוב. אם רוצים לקשר את תלמה להצלחה היה אפשר לחסוך את “הכח” ופשוט להגיד “תלמה. הצלחה.”

Random Thoughts About Caching

Imagine for a moment that there is a place where the results of all non-trivial computations are kept. Kind of a universal cache with unlimited capacity. To access this cache and get the results of a desired computation you need to specify the computation type and the problem set. For example, a computation type may be sorting and the problem set is the collection of numbers you wish to sort.

Let’s further assume that this cache isn’t local on the computer requiring the result. If that’s the case, accessing the cache to even find out if the result of your problem exists costs you quite a lot and you have to consider whether it’ll be worth your while to try and access the cache, get a cache miss and compute the result yourself. Considering the amount of storage required to store everything and the time it would take to send the problem set, access the data and send the results back, most problems aren’t good candidates for such a universal cache. Today.

However, storage space is becoming cheaper and network speed is constantly rising, so more and more problems will benefit from a universal cache service like that. Creating such a service isn’t too hard. It can be implemented, as an example, using Amazon’s Simple Storage Service (S3) for results storage. The universal cache can be self learning – for example, if there is a high percentage of cache misses, enlarge cache storage space automatically. In addition, you can use Amazon’s Elastic Computing (EC2) for computing the cache misses instead of performing the calculations yourself. So in the case of high percentage of cache misses, you may choose to add more computers to the grid.

Facebook Is So 2007

After the initial joy of joining Facebook and playing around with it a little, I find myself entering the website less and less. Applications always seemed annoying to me (some of them are nice, but very few are useful.) I didn’t want to post anything too personal on Facebook because I have this blog and if I’ll want to publish something it would be here. Additionally, the privacy issues are really disturbing – did you know that if a friend installs an application then the application can read your data?

I’ve noticed, though, that my friends have also stopped sharing things on Facebook. One friend even simply disappeared. I have no idea why or what happened. The news feed, where you see all the updates from your friends, now contains very few new items every day, where before it used to fill the entire page. I don’t know why people stopped using Facebook, but the domino effect is apparent – once you realize your friends aren’t logging into Facebook every day, you have no motivation to update your photo albums, activities, etc. Then you gradually stop using Facebook as well.

Anyway, it was nice while it lasted. I still have my (very modest) profile on Facebook and it will probably stay there just so that people can find me. Other than that, I’m pretty much done with Facebook.

Three Good Things Microsoft Did Lately

Even if the following were motivated by business interests, they are still good things:

  1. Lowered Windows Vista’s price (I already switched to Ubuntu Linux)
  2. Opened “high volume” Microsoft software specifications (It’s still not a good idea to try and implement a “perfect” Office clone)
  3. Decided that Internet Explorer 8 will be standards compliant by default (I switched to Firefox a long time ago, when I was still using Windows)

My Current Two Principles Of Software Development

What makes good software? I always felt this question was too big for me to answer, never seeing myself as astute in the software development business as the big guns like Herb Sutter, Raymond Chen and the likes. However, this is a blog and as blogs go you can post something today and say the opposite tomorrow. Still, I couldn’t resist putting the word “current” in this post’s headline to emphasize that my opinion may change in the future.

Over the years my view of software development changed a lot. During my studies I was an “enthusiastic purist” developer – the kind that will always look for the newest paradigms and techniques, trying to follow and use them in my own code. That was the enthusiastic part. The purist part of me insisted on following the good practices I learned along the way. There are very few good practices that are true no-matter-what, the most important one being DRY – Don’t Repeat Yourself.

While working as a software developer I noticed that, no matter the company I worked for, the level of acquaintance of existing programmers with these new techniques was very low. They may have heard of some, but no one would dare use them. Most developers stick to what they already know. The effect of this being that even if you know how to write something in a “new” way, you have to educate the other developers and convince them that there is an actual benefit to using your way. This is a good thing because it works like a peer review process, but with the natural resistance to change it becomes very hard to actually use new techniques in an existing company.

Over time I learned that what makes software successful is happy users. No big surprise there, right? But the reality of things is that making software which users will like on time usually comes on the expense of the way the software is implemented. I’m not the first to say that software development is about making compromises, but if you’re an “enthusiastic purist” that realization can be a little depressing. I had to learn to compromise in order to deliver software on time. I still think this is a little unfortunate because in every piece of software there’s room for improvements – in design, in speed, in beauty – improvements that probably will never be made.

In short, I learned that

Software should:

  1. work well for the user, and
  2. be implemented in a way that allows known future developments

These are my (current) two principles of software development. I consider their weight equal, but if these two principles still contradict each other – the first one should be preferred (or the deadline should be postponed once again.) Otherwise, you will not have users left to use your future developments. The second principle contains in it as many good practices as needed, but unfortunately not more.

I would have loved to add another principle, namely “be well implemented” or “be well designed.” However, in the real world, where companies develop products until they’re most profitable (and not a second more), we don’t have the luxury of having another principle like that. Working on the first two takes most of our time.

Free vs. Free

In a recent post I wrote that I installed the non-free driver for my video card on my new Ubuntu Linux installation. A friend asked me why I had to pay for the driver. I didn’t.

The word “free” has two main meanings in the software world:

  • Costs nothing (also known as “Free as in beer”)
  • Liberty (or freedom)

The first meaning is easy to understand, but what does it mean that a piece of software has freedom? Wikipedia explains free software as follows:

Free software is software that can be used, studied, and modified without restriction, and which can be copied and redistributed in modified or unmodified form either without restriction, or with restrictions only to ensure that further recipients can also do these things. To make these acts possible, the human readable form of the program (called the source code) must be made available. The source code may be either accompanied by a software license saying that the copyright holder permits these acts (a free software licence), or be released into public domain, so that these rights automatically hold.

Here’s an example of software that is not free: Microsoft Word may just be the most used office productivity application in the world. To read and write a Word document perfectly you have to use Microsoft Word (*). Using Microsoft Word binds you to a format that is not free (unpublished) and forces you to use a specific program. By using Microsoft Word you have given up on your freedom to choose a document editing program. So because the file format isn’t free (as in freedom) you are not free.

As an opposing example, consider another document file format like ODF. ODF is a published Word-like file format that is available to all and so when you edit an ODF file you may choose out of a bunch of applications that are equivalently good at editing the file.

So my choice of a non-free driver for the graphics card was pretty much like choosing Microsoft Word over a different application and file format (with the exception that it was at zero cost). The non-free driver may have given me extra effects on my computer screen but I gave up some freedoms as I made the choice. I start wondering, even though I didn’t complete the move to my new (freedom-free) Linux installation, whether this freedom is something that needs to be protected even if the software is available at no cost forever, just like we should champion privacy even when we have nothing to hide (again a link to the excellent Coding Horror blog)

For more information about free software, visit the Free Software Foundation website.

* There are other programs that read and write Word documents, but they reverse engineer the Word file format. The reverse engineering is never perfect and can be targeted specifically by the Microsoft to be nearly impossible.

Scott Adams Decided To Blog Less. What A Shame

Scott Adams announced that he will write less on his blog from now on. He kept a one-post-per-day schedule for over 2 years, which is big even for a writer. Scott’s blog was one of my favorite daily reads and since I started reading the blog over a year ago, I haven’t missed even one of his posts. So you can see why I think it’s a shame that he made such a decision.

Scott uses his logical way of thinking and observational powers to explain his decision. One reason (you can’t see the ads in RSS readers) seems strange to me since you can put ads in RSS feeds, or give the reader just a part of your post so that she will have to visit the website in order to read the post (UPDATE: a day after Scott posted his decision, he chose the second way to “lure” people into the website). The other reasons, unfortunately, are entirely logical.

It’s a big loss to the blogosphere, but it was a hell of a ride :)

Desktop Evolution – Is This The Best We Can Do?

I was looking today at a post on Engadget called “Desktop Evolution: Windows and Mac OS Visual Comparison Through the Years” and expected to see how, over the years, the desktop became more and more beautiful and usable. But I was extremely under-impressed.

Windows Vista looks nice but nothing really exciting (also, I can’t ignore the fact that the best looking Vista both costs a lot and requires super-new hardware.) The latest OS from Apple, Mac OS X 10.5, is supposed to be innovative but also looks like a slightly-more-beautiful clone of its old self. I mean eventually when you’re on a computer, your desktop is not a destination and as nice as it looks, nothing seems to have changed.

Where are the usability benefits? Considering all the great minds working on software today, is this the best we can do with the desktop?

Social Networks And Me

Social networks are the big thing these days. Recently I joined two social networks: LinkedIn and Facebook. LinkedIn, a business-oriented social network, was fun to play with at first. I, too, joined the “add your friends” race and added as many as I could find (I didn’t just add anyone, though. Only people I actually know well enough to consider contacts). After a while, I became bored with LinkedIn. There was just nothing there for me to do. I’m not seeking a new job, I’m not looking to “network” with high-profile names. I just have nothing to do there.

Facebook, on the other hand, gives users as much stuff to tinker with as they can handle. Considered a genius move, Facebook creators opened the site by providing an application API that can be used to create “Facebook applications.” There is a huge amount of applications, from gift-giving to playlist display and whatnot. You can post images, videos, thoughts and anything you can think of on Facebook.

There’s a lot of hype around Facebook with regards to the applications. However, the applications thing can be a little annoying. Let’s say a friend posted a song that can be listened to on his profile page. To listen to that song, I have to install the application on my profile as well. Why? I have no idea. I guess either that’s an enforcement of Facebook itself, or application makers are in a race to virally spread their applications to get better numbers in the overall application installation statistics. This kind of behavior makes me not want to use the website.

Recently, Google announced OpenSocial, a way to build social networks applications in a way that is independent of a website. While the OpenSocial group includes MySpace (the biggest, yet ugliest, social network that exists today), it doesn’t include Facebook. That’s a shame for application developers, considering that Facebook is rapidly growing and appears to have a better application delivery/installation mechanism than other websites.

Assuming I have an idea for a social network application, a few questions are bothering me:

  1. What kind of a business model can you have in an application that is hosted on another website? I’m guessing there is such a model or otherwise there wouldn’t be companies investing efforts in creating such applications.
  2. Should I create the application in Facebook? As an OpenSocial application? Both? Maybe I should create an independent website and hook it up to the social networks later?

Update: After writing this post I went to see a video that discusses the possibilities of monetizing on the Facebook platform in addition to the problems that Facebook application developers face today and why they simply have no choice but to make users install their applications to get recognition by more users.