XAMPP - Web Development Environent on Windows

When programming and developing for the Web I’ve always preferred a Linux box or, in the past few years, Mac OS X. Lately I’m finding myself on a Windows machine and before I go about installing Linux, I wanted to revisit the difficulty of setting up a development environment in Windows (mysql, php, apache). With XAMPP the whole process is remarkably easy.

XAMPP is also available for Linux and versions are in development for Mac OS X and even Solaris. As the documentation strongly states, XAMPP isn’t secure enough for a production environment and is only intended for development purposes. How long does it take to install on Windows? Let’s see…

With the installer version XAMPP is a 33 MB download, so that gives you time to read the documentation. On my connection the download took 3 minutes but there’s really not a lot to read.

The actual install was under 2 minutes. …. since I’m on a Spanish language version of Windows the installed location is C:\Archivos de programa\xampp … I guess that is “c:\Program Files\xampp” for most of you, rigth? I forget.

After installation the XAMPP Control pops up. At this point you need to be sure to have read the part about security. After configuring a couple of passwords you’re then ready to go.

So, just 15 minutes after beginning the download I now have mysql, php, phpmyadmin, apache, and a few other things all working fine on my Windows machine. Simple, I like that.

XAMPP also includes a little batch file that you can use to switch between PHP 5 and PHP 4. You have to stop the apache service first before running the batch file but the XAMPP control panel makes that easy.

Maybe it’s not all that difficult to install all these things individually anymore on Windows. It has been a while since I did that. But with XAMPP I don’t really see why anyone should bother if you just want a development machine. Unless, that is, you’re needing to work with a specific version of MySQL. The version supplied with XAMPP is 5.0.24a.

Of course, I always think that the best development environment is a developmental server that is similar to your production server (same OS, same configuration). But that’s not always a possibility.

Many sites, many domains, one admin

Working with technology can be fun when you’re presented with a challenge and need to find a solution. One of my latest tasks is to figure out how to manage more than 100 Web sites, each with its own domain (not subdomain or subdirectory), in the most effective way possible. Some sites will be blogs, others will be more traditional Web site.

I’m very fond of WordPress and my initial thinking was to figure out how to make it work for my needs. I particularly like the way that themes work in WordPress and the ease of designing, customizing the interface will be a factor in implementing all these sites.

And though I do have a dedicated server for all these sites I don’t want to have a hundred instances of WordPress. I would like to have one application installed that can manage sites over multiple domains.

Keeping WordPress in mind I looked at WordPress MU and Lyceum, which are both forks of WordPress designed for multiple users. There are some interesting aspects to those projects that require further examination.

I’ve also collected a number of URLs on this topic, particularly relating to the use of WordPress that I may later add to this post.

For my needs it would be even better to be able to manage these sites all from one admin interface since these will be sites all maintained by one company rather than a lot of different users unaffiliated with each other. So, this makes things a little more complicated.

Also, multilingual capabilities will be nice since some of these sites will be in English and Spanish while some also will be in French.

I started to broaden my search to other content management systems. Drupal immediately came to mind since it’s an impressive project. I thought about Joomla! but it doesn’t seem to support multiple sites from one installation. Seems like Drupal offers a good option for many of the tasks that I need. Will definitely be examining it closer.

But I also decided to think about other CMS options and headed over to the CMS matrix, which lists hundreds of content management systems. I didn’t know that there were so many…not sure why the world needs so many, particularly the ones that costs > $75,000 but, hey, whatever …

A tool that seems very attractive to me is Typo3, particularly for its multi-lingual support and a number of other options. Since I’m less familiar with Typo3 I’m going to be spending some time exploring it. The drawbacks that I gather so far is that it has a high learning curve (no big worry to me) and it is very resource intensive (again, no worry here since I have a dedicated server for this project). Coming next, more info about Typo3….

Project management with Trac

Trac is a Web-based issue tracking system that has many project management features as well as support for handling revisions to software code. Trac is written in Python and uses sqlite for its database. There’s an option for using postgresql, and mysql support is available in the latest development release.

There are many features to Trac that make it suitable for project management. A wiki is built into Trac but the real star is Trac’s ticket system.

Categories (like bugs, tasks, enhancements) can be assigned to each ticket and each ticketed issue can be associated with a specific component of the software or project. A version and release number also can be tied to each ticket.

There a number of way to view reports for the ticket system, all of which generate a very nice color-coded list of tickets. The roadmap/milestones view is my favorite feature since it allows for an excellent overview of a project’s progress and future plans.

Another default report is the timeline that provides a listing of all activity within the Trac system on a daily basis.

The query tool needs some more work to make it more flexible but Trac is still in the very early stages of development.

For programmers Trac interfaces with Subversion for code management and it’s possible to browse the code of an SVN repository from within Trac. If you want to use Trac just for issue tracking then it’s possible to configure it without the SVN environment.

The documentation on using Trac could be a lot better but that should improve over time. The mailing lists at the Trac site are actually full of a lot of useful information and they’re now available through Google Groups, which mean an RSS feed.

While Trac is still in an early release the system has been under development for some time. However, Trac can be a pain to install. For now I recommend it only for the adventurous but others should keep an eye on it.

Actually, the complexity of the installation varies depending upon the platform. Oddly, I found that installing Trac on a Windows machine to be relatively easy. Installing Trac on my preferred Unix environment was very frustrating since there are a lot of dependencies that also need to be installed (Python, ClearSilver, SQLite, and a number of Python utilities) in addition to Subversion if you want to use that.

Look to see if a package is available for your platform. There’s a good Trac package for RedHat Enterprise Linux 4 that you should definitely use if that’s your system. I skipped this package the first time and tried installing everything individually only to spend a day and half with something that finally didn’t quite work. Then I went and grabbed the package and was up and running in a short time. That was my mistake, sigh.

An increasing number of plugins are being developed for Trac and some are essential, particularly for administration such as WebAdmin. See Trac Hacks for a good source of plugins. Since Trac plugins are Python eggs, those experienced with Python will have an easier time getting things setup. It’s not difficult but for someone new to Python then it’s going to take a little longer.

There are many public trac implementations out there but Trac also can be easily hidden behind http authentication. That’s how I’m using it so I can’t point you to my implementation. However, one of the best uses of Trac is by the developers of WordPress. That’s where I first learned about Trac. Head over to http://trac.wordpress.org/ and have fun browsing around all the development swirling around WordPress. (Once you’re at the site, select the roadmap or view tickets tabs).

Another public Trac that shows how the interface can be slightly customized is by the people behind CakePHP: https://trac.cakephp.org/

Finally, I just decided to check if anyone in libraryland was using Trac and via Google found this excellent use of Trac by the folks at OhioLINK for the Digital Resource Commons project: http://drc-dev.ohiolink.edu/. It looks like they’re using Trac and its wiki engine not only for issue tracking but also to maintain the project’s web site.

I’ve already seen my own productivity improve with the use of Trac. It’s going to be interesting to see how this system develops in the future.

Update: Here’s another public Trac implementation from the good folks at ibiblio.org … trac for Lyceum, a multi-blog derivative of WordPress.

Update: Another nicely done public Trac implementation: Max Media Manager, an open source ad server based on phpAdsNew. This site also uses the wiki within Trac to serve as the web site for the entire project.