Photo from Chile

ValidateThis 1.0 - A True Community Effort

I am pleased to announce that ValidateThis, an awesome validation framework for ColdFusion, has finally gone gold! That's right, version 1.0 of the validation framework that you've come to know and love is in the wild. While I'm proud of the framework, I'm even prouder of the number of developers who contributed to this release. In addition to me, the following people made a contribution:

  • John Whish
  • Chris Blackwell
  • James Buckingham
  • Dustin Martin
  • Marc Esher
  • Jamie Krug
  • Seb Duggan
  • Mike Henke
  • Adam Drew

Most of went into this release won't be noticeable to the developer, or at least won't affect the way you interact with the framework. Here's a quick summary of the changes in this release:

  • Upgraded to the latest version of the jQuery Validation plugin, which replaces jquery.validate.pack.js with jquery.validate.min.js. If you are loading this file yourself (as opposed to using a CDN, which the framework does by default), then you should replace that file.
  • The default generated failure messages are now identical on the client and server, and are based on information in a resource bundle. This means you can easily change the default generated failure messages if you wish, and the changes will be reflected on the client and the server.
  • Thanks to John Whish (who I have unilaterally appointed as client-side-czar for the framework) the Javascript that is generated has been greatly improved. Many of the changes that John made were based on suggestions from Dan Switzer.
  • You can now store your definition files in a folder structure that mirrors a dot-based naming scheme for components.
  • You can now instruct the framework to ignore missing properties in your objects, as opposed to throwing an exception if a property is missing.
  • A new config option has been added: vtFolder which you only need to use if the framework resides in a folder that isn't called ValidateThis and you are on a case-sensitive system.

The biggest change is the second one mentioned above: the default generated failure messages. If you are currently using the i18n capabilities of the framework this may affect you, so I suggest you read the i18n information available in the online documentation.

If you've been holding off checking out the framework until it reached version 1.0 (silly people), now's the time to get cracking. Here are some resources that will help you:

  • The main home of the framework is www.validatethis.org, which includes an online demo and links to all of the following.
  • The framework can be downloaded from the ValidateThis RIAForge page.
  • Online documentation is available at www.validatethis.org/docs.
  • API documentation is available at www.validatethis.org/docs/api.
  • There is a Google group available for asking questions, making suggestions, and general discussion at groups.google.com/group/validatethis.
  • The source code is hosted at GitHub, and contributions are always welcome.

So what's stopping you? Go download the latest and greatest version of ValidateThis and take it for a spin!

My Adobe ColdFusion Developer Week Session on ORM

I was very pleased that my CF Dev Week presentation was so well attended and received. I am attaching a PDF of the presentation materials to this post. Once the recording is available, you'll be able to find it at www.adobe.com/devnet/coldfusion/events.html.

CFSelenium Now Supports ColdFusion 7 and 8

Just a quick note to let you know that Brian Swartzfager has added support for ColdFusion 7 and 8 to the CFSelenium project by adding a tag-based cfc. This is now included in the latest version (1.2), which can be downloaded from the CFSelenium RIAForge page.

Brian, who will be maintaining the tag-based version, has written up a blog post about this addition to the CFSelenium project.

Why Contribute to Open Source Projects?

I was listening to show 83 of the CFHour podcast the other day and Dave asked the question of Kurt and Jason, "Why should someone contribute to an open source project?" Kurt had some very good answers which got me thinking about the question as well. Specifically, why do I contribute to open source software (OSS) projects? In this post I'll attempt to answer that question, as well as give some other reasons why one might choose to contribute to an OSS project. I hope that this post may motivate some others to contribute to OSS projects as well.

To Give Something Back

I have been a user of ColdFusion OSS for over a decade. I used Fusebox to create my first real CF web application and I've never looked back. OSS developer tools including Fusebox, Transfer, ColdSpring, Illudium, Model-Glue, Reactor, cfUniform, MXUnit, ValidateThis, ColdDoc, Lightwire and VarScoper have all helped me develop applications faster and better. OSS Solutions such as BlogCFC, Mura CMS and Codex Wiki have also been part of my career as a web developer. Although it doesn't really fall into the category of OSS, the content of many developers' blogs have also been a continual source of knowledge and inspiration.

