<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>RSS feed for InstantSpot site Aaron Lynch</title><link>http://ajlcom.instantspot.com</link><description>ColdFusion and some other stuff</description><language>en-us</language><copyright>This work is Copyright &#xA9; 2008 by Aaron Lynch</copyright><generator>RSSVille ColdFusion FeedMaker, version 1.0</generator><pubDate>Fri, 21 Nov 2008 23:40:38 GMT</pubDate><item><title>Combine and compress your javascript files:  Scriptalizer.com</title><link>http://ajlcom.instantspot.com/blog/2008/07/10/Combine-and-compress-your-javascript-files--Scriptalizercom</link><description>&lt;p&gt;After creating a custom tag and minifier component (using YUICompressor) I decided it would be a pretty neat service to offer to everybody.&amp;nbsp; Last night I scrounged up a website and called it &lt;a href=&quot;http://www.scriptalizer.com/&quot;&gt;Scriptalizer.com&lt;/a&gt;.&amp;nbsp;&lt;/p&gt; &lt;p&gt;If you want to test what cf_scriptalizer does to your javascript before you actually use the tag, you can try out the generated script provided by &lt;a href=&quot;http://www.scriptalizer.com/&quot;&gt;Scriptalizer.com&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;NOTE: All source files uploaded is immediately deleted once generated.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><pubDate>Thu, 10 Jul 2008 13:37:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2008/07/10/Combine-and-compress-your-javascript-files--Scriptalizercom</guid><category>ColdFusion,Internet,Web Development,Javascript</category></item><item><title>Problem: WAY too many javascript files. Solution: cf_scriptalizer</title><link>http://ajlcom.instantspot.com/blog/2008/07/09/Problem-WAY-too-many-javascript-files-Solution-cfscriptalizer</link><description>Information about a custom tag to combine and compress javascript files.</description><pubDate>Wed, 09 Jul 2008 15:44:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2008/07/09/Problem-WAY-too-many-javascript-files-Solution-cfscriptalizer</guid><category>ColdFusion,Internet,Web Development,Javascript</category></item><item><title>Making progress with GIMP</title><link>http://ajlcom.instantspot.com/blog/2008/01/29/Making-progress-with-GIMP</link><description>&lt;p&gt;I ran across a tutorial on how to create &amp;quot;Vista&amp;quot; like buttons with GIMP.&amp;nbsp; If you have ever tried to use GIMP to do anything, you know how much different it is than most other graphics editors out there.&amp;nbsp; For the longest time I just thought it was just terrible...but that was before I found some examples on how to use it.&lt;/p&gt; &lt;p align=&quot;center&quot;&gt;&lt;img width=&quot;320&quot; height=&quot;200&quot; src=&quot;/userfiles/073006/90/vistabutton.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt; &lt;p align=&quot;left&quot;&gt;I&apos;m happy to report that by following along with this tutorial (&lt;a href=&quot;http://gimp-tutorials.net/node/111&quot;&gt;read it here&lt;/a&gt;) that I was able to duplicate these buttons.&amp;nbsp; Ok, so GIMP might not be so bad...what else does it do?&lt;/p&gt; &lt;p align=&quot;left&quot;&gt;I then dug some more and found another cool tutorial on created &amp;quot;old&amp;quot; photos.&amp;nbsp;&lt;/p&gt; &lt;p align=&quot;center&quot;&gt;&lt;img width=&quot;458&quot; height=&quot;345&quot; src=&quot;/userfiles/073006/90/gimpoldphoto.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt; &lt;p align=&quot;left&quot;&gt;Once again...success!&amp;nbsp; I got reallly close on this one, with a pic of my son.&amp;nbsp; In this tutorial (&lt;a href=&quot;http://gimp-tutorials.net/oldphoto&quot;&gt;read it here&lt;/a&gt;), I realized that there is a whole world of add-ons for GIMP.&amp;nbsp; Some brushes from &lt;a href=&quot;http://silence.carchive.net/?section=resources.php&quot;&gt;here&lt;/a&gt; were used to create the distressed looking scratches on the image.&amp;nbsp;&lt;/p&gt; &lt;p align=&quot;left&quot;&gt;For more GIMP Tutorials, you can check out &lt;a href=&quot;http://gimp-tutorials.net&quot;&gt;gimp-turorials.net&lt;/a&gt;&lt;/p&gt; &lt;p align=&quot;left&quot;&gt;&amp;nbsp;&lt;/p&gt; &lt;p align=&quot;left&quot;&gt;&amp;nbsp;&lt;/p&gt;</description><pubDate>Tue, 29 Jan 2008 20:07:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2008/01/29/Making-progress-with-GIMP</guid><category>Linux,Web Development,Gimp</category></item><item><title>Peter Bell For Dummies : DSLs, Application Generation, and more.</title><link>http://ajlcom.instantspot.com/blog/2007/07/02/Peter-Bell-For-Dummies--DSLs-Application-Generation-and-more</link><description>&lt;p&gt;  Ok, so I need to get something off my chest.  Reading Peter Bell (and now that I finally met him in person, listening to him) makes me feel a little dumb sometimes.  I can clearly understand that he is speaking English, but sometimes it feels that I must have just skipped that day in word-learning class.&lt;br /&gt;  &lt;br /&gt;  I have been intrigued by his application generation topics since he first started blogging just over a year ago, and until recently it was more of a mystical fantasy world that only Peter Bell had access to.  Now, hopefully I am not too far off target in my understanding but I think things are beginning to sink in and light bulbs are beginning to click on in my head.  &lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;  DSLs&lt;/strong&gt;&lt;br /&gt;  Domain Specific Language?  What the heck?!  Just when I thought I was getting a handle on more advanced topics in CF, people (not just Peter by the way) have to start kicking this one around.  The way I understand it, DSLs are a way to describe, lets say, your model.  In other words,  we should be able to describe the objects in our system without introducing the specifics of how this code will look in whatever language your application is generated in (ha! I am talking about generating applications).  &lt;br /&gt;  &lt;/p&gt;  &lt;p&gt;  Basically this concepts aids in&amp;nbsp; separating &lt;strong&gt;What you mean, from how you say it&lt;/strong&gt;.&amp;nbsp;  &lt;/p&gt;  &lt;p&gt;  For example: Lets say we want a Person object, and for this example I will use XML to write the DSL.&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;objects&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;object&amp;nbsp; name=&amp;rdquo;Person&amp;rdquo;&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attributes&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attribute name=&amp;rdquo;FirstName&amp;rdquo;&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;length value = &amp;ldquo;50&amp;rdquo;/&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;type value = &amp;ldquo;varchar&amp;rdquo;/&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;default value = &amp;ldquo;&amp;rdquo;/&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/attribute&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attribute name=&amp;rdquo;LastName&amp;rdquo;&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;length value = &amp;ldquo;50&amp;rdquo;/&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;type value =&amp;nbsp; &amp;ldquo;varchar&amp;rdquo;/&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;default value =&amp;nbsp; &amp;ldquo;&amp;rdquo;/&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/attribute&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attribute name=&amp;rdquo;DateTimeUpdated&amp;rdquo;&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;length value =&amp;nbsp; &amp;ldquo;&amp;rdquo;/&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;type value =&amp;nbsp; &amp;ldquo;datetime&amp;rdquo;/&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;default value =&amp;nbsp; &amp;ldquo;Now&amp;rdquo;/&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/attribute&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/attributes&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;relationships&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;relationship name=&amp;rdquo;Group&amp;rdquo;&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;type value =&amp;nbsp; &amp;rdquo;OneToMany&amp;rdquo;/&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;key value =&amp;nbsp; &amp;ldquo;GroupId&amp;rdquo;/&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/relationship&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/relationships&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/object&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/objects&amp;gt;&lt;br /&gt;  &lt;/p&gt;  &lt;p&gt;  Now, obviously this is very simple and just written on the fly (literally...I am on an airplane right now), but it should show that we are describing things about this Person object without saying anything about a programming language that will eventually be used.  &lt;br /&gt;  This example might look slightly familiar if you have used any of the ORM frameworks, that is because their configuration files are a good example of a DSL. &lt;br /&gt;  &lt;br /&gt;  So, Ok I have an XML document that details every last object in my system, so what?  Well, one thing that I know I lose sight of is that there are other programming languages out there in this world (or so I&amp;#39;ve heard) and we may want to document our model language agnostic, so that if we ever need to generate this application in some other, more inferior, language we could. &lt;br /&gt;  &lt;br /&gt;  Two things that this application generator are going to do is:&lt;br /&gt;  &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Create the model - in our case the bean, DAO, gateway, service.  In my case, it would be all CFC&amp;#39;s, but what if you wanted Ruby or .Net or ____.&lt;/li&gt;   &lt;li&gt;Generate database creation scripts.  Another good example of why we want to create generic documentation about our objects.  We will need to create different db scripts based on the DBRMS of our choice.&lt;/li&gt;  &lt;/ol&gt;  &lt;p&gt;  Hopefully I am not dumbing this down too much, but I am positive I am still missing some of the major concepts that Peter Bell has been laying down on this topic.  But I think the general idea, is that we create this meta-data about our objects and then use that information to generate code/db scripts/etc using our &amp;ldquo;Translators&amp;rdquo; &amp;ldquo;Generators&amp;rdquo; etc for our specific needs or language.   &lt;/p&gt;  &lt;p&gt;  So, to extend just our basic model, table creation concepts.  Lets say we now need to document functionality in a way that avoids being language specific.    &lt;/p&gt;  &lt;p&gt;  Maybe as part of our object definitions we might have a functions node:&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;object name=&amp;rdquo;Person&amp;rdquo;&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attributes&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attribute /&amp;gt;&amp;nbsp; &lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/attributes&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;methods&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;method name=&amp;rdquo;Authenticate&amp;rdquo;&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;validate attribute=&amp;rdquo;Firstname&amp;rdquo;/&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;validate attribute=&amp;rdquo;LastName&amp;rdquo;/&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/method&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/methods&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/object&amp;gt;  &lt;/p&gt;  &lt;p&gt;  &amp;nbsp;  &lt;br /&gt;  (Obviously we probably wouldn&amp;#39;t need a way to authenticate a Person by their first and last name, but I just stayed with the same object we talked about above. ) &lt;br /&gt;  &lt;br /&gt;  So, in this case could assume that we translate this new optional method node and create a method in our PersonService.cfc perhaps called  &amp;ldquo;AuthenticatePerson&amp;rdquo;  or maybe just &amp;ldquo;Authenticate&amp;rdquo; whatever.  If you decide to read up on Peter&amp;#39;s stuff on extending a Base class, we could use a generic  method called &amp;ldquo;authenticate&amp;rdquo; and since we are passing in the things to validate against, it would be easy to create a generic Authenticate method.&lt;br /&gt;  &lt;br /&gt;  If you want to find out more on this topic, be sure to check out &lt;a href=&quot;http://pbell.com/&quot;&gt;Peter Bell&amp;#39;s Blog on Application Generation&lt;/a&gt;.   &lt;/p&gt;  </description><pubDate>Mon, 02 Jul 2007 13:10:42 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2007/07/02/Peter-Bell-For-Dummies--DSLs-Application-Generation-and-more</guid><category>Web Development</category></item><item><title>Transparent images with CSS</title><link>http://ajlcom.instantspot.com/blog/2007/05/24/Transparent-images-with-CSS</link><description>&lt;p&gt;  I have seen style=&amp;quot;opacity:so and so&amp;quot; etc in a few places, but never really took the time to look into it.  But I just recently looked into it a little further and I am pretty wowed with how cool this &amp;#39;little&amp;#39; style attribute is  &lt;/p&gt;  &lt;p&gt;  Basically, we have the ability to take an image, text, (maybe other stuff that I don&amp;#39;t know about) and change its opacity via CSS.   &lt;/p&gt;  &lt;p&gt;  Opacity values range from 0 to 1. 1 being fully opaque, 0 being transparent.  So I guess the comparison would go 25% Opaque = 75% Transparent.  &lt;/p&gt;  &lt;p&gt;  In order for this to work in IE, I had to add &lt;strong&gt;filter:alpha(opacity=75)&lt;/strong&gt; in addition to the &lt;strong&gt;opacity:.75 &lt;/strong&gt;style attribute.  &lt;/p&gt;  &lt;p&gt;  &lt;strong&gt;Examples... &lt;/strong&gt;  &lt;/p&gt;  &lt;div align=&quot;center&quot; style=&quot;width: 450px&quot;&gt;  &lt;img style=&quot;opacity: 0.25;filter:alpha(opacity=25)&quot; src=&quot;http://img296.imageshack.us/img296/814/awesome101bv1.jpg&quot; alt=&quot;&quot; /&gt;  &lt;img style=&quot;opacity: 0.5;filter:alpha(opacity=50)&quot; src=&quot;http://img296.imageshack.us/img296/814/awesome101bv1.jpg&quot; alt=&quot;&quot; /&gt;  &lt;img style=&quot;opacity: 0.75;filter:alpha(opacity=75)&quot; src=&quot;http://img296.imageshack.us/img296/814/awesome101bv1.jpg&quot; alt=&quot;&quot; /&gt;  &lt;img style=&quot;opacity: 1&quot; src=&quot;http://img296.imageshack.us/img296/814/awesome101bv1.jpg&quot; alt=&quot;&quot; /&gt;  &lt;/div&gt;  &lt;p&gt;  &amp;nbsp;  &lt;/p&gt;  &lt;p&gt;  Code used to create the example:  &lt;/p&gt;  &lt;p&gt;  [codeShare maya81c7]  &lt;/p&gt;  &lt;p&gt;  &amp;nbsp;  &lt;/p&gt;  &lt;p&gt;  &lt;strong&gt;NOTE:&lt;/strong&gt; I have not yet used this other than to create this blog post since I thought it was &amp;quot;awesome&amp;quot;.  I have no idea about other browser&amp;#39;s support of this attribute.   &lt;/p&gt;  </description><pubDate>Thu, 24 May 2007 16:10:16 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2007/05/24/Transparent-images-with-CSS</guid><category>Web Development</category></item><item><title>Keep your users on your page.  window.onbeforeunload</title><link>http://ajlcom.instantspot.com/blog/2007/03/29/Keep-your-users-on-your-page--windowonbeforeunload</link><description>&lt;p&gt;  Here at the day job we have a very large mortgage loan application form that, now that we have rewritten it, makes AJAX calls to the bean onChange of each field.   &lt;/p&gt;  &lt;p&gt;  These calls are made asynchronously, which means the user really has no idea that the post is being performed.  (unless they happen to be watching their firebug console)  But, if they ever decided to log out, click on some other link, close their tab, etc...any data being posted at that time could (and probably would) be lost forever.  &lt;/p&gt;  &lt;p&gt;  &amp;nbsp;  &lt;/p&gt;  &lt;p&gt;  &lt;strong&gt;The challenge:  &lt;/strong&gt;Make sure the users don&amp;#39;t leave the page, or submit the application mid AJAX post.   &lt;/p&gt;  &lt;p&gt;  Now, there is no real way to lock a user to the computer and make them wait until the saves are completed.  But we can monitor the state of the AJAX request and, based off of that, decide whether or not to alert the user that they shouldn&amp;#39;t leave the page.  &lt;/p&gt;  &lt;p&gt;  &amp;nbsp;  &lt;/p&gt;  &lt;p&gt;  &lt;strong&gt;The solution:&lt;/strong&gt; (well part of it anyways) window.onbeforeunload  &lt;/p&gt;  &lt;p&gt;  Now, as part of the AJAX call we monitor the readystate and look for a &amp;#39;4&amp;#39; value.  A value of 4 represents a completed request.  (here are the readyState status codes)  &lt;/p&gt;  &lt;p&gt;  [codeshare mar506b7]  &lt;/p&gt;  &lt;p&gt;  As we monitor the readyState and watch for that &amp;#39;4&amp;#39;, we flag a variable I called &amp;#39;completionIndicator&amp;#39;. False on the initial AJAX request, set to True ones a readyState of 4 is returned.  &lt;/p&gt;  &lt;p&gt;  Now that we know whats going on with AJAX, we can decide whether or not to &amp;quot;lock&amp;quot; the user to the form.  What I came up with was the use of &lt;font face=&quot;courier new,courier&quot;&gt;&lt;strong&gt;window.onbeforeunload&lt;/strong&gt;&lt;/font&gt; which is used to execute statements whenever the user exits the document.   &lt;/p&gt;  &lt;p&gt;  So, anytime the users tries to exit the document, we run a method I called checkProgressState().  There I conditionally return a message to &lt;font face=&quot;courier new,courier&quot;&gt;&lt;strong&gt;window.onbeforeunload&lt;/strong&gt;&lt;/font&gt;.  If nothing is returned, no message (confirmation window) will be displayed.  &lt;/p&gt;  &lt;p&gt;  [codeshare marda376]  &lt;/p&gt;  &lt;p&gt;  You will notice I am return a string in that call.  If you return a message to &lt;strong&gt;&lt;font face=&quot;courier new,courier&quot;&gt;window.onbeforeunload&lt;/font&gt; &lt;/strong&gt;it will insert the text between to two default messages on the confirmation box.  &lt;/p&gt;  &lt;p&gt;  &lt;strong&gt;All done right?...&lt;/strong&gt; Um, no.  Now we have to deal with Internet Explorer. (dear bill gates, please stop making my job harder)  &lt;/p&gt;  &lt;p&gt;  Our super cool AJAX&amp;#39;y mortgage loan application form is a super huge form.  All said and done there are now 9 tabs full of questions which we swap in and out all client-side, cool right? Not if you ask Mr. Gates.    &lt;/p&gt;  &lt;p&gt;  Each of our tabs has an anchor tag which fires a few routines onclick to swap out the current content, with the desired tab&amp;#39;s form content.  And luckily for me, IE (both 6 and 7) treated that as a page exit and would thus fire the &lt;font face=&quot;courier new,courier&quot;&gt;&lt;strong&gt;window.onbeforeunload&lt;/strong&gt;&lt;/font&gt; stuff I had working so sweetly in Firefox.  &lt;/p&gt;  &lt;p&gt;  &lt;strong&gt;Hey, I like challenges:&lt;/strong&gt; What can we do to stop IE from being so IE about this?  &lt;/p&gt;  &lt;p&gt;  In order to stop IE from running my &amp;quot;Are you sure you want to leave.?!&amp;quot; stuff each tab click, I had to flag a new variable that would allow me to turn on and off the function from above.  So onclick of a tab, we set a new variable I called &amp;#39;checkProgressFlag&amp;#39; to FALSE, then once my new tab/content were done swapping, set the value back to TRUE.  &lt;/p&gt;  &lt;p&gt;  [codeshare mard6b4b]   &lt;/p&gt;  &lt;p&gt;  Now all of our users filling out the application will at least be warned about why they shouldn&amp;#39;t leave just quite yet.   &lt;/p&gt;  </description><pubDate>Thu, 29 Mar 2007 18:50:52 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2007/03/29/Keep-your-users-on-your-page--windowonbeforeunload</guid><category>Web Development</category></item><item><title>InstantSpot...why have I forsaken thee?!</title><link>http://ajlcom.instantspot.com/blog/2007/03/09/InstantSpotwhy-have-I-forsaken-thee</link><description>&lt;p&gt;  Ok, not really forsaken...but all of my &amp;quot;fun&amp;quot; development has really suffered lately.  Unfortunately InstantSpot is not my full time job (yet!), and as such the whole &amp;quot;work&amp;quot; thing kinda absorbs my time/energy/brain/etc :).   &lt;/p&gt;  &lt;p&gt;  We (we at the day job) just rolled the application we have been grinding out so hopefully my brain will have a little bit of juice left at the end of the day now.    &lt;/p&gt;  &lt;p&gt;  We (the &lt;a href=&quot;http://worldwildweb.biz&quot;&gt;good we&lt;/a&gt;  this time :)) should be rolling a new InstantSpot spin-off site in the very near future leveraging a great deal of the InstantSpot &amp;quot;framework&amp;quot; for lack of a better term.    &lt;/p&gt;  &lt;p&gt;  &amp;nbsp;  &lt;/p&gt;  &lt;hr width=&quot;100%&quot; size=&quot;2&quot; /&gt;  Thanks to Todd Sharp of &lt;a href=&quot;http://cfsilence.com&quot;&gt;cfsilence&lt;/a&gt;  &lt;em&gt; &lt;/em&gt;for this blurb... &lt;em&gt;&amp;quot;InstantSpot is a next generation Social Blogging/Networking site - but  it&amp;#39;s not just a profile page or a blog - it&amp;#39;s much more. InstantSpot is  a completely free entire website for you and your family/friends. You  can blog, interact with your friends via messaging, post photo  galleries, manage an online calendar, even customize the look and feel  of your Spot via the Style Manager. Don&amp;#39;t know CSS? No problem! Head  over to the InstantSpot Design Exchange at &lt;a href=&quot;http://www.isdx.net/&quot; target=&quot;_blank&quot;&gt;http://www.isdx.net&lt;/a&gt;  and check out some of the cool custom CSS templates that our users have  uploaded. There&amp;#39;s a growing library of templates to choose from, and if  you sign up at ISDX you can even preview any of the designs live on  your Spot before taking the plunge and installing it.&amp;quot;&lt;/em&gt;  &lt;p&gt;  &amp;nbsp;  &lt;/p&gt;  </description><pubDate>Fri, 09 Mar 2007 16:14:23 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2007/03/09/InstantSpotwhy-have-I-forsaken-thee</guid><category>Web Development</category></item><item><title>3 ways to become a better _______  (programmer)</title><link>http://ajlcom.instantspot.com/blog/2007/01/09/3-ways-to-become-a-better---programmer</link><description>&lt;strong&gt;   1.&lt;/strong&gt;  &lt;strong&gt;Love what you do:&lt;/strong&gt;  I put this as the #1 thing you must do if you want to really increase your skillset.  If you are just trying to do it for your job, or to get a raise, then I don&amp;#39;t know the answer for you.  But this is THE essential ingredient in this process.&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;  2.&lt;/strong&gt;  &lt;strong&gt;Do a lot of it:&lt;/strong&gt;  This one is probably the most difficult one of the bunch.  Nobody really wants to sacrifice their free time or miss their favorite TV show.  But, there is just no replacement for experience.  If you are new to ColdFusion don&amp;#39;t worry...there are a lot of &amp;quot;experienced&amp;quot; developers out there who just mail it in on a daily basis.  Give yourself 6 months of intense programming and you will begin to feel like not such a noob after all.&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;  3.&lt;/strong&gt;  &lt;strong&gt;Finally, do to the hard stuff:&lt;/strong&gt;  Pretty soon (after step 2) things are going to start feeling easy.  At this point, many people will plateau and just stop progressing past their comfort level.  And for many, this is fine and might actually be a very advanced level.  I know I am guilty of not always pushing myself because I am (insert excuse here).    &lt;br /&gt;  &lt;br /&gt;  My #3 stuff:  I hope to get my hands dirty with Flex this year, and continue to sharpen my Javascript skills.&lt;br /&gt;  </description><pubDate>Tue, 09 Jan 2007 13:50:51 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2007/01/09/3-ways-to-become-a-better---programmer</guid><category>Web Development</category></item><item><title>IE7 caching dynamic XML (for use with SPRY)</title><link>http://ajlcom.instantspot.com/blog/2007/01/05/IE7-caching-dynamic-XML-for-use-with-SPRY</link><description>I have only used Spry a few times so this might be a common issue.  I have recently started doing the cross-browser testing for this latest code, I noticed that IE7 is caching the XML I am generating for my Spry datasources.  I even tried using the whole cfheader no-cache routine...  &lt;code&gt;  &lt;cfheader name=&quot;Cache-Control&quot; value= &quot;no-cache&quot;&gt;  &lt;cfheader name=&quot;Expires&quot; value=&quot;0&quot;&gt;  &lt;cfheader name=&quot;Pragma&quot; value=&quot;no-cache&quot;&gt;  &lt;/code&gt;  &lt;p/&gt;  What I ended up doing to prevent this from happening was to append the tickCount to the XML call as such:  &lt;code&gt;  var MySpryDS = new Spry.Data.XMLDataSet(&quot;&quot;/index.cfm/event/Data.xml/#getTickCount()#&quot;&quot;, &quot;&quot;loanapps/loanapp&quot;&quot;);  &lt;/code&gt;  &lt;p/&gt;  Is there any better trick to prevent IE from being so &quot;IE&quot; about this?</description><pubDate>Fri, 05 Jan 2007 14:18:57 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2007/01/05/IE7-caching-dynamic-XML-for-use-with-SPRY</guid><category>Web Development</category></item><item><title>One super easy way to improve user feel</title><link>http://ajlcom.instantspot.com/blog/2006/12/28/One-super-easy-way-to-improve-user-feel</link><description>&lt;p/&gt;  Lately I have been developing a ton of user control panels and I have started using a very simple technique to improve the user&apos;s impression of said control panel.    &lt;br/&gt;&lt;br/&gt;  &lt;span style=&quot;font-size:9px;font-weight:bold&quot;&gt;(Note: This is by no means a technological breakthrough, but it happens to create a really nice feel as you click through the app.)&lt;/span&gt;  &lt;p/&gt;  The most recent administrative control panel I have developed makes use of this technique and it, in my opinion, does a really nice job of adding some perceived quickness/responsiveness on some events that do a lot of crunching behind the scenes.   &lt;p/&gt;  Basically in the main template page-view (using Mach-II here), where I would normally output the contentArg of the page&apos;s content, I have a swappable div there along with an AJAX loading gif image.&lt;br/&gt;  &lt;code&gt;  &lt;div id=&quot;loading&quot; &gt;   &lt;h3&gt;Loading...&lt;/h3&gt;&lt;br /&gt;   &lt;img src=&quot;/images/loading.gif&quot; /&gt;  &lt;/div&gt;  &lt;div id=&quot;bodycontent&quot;&gt;   &lt;cfoutput&gt;#event.getArg(&quot;bodycontent&quot;)#&lt;/cfoutput&gt;  &lt;/div&gt;   &lt;/code&gt;  &lt;br/&gt;  So, on any click within the control panel, I do an onclick event to swap the two divs.  This gives the impression of immediate response to my action (the click).  &lt;br/&gt;&lt;br/&gt;  &lt;code&gt;  &lt;a onclick=&quot;showLoading();&quot; href=&quot;/index.cfm/event/editrates&quot;&gt;Edit Rates&lt;/a&gt;  &lt;/code&gt;</description><pubDate>Thu, 28 Dec 2006 22:10:52 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2006/12/28/One-super-easy-way-to-improve-user-feel</guid><category>Web Development</category></item><item><title>Robots and main page accessibility</title><link>http://ajlcom.instantspot.com/blog/2005/11/15/Robots-and-main-page-accessibility</link><description>On my quest towards e-stardom (aka a relevant and content-rich website), I realized that the navigation towards my older &amp;quot;news items&amp;quot; was somewhat lacking.  My solution for this problem was to create a side bar menu that would contain all of the news item titles in descending date order (aka newest first). &lt;br /&gt;  &lt;br /&gt;  A day or two after this change, I began to notice a positive side-effect to including all of these titles as links on the main page...The robots (spiders) were crawling all through my site!  I&amp;#39;m not 100% sure, but I can&amp;#39;t imagine how this increased indexing would hurt my chances of being returned in some search results.&lt;br /&gt;  &lt;br /&gt;  In a possibly related subject, a Google search for &amp;#39;Aaron Lynch&amp;#39; now returns this page in the top 10 search results (#6 as of this entry) and an MSN search returns &lt;a href=&quot;http://www.aaronjlynch.com&quot;&gt;www.AaronJLynch.com&lt;/a&gt; as #3!&lt;br /&gt;  &lt;br /&gt;  Does anybody want my autograph?  &lt;img src=&quot;/fckeditor/editor/images/smiley/msn/wink_smile.gif&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;  &lt;br /&gt;  UPDATE 1/25/06:  Either Google has changed my ranking somehow, or my switch to BlogCFC&amp;nbsp; has harmed my accessibility somehow.  I now turn up on like page 5 or something terrible.  Back to the drawing board!    </description><pubDate>Tue, 15 Nov 2005 06:00:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2005/11/15/Robots-and-main-page-accessibility</guid><category>SEO</category></item></channel></rss>