<?xml version="1.0" encoding="utf-8"?>
			
			<rss version="2.0">
			<channel>
			<title>Brian Swartzfager&apos;s Blog</title>
			<link>http://www.swartzfager.org/blog/index.cfm</link>
			<description>blog</description>
			<language>en-us</language>
			<pubDate>Tue, 18 Jun 2013 23:29:22 -0400</pubDate>
			<lastBuildDate>Mon, 13 Jul 2009 18:26:00 -0400</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>bcswartz@gmail.com</managingEditor>
			<webMaster>bcswartz@gmail.com</webMaster>
			
			<item>
				<title>The End of This Blog, The Start of Another</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2009/7/13/The-End-of-This-Blog-The-Start-of-Another</link>
				<description>
				
				I wasn&apos;t planning on writing a &quot;moving on&quot; post on this blog.  I was going to wait for the folks at &lt;a href=&quot;http://feeds.adobe.com&quot; target=&quot;_blank&quot;&gt;Adobe Feeds&lt;/a&gt; (the only blog aggregator where I&apos;m listed) to update my entry to point to my new blog and simply start blogging there.  But with the release of the ColdFusion 9 and ColdFusion Builder betas on &lt;a href=&quot;http://labs.adobe.com&quot; target=&quot;_blank&quot;&gt;Adobe Labs&lt;/a&gt; last night, now&apos;s not the time to be without an active blog.

So the point of this post is to serve notice about my new blog over at:

&lt;a href=&quot;http://www.thoughtdelimited.org/thoughts&quot; target=&quot;_blank&quot;&gt;www.thoughtdelimited.org/thoughts&lt;/a&gt;

I&apos;ll see if I can cajole Ray Camden to take a break from his stream of tutorial blog posts and videos on CF9/CFB to add my new blog to his &lt;a href=&quot;http://www.coldfusionbloggers.org&quot; target=&quot;_blank&quot;&gt;ColdFusionBloggers aggregator&lt;/a&gt;, so that at least I&apos;m aggregated somewhere (not that ColdFusionBloggers is any less of an aggregator than Adobe Feeds; in some ways it&apos;s better).  We&apos;ll see how that goes.  :)

Until then, and until Adobe Feeds is updated with my new blog RSS feed address, the best way to find out if I&apos;ve posted anything new would be to follow me on Twitter (bcswartz). 
				</description>
				
				<category>Miscellaneous</category>
				
				<pubDate>Mon, 13 Jul 2009 18:26:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2009/7/13/The-End-of-This-Blog-The-Start-of-Another</guid>
				
			</item>
			
			<item>
				<title>My Encounter With a ColdFusion Detractor (Part 2)</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2009/7/1/My-Encounter-With-a-ColdFusion-Detractor-Part-2</link>
				<description>
				
				For those readers who didn&apos;t see &lt;a href=&quot;http://www.swartzfager.org/blog/index.cfm/2009/5/20/My-Encounter-With-a-ColdFusion-Detractor&quot; target=&quot;_blank&quot;&gt;my previous post regarding my conversation with Glen&lt;/a&gt;, Glen is a technical trainer who treated me to the usual &quot;ColdFusion is dying&quot; mantra we normally hear from other programmers.

The big question I had after that first encounter was why, as a trainer rather than a programmer, he had developed that opinion about ColdFusion.  So when I ran into him again at the gym the other day, I asked him about that.

Turns out his belief that ColdFusion is dying is based on the job market for ColdFusion jobs.  He told me he works/interacts with a dozen recruiting firms in the Washington D.C. area, firms looking to fill positions for government contractors like Lockheed, and that the number of ColdFusion positions compared to the number of positions programming in Java or Ruby is just so small.  He added that a lot of the ColdFusion positions that did exist were senior positions where candidates were expected to know how create web services, work with Java, write object-oriented code, etc., making it hard for up-and-coming ColdFusion developers to find work.

I also found out that most of his training work involves training/teaching programmers OO-based languages over several weeks, so his perspective on programming trends isn&apos;t all that different from an actual programmer. Glen (who doesn&apos;t mind talking) went on to give me the standard advice given to modern-day programmers (the importance of having multiple programming language skill sets, the need to have a new job lined up before leaving your current one, etc.) before we parted company once again.

My thoughts?  I don&apos;t doubt there are more jobs out there for languages like PHP, Ruby, and Java just as Glen said, but whenever I go out on websites to look for ColdFusion jobs, they&apos;re out there, and while many of them are senior-level positions, there are a few junior-level jobs to be had.  Actually getting hired, however, made take some effort, as Michael Dinowitz noted in his recent blog post, &lt;a href=&quot;http://www.blogoffusion.com/062909-are-there-really-coldfusion-jobs.cfm&quot; target=&quot;_blank&quot;&gt;&quot;Are There Really ColdFusion Jobs?&quot;&lt;/a&gt;

In the end, Glen&apos;s position on ColdFusion is nothing original: lack of marketshare is at the heart of every &quot;ColdFusion is dying&quot; argument we hear.  But marketshare is only one metric, and it shouldn&apos;t be the main consideration when choosing a programming language.  

The main consideration should be &quot;does this technology allow me to build the web application I want?&quot;  And when that question is directed at ColdFusion, the answer is almost always &quot;Yes.&quot; 
				</description>
				
				<category>ColdFusion</category>
				
				<category>CFML</category>
				
				<pubDate>Wed, 01 Jul 2009 07:15:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2009/7/1/My-Encounter-With-a-ColdFusion-Detractor-Part-2</guid>
				
			</item>
			
			<item>
				<title>My First Mozilla Jetpack Add-On For Firefox: browseTimer</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2009/5/25/My-First-Mozilla-Jetpack-AddOn-For-Firefox-browseTimer</link>
				<description>
				
				As I &lt;a href=&quot;http://www.swartzfager.org/blog/index.cfm/2009/5/21/Mozilla-Announceds-Jetpack-an-API-For-Writing-FireFox-AddsOn-with-jQuery-HTML-and-CSS&quot; target=&quot;_blank&quot;&gt;previously mentioned&lt;/a&gt; on my blog last week, Mozilla has launched a new means of creating add-ons for Firefox called &lt;a href=&quot;https://jetpack.mozillalabs.com/&quot; target=&quot;_blank&quot;&gt;Jetpack&lt;/a&gt;, which allows would-be plugin developers to build add-ons with HTML, CSS, and Javascript functions that include all of the &lt;a href=&quot;http://www.jquery.com&quot; target=&quot;_blank&quot;&gt;jQuery&lt;/a&gt; functions.

As it happens, the first two functions listed in the &lt;a href=&quot;https://jetpack.mozillalabs.com/api.html&quot; target=&quot;_blank&quot;&gt;Jetpack API&lt;/a&gt; were the &lt;em&gt;clearInterval()&lt;/em&gt; and &lt;em&gt;clearTimeout()&lt;/em&gt; functions, and that gave me a idea.  My most recent AIR application, &lt;a href=&quot;http://focustimer.riaforge.org&quot; target=&quot;_blank&quot;&gt;focusTimer&lt;/a&gt;, is a desktop widget inspired by time management techniques like &lt;a href=&quot;http://www.pomodorotechnique.com/&quot; target=&quot;_blank&quot;&gt;Pomodoro&lt;/a&gt;, where you basically shut out/off all distractions and work on a task for a set amount of time.  Once that time is up, the idea is to take a short break before starting another distraction-free period.

&lt;img src=&quot;http://www.swartzfager.org/blog/mozillaJetpack/browseTimer/screenshot.gif&quot; style=&quot;padding: 5px 15px; float: right;&quot;&gt; 

So my Jetpack add-on, &lt;a href=&quot;http://www.swartzfager.org/blog/mozillaJetpack/browseTimer/installBrowseTimer.html&quot; target=&quot;_blank&quot;&gt;browseTimer&lt;/a&gt;, is a timer built into the status bar of Firefox that lets you set how much time you want to spend browsing the web before getting back to work.  Once the timer expires, the add-on uses the Jetpack API functions for the Firefox tabs to blank out the content of all of your open Firefox tabs and turn the body of the now-blank pages red (in other words, you KNOW when the timer has run out!).

It&apos;s certainly not the most useful add-on in the world, but it didn&apos;t take long and it helped me learn the basics of Jetpack.

If you&apos;re interested in checking it out, visit the following page...

&lt;a href=&quot;http://www.swartzfager.org/blog/mozillaJetpack/browseTimer/installBrowseTimer.html&quot; target=&quot;_blank&quot;&gt;http://www.swartzfager.org/blog/mozillaJetpack/browseTimer/installBrowseTimer.html&lt;/a&gt;

...for the link to the Jetpack add-on need to run all Jetpack-based add-ons, links to the Macintosh and Windows versions (there were slight differences in how the input elements were displayed in the status bar that warranted two separate versions), and instructions on how to uninstall it if you don&apos;t like it/need it. 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<pubDate>Mon, 25 May 2009 14:55:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2009/5/25/My-First-Mozilla-Jetpack-AddOn-For-Firefox-browseTimer</guid>
				
			</item>
			
			<item>
				<title>In Defense of Twitter</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2009/5/23/In-Defense-of-Twitter</link>
				<description>
				
				Since I&apos;ve already defended &lt;a href=&quot;http://www.twitter.com&quot; target=&quot;_blank&quot;&gt;Twitter&lt;/a&gt; in two other people&apos;s blogs this past week, I figured I should write my own post on the matter.  That way, if I feel inclined to comment on Twitter use again, I can just post the URL to this entry and leave it at that (save myself some typing).

I wasn&apos;t enamored with Twitter when I first checked it out.  I wasn&apos;t interested in the mundane things people were doing at the moment, and I certainly didn&apos;t think anyone really cared what I was doing.

But at cfObjective() 2008, it quickly became clear that Twitter could help me connect with fellow conference-goers and clue me in on what was going on in particular sessions, where people were gathering to hang out or go out, etc.  And I&apos;ve used Twitter ever since:  I&apos;m not on it every waking moment and I don&apos;t feel like I&apos;m disconnected when I&apos;m not on it, but I do make use of it.

I really feel that the simple trick to getting value out of Twitter is to follow people whose Twitter posts (&quot;tweets&quot;) provide some value to you:  information, insight, humor, whatever.  Most of the people I follow are ColdFusion/RIA/Web developers, and they&apos;ll post any interesting links about those topics that they encounter as they surf the web.  It&apos;s almost like a people-powered RSS feed of tech articles, except that you&apos;re getting the information from people you know and respect rather than random people.

Sure, there are the occasional tweets about where people are or what they&apos;re having for lunch, the tidbits of daily life, but those can be easily ignored if you&apos;re not interested.  And yes, it can be a distraction if you&apos;re getting live updates from Twitter via a desktop client like &lt;a href=&quot;http://www.twhirl.org/&quot; target=&quot;_blank&quot;&gt;Twhirl&lt;/a&gt; or &lt;a href=&quot;http://www.tweetdeck.com/beta/&quot; target=&quot;_blank&quot;&gt;Tweetdeck&lt;/a&gt;, but there&apos;s a simple solution to that:  turn it off while you&apos;re working, and turn it back on when you&apos;re taking a break.

I&apos;m not trying to push Twitter on anyone--you can live without it--but I think folks should give it a serious try before deciding one way or the other. 
				</description>
				
				<category>Miscellaneous</category>
				
				<pubDate>Sat, 23 May 2009 20:55:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2009/5/23/In-Defense-of-Twitter</guid>
				
			</item>
			
			<item>
				<title>Mozilla Announces Jetpack, an API For Writing FireFox Adds-On with jQuery, HTML, and CSS</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2009/5/21/Mozilla-Announceds-Jetpack-an-API-For-Writing-FireFox-AddsOn-with-jQuery-HTML-and-CSS</link>
				<description>
				
				I found out about this last night from a tweet sent out by the &lt;a href=&quot;http://www.twitter.com/jquery&quot; target=&quot;_blank&quot;&gt;jQuery Twitter account&lt;/a&gt; (which is probably a good indication that they like the idea).

The subject line pretty much says it all:  Jetpack is designed to let current web developers use their existing skills with HTML, CSS, JavaScript, and jQuery to build Firefox add-ons/plugins without the need to mess with Firefox&apos;s XUL mark-up language.  While JavaScript has always been part of the add-on development process, the inclusion of jQuery should make performing certain actions a whole lot easier.

You can learn more about Jetpack via the following URLs:

&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://jetpack.mozillalabs.com/&quot; target=&quot;_blank&quot;&gt;https://jetpack.mozillalabs.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;http://labs.mozilla.com/2009/05/introducing-jetpack-call-for-participation/&quot; target=&quot;_blank&quot;&gt;http://labs.mozilla.com/2009/05/introducing-jetpack-call-for-participation/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://jetpack.mozillalabs.com/tutorial.html&quot; target=&quot;_blank&quot;&gt;https://jetpack.mozillalabs.com/tutorial.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

...the tutorials in the final link give you a good idea of the kinds of things Jetpack will allow you to do:  the last example is a Jetpack add-on that will count and display the number of unread e-mails in your Gmail Inbox.

I want to give Jetpack a whirl, but I honestly can&apos;t think of any functionality I want to add to Firefox that I can&apos;t get from an existing plugin.  Anyone have any suggestions for something to try with Jetpack? 

It&apos;s interesting how web technologies keep being repurposed as a development option in other technologies (Adobe AIR, the upcoming Palm Pre&apos;s &lt;a href=&quot;http://developer.palm.com/&quot; target=&quot;_blank&quot;&gt;WebOS&lt;/a&gt;, and now Jetpack).  Even though I&apos;m not particularly interested in delving into all these different areas, I must say that I like the trend.  :) 
				</description>
				
				<category>RIAs</category>
				
				<category>Miscellaneous</category>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<category>CSS</category>
				
				<pubDate>Thu, 21 May 2009 07:29:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2009/5/21/Mozilla-Announceds-Jetpack-an-API-For-Writing-FireFox-AddsOn-with-jQuery-HTML-and-CSS</guid>
				
			</item>
			
			<item>
				<title>My Encounter With a ColdFusion Detractor</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2009/5/20/My-Encounter-With-a-ColdFusion-Detractor</link>
				<description>
				
				Yesterday I ran into an old colleague at the gym (we&apos;ll call him Glen).  Glen conducts training sessions on technical topics.

Glen asked me if I knew if anyone at the university was using Ruby on Rails.  I told him that I didn&apos;t think so.  He then told me that he was giving Ruby on Rails training at John Hopkins University because they were looking to reduce their use of Java.  I responded by saying that I thought Hopkins also used ColdFusion for certain things.

I expected him to either simply agree with my observation, or perhaps offer an explanation about why Hopkins was looking at RoR verses expanding their use of ColdFusion.  I was not expecting him to respond with the standard FUD about ColdFusion:  it&apos;s dying, people are moving away from it, etc.  He even went so far as to refer to it as the &quot;COBOL of web programming languages.&quot;

I countered with the numbers announced at cfObjective(), that the number of ColdFusion developers had increased dramatically over the past year.  That elicited a &quot;well...&quot; and then another assertion that ColdFusion use was decreasing in the federal government as well (there are a lot of government-oriented CF jobs here in the D.C. area).

There wasn&apos;t much else to say or do at that point.  I couldn&apos;t hold him up from where he was going and I had somewhere else to be as well.  So I shook my head, laughed at his prediction of ColdFusion&apos;s demise, and basically said &quot;Yeah, we&apos;ll see about that.&quot;

My immediate feeling after the conversation was more amusement that annoyance.  Year after year, we hear the annual proclamation that &quot;ColdFusion is dead,&quot; yet the proclaimers never seem to realize that if they keep saying it year after year, ColdFusion obviously must be still around.  And more often than not, they have no hard numbers to support the idea that CF use is waning, just statistic-free assertions.

Now that I&apos;m several hours removed from the conversation, I find myself more curious about why Glen even had an opinion on ColdFusion in the first place.  I don&apos;t know him all that well, but he&apos;s always struck me as a fairly rational person and not someone who&apos;s looking to make and win an argument, yet he immediately began disparaging ColdFusion the moment I mentioned it.  What or who lead him to having this opinion about CF?  I may have to ask him that the next time I run into him. 
				</description>
				
				<category>CFML</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 20 May 2009 07:27:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2009/5/20/My-Encounter-With-a-ColdFusion-Detractor</guid>
				
			</item>
			
			<item>
				<title>Bug In How Safari 3.2.1 Renders the Links For RSS Feeds</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2009/5/9/Bug-In-How-Safari-321-Renders-The-Links-For-RSS-Feeds</link>
				<description>
				
				One of my clients contacted me yesterday to tell me that there was a problem with reading their RSS feed in Safari (and only in Safari).

Over the next hour or so, I learned quite a bit about how the current version of Safari (3.2.1 as of this writing) handles RSS:

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
By default, Safari is configured to open up your default e-mail client to handle/read RSS feeds, resulting in a lot of head-scratching by your truly when I tried to navigate to the feed and ended up with a &quot;Compose New Message&quot; window in Thunderbird.  While a lot of people do prefer the RSS-reading capabilities of their mail client over what the browser does with feeds, make that decision for the user is a questionable call on Apple&apos;s part, and some sort of alert/notice that this was the deal would have been nice.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
A lot of browsers these days will apply a style to the RSS feed XML (probably using some sort of built-in XSL, I&apos;m guessing) prior to display so that it&apos;s more human-readable and the hyperlinks for each news item are clickable.  But you can still view the raw XML using the &quot;View Source&quot; option of the browser.  Safari, on the other hand, transforms the feed into an HTML file with JavaScript, leaving no trace of the original XML.  Again, another somewhat presumptuous decision by Apple to buck convention in order to enhance the user experience.
&lt;/li&gt;
&lt;/ul&gt;

...Those two issues are annoyances rather than bugs.  The problem affecting my client&apos;s RSS feed, however, is a bug in regards to how Safari is transforming the RSS data before displaying it to the user.

Each news item in an RSS feed can contain a number of elements/nodes, two of which are the &amp;lt;link&amp;gt; and &amp;lt;guid&amp;gt; elements.  The &amp;lt;link&amp;gt; element is meant to contain the URL where the reader can access the full text of the item.  The &amp;lt;guid&amp;gt; element contains a string that uniquely identifies that RSS feed item within the feed (like a primary key in a database).  

If the &amp;lt;guid&amp;gt; element contains the &quot;isPermaLink&quot; attribute and that attribute value is set to &quot;true&quot;, then that indicates that the &amp;lt;guid&amp;gt; element also contains a URL (a permanent one) to the full text of the item (one that might be different from the URL in the &amp;lt;link&amp;gt; element), and an RSS client could legitimately used the URL in the &amp;lt;guid&amp;gt; as the link to the story instead.

What I discovered, though, was that Safari was creating the hyperlink for each news item by combining the value of the &amp;lt;link&amp;gt; element in the &amp;lt;channel&amp;gt; node of the RSS feed with the value of the &amp;lt;guid&amp;gt; element of each item (which was simply a unique numeric value), even though the &amp;lt;guid&amp;gt; elements did NOT contain the &quot;isPermaLink&quot; parameter.  So instead of using the value of the &amp;lt;link&amp;gt; element of each item as per the RSS specs, Safari ended up creating non-existent URLs.

The solution, of course, was simple:  I just put the URL for each news item in the &amp;lt;guid&amp;gt; element as well as the &amp;lt;link&amp;gt; element.  Point is, I shouldn&apos;t have had to.

Once I applied the solution, I did some searching to find out if this is a known problem that was being worked on.  I found one mention of it in a generic tech support forum post published in 2008, so it looks like the problem has existed for awhile but hasn&apos;t gotten much attention (probably because most people read RSS feeds through actual RSS clients).  I used Safari&apos;s built-in bug report mechanism to report it to Apple, but I don&apos;t hold out much hope for that having an impact.

Still, I thought it worth a post, on the off-chance this information might help someone else. 
				</description>
				
				<category>Web development</category>
				
				<category>Miscellaneous</category>
				
				<pubDate>Sat, 09 May 2009 14:36:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2009/5/9/Bug-In-How-Safari-321-Renders-The-Links-For-RSS-Feeds</guid>
				
			</item>
			
			<item>
				<title>New AIR Application:  focusTimer</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2009/5/6/New-AIR-Application--focusTimer</link>
				<description>
				
				A few weeks ago, &lt;a href=&quot;http://www.pbell.com/&quot; target=&quot;_blank&quot;&gt;Peter Bell&lt;/a&gt; wrote a blog post about the &lt;a href=&quot;http://www.pomodorotechnique.com/&quot; target=&quot;_blank&quot;&gt;Pomodoro Technique&lt;/a&gt;, a time management technique that advocates setting aside a set amount of time to turn off all distractions (e-mail, IM, Twitter) and focusing on a single task.  I had just recently starting adopting the practice of shutting down my e-mail client once in awhile so as not to be distracted by incoming messages, so the idea made a lot of sense to me.

Not having a physical kitchen timer like the Pomodoro folks use and finding my stopwatch to be somewhat inadequate, I decided to try and write an AIR application to fit my needs.  And so the focusTimer was born.

It&apos;s a very simple app:  set the amount of time you want to focus (the 25 minutes advocated by the Pomodoro folks is the default), and click the &quot;Start&quot; button.  I didn&apos;t want to get caught up in checking to see how much time was left, so I added a button so I could toggle between seeing the time left and just a status message.  

I wanted to keep the window small so that it could be moved out of the way, but I also wanted a strong visual cue for when the time was up, so the color of the window changes to green when you start the countdown, switches to yellow for the &quot;2-minute warning&quot;, and ends in red when the timer runs out.  In the two days I&apos;ve been using it at work, I&apos;ve found that I can move the window to the far end of my secondary monitor and still catch the color change out of the corner of my eye.

Finally, even though the idea is to block out all distractions, there are some interruptions that cannot be ignored, so the &quot;Start&quot; button toggles between a &quot;Pause&quot; button and a &quot;Resume&quot; button once the countdown has started.  If your focus session goes completely off the rails, you can use the &quot;Cancel&quot; button to break out of it and start all over again.

Even though I wrote this AIR app primarily for myself, I figured other folks might find it useful, so it&apos;s now available for download up on RIAforge:

&lt;a href=&quot;http://focustimer.riaforge.org&quot; target=&quot;_blank&quot;&gt;http://focustimer.riaforge.org&lt;/a&gt; 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>AIR</category>
				
				<pubDate>Wed, 06 May 2009 07:31:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2009/5/6/New-AIR-Application--focusTimer</guid>
				
			</item>
			
			<item>
				<title>Preventing Non-Existent Dates with JavaScript</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2009/4/21/Preventing-NonExistent-Dates-with-JavaScript</link>
				<description>
				
				When I say &quot;non-existent dates&quot;, I mean dates like &quot;April 31&quot; or &quot;June 31,&quot; an end-of-the-month date a user might enter if they don&apos;t take a moment to review the old &lt;a href=&quot;http://en.wikipedia.org/wiki/Thirty_days_hath_September&quot; target=&quot;_blank&quot;&gt;&quot;Thirty days hath September&quot; mnemonic rhyme&lt;/a&gt;. All decent date pickers/selectors prevents users from entering letters or other inappropriate characters, but few of them bother to check if the date value itself is valid.

You could write a date validation script that took the month and day value submitted by the user and checked it against a list of the maximum number of days for each month, but then your code would also have to determine if the year selected by the user was a leap year in case the user entered &quot;February 29&quot; as their date of choice.

There&apos;s a more straightforward way to check the validity of the submitted date:  create a JavaScript Date object using the year, month, and day submitted by the user, then extract the year, month, and day values from the newly created Date object and compare those integer values against the ones submitted by the user:

&lt;p style=&quot;background-color:#ffffcc;padding:10px;&quot;&gt;
//Since JavaScripts counts months starting from 0 (January is 0), subtract 1 from the month integer submitted by the user&lt;br /&gt;
var formattedMonth= userSubmittedMonth-1;&lt;br /&gt;
var testDate= new Date(userSubmittedYear,formattedMonth,userSubmittedDay,0,0,0,0);&lt;br /&gt;
&lt;br /&gt;
if (testDate.getFullYear() != userSubmittedYear || testDate.getMonth() != formattedMonth || testDate.getDate() != userSubmittedDay)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&quot;The date that you entered doesn&apos;t exist (like Feb. 31)&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}
&lt;br /&gt;
&lt;/p&gt;

This works because JavaScript&apos;s date creation function will accept the integer values for a non-existent date like April 31, 2009 (4, 31, and 2009), but it will quietly translate it into it&apos;s real-life equivalent, in this case May 1, 2009.  So the integer values pulled from the date object via the getFullYear(), getMonth(), and getDate() functions will not match the integers originally passed into the date creation function, and you know there&apos;s a problem. 
				</description>
				
				<category>JavaScript</category>
				
				<pubDate>Tue, 21 Apr 2009 07:14:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2009/4/21/Preventing-NonExistent-Dates-with-JavaScript</guid>
				
			</item>
			
			<item>
				<title>Using jQuery Manipulation Functions (Append, Prepend, After, Before) To Reorder Items</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2009/3/25/Using-jQuery-Manipulation-Functions-Append-Prepend-After-Before-To-Reorder-Items</link>
				<description>
				
				I discovered something interesting quite by accident today.  I was trying to figure out the best way to reorder certain &amp;lt;li&amp;gt; items based on the value of a particular trait (while ignoring those &amp;lt;li&amp;gt; items that didn&apos;t have that particular trait at all).  I figured the best way to accomplish this was to:
&lt;ol&gt;
&lt;li&gt;Select all of the items that had the trait and store them in an array&lt;/li&gt;
&lt;li&gt;Resort the contents of the array into a new array.&lt;/li&gt;
&lt;li&gt;Delete the selected items from the list (so as not to replicate them)&lt;/li&gt;
&lt;li&gt;Loop through the new array and add the items back into the list using the jQuery &lt;strong&gt;prepend()&lt;/strong&gt; function to put them at the top of the list.&lt;/li&gt;
&lt;/ol&gt;

When I ran my first test of my code, I left out the deletion step so I could compare the original item order with the new item order, figuring I would have duplicates of the selected items.

However, I was surprised to discover that &lt;strong&gt;prepend()&lt;/strong&gt; removed the original instances of the selected list items, leaving only the prepended copies.  Essentially, it ended up moving the items rather than duplicating them.  

There&apos;s nothing on the official documentation page that says that if you&apos;re prepending an item to a collection that already contains an instance of that item that it will remove the original item for you, but that&apos;s apparently what it&apos;s programmed to do.

I ran a quick test of some of the other related Manipulation functions (&lt;strong&gt;append()&lt;/strong&gt;,&lt;strong&gt;after()&lt;/strong&gt;,&lt;strong&gt;before()&lt;/strong&gt;), and they all seem to behave that way as well.

Thought it was worth sharing.  Certainly makes my reordering task a bit easier. 
				</description>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<pubDate>Wed, 25 Mar 2009 13:19:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2009/3/25/Using-jQuery-Manipulation-Functions-Append-Prepend-After-Before-To-Reorder-Items</guid>
				
			</item>
			
			<item>
				<title>Using jQuery UI Sortables To Move Items From One List To Another</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2009/3/20/Using-jQuery-UI-Sortables-To-Move-Items-From-One-List-To-Another</link>
				<description>
				
				During my most recent project, my clients asked me to build a web-based tool that would help them place volunteers into various standing committees.  Placements would be made based on the preferences of the volunteers (who were asked to choose up to three committees they would like to serve on), the vacancies created in each committee by outgoing members, and the desire to have a diversity of units and divisions represented in each committee.

I decided pretty quickly that the most natural way to represent this placement process on a web page would be to let them &quot;physically&quot; move a volunteer into a committee.  I had built similar tools before (even before I started using jQuery), but never with more than two lists or collections, so I went to the &lt;a href=&quot;http://jqueryui.com/&quot; target=&quot;_blank&quot;&gt;jQuery UI site&lt;/a&gt; to see what my options were.

I started with the most obvious place to start, the &lt;a href=&quot;http://jqueryui.com/demos/droppable/&quot; target=&quot;_blank&quot;&gt;Droppable&lt;/a&gt; interaction, but soon realized that a better choice for this task was the &lt;a href=&quot;http://jqueryui.com/demos/sortable/&quot; target=&quot;_blank&quot;&gt;Sortables&lt;/a&gt; interaction.

The primary focus of the Sortable interaction is to let you reorder a collection of DOM elements by dragging them up-and-down through the collection.  It&apos;s extremely easy to implement in its most basic form.  If you wanted to make all of the &amp;lt;li&amp;gt; elements in a &amp;lt;ul&amp;gt; with an &quot;id&quot; attribute &quot;listA&quot; sortable, you can do it in one line:

&lt;p style=&quot;background-color:#ffffcc;padding:10px;&quot;&gt;
$(document).ready() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$(&quot;#listA&quot;).sortable();&lt;br /&gt;
});&lt;br /&gt;
&lt;/p&gt;


...you can see that code in action on the home page of the &lt;a href=&quot;http://jqueryui.com/demos/sortable/&quot; target=&quot;_blank&quot;&gt;Sortables&lt;/a&gt; interaction.

