Web Apps with Tiger: MediaWikiby Kevin Hemenway
It's not prom night. It's not graduation. It's not time to pop the question. No raise, no bonus, no Ed McMahon, no free song from iTunes. Instead, we're going to install our first web application. Now, I know, I know: installing software versus a lifetime of acceptances from your partner is a teensy bit of a skewed comparison. And if I had something to tie the two together, to suggest that they're equivalent coming-of-ages where you evolve from beastdom or innocence into civilized society, I'd probably have stated it by now. But I don't, so I won't. Let's just start this crazy thing, eh? (If you're behind, catch up with Web Apps with Tiger: Getting Started and Web Apps with Tiger: Security and MySQL.)
Choosing the Right Software
In our previous articles, there hasn't been much of a chance to make choices: to decide if we really want PHP, or if MySQL was the best outcome we could've reached regarding databases. PHP and MySQL are such entrenched expectations that you simply can't go wrong with them (calm the flames, you muckrakers!). Now that those are outta the way, we're entering a familiar world where you or the person you're asking are right, and all others are wrong, and laughably so.
What's your favorite text editor on OS X? What about image manipulation? Is AppleScript worth learning? The Dock is great! No, it's not! I love the Dashboard! You're an idiot! Et cetera, et cetera, et cetera. The same software decisions you've made regarding your local OS X applications apply equally to web software.
With web applications, however, there's a big difference: instead of just one person, you, fiddling with a text or image editor, every one of your web site's visitors is going to be messing with, innocently or maliciously, the software you make available on your server. That's quite a different dynamic than what you're probably used to.
Mentally, I have a fluctuating set of things I look for when I'm choosing a web app. They're not hard and fast rules, merely "be awares" that help me decide if a particular software is even worth investigating. Making the right choice up front is abnormally important with web applications: if you make the wrong one, you're going to be looking at possible site downtime, custom scripts to import old data into a replacement system, and the constant harassment of users who preferred whatever you had installed before. My list of concerns include (currently... once this article has been posted, I'll be all, "ArgGHh! I forget Aloofness!"):
- Community: You're going to want some sort of support system when you're dealing with software that has to stand up to the pokes and prods of thousands of bloodthirsty visitors. Is there a strong community? Are there regular progress reports from the developers? Are users sharing their success stories? Or is the community floundering, with numerous questions being unanswered, or worse, answered rudely? How quickly do security updates appear? Are people happy?
- Dependence: Can you depend on the software to be around for another few years? Are there any major sites where the removal of the software could cripple their operations? Is the dog food properly ingested? The goal here is to determine if there's another upgrade path, should the core developers give up the ghost. Are there smart enough people around to keep progress moving should something dastardly happen?
- Reputation: What are other folks saying about the software? Is it buggy or full of security holes? Has anyone important™ used the code or thrown his or her weight behind its future? If there's a blood drive to buy a new server, do unexpected benefactors appear with Dickensian delight? Have people from your regular tech hangouts heard of it or used it themselves?
- Resources: How complicated is it to install? Do you need custom tweaks to your back end, or new libraries, modules, or supplementary software you'll also need to install? Once it's up and running, does it create a high server load, or use an obscene amount of memory? Are there lots of moving parts that make upgrading a lengthy process? Unfortunately, this particular concern can often only be addressed after it's too late--when you've configured the software just right, unleashed it on your public, and then realize it's destroying your server.
- Readability: Is the code readable, well-written, and well-documented? If something broke or you needed a small tweak here and there, would you be able to hack your desire in there without a lot of effort? Does the code show some sort of intelligent design (heh, heh) or is it sloppy, poorly blackboxed, or full of tricky passages that require hours of hard staring, debugging, and enough liqueur shots to warrant a hunting license?
- Expandability: In relation to the community, is there a lot of healthy hacking going on? Are people expanding the software to follow their own whims and desires? Are these expansions or plugins fully supported with a documented API, or are they truly "add-ons" that were never meant to be? How easily can you get your data out of the software? How about getting it back in? Does it play well with others or existing standards? Is it friendly to modifications that are more than just a "small tweak here and there," but rather a tested addition for the community at large?
These are all questions that run through my head when I'm researching a particular web program. Naturally, they've all been asked for the pieces of software we'll be exploring within this series. Be aware, however, that there are very few projects that satisfy every little quibble; the final decision often devolves into a listing of pros and cons and how much a particular negative outweighs a specific positive.