Just a Theory

By David E. Wheeler

mod_perl Bug Confirmed!

The mod_perl bug that I reported finding last week has been confirmed and a patch supplied by Salvador Ortiz Garcia. Read all about it here).

It turns out to be uglier than I thought, because what Location and Directory locations that mod_perl decides to “upgrade” to their Match versions is random. Actually, we’ve found it to be consistent in Bricolage (the relevant source code is here). That is, although we can’t predict which directives mod_perl will “upgrade”, it does tend to “upgrade” the same ones every time. This allows me to check the mod_perl version and try to do the right thing regardless. Maybe we’ll require mod_perl 1.27 when it finally comes out.

But at any rate, I’m glad to have the thing addressed and understood. It’s not common that I notice a bug in Perl or mod_perl, and it’s rewarding to see someone pick it up and address it quickly. Thanks Salvador!

Originally published on use Perl;

You’re So Vain

I’d just like to announce that I finally have a personal web page up. It has been years since I took down my “Hotlinks 1995!” page at U.Va., and the time finally arrived for me to have my own site again. Comments on the content and layout are most welcome.

Later, I’ll post a rant on how I exploited use Perl; for my own nefarious purposes.

Originally published on use Perl;

A mod_perl Bug?

I think I’ve found a bug in the <Perl> sections of mod_perl. More information can be found here. The upshot is that the Location directive, when used in <Perl> sections, seems to be used internally as a LocationMatch directive instead.

I ran into this because I was simplifying Bricolage’s Apache configuration. I moved the whole complex Apache configuration into a Bricolage module, so that it’s much simpler to configure Apache to run Bricolage — and much easier to use virtual hosts. (This is all in Bricolage’s CVS, BTW — it’s not yet released). I got around the problem by specifying all of my Location directives with a caret (^) prepended to them so that they behave like a regex version of Location (i.e., LocationMatch), but I’m kinda annoyed to have to do that. Am I right in thinking that the LocationMatch directives add a bit more overhead to every request?

Originally published on use Perl;

Software Development Methodology

I feel that it’s important to have a comprehensive approach to software development. It’s not enough to be good at coding, or testing, or writing documentation. It’s far better to excel at managing every step of the development process in order to ensure the quality and consistency of the end-to-end work as well as of the final product. I aim to do just that in my work. Here I briefly outline my methodology for achieving that aim.

First, good software development starts with good planning and research. I strive to attain a thorough understanding of what I’m developing by listening to the people to whom it matters most: the users. By gaining insight into how people in the target market think about the problem space, and by strategizing about how technology can address that space, a picture of the product takes shape. This research coalesces into a set of pragmatic requirements and goals that balance the demands of a realistic development schedule with the needs and desires of the target market.

Once the requirements have been identified, it’s time for prototyping. Task flow diagrams of user interactions model the entire system. Evaluations from the target market refine these schematics, shaping the look and feel of the final product. I cannot emphasize enough the importance of seeking market feedback to build solid and meaningful metaphors into the design. These concepts drive the user experience and make or break the success of the final product. The outcome of this feedback loop will be a UI, terminology, and object design grounded on intuitive concepts, scalable technologies, and a reliable architecture.

Next, a talented development team must be assembled and backed by a dependable, project management-oriented implementation infrastructure. Team-building is crucial for the success of any product, and in software development, a diverse set of engineers and specialists with complementary talents must come together and work as an efficient whole. As a result, I consider it extremely important to create a working culture of which team members want to be a part. Such an environment doesn’t foster a sense of entitlement, but rather of conviviality and excitement. If team members believe in what they’re doing, and they enjoy doing it, then they’re likely to do it well.

And what they’ll do is actually create the software. Each element of the product design must be broken down into its basic parts, fit into a generalizable design, and built back up into meaningful objects. I further require detailed documentation of every interface and implementation, as well as thorough unit testing. In fact, the tests are often written before the interfaces are written, ensuring that they will work as expected throughout the remainder of the development process. All aspects of the application must be implemented according to a scalable, maintainable methodology that emphasizes consistency, quality, and efficiency.

The emphasis on quality naturally continues into the quality assurance phase of the development process. The feature set is locked so that development engineers can work closely with QA engineers to test edge conditions, identify bugs, fix them, and ensure that they remain fixed. I prefer to have QA engineers punish nightly builds with suites of tests while development engineers fix the problems identified by previous days’ tests. QA is considered complete when the product passes all the tests we can dream up.

And finally, once all of the QA issues have been addressed, the final product is delivered. Naturally, the process doesn’t stop there, but starts over – in fact, it likely has already started over. New features must be schematically tested with likely users, and new interfaces designed to implement them. The idea is to end up with a solid product that can grow with the needs of the target market.

Looking for the comments? Try the old layout.

Tuesday’s SF.pm Meeting

Tuesday night was the monthly San Francisco Perl Mongers meeting. Invited to speak that night was none other than Randal L. Schwartz, who spoke on Perl 6. But there were a few last-minute surprise guests: Larry Wall and Chip Salzenberg! What with these three participating alongside SF.pm’s usual suspects (Vicki Brown, Rich, Morin, et al.), it was an evening of the heavyweights unlike we’ve never seen at SF.pm. Randal invited Larry to come while they were on the cruise last week, and it was great to have him there. I guess Randal never gave a talk like this with Larry in the audience before, because he said he was actually nervous, despite his years teaching!

A good time was had by all, I think, and we all learned a lot about Perl 6. Having Larry there to chime in (and read his own quotes from Randal’s slides!) really added to the content of the talk. I, for one, am incredibly excited about Perl 6. It’ll go a long way toward making the big database applications I’ve gotten into the habit of writing much easier to control. And the syntax Larry is outlining in his Apocalypses is really coming along. I just wish I didn’t have to wait for it until…when? There are 33 chapters in Camel trois, and we’re only up to [Apocalypse 4!]

At any rate, it was a great meeting. The after-dinner talk in the bar was good, too. Really a very entertaining buch. I’d publicly like to thank Quinn Weaver <zenji at gmx dot net> and Karen Andelin <kaan at chevrontexaco to com> for organizing a great event – and for getting other members to contribute en masse to the Perl Foundation 2002 Grant fund. And thanks also to Randal (who promised that Stonehenge Consulting Services would match the funds raised at the meeting), Larry, and Chip for making it a very worthwhile event!

Originally published on use Perl;

CVS Branching Philosophy

“This will go down in [my] permanent record,” eh? I guess I’d better make it good.

There’s been quite the debate going on over on the Bricolage developers list. For those who don’t know about Bricolage, its a full-featured, open-source, 100% Perl content management system that I maintain on SourceForge. You can learn more about it here.

Anyway, the debate is over the art and science of CVS management. We’ve been adding features to both minor and major releases up to now, but there has been substantial argument that the minor releases should be bug-fix only. The advantage of this approach is that new code won’t threaten stable releases. The disadvantage is that it could slow development. Quick and easy new features will have to wait for more involved features to be complete before they can see the light of day of a release.

There are some strong opinions, but I’m currently sitting on the fence. More opinions are welcome!

Originally published on use Perl;