What I discovered was that it was almost as easy to connect one Sortable list to another, so that in addition to being able to move reorder items within each list, you could &lt;strong&gt;drag items from one list to the other&lt;/strong&gt;, simply by using the &quot;connectWith&quot; option:

&lt;p style=&quot;background-color:#ffffcc;padding:10px;&quot;&gt;
$(document).ready() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$(&quot;#listA&quot;).sortable({&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;connectWith: [&apos;#listB&apos;]&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;});&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$(&quot;#listB&quot;).sortable({&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;connectWith: [&apos;#listA&apos;]&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;});&lt;br /&gt;
});
&lt;/p&gt;

...In the code above, the first sortable() function call makes &lt;strong&gt;listA&lt;/strong&gt; sortable and uses the &quot;connectWith&quot; option to allow items from &lt;strong&gt;listA&lt;/strong&gt; to be dragged into &lt;strong&gt;listB&lt;/strong&gt;.  The second sortable() function call lets you sort items in &lt;strong&gt;listB&lt;/strong&gt; and drag items from &lt;strong&gt;listB&lt;/strong&gt; over to &lt;strong&gt;listA&lt;/strong&gt; (even items that originally belonged to &lt;strong&gt;listA&lt;/strong&gt;).  If you wanted the movement to only go in one direction (from &lt;strong&gt;listA&lt;/strong&gt; to &lt;strong&gt;listB&lt;/strong&gt; but not back again), you could leave out the &quot;connectWith&quot; option for &lt;strong&gt;listB&lt;/strong&gt;.

Again, the jQuery UI site has a nice &lt;a href=&quot;http://jqueryui.com/demos/sortable/#connect-lists&quot; target=&quot;_blank&quot;&gt;ready-made demo&lt;/a&gt; of this.

All well and good, but right now all this code does is create the visual effect of moving an item from one list to another.  Actually recording the fact that a particular item was moved from one list to the other requires more code, code that is invoked whenever such a move takes place.  Being the smart guys and gals that they are, the jQuery UI team built a couple of custom events into the Sortables interaction so you can run additional functions when a certain event has taken place.  For my purposes, I only needed to utilize two of these events:  &lt;strong&gt;&lt;em&gt;receive&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;remove&lt;/em&gt;&lt;/strong&gt;:

&lt;p style=&quot;background-color:#ffffcc;padding:10px;&quot;&gt;
$(document).ready({&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$(&quot;#listB&quot;).sortable({&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;connectWith: [&apos;#listA&apos;],&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;receive: function(event, ui)&lt;/strong&gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Run this code whenever an item is dragged and dropped into this list&lt;br /&gt;  
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var itemText= ui.item.text();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(itemText + &quot; just joined this list&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;remove: function(event, ui)&lt;/strong&gt;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Run this code whenever an item is dragged and dropped out of this list&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var itemText= ui.item.text();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(itemText + &quot; just left this list&quot;);&lt;br /&gt;		
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;});&lt;br /&gt;
});
&lt;/p&gt;

...The code is, for the most part, self-explanatory, save for one line (repeated twice):

&lt;strong&gt;&lt;em&gt;var itemText= ui.item.text()&lt;/em&gt;&lt;/strong&gt;

The &lt;strong&gt;ui&lt;/strong&gt; object is a &quot;prepared&quot; object created by jQuery UI that holds a number of objects and data associated with the event that just took place. The &lt;strong&gt;item&lt;/strong&gt; object within the &lt;strong&gt;ui&lt;/strong&gt; object represents the item that was moved in or out of the list, so I can treat it as a jQuery object and retrieve the text of the item using the standard text() function.  You can find a full list of the data contained in the &lt;strong&gt;ui&lt;/strong&gt; object by clicking on the &quot;Overview&quot; tab at the bottom of the main &lt;a href=&quot;http://jqueryui.com/demos/sortable/&quot; target=&quot;_blank&quot;&gt;Sortables interaction web page&lt;/a&gt;.

I created my own demo page to illustrate how this code works (with a homage to the Fox TV show &quot;Fringe&quot;):

&lt;a href=&quot;http://www.swartzfager.org/blog/demoFiles/connectedSortables/connectedSortableEvents.cfm&quot; target=&quot;_blank&quot;&gt;http://www.swartzfager.org/blog/demoFiles/connectedSortables/connectedSortableEvents.cfm&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;

Two things worth mentioning at this point:

&lt;ul&gt;
&lt;li&gt;If one of your lists starts off empty, or if there&apos;s any chance that a user might remove all of the items from a list and then try to put items back into the now-empty list, you need to set a minimum height for that &amp;lt;ul&amp;gt;, so that even when empty, the &amp;lt;ul&amp;gt; is large enough to accomodate a single list element.  In Firefox and Safari, you can set the minimum height using the &lt;em&gt;min-height&lt;/em&gt; CSS style, but if you have to support IE 7, you&apos;ll have to add two additional &lt;em&gt;height&lt;/em&gt; styles (like so):
 &lt;ul style=&quot;list-style-type:none;&quot;&gt;
  &lt;li&gt;
    &lt;em&gt;
    min-height:50px;&lt;br /&gt;
    height:auto !important;&lt;br /&gt;
    height:50px;&lt;br /&gt;
    &lt;/em&gt;
  &lt;/li&gt;
 &lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
  In my demo, you&apos;ll notice that as you drag a person out of the Candidates list, the list item&apos;s width gets shrunk to the width of the longest unbroken string of text in the list item.  I&apos;m not sure why it does that, but you can negate that effect by either defining a set width for the &amp;lt;li&amp;gt; elements, or by defining a &quot;helper&quot; with a set width (a helper is a visual representation of the item being moved, using something graphical like an icon).
&lt;/li&gt;
&lt;/ul&gt;

So, armed with this knowledge about the Sortables interaction, I was able to build the tool required by my clients.  Every time a volunteer was moved into or out of a committee, the receive or remove event would make an AJAX call to update the volunteer&apos;s record (either providing the id of the committee they were placed in or removing it), and it would run a function that updated the vacancy count for that committee specific to that type of person and counted the overall number of vacancies for that committee (to determine if the committee had been &quot;filled&quot;).  I also added a few toggles allowing them to hide extraneous information when they only wanted to see the data pertinent to doing placements for a particular committee.  The final challenge was to scale everything so that the tool could be viewed with a projector, so that the members of the group responsible for making the placements could work on it collaboratively.

I wasn&apos;t comfortable sharing an exact copy of the tool I created, but I have posted a facsimile that&apos;s fairly close to it, minus any real-life data and any AJAX calls to save the placements between page reloads.  You can view it here (Note: it doesn&apos;t work in IE 7):

&lt;a href=&quot;http://www.swartzfager.org/blog/demoFiles/connectedSortables/volunteerPlacement.cfm&quot; target=&quot;_blank&quot;&gt;http://www.swartzfager.org/blog/demoFiles/connectedSortables/volunteerPlacement.cfm&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;

...I provided instructions at the top, but quite honestly I think most IT-inclined folks could figure it out without them.

It&apos;s just one example of some of the really cool (yet practical) user interfaces made possible with jQuery and jQuery UI. 
				</description>
				
				<category>Web development</category>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<pubDate>Fri, 20 Mar 2009 12:01:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2009/3/20/Using-jQuery-UI-Sortables-To-Move-Items-From-One-List-To-Another</guid>
				
			</item>
			
			<item>
				<title>Do We Need A Better Way To Survey the CFML Community?</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2009/1/27/Do-We-Need-A-Better-Way-To-Survey-the-CFML-Community</link>
				<description>
				
				I just finished reading Issac Dealey&apos;s &lt;a href=&quot;http://ontap.riaforge.org/blog/index.cfm/2009/1/20/survey1&quot; target=&quot;_blank&quot;&gt;recent blog post&lt;/a&gt; (worth reading, by the way) where he shares some of the results from a survey he conducted regarding framework preferences back in September.  

In the post, he mentioned how difficult it seems to be to get folks to participate in these kinds of surveys, and it reminded me that someone else in the community was recently pleading with folks to take their survey (unfortunately, I forget who, but I did take it).  And I wonder what kind of a response Hal Helms is getting with his &lt;a href=&quot;http://www.surveymonkey.com/s.aspx?sm=0eA1iqZZt948FgGrD9hZyg_3d_3d&quot; target=&quot;_blank&quot;&gt;ColdFusion Web Developer Survey&lt;/a&gt;.

So it got me thinking:  is surveying the community/getting feedback from the community a problem in need of a solution?  Are these surveys being neglected because people don&apos;t see the point or don&apos;t have the time?  Or is the low response rate more the result of a lack of publicity or poor technical implementation of the survey itself?

Any thoughts? 
				</description>
				
				<category>CFML</category>
				
				<category>ColdFusion</category>
				
				<category>Miscellaneous</category>
				
				<pubDate>Tue, 27 Jan 2009 07:48:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2009/1/27/Do-We-Need-A-Better-Way-To-Survey-the-CFML-Community</guid>
				
			</item>
			
			<item>
				<title>Introducing the tableFormSynch jQuery Plugin</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2009/1/7/Introducing-the-tableFormSynch-jQuery-Plugin</link>
				<description>
				
				These days, there are a number of options for creating tables where a user can click on a cell and edit the data in that cell using JavaScript (CFML&apos;s &lt;a href=&quot;http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_g-h_03.html&quot; target=&quot;_blank&quot;&gt;&amp;lt;cfgfid&amp;gt;&lt;/a&gt;, the &lt;a href=&quot;http://www.appelsiini.net/projects/jeditable&quot; target=&quot;_blank&quot;&gt;Jeditable&lt;/a&gt; jQuery plugin, etc.).  Those work fine for simple tables, but they&apos;re not great solutions when you want to:

&lt;ul&gt;
&lt;li&gt;Work with record data you&apos;re unwilling or unable to display in the table, lest the table become too long horizontally.&lt;/li&gt;
&lt;li&gt;Update data related to the row record that could have multiple values (example: the list of skills an employee has).&lt;/li&gt;
&lt;/ul&gt;

My new plugin, &lt;a href=&quot;http://www.swartzfager.org/blog/jQuery/plugins/tableFormSynch/&quot; target=&quot;_blank&quot;&gt;tableFormSynch&lt;/a&gt;, is designed to provide a workable alternative for those situations.  It works in conjunction with the jQuery metadata plugin (&lt;a href=&quot;http://plugins.jquery.com/project/metadata&quot; target=&quot;_blank&quot;&gt;http://plugins.jquery.com/project/metadata&lt;/a&gt;) to bind a table to a form such that you can populate the form with the data stored in a particular row and then use the form to update the data and write it back to the row.  It also has functions for creating a new row based on the data in the form, deleting a selected row, and clearing the form of all values.  It works with all form elements, including checkboxes, radio buttons, and &amp;lt;select&amp;gt;.

Because the data for each table row is stored in metadata, you don&apos;t have to display all of the data in the cells of the row:  show only the most important information in the 
row and show the rest of the information in the form.  Values from multiple related records can be stored in the metadata as arrays and viewed/updated via the form using either checkboxes or multi-select &amp;lt;select&amp;gt; boxes.

The only thing you have to watch out for is to make sure that you replace any single-quotes and double-quotes in your data before inserting that data in the metadata string (the plugin documentation covers that in more detail).

The plugin doesn&apos;t perform any AJAX operations, so you&apos;re free to use your preferred AJAX functions to write and retrieve data from the server.  The plugin also isn&apos;t particular about how you populate the data in your rows, so you could generate the rows using any server-side technology:  CFML using &amp;lt;cfoutput&amp;gt;, &amp;lt;cfloop&amp;gt;, or an &lt;a href=&quot;http://ibo.riaforge.org/&quot; target=&quot;_blank&quot;&gt;IBO&lt;/a&gt;, PHP, ASP, etc.  You&apos;re also free to use your favorite functions for validating the form data.

To view a demo and download the plugin, visit: 

&lt;a href=&quot;http://www.swartzfager.org/blog/jQuery/plugins/tableFormSynch/&quot;&gt;http://www.swartzfager.org/blog/jQuery/plugins/tableFormSynch/&lt;/a&gt; 
				</description>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<pubDate>Wed, 07 Jan 2009 09:38:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2009/1/7/Introducing-the-tableFormSynch-jQuery-Plugin</guid>
				
			</item>
			
			<item>
				<title>jQuery Plugin Fling Lets You Set Up Flex-like Event Listeners</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/12/7/jQuery-Plugin-Fling-Lets-You-Set-Up-Flexlike-Event-Listeners</link>
				<description>
				
				I was checking Twitter on my iPod Touch when I cam across a tweet from &lt;a href=&quot;http://www.twitter.com/jquery&quot; target=&quot;_blank&quot;&gt;the jQuery Twitter account&lt;/a&gt; about a plugin called &lt;a href=&quot;http://www.command-tab.com/2008/12/04/jquery-fling/&quot; target=&quot;_blank&quot;&gt;Fling&lt;/a&gt;.

The purpose of Fling is to make it easier to manage multiple triggers and cascading events.  Fling lets you create a named event, then subscribe multiple functions to that event.  When the named event is published, those subscribed events then fire in sequence.

It reminded me of how Flex allows you to set up multiple event listeners and use event bubbling to trigger multiple events based off of a single action. 
				</description>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<pubDate>Sun, 07 Dec 2008 13:11:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/12/7/jQuery-Plugin-Fling-Lets-You-Set-Up-Flexlike-Event-Listeners</guid>
				
			</item>
			
			<item>
				<title>Idea: Give Adobe Bolt Collaboration Features</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/12/3/Idea-Give-Adobe-Bolt-Collaboration-Features</link>
				<description>
				
				In my last blog post, I suggested that Adobe include a list of CFML community resources in the upcoming &lt;a href=&quot;http://labs.adobe.com/wiki/index.php/Bolt&quot; target=&quot;_blank&quot;&gt;Bolt IDE&lt;/a&gt; in order to promote the community to isolated developers who might otherwise be unaware of all the resources out there.

After thinking about it a bit more, it occurred to me that maybe Bolt could take it one step further.  Instead of simply using Bolt to point developers to the community, have Bolt bring the community to the developer.  Build in an RSS viewer that displays the latest ColdFusion posts from Adobe Feeds.  Put in a communicator tool so the developer can converse with other CFML programmers via IM or Twitter.  Let the developer screen-share their code with other developers both inside and outside of their organization.  Integrate geolocation into Bolt and show the developer a list of other Bolt users (and maybe Adobe user groups) that are nearby.  Instead of using e-mail and message boards to communicate with CFML developers, Adobe could broadcast any news announcements to all of the Bolt installs, and Bolt users could submit questions to Adobe and other users via discussion forums displayed in a window of the IDE that gets refreshed automatically.

I&apos;ll admit, it&apos;s a pretty pie-in-the-sky idea.  Given that Adobe only has a finite amount of time and resources, I would certainly not want Adobe to leave out any traditional IDE features, the things that allow developers to code quickly and efficiently, in order to take the time to add all of the things I just suggested.

But if they did have a little extra time, I think adding even one or two simple collaboration/informational features would certainly enhance the product, and perhaps set a trend for other IDEs to follow. 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>ColdFusion</category>
				
				<category>CFML</category>
				
				<category>Adobe</category>
				
				<pubDate>Wed, 03 Dec 2008 20:12:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/12/3/Idea-Give-Adobe-Bolt-Collaboration-Features</guid>
				
			</item>
			
			<item>
				<title>Reaching the &quot;Invisible&quot; CFML Programmers</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/12/3/Reaching-the-Invisible-CFML-Programmers</link>
				<description>
				
				On Monday, &lt;a href=&quot;http://corfield.org/blog/index.cfm?&quot; target=&quot;_blank&quot;&gt;Sean Corfield&apos;s&lt;/a&gt; thoughts on &lt;a href=&quot;http://www.fusionauthority.com/reviews/4767-my-thoughts-on-max-2008.htm&quot; target=&quot;_blank&quot;&gt;how Adobe MAX 2008 went&lt;/a&gt; were published on the &lt;a href=&quot;http://www.fusionauthority.com&quot; target=&quot;_blank&quot;&gt;Fusion Authority&lt;/a&gt; website.  One of the events Sean cited in his article was a Birds of a Feather session moderated by Adrian Moreno about bridging the gap between expert/guru CFML developers (the ones most visible in the online CFML community) and &quot;9 to 5&quot; CFML developers.

I don&apos;t know the details of what was discussed in that session, but it relates to an issue that crosses my mind every once in a while:  how do you reach out to developers when you don&apos;t know who or where they are?  And, conversely, how do we help these &quot;invisible&quot; developers find (and participate in) the community?

I was a full-time ColdFusion developer for almost two years before I really became aware of the ColdFusion community.  My predecessor, to my knowledge, never participated in the CFML community or went to any conferences or user groups, so it never crossed my mind that such resources existed.  I don&apos;t remember how or when I realized that there was a community of folks with which I could converse about ColdFusion development (though it was probably at CFUnited &apos;05), but the point is is that it wasn&apos;t an automatic process.

I think this is an area where Adobe needs to step up and promote the community as part of the overall &quot;ColdFusion package&quot;.  Every sale of ColdFusion should include a list of CFML community resources and a statement that encourage organizations to share that list with any ColdFusion developers they are aware of.  If Adobe is skittish about including links to resources that might disappear over time, at the very least they can include Adobe-sponsored resources like &lt;a href=&quot;http://feeds.adobe.com&quot; target=&quot;_blank&quot;&gt;Adobe Feeds&lt;/a&gt; or the new &lt;a href=&quot;http://groups.adobe.com&quot; target=&quot;_blank&quot;&gt;Adobe Groups&lt;/a&gt; site.

Even that kind of effort might not reach all the CFML developers out there:  in some organizations (like mine) where the ColdFusion server is running in a shared environment, the organization that owns the CF license may not know who all is using the CF instance.  So here&apos;s another idea:  put links to community resources into the new &lt;a href=&quot;http://labs.adobe.com/wiki/index.php/Bolt&quot; target=&quot;_blank&quot;&gt;Adobe Bolt&lt;/a&gt;.  If Bolt is meant to be the premier IDE for CFML developers, then there&apos;s a good chance that even the &quot;invisible&quot; CFML developers will grab it and gain access to all the resources it provides. 
				</description>
				
				<category>CFML</category>
				
				<category>Adobe</category>
				
				<pubDate>Wed, 03 Dec 2008 07:22:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/12/3/Reaching-the-Invisible-CFML-Programmers</guid>
				
			</item>
			
			<item>
				<title>Initial Impressions of Adobe Durango</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/11/20/Initial-Impressions-of-Adobe-Durango</link>
				<description>
				
				In an earlier entry, I mentioned the announcement at MAX of &lt;a href=&quot;http://labs.adobe.com/technologies/durango/&quot; target=&quot;_blank&quot;&gt;Durango&lt;/a&gt;, a framework for allowing end-users to build AIR applications out of shared components.
I took some time last night to check it out, and here&apos;s what I learned...

First off, the components that make Durango work are Flex-based, so if you like to create AIR applications using HTML/CSS/JavaScript, it doesn&apos;t look like you can make use of Durango.

Durango allows a developer to make the Flex components they build (whether visual or non-visual/service-based in nature) reusable in other AIR applications.  The 10-page long PDF file on the &lt;a href=&quot;http://labs.adobe.com/technologies/durango/&quot; target=&quot;_blank&quot;&gt;Durango&lt;/a&gt; page on Adobe Labs explains how to add Durango functionality to components.  It also explains how to configure your AIR application such that it can either donate Durango-enabled components, receive Durango-enabled components, or do both.

The installation package available on Adobe Labs lets you experience Durango in action.  Once the install is complete, you are then able to create a blank AIR application (one set to receive Durango-enabled components) simply by choosing the &quot;New AIR Application&quot; option now enabled in your OS (on Windows, you can simply right-click on the desktop to get to that option).  Then you can open one of 4 sample AIR apps included in the install (all of which are set to donate their Durango-enabled components) and put it in &quot;reuse&quot; mode.  Once the sample app is in reuse mode, the Durango-enabled components can be clicked and dragged onto the window of the blank AIR app you created, and now that component also exists in your AIR app, and you can save the changes to the AIR app.  Certain properties of the component can be coded in such a way that the user can change them in the new AIR app, allowing for some customization of the borrowed component.

All in all, it seems like a fairly straightforward idea for making components reusable.  The big question is whether or not end-users will utilize this feature.  Folks who use a lot of separate AIR applications may see some value in taking bits and pieces from multiple apps and combining them.  And it remains to be seen how AIR developers will feel about allowing the components they worked so hard to build to be taken and repurposed by other developers. 
				</description>
				
				<category>Adobe</category>
				
				<category>AIR</category>
				
				<category>Flex</category>
				
				<category>RIAs</category>
				
				<pubDate>Thu, 20 Nov 2008 07:43:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/11/20/Initial-Impressions-of-Adobe-Durango</guid>
				
			</item>
			
			<item>
				<title>Sneak Announcements at MAX:  Server-side ActionScript and Durango</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/11/19/Sneak-Announcements-at-MAX--Serverside-ActionScript-and-Durango</link>
				<description>
				
				I was a little surprised this morning to find little or no mention of the announcements made at the Sneak Peek session at MAX last evening on any of the ColdFusion blogs aggregated by &lt;a href=&quot;http://feeds.adobe.com&quot; target=&quot;_blank&quot;&gt;Adobe Feeds&lt;/a&gt;.  Either I&apos;m missing something or everyone had too much fun at the after-session party last night.  :)

I don&apos;t really have any of the details about the announcements, since I was only half-paying attention to the live blogging from the event and the Twitter stream, but two items stood out for me.  

One was the announcement that server-side ActionScript is in the works.  For those who don&apos;t know, ActionScript is the language of Flex, which is a client-side technology.  Someone on Twitter said that the announcement meant that you could run ActionScript on the ColdFusion server, so that you could code certain things in ActionScript rather than CFML, but I don&apos;t know if that&apos;s really the case or not (I&apos;m sure that will be clarified within the next few days).

The second announcement that caught my attention was about Durango.  To quote the &lt;a href=&quot;http://labs.adobe.com/technologies/durango/&quot; target=&quot;_blank&quot;&gt;Durango web page&lt;/a&gt; on Adobe Labs (it&apos;s already available for download): &quot;Durango is a framework that allows developers to build Adobe AIR applications that can be customized by end-users.&quot;  Basically, it sounds like a means of allowing user-created mashups in an AIR application.  Giving end-users the ability to make their own mashups seems to be a trend in the industry lately.  It remains to be seen whether users will make use of that kind of power and flexibility.

Anyway, I expect folks who are actually at MAX will blog about these items and provide some more details, but I figured I put these items out there so people know what to look out for in upcoming posts from the community. 
				</description>
				
				<category>Adobe</category>
				
				<category>AIR</category>
				
				<category>ColdFusion</category>
				
				<category>Flex</category>
				
				<pubDate>Wed, 19 Nov 2008 07:37:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/11/19/Sneak-Announcements-at-MAX--Serverside-ActionScript-and-Durango</guid>
				
			</item>
			
			<item>
				<title>New Adobe Social Network:  groups.adobe.com</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/11/18/New-Adobe-Social-Network--groupsadobecom</link>
				<description>
				
				One of the later announcements in the MAX Day 2 keynote was the launch of &lt;a href=&quot;http://groups.adobe.com&quot; target=&quot;_blank&quot;&gt;http://groups.adobe.com&lt;/a&gt;.  

At first I thought it was simply a directory of all of the Adobe usergroups around the world, but it&apos;s more than that.  In addition to giving each user group a blog and a place to list upcoming events, individuals can sign up and create a profile.  Once you&apos;ve established a profile, you can then associate yourself with one or more user groups, event groups, and other individuals within the community.  

As far as I can tell, it&apos;s not quite as fully-featured as the &lt;a href=&quot;http://www.coldfusioncommunity.org&quot; target=&quot;_blank&quot;&gt;ColdFusion Community&lt;/a&gt; social networking site, but it&apos;s cool that Adobe has decided to put this out there as a means of encouraging networking and collaboration.

I&apos;ve already set up a bare-bones profile there (username: bcswartz).  Not sure what I&apos;m going to do with it or how much I&apos;m going to use it, but I&apos;m there. 
				</description>
				
				<category>ColdFusion</category>
				
				<category>Adobe</category>
				
				<pubDate>Tue, 18 Nov 2008 15:03:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/11/18/New-Adobe-Social-Network--groupsadobecom</guid>
				
			</item>
			
			<item>
				<title>Adobe MAX Day 2 Keynote In Progress.  News So Far:  New CF IDE (Bolt)</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/11/18/Adobe-MAX-Day-2-Keynote-In-Progress--News-So-Far--New-CF-IDE-Bolt</link>
				<description>
				
				The MAX Day 2 keynote address is still in progress.  So far, the biggest news so far regarding ColdFusion is the announcement of Bolt, a ColdFusion IDE based on Eclipse to be released at or around the same time as ColdFusion 9.  Sounds promising.  

You can sign up to participate in pre-release testing of Bolt on Adobe Labs at &lt;a href=&quot;http://labs.adobe.com/wiki/index.php/Bolt&quot;&gt;http://labs.adobe.com/wiki/index.php/Bolt&lt;/a&gt;

Not much else about ColdFusion so far:  I&apos;m trying to keep apprised by watching Twitter and the live blogging being done by two Adobe evangelists at &lt;a href=&quot;http://www.webkitchen.be/2008/11/18/max-san-francisco-keynote-day-2-liveblog/&quot;&gt;http://www.webkitchen.be/2008/11/18/max-san-francisco-keynote-day-2-liveblog/&lt;/a&gt;

Unfortunately, I am at work, so I can&apos;t entirely devote my full attention to what&apos;s going on. :) 
				</description>
				
				<category>ColdFusion</category>
				
				<category>Miscellaneous</category>
				
				<pubDate>Tue, 18 Nov 2008 14:31:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/11/18/Adobe-MAX-Day-2-Keynote-In-Progress--News-So-Far--New-CF-IDE-Bolt</guid>
				
			</item>
			
			<item>
				<title>CoCoMo Now Out on Adobe Labs</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/11/17/CoCoMo-Now-Out-on-Adobe-Labs</link>
				<description>
				
				This morning I read on Ryan Stewart&apos;s &lt;a href=&quot;http://blog.digitalbackcountry.com/2008/11/cocomo-collaboration-for-every-developer/&quot;&gt;blog&lt;/a&gt; that CoCoMo is now available as a beta on &lt;a href=&quot;http://labs.adobe.com/technologies/cocomo/&quot;&gt;Adobe Labs&lt;/a&gt;.

CoCoMo is a set of Flex components (described by Ryan as a &quot;framework&quot;) that lets you add real-time communication and collaboration features to Flex applications, functions such as VOIP, webcam videoconferencing, multi-user whiteboards, and file sharing.

I haven&apos;t touched Flex since dabbling with Flex 2, mainly because none of the apps I build involve rich media such as audio and video (an area where Flex has a clear advantage over HTML and JavaScript).  CoCoMo gives me new reasons to look at Flex as a production development platform.

The North American session of Adobe&apos;s huge MAX conference begins today, so I expect that there will be more news and announcements regarding Flex, ColdFusion, and AIR coming this week.  Could be an exciting week! 
				</description>
				
				<category>RIAs</category>
				
				<category>Flex</category>
				
				<pubDate>Mon, 17 Nov 2008 08:07:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/11/17/CoCoMo-Now-Out-on-Adobe-Labs</guid>
				
			</item>
			
			<item>
				<title>Applications Are Only as Beautiful as the Processes They Replicate</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/10/27/Applications-Are-Only-as-Beautiful-as-the-Processes-They-Replicate</link>
				<description>
				
				In an ideal application development process, you work with the client to get an accurate picture of all of the business logic involved in the process the application is supposed to handle, and the end result is a robust system built with clean, understandable code.

But it doesn&apos;t always work out that way (some would say it never works out that way).  Most of us have had to deal with &quot;scope creep.&quot;  In fact, one could argue that most modern CFML-coding frameworks and patterns came out of the need to deal with &quot;scope creep&quot; and other reasons for changing our applications.

But sometimes the challenge in creating a clean application comes from the nature of the business &quot;logic&quot; itself, the real-world process that your application is supposed to mimic and replace.  It occurred to me the other day that that is often the biggest hurdle I have to overcome with the applications that I&apos;m asked to construct.  

When I work with my clients to figure out what exactly what tasks the software needs to perform, I often discover that the processes at work are often riddled with exceptions and conditionals.  Sometimes my clients are consciously aware of these exceptions, but other times I have to point them out and we have to figure out how they need to be dealt with.

We humans can handle exceptions within our thought processes very easily.  Computer logic, on the other hand, doesn&apos;t handle exceptions so casually (which is probably why errors can be referred to as &quot;exceptions&quot;).  Coding for even a single exception to an otherwise iron-clad rule can make the code involved twice as complex and perhaps a bit less than pristine.

