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.



Today I switched from using Eudora, which has been my trusty email client for over twelve years, to the industry leader Microsoft Outlook. Since Qualcomm officially stopped developing Eudora in 2006 it has slowly fallen behind with current email and web standards.

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!

John Thornton - General Partner at Austin Ventures

John Thornton – General Partner at Austin Ventures

At my last company,, we had a number of rounds of venture capital before going public in 1999. Our primary Venture Capitalists were Austin Ventures, led by John Thornton. Over the years I’ve got to know John pretty well and appreciate his knowledge and sound business sense. He has always been generous with his time and advice to me.

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.

John Tucker, BA (Warwick) MSc, PhD (Bristol), FBCS, CEng

John Tucker, BA (Warwick) MSc, PhD (Bristol), FBCS, CEng

One of the things I learned whilst working on my Ph.D. was a sense of rigour. My advisor: Professor John Tucker fought long and hard with me to curb my sloppy ways and instill a deep seated sense of precision and rigour in my thesis and code. This was not an easy task but I believe it was the single most important lesson I learned during my Ph.D.

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!

Outliers - Malcolm Gladwell

Outliers – Malcolm Gladwell

I recently read the thought provoking book: Outliers by Malcom Gladwell. I was particularly pleased to see Bill Joy and The Beatles featured, amongst many others. The book attempts to explain why some people succeed far more than others. It was fascinating to read about the early lives of Bill, John, Paul, George, and Ringo and how they grew into such huge successes.

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

OS/2 Warp using the System Object Model

Over Twenty years ago I shared offices with one of the best coders I’ve ever worked with: Chuck Chan. We were both working on our Ph.D.’s
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!

IBM Austin – A Patent Machine!

Over the last twenty years I’ve had thirteen patents published. Most of these were applied for when I was at IBM in the early ’90s. IBM had good financial incentives to publish inventions and patents. It also turns out that IBM Austin produces more patents for IBM than anywhere else in the corporation, so its not surprising I wrote so many.

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

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.

No Entry To Hackers

No Entry To Hackers

If you have a web server then every day you are under attack from various automated attacks on your ssh, ftp, and web ports. These are a few of the things I do to try and curb their enthusiasm:

  • Turn off unsecured ftp and telnet – these have no business in the modern world.
  • Change your ssh port from the standard 22.
  • Use long (16 character) and different passwords. It is easy to think you have a great password and use it everywhere, but if it does get discovered you will regret using the same one everywhere. It is a pain maintaining a list of different passwords but it is a practice I follow these days.
  • Make sure you are using the standard Linux firewall iptables and augment it with apf.
  • Optionally, use a brute force detection system like bfd. I say optionally, because I find once you remove ftp and change your ssh port bfd is less useful.

If you follow these basic steps you’ll cut out 90+% of the attacks. However, I have found that once you move your ssh port most of the action is on your http port 80 and this is where you need to focus. I have a simple script that looks for known patterns that show up in the web access logs. What are known patterns? Well it depends on your system and applications but things like phpMyAdmin are a great place to start. In fact phpMyAdmin, is a useful program but I restrict its use to just my IP address, it is too powerful to let other people even see it.

If you see a client trying to run a program they should not, such as phpMyAdmin, just block their IP address via apf or iptables. When it comes to server security I find it is best to act first and ask questions later. If there really is a reason why someone in China needs to access phpMyAdmin, then you can add an exception to your script. Another common pattern is /etc/passwd. If you just study your web logs for a few minutes each day you quickly see things that don’t fit with your applications. My script runs every five minutes and removes 5-20 IP addresses per day.

Drupal Rocks!

Drupal Rocks!

Wow what a truly brilliant system Drupal is. Dries Buytaert, creator of Drupal, is a rock star for sure. I was able to knock this site out in a few hours thanks to Drupal. I have spent the last fifteen years building custom web development solutions and over the last twelve months I have seriously questioned why am I bothering when systems like Drupal are available.

Luckily there are reasons why Drupal does not work for us, primarily to do with mass customization and new application creation. However, if you are looking for a solution that covers all the basics and more, you’d be hard pressed to find a better system than Drupal. I question what I’m doing every time I use a Drupal site.

Thanks Dries your masterful code is appreciated here in Austin, Texas!

The Original K&R - Still a Classic!

The Original K&R – Still a Classic!

If you look closely you’ll notice that the favorites icon for Code Trials is a faded blue “C”. This is taken from, the seminal book on programming, the first edition K&R, or more fully titled: The C Programming Language by Brian W. Kernighan and Dennis M. Ritchie.

Of all the books on programming I’ve read, this is by far and away the one that had the biggest impact on me. I programmed in “C” for a close to twenty years. I think “C” is a beautiful language. Sadly I have not written much “C” in the last ten years, and when I do I’m rusty.

After the crash, I wanted to switch to an interpreted language for web development and back in 2000 with so much experience in “C” the only real option for me was Perl. Perl is a fun language for sure and thanks to its incredible selection of libraries there is pretty much nothing you can’t do in Perl.

However, Perl is not a beautiful language. Don’t get me wrong, I like programming in Perl and have written some of my “best” code using it. But it does not have the beauty or elegance of “C”. In the new year I will embark on the creation of a new platform that will permit Digital Cheetah to build 1000’s more custom websites for a fraction of the development required with traditional systems. For this project I will not use “C”, or Perl or Ruby or Java. I will use, what to me is rapidly becoming the perfect language, Python.

Over the coming weeks and months I will revisit why I love Python so much.

Martin's Magic - It all began here.

Martin’s Magic – It all began here.

I have a passion for writing software. Solving problems by writing code keeps me up at night, and I live for the days when the code is flowing through my veins making sleep impossible. When I do have some downtime my hobby is collecting and performing Magic.

The software that my company, Digital Cheetah, uses was originally created to build my first Magic website: Martin’s Magic. Since then, when I have had a few spare moments I have have worked on many other magic sites. There is nothing better to fuel your passion than to incorporate it into your hobby.

Of course if you want to sleep or spend time with your family it may not be the best idea and you should take up train spotting instead.

If you were building websites back in the late ’90s you will probably remember how XML was cropping up everywhere. It was going to replace SQL and HTML and cure the common cold too. The vendors were promoting it as a panacea for all the evils of the web. As a result I became very disenchanted with the whole XML movement.

Over the last ten years the hype has subsided and thankfully XML has not taken over the world. However, it has emerged as a fine language for transmitting complex and arbitrary data structures between systems and over the web. It is well supported and most languages provide routines for its easy manipulation. I have just written a library that required importing and exporting complex data structures between websites and found it easy to do in XML. I saved a lot of time because I did not have to invent yet another encoding and I am able to reuse the code for my next project.

I for one will be making more use of XML in the future.