These are all products of the ColdFusion Community, from which I have reaped tremendous benefit, so it seems only appropriate that I try to give something back. I stared that effort by creating a blog (around three years ago) and doing my best to blog regularly about whatever I am learning. Since then I've had the opportunity to release my own OSS as well as contribute to a number of existing projects including cfUniform, MXUnit and Model-Glue.

To Get to Collaborate with Really Smart People

How else would someone like me get a chance to work with the likes of Adam Drew, Adam Haskell, Bill Shelton, Chris Blackwell, Dan Skaggs, Dan Wilson, Dennis Clark, Ezra Parker, Jamie Krug, John Whish, Marc Esher, Matt Quackenbush, Mike Henke, Mike Rankin, Patrick McElhaney, Randy Merril, and TJ Downes? I mean seriously folks, it doesn't get much better than that.

Anyone would be keen to work with these smart and, for the most part, congenial folks, but for me it's extra special because I am a sole developer. I work out of my home in snowy Toronto, and have little interaction with other developers on my daily development work. Some of you may be in the same boat as me, and others may be part of a team, but if you're one of the senior developers on that team you may still get little opportunity to collaborate with other advanced developers. Contributing to an OSS project is an excellent way to do so.

It's Interesting and Challenging

Sometimes the work we have to do to bring home the bacon can be less than interesting and challenging. If we're lucky that's the minority of our daily tasks, but for some of us we're just not as challenged as we'd like to be in our regular job.

Writing OSS can introduce a lot of challenges, many of which you may never have had to face before. It is very different writing software that has to be generic enough to be useful to the masses. We cannot rely on conventions that work for one specific project or use case, and we have to be able to imagine our software being used in ways that we might not have originally envisioned. It's a very interesting perspective to take, and I find it to be particularly challenging.

It's Fun!

Not only is the work interesting and challenging, but it can be great fun too. How often in your job do you get to choose exactly what you want to work on? How often do you get an idea for a feature or enhancement but are told it's not a high enough priority? If you're working on an OSS project you can experiment as much as you like, and you can choose which features or enhancements you want to work on.

It's a Great Opportunity to Learn Something New

You will encounter problems when working on OSS that you likely have not encountered before, which present excellent learning opportunities. You can try out new tools and techniques on an OSS project. For example, if you've never done any unit testing, and cannot get permission from your boss to do so in your regular job, writing some code for an OSS project would be an excellent place to try it out. As another example, most OSS projects use source control so if you're not yet familiar with Subversion or Git contributing to a project that uses one of those would present an opportunity to learn about that tool.

Of course there's also the fact that you can learn a ton from the smart dudes already on the project, and even just learn by looking at the existing codebase.

It Looks Good on a Resume

More and more employers of developers are looking at community contributions. They like to see that you're blogging and contributing to mailing lists, and they really like to see you listed as a committer on an OSS project. It can also help with the work experience section of your resume. If your current development job only has you working in a limited number of areas you can flesh out your resume by doing something different on an OSS project.

It Doesn't Have to Be Code

Other than the Giving Something Back item, most of what I've discussed above is about what you can get out of contributing to the development of OSS, but if that's something you don't want to do (ask yourself why, first), then there are other ways to help too. Here are some ideas:

  • Write some documentation.
    Almost every OSS project could use more and/or better documentation, and I can pretty much guarantee that the author(s) would be pleased to have you volunteer.
  • Do a blog post.
    OSS projects thrive on users. The more people who use the software the better it can become, so let folks know about your favourite piece of OSS by blogging about it. If you don't have your own blog most projects and/or authors do, and they'd likely be glad to host a post of yours on their blog.
  • Give a presentation.
    User groups are always looking for presenters, and there's also the Online ColdFusion User Group. Get the word out on an OSS project by presenting on it.
  • Participate in the mailing list.
    Many OSS projects have their own mailing list to which users submit questions. Get involved by answering questions or contributing to the discussion in some way.

What Are You Waiting For?

So, what are you waiting for? Get out there and contribute. Choose a project that you're already using and see how you can get involved. Maybe there's a feature that you've always wanted. Maybe you've noticed a gap in the documentation. Maybe you've figured out how to do something cool with the project and can share it with others via a blog post. Whatever you choose I'm confident that it will be a rewarding process both for the project and for you.