While we do all we can as responsible programmers to deliver a beautifully-coded application, I think that sometimes there&apos;s no avoiding the touch of ugliness that comes from trying to represent and replicate an &quot;ugly&quot; human-driven process. 
				</description>
				
				<category>Web development</category>
				
				<category>CFML</category>
				
				<pubDate>Mon, 27 Oct 2008 07:39:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/10/27/Applications-Are-Only-as-Beautiful-as-the-Processes-They-Replicate</guid>
				
			</item>
			
			<item>
				<title>CF411 and ColdFusion for Educational Use (Oh, And That New Browser...)</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/9/3/CF411-and-ColdFusion-for-Educational-Use-Oh-And-That-New-Browser</link>
				<description>
				
				Blogging bullet-point style tonight:

&lt;ul&gt;

&lt;li&gt;
&lt;p&gt;
Charlie Arehart&apos;s new &lt;a href=&quot;http://www.carehart.org/cf411/&quot; target=&quot;_blank&quot;&gt;CF411&lt;/a&gt; site has a MASSIVE amount of links to tools and resources for CFML and web development.  Stop what you&apos;re doing right now, go to the page, and store it somewhere (your bookmarks, Delicious, wherever).
&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;
The announcement that ColdFusion 8 Enterprise is now available for free for educational use (in other words, for learning purposes) was made on Monday.  You can find out more at &lt;a href=&quot;https://freeriatools.adobe.com/coldfusion/&quot; target=&quot;_blank&quot;&gt;https://freeriatools.adobe.com/coldfusion/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;While I&apos;m glad the announcement is out, I just wish it had been promoted better.  There&apos;s still nothing about it up on the Adobe home page or even on Adobe&apos;s ColdFusion product page.  Why not?
&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;
Last (and least...), Google surprised everyone this week with their new &lt;a href=&quot;http://www.google.com/chrome&quot; target=&quot;_blank&quot;&gt;Chrome&lt;/a&gt; web browser.  It got so much attention that everyone stopped talking about the iPhone, which is admittedly pretty impressive.
&lt;/p&gt;
&lt;p&gt;Like everyone else, I&apos;ve played with it.  Here&apos;s my take on it (yep, more bullet-points):
&lt;ul&gt;
  &lt;li&gt;It runs pretty well.&lt;/li&gt;
  &lt;li&gt;It does seem to run JavaScript more quickly than other browsers.&lt;/li&gt;
  &lt;li&gt;It has a few nice innovative features.&lt;/li&gt;
  &lt;li&gt;It can be quirky at times and it has some flaws (but it is a beta).&lt;/li&gt;
  &lt;li&gt;It has promise, but it doesn&apos;t provide any new functionality that I find particularly useful to me.&lt;/li&gt;
  &lt;li&gt;FireFox will remain my browser at work and at home.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;/li&gt; 
				</description>
				
				<category>Technology</category>
				
				<category>Miscellaneous</category>
				
				<category>ColdFusion</category>
				
				<category>CFML</category>
				
				<pubDate>Wed, 03 Sep 2008 20:20:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/9/3/CF411-and-ColdFusion-for-Educational-Use-Oh-And-That-New-Browser</guid>
				
			</item>
			
			<item>
				<title>Leveraging the Ubiquity FireFox Plugin To Access CFQuickDocs Pages</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/8/29/Leveraging-the-Ubiquity-FireFox-Plugin-To-Access-CFQuickDocs-Pages</link>
				<description>
				
				If you&apos;re a FireFox user and you haven&apos;t tried out the new &lt;a href=&quot;http://labs.mozilla.com/2008/08/introducing-ubiquity/&quot; target=&quot;_blank&quot;&gt;Ubiquity&lt;/a&gt; plugin created by the folks at Mozilla Labs, you should.

What is Ubiquity? The short answer is it&apos;s a command-line interface for retrieving and re-purposing web content. For example, the &quot;wikipedia&quot; command built into the plugin takes the word you type in, retrieves data from the top 5 matches for that word (as you type it, no less) in Wikipedia using an API, and displays that data with clickable links to the Wikipedia pages in the command window:

&lt;img src=&quot;http://www.swartzfager.org/blog/images/ubiquity_wiki.gif&quot; /&gt;

You can see even more interesting uses for Ubiquity by watching the &lt;a href=&quot;http://labs.mozilla.com/2008/08/introducing-ubiquity/&quot; target=&quot;_blank&quot;&gt;video clip&lt;/a&gt; in the Ubiquity blog post.

One of the things about Ubiquity that hasn&apos;t been talked about very much is that you can create your own Ubiquity commands using JavaScript and then share those commands with other Ubiquity users (note to jQuery users: Ubiquity commands can use jQuery functions as well as regular JavaScript functions).  To that end, I created a very simple command that lets me call up a particular &lt;a href=&quot;http://www.cfquickdocs.com/&quot; target=&quot;_blank&quot;&gt;CFQuickDocs&lt;/a&gt; page by typing &quot;cfquickdocs&quot; and the name of the CFML tag or function I want to look up:

&lt;img src=&quot;http://www.swartzfager.org/blog/images/ubiquity_cfq.gif&quot; /&gt;

As Ubiquity commands go, it&apos;s not that impressive, but it does let me pull up a particular entry faster than I used to (which involved going into my bookmarks, clicking on the bookmark, waiting for the page to load, and then entering the tag or function I want to read about).  And all it took was one function call with four parameters:

&lt;code&gt;
makeSearchCommand({
  name: &quot;cfquickdocs&quot;,
  url: &quot;http://www.cfquickdocs.com/?getDoc={QUERY}#{QUERY}&quot;,
  icon: &quot;http://www.cfquickdocs.com/favicon.ico&quot;,
  description: &quot;Searches the CFQuickDocs for the CFML tag or function you enter.&quot;
});
&lt;/code&gt;

Sharing a Ubiquity command is simply a matter of putting the command in a JavaScript file and then creating an HTML page that calls that file.  If you already have Ubiquity installed, you can install this CFQuickDocs command into your Ubiquity plugin by going to the following URL:

&lt;a href=&quot;http://www.swartzfager.org/ubiquity/cfquickdocs.html&quot; target=&quot;_blank&quot;&gt;http://www.swartzfager.org/ubiquity/cfquickdocs.html&lt;/a&gt;

If you don&apos;t have Ubiquity installed but want to learn more about developing Ubiquity commands, there is an 
&lt;a href=&quot;https://wiki.mozilla.org/Labs/Ubiquity/Ubiquity_0.1_Author_Tutorial&quot; target=&quot;_blank&quot;&gt;online tutorial&lt;/a&gt; that explains the basics.  Once you have the plugin installed, you&apos;ll have access to a command editor that lets you try out your commands as you code them, and you can read the code for all of the functions that come built into the plugin. 
				</description>
				
				<category>Technology</category>
				
				<category>RIAs</category>
				
				<category>Miscellaneous</category>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<pubDate>Fri, 29 Aug 2008 11:51:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/8/29/Leveraging-the-Ubiquity-FireFox-Plugin-To-Access-CFQuickDocs-Pages</guid>
				
			</item>
			
			<item>
				<title>CFConversations Podcast #13: the Hal Helms Interview</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/8/25/CFConversations-Podcast-13-the-Hal-Helms-Interview</link>
				<description>
				
				For those folks who aren&apos;t regularly following the &lt;a href=&quot;http://www.cfconversations.com&quot;&gt;CFConversations&lt;/a&gt; podcast, the latest episode is an &lt;a href=&quot;http://www.cfconversations.com/index.cfm/2008/8/24/CFConversations-13-Interview-8--Hal-Helms--082408&quot;&gt;interview with Hal Helms&lt;/a&gt;.

I conducted the interview, but for the most part I stayed out of the way and let Hal do his thing, which is to speak thoughtfully and eloquently about ColdFusion, OO, and application development. 
				</description>
				
				<category>Podcasts</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Mon, 25 Aug 2008 12:43:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/8/25/CFConversations-Podcast-13-the-Hal-Helms-Interview</guid>
				
			</item>
			
			<item>
				<title>If You Build the App, Someone Just Might Use It:  You Never Know</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/8/23/If-You-Build-the-App-Someone-Just-Might-Use-It--You-Never-Know</link>
				<description>
				
				I was rather surprised to see my &lt;a href=&quot;http://colorPicker.riaforge.org&quot; target=&quot;_blank&quot;&gt;colorPicker AIR application&lt;/a&gt; included in a list of &lt;a href=&quot;http://sixrevisions.com/tools/adobe_air_apps_web_designers/&quot; target=&quot;_blank&quot;&gt;10 AIR apps for web designers&lt;/a&gt; on the &lt;a href=&quot;http://sixrevisions.com/&quot; target=&quot;_blank&quot;&gt;Six Revisions&lt;/a&gt; blog this past week.  Then Gary Gilbert gave it more exposure by &lt;a href=&quot;http://www.garyrgilbert.com/blog/index.cfm/2008/8/19/Air-Apps-for-Web-Designers&quot; target=&quot;_blank&quot;&gt;blogging&lt;/a&gt; about the Six Revisions post.

After seeing the Six Revisions post, I decided to check colorPicker&apos;s download numbers on &lt;a href=&quot;http://www.riaforge.org&quot; target=&quot;_blank&quot;&gt;RIAForge&lt;/a&gt; and got another surprise:  the download count was just shy of 800.

As of today, four days after the blog exposure, the download count stands at 1119.

I built the colorPicker mainly for myself (and I still use it).  I put it up on RIAForge because I thought a FEW people might prefer something a bit simpler than &lt;a href=&quot;http://kuler.adobe.com&quot; target=&quot;_blank&quot;&gt;Kuler&lt;/a&gt; (Adobe&apos;s color palette tool).  But given the number of slick color designer AIR apps that are out now, I would never have expected that many people to have given colorPicker even a glance.

It just goes to show that you never know what apps or code other people might find worthwhile. 
				</description>
				
				<category>Web development</category>
				
				<category>Miscellaneous</category>
				
				<category>AIR</category>
				
				<pubDate>Sat, 23 Aug 2008 18:18:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/8/23/If-You-Build-the-App-Someone-Just-Might-Use-It--You-Never-Know</guid>
				
			</item>
			
			<item>
				<title>Latest roundtable edition of the CFConversations podcast is out</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/8/7/Latest-roundtable-edition-of-the-CFConversations-podcast-is-out</link>
				<description>
				
				Earlier today, &lt;a href=&quot;http://www.cfconversations.com/index.cfm/2008/8/7/CFConversations-11-Roundtable-5--080708&quot; target=&quot;_blank&quot;&gt;episode 11&lt;/a&gt; of the CFConversations podcast, the 5th roundtable version, was released.  Topics of discussion included the upcoming FREE &lt;a href=&quot;http://bflex.info/&quot; target=&quot;_blank&quot;&gt;bFusion &amp; bFlex&lt;/a&gt; hands-on ColdFusion and Flex training sessions at Indiana University, the challenges of hiring developers, and lingering thoughts regarding ColdFusion 9 and CFUnited.

Early on in the podcast, two of the participants, Bob Flynn of Indiana University and Richard Goodrow of Gallaudet University, talked about the role of ColdFusion at their respective universities and the potential impact of Adobe&apos;s decision to make ColdFusion free for educational use.  For the most part, they echoed some of the things I said in &lt;a href=&quot;http://www.cfconversations.com/index.cfm/2008/6/19/Day2AtCFUnited&quot; target=&quot;_blank&quot;&gt;episode 3&lt;/a&gt;: that this move (while a good one) is not going to be a quick fix for the shortage of ColdFusion developers, and an official ColdFusion curriculum would greatly increase the chances of getting colleges and universities to give it a shot.

Hopefully Adobe will make the official announcement about ColdFusion in education soon.  While I&apos;m not overly optimistic about the chances of getting ColdFusion taught at my university, there are one or two academic programs that could possibly be persuaded to give it a shot, and I would prefer to have the announcement out before I try to approach them with the idea. 
				</description>
				
				<category>Podcasts</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Thu, 07 Aug 2008 21:14:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/8/7/Latest-roundtable-edition-of-the-CFConversations-podcast-is-out</guid>
				
			</item>
			
			<item>
				<title>My first jQuery plugin:  textCounting</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/7/30/My-first-jQuery-plugin--textCounting</link>
				<description>
				
				I&apos;ve blogged about things I&apos;ve done with jQuery before, but this is the first jQuery plugin I&apos;ve developed.

My textCounting plugin lets you show users how much text they&apos;ve entered into a &amp;lt;textarea&amp;gt; box and/or how much text they can still enter before reaching a set limit. The plugin can be configured to count either the number of words or number of characters entered or still available.

The plugin is designed in a way that a single call of the plugin can affect all of the &amp;lt;textarea&amp;gt;s on the same page if you follow certain element ID naming conventions.  There are a number of different configuration options, and it can be used with another jQuery plugin, the &lt;a href=&quot;http://plugins.jquery.com/project/metadata&quot; target=&quot;_blank&quot;&gt;Metadata&lt;/a&gt; plugin, to retrieve settings and data from a metadata block within the class attribute of the &amp;lt;textarea&amp;gt;s.

To see a demonstration of the plugin in action and to download the plugin, visit:

&lt;a href=&quot;http://www.swartzfager.org/blog/jQuery/plugins/textCounting/&quot;&gt;http://www.swartzfager.org/blog/jQuery/plugins/textCounting&lt;/a&gt;

I want to point out that one thing that the plugin does NOT do is enforce the word/character limit set for each &amp;lt;textarea&amp;gt;: you can apply a CSS class to the HTML element containing the count as a visual notice to the user that they&apos;ve exceeded the limit, but it doesn&apos;t actually prevent them from continuing to type.  I was originally going to provide that option, but I realized that a lot of users tend to paste content from another source in &amp;lt;textarea&amp;gt;s, especially when the content is expected to be verbose, and making the user count the words or characters in their text prior to copying it into the &amp;lt;textarea&amp;gt; defeats the purpose of providing the counter in the first place.

If any of you are interesting in writing your own jQuery plugins, I highly recommend you read Mike Alsup&apos;s blog post &lt;a href=&quot;http://www.learningjquery.com/2007/10/a-plugin-development-pattern&quot; target=&quot;_blank&quot;&gt;&quot;A Plugin Development Pattern&quot;&lt;/a&gt; on the &lt;a href=&quot;http://www.learningjquery.com&quot; target=&quot;_blank&quot;&gt;Learning jQuery&lt;/a&gt; site.  It was an invaluable resource and taught me a lot. 
				</description>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<pubDate>Wed, 30 Jul 2008 07:43:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/7/30/My-first-jQuery-plugin--textCounting</guid>
				
			</item>
			
			<item>
				<title>Rare mid-week edition of CFConversations podcast now available</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/7/23/Rare-midweek-edition-of-CFConversations-podcast-now-available</link>
				<description>
				
				I&apos;ve been a little lax in posting about new episodes of the 
&lt;a href=&quot;http://www.cfconversations.com&quot; target=&quot;_blank&quot;&gt;CFConversations&lt;/a&gt; podcast (and lax in my blog postings in general), but I wanted to point out that episode #9 (the 5th interview episode) was released today.

The reason this episode is being released mid-week is because part of the interview is about the &lt;a href=&quot;http://www.theflexgroup.org/camp/&quot; target=&quot;_blank&quot;&gt;Michigan Flex Camp&lt;/a&gt; which will be held on July 30 and 31.

I&apos;ve heard very little chatter about the podcast in the CFML blogosphere, so I&apos;m curious:  are folks listening, and do they like what they hear (content-wise)? 
				</description>
				
				<category>CFML</category>
				
				<category>ColdFusion</category>
				
				<category>Podcasts</category>
				
				<pubDate>Wed, 23 Jul 2008 08:20:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/7/23/Rare-midweek-edition-of-CFConversations-podcast-now-available</guid>
				
			</item>
			
			<item>
				<title>Google&apos;s new virtual room service (Lively) may have potential</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/7/10/Googles-new-virtual-room-service-Lively-may-have-potential</link>
				<description>
				
				Yesterday Google launched a new beta project called &lt;a href=&quot;http://www.lively.com/html/landing.html&quot; target=&quot;_blank&quot;&gt;Lively&lt;/a&gt;.  Lively lets you create virtual rooms that people can join and then interact with each other via avatars.  The concept is similar to virtual reality systems like The Sims or Second Life, but the difference is that you can put the rooms that you build on your own web page(s).

When I first heard about it, I thought the idea was a bit over-the-top, but I decided to at least try it out last night.

For a first version beta, it&apos;s pretty slick.  You start off with a basic set of room layouts and room items (furniture, decorations, accessories) to build your room with, but you can choose to add different items from an on-line catalog (currently, all of the items are &quot;free,&quot; which seems to imply a virtual currency may be established later when they let folks create their own stuff).  Once you add an item to the room, you can move the item by dragging it and then rotate it as needed.  You can also add mood music, either from the catalog of music or by uploading your own music file.

Once you&apos;ve decided an avatar to represent you, you can enter the room and interact with the items (if there&apos;s a couch, you can choose to sit down on it).  If there are other people/avatars in the room, you can chat with them just like you would in a normal chatroom and your words will appear in a conversation block over your head for everyone to see (or you can whisper privately to a single fellow occupant).  Right-clicking on your avatar brings up a menu of gestures and animations you can have your avatar perform, like clapping, laughing, or dancing like John Travolta in &quot;Pulp Fiction&quot; (yes, it&apos;s as bizarre-looking as you might think).

I threw together a very simple room and then embedded the code to access the room on a very simple web page on my site.  You can &lt;a href=&quot;http://www.swartzfager.org/LivelyTestRoom.cfm&quot; target=&quot;_blank&quot;&gt;check it out&lt;/a&gt; if you like, but since you&apos;ll need the Windows-only plugin to enter the room, which is the same plugin that lets you create your own room and avatar, you&apos;re probably better off trying Lively out by creating your own room.

The need for the plugin to even enter a room is probably one of the biggest drawbacks of the service.  The visual evidence strongly suggests that Lively runs off of Flash and was built using Flex (I once saw the standard Flex &quot;Initializing...&quot; dialog box while loading my room) so it&apos;s unclear as to why a separate plugin is needed.  Maybe Adobe can work with Google to redo the plugin in AIR so it&apos;s at least cross-platform.

The other challenge facing adoption of Lively is, well, its usefulness.  Right now, it&apos;s essentially an enhanced chat room.  Some folks have said that businesses could use it to hold virtual meetings, but I don&apos;t see that happening unless Lively is upgraded to allow one or more room participants to speak via a microphone and provides a means of working with a presentation (Lively does allow you to display Flash videos within your room but I didn&apos;t explore that feature).

And while the idea of having a virtual room up on your home page or blog is kinda neat, it&apos;s not going to do you much good unless there&apos;s a compelling reason for people to come and hang out in groups in YOUR room.  Centralized virtual realities like Second Life are never empty because there&apos;s just one world for people to go to:  certain areas might be emptier than others, but there&apos;s always someone around to interact with.

Still, I do see some potential uses for it with established communities.  Popular online forums could replace their existing chat rooms with Lively rooms.  Businesses could create a guest room or visitor room where website visitors could hang out before interacting with customer service avatars.  Conferences like cf.Objective() or CFUnited could have virtual discussions rooms that allow conference-goers to discuss the day&apos;s events with non-conference goers (&quot;Folks, the in-person BOFs will be from 8pm to 9pm, followed by the online BOF free-for-all in the Lively room from 9pm to...whenever.&quot;)

Heck, the folks on the &lt;a href=&quot;http://www.riadventure.com/&quot; target=&quot;_blank&quot;&gt;RIA cruise in February&lt;/a&gt; could take the Lively &quot;tropical island&quot; room template and make a place to meet up with non-cruise landlubbers at some point during the cruise if they wanted to.

Who knows if people would make use of these rooms, but the beauty is that it doesn&apos;t take long at all to create a basic Lively room, so if it doesn&apos;t work out the time lost in trying isn&apos;t painful.

It&apos;ll be interesting to see if this goes anywhere.  My guess is that it&apos;ll depend on how much time and effort Google decides to invest in it and whether it will scale effectively (I heard that there were load issues when it first went public yesterday, but I didn&apos;t have any real problems with it last evening). 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>Flex</category>
				
				<pubDate>Thu, 10 Jul 2008 07:25:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/7/10/Googles-new-virtual-room-service-Lively-may-have-potential</guid>
				
			</item>
			
			<item>
				<title>A list of jQuery plugins I use</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/6/28/A-list-of-jQuery-plugins-I-use</link>
				<description>
				
				As part of his &lt;a href=&quot;http://www.coldfusionjedi.com/index.cfm/2008/6/28/Ask-a-Jedi-jQuery-versus-Spry&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt; today, Ray Camden and a number of the folks who posted comments pointed out that while it was great that there are a lot of plugins available for &lt;a href=&quot;http://plugins.jquery.com/project/Plugins/&quot; target=&quot;_blank&quot;&gt;jQuery&lt;/a&gt;, the downside is that it&apos;s hard to know which plugins are any good.

I&apos;m not a heavy plugin user, but I&apos;d thought I&apos;d list the few plugins and jQuery UI libraries that I&apos;ve found to be very useful:

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.malsup.com/jquery/form/&quot; target=&quot;_blank&quot;&gt;jQuery Form Plugin&lt;/a&gt;: this plugin appears in every project I&apos;ve done since I started using jQuery.  It makes it dead simple to submit forms via AJAX.
&lt;/p&gt;
&lt;p&gt;(Oooh, it looks like the author&apos;s added some new features since the last time I download it...I&apos;ll have to check that out).
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&quot;http://tablesorter.com/docs/&quot; target=&quot;_blank&quot;&gt;Tablesorter&lt;/a&gt;: this plugin was actually incorporated into version 1.0 of the &lt;a href=&quot;http://ui.jquery.com&quot; target=&quot;_blank&quot;&gt;jQuery UI library&lt;/a&gt;, but I don&apos;t see it listed in the current version of the UI library.  This plugin lets you sort a table in ascending or descending order based on a selected column.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&quot;http://docs.jquery.com/UI/Sortables&quot; target=&quot;_blank&quot;&gt;Sortables UI library&lt;/a&gt;:  this part of the &lt;a href=&quot;http://ui.jquery.com&quot; target=&quot;_blank&quot;&gt;jQuery UI library&lt;/a&gt; lets you rearrange items on the page using drag-and-drop (something I&apos;ve mentioned a number of times here on my blog).
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.isocra.com/2008/02/table-drag-and-drop-jquery-plugin/&quot; target=&quot;_blank&quot;&gt;TableDnD (Table Drag-and-Drop)&lt;/a&gt;: the Sortables UI library I just mentioned does not work on table rows (tables are just &quot;different,&quot; apparently), but this plugin lets you grab a row and move it up or down within the table. 
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.curvycorners.net/&quot; target=&quot;_blank&quot;&gt;curvyCorners&lt;/a&gt;: after trying a few different plugins aimed at letting you create curved corners for certain HTML elements (like &amp;lt;div&amp;gt;s), this plugin, although not perfect, seemed to work best.
&lt;/p&gt;
&lt;p&gt;
I must say that I couldn&apos;t get it to work right in IE, but that might have been because of the way I was using it.  And it looks like the author has released a few updates since I last downloaded it, so that may not be an issue anymore.
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Anyone else have any jQuery plugins they&apos;d recommended using?  Or recommend avoiding?  :) 
				</description>
				
				<category>jQuery</category>
				
				<pubDate>Sat, 28 Jun 2008 17:57:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/6/28/A-list-of-jQuery-plugins-I-use</guid>
				
			</item>
			
			<item>
				<title>CFConversations podcast #5: interview with Liz Frederick and Nafisa Sabu of TeraTech/CFUnited</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/6/28/CFConversations-podcast-5-interview-with-Liz-Frederick-and-Nafisa-Sabu-of-TeraTechCFUnited</link>
				<description>
				
				Hey, folks, the first CFConversations interview podcast is now available.  Check it out--you can either subscribe to the podcast via iTunes (just search for &quot;CFConversations&quot;) or download each episode directly from the &lt;a href=&quot;http://www.cfconversations.com&quot; target=&quot;_blank&quot;&gt;CFConversations&lt;/a&gt; website. 
				</description>
				
				<category>CFML</category>
				
				<category>ColdFusion</category>
				
				<category>Podcasts</category>
				
				<pubDate>Sat, 28 Jun 2008 16:54:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/6/28/CFConversations-podcast-5-interview-with-Liz-Frederick-and-Nafisa-Sabu-of-TeraTechCFUnited</guid>
				
			</item>
			
			<item>
				<title>Episode 4 of CFConversations podcast::  ideas for promoting CFML</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/6/24/Episode-4-of-CFConversations-podcast--ideas-for-promoting-CFML</link>
				<description>
				
				The fourth episode of the &lt;a href=&quot;http://www.cfconversations.com&quot; target=&quot;_blank&quot;&gt;CFConversations&lt;/a&gt; podcast, the last of the three episodes recorded at &lt;a href=&quot;http://www.cfunited.com&quot; target=&quot;_blank&quot;&gt;CFUnited&lt;/a&gt;, was released early this morning.

This episode focuses on some ideas that came out of &lt;a href=&quot;http://www.brianmeloche.com/blog/&quot; target=&quot;_blank&quot;&gt;Brian Meloche&apos;s&lt;/a&gt; conference session on promoting the use of CFML outside of the ColdFusion community.  Check it out! 
				</description>
				
				<category>CFML</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Tue, 24 Jun 2008 07:25:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/6/24/Episode-4-of-CFConversations-podcast--ideas-for-promoting-CFML</guid>
				
			</item>
			
			<item>
				<title>Some random post CFUnited thoughts</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/6/21/Some-random-post-CFUnited-thoughts</link>
				<description>
				
				Now that CFUnited&apos;s over (at least for me) and I&apos;ve had some time to rest and mull over things, I wanted to post a few random thoughts and opinions:

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
The entire L&apos;Enfant Plaza Metro station (columns, walls, even some of the Metro railcars that passed through) was one big ad for Adobe LifeCycle.  The message:  LifeCycle can help the government manage and distribute PDF forms.  Unusual?  I don&apos;t get down into DC too often, but I&apos;d never seen any one company take over an entire station like that before.  I want to see more of this high-visibility marketing from Adobe, especially for ColdFusion.  
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sean Corfield&apos;s new asynchronous event-driven framework, &lt;a href=&quot;http://edmund.riaforge.org/&quot; target=&quot;_blank&quot;&gt;Edmund&lt;/a&gt;, looks very cool.  Being able to fire off events and have them bubble up through the framework much like what you can do in Flex is a very appealing idea.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Twitter once again proved to be a useful tool.  I found it a lot easy to &quot;tweet&quot; what was going on instead of writing it up on the blog, and thanks to Nafisa Sabu and Elliot Sprehn of TeraTech, anyone who visited the CFUnited website could read the tweets of the conference-goers who had &quot;friended&quot; the CFUnited Twitter account.  Hopefully a few folks found my tweets to be useful.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
While the proposed integration of Hibernate in ColdFusion 9 sounds neat, I think Transfer is still going to be the ORM of choice for many developers, both now and in the future, for some of the reasons Mark listed in his &lt;a href=&quot;http://www.compoundtheory.com/?action=displayPost&amp;ID=332&quot; target=&quot;_blank&quot;&gt;blog&lt;/a&gt; and because Transfer works/will work on a larger number of CFML platforms (CF7, CF8, and probably OpenBD and Railo).
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The discussion about whether or not ColdFusion and ColdFusion development is becoming too Java-like isn&apos;t over yet.  I met a developer who made the point that it seemed strange (and stupid) to him that we&apos;re trying to entice Java developers to use CFML because it makes development faster and easier while we seem to be gravitating towards adding complexity to our development process and our code.
&lt;/p&gt;
&lt;p&gt;I made the usual argument that regardless of the focus on OOP in the ColdFusion blogging community, no one was advocating removing those aspects of ColdFusion that make CFML easy to learn and use, and that even OO-style programmers will admit that there are some situations where using an OO application framework is overkill, but he wasn&apos;t entirely convinced.
&lt;/p&gt;
&lt;p&gt;It made me wonder: if Adobe does develop a teaching curriculum as part of their effort to get ColdFusion adopted in schools, will that curriculum take advantage of CFML&apos;s traditional low learning curve, or will they emphasize an OO-style of programming from the get-go?
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Some promising ideas came out of Brian Meloche&apos;s session on promoting ColdFusion/CFML outside of the community.  The existence/promise of OpenBD and Railo and Adobe&apos;s decision to make ColdFusion free for educational use has opened up a whole new world of possibilities.  You should be hearing about these ideas soon, either via the &lt;a href=&quot;http://www.cfconversations.com&quot; target=&quot;_blank&quot;&gt;CFConversations podcast&lt;/a&gt; or some other channel.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Which reminds me, you should check out the 
&lt;a href=&quot;http://www.cfconversations.com&quot; target=&quot;_blank&quot;&gt;CFConversations podcast&lt;/a&gt; if you haven&apos;t done so already.  And I would say that even if I wasn&apos;t involved with the project.  :)
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt; 
				</description>
				
				<category>Transfer ORM</category>
				
				<category>ColdFusion</category>
				
				<category>CFML</category>
				
				<pubDate>Sat, 21 Jun 2008 14:13:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/6/21/Some-random-post-CFUnited-thoughts</guid>
				
			</item>
			
			<item>
				<title>Going to CFUnited tomorrow</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/6/17/Going-to-CFUnited-tomorrow</link>
				<description>
				
				Well, CFUnited begins tomorrow, so I&apos;ll be getting up a bit earlier than usual so I can drive to the nearest Metro station and head down into D.C.

