The Web Gambit

Thoughts on Web Development

Monthly Archives: January 2007

Cool Black Windows XP theme

Black Windows theme

I found this uber-cool Windows XP theme today based on the Royale Theme which comes with XP Media Center Edition. This new theme replaces the blue on Royale with a great dark look that make it seem very Vista-like.

If you’re holding off on upgrading to Vista (like I am), its a good theme to give you that Vista look without all the compatibility headaches. It’s part of Microsoft’s marketing of the Zune Player so installing the theme automatically changes your desktop background to a stock Zune marketing photo. Make sure you save your current wallpaper before installing the theme.

Download the Black Zune theme here. Credit goes to Skatter Tech for the theme.


Improving your mouse experience

MX 518 Mouse

A mouse is an essential tool that most of us use almost every day. In the course of a day, many of us end up cursing them because they don’t track as well as they did when they were brand new. Often this is due to the mouse itself, but these days most quality mice from Logitech and Microsoft in the $30-50 range are really good when used properly. Proper use often requires a good mousepad. But unfortunately, even with a good mousepad, the feet on these mice tend to wear out over time.

Earlier ball-based mice were plagued with the problem of the mouseball getting dirty and failing to track properly. Most mouse-freaks would clean their mice on a daily basis to improve their tracking.

Optical mice were supposed to resolve the issues of the much hated mouseball, but they introduced a new problem as the friction was now solely placed on the feet of the mouse. The feet don’t have the same problem of getting dirty as quickly, but they come at a cost of reduced durability. The feet may fall off or wear down over time requiring that the whole mouse be replaced.

A colleague at work (and self-described mouse freak) introduced me to two products which greatly help improve the tracking on mice. Coupled with a good quality mouse (not the standard two button type), these will give you a great mouse experience.

First up is the Xtrac Hybrid Mousepad, a very large 10" x 16" mousing surface with a combination cloth/plastic based surface. This pad is huge, so you are far less likely to slip off during any gaming sessions or during fine-tuned Photoshop work. I wish they made a smaller version, but this is the best mousepad I have found so far and it’s easily worth every penny. Its one of the top sellers on NewEgg and many reviewers attest to its greatness.

Next up are the Slicksurf Replacement Mousefeet, a great set of durable, smooth mousefeet that can be used with just about any mouse. The website lists different models and the prices are very reasonable. This is a small, little known Austin, TX based company that makes an excellent quality product.

With the combination of both products, you are well on your way to improving your mouse experience, no matter which mouse you actually own.

The Indian Software Industry’s growing pains

Rajesh Setty had a good post today about the major gaps between large companies and small companies in Bangalore’s software industry. Based on conversations I have had with many former colleagues that are trying to hire in Bangalore, I think he is 100% on the money with the points he makes.

I think the root cause of these problems has a lot to due with the attitudes of the talent. The turnover for software jobs in Bangalore is indeed very high and this has almost become an accepted part of the culture. One of my relatives there has switched jobs 3 times in the past 1 year. In such an environment, it is extremely difficult for a smaller company (even smaller multinationals) to capture or retain talent. Also, the larger companies are less willing to take on a more risky, non-commodity based project because they can’t guarantee that they will have the same staff throughout the life of the project.

A major reason for this is that many of the technical people in the industry see technical roles purely as a temporary stepping stone to management. If an individual is forced to do more technical work for 3 years or more before getting a shot at managment, they may decide to leave for greener pastures. While technical work can be an excellent stepping stone to management, the skills needed for management are very different and can take a lot longer to obtain. Not only that, there just isn’t enough room in any company for too many managers.

I expect that Bangalore and the rest of the Indian Software Industry will likely get past these issues, as they are projected to continue growing by over 30% next year.

New Developers

Oren Eini made a great post the other day on his blog about some of the “experienced” .NET developers he has come across in interviews.

I found this part most interesting:

“I had a discussion today about the value of using a non-Microsoft framework for a complex application. The point that came up repeatedly was that they want to jsut grab a programmer from the street and have then start fixing bugs from day zero.”

This almost exactly describes my first professional experience with .NET. During some bench time while consulting, I was assigned to a local custom application development project that needed a few extra bodies to do manual regression testing for a few weeks.

Yep, you heard that right. I had to go from being a developer to being a manual tester. However, I assumed this was a temporary role (just a few weeks after all) and it gave me the chance to avoid traveling for a while after recently getting married.

