April 11, 2007
@ 11:53 AM

This morning I was flipping through last Friday's issue of the The Daily Sun: Nigeria's King of Tabloids and came across some of the personals in the section of the paper called Muslim Matrimonials. It was a bit of culture shock for me to see how different they were from personals on U.S. sites like Craig's List, Yahoo! Personals and Match. Here are a few of them

Profile 496: Muslim male, 49, 1.7m tall, genotype AA, from Oyo state, an engineer holder of a Master's degree, married for long without children wants for marriage a practicing Muslim female from any part of the country, honest, tolerant, neat, slim and moderately attractive with at least a minimum of diploma, gainfully employed or employable, aged between 23 and 33 and ready to start a successful family

Profile 502: Muslim male, 43, 1.73 meters tall, Hausa from Bauchi in Bauchi state, Master's degree holder in English, lecturer in higher institution, married and blessed with five daughters, needs a new wife who is loving, hardworking, caring, prepared to share the ups and downs of life with hubby and above all understanding. She may be from any part of Nigeria, any tribe or social class. She must be light-complexioned, exceptionally tall and not be above 25.  

Quite different from the usual fare in the Men Seeking Women section of Craig's List isn't it? The glimpse that online personals give into the culture and social fabric of society is quite revealing.


The site formerly known as The Daily WTF has an article entitled Soft Coding which contains the following excerpt

Most programmers consider “Hard Coding” to be a Bad Thing: it’s hack-like, inelegant, and all-around lazy code. And as such, many programmers try their damnedest to avoid it. Unfortunately, this quest of avoidance often leads towards a much worse path: complication, convolution, and all-around unmaintainable code. It’s a path I like to call Soft Coding.

Before I discuss the finer details of Soft Coding, I’d like to briefly define Hard Coding. It’s the practice of embedding “things that shouldn’t be in source code” directly inside of source code. The definition is intentionally vague: while most would agree that database connection strings and logfile directories don’t belong in source code, there’s a lot of gray area. Take, for example, this following code:  

