As some of you might already know I've been building my own business website for the past month or so.
The whole project started with the evaluation of several CMS products. At the end of that process, I decided to go with Drupal.
Drupal is fast. Drupal is well written. Drupal is well designed (architecturally speaking). And Drupal has an amazing community that is actively taking Drupal to higher and higher levels.
I went ahead and installed version 4.4.2 and soon found that it didn't quite have all the features that I was looking for. These features were all the "nice to have" variety - nothing critical. But, the active development community also took note of the same shortcomings and was well on its way to addressing a great number of them. The good news with Drupal (and most open source projects for that matter) is that you can always download the latest snapshot of the development version in CVS. These versions aren't always stable, but if an issue or feature has been addressed, this is the only way to get it without having to wait for the next major version release.
So, I went ahead and started downloading newer and newer updates of the product on a regular basis to keep my site development up to date.
However, I soon discovered that I was having a hard time managing all the different versions of the site I had sitting on my computer. I would download a snapshot and see what files, if any, were new and changed. I would then update my development version and upload it to my web server. But the whole process was a big mess.
The first step that was immediately required to fix my problem was a way to compare the new and old files. I decided this after 2 updates. I was neither going to upload all the files, nor was I going to manually check for changes in file size and date. I had a file comparison utility on my system for ages, but it wasn't good enough. I needed something better that did what I needed to do. Winmerge did a great job of doing just what I needed done - so it was added to my toolbox. Updates were much faster and easier.
Still, Winmerge only helps with comparing core files that I hadn't been monkeying with. Obviously any file that I changed by hacking the PHP wasn't going to match with any new or old files I was downloading from a CVS snapshot. (Well not in my system anyway).
And, what if I want to contribute my changes to the Drupal community? My way of doing things wasn't going to help me. Furthermore, my problem of having piles of files of different versions floating on my computer was going to continue to be a mess.
Part of my hacking of Drupal included adding some community contributed patches. Some of these patches eventually get added to the core of Drupal, but others are considered and rejected. However, some of them, while never likely to make it to Core, still had value for me and modified Drupal in just the kind of way I wanted.
The patches themselves were .diff and .patch files that showed exactly what needed to be changed in the code. And in most cases the hacks were only a few lines of code. Easy enough to change manually. But, what does one do with more complex changes? And where are these .diff files coming from. What if I want to make my own to share my hacks?
The Zen learning experience was taking me to where I needed to be.
I have been wanting to learn how to use a Concurrent Versions System (content versioning system / code Versioning System) forever now. I had played with M$'s source safe ages ago, but never enough to become any sort of master (or novice for that matter). But, the truth is that in all the development environments I have worked in, I have never had the need to actually use CVS (in any form). In most cases I was the only developer working on any files. I had my own way of managing my versions and changes.
But, now... all of a sudden - all the problems I was having trying to apply my old way of doing things to an open source CVS world could easily be solved by just going ahead and updating my skill set.
Sure enough - winCVS had everything I needed to fix my problems. One interface to connect to the latest version of the code I needed to update. One interface to compare file changes. One place to see what those changes actually were... and it supports winMerge so all the tools and tricks I had already learned were still at my disposal. And I could easily create patches and diffs of my own to contribute back to the community.
And, to boot - it took me all of 2 hours to get up and running to the point where I actually knew what I was doing. I already knew what the process was for submitting patches - I just didn't know how to create the proper patch files. I already knew how to manage my code and compare files, I just didn't have a single place to do it from. I already knew how to get snapshots of code - I just didn't know how to get the latest files without having to wait for a snapshot that included a bug fix that I needed NOW.
Long story short the time finally came to stop simply doing things my way (which was fine until now), and start doing things a better way.
The only problem... I think I will be spending much more of my idle time playing with drupal code than I ever thought I would. I'm not only going to be supporting open source, I'm finally going to give something back. This is not so much a problem from a professional development standpoint - but it may turn out to be a personal problem if I don't get away from my computer every so often and spend some quality time with the woman I love.
andre
p.s. The business site is nearly done, but I am hacking some fixes to some bugs that I just can't live with. Besides, how professional is it to have a web technology consulting web-site that is broken...
Posted by andre at September 28, 2004 08:17 PM