The last time I attended CFUnited was back in 2005, so it&apos;ll be interesting to see if the conference has changed any in terms of atmosphere and organization since then.  Certainly the venue will be different; hopefully that means the wireless network will be more robust/reliable.  

And this time I won&apos;t be ducking out of lunch to settle on a new house (but hey, I did make it back in time for the next round of sessions).

I probably won&apos;t post any new blog entries during the conference (it takes me too darn long to come up with what I really want to say), but I might post a snippet or two about what&apos;s going on via Twitter.  If you&apos;re interested in listening in on those &quot;tweets&quot;, you can just follow me on Twitter for the next few days:  my Twitter handle is &lt;strong&gt;bcswartz&lt;/strong&gt;.

As for any of my fellow conference-goers (if you&apos;re listening), if you don&apos;t already use Twitter, you might want to make use of it during the conference.  I don&apos;t know if Twitter is going to serve as a communications channel for what&apos;s going on and where people are meeting up like it did at cf.Objective(), but I imagine if nothing else the CFUnited folks will be making use of the CFUnited Twitter account to send out notices and what not.  You can either use Twitter via the &lt;a href=&quot;http://twitter.com&quot; target=&quot;_blank&quot;&gt;Twitter website&lt;/a&gt; and refresh the page occasionally, or you can use a Twitter desktop app like &lt;a href=&quot;http://www.twhirl.org&quot; target=&quot;_blank&quot;&gt;Twhirl&lt;/a&gt; (built with Adobe AIR).

Of course, that&apos;s all moot if we manage to overload the wireless network at the conference.  :)

Anyway, looking forward to seeing everyone there! 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Tue, 17 Jun 2008 21:29:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/6/17/Going-to-CFUnited-tomorrow</guid>
				
			</item>
			
			<item>
				<title>What the CFUnited folks want to know</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/6/4/What-the-CFUnited-folks-want-to-know</link>
				<description>
				
				The folks running &lt;a href=&quot;http://www.cfunited.com&quot; target=&quot;_blank&quot;&gt;CFUnited&lt;/a&gt; have invited ColdFusion bloggers to &lt;a href=&quot;http://cfunited.com/blog/index.cfm/2008/6/4/Count-down-begins--Questions-for-CFUnited-Attendees&quot; target=&quot;_blank&quot;&gt;answer some questions&lt;/a&gt; about the conference on our own blogs.

Sounds like a good excuse for an easy blog post, so here goes...

&lt;strong&gt;&quot;What are you looking forward to most?&quot;&lt;/strong&gt;

While there are a few sessions I&apos;m particularly looking forward to, what I&apos;m looking forward to most is conversing with my fellow developers and sharing ideas.

&lt;strong&gt;&quot;Which speaker will most likely end up on your camera?&quot;&lt;/strong&gt;

Hopefully none of the speakers will fall on my camera.  Maybe I should just leave the camera at home; safer for everyone involved.

&lt;strong&gt;&quot;What do you plan to do outside conference time?&quot;&lt;/strong&gt;

Hang out with fellow conference-goers, maybe help some of the out-of-town folks find the places they want to visit (I&apos;m no expert on D.C., but I know where most of the notable stuff is and can find my way around).  

Since I&apos;ll be commuting between home and the conference each day, I probably won&apos;t be hanging around too late &apos;cept for Friday night.

&lt;strong&gt;&quot;Fill in the blank: I will mainly be around the ______ booth.&quot;&lt;/strong&gt;

The popular booth, to find out why it&apos;s so popular.  I&apos;m curious like that.

&lt;strong&gt;&quot;Do you have a new project you are working on and will reveal it at CFUnited?&lt;/strong&gt;

Nothing I&apos;m working on in my personal time really constitutes as a &quot;project,&quot; per se, so no.  

But if someone does want to announce and show off their project at CFUnited, I&apos;d suggest going to the &lt;a href=&quot;http://wiki.cfunited.com&quot; target=&quot;_blank&quot;&gt;CFUnited wiki&lt;/a&gt; and scheduling a block of time in the Special Attendee conference room (the Lafayette room) so you have somewhere to show off your project.  The schedule for that room is far from booked. 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 04 Jun 2008 20:47:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/6/4/What-the-CFUnited-folks-want-to-know</guid>
				
			</item>
			
			<item>
				<title>The new Dreamweaver beta:  Subversion, show related files, show code sources</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/5/27/The-new-Dreamweaver-beta--Subversion-show-related-files-show-code-sources</link>
				<description>
				
				A number of folks have already posted about the availability of the new beta version of Dreamweaver (and Fireworks and Soundbooth) on their blogs, but none of the ones I read talked about any of the new features.  Even though I use &lt;a href=&quot;http://www.cfeclipse.org&quot; target=&quot;_blank&quot;&gt;CFEclipse&lt;/a&gt; as my main IDE, some of the features in this new version of Dreamweaver sound promising.

I&apos;ll quick paraphrase some of the ones I personally found appealing:

&lt;ul&gt;
&lt;li&gt;Integrated Subversion support.&lt;/li&gt;
&lt;li&gt;&quot;Live View&quot;: you can view your page in a WebKit-powered browser window and make changes to it on the fly.&lt;/li&gt;
&lt;li&gt;&quot;Related View&quot;: these days you usually have several pages working in conjunction that produce the final page view.  All of those related files are now listed above the top of your document.&lt;/li&gt;
&lt;li&gt;&quot;Code Navigator&quot;: shows you all of the code sources that affect the code you&apos;re currently working on.  What isn&apos;t clear is whether that will work with ColdFusion code.&lt;/li&gt;
&lt;/ul&gt; 
				</description>
				
				<category>Web development</category>
				
				<pubDate>Tue, 27 May 2008 07:40:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/5/27/The-new-Dreamweaver-beta--Subversion-show-related-files-show-code-sources</guid>
				
			</item>
			
			<item>
				<title>Using a Transfer decorator to get related records within the same table</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/5/26/Using-a-Transfer-decorator-to-get-related-records-within-the-same-table</link>
				<description>
				
				One of the benefits of using the &lt;a href=&quot;http://www.transfer-orm.com/&quot; target=&quot;_blank&quot;&gt;Transfer ORM&lt;/a&gt; in your application is that if you define the relationships between your tables in the Transfer XML configuration file, you can retrieve any objects related to your current object through a variety of functions.

However, sometimes you need to relate records within the same table.  For example, in my current project, I have a table of item records which need to be arranged in a hierarchy of unknown depth:  one set of items could have two levels of hierarchy, another three levels.  Each item, therefore, can have one parent item above it (identified by a parentId field in the record) in the hierarchy and any number of children below it (and all the child records have the current item&apos;s ID as their parentId value).

How can you use Transfer to access these in-table relationships?  One way is by using a decorator object.  As the &lt;a href=&quot;http://docs.transfer-orm.com/wiki/Writing_Decorators.cfm&quot; target=&quot;_blank&quot;&gt;Transfer documentation&lt;/a&gt; explains, a decorator is a CFC file you write yourself that extends the  TransferDecorator CFC that comes with Transfer.  You associate your decorator with the Transfer object that represents the table in your Transfer configuration file so that when a Transfer object for a record in that table is generated, the functions you define in your decorator become part of that object.

So say I define a Transfer object called &quot;Item&quot; in the package &quot;example&quot;.  Here is the XML in the Transfer configuration file:

&lt;code&gt;
&lt;package name=&quot;example&quot;&gt;
  &lt;object name=&quot;Item&quot; table=&quot;itemsTable&quot; sequence=&quot;itemId_seq&quot; decorator=&quot;com.itemDecorator&quot;&gt;
  &lt;id name=&quot;itemId&quot; type=&quot;numeric&quot; /&gt;
  &lt;property name=&quot;setId&quot; type=&quot;numeric&quot; column=&quot;setId&quot; /&gt;
  &lt;property name=&quot;itemTitle&quot; type=&quot;string&quot; column=&quot;itemTitle&quot; /&gt;
  &lt;property name=&quot;itemText&quot; type=&quot;string&quot; column=&quot;itemText&quot; /&gt;
  &lt;property name=&quot;itemOrder&quot; type=&quot;numeric&quot; column=&quot;itemOrder&quot; /&gt;
  &lt;property name=&quot;parentId&quot; type=&quot;numeric&quot; column=&quot;parentId&quot; /&gt; 
  &lt;/object&gt;
  &lt;!-- Etc. --&gt;
&lt;/package&gt;

&lt;/code&gt;

The decorator to be called is the itemDecorator.cfc in the &quot;com&quot; directory.  I want to have two new functions in the decorator, one that returns a Transfer object for the parent record, and one that returns an array of Transfer objects representing each child record.  Here&apos;s the code:

&lt;code&gt;

&lt;cfcomponent displayname=&quot;itemsDecorator&quot; extends=&quot;transfer.com.TransferDecorator&quot; output=&quot;false&quot;&gt;
  
&lt;cffunction name=&quot;getMyParentItem&quot; access=&quot;public&quot; output=&quot;false&quot; returntype=&quot;any&quot;&gt;
  
&lt;cfreturn getTransfer().get(&quot;example.Item&quot;,getTransferObject().getParentId()) /&gt;

&lt;/cffunction&gt;

  &lt;cffunction name=&quot;getMyChildItems&quot; access=&quot;public&quot; output=&quot;false&quot; returntype=&quot;array&quot;&gt;
    
  &lt;cfset var local= StructNew() /&gt;
    
    &lt;!---Create an array to hold the child objects---&gt;

    &lt;cfset local.childrenArray= ArrayNew(1) /&gt;

    &lt;!---Create query results of all items for whom the current item is the parent, ordered by itemOrder (defaults to asc)---&gt;

    &lt;cfset local.childrenQry= getTransfer().listByProperty(&quot;example.Item&quot;,&quot;parentId&quot;,getTransferObject().getItemId(),&quot;itemOrder&quot;)&gt;

    &lt;cfoutput query=&quot;local.childrenQry&quot;&gt;

    &lt;!---Create a TransferObject for each record and insert it into the array---&gt;

    &lt;cfset ArrayAppend(local.childrenArray,getTransfer().get(&quot;example.Item&quot;,local.childrenQry.itemId))&gt;

    &lt;/cfoutput&gt;
     
  &lt;cfreturn local.childrenArray /&gt;

  &lt;/cffunction&gt;

&lt;/cfcomponent&gt;


&lt;/code&gt;

In a decorator CFC that extends the TransferDecorator CFC, you can access the current item&apos;s Transfer object all of its functions via the &lt;strong&gt;getTransferObject()&lt;/strong&gt; function, and you can access the main Transfer object via the &lt;strong&gt;getTransfer()&lt;/strong&gt; function.  So the single statement in the &lt;strong&gt;getMyParentItem()&lt;/strong&gt; function in the decorator CFC is equivalent to:

&lt;code&gt;
&lt;cfset parentItemObject= transfer.get(&quot;example.Item&quot;,currentItemObject.getParentId())&gt; 
&lt;/code&gt; 

The &lt;strong&gt;getMyChildItems()&lt;/strong&gt; function is slightly more complicated because it needs to retrieve a recordset of child objects first, using the &lt;strong&gt;listByProperty()&lt;/strong&gt; function of the main Transfer object (again, provided via the getTransfer() function within the decorator), then loop through those records, creating a Transfer object for each child record and appending it the array returned by the function.

What if the item record in question is either at the top of the item hierarchy or at the bottom?  If there is no parent item, the Transfer object returned by the &lt;strong&gt;getMyParentItem()&lt;/strong&gt; function will have an itemId of 0 (the default value for an empty numeric primary key) and empty values for all of the other properties, so you can test for that condition.  If there are no child items, the array returned by the &lt;strong&gt;getMyChildItems()&lt;/strong&gt; function will simply be empty.

This is only the second Transfer decorator I&apos;ve ever written, so there may be a better way of going about it, but it gets the job done with just two short functions added on to existing object functions provided by Transfer.  I like it when things are this easy. 
				</description>
				
				<category>Transfer ORM</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Mon, 26 May 2008 21:09:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/5/26/Using-a-Transfer-decorator-to-get-related-records-within-the-same-table</guid>
				
			</item>
			
			<item>
				<title>Creating a hyperlink that works with or without AJAX</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/5/23/Creating-a-hyperlink-that-works-with-or-without-AJAX</link>
				<description>
				
				The current project I&apos;m working on includes a display page where users can see a list of messages generated for them by the system.  Each message consists of an &amp;lt;li&amp;gt; element containing the text of the message followed by a hyperlink labeled &quot;Delete&quot;.

I wanted to make it such that you could delete each message without refreshing the page, but still accommodate users who had JavaScript turned off, and without a lot of extra work.

How did I do it?  Like so:

&lt;code&gt;
&lt;!---Include the jQuery core file---&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;/views/JavaScript/jquery-1.2.2.js&quot;&gt;&lt;/script&gt;

&lt;script language=&quot;javascript&quot;&gt;
//Set the typical jQuery ready event handler to fire when the document is ready for manipulation

$(document).ready(function () {

//Assign a click event handler for all of the &apos;delete&apos; hyperlinks (which all have a CSS class of &apos;deleteLink&apos;)

$(&quot;.deleteLink&quot;).click(function () {

  var linkObj= $(this);
  //Take the existing URL in the &apos;href&apos; value and append an additional URL variable

  var ajaxURL= linkObj.attr(&quot;href&quot;) + &quot;&amp;js=1&quot;;

  //Remove the li list element (the parent) the link belongs to

  linkObj.parent().remove();
  
  //Make the Ajax call

  $.ajax({
   type: &quot;POST&quot;,
   url: ajaxURL
  }); //end of .ajax function


  //This statement will prevent the browser from actually navigating to the address in the link

  return false;

}); //end of .deleteLink click function

});  //end of document.ready function

&lt;/script&gt;


&lt;h2&gt;Your Messages&lt;/h2&gt;

&lt;ul&gt;
  
  &lt;cfoutput query=&quot;qryMessages&quot;&gt;
  
    &lt;li id=&quot;#messageId#&quot;&gt;
      
      #message#&lt;br /&gt;
      &lt;a class=&quot;deleteLink&quot; href=&quot;index.cfm?fuseaction=#xfa.deleteMsg#&amp;msgId=#messageId#&quot;&gt;Delete&lt;/a&gt;
    
    &lt;/li&gt;
  
  &lt;/cfoutput&gt;

&lt;/ul&gt;


&lt;/code&gt;

...The only other thing you need to do is put a conditional statement in the page/event that is called by the hyperlink that looks for the presence of the additional URL variable (&quot;js&quot; in this case).  

If JavaScript is turned off, that additional variable will not be defined and the page/event will redirect the action back to the calling page once it&apos;s done deleting the message data from the database.  

If JavaScript is turned on, the page/event will simply delete the message data (no action redirect), and the user simply sees that message item disappear from the list. 
				</description>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Fri, 23 May 2008 09:00:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/5/23/Creating-a-hyperlink-that-works-with-or-without-AJAX</guid>
				
			</item>
			
			<item>
				<title>A ColdFusion IDE feature request:  tools for creating Java classes</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/5/21/A-ColdFusion-IDE-feature-request--tools-for-creating-Java-classes</link>
				<description>
				
				One of the &quot;themes&quot; that I took away from cf.Objective() was the shortcomings of ColdFusion when it comes to generating a collection of objects.  Most everyone agrees on the fact that there is a performance penalty when a CFC is translated into a Java class (or, usually, a series of Java classes) because ColdFusion is a dynamically typed language and Java is not, and reconciling that difference takes processing power.

But not everyone agrees on what the solution to this issue should be.  Some folks believe that Adobe should try to improve object generation performance even more, building on the improvements that came with ColdFusion 8.  Others feel certain that ColdFusion will always pale in comparison to Java when it comes to object generation and that any enterprise-level ColdFusion application should use pure Java classes on the back end.  A few folks at cf.Objective() even advocated integrating ActionScript 3 (the strongly-typed programming language behind Flex) into ColdFusion for use in building objects.

Personally, I would love to see a big improvement in object performance in the next version of ColdFusion 9, but I strongly suspect that equivalent objects written in pure Java classes will still be significantly better in terms of performance despite Adobe&apos;s best efforts.  

If we accept that as the most likely outcome, then the issue becomes how to get ColdFusion developers without any Java background (like myself) to code objects in Java?

I think one way of accomplishing that is for Adobe to create a ColdFusion IDE that provides ColdFusion developers with an easy means to create Java classes and use those Java classes for the model in their applications.  It could provide a wizard similar to the CFC wizard tool in CFEclipse that either generates the .java file based on a database table or lets the developer manually define properties and methods for the class.  It could also provide a means of generating the Java class files based on an XML configuration file so existing code generators could be modified to work with this IDE feature.

Of course, creating the .java files is only the first step.  The IDE should also be able to introspect any .java file and display all of the information a developer would need to interact with that resulting class (properties, methods, data types, etc.)  If the developer needs to make changes to the class, they could either edit the .java file directly in a normal IDE editor window (with syntax checking), or via an editing dialog box that lets the developer make changes to the configuration of a method and the statements within the method without having to worry about aspects of the Java syntax involved in describing the method. The IDE would also take care of compiling the .java file to a class every time it is updated and reporting back any compilation errors.

Like I said, I have no Java programming background, so maybe this idea is more than a bit of a stretch.  There are also probably other issues that would need to be addressed (like how to manage the dependencies between the Java classes), but I&apos;m betting cleverer folks than I could figure out a way to make it work.  Even if the tools for creating Java classes were limited in what they could do, allowing ColdFusion developers to generate their own .java files and Java classes using familiar terms and concepts and then see the results could shorten the Java learning process.  

ColdFusion has a long tradition of making it easy for developers to perform certain tasks and operations.  When we talk about that tradition, we tend to narrow our focus on the capabilities of the CFML language.  We tend to forget that the ColdFusion server software makes our lives easy as well, letting us configure datasources, security features, and gateway processes without having to deal with those issues in our programming code.  It&apos;s the entire ColdFusion package, as a whole, that makes developing in ColdFusion easier than developing in other languages.  

If Adobe develops a ColdFusion IDE, that IDE should also be designed--optimized, in fact--to make developing in ColdFusion easy, regardless of the developer&apos;s skill level.  So I say if our OO ColdFusion developers need to be able to create their objects in Java, that IDE should help them do that. 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 21 May 2008 22:00:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/5/21/A-ColdFusion-IDE-feature-request--tools-for-creating-Java-classes</guid>
				
			</item>
			
			<item>
				<title>ColdFusion Weekly Podcast 3.08: Andy Powell on Enterprise MVC with CF and Java</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/5/17/ColdFusion-Weekly-Podcast-308-Andy-Powell-on-Enterprise-MVC-with-CF-and-Java</link>
				<description>
				
				The latest version of the ColdFusion Weekly podcast was released yesterday.  In this episode, Matt and Peter talk with Andy Powell about using native Java objects as the basis for your model when building your ColdFusion applications using the model-view-controller (MVC) architectural pattern.  Andy gave a presentation on this topic at cf.Objective().

As always, you can get it by either subscribing to the podcast via ITunes or by downloading it from the &lt;a href=&quot;http://www.coldfusionweekly.com/&quot; target=&quot;_blank&quot;&gt;ColdFusion Weekly&lt;/a&gt; web site. 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Sat, 17 May 2008 08:45:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/5/17/ColdFusion-Weekly-Podcast-308-Andy-Powell-on-Enterprise-MVC-with-CF-and-Java</guid>
				
			</item>
			
			<item>
				<title>A tip regarding many-to-many relationships in Transfer</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/5/16/A-tip-regarding-manytomany-relationships-in-Transfer</link>
				<description>
				
				Thought I should share this so no one else ends up learning it the hard way like I did yesterday.

In &lt;a href=&quot;http://www.transfer-orm.com/&quot; target=&quot;_blank&quot;&gt;Transfer&lt;/a&gt;, you use &lt;a href=&quot;http://docs.transfer-orm.com/wiki/Transfer_Configuration_File.cfm&quot; target=&quot;_blank&quot;&gt;an XML configuration file&lt;/a&gt; to describe your database tables and the relationships between them.  You can define three types of relationships:  one-to-many, many-to-one, and many-to-many.  

The many-to-many relationship is used when one table is related to another table through the use of a linking table. In the introductory Transfer example files I looked at today, the many-to-many example is an application with an Events table, a Categories table, and an Events-Categories table containing a foreign key field referring back to the Events table primary key field, and a foreign key field referring back to the Categories table primary key field.

Now, when you define a one-to-many or many-to-one relationship between two tables, you describe both tables in the Transfer configuration files:  they each have their own &amp;lt;object&amp;gt; XML block so Transfer objects can be created based on them.  What I did not realize until today, when I looked more closely at those example Transfer files, is that you DO NOT create an &amp;lt;object&amp;gt; XML block for the linking table.  The many-to-many relationship that you describe within one of other two tables&apos; &amp;lt;object&amp;gt; block tells Transfer all it needs to know to relate the two tables.

Now, if I had read the &lt;a href=&quot;http://docs.transfer-orm.com/&quot; target=&quot;_blank&quot;&gt;Transfer documentation&lt;/a&gt; more carefully, or if I had tested my Transfer configuration file either against the included schema file or with testing code as I  made changes to it, I probably would have figured this out a lot faster.  But because I didn&apos;t do either of those things, I was baffled by the inscrutable and inconsistent error messages returned by my application when I started working on the CRUD operations involving those tables.

So in addition to the tip itself, my other piece of advice is to take your time and carefully read (and think about) the documentation when you start working with a new framework like Transfer:  it may be easy to get started with, but you might miss a subtle detail or two that can get you in trouble. 
				</description>
				
				<category>Transfer ORM</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Fri, 16 May 2008 07:45:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/5/16/A-tip-regarding-manytomany-relationships-in-Transfer</guid>
				
			</item>
			
			<item>
				<title>Table normalization verses long-term data storage</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/5/14/Table-normalization-and-longterm-data-storage</link>
				<description>
				
				I&apos;m currently working on an application that involves long-term storage of assessment data.  Users submit records of their activities and assess their performance, and then reviewers look over those assessments and denote whether they agree or disagree with them.  Each assessment database record is related to a reviewer through the unique reviewer id that is part of the assessment record, and I can use that relationship to retrieve the reviewer&apos;s name whenever I display the assessment record.

It&apos;s a standard example of table normalization.  If the reviewer&apos;s name was stored within the assessment record itself, and the reviewer changed their name for some reason (marriage, divorce, mid-life crisis, etc.), the application would have to update the name in both the reviewer&apos;s record AND the assessment record.  But by using the reviewer&apos;s id in the assessment record to establish a relationship between the assessment record and the reviewer record, the reviewer&apos;s name only needs to be recorded or updated once. 

However, this project will entail keeping the assessment data for an undetermined number of years.  With the data arrangement I just described, that means I would have to store the assessment records and all of the related reviewer records if I want to be able to keep showing the name of the reviewer when looking at older assessment records.  That could result in keeping a lot of extra data about reviewers (addresses, e-mail addresses, logins, passwords, etc.) who are no longer associated with the program simply because we need to keep their name tied to the assessments.

I think this is one of those situations where it makes sense to repeat a little data.  Recording the reviewer&apos;s name in the assessment records allows me to let the administrative users of the application delete reviewer user accounts without impacting historical data.  It means a bit more work in keeping the reviewer&apos;s name the same in both records, but in the long run I think it&apos;s worth the effort. 
				</description>
				
				<category>Web development</category>
				
				<category>Oracle</category>
				
				<category>Miscellaneous</category>
				
				<pubDate>Wed, 14 May 2008 14:00:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/5/14/Table-normalization-and-longterm-data-storage</guid>
				
			</item>
			
			<item>
				<title>Some updates on reordering items with jQuery</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/5/8/Some-updates-on-reordering-items-in-jQuery</link>
				<description>
				
				If you follow my blog at all, you know I have a keen interest in being able to reorder items in a list and then record that change in order in a database using JavaScript, specifically with the jQuery UI Sortables component.  Here&apos;s some things I&apos;ve learned recently regarding the topic:

&lt;strong&gt;Reordering Nested Lists&lt;/strong&gt;

In my last project, I created a tool that allowed my clients to rearrange nested lists of articles and article categories using the jQuery UI Sortables component and the techniques I demonstrated in an earlier blog post.

My clients were very excited about the tool when they saw it in the prototype, but they ran into some difficulty when they tried to use it themselves during the final testing.  They found it hard to place an item at either end of a list block because there were no visual cues outlining the borders of the list.  

It was also nearly impossible for them to move an item around in the top-most list:  if they tried to place it in between sibling items or at the end of the list, the item would almost always get dropped at the end of whatever sublist came at the end of the sibling item above.  

Finally, the scrollable &amp;lt;div&amp;gt; element containing the nested lists would not scroll to match the drag movement of the cursor, so if they needed to move an item from one end of the nested lists to the other, the item would have to moved in steps.

I solved all of these problems by abandoning the drag-and-drop technique and replacing it with a version of my &quot;click-to-click move&quot; technique.  So now when they need to move an item, they click on an icon associated with each item (hidden until needed), and target &amp;lt;div&amp;gt;s are created above and below each item:

&lt;img src=&quot;http://www.swartzfager.org/blog/images/itnScreenShot.gif&quot; alt=&quot;Image of move targets in my last project&quot; style=&quot;padding:3px;border:1px solid gray;&quot; /&gt;

They then just click on the target for the place they want the item moved to, and the item is &quot;moved&quot; and the targets are removed (technically, the item is cloned, the clone is put in the new position, and the original item is deleted).

They like the &quot;click-to-click move&quot; version a lot better, so perhaps that&apos;s a better means of reordering items when using nested lists.  But I recently discovered &lt;a href=&quot;http://www.gimiti.com/kltan/wordpress/?p=29&quot; target=&quot;_blank&quot;&gt;jTree&lt;/a&gt;, a brand-new jQuery plugin someone wrote specifically for sorting nested lists using drag-and-drop.  I tried out the demo for it, and it has visual cues to help you position items in the right list, but it does flicker a bit at times.  Still, I might play with it the next time I have to deal with nested lists again.

&lt;strong&gt;Reordering Table Rows&lt;/strong&gt;

Lists are nice, but they don&apos;t cut it when each item is really a collection of separate items:  that&apos;s when you need a table.  In my current project, I needed a way to reorder the rows in my table as a means of letting the user reorder the data records.  The jQuery UI Sortables component, however, does not work on table rows.  

I tried to create a pseudo-table by using &amp;lt;div&amp;gt;s within each &amp;lt;li&amp;gt; item to evenly space the data fields in each row.  I got it working and looking slightly less than ugly in FireFox, but it didn&apos;t fare so well in IE.

I then went browsing through the &lt;a href=&quot;http://groups.google.com/group/jquery-ui?lnk=gschg&quot; target=&quot;_blank&quot;&gt;jQuery UI discussion board on Google Groups &lt;/a&gt; and found a post that mentioned a plugin for sorting/rearranging table rows.

It&apos;s called &lt;a href=&quot;http://www.isocra.com/2008/02/table-drag-and-drop-jquery-plugin/&quot; target=&quot;_blank&quot;&gt;TableDnD&lt;/a&gt;, and it&apos;s a slightly different approach to the challenge.  When you click on a row and drag it, there is no drag outline and no gradual movement:  if you move up far enough, the content of the row you&apos;re dragging and the row above it quickly switch places, and vice-versa if you move downward.  It highlights the moving row as you move it so you can keep track of what&apos;s happening.  The movement is very smooth and you can go as fast as you like.

The only drawbacks I&apos;m aware of so far is that the dragging action will not trigger the scroll bar if you&apos;re trying to drag the row beyond the visual limit of the window or scrollable container (much like my original nested list tool), and someone pointed out to me that if you fill all of the cells in a row with other DOM elements such that you cannot click on any of the cells themselves, you won&apos;t be able to grab the row and move it.  That&apos;s not a problem your table cells just contain text, but it&apos;s something to keep in mind if you plan on formatting the text with &amp;lt;span&amp;gt; tags or providing input boxes for the user to edtit the cell data. 
				</description>
				
				<category>RIAs</category>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<pubDate>Thu, 08 May 2008 21:39:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/5/8/Some-updates-on-reordering-items-in-jQuery</guid>
				
			</item>
			
			<item>
				<title>Flex adoption leads to thousands of new ColdFusion developers?</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/5/7/Flex-adoption-leads-to-thousands-of-new-ColdFusion-developers</link>
				<description>
				
				One of the sessions I attended at cf.Objective() was Maxim Porges&apos; presentation on developing in Flex without using a Flex framework.  I visited his blog this morning because I wanted to find his e-mail address and send him a question.