After only a few weeks of grueling manual testing, I started peeking over the shoulders of the developers (who happened to be coding in .NET). With a little bit of background in writing JSPs and VB/VC++ win32 apps, I found it easy enough to put things together and understand the basic structure of the framework. After fixing a few bugs on my own, it became clear to the project managers that I was far better at fixing bugs rather than finding them. I was officially made a development resource and enjoyed my rebirth as a .NET developer. My induction ceremony consisted of being assigned about 20-30 medium/low priority bugs and told that they needed to be fixed within half a day. Joy.

So technically, I am a Poster Child for why companies choose the .NET framework and not something with a perceived steeper learning curve. By abstracting away many of the important details of the HTTP protocol with fancy wizards for everything, .NET sounds fantastic. It is pitched as being relatively easy for any developer to pick up in a very short time.

This could not be farther from the truth. While .NET has the appearance of being relatively simple and easy to use, it’s also very easy to grossly misuse it. The most common trap most new ASP.NET developers fall into is the dreaded Death By ViewState. ViewState is a powerful thing and all new .NET developers should make every effort to truly understand it.

In my situation, I initially tended towards the side of caution every time I changed a single line of code and commented the hell out of everything. That way, if I screwed anything up, a more experienced developer could easily fix it. Had I been a typical Cowboy Coder, I could have done some real damage to that application. This project also had no concept of unit testing or automated builds and barely had source control. Taking all of that into account, it became clear that there were huge risks in bringing new developers onto the project.

The bottom line is that it’s always a risk to bring in a new developer. A developer with X years of experience with a particular framework gives no guarantee that they can spit out great code. Standardizing on a particular framework won’t ever insulate an organization from poor developers. The only real solution is to involve existing succesful developers in the screening process for new candidates. And existing successful developers should be equally willing to be part of the hiring/interview process. After all, no one wants to waste time reading Talmud-like code.

Poor translations in software

So I came across this gem from the Asus Update software that came with my new Asus G1 Laptop

Asus Update

What a great translation…"The environment is no need to update". Did they mean "There is no need to update the environment"? Or perhaps "The environment is up to date"? Asus makes high quality laptops, including the Apple Powerbooks, but this is just bad. They might as well have put All Your Base Are Belong to Us.

However, this got me thinking. How often do Western developers translate their software? Almost never. After 5 years of development, I can honestly say I have only been exposed to translation in software once. And that was during training for the creation of Enterprise Applications while I worked at J.D. Edwards as an Application Test Developer. There were entire teams at JDE whose only job was to translate text labels, and messages within the applications that other engineers developed. These people knew little to nothing about development or coding and merely did the job of translating the displayed text on the software. Rarely would you find an engineer/developer who could translate their own apps into multiple languages without handing it off to a translation team.

Outside of the English-as-a-first-language world, I suspect that many developers are probably responsible for writing the code and translating their user interface into one or two languages. Once in a while you will see job opportunities listed here in the US where they want a developer who can speak Spanish fluently, and these jobs are becoming more and more common. Immigrant owned businesses are also on the rise, as a recent report in the Bay Area suggests that 25 percent of Startups have immigrants behind them. While it’s unlikely that many of us will start translating our own software, its important to recognize that limiting ourselves to English-only speakers may not be an option in a few years. Making efforts to internationalize your software today will help make future translations of your software far smoother. With an effortless, real-time solution still a few decades away, I think all Western Developers should put basic software internationalization at the top of their list for skills to refine in 2007.

Calling a .NET Web Service From Rails (original)

A lot of people have come to my blog by googling an older article I wrote describing how to call a .NET web service from Rails. I didn’t migrate any of my older posts over as part of my move to, but I’ll repost this article for those who want it. My only disclaimer is that the Rails platform has changed quite a bit and if you find any mistakes with this code in the current Rails codebase please leave a comment and I will update it appropriately. Thanks!
The Rails platform implements ActionWebService, a set of libraries used for pushing out Web services from your rails application. This seems to work relatively well, but most would agree that AWS leaves a bit to be desired in the area of consuming web services. This is where the Ruby SOAP::WSDLDriverFactory library comes into play.
In this quick example, I will use a stock quote service located here.
The nice thing about .NET webservices (which usually have the .asmx extension) is that you can call the webservice and see all the parameters from the exposed description to test things out.
So, here is the controller code I am using which calls this web service:

