<?xml version="1.0" encoding="utf-8"?>
			
			<rss version="2.0">
			<channel>
			<title>Brian Swartzfager&apos;s Blog - Web development</title>
			<link>http://www.swartzfager.org/blog/index.cfm</link>
			<description>blog</description>
			<language>en-us</language>
			<pubDate>Fri, 03 Sep 2010 12:35:01 -0400</pubDate>
			<lastBuildDate>Sat, 09 May 2009 14:36: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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>
			</channel></rss>