Going Through ColdFusion Koans

Recently, Ryan Anklam started up a project called ColdFusion Koans. Here is the description:

The ColdFusion Koans are intended to help newcomers and veterans alike learn or fine-tune their ColdFusion programming skills. This is a community driven project so everybody is welcome to contribute new tests!

This is a fabulous idea which can only benefit the CF community, especially since so many of us have had to learn the language while "on the job" and sometimes find that their time is spent mostly on billable work, which leaves little or no room for self-improvement. The Koans exercises are simple enough that you can just keep the folder on your development environment, and set a browser window, and work through the exercise when you need a break from trying to fix that perplexing bug.

I had fun going through it. It did take a while for me to get the hang of it. But I finally figured out that the goal is to first work through one koan section, entering what you think are the right variables. Then you go back to the browser window and reload to see which passed and which failed, then go at these again until you get these passed. Try not to peek at the error info before working through the exercises. Right now, I have 73% - some of my successes surprised me because I'm just terrible at math (I have some sort of a math disability that results in math concepts not really sticking in my mind). The others I've been trying to figure out where I went wrong; some CF concepts I've not really had much experience with.

So, the next step is to go through my CF references and hopefully find the answers, and then add to the git project and send Ryan a pull notice. I encourage you all to do the same! If we all pitch in, we can come up with something like Ruby Koans.



How I Got Started in ColdFusion

First of all, I would like to thank Steve Bryant for coming up with this brilliant idea. I've spent quite a few minutes reading the posts. It's really interesting as to how diverse these experiences are.

I've always been interested in computers, but more from the "all those people are using computers and I better learn what it's all about" perspective. I remember when my father bought a TRS-80 computer for me and my sister to play with. I would spend time going through magazines and typing in the programs so I could play games. In high school, I had a friend who was in the science and tech program, and I would hang out with her in the computer lab while she played Zork.

So, when I went off to college, I declared computer science as my major as that was the first thing that came to my mind that sounded appealing. Unfortunately, that's when the reality that my math skills was seriously lacking kicked in, and I switched over to journalism (resulting in a better GPA). I got an on-campus job working in the Marketing Department at the Dining Services. There, I was introduced to the wonder of desktop publishing on Macintosh Plus (I still can't quite get over the fact that we had to do page layout in PageMaker on a 9" screen).

Years later, I was in between jobs, and finding that it was increasingly more and more difficult to get a job in desktop publishing, as it was now something that everyone could do right from their office and take the printing job over to the local printer. This was at the time when the Internet was becoming more popular and everyone were setting up their own website. So, I got an HTML book, created some samples, got some freelance jobs setting up websites, and eventually got hired by a small company (which subsequently got bought out by a bigger company which then got bought out by a still larger company) that specialized in collecting and analyzing health and education data for state and federal agencies, and institutions such as HHMI. I continued to do static web page development (all those nested tables and heavy use of FONT tags to get precisely the layout that was needed).

At the time, the company had an in-house scripting language (WebInterchange, WebIC for short) that was very much like ColdFusion; the only difference was that it used "##" as the opening and closing tags. There was a need for more programmers, so they offered workshops to anyone interested in learning this scripting language. I thought this would be a good opportunity, especially as I was getting bored with HTML programming. John Theis was one of the instructors, and I subsequently joined his team. He was one of the best bosses I've ever had and I learned so much about him. I still remember his maxim about how you should always start with a good, well-thought out database as the base; without that everything would eventually fall apart. (If you're still out there, John Theis, thank you!)

The programmer in charge of developing WebIC left without handing over the master key to the source code. Despite that, we continued to use the language, but eventually we switched over to ColdFusion. My team got assigned to a project that required ColdFusion; that would have been sometime in 2000 or so. I believe we started out with ColdFusion 5 and quickly moved to CF MX; that's the version I remember most vividly.

These days, I'm more of a project manager than a developer in the business venture that I'm working on, but I'm still a big fan of ColdFusion and I'm constantly amazed by what it can do, and I continue to believe it has a great future, especially with the wonderful community at its core.



A Comment on the Recent Controversy

Normally, I don't really get involved in controversies, because I don't really like getting involved in something I know little about and I'm not skilled at debating or such.

But here's something I'd like you all to think about.

Which part of this picture do you think is the most important?



Comma-Delimited List of CF Tags

I've been trying out snippet programs in which to save my code bits for quick reference. I came across one - jCodeCollector. It looks like a great program to use. There's a Syntax Manager which is already set up for languages such as PHP and Ruby. However, there is no manager set up for ColdFusion.

But it's not too hard to create one. So, I did that. Next step - find a list of CF tags. That was a bit of a problem such lists mostly exist on Adobe's LiveDocs in table format. All I need is a comma-delimited list. Fortunately, I have an old printout of such a list in text format. I did a google search, since I had neglected to write the URL of the original site down. The original site is no longer up. But, with further sleuthing, I was able to find basically the same list but separated only one white space. Still, it's just what I needed and it was simple enough to do a grep search for " cf" and replace with ", cf". Notice that this list does not include new CF9 tags; you'll have to add it yourself.

For future reference, here's the list:

cfNTAuthenticate, cfSearch, cfabort, cfajaximport, cfajaxproxy, cfant, cfapplet, cfapplication, cfassociate, cfcalendar, cfchart, cfchartdata, cfchartseries, cfcol, cfcollection, cfcompile, cfcontent, cfcookie, cfdatasource, cfdatasourceallowedsql, cfdatasourceconnection, cfdatasourcepooling, cfdbinfo, cfdirectory, cfdiv, cfdocument, cfdocumentitem, cfdocumentsection, cferror, cfexchangeConnection, cfexchangeContact, cfexchangeMail, cfexchangecalendar, cfexchangerilter, cfexchangetask, cfexecute, cfexit, cffeed, cffile, cfflush, cfform, cfformgroup, cfformitem, cfftp, cfgraph, cfgraphdata, cfgrid, cfgridcolumn, cfgridrow, cfgridupdate, cfheader, cfhtmlhead, cfhttp, cfhttpparam, cfimage, cfinclude, cfindex, cfinput, cfinsert, cfinvoke, cfinvokeargument, cflayout, cflayoutarea, cfldap, cflocation, cflock, cflog, cflogin, cfloginUser, cflogout, cfloop, cfmail, cfmailparam, cfmailpart, cfmenu, cfmenuitem, cfmodule, cfobject, cfobjectcache, cfoldreport, cfoutput, cfparam, cfpdf, cfpdfform, cfpdfformparam, cfpdfparam, cfpdfsubform, cfpod, cfpop, cfpresentation, cfpresentationSlide, cfpresenter, cfprint, cfprocessingdirective, cfprocparam, cfprocresult, cfquery, cfqueryparam, cfregistry, cfreport, cfreportparam, cfschedule, cfselect, cfservlet, cfservletparam, cfsetting, cfsilent, cfslider, cfsprydataset, cfstoredproc, cftable, cftextarea, cftextinput, cfthread, cfthrow, cftimer, cftooltip, cftransaction, cftree, cftreeitem, cfupdate, cfwddx, cfwindow, cfx, cfxml, cfzip, cfzipParam,