In doing so, I stumbled upon a post he wrote while at the conference about a conversation he had with several people following the Birds-of-a-Feather discussion between the Adobe folks and the community about the next version of ColdFusion 9.  

Apparently some very interesting things were revealed in that conversation, one of them being that many folks who are starting to learn Flex have also gained an interest in learning and using ColdFusion.  How many?  The number cited was 75,000.  

I&apos;m not sure how Adobe determined that correlation between the uptake in Flex and the uptake in ColdFusion, but even if the real number is half that amount, that&apos;s still pretty impressive in my book.

Other items were discussion, including a mention of Adobe&apos;s current view regarding open source and ColdFusion.  I encourage folks to go read the blog entry for themselves:

&lt;a href=&quot;http://maximporges.blogspot.com/2008/05/future-of-cf-part-ii.html&quot; target=&quot;_blank&quot;&gt;http://maximporges.blogspot.com/2008/05/future-of-cf-part-ii.html&lt;/a&gt; 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 07 May 2008 07:53:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/5/7/Flex-adoption-leads-to-thousands-of-new-ColdFusion-developers</guid>
				
			</item>
			
			<item>
				<title>Reflections on cf.Objective()</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/5/6/Reflections-on-cfObjective</link>
				<description>
				
				Like I said in my comment on his &lt;a href=&quot;http://www.bennadel.com/blog/1216-cf-Objective-2008-Walking-Among-Giants.htm&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt;, I don&apos;t think I can top &lt;a href=&quot;http://www.bennadel.com&quot; target=&quot;_blank&quot;&gt;Ben Nadel&apos;s&lt;/a&gt; description of the experience of being at cf.Objective().

Still, there are a few things I want to say for myself.  First of all, a big thank-you to everyone involved in the planning and execution of the conference.  You all did a remarkable job.  Same goes for the speakers.  I think everyone learned a lot at the conference.

But what really made this conference special to me were the conversations I had outside of the presentations.  I&apos;ve been to CFUnited and even to MAX before, and while I learned a great deal at both, I tended to feel a bit lost, being a solo developer amongst a large crowd of folks who knew each other already or came with colleagues.  cf.Objective() was different:  it never took more than a minute or two to get involved in a conversation with folks from the blogosphere or even developers I knew nothing about.  I always felt like I was part of what was going on.  It was truly the most enjoyable conference I&apos;ve ever attended.

Like I alluded to in my earlier post, I&apos;d been feeling down and negative about, well, a number of things in the weeks leading up to the conference.  I feel now like I&apos;m back on track, ready to take what I got from this experience and run with it.  So stay tuned.

P.S.  A big thanks to Adobe for bring MXNA back to life, better than ever! 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Tue, 06 May 2008 20:13:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/5/6/Reflections-on-cfObjective</guid>
				
			</item>
			
			<item>
				<title>Off To cf.Objective()</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/5/1/Off-To-cfObjective</link>
				<description>
				
				...And not a moment too soon!  I&apos;ve been in a bit of a rut lately, so I&apos;m hoping the conference and my fellow conference-goers will help re-energize my enthusiasm a bit.

I doubt I&apos;ll be blogging much from the conference:  I tend to write slowly and with the &lt;a href=&quot;http://www.mikechambers.com/blog/2008/04/29/update-on-mxna-or-what-the-is-going-on/&quot; target=&quot;_blank&quot;&gt;MXNA blog aggregator still down for the most part&lt;/a&gt;, I&apos;m not sure that anyone would &quot;hear&quot; me anyway.  So if you want to keep track of what&apos;s going on at the conference, tune in to the bloggers covered by one of the other aggregators like &lt;a href=&quot;http://www.fullasagoog.com/&quot; target=&quot;_blank&quot;&gt;FullAsAGoog&lt;/a&gt;, &lt;a href=&quot;http://www.feed-squirrel.com/&quot; target=&quot;_blank&quot;&gt;Feed-Squirrel&lt;/a&gt;, or &lt;a href=&quot;http://www.coldfusionbloggers.org&quot; target=&quot;_blank&quot;&gt;ColdFusionBloggers&lt;/a&gt; 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Thu, 01 May 2008 08:03:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/5/1/Off-To-cfObjective</guid>
				
			</item>
			
			<item>
				<title>Finish the sentence:  &quot;I know I&apos;m in a coding zone/groove when...&quot;</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/4/23/Finish-the-sentence--I-know-Im-in-a-coding-zonegroove-when</link>
				<description>
				
				&quot;...I correctly write a recursive algorithm involving nested arrays on the first try.&quot;

What about you?  When do you know you&apos;re in a coding groove such that it feels like you&apos;re coding by feel/intuition? 
				</description>
				
				<category>ColdFusion</category>
				
				<category>Miscellaneous</category>
				
				<category>Web development</category>
				
				<pubDate>Wed, 23 Apr 2008 15:09:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/4/23/Finish-the-sentence--I-know-Im-in-a-coding-zonegroove-when</guid>
				
			</item>
			
			<item>
				<title>ColdFusion Weekly Podcast 3.07:  Flex Frameworks</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/4/18/ColdFusion-Weekly-Podcast-307--Flex-Frameworks</link>
				<description>
				
				Matt and Peter discuss the various Flex application frameworks out there with several guests.

As always, you can get it by either subscribing to the podcast via ITunes or by downloading it from the &lt;a href=&quot;http://www.coldfusionweekly.com&quot; target=&quot;_blank&quot;&gt;ColdFusion Weekly&lt;/a&gt; web site. 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Fri, 18 Apr 2008 15:47:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/4/18/ColdFusion-Weekly-Podcast-307--Flex-Frameworks</guid>
				
			</item>
			
			<item>
				<title>Check Out CF4em, A New CFML-Powered Forum/Message Board</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/4/8/Check-Out-CF4em-A-New-CFMLPowered-ForumMessage-Board</link>
				<description>
				
				Bobby Hartsfield posted a link to a test version of his ColdFusion-based message board system, CF4em, on the &lt;a href=&quot;http://www.houseoffusion.com/groups/cf-talk/thread.cfm/threadid:55931&quot; target=&quot;_blank&quot;&gt;CF-Talk list&lt;/a&gt; yesterday.

I just checked it out this morning.  It&apos;s very similar to the high-end PHP-powered message boards and looks very promising.  I encourage folks to go register on the site, try it out, and provide Bobby with feedback.  Here&apos;s the URL:

&lt;a href=&quot;http://www.cf4em.com/&quot; target=&quot;_blank&quot;&gt;http://www.cf4em.com/&lt;/a&gt; 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Tue, 08 Apr 2008 07:59:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/4/8/Check-Out-CF4em-A-New-CFMLPowered-ForumMessage-Board</guid>
				
			</item>
			
			<item>
				<title>ColdFusion Weekly Podcast 3.06: Interview with Vince Bonfanti</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/31/ColdFusion-Weekly-Podcast-306-Interview-with-Vince-Bonfanti</link>
				<description>
				
				Matt and Peter were able to talk to Vince Bonfanti about the recent decision to open source BlueDragon (a topic we discussed on the podcast two weeks ago).

As always, you can get it by either subscribing to the podcast via ITunes or by downloading it from the &lt;a href=&quot;http://www.coldfusionweekly.com&quot; target=&quot;_blank&quot;&gt;ColdFusion Weekly&lt;/a&gt; web site. 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Mon, 31 Mar 2008 10:53:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/31/ColdFusion-Weekly-Podcast-306-Interview-with-Vince-Bonfanti</guid>
				
			</item>
			
			<item>
				<title>Online, Flex-Powered Express Version of Photoshop Available!</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/27/Online-FlexPowered-Express-Version-of-Photoshop-Available</link>
				<description>
				
				Saw the news about this on some of the blog feeds this morning:

&lt;a href=&quot;https://www.photoshop.com/express/landing.html&quot; target=&quot;_blank&quot;&gt;https://www.photoshop.com/express/landing.html&lt;/a&gt;

I only had time to take the test drive (no sign-up required) and briefly mess with one of the stock image, but still...Wow. 
				</description>
				
				<category>Flex</category>
				
				<category>RIAs</category>
				
				<pubDate>Thu, 27 Mar 2008 08:04:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/27/Online-FlexPowered-Express-Version-of-Photoshop-Available</guid>
				
			</item>
			
			<item>
				<title>ColdFusion Developers and Social Technologies</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/25/ColdFusion-Developers-and-Social-Technologies</link>
				<description>
				
				My manager is attending the BEA Participate conference in May (we run their portal product), and yesterday he and I sat down with a developer who was creating the portal for the conference itself.  The conference portal was designed to promote social networking:  attendees will be able to track the status of other attendees, see what their interests are, leave comments for them on their comment wall, and communicate with them via a Twitter channel.  

Everyone attending the conference is getting an iPod Touch and there will be a mobile version of the portal so folks can simply use the iPod to keep abreast of what&apos;s going on.

My initial reaction was that it was a really cool idea...which is strange because I&apos;m not really into social networking.  I have a &lt;a href=&quot;http://www.twitter.com&quot; target=&quot;_blank&quot;&gt;Twitter&lt;/a&gt; account and a &lt;a href=&quot;http://www.pownce.com&quot; target=&quot;_blank&quot;&gt;Pownce&lt;/a&gt; account, but I never use them:  who wants to hear what I&apos;m currently doing, and when do I have the time to stop and tell them?

But I could see myself using these social technologies at a specific event like a conference, where part of the fun IS being social and participating in the discussion.  The trick is that you have to have enough attendees to embrace the idea in order for it to be worthwhile.  My manager isn&apos;t into social networking either, so I wonder if folks at his conference are really going to use these social networking features.

I can&apos;t help but wonder what would happen if we had a similar social networking portal at a big ColdFusion conference like &lt;a href=&quot;http://www.cfobjective.com&quot; target=&quot;_blank&quot;&gt;cf.Objective()&lt;/a&gt; or &lt;a href=&quot;http://www.cfunited.com&quot; target=&quot;_blank&quot;&gt;CFUnited&lt;/a&gt;.  Assuming the typical saturation of the wireless bandwidth wasn&apos;t a problem, would most CF developers interact with each other using these tools? 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Tue, 25 Mar 2008 07:32:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/25/ColdFusion-Developers-and-Social-Technologies</guid>
				
			</item>
			
			<item>
				<title>ColdFusion Weekly Podcast 3.05: Charlie Arehart cf.Objective() Sneak Peak</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/23/ColdFusion-Weekly-Podcast-305-Charlie-Arehart-cfObjective-Sneak-Peak</link>
				<description>
				
				In this episode of the podcast, Matt and Peter talk to Charlie Arehart about the sessions he&apos;ll be presenting at the &lt;a href=&quot;http://www.cfobjective.com&quot; target=&quot;_blank&quot;&gt;cf.Objective()&lt;/a&gt; conference, one on step debugging and the other on the server monitor in ColdFusion 8.

As always, you can get it by either subscribing to the podcast via ITunes or by downloading it from the &lt;a href=&quot;http://www.coldfusionweekly.com&quot; target=&quot;_blank&quot;&gt;ColdFusion Weekly&lt;/a&gt; web site. 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Sun, 23 Mar 2008 18:30:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/23/ColdFusion-Weekly-Podcast-305-Charlie-Arehart-cfObjective-Sneak-Peak</guid>
				
			</item>
			
			<item>
				<title>Problem: No Drag-and-Drop On The iPhone/iPod Touch.  Solution:  Click-To-Click Move</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/20/Problem-No-DragandDrop-On-The-iPhoneiPod-Touch--Solution--ClickToClick-Move</link>
				<description>
				
				As I mentioned in an earlier blog post, the drag-and-drop functions provided by various JavaScript libraries (jQuery, YUI, etc.) won&apos;t work in the iPhone/iPod Touch Safari web browser because the dragging gesture is used for scrolling around the web page.

That&apos;s a big problem for those of us who use drag-and-drop in our web applications to allow our users to reorder the items in a list, but I&apos;ve come up with an alternative method for rearranging items using the &lt;a href=&quot;http://www.jquery.com&quot; target=&quot;_blank&quot;&gt;jQuery JavaScript library&lt;/a&gt; that works on the iPhone/iPod browser as well as regular browsers.  I call it the &quot;Click-to-Click Move&quot; method (CTCM).  [More]
				</description>
				
				<category>Web development</category>
				
				<category>RIAs</category>
				
				<category>jQuery</category>
				
				<pubDate>Thu, 20 Mar 2008 07:19:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/20/Problem-No-DragandDrop-On-The-iPhoneiPod-Touch--Solution--ClickToClick-Move</guid>
				
			</item>
			
			<item>
				<title>ColdFusion Weekly Podcast 3.04:  BlueDragon Goes Open Source</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/16/ColdFusion-Weekly-Podcast-304--BlueDragon-Goes-Open-Source</link>
				<description>
				
				The latest ColdFusion Weekly podcast has been released.  The topic:  New Atlanta&apos;s announcement that they will offer an open-source version of BlueDragon, their CFML (ColdFusion Markup Language) processing server.

Just like last time, you can get it by either subscribing to the podcast via ITunes or by downloading it from the &lt;a href=&quot;http://www.coldfusionweekly.com&quot; target=&quot;_blank&quot;&gt;ColdFusion Weekly&lt;/a&gt; web site. 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Sun, 16 Mar 2008 22:18:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/16/ColdFusion-Weekly-Podcast-304--BlueDragon-Goes-Open-Source</guid>
				
			</item>
			
			<item>
				<title>XML Is A Fickle Beast</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/12/XML-Is-A-Fickle-Beast</link>
				<description>
				
				I was curious as to why my two most recent blog posts had not shown up on the &lt;a href=&quot;http://weblogs.macromedia.com/mxna/&quot; target=&quot;_blank&quot;&gt;MXNA feed&lt;/a&gt;, so I just took a look at the RSS XML for my blog using FireFox.

Unfortunately, these days Firefox never exposes the raw XML:  it formats it into a more &quot;user-friendly&quot; view.  So I didn&apos;t see any error, but the essentially blank page was enough of a confirmation that there was a problem.

I wasn&apos;t sure if IE does the same thing with XML these days, so I fired up Opera.  I&apos;ve never used Opera to troubleshoot XML problems, and was presently surprised at how it output the XML as text and highlighted the first invalid character.

It turned out that I had two invalid characters in one of my posts, and it know why:  I copied and pasted some of the text from a Word document and never cleaned it up.  What I find really strange about it is that particular post was almost a month old, and I know I&apos;ve had other posts processed by MXMA since then, so why did it become a problem today?  Interesting.

But at least it&apos;s fixed. 
				</description>
				
				<category>Miscellaneous</category>
				
				<pubDate>Wed, 12 Mar 2008 19:55:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/12/XML-Is-A-Fickle-Beast</guid>
				
			</item>
			
			<item>
				<title>The Latest ColdFusion Weekly Podcast Is Out:  Get It!</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/12/The-Latest-ColdFusion-Weekly-Podcast-Is-Out--Get-It</link>
				<description>
				
				For those who don&apos;t know, ColdFusion Weekly is a podcast about ColdFusion and ColdFusion-related technologies hosted by Matt Woodward and Peter Farrell.  It&apos;s been on a bit of a hiatus because Matt and Peter have been really busy, but it&apos;s back.  

You can get it by either subscribing to the podcast via ITunes or by downloading it from the &lt;a href=&quot;http://www.coldfusionweekly.com&quot; target=&quot;_blank&quot;&gt;ColdFusion Weekly&lt;/a&gt; web site.

For those of you who&apos;ve listened to the podcast before, the format of the show has changed a bit in that there is now a group of ColdFusion developers joining Matt and Peter in discussing topics, so now you&apos;ll be hearing more voices of the ColdFusion community (including myself from time to time).

So download and (hopefully) enjoy! 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 12 Mar 2008 15:35:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/12/The-Latest-ColdFusion-Weekly-Podcast-Is-Out--Get-It</guid>
				
			</item>
			
			<item>
				<title>New YouTube API= Flex Apps To Manage YouTube Videos?</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/12/New-YouTube-API-Flex-Apps-To-Manage-YouTube-Videos</link>
				<description>
				
				YouTube announced the release of a new set of APIs today that (from what I&apos;ve read so far) allow you to use YouTube as a web service.  You can use API calls to log into YouTube, upload videos, list videos, edit the metadata about videos, and more.

Flex is obviously well-positioned to make use of these new APIs, given that the videos themselves are done in Flash.  I wonder what apps will come out of this new development? 

Here&apos;s the link to the main YouTube API page:

&lt;a href=&quot;http://code.google.com/apis/youtube/overview.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/apis/youtube/overview.html&lt;/a&gt; 
				</description>
				
				<category>Web development</category>
				
				<category>RIAs</category>
				
				<category>Flex</category>
				
				<pubDate>Wed, 12 Mar 2008 12:52:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/12/New-YouTube-API-Flex-Apps-To-Manage-YouTube-Videos</guid>
				
			</item>
			
			<item>
				<title>Google Maps Street View Now Includes St. Paul (And The cf.Objective Hotel)</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/10/Google-Maps-Street-View-Now-Includes-St-Paul-And-The-cfObjective-Hotel</link>
				<description>
				
				My colleague Chris, a Java developer, was making arrangements to attend this year&apos; &lt;a href=&quot;http://www.ja-sig.org/&quot; target=&quot;_blank&quot;&gt;JA-SIG&lt;/a&gt; conference.  As he was finishing up, he found a link to Google Maps that ended up taking him the Google Maps Street View of St. Paul.  He&apos;d never seen the &lt;a href=&quot;http://www.google.com/help/maps/tour/#street_view&quot; target=&quot;_blank&quot;&gt;Street View&lt;/a&gt; feature of Google Maps, so he showed it to me.

It was only when I saw the view of the hotel from the street view and saw the name of the hotel did I realize that JA-SIG is being held at the same hotel as &lt;a href=&quot;http://www.cfobjective.com&quot; target=&quot;_blank&quot;&gt;cf.Objective()&lt;/a&gt;, the Crowne Plaza.  Even funnier, JA-SIG ends on April 30, and cf.Objective() starts on May 1st.

Obviously the Crowne Plaza is the hip place to be if your technically-inclined.  They even have a virtual version of the hotel in &lt;a href=&quot;http://www.secondlife.crowneplaza.com/&quot; target=&quot;_blank&quot;&gt;Second Life.&lt;/a&gt;  I wonder if they&apos;ll let us hold a couple of virtual developer parties there? 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Mon, 10 Mar 2008 20:38:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/10/Google-Maps-Street-View-Now-Includes-St-Paul-And-The-cfObjective-Hotel</guid>
				
			</item>
			
			<item>
				<title>BlueDragon Goes Open-Source: A Good Thing, But How Good?</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/10/BlueDragon-Goes-OpenSource-A-Good-Thing-But-How-Good</link>
				<description>
				
				Given all the other blog posts I&apos;ve seen coming through my RSS feeds, this is hardly news at this point, but New Atlanta has decided to open-source their J2EE version of BlueDragon, a web application server package that runs/executes CFML (ColdFusion Markup Language, the language of ColdFusion):

&lt;a href=&quot;http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=EABF951D-453A-486E-9647E2825D1E6F39&quot; target=&quot;_blank&quot;&gt;New Atlanta announces free open source BlueDragon edition&lt;/a&gt;

I&apos;m certainly happy about this development (as are many ColdFusion developers) because that means that anyone who wants to develop with ColdFusion will now have access to a robust CFML application server without having to spend money for the server software:  money is no longer an excuse for avoiding ColdFusion.

But whether or not this announcement will have a significant impact on the prevalence of CFML as a development language in the marketplace remains to be seen.  If New Atlanta makes an effort to market BlueDragon to web hosting companies who currently don&apos;t offer any ColdFusion development packages, we might see an increase in ColdFusion adoption simply because it&apos;s available as an option for developers whose clients rely on 3rd-party web hosting.  They will also have to increase awareness of BlueDragon amongst the non-ColdFusion developer community and make it clear to those developers that BlueDragon is a serious, enterprise-class alternative to Adobe&apos;s ColdFusion server.

If New Atlanta does all that, perhaps we&apos;ll see that surge in ColdFusion adoption we thought would come when price was no longer an issue.  But what if that surge never comes?  What if price wasn&apos;t the big issue after all?

Then what? 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Mon, 10 Mar 2008 12:51:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/10/BlueDragon-Goes-OpenSource-A-Good-Thing-But-How-Good</guid>
				
			</item>
			
			<item>
				<title>Internet Explorer 8&apos;s Webslices Feature:  Widgetizing Pieces of Web Pages?</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/5/Internet-Explorer-8s-Webslices-Feature--Widgetizing-Pieces-of-Web-Pages</link>
				<description>
				
				The first &lt;a href=&quot;http://www.microsoft.com/windows/ie/ie8/welcome/en/default.html&quot; target=&quot;_blank&quot;&gt;public beta of Internet Explorer 8&lt;/a&gt; was released today.  In addition to supposedly being fully web standards-compliant, IE 8 comes with two new...well, capabilites:  Activities and Webslices.

Curious (and admittedly a bit bored with what I was currently doing), I did a Google search and came up with a page that does a pretty good job of explaining Activities and Webslices:

&lt;a href=&quot;http://blogs.msdn.com/astrauss/archive/2008/03/05/ie8-beta-is-out-and-with-it-some-slices-activities.aspx&quot; target=&quot;_blank&quot;&gt;IE8 Beta Is Out And With It Some Slices &amp;amp; Activities&lt;/a&gt;

The Activities capability allows web developers to provide XML code that will add contextual menu options to certain page content when you right-click on that content, allowing you to send that content to another web page or service, like sending an address on the page to a mapping service like Google Maps.

The Webslices capability is even more interesting (if I understand it correctly):  using CSS, web developers can tag a piece of the web page as being a slice.  End-users can then save this slice in IE, and IE will periodically check that slice for any changes.  If the content is changed, the end-user is notified and they can pull up just that part of that web page as a pop-up widget in the browser.

I don&apos;t quite know what to make of it...it&apos;s like they&apos;ve made it possible to send a request to a webservice from the  page (Activities) and to make part of the page a webservice (Webslices).

It&apos;s an interesting idea, but what will the other browsers do with this stuff? 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>Web development</category>
				
				<pubDate>Wed, 05 Mar 2008 15:41:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/5/Internet-Explorer-8s-Webslices-Feature--Widgetizing-Pieces-of-Web-Pages</guid>
				
			</item>
			
			<item>
				<title>If You Don&apos;t Follow RIA News, You Must Be a TWiT</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/4/If-You-Dont-Follow-RIA-News-You-Must-Be-a-TWiT</link>
				<description>
				
				I just finished listening to the &lt;a href=&quot;http://www.twit.tv/134&quot; target=&quot;_blank&quot;&gt;latest &quot;This Week in Tech&quot; (TWiT) podcast&lt;/a&gt; on my way home from work tonight.

I&apos;m a regular listener of TWiT.  Even though I&apos;m aware of most of their news items prior to hearing it from them, I like some of the personalities on the show and their discussions are generally interesting.  But I have one big problem with TWiT:  they never talk about RIA (Rich Internet Application) technology.  Oh, they might say the word &quot;Flash&quot; or &quot;Flex&quot; in regard to some specific product or service, and maybe say a sentence or two about AJAX, but that&apos;s as far as it ever goes.  Maybe they think their audience is mostly end-users who don&apos;t care, but that doesn&apos;t stop them from talking about stuff that only geeks would truly care about, so I don&apos;t think it&apos;s a valid excuse.

I thought this week might be different.  With all of the press coverage over the release of AIR this week, and with all the subsequent articles hyping the RIA struggle between Microsoft and Adobe, Silverlight vs. AIR (even though it&apos;s not an accurate comparision)...surely the TWiT panel couldn&apos;t ignore the topic this week.

Sure they could.

What got me even more frustrated was the way it WASN&apos;T mentioned.  Just over 4 minutes into what was an 87-minute podcast, host Leo Laporte notes they have a large roundtable group and &quot;absolutely nothing to talk about.&quot;  Not usually a good sign for the rest of the podcast.

After discussing about two news stories and a discussion about having another option for listening to podcasts besides via iTunes, the discussion turned to a comparison between the Twitter and Pownce messaging systems.  I got hopeful again: Pownce provides an AIR-powered desktop application, so maybe the discussion would cause the AIR release to come up.  One panelist mentioned that the Pownce API had been updated last week, and I thought &quot;Maybe they were waiting on the release of AIR to release that new API&quot; (I have no idea if the events were related).

So I shouted (I kid you not) at my iPod, while driving in my car, at the pre-recorded voice of someone who could not possibly hear me:  &quot;Say maybe it was because of AIR! Mention AIR! &lt;strong&gt;SAY ITS NAME!&lt;/strong&gt;&quot;

Yeah, well, that didn&apos;t work.

I&apos;m not a fanboy of AIR, or Flex, or any of the other RIA technologies (though I do use AJAX reasonably often).  I like whatever gets the job done in the most reasonable way.  I wouldn&apos;t be upset if they made fun of any of those technologies, or questioned their usefulness, or whatever:  I listen to them for their opinions, whether I agree with them or not.

But to not say anything:  that&apos;s pathetic.  RIAs are out there and gaining a presence, whether good or bad.  I can&apos;t see how you can ignore them by mistake.

Near the end of the podcast, regular panelist John Dvorak mocked the use of Twitter because at the end of the day, it didn&apos;t put $5 in his pocket, and a few minutes later someone on Twitter apparently offered to send him $5.

Hey, John, I&apos;ll send you $5 if you can get the TWiT panel to discuss RIA technology.  It would be worth it at 10x the price. 
				</description>
				
				<category>RIAs</category>
				
				<category>AIR</category>
				
				<category>Miscellaneous</category>
				
				<pubDate>Tue, 04 Mar 2008 18:33:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/4/If-You-Dont-Follow-RIA-News-You-Must-Be-a-TWiT</guid>
				
			</item>
			
			<item>
				<title>Updated My colorPicker AIR Application to Run In AIR 1.0</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/3/2/Updated-My-colorPicker-AIR-Application-to-Run-In-AIR-10</link>
				<description>
				
				It took me a bit longer than I expected, but I released an AIR 1.0-compatible version of my &lt;a href=&quot;http://colorpicker.riaforge.org/&quot; target=&quot;_blank&quot;&gt;colorPicker&lt;/a&gt; AIR application this afternoon.

The problems I ran into were mostly my own fault.  I originally developed colorPicker under AIR Beta 2.  When AIR Beta 3 came out, I downloaded and installed Beta 3, reinstalled colorPicker, and it worked fine, so I assumed that the changes in Beta 3 were to aspects of AIR that my app didn&apos;t use.  I didn&apos;t realize that they had changed the syntax of the AIR descriptor file, so I was surprised when colorPicker wouldn&apos;t even compile under AIR 1.0.

Once I updated my descriptor file, I was able to compile and run colorPicker, but oddly enough I had to tweak some CSS styles regarding padding, so that took a little more time.

But anyway, it&apos;s done.  According to the stats on RIAForge, it&apos;s been downloaded about 160 times, so hopefully that means some folks are getting some use out of it. 
				</description>
				
				<category>AIR</category>
				
				<pubDate>Sun, 02 Mar 2008 15:27:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/3/2/Updated-My-colorPicker-AIR-Application-to-Run-In-AIR-10</guid>
				
			</item>
			
			<item>
				<title>ColdFusion 8&apos;s Image Functions + jQuery= A UI For Adding Text and Color Blocks Into An Image file</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/2/27/ColdFusion-8s-image-functions--jQuery-image-captioning-application</link>
				<description>
				
				One of the new features in &lt;a href=&quot;http://www.adobe.com/products/coldfusion&quot; target=&quot;_blank&quot;&gt;ColdFusion 8&lt;/a&gt; is the ability to manipulate images using ColdFusion tags and functions.  For example, the code below (all server-side code) will take an image file on the server, overlay it with text, and create a brand new image file in temp space and display it to the browser:

&lt;code&gt;
&lt;!---Assign the image file to the carImage variable---&gt;
&lt;cfimage name = &quot;carImage&quot; action=&quot;read&quot; source=&quot;ferrari.gif&quot;/&gt;
&lt;!---Add the text &quot;Fast car!&quot; to the image and place it 10 pixels from the left and 15 from the top---&gt;
&lt;cfset ImageDrawText(carImage, &quot;Fast car!, 10, 15)&gt;
&lt;!---Display the new image---&gt;
&lt;cfimage source=&quot;#carImage#&quot; action=&quot;writeToBrowser&quot;&gt;
&lt;/code&gt;

A week ago, an idea popped into my head:  &quot;What if you could create a UI tool that would let a user decide what text should appear on the image and where it should appear?&quot;