private void attachSupplementalDocuments()
if (stateCode == "AZ" || stateCode == "TX") {
//SR008-04X/I are always required in these states

if (ledgerAmnt >= 500000) {
//Ledger of 500K or more requires AUTHLDG-1A

if (coInsuredCount >= 5 && orgStatusCode != "CORP") {
//Non-CORP orgs with 5 or more co-ins require AUTHCNS-1A

I can already feel some of you cringing: Magic Numbers; String Literals; eww, that’s a lot of Hard Coding! However, not a single character in that example is Hard Coded: there is nothing that “shouldn’t be in source code” in the above code. The function simply implements a very clear and very specific business requirement with very clear and very specific code. Anything less and it would be Soft Coded.

I think it is a laudable goal for The Daily WTF to branch out into describing best practices instead of simply gloating at bad code. I assume this is motivated by some of the comments by Jeff Atwood in his post What's Wrong With The Daily WTF. However the problem I have with this article is that it conflates the difference between hard coding and using magic number (or magic strings).  

From the Wikipedia definition of hard coding:

To hard code or hard coding (also, hard-code/hard-coding, hardcode/hardcoding) refers to the software development practice of embedding output or configuration data directly into the source code of a program or other executable object, or fixed formatting of the data, instead of obtaining that data from external sources or generating data or formatting in the program itself with the given input.
EXAMPLE: Fixed installation path
If a Windows program is programmed to assume it is always installed to C:\Program Files\Appname and someone tries to install it to a different drive for space or organization reasons, it may fail to install or run after installation.

EXAMPLE: Startup disk
Some "copy-protected" programs look for a particular file on a floppy disk on startup to verify that they are not pirated. If the computer is updated to a newer machine, which doesn't have a floppy drive, the program now can't be run, since the floppy disk can't be inserted.

From the Wikipedia definition of magic numbers:

The term magic number also refers to the bad programming practice of using numbers directly in source code without explanation. In most cases this makes programs harder to read, understand, and maintain. Although most guides make an exception for the numbers zero and one, it is a good idea to define all other numbers in code as named constants.

This is preferable for several reasons:

  • It is easier to read and understand.
  • It is easier to alter the value of the number, as it is not redundantly duplicated. Changing the value of a magic number is error-prone, because the same value is often used several times in different places within a program
  • It facilitates parameterization.

Hard coding is bad because it assumes that information which should be flexible is actually fixed and unchanging. On the other hand, using magic numbers is a code maintenance problem which does not necessarily mean that the program is inflexible.


Categories: Programming

From the Microsoft press release entitled we learn Instant Messaging Comes to Xbox 360, Expanding the Largest Social Network on Television

Beginning the week of May 7, 2007, the Xbox 360 Spring Update will provide Xbox 360 owners worldwide with access to Windows Live Messenger features, broadening the communication options on the Xbox LIVE social network. Members of the 6 million-strong Xbox LIVE community currently send more than 2 million text and voice messages a day and can now use Windows Live Messenger to text chat with up to six people on their contact list at one time, while playing games, listening to music or watching movies. Text chat adds to the variety of options friends and families already have to communicate with on Xbox LIVE, including voice and video chat.

Current relationships on Windows Live Messenger and Xbox LIVE will be unified on Xbox 360 and users will see at a glance if their existing friends on Windows Live Messenger have gamertags, instantly expanding the breadth of connected experiences they can share online.

Although I didn't directly work on this feature, I sat in a couple of meetings with the XBox folks a few months ago to brief them on how to integrate with certain parts of Windows Live Messenger and I'm glad to see that the ball kept rolling and we're bringing this functionality to our users. Being aware of other's online presence and being able to communicate with them from any device or application is a worthy goal.

Sitting here in Abuja, Nigeria using Windows Live Messenger to send text messages to my girlfriend's cell phone in Seattle, Washington while she gets ready for work brings into sharp relief the importance of bridging communication forms and online presence in applications across several contexts.


Categories: Social Software | Windows Live

The combination of my messed up internal clock and the fact that it seems there is now a wireless LAN at the villa means that I am up blogging when I should be sleeping. The Web geek blog buzz today is the announcement contained in the blog post entitled Map-making: So easy a caveman could do it on the Official Google blog which states

That's why we're announcing My Maps, a new feature that makes it quick and easy to create your own custom Google Maps just by pointing and clicking. You can add placemarks, draw lines and shapes, and embed text, photos and videos -- all using a simple drag and drop interface. Your map automatically gets a public URL that you can share with your friends and family, or you can also publish your map for inclusion in Google Maps search results. We'll continue to show organic local search results with red pushpins; user-generated results will have blue pushpins. The user-created results include KML as well as maps made through My Maps.

To give you a better idea of what kind of maps you can make, here are some examples that Googlers created after we released the feature internally. (We ran a contest and gave a Nintendo Wii to the best map-maker.)

As usual the reactions from the blog pundits are equal parts surprising and unsurprising to me. The unsurprising bit is that I didn't find anyone who compared this to the collections feature of MSN Virtual Earth Windows Live Local Live Search Maps Live Maps which can be viewed at http://collections.live.com. I'm sure when the "Web 2.0" pundits eventually discover we have this feature it will be claimed we copied it from Google. :)

On the other hand what I did find surprising were blog posts like Google Launches MyMaps - Platial Gets Screwed and My Maps at Google: Is Google Doing a Microsoft? from Pete Cashmore and Paul Kedrosky which complained that Google was killing "social mapping" startups like Platial and Frappr with this move. Ignoring that "social mapping" seems like a silly product category in the first place, I wonder what exactly is wrong with this move. Some startups point out consumer demand for certain features from online mapping sites (i.e. missing features) and the consumer mapping sites add the features.

Is the expectation that companies shouldn't be able to improve their products once startups start trying to build a business out of the fact that their product is missing features? I've never understood that reasoning. Paul Kedrosky specifically calls this "pulling a Microsoft". I wonder...do users really want their computers to ship without a Web browser or a media player? Do users really want to go to one site to get maps and another to add annotations to these maps? Adding features to products is good for users and we shouldn't be trying to artificially limit products because some startups are trying to build a business out of a feature. If startups like  Platial and Frappr are actually adding value then they'll survive. If they don't, then they probably didn't have much of a business to begin with.  

PS: I understand that the philosophy of anti-trust law in Europe is about preventing unfair competition whereas in the U.S. it is about preventing harm to consumers. Thus depending on where you are from these questions will strike a different chord with you.


April 4, 2007
@ 06:56 PM

Paul Bryant has a blog post entitled How Microsoft could crush Google in one easy step. Seriously. where he writes

Henry Blodget has a post up on "One way for Microsoft to Kill Google" It's interesting, but I think there's a much easier and faster method that Microsoft could use to more effectively “kill” Google tomorrow if they so chose.

It’s more than a little bit evil - - but on the other hand, I never heard Microsoft promise that they wouldn’t be:

So what is it?

The height of simplicity. Introduce an integrated ad-blocker to Windows (purely as a customer service, of course) that blocks all Google ads in both IE and Firefox.

Allow users to temporarily or permanently turn off the blocker if they choose. (Knowing full well that 95% of users use just the default settings.)

MSFT would probably need to block their own ads too, in order to make the effort legitimate, but how big a loss would that be for them really, on a relative basis?

For G, on the other hand, it would literally eliminate their entire revenue stream. Overnight. And Microsoft could push this out via a Windows Update in a few weeks time, at most. Buy the very excellent AdMuncher and bundle it if it’s too time consuming to build.

Part of me hesitates to point this out (in fact, I first thought of it a couple of years ago, and didn’t say anything for that very reason) but I can’t possibly be the only person who has thought of this, right? What am I missing?

Usually when I see a post like this, I just post a comment pointing all the ways the idea is stupid problematic. However given that the Paul Bryant's blog doesn't allow comments and I'm supposed to be on vacation, I'll just let the merits of this idea stand on their own without further comment.


I just arrived at London Heathrow and can look forward to another 9 hours or so until my flight to Nigeria. In the meantime, I've found complimentary Web access in the business class lounge so it looks like I won't be bored. I am a little worried about keyloggers and spyware on this computer given how easy it was for me to install Firefox on it. Here are a couple of quick thoughts I had on the way related to links I've seen over the past 24 hours

I'm hungry and need to get back to my book. Holla at y'all later.

Mike Arrington has a blog post on TechCrunch entitled Amazon’s War on Statsaholic where he writes

Statsaholic (formerly Alexaholic) launched a year ago and provided much easier access to Alexa traffic data than the Alexa site itself. Statsaholic also had other features Alexa didn’t offer, like embeddable graphs and data smoothing. Others agreed, and soon started linking to Statsaholic instead of Alexa when doing traffic comparisons. At one point, Alexa was the no. 3 search result on Google for “Alexa.”

Statsaholic was not using the Alexa web service to get the data, because Alexa doesn’t offer the graph data via their web service. Amazon, which owns Alexa, could have complained or simply shut them down when it launched, but they didn’t. They actually complimented the service in a post on the Alexa blog last April.
What bothers me about the situation is that Amazon sat on it for a year, complimenting the service along the way (and copying it). Then, just when the service started getting really popular, they took drastic measures to shut it down.

I'm totally perplexed by Arrington's position here. Statsaholic is screenscraping Alexa and building a business on top of that. It seems like a pretty open and shut issue to me. The fact that Amazon didn't bother prosecuting them until they got a lot of traffic just points out that there is little point harassing folks who are abusing your service unless they are consuming a lot of your resources or are taking money out of your pocket. It seems Statsaholic was doing both. 

You'd think a smart startup founder would know better than to build a business model on hotlinking and bandwidth theft. You'd also expect a Web savvy dude like Mike Arrington to know better than blame the victim in such situations. Next thing you know, he'll be flaming websites that block hotlinking to their images via htaccess. Weird. 

PS: Someone in the comments wondered how Mike Arrington would feel if someone created a mashup that showed all of the TechCrunch content minus the obnoxious ads (e.g. http://techcrunchminusads.com). I wonder if Mike would sue if the site started stealing a bunch of his traffic  since it wouldn't load so many ads thus being faster and perhaps included more useful info (e.g. crosslinking TechCrunch posts with PodTech interviews)? 


The Yahoo! Developer blog has an entry entitled Introducing the Yahoo! Mail Web Service which states

While we are certainly proud of the success of Yahoo! Mail, today we are announcing how we are going beyond the boundaries of the Yahoo! network and enabling developers to build new tools or applications around Yahoo! Mail. We are thrilled to announce the open availability of the Yahoo! Mail Web Service, web service for Yahoo! Mail (accessible via SOAP or JSON-RPC) that we previewed to Yahoo! Hack Day attendees. With the Yahoo! Mail Web Service, you can connect to the core mail platform to perform typical mailbox tasks for premium users such as list messages and folders, and compose and send messages (you can also build mail preview tools for free users with limited Web Service functionality). In other words, developers outside of Yahoo! can now build mail tools or applications on the same infrastructure we use to build the highly-scaled Yahoo! Mail service that serves nearly 250 million Yahoo! Mail users today -- users who might want to help you make some cash with your application.
The Yahoo! Mail Web Service is a big release for Yahoo! and the Internet, and it's only the beginning of what you'll be seeing from Yahoo!. Jump into our code samples for Java, .NET, PHP, Perl and Python, and build your dream mail app today, then be sure to give us feedback on your experience so we can continue to make the API even better. Be sure to leverage the online Yahoo! Mail Web Service support group where you can get help from the Yahoo! Mail Web Service team and your fellow developers. We can't wait to see what applications you will build when you add your imagination to the platform. Maybe you want to build an application that backs up Yahoo! mail targeted at a large number of Yahoo! users, or maybe you just want to add a niche feature that makes Yahoo! Mail better for your mom. For inspiration, we've gathered a few applications:

First things first, this is an unprecedented and very welcome move on the part of Yahoo! This is another example of why I think of the three major Web portals, Yahoo! has done the best job of turning their services into a developer platform. I like the fact that the Web service is exposed over multiple protocols and the code samples are in multiple programming languages that run the gamut from enterprise developer fare (Java/.NET) to Web geek fare (Perl/Python/PHP). Mad props to the developer platform folks at Yahoo!, good work.

With that out of the way, there is some stuff that has me scratching my head after taking a look at the Yahoo! Mail Web Service User Guide and API Reference. The first thing that is weird is that although Yahoo! provides SOAP and RESTful JSON web services for accessing one's mail, I still can't get POP access to my Yahoo! mail without shelling out $20/year. After all, GMail has POP access for free and users of the free versions of Windows Live Hotmail can get POP-like access if they use Windows Live Mail desktop although they are restricted to using one mail client.

So I decided to see if the Yahoo! Mail Web Services provides a way around this restriction but found out from the section on "Determining the Users Account Capabilities" that

The Yahoo! Mail Web Service limits the functionality available to free accounts. Premium accounts have no such limits. First call the GetUserData method to get the user’s account type from the web service.
Calls to other APIs will return an error.

So it looks like I actually can't build an application that can be used to read the actual mail messages from my Yahoo! Mail account with the API unless I'm a premium user. Otherwise, all I can do is list the messages but not actually get their content. That makes the APIs a lot less cool than I initially thought. 

Like Sam Ruby and Paul Downey I initially wondered about the choice of exposing a SOAP API but then realized that it may be that they already use SOAP internally so this wasn't that much work for them in that case. I also wondered about the lack of a RESTful non-SOAP XML interface as well but after looking at the complex object models I can see why they went with data formats that are pretty much serialized object models (i.e. Javascript OBJECT Notation & Simple OBJECT Access Protocol) instead of expecting developers to write a bunch of gnarly XML parsing code for processing over a dozen different response formats from the 23 methods in the Yahoo! Mail Web Service.

I suspect that Yahoo! won't get as much traction as they expect with the API until they remove some of the restrictions on non-premium accounts. Even then it does look like there is enough to build Windows and Windows Live gadgets for Yahoo! Mail that show your messages. Except that there is no way to read the mail contents and not even a way to link to the message in way that sends the user to Yahoo! Mail to read its contents. I bet if Yahoo! fixed the latter and perhaps had a rev-share with people who drove clicks back to the Web-based mail client, things would get very interesting. I wonder if Jeremy is listening?


March 28, 2007
@ 05:50 PM

Dave Winer has a post entitled How basic is Twitter? where he writes

So inevitably, a query about the value of namespaces leads you to wonder if there will be TwitterClones, web-based services that emulate the Twitter API, that keep internal data structures similar to Twitter, and most important, peer with Twitter, the same way Twitter peers with IM and SMS systems.

This is as far as I got in my thinking when last night I decided to ask Les Orchard, a developer I know for quite a few years, and who I've worked with on a couple of projects, both of which use the kind of technology that would be required for such a project --

What if there were an open source implementation of Twitter?

Nik Cubrilovic happened to be online at the moment and he jumped in with an idea. Les confessed that he was thinking of doing such a project. I thought to myself that there must be a lot of developers thinking about this right about now. We agreed it was an interesting question, and I said I'd write it up on Scripting News, which is what I'm doing right now.

What do you think? Is Twitter important, like web servers, or blogging software, so important that we should have an open source implementation of something that works like Twitter and can connect up to Twitter? Where are the tough sub-projects, and how much does it depend on the willingness of the developers of Twitter #1 to support systems that connect to theirs?

The problem I see here is that Twitter isn't like web servers or a blogging engine because Twitter is social software. Specifically, the value of Twitter to its users is less about its functionality and more about the fact that their friends use it. This is the same as it is for other kinds of social/communications software like Facebook or Windows Live Messenger. Features are what gets the initial users in the door but it's the social network that keeps them there. This is a classic example of how social software is the new vendor lock-in.

So what does this have to do with Open Source? Lots. One of the primary benefits to customers of using Open Source software is that it denies vendor lock-in because the source code is available and freely redistributable. This is a strong benefit when the source code is physically distributed to the user either as desktop software or as server software that the user installs. In both these cases, any shabby behavior on the part of the vendor can lead to a code fork or at the very least users can take matters into their own hands and improve the software to their liking.   

Things are different on the "Web 2.0" world of social software for two reasons. The obvious one being that the software isn't physically distributed to the users but the less obvious reason is that social software depends on network effects. The more users you have, the more valuable the site is to each user. Having access to Slashcode didn't cause the social lock-in that Slashdot had on geek news sites to end. That site was only overtaken when a new service that harnessed network effects better than they did showed up on the scene (i.e. Digg). Similarly, how much value do you think there is to be had from a snapshot of the source code for eBay or Facebook being made available? This is one area where Open Source offers no solution to the problem of vendor lock-in. In addition, the fact that we are increasingly moving to a Web-based world means that Open Source will be less and less effective as a mechanism for preventing vendor-lockin in the software industry. This is why Open Source is dead, as it will cease to be relevant in a world where most consumers of software actually use services as opposed to installing and maintaining software that is "distributed" to them.  

Granted, I have no idea why Dave Winer would like to build an Open Source competitor to Twitter. The main thing that will come out of it is that it will make it easier for people to build Twitter knock offs. However given how easy it is to roll your own knock off of popular "Web 2.0" social sites (e.g. 23, SuperGu, Uncut, etc) this doesn't seem like a lofty goal in itself. I'm curious as to where Dave is going with this since he often has good insights that aren't obvious at first blush.


Categories: Technology

March 28, 2007
@ 03:34 PM

This post was originally meant to be a response to Mini-Microsoft's blog post entitled Mini, a Devil, and Fine Whine where he seems to imply that there is some sort of class struggle going on at Microsoft and also made some calls for radical transparency. However this morning Mini linked to a blog post entitled For want of a shoe, or time for a new rider? on the MSFTextrememakeover blog which is just fire and has distracted me. If you're a Microsoft watcher [or even better a Microsoft exec] you should go ahead and read it, twice even. Key excerpts that lit my fire


MSFT does not appear to have a clear, honestly customer-focused mission that is understood at all levels. Importantly - and perhaps as a result - employees seemingly aren't in total accord or fully bought into it. If MSFT truly believes in "Your potential. Our passion", then it needs to do more than just pay lip-service to it. It needs to open itself to all that that entails (cross-platform support, not playing lock-in games, etc.) and deliver against it.

I see two concerns here. First, the need to move from a culture of "good enough" to one of "excellence" and "insanely great". I've posted about this before. MSFT has a long-standing approach, ingrained via Gates, of getting something - anything - out to market and then fixing it over time. That worked well for a long time when "free" alternatives weren't prevalent, and when competitors/markets weren't moving as quickly as they are today. Now, it's a lot less successful, and yet MSFT continues to do it and be surprised when it fails.

Stop fighting major wars on multiple fronts simultaneously. It is simply ridiculous for current management to assume that MSFT can fight the biggest and best companies on earth, across a dozen or more battlegrounds, and still hope to prevail. Just take a look at some of the folks MSFT is going up against: SONY (and Nintendo) in gaming, Nokia and many others in mobile, GOOG and YHOO in Search, Everyone from Alcatel to Siemens in IPTV, IBM/Oracle/SAP (and smaller players Salesforce.com. Rightnow, etc.) in ERP and CRM, IBM/Adobe/FOSS in middleware and development, AAPL and most of MSFT's former partners in mobile media, AAPL and GNU/Linux in Operating Systems, and FOSS in personal productivity. Worse, these battles are spreading MSFT too thin, and leaving its core cash cows increasingly vulnerable (would Vista have taken 5 years to develop if management hadn't been distracted with a dozen other battles?).
Public Face

I am sick and tired of MSFT executives "trash" talking competitors in public. This is such a fundamental business tenet that it's an embarrassment to have to even list it.

Like I said, the entire post is really good. As for my response to Mini's Mini, a Devil, and Fine Whine post, here it goes. The kind of people who focus on what the top X% of Microsoft are making are probably not the kind of employees you want to keep around anyway so it seems weird to be catering to them. The concerns that the Microsoft employees whose opinions I value have are all eloquently described in MSFTextrememakeover's post excerpted above. The kind of people who get in a tizzy because some VPs got to attend an expensive award ceremony that they didn't are the kind of whiners and losers you can never make happy so why bother? It's not like they can argue that they are underpaid or that their employment benefits suck. Instead I see it as part of the age of entitlement in America where lots of people believe they deserve to be balling out of control and then gets pissed off when they aren't. The best thing you can do with those kind of people is to show them the door. 


Categories: Life in the B0rg Cube