Monthly Archives: December 2009
It should be obvious based on my worship of Bill Joy, but with a number of postings on Windows I wanted to make it clear:
When it comes to web servers and production environments I always use *nix and would never consider using Windows to run my enterprise.
I’m very happy with Windows 7 as my desktop I just wouldn’t want to build my server rack using anything but some form of Unix. These days I favor the CentOS distribution. For years I was a BSD guy of course, then an AIX guy, then a Solaris guy, and these days I’m happy with CentOS Linux.
Photo Credit goes to David Brooks, read his blog here.
“Is the customer always right?”
I get some interesting responses. My take on this is clear: the customer is clearly not always right, but it doesn’t matter as long as they are satisfied and happy. In fact, I like my customers deliriously happy if possible. It doesn’t matter if a problem is their fault you need to go out of your way to make them happy.
When it comes to developing applications one of the bad traits developers get into is doing things because they are easy to code, rather than because they are easy to use. There is rarely a time where it is a better policy to make the developer’s life easier at the expense of the end user. Of course, if possible, you want to make every ones life easier.
One of the most useful things a developer can do is to actually watch customers use their applications. It is amazing how “features” that you are proud of get used and abused by them and you can quickly see things that are poorly designed. Another practice that pays off in spades is to spend a day answering calls from customers and use the tools provided to the customer service staff. Nothing shows the flaws of a system like actually using it under fire!
Caching is so important from every aspect of running a website that without it, the Internet and/or our servers would surely grind to a halt. Caching occurs at many levels and the more levels you have the better performance you will likely have. If a few caches remain sticky along the way this is normally ok. People say they want “Real Time” but rarely do they care. Sometimes a minute or twenty minutes old is fine and frequently hours and days is also fine. The more use you make of this knowledge the better chance you have of helping out with various well placed caching systems.
Some common forms of caching are:
Other less common forms that make a huge difference to user experiences are application level caches both in the Content Management System (such as Drupal) or Web Application Framework and front-end database caching. In Drupal, for example, you can cache CSS files, Javascript files, full pages, blocks, and generated images. Front-end database caching can make a big difference to the amount of requests you can handle by offloading the primary database with common and infrequently changing queries.
The best forms of caching are ones that don’t require developers to think about it. But sometimes the application requirements are unique and only the person writing the code can get the most out of the system.
However you slice it caching provides a huge benefit to both producers and consumers and without it the internet would have crumbled long ago. Caching truly is our friend.
I recently upgraded my development PC to a Dell Quad Core T3500 and in the process went from Windows XP to Windows 7. Upgrading is always a painful experience because I have installed so much software over the years, and getting it all to work on a new platform can take months. I took the opportunity to upgrade most of the core tools that I use and thought it would be revealing to list them here:
- Windows 7
- Office 2007
- Firefox 3.5
- SlickEdit 14, (with Vi bindings of course!)
- SecureCRT 6.5
- WS_FTP 12 Professional
- ActiveState ActivePerl 5.10
- ActiveState ActivePython 3.1
- Adobe Dreamweaver CS3 9.0
- COAST Webmaster 4.1 (yes ten years old now, and Coast are no longer around)
- ULEAD PhotoImpact 12
- Adobe PhotoShop Elements 8
- MKS Toolkit
Many more random packages to add, but these at least allow me to work. So far I have been very happy with my upgrade. What I find interesting is that every 3 years I buy a new machine and it always seems to cost around three grand. Why is that?

Performance Still Matters.
I started writing software in the outstanding music decade of our time: The Seventies. In those days good software performance was instilled in me early on. System calls and disk I/O were to be kept to the absolute minimum. When I started building websites in 1994 performance was still a big deal to me. In those days static HTML was prevalent and when I set out to build a 100% dynamic CGI site it was quite rare. For speed I used compiled “C” and the site (Garden.com) was feature rich and very fast. Over the last fifteen years there have been many hardware and software innovations to make processing dynamic pages faster. In fact, for many sites we don’t even have to think about it. However, I’m amazed how slow some large and influential sites often are.
You really need to render pages in less than a second to keep people from noticing. Certain pages (e.g. order checkout and account creation) can take longer without losing people’s interest, but for the most part clicking around from page to page should take a second or less. 0.1 to 0.5 seconds are better. You can certainly notice the difference between a second and half a second.
What happens is that developers get so enamored with adding all these “cool features” to a page that they fail to keep an eye on the clock. Or they keep an eye on the clock for the single instance and don’t take into account that 100’s or 1000’s of clicks are competing for the same resource.
I have heard on more than one occasion developers say “Performance doesn’t matter anymore.” Well, performance does matter. Without it you can’t add all the features you need to keep people coming to your site and if you do your site will be so slow that people will leave even quicker.
As we constantly change and fragment the ways we get to deliver content over the web our servers will continue to get pummeled with requests and I don’t see a time when performance will ever be irrelevant. What is more likely is that if we don’t start really thinking seriously about performance at the lowest levels we will build systems that just topple over with the load.
Performance is more relevant today than ever.
If you have ever tried to move iTunes from one computer to another and at the same time change the drive or location where your store your music files – good luck! It is amazing to think that for such a sophisticated company as Apple there is no easy way to do this. Things get worse if you don’t let apple automatically rename files for you. There are a number of systems that are designed to restore from your iPod (e.g. MediaWidget and CopyTrans) however these also rename your files.
I have only used iTunes for a couple of years and before that had many years of using other systems where I chose a different file naming strategy to one provided by iTunes. The last thing I want to do when I recently upgraded my PC was to change all of the names.
After a lot of trial and error and with some less than fruitful web searches I came up with this approach that worked perfectly for me. It is from a PC running XP to a PC running Windows 7. It assumes that you have shared both the music and iTunes folders from your old PC to your new PC and have turned off iTunes on both PC’s.
- Copy your music folder from your old PC to your new PC. For me this was from:
\\oldmachine\c\My Music to F:\My Music. - Copy your old itunes directory from your old PC to your new PC. For me this was from:
\\oldmachine\c\My Music\iTunes to C:\Users\andy\Music\iTunes. - Empty the iTunes Library.itl by typing:
copy /Y nul “iTunes Library.itl” - Edit the “iTunes Music Library.xml” file by globally replacing the old location with the new location.
- Turn on iTunes on the new PC. It will complain about the .itl file being corrupted and rebuild from the .xml.
At the end of this process you should be back in business and your playlists, ratings, play counts, etc. should all be restored.