I decided to try and answer that question.  The result: a working proof-of-concept that lets you add text and blocks of color anywhere on a selected image using a UI tool powered by &lt;a href=&quot;http://www.jquery.com&quot; target=&quot;_blank&quot;&gt;jQuery&lt;/a&gt; JavaScript functions.  When you&apos;re done manipulating the image, you submit the data defining your changes to ColdFusion via an AJAX call, and ColdFusion creates a new image in temp space based on that data and displays it.  You can save the new image down to your computer or store the data you submitted in the database so the image you made can be reproduced without permanently storing a new image file.

The fact that it only took me a week to do this (no more than 25 hours) is a testament to both the power and simplicity of ColdFusion and jQuery.

You can try out the proof-of-concept at:
&lt;a href=&quot;http://www.swartzfager.org/captionator&quot;&gt;http://www.swartzfager.org/captionator&lt;/a&gt;

&lt;strong&gt;Update:&lt;/strong&gt; I updated the title as I realized that describing this as an &quot;image captioning program&quot; might be interpreted as simply storing captions to associate with an image, not adding the text onto/into the image. 
				</description>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 27 Feb 2008 07:30:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/2/27/ColdFusion-8s-image-functions--jQuery-image-captioning-application</guid>
				
			</item>
			
			<item>
				<title>AIR Apps Showcased at Adobe Engage Event</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/2/26/AIR-Apps-Showcased-at-Adobe-Engage-Event</link>
				<description>
				
				A number of AIR applications were showcased at the Adobe Engage 2008 event yesterday.  I found a blog that has summaries and pictures of some of the presentations given:

&lt;a href=&quot;http://galbraiths.org/blog/category/engage08/&quot; target=&quot;_blank&quot;&gt;http://galbraiths.org/blog/category/engage08/&lt;/a&gt;

Some of the featured apps I&apos;d heard of before (like the eBay AIR application), but some were new to me. 
				</description>
				
				<category>AIR</category>
				
				<pubDate>Tue, 26 Feb 2008 08:20:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/2/26/AIR-Apps-Showcased-at-Adobe-Engage-Event</guid>
				
			</item>
			
			<item>
				<title>Adobe Open Source Website</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/2/25/Adobe-Open-Source-Website</link>
				<description>
				
				This may get missed in the news about the release of AIR and Flex, but apparently Adobe released a new website dedicated to the open source projects they&apos;re involved with (Flex, BlazeDS, Tamarin, etc.):

&lt;a href=&quot;http://opensource.adobe.com/wiki/display/site/Home&quot; target=&quot;_blank&quot;&gt;Adobe Open Source&lt;/a&gt;

...Fortunately it didn&apos;t escape &lt;a href=&quot;http://www.succor.co.uk/&quot; target=&quot;_blank&quot;&gt;Nick Tong&apos;s&lt;/a&gt; attention (I read about it on his blog).  Good catch, Nick. 
				</description>
				
				<category>Flex</category>
				
				<category>Miscellaneous</category>
				
				<category>Web development</category>
				
				<pubDate>Mon, 25 Feb 2008 07:54:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/2/25/Adobe-Open-Source-Website</guid>
				
			</item>
			
			<item>
				<title>AIR 1.0 and Flex 3.0 Are Out!</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/2/25/AIR-10-and-Flex-30-Are-Out</link>
				<description>
				
				Check out the pages on the Adobe site:

&lt;a href=&quot;http://www.adobe.com/products/flex/&quot; target=&quot;_blank&quot;&gt;http://www.adobe.com/products/flex/&lt;/a&gt;

&lt;a href=&quot;http://www.adobe.com/products/air/&quot; target=&quot;_blank&quot;&gt;http://www.adobe.com/products/air/&lt;/a&gt;

...I&apos;m a little disappointed that AIR still isn&apos;t quite ready for Linux, because it&apos;s not truly cross-platform until it is, but I know they&apos;re beta-testing it with Linux users so hopefully it won&apos;t be much longer. 
				</description>
				
				<category>AIR</category>
				
				<category>Flex</category>
				
				<pubDate>Mon, 25 Feb 2008 07:27:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/2/25/AIR-10-and-Flex-30-Are-Out</guid>
				
			</item>
			
			<item>
				<title>Changing Individual CSS Styles with jQuery</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/2/21/Changing-Individual-CSS-Styles-with-jQuery</link>
				<description>
				
				Back when I was writing my own custom JavaScript functions, I learned that there wasn&apos;t a single, simple way to change the individual style settings (like &quot;font-weight:bold&quot;) for an HTML element that worked on every browser.  My solution was to change the CSS classes assigned to the element instead:  I wrote a library function that would allow me to add, remove, or replace any class assigned to an HTML element and simply created as many class definitions as I needed in order to accommodate the style changes.  It was actually a pretty effective workaround because it let me effectively change multiple styles with one function call.

When I started using jQuery, I quickly learned about the &quot;addClass&quot; and &quot;removeClass&quot; core functions, which I could use instead of my library function:

&lt;code&gt;
$(&quot;#missionStatement&quot;).addClass(&quot;importantTextClass&quot;);
$(&quot;#userProfile&quot;).removeClass(&quot;hideTextClass&quot;);
&lt;/code&gt;

...So I continued with my routine of changing styles by changing classes, even though sometimes I only needed to change or remove a single style setting.  No harm, no foul.

But changing classes wouldn&apos;t work for the wacky little project I&apos;ve been working on recently:  I needed to be able to change several styles for an HTML element individually, and writing a class to handle every permutation of the possible style combinations was impractical.

So I went to the &lt;a href=&quot;http://www.jquery.com&quot; target=&quot;_blank&quot;&gt;jQuery web site&lt;/a&gt;, hopeful that the brilliant folks at jQuery had something that could help me out.

And they did:  the &quot;css&quot; core function allows you to read or set any individual style or styles:

&lt;code&gt;
if ($(&quot;#missionStatement&quot;).css(&quot;font-weight&quot;)== &quot;400&quot; || $(&quot;#missionStatement&quot;).css(&quot;font-weight&quot;)== &quot;normal&quot;)
 {
   $(&quot;#userProfile&quot;).css(&quot;display&quot;,&quot;none&quot;);    
   $(&quot;#missionStatement&quot;).css({ fontSize:&quot;24px&quot;, fontWeight:&quot;bold&quot; });
  }
&lt;/code&gt;

Have I mentioned that I love jQuery?  :) 
				</description>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<category>CSS</category>
				
				<pubDate>Thu, 21 Feb 2008 07:20:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/2/21/Changing-Individual-CSS-Styles-with-jQuery</guid>
				
			</item>
			
			<item>
				<title>AIR Recognized as a Top-10 Emerging Technology by MIT Technology Review</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/2/20/AIR-Recognized-as-a-Top10-Emerging-Technology-by-MIT-Technology-Review</link>
				<description>
				
				AIR made the Technology Review&apos;s top-10 list of emerging technologies:

&lt;a href=&quot;http://www.technologyreview.com/read_article.aspx?ch=specialsections&amp;sc=emerging08&amp;id=20245&quot; target=&quot;_blank&quot;&gt;TR10: Offline Web Applications&lt;/a&gt;

Nice to see AIR get some recognition as an emerging trend.

Now give us AIR 1.0 already!  :) 
				</description>
				
				<category>AIR</category>
				
				<category>Technology</category>
				
				<pubDate>Wed, 20 Feb 2008 08:05:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/2/20/AIR-Recognized-as-a-Top10-Emerging-Technology-by-MIT-Technology-Review</guid>
				
			</item>
			
			<item>
				<title>Thoughts on Future Trends in Computing</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/2/19/Thoughts-on-Future-Trends-in-Computing</link>
				<description>
				
				At our staff meeting today, my manager told us our director was looking for input on emerging &quot;21st century&quot; technologies and technology trends, and to send him our thoughts so he could pass them along.  Here&apos;s what I sent:

&lt;ul&gt;
&lt;li&gt;The introduction of applications that have both a web and and desktop front-end to access server-side data, with the desktop application provide offline functionality and data storage that can then be synchronized with the back-end data.  Examples of this upcoming movement are Adobe AIR, Google Gears, and the Mozilla Prism project.
&lt;/li&gt;

&lt;li&gt;Increased portability of programming languages to other platforms.  It&apos;s now possible to code .NET or Java application in dynamic languages such as Python or Ruby.
&lt;/li&gt;

&lt;li&gt;Increasing development of RIAs (Rich Internet Applications) based on AJAX, Adobe Flex, Microsoft Silverlight, and JavaFX.  RIAs allow for more engaging and more powerful user interfaces and (in the case of the latter 3 technologies) make it easier to integrate audio-visual material into applications.
&lt;/li&gt;

&lt;li&gt;The continued growth of &quot;cloud computing,&quot; where organizations store their non-critical data on external servers maintained by a third party but controlled and accessed by the organization over the Internet.  The chief example of this is Amazon&apos;s S3 data service.
&lt;/li&gt;

&lt;li&gt;The continued trend of exposing the social (people-based) connections between data started by the social networking sites.  The social networks themselves may stop growing, but the idea of using a person as a focal point for otherwise unrelated data is going to stick around.&lt;/li&gt;
&lt;/ul&gt;

...Hardly earth-shattering predictions, but other than within my particular unit, my organization isn&apos;t that hip to web trends. 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>Technology</category>
				
				<category>Web development</category>
				
				<pubDate>Tue, 19 Feb 2008 18:29:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/2/19/Thoughts-on-Future-Trends-in-Computing</guid>
				
			</item>
			
			<item>
				<title>Some Design Considerations When Building A Web App for iPhone/iPod Use</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/2/17/Some-Design-Considerations-When-Building-A-Web-App-for-iPhoneiPod-Use</link>
				<description>
				
				I recently finished a small project that involved optimizing some simple web applications for use on an iPhone/iPod Touch.

I won&apos;t bore you with the specifics of the project (unless someone asks) but here are some things I learned during the experience:

&lt;ul&gt;
&lt;li&gt;There is no touch analog for click-and-drag (probably because dragging is an action reserved for moving around the page), so drag-and-drops will not work and you cannot select text for copying, cutting or pasting.  This means the dragging tools/effects implemented in the various JavaScript libraries (jQuery, Yahoo YUI, etc.) won&apos;t work.
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;There&apos;s really no way to &quot;hover&quot; over an element with your finger, so any CSS style initiated by hovering will not come into play.
&lt;br /&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Because fingers are less precise than a mouse cursor, you have to make sure there is enough space between different clickable elements (links, checkboxes, etc.) so that the user can easily click only on what they want to click on.  So if you have a vertical list of hyperlinks, you may want to put at least one line of space between them.
&lt;br /&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;When you click on a text field, textarea, or select box, the page zooms in and either a keyboard or a list of drop-down choices appears at the bottom of the screen.  Once you make your choice/enter your text and tap the &quot;Done&quot; button, the zoom doesn&apos;t reverse, so you end up still focused on the input element.  That means if you have a submit button off to the left or right, you have to tap and scroll the page to it in order to tap it.  If your application is designed to be viewable in the iPhone/iPod without the need for zooming, you might be able to negate this effect by disallowing all zooming (haven&apos;t tried this yet).
&lt;br /&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Selecting a choice from a drop-down box does not fire off the onChange JavaScript event for that box, probably because the action is intercepted in order to allow the iPhone/iPod to do the actions described in the previous bullet.  The onChange event for text boxes might be similarly affected.
&lt;/li&gt;
&lt;/ul&gt; 
				</description>
				
				<category>Web development</category>
				
				<category>Miscellaneous</category>
				
				<pubDate>Sun, 17 Feb 2008 12:26:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/2/17/Some-Design-Considerations-When-Building-A-Web-App-for-iPhoneiPod-Use</guid>
				
			</item>
			
			<item>
				<title>Investing My Tax Rebate In the ColdFusion Economy</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/2/14/Investing-My-Tax-Rebate-In-the-ColdFusion-Economy</link>
				<description>
				
				So it&apos;s official now:  eligible Americans will be getting a tax rebate check in the mail, probably in May, between $300 and $600 each ($1200 total for an eligible couple filing jointly).

The government&apos;s hope is that we&apos;ll go out and spend this money, thereby stimulating the retail economy.  Personally, I doubt it&apos;ll help the economy that much, but I&apos;m willing to spend a little of that money for the cause.

But I&apos;m a big fan of killing multiple vultures with a single rock, so why not invest in the ColdFusion economy as well as the national retail economy?  To that end, I just purchased all three of the &lt;a href=&quot;https://www.amazon.com/s/ref=nb_ss_/103-8458195-9880609?url=search-alias%3Daps&amp;field-keywords=ColdFusion+Web+Application+Construction+Kit&amp;x=0&amp;y=0&quot; target=&quot;_blank&quot;&gt;ColdFusion 8 CFWACK books&lt;/a&gt; in anticipation of my rebate check.  I might also spend some of it on related material, maybe on an upgrade of my &lt;a href=&quot;http://www.visibone.com&quot; target=&quot;_blank&quot;&gt;Visibone&lt;/a&gt; cheat sheets or an upgrade of Flex Builder once version 3 is out (should be soon now...).

(Grin) And hey, maybe I can deduct all of these purchases as professional expenses.

&lt;strong&gt;P.S&lt;/strong&gt; In my zeal to get the CFWACK books ordered, I forgot about investing in the &lt;a href=&quot;https://secure.houseoffusion.com/subscriptions.cfm&quot; target=&quot;_blank&quot;&gt;Fusion Authority Quarterly Update&lt;/a&gt;, another excellent ColdFusion resource. 
				</description>
				
				<category>Miscellaneous</category>
				
				<pubDate>Thu, 14 Feb 2008 20:03:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/2/14/Investing-My-Tax-Rebate-In-the-ColdFusion-Economy</guid>
				
			</item>
			
			<item>
				<title>Oracle and The CFDBINFO tag:  More Tables Than I Bargained For</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/2/13/Oracle-and-The-CFDBINFO-tag--More-Tables-Than-I-Bargained-For</link>
				<description>
				
				I was trying out the ColdFusion 8 &amp;lt;cfdbinfo&amp;gt; tag for the first time today, attempting to retrieve the names of all of the tables in a particular Oracle datasource.  I used a &amp;lt;cfdump&amp;gt; to return the results, and I was startled to see a query object containing over 2,000 records.

A bit more than the 35 records I was expecting.

All of the unexpected entries were system tables or views.  I have no idea what purpose they serve or if they&apos;re even part of the datasource per se.

It&apos;s possible it&apos;s an anomaly resulting from the way our DBAs have our Oracle server configured, rather than something that will affect anyone trying to use the &amp;lt;cfdbinfo&amp;gt; tag against an Oracle database, but I thought it worth sharing.

Fortunately, I should be able to use the &quot;pattern&quot; attribute of &amp;lt;cfdbinfo&amp;gt; to retrieve just the tables I need for my purpose. 
				</description>
				
				<category>Oracle</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 13 Feb 2008 14:07:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/2/13/Oracle-and-The-CFDBINFO-tag--More-Tables-Than-I-Bargained-For</guid>
				
			</item>
			
			<item>
				<title>Data Storage Forecast:  Only Partly Cloudy</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/2/12/Data-Storage-Forecast--Only-Partly-Cloudy</link>
				<description>
				
				Over the past few weeks, the idea of moving data off of desktops and locally-controlled database servers and &quot;into the cloud&quot; (onto shared data hosting services like Amazon&apos;s S3) has been gaining more attention.  A guy named Nicholas Carr went so far as to predict the demise of the IT department as businesses essentially outsource their data processing/data retention (&lt;a href=&quot;http://www.networkworld.com/news/2008/010708-carr-it-dead.html&quot; target=&quot;_blank&quot;&gt;NetworkWorld, 1/7/08&lt;/a&gt;).

There&apos;s no doubt that individuals store more data online these days than they used to because of the rise of applications like Facebook, Flickr, and Google Calendar.  Any data that has a social aspect to it gains value by being &quot;out there&quot; for others to view and interact with.

There are also business processes that involve collaboration with other business partners, where arrangements are made to exchange information or tangible goods via a buyer/seller dynamic.  Again, it makes sense that the data and even the applications that power such collaborations could be managed and hosted by a third party.

But there will always be a desire to keep certain data close to the vest, even if that means maintaining an internal hardware and network infrastructure.  Colleges and universities are not going to outsource their student data to a third party, and medical institutions are obligated by law to safeguard medical information.  Banks will probably take a pass on shared data hosting as well.  Even if cloud computing becomes more accepted and reliable, there will always be groups and individuals unwilling to give up that control despite any cost savings. 
				</description>
				
				<category>Technology</category>
				
				<category>Miscellaneous</category>
				
				<pubDate>Tue, 12 Feb 2008 07:45:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/2/12/Data-Storage-Forecast--Only-Partly-Cloudy</guid>
				
			</item>
			
			<item>
				<title>Switching Between Sets of Tables On The Fly</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/2/7/Switching-Between-Sets-of-Tables-On-The-Fly</link>
				<description>
				
				Ever need to tell your ColdFusion app to run select queries against a different set of tables while you do something to the original set (like perform a batch update)?

I did.  Here&apos;s how I did it.  [More]
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Thu, 07 Feb 2008 19:25:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/2/7/Switching-Between-Sets-of-Tables-On-The-Fly</guid>
				
			</item>
			
			<item>
				<title>Alpha Releases Out of Updated jQuery UI and Brand-New jQuery Enchant Libraries</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/2/7/Alpha-Releases-Out-of-Updated-jQuery-UI-and-BrandNew-jQuery-Enchant-Libraries</link>
				<description>
				
				As demonstrated from some of my previous posts, I&apos;m a big fan of jQuery, so this news caught my attention.  

The new jQuery Enchant library is a library of visual effects:  bouncing, shaking, fading, folding, exploding (didn&apos;t know what to expect with that one), etc.

Here&apos;s the link to the announcement on Google Groups:

&lt;a href=&quot;http://groups.google.com/group/jquery-ui/browse_thread/thread/db8276574e20a5be/6a406868c7390d83#6a406868c7390d83&quot;  target=&quot;_blank&quot;&gt; Get it while it&apos;s hot: jQuery UI 1.5a and jQuery Enchant 1.0a!&lt;/a&gt;

In the thread, you&apos;ll find the links to the alpha demo pages.

Apparently, there will also be an update to the jQuery core file in order to support these alpha releases (also mentioned in the thread linked above). 
				</description>
				
				<category>JavaScript</category>
				
				<category>jQuery</category>
				
				<pubDate>Thu, 07 Feb 2008 07:39:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/2/7/Alpha-Releases-Out-of-Updated-jQuery-UI-and-BrandNew-jQuery-Enchant-Libraries</guid>
				
			</item>
			
			<item>
				<title>CFUnited Now a Week Earlier</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/1/30/CFUnited-Now-a-Week-Earlier</link>
				<description>
				
				Yep:  CFUnited will now be June 18 - June 21 at the DC Convention Center.  E-mail just went out to all the attendees.

Figures I&apos;d go through the trouble of making countdown timers for the two conferences I&apos;m attending and then have one of them go and change the date on me.  :)

Fortunately it&apos;s just a matter of updating the date value in the code.

More importantly, I can still make it to CFUnited.  Had they moved it up an additional week...that would have been a problem for me.

And the fact that it&apos;s now in Washington D.C. itself means I can use the Metro for about half of the journey, cutting down on time in traffic. 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 30 Jan 2008 13:33:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/1/30/CFUnited-Now-a-Week-Earlier</guid>
				
			</item>
			
			<item>
				<title>The End of Netscape</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/1/30/The-End-of-Netscape</link>
				<description>
				
				I just read an announcement that our help desk, which provides technical support for all of the university, is ending support for all Netscape web browsers and e-mail clients on February 1st, the same date that Netscape itself is ending support for those products.

The announcement surprised me a bit:  usually we&apos;re not that quick to cut off support for a product.  But it makes sense:  with spyware and other malware being such a big user support problem, having folks using a browser that&apos;s no longer being updated or patched to deal with such malicious programs would only add to the pain.

For me, that means less browser to code for when building internal apps (though pages that rendered correctly in FireFox and IE almost always rendered properly in Netscape as well).

Goodbye Netscape! 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>Web development</category>
				
				<pubDate>Wed, 30 Jan 2008 08:07:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/1/30/The-End-of-Netscape</guid>
				
			</item>
			
			<item>
				<title>Sorting a Nested List Using jQuery And Saving the Changes</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/1/27/Sorting-a-Nested-List-Using-jQuery-And-Saving-the-Changes</link>
				<description>
				
				&lt;img src=&quot;http://www.swartzfager.org/blog/images/nestedListSort.gif&quot; alt=&quot;A screenshot of the sorting demo&quot; style=&quot;float:left;border:1px solid black;margin:1.2ex;&quot; /&gt;A reader asked me if it was possible to sort/rearrange items in nested lists (lists within a main list) using the &lt;a href=&quot;http://ui.jquery.com/&quot; target=&quot;_blank&quot;&gt;jQuery UI&lt;/a&gt; Sortables code.  I told him that it was, and I had actually created a tool for a client recently that made use of that feature.  

He wanted to know more about how to do it, so I went ahead and created a downloadable working demo of how to do it.  [More]
				</description>
				
				<category>Web development</category>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<category>Downloads</category>
				
				<pubDate>Sun, 27 Jan 2008 16:56:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/1/27/Sorting-a-Nested-List-Using-jQuery-And-Saving-the-Changes</guid>
				
				<enclosure url="http://www.swartzfager.org/blog/enclosures/nestedListSortDemo.zip" length="141076" type="application/zip"/>
				
			</item>
			
			<item>
				<title>Neat Video Demo of the Allurent Desktop Connection AIR App At Work</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/1/24/Neat-Video-Demo-of-the-Allurent-Desktop-Connection-AIR-App-At-Work</link>
				<description>
				
				I was reading Dan Wilson&apos;s report of the Flex 3/AIR Tour event down in North Carolina yesterday on his &lt;a href=&quot;http://ria.dzone.com/blog/5&quot; target=&quot;_blank&quot;&gt;RIA Zone blog&lt;/a&gt; (one of the new DZone sites I mentioned in my previous blog entry), and he mentioned that Ben Forta demonstrated an AIR application made by &lt;a href=&quot;http://www.allurent.com/&quot; target=&quot;_blank&quot;&gt;Allurent&lt;/a&gt; that impressed everyone there.  He included a link to a video demo of the product:

&lt;a href=&quot;http://www.allurent.com/page.php?id=70&quot; target=&quot;_blank&quot;&gt;http://www.allurent.com/page.php?id=70&lt;/a&gt;

I&apos;m equally impressed.  The application uses AIR in ways I hadn&apos;t considered, like allowing color matching of products based on the color in an image on the user&apos;s hard drive, and pushing news and content down to the application on a scheduled basis rather than waiting for the user to pull data down.  Definitely worth checking out. 
				</description>
				
				<category>AIR</category>
				
				<pubDate>Thu, 24 Jan 2008 21:45:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/1/24/Neat-Video-Demo-of-the-Allurent-Desktop-Connection-AIR-App-At-Work</guid>
				
			</item>
			
			<item>
				<title>ColdFusion Getting Major Attention From DZone</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/1/23/ColdFusion-Getting-Major-Attention-From-DZone</link>
				<description>
				
				I think I&apos;ve mentioned Dzone (&lt;a href=&quot;http://www.dzone.com&quot;&gt;www.dzone.com&lt;/a&gt;) in previous posts:  it&apos;s a site where users submit links to articles and blog posts about web design and web software development, and these links are then voted and commented on.  It&apos;s kind of like a subject-focused version of &lt;a href=&quot;http://www.digg.com&quot;&gt;Digg&lt;/a&gt;.

A lot of the posts tend to focus on Java or standard web technologies (JavaScript, CSS, HTML), but every now and then you see posts about Flex and AIR (and there&apos;s almost always an AIR ad somewhere on the page, evidence that the Adobe marketing team is aware of Dzone).  There are even rare articles about ColdFusion.

This morning I submitted my blog post about techniques for providing help instructions within web applications to Dzone.  One of the submissions steps is to pick four context tags for your link, and when I looked at the tag collection I saw that ColdFusion had been added:


&lt;img src=&quot;images/dzoneTags.gif&quot; alt=&quot;Image of Dzone tag options&quot; /&gt;


I did a little bit of digging and found out that Dzone is planning on expanding their offerings to include a new group of websites focusing on specific technologies, including ColdFusion:

&lt;a href=&quot;http://zones.dzone.com/news/become-zone-leader&quot;&gt;Become a Zone Leader and Get Recognized&lt;/a&gt;

I think this is a pretty exciting development and a sign that ColdFusion is finally getting some of the attention it desevers. 
				</description>
				
				<category>Web development</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 23 Jan 2008 07:56:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/1/23/ColdFusion-Getting-Major-Attention-From-DZone</guid>
				
			</item>
			
			<item>
				<title>Techniques For Providing Instructions Within A Web Application</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/1/22/Techniques-For-Providing-Instructions-Within-A-Web-Application</link>
				<description>
				
				Some of the processes you find in web applications are fairly standard.  Most folks can fill out a contact form, or fill out a survey, or make a calendar entry without the need for too much explanation.  But what do you do when the form involves business rules that the user may or may not know, or presents the user with a number of options?  [More]
				</description>
				
				<category>Web development</category>
				
				<category>Miscellaneous</category>
				
				<category>jQuery</category>
				
				<pubDate>Tue, 22 Jan 2008 20:40:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/1/22/Techniques-For-Providing-Instructions-Within-A-Web-Application</guid>
				
			</item>
			
			<item>
				<title>How to Create a Countdown Timer in JavaScript</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/1/12/How-to-Create-a-Countdown-Timer-in-JavaScript</link>
				<description>
				
				&lt;hr/&gt;
&lt;strong&gt;Update (2/7/2009):&lt;/strong&gt; Since a couple of commenters asked for the complete code or a working example, I went back and cleaned up the code a bit to create a working demo that folks can view and download the source code for.  You can find the demo at this URL:  &lt;a href=&quot;http://www.swartzfager.org/blog/demoFiles/countdownTimer.html&quot; target=&quot;_blank&quot;&gt;http://www.swartzfager.org/blog/demoFiles/countdownTimer.html&lt;/a&gt;
&lt;hr/&gt;

I&apos;m now signed up for two ColdFusion conferences this year:  cf.Objective() in early May and CFUnited in late June.  While I was looking at the promotional badges for the conferences, I got the idea for making a countdown timer for each one.

I did a Google search to see if there were any countdown functions already out there I could use and simply plug the start date of the conference, but while I found some example timers I couldn&apos;t quite find what I wanted, so I decided to roll my own.  [More]
				</description>
				
				<category>Web development</category>
				
				<category>JavaScript</category>
				
				<pubDate>Sat, 12 Jan 2008 14:50:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/1/12/How-to-Create-a-Countdown-Timer-in-JavaScript</guid>
				
			</item>
			
			<item>
				<title>Browser Inconsistencies:  Yuck!</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2008/1/9/Browser-Inconsistencies--Yuck</link>
				<description>
				
				Usually I don&apos;t have to wrestle with web browser inconsistencies in my work:  very few of the JavaScript functions I write need to be altered to work differently depending on the browser, and my page layouts don&apos;t typically need to be pixel-perfect.

But when I do have to make adjustments for different browsers, it can be a real pain.  I&apos;ve spent several hours over the past two days trying to get my latest little personal project to look right in various browsers (IE, FireFox, Opera, etc.).  The slight sizing variations between the browsers wouldn&apos;t normally be a problem, but I happen to be working with a very small horizontal space such that even the difference of a few pixels can screw it up.

Fortunately, I&apos;ve reached a point where the layout is acceptable (if not perfect) in the web browser.  So hopefully my project will make its way here onto my blog within the next day or so. 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>Web development</category>
				
				<pubDate>Wed, 09 Jan 2008 20:59:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2008/1/9/Browser-Inconsistencies--Yuck</guid>
				
			</item>
			
			<item>
				<title>How to Use the Same Server-Side Code to Validate Form Data With or Without AJAX Using jQuery</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/12/29/Simple-technique-for-using-serverside-validation-code-for-client-OR-serverside-form-validation</link>
				<description>
				
				In any web application, if the user submits information to be stored in a database using a form, you always want to validate that information before it&apos;s stored in the database.  The majority of users have JavaScript enabled in their web browser, allowing you to use JavaScript functions to validate the data on the client-side before the submission is allowed to proceed.  However, there are those rare individuals who have JavaScript turned off, so a conscientious developer will also validate the submitted data on the server side as well as a backup.

The problem with this is that you end up having to maintain two sets of validation functions, which means twice the work if you have to make a change to the submission form or the validation rules themselves.  In addition, if you&apos;re not experienced with JavaScript, you may find it harder to write the JavaScript validation code than similar code in your server-side programming language of choice.

In an earlier blog post, I wrote about how the latest version of ColdFusion, ColdFusion 8, provides a new tag called &amp;lt;cfajaxproxy&amp;gt; that allows you to make JavaScript calls to functions contained in ColdFusion Component (CFC) files on the server, enabling you to write your validation code within CFC functions and call them for either client-side or server-side validation.  

But what if you&apos;re not running ColdFusion 8 yet, or you&apos;re using another web programming language (like PHP)?

Here&apos;s a technique I came up with using the &lt;a href=&quot;http://jquery.com/&quot;&gt;jQuery JavaScript library&lt;/a&gt; and the &lt;a href=&quot;http://malsup.com/jquery/form/&quot;&gt;jQuery Form plugin&lt;/a&gt; that lets you write your validation and database-update code on the server-side in such a way that you can either call it via AJAX if JavaScript is enabled or run it server-side if JavaScript isn&apos;t available:  [More]
				</description>
				
				<category>Miscellaneous</category>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Sat, 29 Dec 2007 11:45:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/12/29/Simple-technique-for-using-serverside-validation-code-for-client-OR-serverside-form-validation</guid>
				
				<enclosure url="http://www.swartzfager.org/blog/enclosures/submitDemo.zip" length="35920" type="application/zip"/>
				
			</item>
			
			<item>
				<title>My First AIR Application:  colorPicker</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/12/10/My-First-AIR-Application--colorPicker</link>
				<description>
				
				In my most recent web application project, my clients asked for the ability to change the color of certain HTML elements without having to actually write or change any HTML code.  So I used ColdFusion and the &lt;a href=&quot;http://www.jquery.com&quot;&gt;jQuery JavaScript library&lt;/a&gt; to create a color grid similar to the one that pops up in Adobe Dreamweaver when you type a color-related HTML or CSS attribute, allowing them to choose a color simply by clicking on it.

After I finished the grid, it occurred to me how I could use a similar tool for my coding work:  &lt;a href=&quot;http://www.cfeclipse.org&quot;&gt;CFEclipse&lt;/a&gt; doesn&apos;t have a selectable color grid (most likely a limitation of Eclipse itself), and it&apos;s a pain to open up Dreamweaver or Fireworks just to get a color.  So I decided to try and make my color grid into an AIR application.

The result is colorPicker, a widget-like AIR application that lets you either select a color from a grid of &quot;web-safe&quot; colors or design a color using sliders to change the red, green, and blue values of the color.  Once you have the color you want, you can click on the corresponding &quot;Save to Clipboard&quot; button to copy the hex color code to the clipboard and then paste it into your HTML code in your IDE of choice.  It also saves all of the colors you&apos;ve copied to the clipboard during your session so you can repeat a color.

It actually uses very little of the AIR API:  just the clipboard copy function and the description file needed to run it.  Everything else is done with JavaScript, HTML, and CSS.

You can view screenshots of colorPicker and download it from RIAforge.org at:

&lt;a href=&quot;http://colorpicker.riaforge.org&quot;&gt;http://colorpicker.riaforge.org&lt;/a&gt; 
				</description>
				
				<category>AIR</category>
				
				<pubDate>Mon, 10 Dec 2007 18:20:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/12/10/My-First-AIR-Application--colorPicker</guid>
				
			</item>
			
			<item>
				<title>Perfection Isn&apos;t Mandatory</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/12/4/Perfection-Isnt-Mandatory</link>
				<description>
				
				I came across this blog post, and even the blog itself is geared towards the .Net crowd, I thought the message was true for all coders who strive to hone their craft:

&lt;a href=&quot;http://www.secretgeek.net/inadequate.asp&quot;&gt;You are NOT  inadequate&lt;/a&gt; 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>Web development</category>
				
				<pubDate>Tue, 04 Dec 2007 12:55:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/12/4/Perfection-Isnt-Mandatory</guid>
				
			</item>
			
			<item>
				<title>First Week in the ColdFusion Community</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/11/19/First-Week-in-the-ColdFusion-Community</link>
				<description>
				
				It&apos;s now been a week since I joined the ColdFusion Community, so here are my thoughts on the experience so far.

First off, I must like it, because I keep checking on it to see what&apos;s going on.  This is my first social network (I don&apos;t really count LinkedIn), so I wasn&apos;t sure if it would appeal to me.  But I&apos;m finding that it&apos;s a much easier way to get to know folks and converse with them than posting on blogs and exchanging e-mails.

I think part of it is that it&apos;s a different dynamic.  With blog comments and e-mails, it&apos;s like you&apos;re going to someone&apos;s house and knocking on their door; you&apos;re inviting yourself to their party.  Being in a social network is more like going to a bar.  It&apos;s a shared space, and the
expectation of interaction is built in:  if the person didn&apos;t want to socialize or be approached, they wouldn&apos;t be there in the first place.

I think all of the avenues of interaction on the site--the comment walls, the forums, the groups, the blogs--are great.  However, I am still trying to figure out some of the nuances and the best way to have certain types of conversations.  I&apos;ve had a few brief exchanges that
took place between comment walls, which leads to comments left on my wall or the other person&apos;s wall that don&apos;t entirely make sense because the rest of the conversation is on the other wall or even a few walls.

I&apos;m also trying to figure out the best use for the friend system.  As far as I can tell, the main use of the friend system (besides showing folks who visit your profile that you HAVE friends) is to establish a group of folks you might want to share certain thoughts or comments with that you don&apos;t want visible to the rest of the community or a guest. That&apos;s fine, but I can&apos;t really think of anything I would only share with the folks I currently have as friends.  Maybe that will change as I get to know them.

One of the expectations I had regarding friends was that somehow I would be more connected to those friends, that the system would follow their activities in the community more closely on the assumption that I would be interested to know what they in particular were doing.  If the friendship system does actually do that, I haven&apos;t really seen any evidence of it.

Then of course there&apos;s the whole &quot;who do you ask to be a friend and who do you accept as a friend&quot; question.  My current inclination is to only send friend requests to folks I&apos;ve conversed with over e-mail or in person, and to accept any requests sent my way.

One thing I&apos;d like to see added is a navigation tab that takes you to a list of all the recent blog posts
(http://www.coldfusioncommunity.org/profiles/blog/list).  I think that would help bring more exposure to the blogs. It could get messy as more folks keep blogs here, but I think most folks who have well-read blogs outside of the community will probably stick to those, especially since
there will eventually be a way to pull in external blog posts in one&apos;s community blog.

All in all, I think the community has taken off rather well (with over 400 members joining since word about it started to spread last week). It&apos;ll be interesting to see how active it will be and what folks will end up doing with it.  What comes out of it will depend on what folks put into it. 
				</description>
				
				<category>Miscellaneous</category>
				
				<pubDate>Mon, 19 Nov 2007 07:31:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/11/19/First-Week-in-the-ColdFusion-Community</guid>
				
			</item>
			
			<item>
				<title>How to Copy To and From the Clipboard using JavaScript in AIR Beta 2</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/11/14/How-to-Copy-To-and-From-the-Clipboard-using-JavaScript-in-AIR-Beta-2</link>
				<description>
				
				In case there&apos;s another poor soul out there who just needs to know how to work with the clipboard using JavaScript in AIR Beta 2, I&apos;m posting this very simple example of how to get text from the clipboard, clear the clipboard, and send text to the clipboard.

Getting text from the clipboard:
&lt;code&gt; 
var ctext= air.Clipboard.generalClipboard.getData(&quot;air:text&quot;,&quot;cloneOnly&quot;);
alert(&quot;ctext is: &quot; + ctext);
&lt;/code&gt;

Clearing the clipboard:
&lt;code&gt;
air.Clipboard.generalClipboard.clear();
&lt;/code&gt;

Sending text to the clipboard:
&lt;code&gt;
var myText= &quot;Some text&quot;;
var clip= air.Clipboard.generalClipboard;
clip.setData(&quot;air:text&quot;,myText,false);
&lt;/code&gt;

The functions involved are all covered in the &lt;a href=&quot;http://livedocs.adobe.com/labs/air/1/jslr/index.html&quot;&gt;JavaScript Language Reference for Adobe AIR&lt;/a&gt;, but I found the documentation less than clear, and all the examples I found in blog posts and in the Adobe forums were from earlier versions of AIR/Apollo.  Even the PDF documentation that came with the AIR download was out-of-date (note to Adobe:  that&apos;s not good).

This example only covers text, but it should provide enough  of a guide so that, along with the language reference, you can work with other data types.

&lt;strong&gt;Update:&lt;/strong&gt; the clipboard functions listed above also seem to work unchanged in AIR Beta 3 
				</description>
				
				<category>AIR</category>
				
				<pubDate>Wed, 14 Nov 2007 20:52:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/11/14/How-to-Copy-To-and-From-the-Clipboard-using-JavaScript-in-AIR-Beta-2</guid>
				
			</item>
			
			<item>
				<title>If You Use ColdFusion, Join The ColdFusionCommunity Site!</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/11/11/If-You-Use-ColdFusion-Join-The-ColdFusionCommunity-Site</link>
				<description>
				
				I just heard about this site today:

&lt;a href=&quot;http://www.coldfusioncommunity.org&quot; target=&quot;_blank&quot;&gt;http://www.coldfusioncommunity.org&lt;/a&gt;

Nick Tong did an excellent job with this site, and it has the potential to be a true ColdFusion social/professional networking site.  If you&apos;re a ColdFusion developer, you need to at least check out the site, but I encourage you to go ahead and join. 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Sun, 11 Nov 2007 12:34:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/11/11/If-You-Use-ColdFusion-Join-The-ColdFusionCommunity-Site</guid>
				
			</item>
			
			<item>
				<title>UI Tool:  Rearranging Items in a List, jQuery-style!</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/11/11/UI-Tool--Rearranging-Items-in-a-List-jQuerystyle</link>
				<description>
				
				A few weeks ago, as part of an application prototype for a client, I used the fairly new jQuery UI library to create a UI tool where a user could rearrange a list of items by dragging and dropping them into different positions and then save those changes to the database.

I now have a public example posted and available for download--check it out using the link below or via the link in my Downloads list on the right:

&lt;a href=&quot;/blog/jQuerySortList.cfm&quot;&gt;List Sort Control (with jQuery)&lt;/a&gt;

It works in FireFox, IE, and Opera, and can be used in conjunction with any web application programming language. 
				</description>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<category>Downloads</category>
				
				<category>CSS</category>
				
				<pubDate>Sun, 11 Nov 2007 10:47:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/11/11/UI-Tool--Rearranging-Items-in-a-List-jQuerystyle</guid>
				
			</item>
			
			<item>
				<title>When Experience Tells You It Can&apos;t Be True, It Probably Isn&apos;t</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/11/7/When-Experience-Tells-You-It-Cant-Be-True-It-Probably-Isnt</link>
				<description>
				
				Today I was trying to troubleshoot a design tool I created that worked perfectly in FireFox but not in Internet Explorer.  There was an element on the page, a &amp;lt;div&amp;gt;, that IE would not apply the CSS style to if the style was applied based on the id attribute of the &amp;lt;div&amp;gt;.  I could however apply styles to it if I added a class attribute to it and wrote the class in my CSS stylesheet.

It made no sense.  I&apos;d assigned styles based on the id attribute all the time, and had never seen this problem in any modern browser.  What the heck was going on?

Finally I saw my mistake:  I had left off the closing bracket of the &amp;lt;div&amp;gt; that was the parent of the &amp;lt;div&amp;gt; I was having trouble with.  FireFox was &quot;kind&quot; (aka presumptive) enough to close that tag at runtime, and IE was not.

Had I trusted my experience a little quicker, I&apos;d have looked at the HTML code for structural problems first before trying to figure out a way around the problem. 
				</description>
				
				<category>CSS</category>
				
				<category>Web development</category>
				
				<pubDate>Wed, 07 Nov 2007 09:46:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/11/7/When-Experience-Tells-You-It-Cant-Be-True-It-Probably-Isnt</guid>
				
			</item>
			
			<item>
				<title>Why ColdFusion?  Built-in Functions for Creating/Interacting with PDF files</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/11/5/Why-ColdFusion--Builtin-Functions-for-CreatingInteracting-with-PDF-files</link>
				<description>
				
				On &lt;a href=&quot;http://www.dzone.com&quot; target=&quot;_blank&quot;&gt;DZone&lt;/a&gt; today, I saw two posts today about how to generate PDF files.  &lt;a target=&quot;_blank&quot; href=&quot;http://entips.blogspot.com/2007/10/creating-dynamic-pdf-documents-in-java.html&quot;&gt;One technique&lt;/a&gt; used a Java library called iText to create the PDF, &lt;a href=&quot;http://pisa.spirito.de/content/501/pisa3.html&quot; target=&quot;_blank&quot;&gt;the other&lt;/a&gt; looks like it uses Python.

ColdFusion developers don&apos;t need to worry about choosing a library or a 3rd-party application to generate PDF files: CF comes with functions/tags for creating PDF documents out of HTML, concatenating several PDF files into a single file, and writing information to and from PDF form files.

I don&apos;t currently have much need to use the PDF functions in ColdFusion, but it&apos;s nice to know they are there when I do need them. 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Mon, 05 Nov 2007 15:42:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/11/5/Why-ColdFusion--Builtin-Functions-for-CreatingInteracting-with-PDF-files</guid>
				
			</item>
			
			<item>
				<title>Wharton School at UPenn on the Merging of Web and Desktop Technologies</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/11/1/Wharton-School-at-UPenn-on-the-Merging-of-Web-and-Desktop-Technologies</link>
				<description>
				
				Saw this on &lt;a href=&quot;http://www.digg.com&quot;&gt;Digg&lt;/a&gt; today:  it&apos;s an article by several members of the Wharton School of Business at the University of Pennsylvania that talks about the emergence of technologies geared towards merging the Web and the desktop.  They give an overview of the recent developments:  Adobe AIR, Google Gears, Silverlight, Prism, etc.

If you&apos;re not familiar with this latest trend, the article is definitely a good read:

&lt;a href=&quot;http://knowledge.wharton.upenn.edu/article.cfm?articleid=1832&quot;&gt;Software&apos;s Future: Melding the Web and the Desktop&lt;/a&gt; 
				</description>
				
				<category>Technology</category>
				
				<category>Web development</category>
				
				<category>AIR</category>
				
				<pubDate>Thu, 01 Nov 2007 15:53:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/11/1/Wharton-School-at-UPenn-on-the-Merging-of-Web-and-Desktop-Technologies</guid>
				
			</item>
			
			<item>
				<title>Are Mashups a Threat to Web Application Developers?</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/10/31/Are-Mashups-a-Threat-to-Web-Application-Developers</link>
				<description>
				
				I read a blog post or an article the other day (can&apos;t remember where) in which the author stated his belief that soon mashups would be the biggest job security threat to web application developers instead of outsourcing.  His reasoning was that as IT departments leverage existing/external web services to compose their applications, they won&apos;t need as many internal developers.

There is some logic to that, but web services and mashups--heck, any existing code or algorithms--can only get you so far.  If there&apos;s something out there that&apos;s exactly what you need, you just acquire it, and there&apos;s no need to do any programming of your own.

Recently a client and I discussed redoing an application for them in order to make it more flexible and open to expansion.  They don&apos;t have any internal programmers, so I&apos;ve been thinking about how to write administrative tools that would allow them to create new data sets and the interfaces to allow the users to enter data.  After spending several hours over the past few days working out the different variations and the complexities involved, I realized today that it wasn&apos;t going to happen.  There&apos;s a point of complexity and customization where no tool is going to let you cover all the bases:  you need a programmer to deal with it.

So no matter how sophisticated and easy-to-use these web services and APIs become, someone with some programming-savvy will always be needed to fully leverage those assets and customize the end-result to the needs of their users. 
				</description>
				
				<category>Web development</category>
				
				<pubDate>Wed, 31 Oct 2007 18:16:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/10/31/Are-Mashups-a-Threat-to-Web-Application-Developers</guid>
				
			</item>
			
			<item>
				<title>Advantages of the jQuery Ready event</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/10/31/Advantages-of-the-jQuery-Ready-event</link>
				<description>
				
				I&apos;ve been working with jQuery for a few weeks now as part of a project, and I love it.  I&apos;ve always preferred to roll my own JavaScript, but from now on I plan to write all of my JavaScript utilizing the features provided by jQuery.

One of the most significant features of jQuery is it&apos;s document ready function:

&lt;code&gt;
$(document).ready(function(){
   // Your code here
 });
&lt;/code&gt;

It allows you to assign functions that will execute when an event like a mouse click occurs on the selected HTML element(s) (hyperlinks, divs, buttons, etc.).  This allows you to separate the JavaScript calls from the HTML code itself--instead of writing:

&lt;code&gt;
&lt;input type=&quot;button&quot; id=&quot;mainLink&quot; value=&quot;Show Picture&quot; onClick=&quot;showPic();&quot; /&gt;
&lt;/code&gt;

...you can assign the click event to the mainLink button in a separate JavaScript file (referenced by the HTML file)...

&lt;code&gt;
$(document).ready(function(){

   $(&quot;#mainLink&quot;).click (function () {
     showPic();
   });

 });
&lt;/code&gt;

...and leave the button free of that markup:

&lt;code&gt;
  &lt;input type=&quot;button&quot; id=&quot;mainLink&quot; value=&quot;Show Picture&quot; /&gt;
&lt;/code&gt;

The other benefit to this technique is that if you have a client that likes to alter the HTML code of the pages you wrote for them, but you&apos;re afraid they might screw up the JavaScript calls in the page, you can use jQuery to create all of the event handlers and the client won&apos;t have to worry about avoiding JavaScript code in the document. 
				</description>
				
				<category>JavaScript</category>
				
				<category>jQuery</category>
				
				<pubDate>Wed, 31 Oct 2007 07:32:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/10/31/Advantages-of-the-jQuery-Ready-event</guid>
				
			</item>
			
			<item>
				<title>APIs Everywhere</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/10/30/APIs-Everywhere</link>
				<description>
				
				This morning I heard that Pownce social networking/collaboration system (http://www.pownce.com) had released an API to let developers create applications that could query certain data from Pownce.

This afternoon, I learned through an RSS feed that Meebo (http://www.meebo.com), the site that lets you manage sessions for all of the major IM networks (AIM, MSN, ICQ, etc.), is also releasing an API called Meebo Platform to allow developers to create and then submit applications to run on the Meebo system.

Both Pownce and Meebo are systems that I played with when they first came out, but lost interest in because I wasn&apos;t sure how they would be useful to me.  Now that they have APIs, maybe I can MAKE them useful to me.

This is my first blog entry in a long time...I&apos;ve been preoccupied with other things, and I just wasn&apos;t motivated to update a blog that no one seems to read.  But over the past few days I&apos;ve been feeling a lot more ambitious and energized, and changes may be coming, especially to this blog. 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>Web development</category>
				
				<pubDate>Tue, 30 Oct 2007 14:37:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/10/30/APIs-Everywhere</guid>
				
			</item>
			
			<item>
				<title>ColdFusion 8 is Here</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/7/31/ColdFusion-8-is-Here</link>
				<description>
				
				Adobe released the much anticipated &lt;a href=&apos;http://www.adobe.com/products/coldfusion/&apos; target=&apos;_blank&apos;&gt;ColdFusion 8&lt;/a&gt; yesterday.

Most of the new features of CF 8 were announced in various presentations and analyzed in numerous blogs, so the biggest news besides the announcement itself was the pricing of the Standard and Enterprise editions (U.S. pricing):  $1,299 for Standard ($649 if upgrading), $7,499 for Enterprise ($3,750 if upgrading).

I was hoping that maybe Adobe would make the Standard edition free in the hopes of drawing developers away from PHP and Java.  However, Adobe has always said that they sold more copies of ColdFusion 7 than any previous release of ColdFusion, so I can certainly understand why they wouldn&apos;t want to give up that revenue:  they are a business, after all.

A number of ColdFusion developers were upset about the pricing, especially the pricing of the Enterprise edition.  They&apos;re concerned that they&apos;ll be unable to convince their potential clients to go with ColdFusion when languages like PHP and Java are free in terms of initial cost.

My hope is that Adobe will take some of the revenue generated by CF 8 sales and put that money into a solid advertising campaign, something that will bring attention to CF in the business community and in the larger Internet company.  Ideally, such a campaign should include demonstrations of just how easy it is to accomplish certain tasks in CF.  And they shouldn&apos;t be afraid to make comparisons between how CF lets you accomplish those tasks and how PHP or Java does those same tasks (if they even can!).  I also think those demos should be publicly available on Adobe&apos;s web site, along with other marketing materials, so that these developers who are trying to convince clients to go with ColdFusion can point to these examples to make their case.

Maybe Adobe can even provide some technically-savvy marketing staff whom these developers can call for help with convincing clients.  One of the strengths of ColdFusion is that there is a company that is solidly behind the development and support of the product, and that strength should be leveraged to the utmost.

As for attracting more developers to ColdFusion, that&apos;s more of a problem for Adobe to tackle than it is for ColdFusion developers.  A strong advertising campaign will help generate interest, but Adobe may need to come up with new ways to make ColdFusion appealing to potential developers who probably feel they&apos;d have better job security learning PHP or Java.  I guess time will tell.

There is one other thing I&apos;d like to see happen...the removal of that Warhol-esque portrait of Tim Buntel on the Adobe ColdFusion product page.  The fact that it&apos;s a portrait of Tim is okay; the fact that it looks like a browser image rendering error is not.  Please, somebody fix that! 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Tue, 31 Jul 2007 18:46:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/7/31/ColdFusion-8-is-Here</guid>
				
			</item>
			
			<item>
				<title>ColdFusion 8 Public Beta Available For Download</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/5/30/ColdFusion-8-Public-Beta-Available-For-Download</link>
				<description>
				
				What, you want to know where you can get it?  Off of Adobe Labs, of course:

&lt;a href=&quot;http://labs.adobe.com/technologies/coldfusion8/&quot;&gt;http://labs.adobe.com/technologies/coldfusion8/&lt;/a&gt; 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 30 May 2007 07:28:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/5/30/ColdFusion-8-Public-Beta-Available-For-Download</guid>
				
			</item>
			
			<item>
				<title>Some Notes from the D.C. Scorpio Presentation</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/5/17/Some-Notes-from-the-DC-Scorpio-Presentation</link>
				<description>
				
				(WARNING:  Long post!)

I was at the Scorpio presentation in Washington D.C. last night.  While the presentation didn&apos;t reveal any Scorpio features that haven&apos;t been covered in blog posts from earlier presentations (like &lt;a href=&quot;http://corfield.org/blog/index.cfm/do/blog.entry/entry/Ben_on_Scorpio_at_BACFUG&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.downloadsquad.com/2007/04/24/9-ways-coldfusion-8-will-rule-web-development/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;), I did pick up a few more details about certain things:  [More]
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Thu, 17 May 2007 07:27:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/5/17/Some-Notes-from-the-DC-Scorpio-Presentation</guid>
				
			</item>
			
			<item>
				<title>&amp;lt;cfajaxproxy&amp;gt;:  No More Validation Duplication</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/5/9/ltcfajaxproxygt--No-More-Validation-Duplication</link>
				<description>
				
				ColdFusion 8 is going to include a huge new set of tools and features.  How huge?  Let&apos;s just say ColdFusion bloggers do not lack for material these days.  And every few days another feature is revealed as Adobe folks tour the country with their preview demo.

It was recently revealed that ColdFusion 8 would contain a new tag called &amp;lt;cfajaxproxy&amp;gt; as part of a number of tags in support of AJAX functionality.  Details are vague, but apparently the idea is that this tag lets you call the functions in a ColdFusion CFC file from JavaScript via an AJAX call and return the results of the functions back to the JS function.

That&apos;s a tremendously powerful tool.  Most modern CF applications perform all of their business logic and database transactions through CFC functions, and now all of those algorithms can be made available via AJAX.

The area where this will really help is input validation.  A good web developer knows that data input by a user should be validated before submission to the server by JavaScript, but that the server should also validate the data upon submission in case JavaScript is unavailable/turned off.

That used to mean maintaining two sets of validation functions:  one in JS and one in ColdFusion.

Not anymore.  Now you can write one set of validation routines in your CFC methods and use it for both client-side and server-side validation.  A single set of routines, easy-to-maintain and, because they are written in ColdFusion and not JavaScript, browser-independent.

I can&apos;t wait! 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 09 May 2007 10:34:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/5/9/ltcfajaxproxygt--No-More-Validation-Duplication</guid>
				
			</item>
			
			<item>
				<title>Blueprint for An Emergency SMS Messaging System</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/4/22/Blueprint-for-An-Emergency-SMS-Messaging-System</link>
				<description>
				
				An hour or two after my last post, I talked with the members of my group about possibly implementing an alert system that would send out an SMS text message to faculty, staff, and students at the university, something that would help get the word out should a shooting occur at our university.  That was Tuesday morning.

By Friday afternoon, I had finished two ColdFusion-powered portlets for our still-relatively new university portal:  one that let members of the university enter their SMS information, and another that let select individuals send out an alert message using that information.

The code is unremarkable, but I wanted to share the ideas behind those portlets as inspiration or guidance for others (warning: long post).  [More]
				</description>
				
				<category>Web development</category>
				
				<pubDate>Sun, 22 Apr 2007 11:15:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/4/22/Blueprint-for-An-Emergency-SMS-Messaging-System</guid>
				
			</item>
			
			<item>
				<title>Twitter as Alert System?</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/4/17/Twitter-as-Alert-System</link>
				<description>
				
				Yesterday&apos;s tragedy at Virginia Tech underlined the importance of sending out warnings regarding dangerous situations as quickly as possible and through as many channels as possible.

Listening to the news last night, it sounded like the VT administration used every channel of communication at their disposal:  the campus website, mass e-mails, broadcast phone messages to all campus phones, and a siren system.  The university I work at (the University of Maryland) also has all of those means of getting the word out.

The one communication channel that wasn&apos;t mentioned, however, was cell phones.  That&apos;s not surprising:  I suspect few universities specifically collect cell phone numbers from their students, and most students would probably be hesitant to give their cell number to the university out of privacy concerns.

But in light of yesterday&apos;s events, maybe universities should rethink that issue.  Messages sent to land-line phones and e-mail addresses are only received if the recipient is at their phone or is actively checking e-mail.  A message sent to a cell phone, which folks usually carry with them, has a much better chance of getting the recipient&apos;s attention immediately, even if they are walking between classes.  While not every student owns a cell phone, those that did and received the message could spread the word to the people around them, getting the word out much faster.

So let&apos;s assume universities offered to send emergency messages (and only emergency messages) to students who provided a cell phone number to contact:  how would the university broadcast an alert to those phones?  

A long-term solution would be to put a SMS messaging system in place at the university designed specifically for this purpose (universities like mine that run ColdFusion 7, for example, could build an application using the SMS Gateway service provided by the ColdFusion server).

A short-term solution could be Twitter.  &lt;a href=&quot;http://www.twitter.com&quot;&gt;Twitter&lt;/a&gt; is a social networking tool where you can receive short messages from friends via a web page, IM, or via SMS.

A university could set up a Twitter account to use to send out emergency messages, then instruct students to get a Twitter account (which is free) and &quot;follow&quot; the university Twitter account.  The students can then control whether they receive updates from the university Twitter account via their phone or not.

Granted, this is not what Twitter was designed for, but I think it could serve as a stop-gap measure for getting warnings out until a more robust system is put in place. 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>Technology</category>
				
				<pubDate>Tue, 17 Apr 2007 07:49:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/4/17/Twitter-as-Alert-System</guid>
				
			</item>
			
			<item>
				<title>Another Java Developer Sees Potential in Flex and Apollo</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/4/6/Another-Java-Developer-Sees-Potential-in-Flex-and-Apollo</link>
				<description>
				
				Ed Burnette, a blogger for ZDNet, posted his thoughts about how Flex and Apollo may compete against Java:

&lt;a href=&quot;http://blogs.zdnet.com/Burnette/?p=286&amp;tag=nl.e622&quot;&gt;Is Flash better than Java?&lt;/a&gt; 
				</description>
				
				<category>Apollo</category>
				
				<category>Flex</category>
				
				<pubDate>Fri, 06 Apr 2007 16:57:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/4/6/Another-Java-Developer-Sees-Potential-in-Flex-and-Apollo</guid>
				
			</item>
			
			<item>
				<title>Google Notebook Gets a Facelift</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/3/29/Google-Notebook-Gets-a-Facelift</link>
				<description>
				
				One of the tools I use everyday is Google Notebook:  it&apos;s my repository of cool and informative links that I can access from any computer with Internet access.

Unfortunately, I didn&apos;t put much thought into organizing the structure of my notebook when I first started, so right now I&apos;ve got a pretty unorganized, long list of links, and I was thinking that I needed to spend some time fixing it.

I just opened my notebook via the Firefox Google Notebook extension, and was surprised to see that the interface had changed.  It looked a lot slicker, and now each entry has a little icon with a drop-down menu that lets you edit or move the entry somewhere else in your notebook.  Exactly what I needed! 
				</description>
				
				<category>Miscellaneous</category>
				
				<pubDate>Thu, 29 Mar 2007 13:28:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/3/29/Google-Notebook-Gets-a-Facelift</guid>
				
			</item>
			
			<item>
				<title>UI Tool for Rearraging Items in a List</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/3/21/UI-Tool-for-Rearraging-Items-in-a-List</link>
				<description>
				
				Almost all database-driven web sites have one or more web pages that display a set of related records.  Most of the time, those pages automatically list the records in a particular order (alphabetically, numerically, chronologically, etc.).

There are occasions, however, when administrative users want to be able to manually rearrange the order in which records or items will be displayed.  For example, a news or PR site may want to change the order in which articles are displayed on the main page so that the most important or &quot;hottest&quot; items are at the top.  Or a web-based testing site may want to rearrange the order of the questions on a test.

How do you grant such a request?

Well, for starters, you need to add a sorting or order field to the relevant records, something that the users can change the value of without affecting any of the &quot;real&quot; data in the record.  That&apos;s fairly easy to do.  

The hard part is figuring out how to let your users manipulate those order numbers, because it&apos;s not sufficient to simple let them change each order number one at a time:   what if two records end up with the same order/sorting number (like 5, for example)?  Which record comes first?

You need a way for the users to change the order of an item in relation to the items around it.

After having faced this situation several times, I developed a user-interface tool that allows a user to rearrange the items in a list quickly and easily using JavaScript:  my List Reorder tool.  

I&apos;m making two versions of this tool available for download:  a ColdFusion-powered version with ColdFusion code and functions for rendering the item/record list from the database, and an HTML version that developers can utilize with other server-side languages (PHP, Java, etc.).

You can read more about the tool and download it either by clicking on the List Reorder Tool link in my Downloads box on the right, or by clicking on the link below:

&lt;a href=&apos;http://www.swartzfager.org/blog/listreorder_tool.cfm&apos;&gt;List Reorder Tool&lt;/a&gt; 
				</description>
				
				<category>Web development</category>
				
				<category>JavaScript</category>
				
				<category>Downloads</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 21 Mar 2007 08:26:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/3/21/UI-Tool-for-Rearraging-Items-in-a-List</guid>
				
			</item>
			
			<item>
				<title>Apollo has Arrived!</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/3/19/Apollo-has-Arrived</link>
				<description>
				
				The alpha version of Apollo, the runtime that will allow HTML/CSS/JavaScript and Flash/Flex developers to build cross-platform desktop applications, is now available on Adobe Labs:

&lt;a href=&apos;http://labs.adobe.com/technologies/apollo/&apos;&gt;http://labs.adobe.com/technologies/apollo/&lt;/a&gt; 
				</description>
				
				<category>Apollo</category>
				
				<pubDate>Mon, 19 Mar 2007 05:06:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/3/19/Apollo-has-Arrived</guid>
				
			</item>
			
			<item>
				<title>Tired of the Open Source/Closed Source Conflict</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/3/16/Tired-of-the-Open-SourceClosed-Source-Conflict</link>
				<description>
				
				Yesterday I ran across Ryan Stewart&apos;s blog post &lt;a href=&quot;http://blogs.zdnet.com/Stewart/?p=308&quot; target=&quot;_blank&quot;&gt;Open web advocates: Get off your high horse&lt;/a&gt;, where he took another blogger, Brendan Eich, to task about a post he wrote, &lt;a href=&quot;http://weblogs.mozillazine.org/roadmap/archives/2007/03/the_open_web_and_its_adversari.html&quot; target=&quot;_blank&quot;&gt;The Open Web and Its Adversaries&lt;/a&gt;, defending standard web technologies against the perceived encroachment of proprietary technologies like Flex.

A number of folks took Ryan to task for daring to defend those proprietary technologies.  I was so annoyed over the whole discussion that I had to take the time to express my thoughts.  This is what I wrote:  [More]
				</description>
				
				<category>Web development</category>
				
				<pubDate>Fri, 16 Mar 2007 06:17:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/3/16/Tired-of-the-Open-SourceClosed-Source-Conflict</guid>
				
			</item>
			
			<item>
				<title>Java.net Article About Why Java Developers Should Check Out ColdFusion</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/2/28/Javanet-Article-About-Why-Java-Developers-Should-Check-Out-ColdFusion</link>
				<description>
				
				Ben Forta posted about this article on his &lt;a href=&apos;http://www.forta.com/blog&apos;&gt;blog&lt;/a&gt;:

&lt;a href=&apos;http://today.java.net/pub/a/today/2007/02/27/coldfusion-for-jsp-developers.html&apos;&gt;ColdFusion for JSP Developers&lt;/a&gt;

I think it&apos;s a very well-written article addressed to those Java developers who have dismissed ColdFusion as a &quot;lightweight&quot; development language in the past (something of a sore point to ColdFusion folks, as you can imagine).

I especially like the point he made that it doesn&apos;t have to be &quot;either/or&quot;:  you can mix ColdFusion and Java as much as you want or as much as you need to. 
				</description>
				
				<category>ColdFusion</category>
				
				<category>Web development</category>
				
				<pubDate>Wed, 28 Feb 2007 12:34:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/2/28/Javanet-Article-About-Why-Java-Developers-Should-Check-Out-ColdFusion</guid>
				
			</item>
			
			<item>
				<title>Rough Apollo Timetable</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/2/28/Rough-Apollo-Timetable</link>
				<description>
				
				The word out of Adobe&apos;s Engage conference is that Apollo will appear on Adobe Labs sometime during the first half of this year, and that the 1.0 version will be released during the second half of the year.

I don&apos;t know if I&apos;ll have any practical uses for Apollo by that time, but I look forward to getting a chance to play around with it. 
				</description>
				
				<category>Apollo</category>
				
				<pubDate>Wed, 28 Feb 2007 07:36:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/2/28/Rough-Apollo-Timetable</guid>
				
			</item>
			
			<item>
				<title>Apollo:  The Possibilities</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/2/24/Apollo--The-Possibilities</link>
				<description>
				
				Just finished reading an excellent blog post where the blogger put a great deal of thought into what sorts of Apollo apps folks will likely create:

&lt;a href=&apos;http://www.weblycan.com/blog/2007/02/_apollo_what_is_it_good_for_ab.html&apos;&gt;http://www.weblycan.com/blog/2007/02/_apollo_what_is_it_good_for_ab.html&lt;/a&gt; 
				</description>
				
				<category>Apollo</category>
				
				<pubDate>Sat, 24 Feb 2007 10:12:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/2/24/Apollo--The-Possibilities</guid>
				
			</item>
			
			<item>
				<title>Marrying myFeedz to Yahoo Pipes (Warning: Illegal In Some States)</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/2/23/Marrying-myFeedz-to-Yahoo-Pipes-Warning-Illegal-In-Some-States</link>
				<description>
				
				I wasn&apos;t happy with the sparse results I was getting from my CF/Flex/Apollo/Adobe Yahoo pipe, so I decided to see what would happen if I configured myFeedz to find CF/Flex/Apollo/Adobe articles for me and then included those results in the Yahoo Pipe.

So essentially I fed one news aggregator into another news aggregator...is that wrong?  :)

Regardless, the pipe does provide more results now. 
				</description>
				
				<category>Miscellaneous</category>
				
				<pubDate>Fri, 23 Feb 2007 12:30:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/2/23/Marrying-myFeedz-to-Yahoo-Pipes-Warning-Illegal-In-Some-States</guid>
				
			</item>
			
			<item>
				<title>myFeedz:  Adobe&apos;s Answer to Yahoo Pipes</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/2/19/myFeedz--Adobes-Answer-to-Yahoo-Pipes</link>
				<description>
				
				I had just finished creating my &lt;a href=&quot;http://pipes.yahoo.com&quot;&gt;Yahoo Pipe&lt;/a&gt; for finding articles related to ColdFusion, Flex, Apollo, and Adobe (available as a link in my Links box).

I ran it to see if any articles came up.  The very first article was about myFeedz.

&lt;a href=&quot;http://www.myfeedz.com/&quot;&gt;myFeedz&lt;/a&gt; is a new tool from &lt;a href=&quot;http://labs.adobe.com&quot;&gt;Adobe Labs&lt;/a&gt; which also lets you create custom news feeds.  Unlike Yahoo Pipes, myFeedz lets you configure your feeds using tags, and it lets you save the results for later viewing (a particularly nice feature).

Now I have to go and make some custom feeds over at myFeedz. 
				</description>
				
				<category>Miscellaneous</category>
				
				<pubDate>Mon, 19 Feb 2007 08:00:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/2/19/myFeedz--Adobes-Answer-to-Yahoo-Pipes</guid>
				
			</item>
			
			<item>
				<title>Yahoo Pipes:  The Ultimate News Aggregator?</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/2/16/Yahoo-Pipes--The-Ultimate-News-Aggregator</link>
				<description>
				
				When I first heard about Yahoo Pipes, a little more than a week ago, I didn&apos;t get it.  Maybe the explanation I read didn&apos;t quite communicate what it was all about, or maybe I wasn&apos;t paying close enough attention:  for whatever reason, it slipped on by.

Then I heard about it again on the &lt;a href=&quot;http://www.twit.tv/TWiT&quot; target=&quot;_blank&quot;&gt;TWiT&lt;/a&gt; (This Week in Tech) podcast, and when they described it in their typical simple and straighforward manner, I got it:  this was something truly unique, and very cool to boot.

So what is it?  Yahoo Pipes (&lt;a href=&quot;http://pipes.yahoo.com&quot; target=&quot;_blank&quot;&gt;pipes.yahoo.com&lt;/a&gt;) is a web application that lets you build custom news/information feeds out of numerous existing feeds using drag-and-drop objects.  Think of it as a mashup system for RSS and Atom feeds.  Instead of using a news aggregator program to pull down several different RSS feeds about technology, you could build a pipe using Yahoo Pipes that would combine all of those feeds together into one.  You could even apply a filter to it:  you could configure it so it would only display the items from those feeds containing &quot;ColdFusion&quot; in the title or the body of the articles/posts.

The graphical interface is truly incredible.  Programmers and non-programmers alike can build their pipes simply by adding action modules and tying them together.  It&apos;s hard to describe in words, but you could build a simply pipe by starting with a Fetch module that fetches the feed from a URL you supply, tying it to a Filter module which you configure to only permit items containing your search term through, and then tying the Filter module to the Pipe Output module which returns the results.  Once you&apos;ve finished creating your pipe, you can save it so you can access it via a unique URL and even publish it for public consumption.

I encourage everyone to go check it out.  I think I&apos;m going to create a pipe that search the generic tech sites for postings about ColdFusion and Flex.  If I do, I may post a link to that pipe in my Links module on the right. 
				</description>
				
				<category>Miscellaneous</category>
				
				<category>Technology</category>
				
				<pubDate>Fri, 16 Feb 2007 07:32:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/2/16/Yahoo-Pipes--The-Ultimate-News-Aggregator</guid>
				
			</item>
			
			<item>
				<title>Customizing the Wheel</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/2/6/Customizing-the-Wheel</link>
				<description>
				
				This week I&apos;ve read a few blog posts debating which is better: repurposing existing code or software written by someone else for use in your application, or writing your own code to meet that particular need.

A lot of folks prefer the first route, and the programming concepts promoted today (encapsulation, modularity, etc.) are geared towards making code components that can be copied from one application to another.

But what happens when the code you&apos;re trying to utilize doesn&apos;t quite fit your needs?  That&apos;s when the headaches can begin.

Jason Kolb points out in his blog that one reason why programmers don&apos;t like to use other people&apos;s code is that they  either don&apos;t trust the quality of the code or they feel that it will take as much time or more to revamp the code to meet their specific needs as it would take them to build their own version from scratch.  You can read his blog entry here:

&lt;a href=&apos;http://www.typepad.com/t/trackback/7788027&apos;&gt;Why Programmers Don&apos;t Trust Other Programmers&lt;/a&gt;

I definitely fall into the &quot;do-it-yourself&quot; camp, with the occasional exception (like the software that powers this blog). 
				</description>
				
				<category>Web development</category>
				
				<pubDate>Tue, 06 Feb 2007 13:59:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/2/6/Customizing-the-Wheel</guid>
				
			</item>
			
			<item>
				<title>Interesting FireFox bug</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/2/5/Interesting-FireFox-bug</link>
				<description>
				
				I needed to draw a red vertical line, and I thought I&apos;d be lazy and just distort a regular &lt;hr&gt; tag so that it would look vertical.  So first I manipulated the size and width attributes:

&lt;code&gt;
&lt;hr size=&quot;30&quot; width=&quot;2&quot; /&gt;
&lt;/code&gt;

That worked just fine:

&lt;hr size=&quot;30&quot; width=&quot;2&quot; /&gt;

...but, when I tried to give it a color:

&lt;code&gt;
&lt;hr size=&quot;30&quot; width=&quot;2&quot; color=&quot;red&quot; /&gt;
&lt;/code&gt;

This is the result (if you&apos;re using IE, this won&apos;t look odd at all):

&lt;hr size=&quot;30&quot; width=&quot;2&quot; color=&quot;red&quot; /&gt;

Wild, huh? 
				</description>
				
				<category>Miscellaneous</category>
				
				<pubDate>Mon, 05 Feb 2007 07:38:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/2/5/Interesting-FireFox-bug</guid>
				
			</item>
			
			<item>
				<title>Choosing Flex Over Java for Developing Rich Internet Applications</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/1/31/Choosing-Flex-Over-Java-for-Developing-Rich-Internet-Applications</link>
				<description>
				
				Ben Forta posted a link to this article on his &lt;a href=&apos;http://www.forta.com/&apos;&gt;blog&lt;/a&gt;.  It&apos;s written by a Java developer who has decided that Java is no longer a good option for writing RIAs (Rich Internet Applications) and that Flex is the way to go.  He explains his reasons in detail in his blog post:

&lt;a href=&apos;http://www.artima.com/weblogs/viewpost.jsp?thread=193593&apos;&gt;Hybridizing Hybridizing Java&lt;/a&gt; 
				</description>
				
				<category>Flex</category>
				
				<pubDate>Wed, 31 Jan 2007 12:56:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/1/31/Choosing-Flex-Over-Java-for-Developing-Rich-Internet-Applications</guid>
				
			</item>
			
			<item>
				<title>Yet Another Forum for CF Questions:  &lt;cf&gt;Answers.org</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/1/28/Yet-Another-Forum-for-CF-Questions--cfAnswersorg</link>
				<description>
				
				I haven&apos;t blogged in quite a while, partly because I&apos;ve been busy (as usual) but mostly because I haven&apos;t felt all that motivated.

I&apos;d feel guilty about it if someone was actually reading this blog.  :)

Thought I would write about the latest question-and-answer forum for ColdFusion questions: &lt;cf&gt;Answers.org (&lt;a href=&apos;http://www.cfanswers.org&apos; target=&apos;_blank&apos;&gt;http://www.cfanswers.org&lt;/a&gt;).  This new forum joins the two other major ColdFusion forums (&lt;a href=&apos;http://www.houseoffusion.com/groups/CF-Talk/&apos;&gt;CF-Talk&lt;/a&gt; and the &lt;a href=&apos;http://www.adobe.com/cfusion/webforums/forum/index.cfm?forumid=1&apos;&gt;Adobe ColdFusion Support Forums&lt;/a&gt;) as a place where ColdFusion developers of all levels can ask for help and insight from fellow developers.  

What&apos;s different about &lt;cf&gt;Answers.org is that it lets users rate the quality of the answers provided, so when there&apos;s more than one way to solve a problem the community can throw their weight behind a particular solution as a best practice.  It&apos;s a good use of the &quot;wisdom of the crowd&quot; concept that makes up part of the &lt;a href=&apos;http://oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html&apos;&gt;Web 2.0&lt;/a&gt; movement. 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Sun, 28 Jan 2007 15:11:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/1/28/Yet-Another-Forum-for-CF-Questions--cfAnswersorg</guid>
				
			</item>
			
			<item>
				<title>Using Conditional CSS Selectors</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/1/5/Using-Conditional-CSS-Selectors</link>
				<description>
				
				The CSS I use in my applications is pretty straightforward.  I stick with the basics, assigning styles based on element id, classes, and pseudo-classes.

When situations arise that require similar page elements to utilize differnet styles, I use ColdFusion or JavaScript code to evaluate the condition and assign the appropriate CSS class.

This article I found today is an excellent description about how to use CSS selectors to act only on page elements that meet a certain description--no JavaScript or server-side coding required:

&lt;a href=&apos;http://www.askthecssguy.com/2006/12/showing_hyperlink_cues_with_cs_1.html&apos;&gt;Showing Hyperlink Cues with CSS&lt;/a&gt;

Since he makes a point of saying these selectors will work in IE 7, I can only assume that they won`t work (or at least not well) in IE 6, so you may not want to use these selectors unless you have a backup plan for mimicking the end-result using another method or you know your audience has upgraded to IE 7.  Still, something worth knowing and a feature to look forward to as IE 6 rides off into the sunset. 
				</description>
				
				<category>CSS</category>
				
				<pubDate>Fri, 05 Jan 2007 17:36:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/1/5/Using-Conditional-CSS-Selectors</guid>
				
			</item>
			
			<item>
				<title>Catching Errors When Consuming RSS Feeds</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/1/4/Catching-Errors-When-Consuming-RSS-Feeds</link>
				<description>
				
				Yesterday, &lt;a href=&apos;http:www.forta.com/blog&apos;&gt;Ben Forta&lt;/a&gt; blogged about an article by Ben Cortese on &lt;a href=&apos;http://www.webpronews.com/blogtalk/blogtalk/wpn-58-20070103ConsumingRSSFeedsWithColdFusion.html&apos;&gt;Consuming RSS Feeds with ColdFusion&lt;/a&gt;.

The article does a great job of providing simple, straightforward code for accessing an RSS feed and displaying it to the user.  However, a few more lines of code would shield the user from errors caused by the feed not being available or by the malformed content within the feed.

As the article pointed out, you can retrieve the RSS feed from the remote site through the use of the &lt;cfhttp&gt; tag, and then you can convert the XML in the feed to an XML object using the xmlParse function.  If you enclose each of these steps within a &lt;cftry&gt; block, you can intercept the errors and give your user a simple error message that explains there`s a problem with the feed.  [More]
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Thu, 04 Jan 2007 09:03:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/1/4/Catching-Errors-When-Consuming-RSS-Feeds</guid>
				
			</item>
			
			<item>
				<title>Flex Earns InfoWorld Technology of the Year Award in Application Development</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/1/4/Flex-Earns-InfoWorld-Technology-of-the-Year-Award-in-Application-Development</link>
				<description>
				
				&lt;a href=&apos;http://blog.digitalbackcountry.com/&apos;&gt;Ryan Stewart&lt;/a&gt; found the &lt;a href=&apos;http://www.infoworld.com/slideshow/2007/01/25-2007_technology-8.html&apos;&gt;InfoWorld page&lt;/a&gt; and posted it on his blog.  It&apos;s a nice bit of recognition for Flex.  Even though I haven&apos;t personally done anything with Flex other than dabble a bit, I think Flex and the upcoming Apollo will have quite an impact on web development this year. 
				</description>
				
				<category>Flex</category>
				
				<pubDate>Thu, 04 Jan 2007 07:59:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/1/4/Flex-Earns-InfoWorld-Technology-of-the-Year-Award-in-Application-Development</guid>
				
			</item>
			
			<item>
				<title>Presenting a User Interface Tool for Adding Members to a Set</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2007/1/1/Presenting-a-User-Interface-Tool-for-Adding-Members-to-a-Set</link>
				<description>
				
				Happy New Year!

One of the reasons I started this blog was to have a place where I could share some of the tools I&apos;ve developed for my various web applications.  Despite a hectic holiday season and sporadic bursts of sheer laziness, I managed to put the finishing touches on one of these tools, and it&apos;s now ready to share.

My Member/Set Tool is a user interface tool that lets you add member items to a set or group in any order you wish.  To read about the tool, simply click on the &lt;a href=&apos;http://www.swartzfager.org/blog/memberset_tool.cfm&apos;&gt;Member/Set Tool&lt;/a&gt; link in the &lt;strong&gt;Downloads&lt;/strong&gt; box to the right.

If you like the tool and would like me to polish some other similar tools I&apos;ve developed and make them available, please leave a comment to that effect so I know there&apos;s some interest:  it&apos;ll help motivate me.  :) 
				</description>
				
				<category>JavaScript</category>
				
				<category>Downloads</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Mon, 01 Jan 2007 15:28:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2007/1/1/Presenting-a-User-Interface-Tool-for-Adding-Members-to-a-Set</guid>
				
			</item>
			
			<item>
				<title>Engaging in Problems Instead of Finding Solutions</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2006/12/11/Engaging-in-Problems-Instead-of-Finding-Solutions</link>
				<description>
				
				Every once in awhile, I`m reminded that my main motivation for becoming a web application developer is not to build applications but to build solutions.  I enjoy creating solutions to problems and hearing the solutions others come up with.  On the flipside, I hate hearing stories where folks engage in the practice of responding to problems by creating new problems.

What inspired this thinking today was a non-tech story I heard on the news this morning.  Seattle&apos;s main airport, Sea-Tac, was decorated with the usual holiday decorations, including several large Christmas trees in some well-trafficed areas.  A prominent rabbi in the Seattle area asked the airport to include a menorah next to one or two of the trees.  The airport apparently said no, and apparently the rabbi hinted that he might bring a lawsuit over the issue.  

Airport officials decided that the best course of action, the &quot;solution,&quot; was to take down all of the prominent Christmas trees.  This decision has upset a lot of people, including the rabbi, who said that this wasn`t the result he was looking for.  [More]
				</description>
				
				<category>Miscellaneous</category>
				
				<pubDate>Mon, 11 Dec 2006 07:18:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2006/12/11/Engaging-in-Problems-Instead-of-Finding-Solutions</guid>
				
			</item>
			
			<item>
				<title>Using a Compound List to Simulate a Compound Boolean Statement</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2006/12/8/Using-a-Compound-List-to-Simulate-a-Compound-Boolean-Statement</link>
				<description>
				
				I was once asked to build an application that would use the demographic information submitted by would-be students to ensure that they were eligible to participate in certain social and cultural discussion sections.  Each discussion section would have a number of enrollment rules that would not only determine which students were eligible, but would also set a limit on how many students could enroll for that discussion under that rule.  For example, one of these enrollment rules would say &quot;allow 5 students who are freshman or sophomores and were born in the U.S. and are atheists or agnostics and who grew up in a rural or suburban area to enroll in this discussion.&quot;

I knew I had to find a way to handle these complex evaluations in a flexible manner without resorting to multiple layers of if/else statements.  Fortunately, I figured out a way to use compound lists to evaluate a student`s eligibility.  [More]
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Fri, 08 Dec 2006 07:29:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2006/12/8/Using-a-Compound-List-to-Simulate-a-Compound-Boolean-Statement</guid>
				
			</item>
			
			<item>
				<title>Scientists Engineer Blood Protein to Split Water Into Hydrogen and Oxygen</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2006/12/2/Scientists-Engineer-Blood-Protein-to-Split-Water-Into-Hydrogen-and-Oxygen</link>
				<description>
				
				I like keeping up with scientific breakthroughs.  The Imperial College of London has reported that scientists were able to replace the iron atom inside of a protein found in blood (albumin) with a zinc atom, and that when combined with an oxgen-carrying molecule called porphyrin it forms a new molecule that captures light energy and splits water into hydrogen and oxygen.  The article is available at &lt;a href=&apos;http://www3.imperial.ac.uk/newsandeventspggrp/imperialcollege/newssummary/news_1-12-2006-11-4-23?newsid=3016
&apos;&gt;http://www3.imperial.ac.uk/newsandeventspggrp/imperialcollege/newssummary/news_1-12-2006-11-4-23?newsid=3016&lt;/a&gt;.

Imagine what could be done if these proteins could be mass-produced.  You could build large hydrogen plants with clear glass or plastic tanks powered by sunlight.  You could create underwater habitats powered by hydrogen that also obtained fresh oxygen from the surrounding seawater.  Maybe diving gear could use the proteins to replenish the oxygen supply in the diver`s tank.  It`s an exciting idea. 
				</description>
				
				<category>Science News</category>
				
				<pubDate>Sat, 02 Dec 2006 15:34:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2006/12/2/Scientists-Engineer-Blood-Protein-to-Split-Water-Into-Hydrogen-and-Oxygen</guid>
				
			</item>
			
			<item>
				<title>Better Late Than Never</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2006/12/1/Better-Late-Than-Never</link>
				<description>
				
				I was surprised and amused to see the following story listed on the &lt;a href=&apos;http://www.umd.edu&apos;&gt;University of Maryland home page&lt;/a&gt;:

&lt;a href=&apos;http://www.newsdesk.umd.edu/uniini/release.cfm?ArticleID=1374&apos;&gt;Searchable Online Database of Experts Debuts&lt;/a&gt;

I build that application for the communication/marketing folks in early 2005, and it has been available to the public for almost as long.

Maybe they finally felt that they had enough experts in the database to finally give it some publicity (over 600 now). 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Fri, 01 Dec 2006 17:49:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2006/12/1/Better-Late-Than-Never</guid>
				
			</item>
			
			<item>
				<title>Is There Such a Thing as Too Much OO?</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2006/11/30/Is-There-Such-a-Thing-as-Too-Much-OO</link>
				<description>
				
				It`s been a busy day, so I decided to look through my &lt;a href=&apos;http://www.google.com/notebook/&apos;&gt;Google Notebook&lt;/a&gt; collection of links for something that could be a topic for my &lt;em&gt;post du jour&lt;/em&gt;.

Steve Yegge`s post &lt;a href=&apos;http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html&apos;&gt;&amp;quot;Execution in the Kingdom of Nouns&amp;quot;&lt;/a&gt; is a humorous argument against pure object-oriented programming.  Although it`s directed at the Java community, I ended up putting it in my Notebook because of all of the discussion that was going on in the ColdFusion community at the time about making ColdFusion more like Java (a discussion that is still ongoing). 
				</description>
				
				<category>Miscellaneous</category>
				
				<pubDate>Thu, 30 Nov 2006 20:51:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2006/11/30/Is-There-Such-a-Thing-as-Too-Much-OO</guid>
				
			</item>
			
			<item>
				<title>Who Uses ColdFusion? Let`s Name Some Names...</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2006/11/29/Who-Uses-ColdFusion-Lets-Name-Some-Names</link>
				<description>
				
				Saw this on &lt;a href=&apos;http://ray.camdenfamily.com/&apos;&gt;Ray Camden`s blog,&lt;/a&gt; who saw it on &lt;a href=&apos;http://www.talkingtree.com/blog/index.cfm&apos;&gt;Steve Erat`s blog&lt;/a&gt; (what can I say: word gets around):

&lt;a href=&apos;http://www.adobe.com/products/coldfusion/proven/&apos;&gt;World`s Top Companies Use ColdFusion MX&lt;/a&gt;

When folks talk about enterprise-class web programming languages, they usually focus on Java or .NET, either because they are unaware of the prevalence and power of ColdFusion or because they are aware of ColdFusion and don`t want the word to get out.  I`m glad that Adobe published this list to raise awareness of ColdFusion`s impact on the web application world.

One site that was not on the list that I think is a good example of an enterprise-class website is the &lt;a href=&apos;http://www.voanews.com/english/portal.cfm&apos;&gt;Voice of America&lt;/a&gt; website.  Their site probably gets hundreds of thousands of hits a day from all over the world.  One of the coolest things about the site is the drop-down box on the home page where you can choose to see news pages rendered in dozens of different languages (including Creole). 
				</description>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 29 Nov 2006 22:10:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2006/11/29/Who-Uses-ColdFusion-Lets-Name-Some-Names</guid>
				
			</item>
			
			<item>
				<title>Web Developers and User Interfaces</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2006/11/29/Web-Developers-and-User-Interfaces</link>
				<description>
				
				Web application developers (the folks who program the functionality of the web application) are lousy user interface developers.  That`s an assertion one hears a lot in the web designer and developer community, and was repeated again today in to an article entitled &lt;a href=&apos;http://www.codinghorror.com/blog/archives/000734.html&apos;&gt;&amp;quot;This Is What Happens When You Let Developers Create UI.&amp;quot;&lt;/a&gt;  

But in application development, as in life, there are no absolutes.  I`m sure there are many web developers like me who have to handle every aspect of the development process, including the design of the UI.  [More]
				</description>
				
				<category>Web development</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 29 Nov 2006 14:46:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2006/11/29/Web-Developers-and-User-Interfaces</guid>
				
			</item>
			
			<item>
				<title>Welcome to my blog</title>
				<link>http://www.swartzfager.org/blog/index.cfm/2006/11/28/Welcome-to-my-blog</link>
				<description>
				
				Hello!  My name is Brian, and welcome to my blog.

Starting tomorrow, I`ll be using this blog to share my knowledge and experience as an intermediate-level ColdFusion web application developer, any resources I come across that I think would be useful to other web application developers, and ...well...anything else I think is worth talking about.  :)

Until then, check out the Links section over on the right for links to some ColdFusion and web development resources. 
				</description>
				
				<category>Miscellaneous</category>
				
				<pubDate>Tue, 28 Nov 2006 20:25:00 -0400</pubDate>
				<guid>http://www.swartzfager.org/blog/index.cfm/2006/11/28/Welcome-to-my-blog</guid>
				
			</item>
			</channel></rss>