require 'soap/wsdlDriver'

def update_stock_info
    @security = Security.find(@params['id'])  
    factory ="")
    soap = factory.create_rpc_driver
    soapResponse = soap.GetQuote(:symbol => @security.ticker)  
    price = soapResponse.getQuoteResult.stockQuote.price
    @security.description =
    @security.current_price = strip_html(price)

In this example, I am creating an object called @security which holds the price and description of a particular stock, passing its ticker symbol to a web service, and then retrieving and saving the description and current price of the stock back to my original record.
Here is what the code does:

  • Pulls up a particular Security record by referencing its ID.
  • Creates a web service factory using the WSDL file of the web service.
  • Opens an RPC driver to that web service factory.
  • Calls a particular web service method (in this case GetQuote) from the driver and passes the current Security object’s ticker to the ‘symbol’ parameter of the web service.
  • Retrieves the value of the stock’s description from the Soap object’s business field and store it in my Security object.
  • Repeats the previous step for the current price, and strips off the HTML markup before storing it as a decimal data type.
  • Saves the Security record.
  • Resets the soap stream so it can be called again.

The part I hard the most trouble with was the “marshalling” of the SOAP object. I had assumed the SOAP response would come back as XML and require some manipulation, but in fact it came back as an easy-to-use soap object based on the XML data structure. I recommend using breakpointer or IRB and use the .methods property on the soap object to traverse its structure and find the values you are looking for.
Please leave any comments on this tutorial below.

ATI’s new digital cable tuning TV wonder

External ATI TV Wonder

ATI recently announced their TV Wonder product for Windows Vista equipped PCs. This is the first consumer level Windows Media device that can decode QAM digital cable signals via the use of a CableCARD provided by your cable provider. This allow users to use Windows Vista media center as a PVR for just the cause of renting a card or two (currently $7.99/month for Time Warner customers).

After reading the press release, I was initially excited about finally being freed from the horrible tyranny that is my Motorola HD DVR without having to spend $800 on a better product. However this new product with ATI coupled with Windows Vista has extremely crippling DRM attached to it.

From The Tech Report:

Not just any PC can connect to this TV Wonder, though. It must meet a stringent set of requirements, including OCUR support in the BIOS and support for HDCP (High-Bandwidth Digital Content Protection).

And even more troubling:

Sadly, the OCUR-compliant PC must come from a major PC manufacturer…PC DIYers will be left out in the cold entirely, and AMD could not say whether this situation might change at some point in the future.

Great move AMD, abandon the enthusiast community that bought your initial processors and helped make you a suitable competitor against Intel.

Now the big secret that no one wants you to know: CableCARD is on its way out.

The equipment manufacturers and cable operators have been unable to get CableCard to actually work properly in the real world. On top of that, the current CableCARD standard doesn’t support Video-On-Demand of any type. A bidirectional CableCARD adoption has been halted by the current issues with the unidirectional format.

At this time, there are less than 200,000 installations of CableCARD in the US. To make matters worse, the operator has to endure an enormous deployment cost because every CableCARD installation (PC, digital TV, Tivo, cable box, etc) requires an on-site installation that takes considerably more time for a tech than a standard digital cable/internet install. This means the actual deployment costs for mass adoption of CableCARD are in the multiple tens of billions of dollars. This seems like a lot of trouble for content that you can’t even watch on multiple devices.

Now the good news:

CableCARD is going to be replaced starting in 2009 with something far similar and cheaper to deploy called DCAS, or Downloadable Conditional Access System. It supports home networking, and will allow you to share content with some DRM restrictions, but at least you’ll be able to move it around to other devices unlike CableCARD . The TV and PC manufacturers like it because its far easier for them to implement. Hopefully this is what they’re headed towards. Best of all, there’s no external card to purchase (other than the interface device which, for PCs, will be a coax-to-USB type of connector). Broadcom, a big manufacturer of set top box chips is a big supporter of DCAS.

2-3 years is a long time to wait and a lot of this is subject to change, so if you feel compelled to buy a CableCARD solution now, don’t let this information dissuade you. It’s still a viable option if you don’t care about DVR or on-demand and just want to watch HD content on a single CableCARD enabled device.

Thanks to Kniggit for the DCAS and CableCARD info.

iPhone finally announced