What's New in ValidateThis 0.98 - Part I

As a follow-up to my post announcing the availability of version 0.98 of ValidateThis, which just included a brief summary of the new features, this post will describe some of those features in more detail.

defaultFailureMessagePrefix Configuration Option

When a validation fails the framework adds a failure message to the Result object that is returned to you. Each validation type has a default failure message, and you also have the option of overriding the default failure message using the failureMessage attribute of the rule element. The default messaged generated by VT are customized based on the type of failure and any parameters that were in place for the rule. For example, if a rule of type email which is defined on the emailAddress property of your object fails, the message will read "The Email Address must be a valid email address." If you've defined a rule of type rangeLength with a minLength of 5 and a maxLength of 20 on the password property of your object, the default failure message will read "The Password must be between 5 and 20 characters.

[More]

ValidateThis 0.98 - A Ton of New Stuff, and Two Important Changes

I've just released version 0.98 of ValidateThis, my validation framework ColdFusion. This update has been long in the making, and has been contributed to significantly by a number of folks including Adam Drew, Marc Esher, Chris Blackwell and John Whish. As always, the latest version can be downloaded from the ValidateThis RIAForge site. There are so many new features and enhancements that I'm going to divide them up into a number of posts, so this post will just include a summary, as well as a discussion of a couple of important changes that will impact all existing users. I'm going to start with a discussion of these changes.

The Folder Structure of the Distribution has Changed

A big thanks to Adam Drew for reorganizing the code repository and the distribution for the framework. This change won't impact any of your code, but it does mean that what you do with the download, in terms of which folders go where, has changed. The framework itself is now contained in the root of the distribution, whereas before it was in a folder called ValidateThis. This means that you can simply unzip the entire zip file into your local /ValidateThis folder. The sample applications are now contained in a folder called /samples, so if you don't want to include these in your project, simply delete this /samples folder after unzipping, or move it elsewhere.

A Change to Metadata that Needs Your Attention

In order to add a cool new enhancement (dynamic parameters) I've had to revisit the way that metadata for parameters was being specified. This examination led me to change the format of the param element. Because of this format change, any rules that you may currently have defined that use parameters will need to be changed as well, in order to use this and all future releases of the framework.

The good news is that the change is simple and easy, and Marc Esher has even contributed a regular expression that can be used to automatically update all of your xml files via Eclipse. The truth is that the previous format was actually flawed, so not only will this new format enable this cool new feature, but it will also position the framework better for future enhancement.

[More]

New Features Added to the cf.Objective() Topic Suggestion Survey

Matt Woodward and I have been working on enhancing the cf.Objective() Topic Suggestion Survey to both capture more information on what's important to you, and to add some social networking capabilities. Here's what's new:

Tell us Your Top Pick

You can now specify your absolute top pick out of all of the topic suggestions while voting. Marc Esher suggesting collecting this additional metric and we're interested to see what information it yields. If you voted before you may want to visit again and let us know what your top pick is.

Twitter Integration

If you've accessed the survey using your Twitter account, you now have the option of tweeting directly from the app after adding new topics and after voting. Please note that this is entirely optional, and you will be given an opportunity to edit the text of the tweet before you decide to send it. We hope that people will make use of this feature to encourage others to visit the survey, and to remind people to come back and vote, as new topics are being added continually.

Facebook Integration

If you've accessed the survey using your Facebook account, you will have the same option of adding a wall post directly from the app after adding new topics and after voting. We've also added Facebook Like buttons in a number of places in the app, including on each topic's detail page. You can use these to tell your Facebook friends which topics you are particularly fond of.

Remember, the results of the survey, and hence your input into the content of the conference, will only be as good as the information that we receive, so please do use the new Twitter and Facebook integrations to help us promote the survey, and also feel free to blog, tweet and use any other means at your disposal to let people know about the survey.

Vote Early and Often

In case I haven't made it clear thus far, we want to hear from you! Go suggest a topic or cast your votes now, and don't forget to return to the survey later to cast votes on any new topics that interest you.

More Entries