Eudora
The end of my Eudora years? I never thought I’d see it happen, but I guess all good things must come to an end. I felt some sadness as I imported over 111,000 emails all the way back to 1997 into Outlook. So the first thing I did was change the email notification sound to the familiar Eudora one, as a reminder of simpler times.
I’ll miss those Chilli peppers!
However, I remember feeling disappointed when we first started in 1995 because he was not always as encouraging as I expected about our business. This can often be the case because a VC’s primary goal is to make investments and to get a good return. As an entrepreneur you are typically starting a company out of passion and a burning desire to create something. Of course you’d like to make money, but frequently this is not your primary goal.
As a result, when I started Digital Cheetah in 2001 the last thing I wanted to do was get any external financing. If you can afford to go alone, that is often the best strategy because you can create the company precisely the way you want. However, if you need the cash then remember VC’s are for funding first and just be grateful that they are willing to invest in you at all.
Nothing frustrates me more than when I see sloppy code or practices. If you have a set of coding standards for testing, documentation, naming conventions, and even layout – use them. If you don’t, then maybe you should get some.
One of the reasons I am drawn to Python for my next major project is that the language has a very clean semantics and when you write using Python it just flows very naturally. The precise indentation requirements make even the layout of code always look consistent. Also, with facilities like doctest it becomes possible to combine the code, with the documentation and testing in a very clean and precise bundle. One can certainly not accuse Perl or even “C” of being rigourous.
No one would ever say John Tucker was a great coder, but he certainly helped me write better code and design stronger systems that have lasted for years. I think a big reason for this is the sense of rigour he instilled in my over twenty years ago. Thanks John!
The basic premise of the book is that when and where we grow-up, and how many hours you work, has a much bigger impact on our chance of success than genetics and intellect. It traces the lives of highly successful people applying this premise. He is so convincing that I definitely changed my view of how I achieved my own success.
I used to believe I was just born brilliant, but thanks to Mr. Gladwell’s book now I’m not so sure …

OS/2 Warp using the System Object Model
and we spent many hours discussing programming, girls and beer. I got on very well with Chuck and was quite certain we would both be writing code for the rest of our lives.
When I was at IBM I worked with another great coder – Larry Raper. Larry and I worked closely together on one of IBM’s great lost technologies the System Object Model (SOM), and it was through the work on SOM that I received the majority of my patents. Larry and I had many coding discussions together and I have fond memories of those times. Larry was always going to be a coder, I felt sure of it.
Chuck started working for Microsoft in 1989 and today he is a General Manager. Larry is now retired but he spent the last five years of his career as a manager. Both of these great coders took the manager path that I see all too often in our industry. There is only one reason I know that great coders move into “management” – money.
One of the main reasons I started Digital Cheetah was because I didn’t want to end up as a manager. Nothing against managers – a good manager is almost as hard to find as a good coder. What is sad is that our industry almost always takes the best and most experienced coders and makes them managers. I don’t understand why this is because rarely do the best coders make the best managers.
I think companies like Google understand the importance of experience in their coders and only wish that more companies would compensate them fairly. An experienced coder is easily worth ten or more juniors, sometimes a lot more.

IBM Austin – A Patent Machine!
Since starting Digital Cheetah in 2001 I have developed some very creative solutions that are certainly worthy of patent submission. However, I have not applied for one patent. There are two reasons for this:
- The cost of processing a Patent.
- The restriction they can impose to freely use the ideas.
In the early days of Digital Cheetah the cost was the biggest reason for not pursuing a patent. However, these days I am less inclined to apply for a patent because although they offer some protection against their use, they also impede my own ability to use the same ideas in the future. For most small businesses I believe “patent protection” is an illusion and all that you really do is limit your own use of the ideas.
Most of the time the only possible reason for applying for a patent is if you plan on selling the company. Then having a patent portfolio can be attractive.
If you want to automate the maintenance of your Drupal sites the best tool is drush. It allows you to maintain modules, run sql queries, clear caches, show logs, run cron, and perform unit tests. Nothing more to say, but I only recently found this tool and if you love the command-line like I do this works like a charm.

Brilliant Gallery
Drupal has over 4,000 add-on modules available and it is easy to get lost in choosing which to download.
One of the first things you look for when you build a new website like Code Trials is a cool looking image or gallery module. The best and most flexible I have found is the Brilliant Gallery. You can see an example here. Not only does this module look sharp, it is very flexible and the creator of the module: Tomáš J. Fülöpp is continuing to develop the module with wonderful new features.
I tried a number of different modules before finding this one and now this is the only one I use. Thanks Tomáš for the module!
I used to use zip for backups on our servers. I liked zip because it was fast and easy to use and worked easily on PCs too. Everything was great for a few years until our backups started hitting 2GB then zip did not perform so well. I tried various versions available on Linux and in the end decided it was nightmare trying to read the files. Since then I have changed all my scripts to use compressed tar archives: tar.gz. There appear to be no limitations on the file size with tar.gz, except for the file system itself.