Well its official, Apple has officially revealed the iPhone at Steve Job’s Keynote speech. Here’s what we know so far:

  • 11.6 millimeter thin
  • 3.5-inch 480 x 320 touchscreen display with multi-touch support and proximity sensor
  • 2 megapixel camera
  • 4GB or 8 GB flash storage
  • Bluetooth with EDR and A2DP
  • Built in Wifi
  • Quadband GSM /w EDGE connectivity

So far it looks like its every gadget freak’s dream (yours truly included). The only point I’m a bit surprised about is the fact that it only supports EDGE Connectivity instead of the much faster HSDPA connection that the newer smart phones are using. At a suggested retail 2 year contract price of $499 for the 4GB model and $599 for the 8GB model this could derail the iPhone for music lovers who don’t already have a larger capacity Ipod and a great HSDPA enabled smart phone.

Oh well. I can’t fault Apple since this thing has obviously been in development for a long time. Maybe the next one will come out at $299 with HSDPA. Then I might consider it.

Getting the most out of your Ipod

After having an Ipod for over a year, I am only now getting the most out of it. This is partly due to obtaining newer music and also because of my purchase of an Ipod Integration Adapter for my Volkswagen Jetta. I looked into FM Transmitter options but being something of an audiophile, I didn’t want to spend $100+ and get low quality sound out of my Ipod. My best option was an Ipod Integration kit that directly connects to the factory radio, enables steering wheel controls, and charges the Ipod while driving.

I did a lot of research on the VW Vortex Forums to make sure everything was done right. Enthusiast forums are great places to find information on your particular car for everything from maintenance, common problems and solutions, and of course great aftermarket toys. Forums exist for just about every model of car out there so I highly recommend every new car owner to take some time out to research by looking at the enthusiast community for the car. The installation was fairly straightforward (took about 3 hours) and I didn’t run into any snags while doing it.

Now that my Ipod was connected up I had to find out more about how to manage my playlists. Thus far I had been doing the standard manual playlist management but after finding this great article, I have realized the power of smart playlists. The article is pretty lengthy, but the key point is that you can rate any song on your Ipod during playback by clicking the middle button twice and assigning a rating. Once most of your songs are rated, you can take advantage of Smart Playlists by creating them in Itunes according to your ratings. Read the article for more info.

Starting over with

It has been a while since I last posted on my blog and its been in fairly bad shape due to my severe neglect of it over the past few months. So I decided to start over and move it over to This was not an easy decision and there were a number of factors that contributed to my final choice.


This has been a major problem on almost every blog I’ve ever started. attempts to bypass this by using Akismet. As Jeff Atwood recently pointed out, the combination of both Akismet and CAPTCHA seems to be an effective detterrent against combating blog spam. While these two will help a great deal in reducing comment spam, the major problem I’ve continuously had to deal with is trackback spam. For now I’ve chosen to disable trackbacks for the time being until I can implement Jeff’s Technorati-based solution. I’m hoping sees the light soon and adds CAPTCHA.


The Rails based blogging software I have been using, Typo, has gone through multiple major upgrades over the past few months. One of the upgrades I took severely broke my blog and I had to spend a few days fixing it. While I would expect this from most open-source packages, it turned me off from Typo since it took so long to track down the problems and fix it. My host has also had relatively poor support of the Rails platform so during peak hours a lot of 500 errors show up on the site.


My webhost, Dreamhost, has a history of being extremely slow. The reality is that Dreamhost is a bargain-bin webhost and you get what you pay for. Considering how cheap my hosting was, I can’t complain all that much. However if I really want to build this blog up and get a good amount of readers, I have come to the conlusion that my needs will be better served by a host-supported blog platform like, Blogger, Typepad, etc. Few cheap shared hosts can compare to the raw speed that these platforms provide for their users.


Anyone who has known me for a while knows that I like to switch platforms fairly often. Being able to export and import posts/comments is a big boost for me. has shown a commitment towards helping users switch platforms, and I applaud them for that.

Reputation hosts many of the top blogs like Robert Scoble and The Web Worker Daily. Also my friend Dave O’Hara has said great things about his experiences with as his blogging host. The additional ability to map my existing domain with solid hosting at a very reasonable price is a great feature as well.

I’m excited to see how works out and I plan on posting a lot more often to it. Please change your RSS feed links to my new one when you get a chance.