It occurred to me the other day, while filling out a CAPTCHA to leave a comment on a friends blog, that there is further room for improvement in most implementations, putting aside for the moment the fact that there are better alternatives. But if you have ever used a CAPTCHA before, chances are you've asked yourself this question: Is it case-sensitive?
And is it? Who knows?!
The solution!
Hardly anyone goes out of their way to indicate whether the CAPTCHA response is case sensitive, and, even worse, some even use fonts where the lower-case-L and upper-case-i — and this isn't the only set of easily confused letters — look essentially the same. As long as they're not getting spammed, that's good enough for them. Sadly, the solution is so easy that the careless among us are only hurting themselves. A simple CSS addition can make a world of difference.
Step 1:
Only use capital letters. This alone won't solve your problems, but capital letters are much more easily distinguished from one another in most fonts. Even if you don't have a nice pretty configuration screen for your CAPTCHA asking for a set of characters to choose from, I guarantee you it's in the code and would be a piece of cake to change. For example:
[viewcode] src="captcha.cfm.txt" showsyntax=no geshi=cfm[/viewcode]
Step 2:
Add a text-transform property to your CSS for the CAPTCHA response input field. Specifically, text-transform: uppercase;. This takes away almost any doubt a person might have over case sensitivity. Try it yourself; type some text in this box and see how much better life with CAPTCHA can be:
Extra credit:
Add a small line of text next to your CAPTCHA explaining that case doesn't matter. If you have the ability, choose a font with unambiguous characters.
This morning when I logged into GMail I saw this alert:
The "Fix this" link takes you to Google's Help Center page regarding the Firebug & GMail issue.
Sure enough, I disabled Firebug for mail.google.com, and it's been nice and snappy ever since. I emailed the same information to Ray so that maybe they can fix the root cause — if it's in the Firebug code and not the GMail code — instead of just creating this workaround.
I subscribe to a lot of RSS feeds. A ton. More than I can possibly keep up with. And I've just gotten so fed up with this one feed in particular that I'm not even going to continue reading it, despite the good posts that it occasionally contains. Click through for the winner.
And the award for worst ColdFusion RSS Feed goes to…
With a real post to spam ratio of at least 1:3, the winner is the Wordpress.com ColdFusion tag feed.
Congratulations, you worthless piece of junk. Display it with honor.
When I wrote yesterday's post asking whether I should continue putting off porting the alpha1 code to pre-ColdFusion 8 syntax, I pretty much knew what the answer would be. It took me less than an hour to go through the whopping 9 files and convert things like --, <=, {}, and [] into =x-1, LTE, StructNew, and ArrayNew; and I'm going to have my hands full with the rewrite and new features for at least a few more months.
This is all just a roundabout way of saying that CFMenuCal alpha1 for MX7 is now available at RIAForge! I've put the code into the /versions/alpha1 for MX7/ folder in the Subversion repository, or if you're not interested in dealing with SVN, you can just download the zip!
It includes a readme.txt file that explains how to configure the application, but I'll give a bit more detail here. Everything you need to edit is in config.cfm.
The first thing you need to do is create a menu (think restaurant-style). Your menu is an array of meal structures. I've left some example data in the code so you can see how it's intended to be set up:
[viewcode] src="cfmenucal_alpha1_1.cfm.txt" showsyntax=no geshi=cfm[/viewcode]
After you have your structures defined, just drop them into the menu array by making sure they're all appended:
[viewcode] src="cfmenucal_alpha1_2.cfm.txt" showsyntax=no geshi=cfm[/viewcode]
Exceptions are what allow you to skip a specific day, and you can put the reason on your calendar. You configure them with the same general idea as setting up your menu:
[viewcode] src="cfmenucal_alpha1_3.cfm.txt" showsyntax=no geshi=cfm[/viewcode]
The "exception" key is the "reason" that no meal is needed for the date, and the "date" key is the day of the month that the exception is for.
Don't forget to append all of your exception structures to the exception array:
[viewcode] src="cfmenucal_alpha1_4.cfm.txt" showsyntax=no geshi=cfm[/viewcode]
And lastly, a few settings to define what month/year you want your calendar built for, and how close you want your dishes and side-dishes:
[viewcode] src="cfmenucal_alpha1_5.cfm.txt" showsyntax=no geshi=cfm[/viewcode]
When you need a new calendar for the next month, the only things you need to change are your exceptions and the month/year variables. Then all you have to do is refresh the page (or click the randomize button – same thing) until you get a calendar you like.
Bon Appétit!
It's getting dusty around here. I'm keeping quite busy with my work, and when I do have free time that I spend on the computer, I'm trying to spend at least 50% working on CFMenuCal. So far I've been focusing my efforts on new features and the aforementioned surprises, but today it occurred to me that there are a few of you who have expressed interest in using this yourself — and I know that means sooner rather than later.
When I originally wrote my proof of concept — the alpha that's posted at RIAForge — It served two purposes: the first being making something useful for my wife and myself, and the second being getting my hands dirty with ColdFusion 8. So it's got a lot of the new syntaxes woven in pretty tightly — specifically rampant use of the new { } structure syntax and [ ] array syntax.
I guess I would estimate that it would take about a week, maybe two, for me to convert the alpha to use old syntaxes and make it usable on a ColdFusion 7 and I'm fairly certain even a ColdFusion 6 server.
I think I already have my answer, but I'd still like to hear what the user base has to say. Would you rather I work on converting back to ColdFusion 7 syntax, or continue working on new features (which in all honesty could take months)? On the other hand, if you all have ColdFusion 8 easily accessible to you, it may be a moot point.
In addition, I know that before I started using Subversion at work I couldn't be bothered to setup a client and check out something that I was interested in, so I can relate if you feel the same way. Would anyone prefer if I packaged up everything you would need to run it in a nice downloadable zip?